@assistant-ui/core 0.3.15 → 0.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +8 -2
- package/dist/internal.js +9 -3
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +3 -2
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +5 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +141 -28
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +1 -1
- package/dist/model-context/interactable-composer-metadata.js +1 -1
- package/dist/model-context/interactable-composer-metadata.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/registry.js +9 -28
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +26 -0
- package/dist/model-context/tool-call-text.d.ts.map +1 -0
- package/dist/model-context/tool-call-text.js +18 -0
- package/dist/model-context/tool-call-text.js.map +1 -0
- package/dist/react/RuntimeAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.js +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.js +25 -21
- 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 +60 -178
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +15 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +263 -194
- 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 +6 -2
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +4 -2
- package/dist/react/index.js +2 -1
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +60 -178
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +24 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +138 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -0
- package/dist/react/model-context/toolbox.d.ts +2 -14
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.js +1 -13
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js +37 -7
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js +31 -5
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.js +10 -36
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.js +2 -8
- package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +2 -4
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +4 -3
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js +4 -3
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +7 -6
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +2 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +3 -3
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +5 -4
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -5
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +44 -22
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +7 -6
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +102 -117
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -6
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +3 -3
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.js +2 -12
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.js +2 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -10
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +43 -85
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +5 -1
- 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/createCloudThreadListAdapter.d.ts +29 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +159 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +12 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js +10 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -9
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +16 -153
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +2 -1
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +6 -25
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +33 -233
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +14 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +7 -3
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +2 -0
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +2 -2
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +1 -1
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +9 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +5 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +2 -3
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +14 -29
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +4 -6
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +5 -11
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +14 -2
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +16 -2
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +2 -1
- package/dist/runtime/internal.js +2 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +1 -1
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +1 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +12 -0
- package/dist/runtime/queue/queue-item.d.ts.map +1 -0
- package/dist/runtime/queue/queue-item.js +6 -0
- package/dist/runtime/queue/queue-item.js.map +1 -0
- package/dist/runtime/utils/abortable-thread-load.d.ts +15 -0
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -0
- package/dist/runtime/utils/abortable-thread-load.js +35 -0
- package/dist/runtime/utils/abortable-thread-load.js.map +1 -0
- package/dist/runtime/utils/attachment-add-operations.d.ts +18 -0
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -0
- package/dist/runtime/utils/attachment-add-operations.js +43 -0
- package/dist/runtime/utils/attachment-add-operations.js.map +1 -0
- package/dist/runtime/utils/auto-status.d.ts +7 -2
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +13 -3
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +48 -0
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -0
- package/dist/runtime/utils/external-message-conversion.js +222 -0
- package/dist/runtime/utils/external-message-conversion.js.map +1 -0
- package/dist/runtime/utils/external-store-message.d.ts +2 -1
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/external-store-message.js +2 -1
- package/dist/runtime/utils/external-store-message.js.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +30 -0
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -0
- package/dist/runtime/utils/message-repository-session.js +130 -0
- package/dist/runtime/utils/message-repository-session.js.map +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -4
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +20 -0
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -0
- package/dist/runtime/utils/pending-tool-calls.js +22 -0
- package/dist/runtime/utils/pending-tool-calls.js.map +1 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.js +12 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +3 -10
- 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/runtime/utils/tool-call-tree.d.ts +39 -0
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -0
- package/dist/runtime/utils/tool-call-tree.js +85 -0
- package/dist/runtime/utils/tool-call-tree.js.map +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts +29 -2
- 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 +2 -5
- 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 +3 -10
- 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 +21 -2
- 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 +154 -46
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +4 -2
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +23 -3
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +12 -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 +107 -14
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +9 -0
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title.js +6 -0
- package/dist/runtimes/remote-thread-list/title.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +6 -5
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +31 -8
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +98 -59
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/external-thread.d.ts +1 -1
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +85 -103
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.js +2 -2
- 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 +33 -12
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.js +1 -1
- package/dist/store/clients/thread-selection-events.js +1 -1
- package/dist/store/index.d.ts +6 -3
- package/dist/store/index.js +2 -1
- package/dist/store/internal.d.ts +2 -2
- package/dist/store/internal.js +2 -2
- package/dist/store/primitive-predicates.d.ts +4 -1
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +9 -1
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +124 -105
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +3 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
- package/dist/store/scope-registration.d.ts +1 -1
- package/dist/store/scopes/composer.d.ts +2 -1
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +1 -1
- package/dist/store/scopes/part.d.ts +6 -3
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +2 -9
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.js +0 -6
- package/dist/subscribable/subscribable.d.ts +8 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +24 -16
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/message.d.ts +47 -4
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +7 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/data-url.d.ts +14 -1
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/data-url.js +13 -1
- package/dist/utils/data-url.js.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +5 -0
- package/dist/utils/invoke-user-callback.d.ts.map +1 -0
- package/dist/utils/invoke-user-callback.js +19 -0
- package/dist/utils/invoke-user-callback.js.map +1 -0
- package/dist/utils/normalizePartStatus.js.map +1 -1
- package/package.json +12 -17
- package/src/index.ts +6 -1
- package/src/internal.ts +20 -0
- package/src/model-context/frame/host.test.ts +91 -7
- package/src/model-context/frame/host.ts +7 -2
- package/src/model-context/frame/provider.test.ts +484 -13
- package/src/model-context/frame/provider.ts +205 -35
- package/src/model-context/interactable-composer-metadata.ts +1 -1
- package/src/model-context/registry.test.ts +44 -0
- package/src/model-context/registry.ts +13 -35
- package/src/model-context/tool-call-text.test.ts +67 -0
- package/src/model-context/tool-call-text.ts +67 -0
- package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
- package/src/react/client/InMemoryThreadList.test.tsx +49 -0
- package/src/react/client/InMemoryThreadList.ts +7 -1
- package/src/react/client/Interactables.ts +19 -178
- package/src/react/client/RemoteThreadList.background.test.ts +384 -0
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +274 -0
- package/src/react/client/RemoteThreadList.test.ts +369 -1
- package/src/react/client/RemoteThreadList.ts +320 -142
- package/src/react/client/Tools.ts +7 -1
- package/src/react/index.ts +4 -0
- package/src/react/interactables-legacy/Interactables.ts +20 -177
- package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +161 -0
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +206 -0
- package/src/react/model-context/modelContextHooks.test.tsx +131 -0
- package/src/react/model-context/toolbox.test.ts +9 -9
- package/src/react/model-context/toolbox.ts +9 -36
- package/src/react/model-context/useAssistantContext.ts +4 -2
- package/src/react/model-context/useAuiToolOverrides.ts +4 -2
- package/src/react/model-context/useInlineRender.test.tsx +48 -0
- package/src/react/model-context/useInlineRender.ts +14 -10
- package/src/react/primitive-hooks/useMessageError.ts +2 -19
- package/src/react/primitive-hooks/useThreadListLoadMore.ts +2 -3
- package/src/react/primitives/composer/ComposerAttachments.test.tsx +76 -0
- package/src/react/primitives/composer/ComposerAttachments.tsx +9 -4
- package/src/react/primitives/composer/ComposerQueue.test.tsx +72 -0
- package/src/react/primitives/composer/ComposerQueue.tsx +7 -4
- package/src/react/primitives/message/MessageAttachments.test.tsx +107 -37
- package/src/react/primitives/message/MessageAttachments.tsx +10 -7
- package/src/react/primitives/message/MessageGroupedParts.tsx +2 -2
- package/src/react/primitives/message/MessageParts.tsx +3 -3
- package/src/react/primitives/threadList/ThreadListItems.test.tsx +99 -0
- package/src/react/primitives/threadList/ThreadListItems.tsx +8 -5
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +94 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +72 -31
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +169 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +140 -124
- package/src/react/runtimes/RemoteThreadResource.ts +1 -4
- package/src/react/runtimes/assistant-transport/runManager.ts +4 -17
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +51 -2
- package/src/react/runtimes/assistant-transport/useLatestRef.ts +2 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +45 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +157 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +82 -176
- package/src/react/runtimes/cloud/auiV0.ts +5 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +88 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +236 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.test.ts +37 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts +18 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +90 -1
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +33 -238
- package/src/react/runtimes/external-message-converter.test.ts +0 -14
- package/src/react/runtimes/external-message-converter.test.tsx +77 -0
- package/src/react/runtimes/external-message-converter.ts +59 -481
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +24 -6
- package/src/react/types/MessagePartComponentTypes.ts +7 -3
- package/src/react/types/scopes/tools.ts +2 -0
- package/src/runtime/api/composer-runtime.ts +1 -1
- package/src/runtime/api/message-part-runtime.ts +3 -3
- package/src/runtime/api/message-runtime.test.ts +28 -1
- package/src/runtime/api/thread-list-runtime.ts +25 -1
- package/src/runtime/base/base-composer-runtime-core.ts +20 -40
- package/src/runtime/base/base-thread-runtime-core.test.ts +110 -3
- package/src/runtime/base/base-thread-runtime-core.ts +16 -15
- package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -4
- package/src/runtime/interfaces/composer-runtime-core.ts +1 -1
- package/src/runtime/interfaces/thread-list-runtime-core.ts +20 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +18 -2
- package/src/runtime/internal.ts +5 -0
- package/src/runtime/queue/external-thread-queue-adapter.ts +1 -1
- package/src/runtime/queue/message-queue.ts +1 -4
- package/src/runtime/queue/queue-item.ts +10 -0
- package/src/runtime/utils/abortable-thread-load.test.ts +87 -0
- package/src/runtime/utils/abortable-thread-load.ts +53 -0
- package/src/runtime/utils/attachment-add-operations.ts +59 -0
- package/src/runtime/utils/auto-status.test.ts +57 -0
- package/src/runtime/utils/auto-status.ts +46 -1
- package/src/runtime/utils/external-message-conversion.test.ts +210 -0
- package/src/runtime/utils/external-message-conversion.ts +510 -0
- package/src/runtime/utils/external-store-message.ts +2 -0
- package/src/runtime/utils/message-repository-session.test.ts +195 -0
- package/src/runtime/utils/message-repository-session.ts +176 -0
- package/src/runtime/utils/message-repository.ts +7 -4
- package/src/runtime/utils/pending-tool-calls.test.ts +57 -0
- package/src/runtime/utils/pending-tool-calls.ts +35 -0
- package/src/runtime/utils/resolveToolApprovalResponse.test.ts +73 -0
- package/src/runtime/utils/resolveToolApprovalResponse.ts +27 -6
- package/src/runtime/utils/thread-message-like.ts +4 -10
- package/src/runtime/utils/tool-call-tree.test.ts +191 -0
- package/src/runtime/utils/tool-call-tree.ts +97 -0
- package/src/runtimes/external-store/external-store-adapter.ts +38 -2
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +6 -14
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +231 -61
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +201 -4
- package/src/runtimes/local/local-thread-runtime-core.ts +53 -4
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +149 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +178 -16
- package/src/runtimes/remote-thread-list/title.ts +3 -0
- package/src/runtimes/remote-thread-list/types.ts +6 -5
- package/src/runtimes/tool-invocations/EDGE_CASES.md +125 -3
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +856 -102
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +145 -89
- package/src/store/clients/external-thread.ts +30 -69
- package/src/store/clients/single-thread-list.ts +4 -1
- package/src/store/clients/suggestions.test.ts +185 -0
- package/src/store/clients/suggestions.ts +42 -35
- package/src/store/index.ts +4 -0
- package/src/store/internal.ts +2 -0
- package/src/store/primitive-predicates.ts +35 -0
- package/src/store/runtime-clients/thread-list-runtime-client.ts +16 -2
- package/src/store/runtime-clients/useSubscribable.ts +8 -2
- package/src/store/scopes/message.ts +1 -1
- package/src/store/scopes/part.ts +6 -3
- package/src/store/scopes/queue-item.ts +2 -9
- package/src/subscribable/subscribable.test.ts +50 -0
- package/src/subscribable/subscribable.ts +33 -21
- package/src/tests/MessageRepository.test.ts +77 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +305 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +78 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +52 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +158 -0
- package/src/tests/external-store-optimistic-id.test.ts +79 -0
- package/src/tests/external-store-repository-instance.test.ts +166 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +186 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +642 -0
- package/src/tests/external-thread-attachments.test.tsx +258 -1
- package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
- package/src/tests/single-thread-list-item.test.tsx +47 -0
- package/src/tests/thread-message-like.test.ts +39 -1
- package/src/tests/thread-switch-events.test.tsx +397 -2
- package/src/types/message.ts +58 -5
- package/src/utils/data-url.test.ts +52 -1
- package/src/utils/data-url.ts +21 -0
- package/src/utils/invoke-user-callback.test.ts +82 -0
- package/src/utils/invoke-user-callback.ts +31 -0
- package/src/utils/normalizePartStatus.ts +1 -1
- package/dist/store/scopes/queue-item.js.map +0 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { isRecord } from "../../../utils/json/is-json.js";
|
|
2
|
+
import { InMemoryThreadListAdapter } from "../../../runtimes/remote-thread-list/adapter/in-memory.js";
|
|
3
|
+
import { useAssistantCloudThreadHistoryAdapter } from "./AssistantCloudThreadHistoryAdapter.js";
|
|
4
|
+
import { CloudFileAttachmentAdapter } from "./CloudFileAttachmentAdapter.js";
|
|
5
|
+
import { useMemo, useState } from "@assistant-ui/tap/react-shim";
|
|
6
|
+
import { AssistantCloud } from "assistant-cloud";
|
|
7
|
+
//#region src/react/runtimes/cloud/createCloudThreadListAdapter.ts
|
|
8
|
+
const toCustom = (value) => isRecord(value) ? value : void 0;
|
|
9
|
+
const baseUrl = typeof process !== "undefined" && process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;
|
|
10
|
+
const autoCloud = baseUrl ? new AssistantCloud({
|
|
11
|
+
baseUrl,
|
|
12
|
+
anonymous: true
|
|
13
|
+
}) : void 0;
|
|
14
|
+
const useCloudRuntimeAdapters = (cloudRef) => {
|
|
15
|
+
const history = useAssistantCloudThreadHistoryAdapter(cloudRef);
|
|
16
|
+
const [attachments] = useState(() => new CloudFileAttachmentAdapter(() => cloudRef.current));
|
|
17
|
+
return useMemo(() => ({
|
|
18
|
+
history,
|
|
19
|
+
attachments
|
|
20
|
+
}), [history, attachments]);
|
|
21
|
+
};
|
|
22
|
+
const CLOUD_THREAD_PAGE_SIZE = 20;
|
|
23
|
+
const parseListCursor = (after) => {
|
|
24
|
+
const fallback = {
|
|
25
|
+
activeCursor: after,
|
|
26
|
+
archivedCursor: void 0,
|
|
27
|
+
activeExhausted: false,
|
|
28
|
+
archivedExhausted: false
|
|
29
|
+
};
|
|
30
|
+
if (!after || !after.startsWith("{")) return fallback;
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(after);
|
|
33
|
+
if (!isRecord(parsed)) return fallback;
|
|
34
|
+
return {
|
|
35
|
+
activeCursor: typeof parsed.a === "string" ? parsed.a : void 0,
|
|
36
|
+
archivedCursor: typeof parsed.r === "string" ? parsed.r : void 0,
|
|
37
|
+
activeExhausted: parsed.ae === true,
|
|
38
|
+
archivedExhausted: parsed.re === true
|
|
39
|
+
};
|
|
40
|
+
} catch {
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Builds the `RemoteThreadListAdapter` for an assistant-cloud backend without
|
|
46
|
+
* requiring a hook call site, so plain code (a Vue or Svelte setup function,
|
|
47
|
+
* a module-level config) can construct it. Options are read through the
|
|
48
|
+
* getter on every call, so a stable adapter can follow changing `create` and
|
|
49
|
+
* `delete` callbacks; swapping to a different `cloud` instance requires a new
|
|
50
|
+
* adapter (and `reload()` on the list). Without a `cloud` instance (and
|
|
51
|
+
* without `NEXT_PUBLIC_ASSISTANT_BASE_URL`), the adapter falls back to an
|
|
52
|
+
* in-memory list. `useCloudThreadListAdapter` wraps this for the React
|
|
53
|
+
* hook signature.
|
|
54
|
+
*/
|
|
55
|
+
const createCloudThreadListAdapter = (options) => {
|
|
56
|
+
const getOptions = typeof options === "function" ? options : () => options;
|
|
57
|
+
const unstable_useAdapters = function useCloudAdapters() {
|
|
58
|
+
return useCloudRuntimeAdapters({ get current() {
|
|
59
|
+
return getOptions().cloud ?? autoCloud;
|
|
60
|
+
} });
|
|
61
|
+
};
|
|
62
|
+
const cloud = getOptions().cloud ?? autoCloud;
|
|
63
|
+
if (!cloud) {
|
|
64
|
+
const inMemory = new InMemoryThreadListAdapter();
|
|
65
|
+
inMemory.initialize = async (threadId) => {
|
|
66
|
+
return {
|
|
67
|
+
remoteId: threadId,
|
|
68
|
+
externalId: (await getOptions().create?.())?.externalId
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
return inMemory;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
list: async ({ after } = {}) => {
|
|
75
|
+
const { activeCursor, archivedCursor, activeExhausted, archivedExhausted } = parseListCursor(after);
|
|
76
|
+
const [{ threads: activeThreads }, { threads: archivedThreads }] = await Promise.all([activeExhausted ? Promise.resolve({ threads: [] }) : cloud.threads.list({
|
|
77
|
+
limit: CLOUD_THREAD_PAGE_SIZE,
|
|
78
|
+
...activeCursor ? { after: activeCursor } : {}
|
|
79
|
+
}), archivedExhausted ? Promise.resolve({ threads: [] }) : cloud.threads.list({
|
|
80
|
+
is_archived: true,
|
|
81
|
+
limit: CLOUD_THREAD_PAGE_SIZE,
|
|
82
|
+
...archivedCursor ? { after: archivedCursor } : {}
|
|
83
|
+
})]);
|
|
84
|
+
const activeNext = !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE ? activeThreads.at(-1)?.id : void 0;
|
|
85
|
+
const archivedNext = !archivedExhausted && archivedThreads.length === CLOUD_THREAD_PAGE_SIZE ? archivedThreads.at(-1)?.id : void 0;
|
|
86
|
+
return {
|
|
87
|
+
threads: [...activeThreads, ...archivedThreads].map((t) => ({
|
|
88
|
+
status: t.is_archived ? "archived" : "regular",
|
|
89
|
+
remoteId: t.id,
|
|
90
|
+
title: t.title,
|
|
91
|
+
lastMessageAt: t.last_message_at ? new Date(t.last_message_at) : void 0,
|
|
92
|
+
externalId: t.external_id ?? void 0,
|
|
93
|
+
custom: toCustom(t.metadata)
|
|
94
|
+
})),
|
|
95
|
+
nextCursor: activeNext || archivedNext ? JSON.stringify({
|
|
96
|
+
a: activeNext,
|
|
97
|
+
r: archivedNext,
|
|
98
|
+
...activeNext === void 0 ? { ae: true } : {},
|
|
99
|
+
...archivedNext === void 0 ? { re: true } : {}
|
|
100
|
+
}) : void 0
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
initialize: async () => {
|
|
104
|
+
const t = await (getOptions().create?.() ?? Promise.resolve());
|
|
105
|
+
const external_id = t ? t.externalId : void 0;
|
|
106
|
+
const { thread_id: remoteId } = await cloud.threads.create({
|
|
107
|
+
last_message_at: /* @__PURE__ */ new Date(),
|
|
108
|
+
external_id
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
externalId: external_id,
|
|
112
|
+
remoteId
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
rename: async (threadId, newTitle) => {
|
|
116
|
+
return cloud.threads.update(threadId, { title: newTitle });
|
|
117
|
+
},
|
|
118
|
+
updateCustom: async (threadId, custom) => {
|
|
119
|
+
return cloud.threads.update(threadId, { metadata: custom ?? null });
|
|
120
|
+
},
|
|
121
|
+
archive: async (threadId) => {
|
|
122
|
+
return cloud.threads.update(threadId, { is_archived: true });
|
|
123
|
+
},
|
|
124
|
+
unarchive: async (threadId) => {
|
|
125
|
+
return cloud.threads.update(threadId, { is_archived: false });
|
|
126
|
+
},
|
|
127
|
+
delete: async (threadId) => {
|
|
128
|
+
await getOptions().delete?.(threadId);
|
|
129
|
+
return cloud.threads.delete(threadId);
|
|
130
|
+
},
|
|
131
|
+
generateTitle: async (threadId, messages) => {
|
|
132
|
+
const filteredMessages = messages.map((msg) => ({
|
|
133
|
+
...msg,
|
|
134
|
+
content: msg.content.filter((part) => part.type === "text" || part.type === "tool-call")
|
|
135
|
+
}));
|
|
136
|
+
return cloud.runs.stream({
|
|
137
|
+
thread_id: threadId,
|
|
138
|
+
assistant_id: "system/thread_title",
|
|
139
|
+
messages: filteredMessages
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
fetch: async (threadId) => {
|
|
143
|
+
const thread = await cloud.threads.get(threadId);
|
|
144
|
+
return {
|
|
145
|
+
status: thread.is_archived ? "archived" : "regular",
|
|
146
|
+
remoteId: thread.id,
|
|
147
|
+
title: thread.title,
|
|
148
|
+
lastMessageAt: thread.last_message_at ? new Date(thread.last_message_at) : void 0,
|
|
149
|
+
externalId: thread.external_id ?? void 0,
|
|
150
|
+
custom: toCustom(thread.metadata)
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
unstable_useAdapters
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
//#endregion
|
|
157
|
+
export { autoCloud, createCloudThreadListAdapter, useCloudRuntimeAdapters };
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=createCloudThreadListAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCloudThreadListAdapter.js","names":["process","env","Record","RefObject","useMemo","useState","AssistantCloud","RemoteThreadListAdapter","RuntimeAdapters","InMemoryThreadListAdapter","useAssistantCloudThreadHistoryAdapter","CloudFileAttachmentAdapter","isRecord","ThreadData","externalId","CloudThreadListAdapterOptions","cloud","create","Promise","delete","threadId","toCustom","value","undefined","baseUrl","NEXT_PUBLIC_ASSISTANT_BASE_URL","autoCloud","anonymous","useCloudRuntimeAdapters","cloudRef","history","attachments","current","CLOUD_THREAD_PAGE_SIZE","CloudListCursor","activeCursor","archivedCursor","activeExhausted","archivedExhausted","parseListCursor","after","fallback","startsWith","parsed","JSON","parse","a","r","ae","re","createCloudThreadListAdapter","options","getOptions","unstable_useAdapters","useCloudAdapters","inMemory","initialize","result","remoteId","list","threads","activeThreads","archivedThreads","all","resolve","limit","is_archived","activeNext","length","at","id","archivedNext","map","t","status","const","title","lastMessageAt","last_message_at","Date","external_id","custom","metadata","nextCursor","stringify","createTask","thread_id","rename","newTitle","update","updateCustom","archive","unarchive","generateTitle","messages","filteredMessages","msg","content","filter","part","type","runs","stream","assistant_id","fetch","thread","get"],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapter.ts"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport { type RefObject, useMemo, useState } from \"react\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport type {\n RemoteThreadListAdapter,\n RuntimeAdapters,\n} from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\nexport type CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nexport const autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nexport const useCloudRuntimeAdapters = (\n cloudRef: RefObject<AssistantCloud>,\n): RuntimeAdapters => {\n const history = useAssistantCloudThreadHistoryAdapter(cloudRef);\n const [attachments] = useState(\n () => new CloudFileAttachmentAdapter(() => cloudRef.current),\n );\n return useMemo(\n () => ({\n history,\n attachments,\n }),\n [history, attachments],\n );\n};\n\nconst CLOUD_THREAD_PAGE_SIZE = 20;\n\ntype CloudListCursor = {\n activeCursor: string | undefined;\n archivedCursor: string | undefined;\n activeExhausted: boolean;\n archivedExhausted: boolean;\n};\n\nconst parseListCursor = (after: string | undefined): CloudListCursor => {\n const fallback: CloudListCursor = {\n activeCursor: after,\n archivedCursor: undefined,\n activeExhausted: false,\n archivedExhausted: false,\n };\n if (!after || !after.startsWith(\"{\")) return fallback;\n try {\n const parsed = JSON.parse(after);\n if (!isRecord(parsed)) return fallback;\n return {\n activeCursor: typeof parsed.a === \"string\" ? parsed.a : undefined,\n archivedCursor: typeof parsed.r === \"string\" ? parsed.r : undefined,\n activeExhausted: parsed.ae === true,\n archivedExhausted: parsed.re === true,\n };\n } catch {\n return fallback;\n }\n};\n\n/**\n * Builds the `RemoteThreadListAdapter` for an assistant-cloud backend without\n * requiring a hook call site, so plain code (a Vue or Svelte setup function,\n * a module-level config) can construct it. Options are read through the\n * getter on every call, so a stable adapter can follow changing `create` and\n * `delete` callbacks; swapping to a different `cloud` instance requires a new\n * adapter (and `reload()` on the list). Without a `cloud` instance (and\n * without `NEXT_PUBLIC_ASSISTANT_BASE_URL`), the adapter falls back to an\n * in-memory list. `useCloudThreadListAdapter` wraps this for the React\n * hook signature.\n */\nexport const createCloudThreadListAdapter = (\n options:\n | CloudThreadListAdapterOptions\n | (() => CloudThreadListAdapterOptions),\n): RemoteThreadListAdapter => {\n const getOptions = typeof options === \"function\" ? options : () => options;\n\n const unstable_useAdapters = function useCloudAdapters(): RuntimeAdapters {\n return useCloudRuntimeAdapters({\n get current() {\n return getOptions().cloud ?? autoCloud!;\n },\n });\n };\n\n const cloud = getOptions().cloud ?? autoCloud;\n if (!cloud) {\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await getOptions().create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n return {\n list: async ({ after } = {}) => {\n const {\n activeCursor,\n archivedCursor,\n activeExhausted,\n archivedExhausted,\n } = parseListCursor(after);\n const [{ threads: activeThreads }, { threads: archivedThreads }] =\n await Promise.all([\n activeExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(activeCursor ? { after: activeCursor } : {}),\n }),\n archivedExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n is_archived: true,\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(archivedCursor ? { after: archivedCursor } : {}),\n }),\n ]);\n const activeNext =\n !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? activeThreads.at(-1)?.id\n : undefined;\n const archivedNext =\n !archivedExhausted && archivedThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? archivedThreads.at(-1)?.id\n : undefined;\n const threads = [...activeThreads, ...archivedThreads];\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? (\"archived\" as const) : (\"regular\" as const),\n remoteId: t.id,\n title: t.title,\n lastMessageAt: t.last_message_at\n ? new Date(t.last_message_at)\n : undefined,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n nextCursor:\n activeNext || archivedNext\n ? JSON.stringify({\n a: activeNext,\n r: archivedNext,\n ...(activeNext === undefined ? { ae: true } : {}),\n ...(archivedNext === undefined ? { re: true } : {}),\n })\n : undefined,\n };\n },\n\n initialize: async () => {\n const createTask = getOptions().create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await getOptions().delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived\n ? (\"archived\" as const)\n : (\"regular\" as const),\n remoteId: thread.id,\n title: thread.title,\n lastMessageAt: thread.last_message_at\n ? new Date(thread.last_message_at)\n : undefined,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_useAdapters,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts
|
|
2
|
+
type ThreadData = {
|
|
3
|
+
externalId: string | undefined;
|
|
4
|
+
};
|
|
5
|
+
type ThreadListItem = {
|
|
6
|
+
source: unknown;
|
|
7
|
+
initialize: () => Promise<ThreadData>;
|
|
8
|
+
};
|
|
9
|
+
declare const createCloudThreadListAdapterCreateFallback: (create: (() => Promise<ThreadData>) | undefined, threadListItem: ThreadListItem) => (() => Promise<ThreadData>);
|
|
10
|
+
//#endregion
|
|
11
|
+
export { createCloudThreadListAdapterCreateFallback };
|
|
12
|
+
//# sourceMappingURL=createCloudThreadListAdapterCreateFallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCloudThreadListAdapterCreateFallback.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts"],"mappings":";KAAK;EACH;;KAGG;EACH;EACA,kBAAkB,QAAQ;;cAGf,6CACX,eAAe,QAAQ,0BACvB,gBAAgB,0BACR,QAAQ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts
|
|
2
|
+
const createCloudThreadListAdapterCreateFallback = (create, threadListItem) => async function createThread() {
|
|
3
|
+
if (create) return create();
|
|
4
|
+
if (threadListItem.source) return threadListItem.initialize();
|
|
5
|
+
return { externalId: void 0 };
|
|
6
|
+
};
|
|
7
|
+
//#endregion
|
|
8
|
+
export { createCloudThreadListAdapterCreateFallback };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=createCloudThreadListAdapterCreateFallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCloudThreadListAdapterCreateFallback.js","names":["ThreadData","externalId","ThreadListItem","source","initialize","Promise","createCloudThreadListAdapterCreateFallback","create","threadListItem","createThread","undefined"],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts"],"sourcesContent":["type ThreadData = {\n externalId: string | undefined;\n};\n\ntype ThreadListItem = {\n source: unknown;\n initialize: () => Promise<ThreadData>;\n};\n\nexport const createCloudThreadListAdapterCreateFallback = (\n create: (() => Promise<ThreadData>) | undefined,\n threadListItem: ThreadListItem,\n): (() => Promise<ThreadData>) =>\n async function createThread() {\n if (create) return create();\n if (threadListItem.source) return threadListItem.initialize();\n return { externalId: undefined };\n };\n"],"mappings":";AASA,MAAaM,8CACXC,QACAC,mBAEA,eAAeC,eAAe;CAC5B,IAAIF,QAAQ,OAAOA,OAAO;CAC1B,IAAIC,eAAeL,QAAQ,OAAOK,eAAeJ,WAAW;CAC5D,OAAO,EAAEH,YAAYS,KAAAA,EAAU;AACjC"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { RemoteThreadListAdapter } from "../../../runtimes/remote-thread-list/types.js";
|
|
2
|
-
import {
|
|
2
|
+
import { CloudThreadListAdapterOptions } from "./createCloudThreadListAdapter.js";
|
|
3
3
|
//#region src/react/runtimes/cloud/useCloudThreadListAdapter.d.ts
|
|
4
|
-
type ThreadData = {
|
|
5
|
-
externalId: string | undefined;
|
|
6
|
-
};
|
|
7
|
-
type CloudThreadListAdapterOptions = {
|
|
8
|
-
cloud?: AssistantCloud | undefined;
|
|
9
|
-
create?: (() => Promise<ThreadData>) | undefined;
|
|
10
|
-
delete?: ((threadId: string) => Promise<void>) | undefined;
|
|
11
|
-
};
|
|
12
4
|
declare const useCloudThreadListAdapter: (adapter: CloudThreadListAdapterOptions) => RemoteThreadListAdapter;
|
|
13
5
|
//#endregion
|
|
14
6
|
export { useCloudThreadListAdapter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"mappings":";;;cASa,4BACX,SAAS,kCACR"}
|
|
@@ -1,166 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { RuntimeAdapterProvider } from "../RuntimeAdapterProvider.js";
|
|
4
|
-
import { useAssistantCloudThreadHistoryAdapter } from "./AssistantCloudThreadHistoryAdapter.js";
|
|
5
|
-
import { CloudFileAttachmentAdapter } from "./CloudFileAttachmentAdapter.js";
|
|
6
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
7
|
-
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
1
|
+
import { autoCloud, createCloudThreadListAdapter, useCloudRuntimeAdapters } from "./createCloudThreadListAdapter.js";
|
|
2
|
+
import { useCallback, useInsertionEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
|
|
9
3
|
//#region src/react/runtimes/cloud/useCloudThreadListAdapter.tsx
|
|
10
|
-
const toCustom = (value) => isRecord(value) ? value : void 0;
|
|
11
|
-
const baseUrl = typeof process !== "undefined" && process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;
|
|
12
|
-
const autoCloud = baseUrl ? new AssistantCloud({
|
|
13
|
-
baseUrl,
|
|
14
|
-
anonymous: true
|
|
15
|
-
}) : void 0;
|
|
16
|
-
const CLOUD_THREAD_PAGE_SIZE = 20;
|
|
17
|
-
const parseListCursor = (after) => {
|
|
18
|
-
const fallback = {
|
|
19
|
-
activeCursor: after,
|
|
20
|
-
archivedCursor: void 0,
|
|
21
|
-
activeExhausted: false,
|
|
22
|
-
archivedExhausted: false
|
|
23
|
-
};
|
|
24
|
-
if (!after || !after.startsWith("{")) return fallback;
|
|
25
|
-
try {
|
|
26
|
-
const parsed = JSON.parse(after);
|
|
27
|
-
if (!isRecord(parsed)) return fallback;
|
|
28
|
-
return {
|
|
29
|
-
activeCursor: typeof parsed.a === "string" ? parsed.a : void 0,
|
|
30
|
-
archivedCursor: typeof parsed.r === "string" ? parsed.r : void 0,
|
|
31
|
-
activeExhausted: parsed.ae === true,
|
|
32
|
-
archivedExhausted: parsed.re === true
|
|
33
|
-
};
|
|
34
|
-
} catch {
|
|
35
|
-
return fallback;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const useCloudThreadListAdapters = (adapterRef) => {
|
|
39
|
-
const history = useAssistantCloudThreadHistoryAdapter({ get current() {
|
|
40
|
-
return adapterRef.current.cloud ?? autoCloud;
|
|
41
|
-
} });
|
|
42
|
-
const [attachments] = useState(() => new CloudFileAttachmentAdapter(() => adapterRef.current.cloud ?? autoCloud));
|
|
43
|
-
return useMemo(() => ({
|
|
44
|
-
history,
|
|
45
|
-
attachments
|
|
46
|
-
}), [history, attachments]);
|
|
47
|
-
};
|
|
48
4
|
const useCloudThreadListAdapter = (adapter) => {
|
|
49
5
|
const adapterRef = useRef(adapter);
|
|
50
|
-
|
|
6
|
+
useInsertionEffect(() => {
|
|
51
7
|
adapterRef.current = adapter;
|
|
52
8
|
}, [adapter]);
|
|
53
|
-
const unstable_useAdapters = useCallback(function useCloudAdapters() {
|
|
54
|
-
return useCloudThreadListAdapters(adapterRef);
|
|
55
|
-
}, []);
|
|
56
|
-
const unstable_Provider = useCallback(function Provider({ children }) {
|
|
57
|
-
const adapters = useCloudThreadListAdapters(adapterRef);
|
|
58
|
-
return /* @__PURE__ */ jsx(RuntimeAdapterProvider, {
|
|
59
|
-
adapters,
|
|
60
|
-
children
|
|
61
|
-
});
|
|
62
|
-
}, []);
|
|
63
9
|
const cloud = adapter.cloud ?? autoCloud;
|
|
10
|
+
const base = useMemo(() => createCloudThreadListAdapter(() => ({
|
|
11
|
+
...adapterRef.current,
|
|
12
|
+
cloud
|
|
13
|
+
})), [cloud]);
|
|
14
|
+
const cloudRef = useMemo(() => ({ get current() {
|
|
15
|
+
return adapterRef.current.cloud ?? autoCloud;
|
|
16
|
+
} }), []);
|
|
17
|
+
const unstable_useAdapters = useCallback(function useCloudAdapters() {
|
|
18
|
+
return useCloudRuntimeAdapters(cloudRef);
|
|
19
|
+
}, [cloudRef]);
|
|
64
20
|
return useMemo(() => {
|
|
65
|
-
if (
|
|
66
|
-
const ref = adapterRef;
|
|
67
|
-
const inMemory = new InMemoryThreadListAdapter();
|
|
68
|
-
inMemory.initialize = async (threadId) => {
|
|
69
|
-
return {
|
|
70
|
-
remoteId: threadId,
|
|
71
|
-
externalId: (await ref.current.create?.())?.externalId
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
return inMemory;
|
|
75
|
-
}
|
|
21
|
+
if (base.unstable_useAdapters === void 0) return base;
|
|
76
22
|
return {
|
|
77
|
-
|
|
78
|
-
const { activeCursor, archivedCursor, activeExhausted, archivedExhausted } = parseListCursor(after);
|
|
79
|
-
const [{ threads: activeThreads }, { threads: archivedThreads }] = await Promise.all([activeExhausted ? Promise.resolve({ threads: [] }) : cloud.threads.list({
|
|
80
|
-
limit: CLOUD_THREAD_PAGE_SIZE,
|
|
81
|
-
...activeCursor ? { after: activeCursor } : {}
|
|
82
|
-
}), archivedExhausted ? Promise.resolve({ threads: [] }) : cloud.threads.list({
|
|
83
|
-
is_archived: true,
|
|
84
|
-
limit: CLOUD_THREAD_PAGE_SIZE,
|
|
85
|
-
...archivedCursor ? { after: archivedCursor } : {}
|
|
86
|
-
})]);
|
|
87
|
-
const activeNext = !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE ? activeThreads.at(-1)?.id : void 0;
|
|
88
|
-
const archivedNext = !archivedExhausted && archivedThreads.length === CLOUD_THREAD_PAGE_SIZE ? archivedThreads.at(-1)?.id : void 0;
|
|
89
|
-
return {
|
|
90
|
-
threads: [...activeThreads, ...archivedThreads].map((t) => ({
|
|
91
|
-
status: t.is_archived ? "archived" : "regular",
|
|
92
|
-
remoteId: t.id,
|
|
93
|
-
title: t.title,
|
|
94
|
-
lastMessageAt: t.last_message_at ? new Date(t.last_message_at) : void 0,
|
|
95
|
-
externalId: t.external_id ?? void 0,
|
|
96
|
-
custom: toCustom(t.metadata)
|
|
97
|
-
})),
|
|
98
|
-
nextCursor: activeNext || archivedNext ? JSON.stringify({
|
|
99
|
-
a: activeNext,
|
|
100
|
-
r: archivedNext,
|
|
101
|
-
...activeNext === void 0 ? { ae: true } : {},
|
|
102
|
-
...archivedNext === void 0 ? { re: true } : {}
|
|
103
|
-
}) : void 0
|
|
104
|
-
};
|
|
105
|
-
},
|
|
106
|
-
initialize: async () => {
|
|
107
|
-
const t_0 = await (adapterRef.current.create?.() ?? Promise.resolve());
|
|
108
|
-
const external_id = t_0 ? t_0.externalId : void 0;
|
|
109
|
-
const { thread_id: remoteId } = await cloud.threads.create({
|
|
110
|
-
last_message_at: /* @__PURE__ */ new Date(),
|
|
111
|
-
external_id
|
|
112
|
-
});
|
|
113
|
-
return {
|
|
114
|
-
externalId: external_id,
|
|
115
|
-
remoteId
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
rename: async (threadId_0, newTitle) => {
|
|
119
|
-
return cloud.threads.update(threadId_0, { title: newTitle });
|
|
120
|
-
},
|
|
121
|
-
updateCustom: async (threadId_1, custom) => {
|
|
122
|
-
return cloud.threads.update(threadId_1, { metadata: custom ?? null });
|
|
123
|
-
},
|
|
124
|
-
archive: async (threadId_2) => {
|
|
125
|
-
return cloud.threads.update(threadId_2, { is_archived: true });
|
|
126
|
-
},
|
|
127
|
-
unarchive: async (threadId_3) => {
|
|
128
|
-
return cloud.threads.update(threadId_3, { is_archived: false });
|
|
129
|
-
},
|
|
130
|
-
delete: async (threadId_4) => {
|
|
131
|
-
await adapterRef.current.delete?.(threadId_4);
|
|
132
|
-
return cloud.threads.delete(threadId_4);
|
|
133
|
-
},
|
|
134
|
-
generateTitle: async (threadId_5, messages) => {
|
|
135
|
-
const filteredMessages = messages.map((msg) => ({
|
|
136
|
-
...msg,
|
|
137
|
-
content: msg.content.filter((part) => part.type === "text" || part.type === "tool-call")
|
|
138
|
-
}));
|
|
139
|
-
return cloud.runs.stream({
|
|
140
|
-
thread_id: threadId_5,
|
|
141
|
-
assistant_id: "system/thread_title",
|
|
142
|
-
messages: filteredMessages
|
|
143
|
-
});
|
|
144
|
-
},
|
|
145
|
-
fetch: async (threadId_6) => {
|
|
146
|
-
const thread = await cloud.threads.get(threadId_6);
|
|
147
|
-
return {
|
|
148
|
-
status: thread.is_archived ? "archived" : "regular",
|
|
149
|
-
remoteId: thread.id,
|
|
150
|
-
title: thread.title,
|
|
151
|
-
lastMessageAt: thread.last_message_at ? new Date(thread.last_message_at) : void 0,
|
|
152
|
-
externalId: thread.external_id ?? void 0,
|
|
153
|
-
custom: toCustom(thread.metadata)
|
|
154
|
-
};
|
|
155
|
-
},
|
|
156
|
-
unstable_Provider,
|
|
23
|
+
...base,
|
|
157
24
|
unstable_useAdapters
|
|
158
25
|
};
|
|
159
|
-
}, [
|
|
160
|
-
cloud,
|
|
161
|
-
unstable_Provider,
|
|
162
|
-
unstable_useAdapters
|
|
163
|
-
]);
|
|
26
|
+
}, [base, unstable_useAdapters]);
|
|
164
27
|
};
|
|
165
28
|
//#endregion
|
|
166
29
|
export { useCloudThreadListAdapter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloudThreadListAdapter.js","names":["process","env","Record","FC","PropsWithChildren","RefObject","useCallback","useEffect","useMemo","useRef","useState","AssistantCloud","RemoteThreadListAdapter","InMemoryThreadListAdapter","useAssistantCloudThreadHistoryAdapter","RuntimeAdapterProvider","RuntimeAdapters","CloudFileAttachmentAdapter","isRecord","ThreadData","externalId","CloudThreadListAdapterOptions","cloud","create","Promise","delete","threadId","toCustom","value","undefined","baseUrl","NEXT_PUBLIC_ASSISTANT_BASE_URL","autoCloud","anonymous","CLOUD_THREAD_PAGE_SIZE","CloudListCursor","activeCursor","archivedCursor","activeExhausted","archivedExhausted","parseListCursor","after","fallback","startsWith","parsed","JSON","parse","a","r","ae","re","useCloudThreadListAdapters","adapterRef","history","current","attachments","useCloudThreadListAdapter","adapter","unstable_useAdapters","useCloudAdapters","unstable_Provider","Provider","children","adapters","ref","inMemory","initialize","result","remoteId","list","threads","activeThreads","archivedThreads","all","resolve","limit","is_archived","activeNext","length","at","id","archivedNext","map","t","status","title","lastMessageAt","last_message_at","Date","external_id","custom","metadata","nextCursor","stringify","createTask","thread_id","rename","newTitle","update","updateCustom","archive","unarchive","generateTitle","messages","filteredMessages","msg","content","filter","part","type","runs","stream","assistant_id","fetch","thread","get"],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport {\n type FC,\n type PropsWithChildren,\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport type { RemoteThreadListAdapter } from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport {\n RuntimeAdapterProvider,\n type RuntimeAdapters,\n} from \"../RuntimeAdapterProvider\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\ntype CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nconst autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nconst CLOUD_THREAD_PAGE_SIZE = 20;\n\ntype CloudListCursor = {\n activeCursor: string | undefined;\n archivedCursor: string | undefined;\n activeExhausted: boolean;\n archivedExhausted: boolean;\n};\n\nconst parseListCursor = (after: string | undefined): CloudListCursor => {\n const fallback: CloudListCursor = {\n activeCursor: after,\n archivedCursor: undefined,\n activeExhausted: false,\n archivedExhausted: false,\n };\n if (!after || !after.startsWith(\"{\")) return fallback;\n try {\n const parsed = JSON.parse(after);\n if (!isRecord(parsed)) return fallback;\n return {\n activeCursor: typeof parsed.a === \"string\" ? parsed.a : undefined,\n archivedCursor: typeof parsed.r === \"string\" ? parsed.r : undefined,\n activeExhausted: parsed.ae === true,\n archivedExhausted: parsed.re === true,\n };\n } catch {\n return fallback;\n }\n};\n\nconst useCloudThreadListAdapters = (\n adapterRef: RefObject<CloudThreadListAdapterOptions>,\n): RuntimeAdapters => {\n const history = useAssistantCloudThreadHistoryAdapter({\n get current() {\n return adapterRef.current.cloud ?? autoCloud!;\n },\n });\n const [attachments] = useState(\n () =>\n new CloudFileAttachmentAdapter(\n () => adapterRef.current.cloud ?? autoCloud!,\n ),\n );\n return useMemo(\n () => ({\n history,\n attachments,\n }),\n [history, attachments],\n );\n};\n\nexport const useCloudThreadListAdapter = (\n adapter: CloudThreadListAdapterOptions,\n): RemoteThreadListAdapter => {\n const adapterRef = useRef(adapter);\n useEffect(() => {\n adapterRef.current = adapter;\n }, [adapter]);\n\n const unstable_useAdapters = useCallback(function useCloudAdapters() {\n return useCloudThreadListAdapters(adapterRef);\n }, []);\n\n const unstable_Provider = useCallback<FC<PropsWithChildren>>(\n function Provider({ children }) {\n const adapters = useCloudThreadListAdapters(adapterRef);\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n },\n [],\n );\n\n const cloud = adapter.cloud ?? autoCloud;\n return useMemo<RemoteThreadListAdapter>(() => {\n if (!cloud) {\n const ref = adapterRef;\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await ref.current.create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n return {\n list: async ({ after } = {}) => {\n const {\n activeCursor,\n archivedCursor,\n activeExhausted,\n archivedExhausted,\n } = parseListCursor(after);\n const [{ threads: activeThreads }, { threads: archivedThreads }] =\n await Promise.all([\n activeExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(activeCursor ? { after: activeCursor } : {}),\n }),\n archivedExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n is_archived: true,\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(archivedCursor ? { after: archivedCursor } : {}),\n }),\n ]);\n const activeNext =\n !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? activeThreads.at(-1)?.id\n : undefined;\n const archivedNext =\n !archivedExhausted &&\n archivedThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? archivedThreads.at(-1)?.id\n : undefined;\n const threads = [...activeThreads, ...archivedThreads];\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? \"archived\" : \"regular\",\n remoteId: t.id,\n title: t.title,\n lastMessageAt: t.last_message_at\n ? new Date(t.last_message_at)\n : undefined,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n nextCursor:\n activeNext || archivedNext\n ? JSON.stringify({\n a: activeNext,\n r: archivedNext,\n ...(activeNext === undefined ? { ae: true } : {}),\n ...(archivedNext === undefined ? { re: true } : {}),\n })\n : undefined,\n };\n },\n\n initialize: async () => {\n const createTask = adapterRef.current.create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await adapterRef.current.delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n // Filter messages to only include content types the title generator understands\n // (reasoning, source, etc. are not needed for title generation)\n // TODO serialize these to a more efficient format\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived ? \"archived\" : \"regular\",\n remoteId: thread.id,\n title: thread.title,\n lastMessageAt: thread.last_message_at\n ? new Date(thread.last_message_at)\n : undefined,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_Provider,\n unstable_useAdapters,\n };\n }, [cloud, unstable_Provider, unstable_useAdapters]);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCloudThreadListAdapter.js","names":["useCallback","useInsertionEffect","useMemo","useRef","RemoteThreadListAdapter","autoCloud","createCloudThreadListAdapter","CloudThreadListAdapterOptions","useCloudRuntimeAdapters","useCloudThreadListAdapter","adapter","adapterRef","current","cloud","base","cloudRef","unstable_useAdapters","useCloudAdapters","undefined"],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"sourcesContent":["import { useCallback, useInsertionEffect, useMemo, useRef } from \"react\";\nimport type { RemoteThreadListAdapter } from \"../../../runtimes/remote-thread-list/types\";\nimport {\n autoCloud,\n createCloudThreadListAdapter,\n type CloudThreadListAdapterOptions,\n useCloudRuntimeAdapters,\n} from \"./createCloudThreadListAdapter\";\n\nexport const useCloudThreadListAdapter = (\n adapter: CloudThreadListAdapterOptions,\n): RemoteThreadListAdapter => {\n const adapterRef = useRef(adapter);\n useInsertionEffect(() => {\n adapterRef.current = adapter;\n }, [adapter]);\n\n const cloud = adapter.cloud ?? autoCloud;\n const base = useMemo(\n () =>\n createCloudThreadListAdapter(() => ({\n ...adapterRef.current,\n cloud,\n })),\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- the factory pins the cloud instance; changing callbacks are read from the committed ref\n [cloud],\n );\n\n const cloudRef = useMemo(\n () => ({\n get current() {\n return adapterRef.current.cloud ?? autoCloud!;\n },\n }),\n [],\n );\n\n const unstable_useAdapters = useCallback(\n function useCloudAdapters() {\n return useCloudRuntimeAdapters(cloudRef);\n },\n [cloudRef],\n );\n\n return useMemo<RemoteThreadListAdapter>(() => {\n if (base.unstable_useAdapters === undefined) return base;\n return {\n ...base,\n unstable_useAdapters,\n };\n }, [base, unstable_useAdapters]);\n};\n"],"mappings":";;;AASA,MAAaS,6BACXC,YAC4B;CAC5B,MAAMC,aAAaR,OAAOO,OAAO;CACjCT,yBAAyB;EACvBU,WAAWC,UAAUF;CACvB,GAAG,CAACA,OAAO,CAAC;CAEZ,MAAMG,QAAQH,QAAQG,SAASR;CAC/B,MAAMS,OAAOZ,cAETI,oCAAoC;EAClC,GAAGK,WAAWC;EACdC;CACF,EAAE,GAEJ,CAACA,KAAK,CACR;CAEA,MAAME,WAAWb,eACR,EACL,IAAIU,UAAU;EACZ,OAAOD,WAAWC,QAAQC,SAASR;CACrC,EACF,IACA,CAAA,CACF;CAEA,MAAMW,uBAAuBhB,YAC3B,SAASiB,mBAAmB;EAC1B,OAAOT,wBAAwBO,QAAQ;CACzC,GACA,CAACA,QAAQ,CACX;CAEA,OAAOb,cAAuC;EAC5C,IAAIY,KAAKE,yBAAyBE,KAAAA,GAAW,OAAOJ;EACpD,OAAO;GACL,GAAGA;GACHE;EACF;CACF,GAAG,CAACF,MAAME,oBAAoB,CAAC;AACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloudThreadListRuntime.js","names":["c","_c","AssistantCloud","AssistantRuntime","useRemoteThreadListRuntime","useCloudThreadListAdapter","ThreadData","externalId","CloudThreadListAdapter","cloud","runtimeHook","create","Promise","delete","threadId","useCloudThreadListRuntime","t0","$","adapterOptions","adapter","t1","allowNesting"],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport type { AssistantRuntime } from \"../../../runtime/api/assistant-runtime\";\nimport { useRemoteThreadListRuntime } from \"../useRemoteThreadListRuntime\";\nimport { useCloudThreadListAdapter } from \"./useCloudThreadListAdapter\";\n\ntype ThreadData = {\n externalId: string;\n};\n\ntype CloudThreadListAdapter = {\n cloud: AssistantCloud;\n\n runtimeHook: () => AssistantRuntime;\n\n create?(): Promise<ThreadData>;\n delete?(threadId: string): Promise<void>;\n};\n\nexport function useCloudThreadListRuntime({\n runtimeHook,\n ...adapterOptions\n}: CloudThreadListAdapter) {\n const adapter = useCloudThreadListAdapter(adapterOptions);\n return useRemoteThreadListRuntime({\n runtimeHook,\n adapter,\n allowNesting: true,\n });\n}\n"],"mappings":";;;;;AAoBA,SAAOe,0BAAAC,IAAA;CAAA,MAAAC,IAAAhB,EAAA,CAAA;CAAA,IAAAiB;CAAA,IAAAR;CAAA,IAAAO,EAAA,OAAAD,IAAA;EAAmC,CAAA,CAAAN,
|
|
1
|
+
{"version":3,"file":"useCloudThreadListRuntime.js","names":["c","_c","AssistantCloud","AssistantRuntime","useRemoteThreadListRuntime","useCloudThreadListAdapter","ThreadData","externalId","CloudThreadListAdapter","cloud","runtimeHook","create","Promise","delete","threadId","useCloudThreadListRuntime","t0","$","adapterOptions","adapter","t1","allowNesting"],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport type { AssistantRuntime } from \"../../../runtime/api/assistant-runtime\";\nimport { useRemoteThreadListRuntime } from \"../useRemoteThreadListRuntime\";\nimport { useCloudThreadListAdapter } from \"./useCloudThreadListAdapter\";\n\ntype ThreadData = {\n externalId: string;\n};\n\ntype CloudThreadListAdapter = {\n cloud: AssistantCloud;\n\n runtimeHook: () => AssistantRuntime;\n\n create?(): Promise<ThreadData>;\n delete?(threadId: string): Promise<void>;\n};\n\nexport function useCloudThreadListRuntime({\n runtimeHook,\n ...adapterOptions\n}: CloudThreadListAdapter) {\n const adapter = useCloudThreadListAdapter(adapterOptions);\n return useRemoteThreadListRuntime({\n runtimeHook,\n adapter,\n allowNesting: true,\n });\n}\n"],"mappings":";;;;;AAoBA,SAAOe,0BAAAC,IAAA;CAAA,MAAAC,IAAAhB,EAAA,CAAA;CAAA,IAAAiB;CAAA,IAAAR;CAAA,IAAAO,EAAA,OAAAD,IAAA;EAAmC,CAAA,CAAAN,aAAA,GAAAQ,kBAAAF;EAGjBC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;EAAAD,EAAA,KAAAP;CAAA,OAAA;EAAAQ,iBAAAD,EAAA;EAAAP,cAAAO,EAAA;CAAA;CACvB,MAAAE,UAAgBd,0BAA0Ba,cAAc;CAAE,IAAAE;CAAA,IAAAH,EAAA,OAAAE,WAAAF,EAAA,OAAAP,aAAA;EACxBU,KAAA;GAAAV;GAAAS;GAAAE,cAGlB;EAChB;EAACJ,EAAA,KAAAE;EAAAF,EAAA,KAAAP;EAAAO,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,OAJMb,2BAA2BgB,EAIjC;AAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ThreadMessage } from "../../types/message.js";
|
|
2
|
-
import { JoinStrategy
|
|
2
|
+
import { JoinStrategy } from "../../runtime/utils/external-message-conversion.js";
|
|
3
|
+
import { useExternalMessageConverter } from "./external-message-converter.js";
|
|
3
4
|
import { ThreadState } from "../../runtime/api/thread-runtime.js";
|
|
4
5
|
//#region src/react/runtimes/createMessageConverter.d.ts
|
|
5
6
|
declare const createMessageConverter: <T extends object>(callback: useExternalMessageConverter.Callback<T>) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMessageConverter.d.ts","names":[],"sources":["../../../src/react/runtimes/createMessageConverter.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"createMessageConverter.d.ts","names":[],"sources":["../../../src/react/runtimes/createMessageConverter.ts"],"mappings":";;;;;cAWa,yBAA0B,kBACrC,UAAU,4BAA4B,SAAS;EAQ1C,sBAAA,UAAA,WAAA,cAAA;IACD,UAAU;IACV;IACA,eAAe;IACf,WAAW,4BAA4B;QACxC;EAUW,mBAAA,UAAA,KAAG,qBAAA,WAEH,4BAA4B,aAAQ;EAKvC,qBAAA,OAAA,cAAc,gBAAgB;EAO9B,oBAAA,OAAA,cAAc,gBAAgB"}
|
|
@@ -1,29 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ToolExecutionStatus } from "../../runtimes/tool-invocations/ToolInvocationTracker.js";
|
|
4
|
-
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
1
|
+
import { ThreadMessage } from "../../types/message.js";
|
|
2
|
+
import { ExternalMessageConverterCallback, ExternalMessageConverterMessage, ExternalMessageConverterMetadata, JoinStrategy } from "../../runtime/utils/external-message-conversion.js";
|
|
5
3
|
//#region src/react/runtimes/external-message-converter.d.ts
|
|
6
|
-
type JoinStrategy = "concat-content" | "none";
|
|
7
4
|
declare namespace useExternalMessageConverter {
|
|
8
|
-
type Message =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
}) | {
|
|
13
|
-
role: "tool";
|
|
14
|
-
toolCallId: string;
|
|
15
|
-
toolName?: string | undefined;
|
|
16
|
-
result: any;
|
|
17
|
-
artifact?: any;
|
|
18
|
-
isError?: boolean;
|
|
19
|
-
messages?: readonly ThreadMessage[];
|
|
20
|
-
};
|
|
21
|
-
type Metadata = {
|
|
22
|
-
readonly toolStatuses?: Record<string, ToolExecutionStatus>;
|
|
23
|
-
readonly error?: ReadonlyJSONValue;
|
|
24
|
-
readonly messageTiming?: Record<string, MessageTiming>;
|
|
25
|
-
};
|
|
26
|
-
type Callback<T> = (message: T, metadata: Metadata) => Message | Message[];
|
|
5
|
+
type Message = ExternalMessageConverterMessage;
|
|
6
|
+
type Metadata = ExternalMessageConverterMetadata;
|
|
7
|
+
type Callback<T> = ExternalMessageConverterCallback<T>;
|
|
27
8
|
}
|
|
28
9
|
declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: useExternalMessageConverter.Callback<T>, isRunning: boolean, metadata: useExternalMessageConverter.Metadata) => ThreadMessage[];
|
|
29
10
|
declare const useExternalMessageConverter: <T extends WeakKey>({ callback, messages, isRunning, joinStrategy, metadata }: {
|
|
@@ -34,5 +15,5 @@ declare const useExternalMessageConverter: <T extends WeakKey>({ callback, messa
|
|
|
34
15
|
metadata?: useExternalMessageConverter.Metadata | undefined;
|
|
35
16
|
}) => ThreadMessage[];
|
|
36
17
|
//#endregion
|
|
37
|
-
export { JoinStrategy, convertExternalMessages, useExternalMessageConverter };
|
|
18
|
+
export { type JoinStrategy, convertExternalMessages, useExternalMessageConverter };
|
|
38
19
|
//# sourceMappingURL=external-message-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":";;;kBA2BiB;OACH,UAAU;OACV,WAAW;OACX,SAAS,KAAK,iCAAiC;;cAGhD,0BAA0B,UAAU,SAC/C,UAAU,KACV,UAAU,4BAA4B,SAAS,IAC/C,oBACA,UAAU,4BAA4B,aACnC;cAOQ,8BAA+B,UAAU,WAAS,UAAA,UAAA,WAAA,cAAA;EAO7D,UAAU,4BAA4B,SAAS;EAC/C,UAAU;EACV;EACA,eAAe;EACf,WAAW,4BAA4B;MACxC"}
|