@assistant-ui/core 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +5 -4
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +4 -2
- package/dist/internal.js +4 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +10 -4
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +5 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +101 -28
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +16 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +3 -5
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/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/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +5 -4
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/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 +63 -57
- 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 +25 -28
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +16 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +354 -242
- 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 +24 -18
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.js +2 -1
- package/dist/react/interactables-legacy/Interactables.js +246 -125
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
- package/dist/react/model-context/makeAssistantTool.js +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- package/dist/react/model-context/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/useAssistantTool.d.ts +2 -2
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/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/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +2 -1
- package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
- package/dist/react/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/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 +6 -4
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +59 -29
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +11 -6
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +160 -143
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +2 -6
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +15 -13
- package/dist/react/runtimes/RemoteThreadResource.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 +4 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +424 -52
- 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 +160 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.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/external-message-converter.js +1 -1
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +77 -29
- 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/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-item-runtime.d.ts +7 -3
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js +2 -2
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +12 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +23 -14
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +5 -1
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +1 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +16 -12
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +8 -7
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +18 -3
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +15 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.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/auto-status.js +6 -2
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +3 -2
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +5 -4
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +15 -6
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/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 +2 -10
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/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.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +2 -1
- 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 +34 -28
- 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/internal.d.ts +2 -2
- package/dist/runtimes/internal.js +2 -2
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +3 -1
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +148 -43
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
- package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
- package/dist/runtimes/remote-thread-list/title.d.ts +11 -0
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title.js +14 -0
- package/dist/runtimes/remote-thread-list/title.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +16 -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 +97 -60
- 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 +30 -7
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +2 -1
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.js +2 -1
- 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 +19 -6
- 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 +2 -1
- 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.d.ts +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +98 -62
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +221 -144
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +2 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +128 -107
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +194 -122
- package/dist/store/runtime-clients/thread-runtime-client.js.map +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/scopes/composer.d.ts +10 -2
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +30 -1
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +6 -3
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +2 -2
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +1 -0
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/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/attachment.d.ts +2 -1
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/attachment.js +2 -1
- package/dist/types/attachment.js.map +1 -1
- package/dist/types/message.d.ts +40 -1
- 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/abortable-iterable.d.ts +19 -0
- package/dist/utils/abortable-iterable.d.ts.map +1 -0
- package/dist/utils/abortable-iterable.js +72 -0
- package/dist/utils/abortable-iterable.js.map +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +20 -2
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/record.d.ts +11 -0
- package/dist/utils/record.d.ts.map +1 -0
- package/dist/utils/record.js +12 -0
- package/dist/utils/record.js.map +1 -0
- package/package.json +12 -17
- package/src/adapters/attachment.test.ts +50 -1
- package/src/adapters/attachment.ts +7 -4
- package/src/index.ts +7 -1
- package/src/internal.ts +12 -0
- package/src/model-context/frame/host.test.ts +24 -0
- package/src/model-context/frame/host.ts +10 -4
- package/src/model-context/frame/provider.test.ts +288 -1
- package/src/model-context/frame/provider.ts +148 -30
- package/src/model-context/interactable-composer-metadata.test.ts +28 -0
- package/src/model-context/interactable-composer-metadata.ts +9 -3
- package/src/model-context/registry.test.ts +12 -0
- package/src/model-context/registry.ts +3 -2
- package/src/model-context/tool-call-text.test.ts +67 -0
- package/src/model-context/tool-call-text.ts +67 -0
- package/src/model-context/types.test.ts +25 -0
- package/src/model-context/types.ts +9 -4
- package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
- package/src/react/RuntimeAdapter.test.ts +34 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
- package/src/react/client/InMemoryThreadList.ts +1 -0
- package/src/react/client/Interactables.test.ts +28 -0
- package/src/react/client/Interactables.ts +15 -13
- package/src/react/client/RemoteThreadList.background.test.ts +526 -0
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +315 -0
- package/src/react/client/RemoteThreadList.test.ts +617 -3
- package/src/react/client/RemoteThreadList.ts +433 -167
- package/src/react/client/Tools.ts +29 -12
- package/src/react/index.ts +4 -0
- package/src/react/interactables-legacy/Interactables.ts +16 -16
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
- package/src/react/model-context/makeAssistantTool.ts +2 -2
- package/src/react/model-context/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/useAssistantTool.ts +2 -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/model-context/useToolArgsStatus.test.tsx +30 -0
- package/src/react/model-context/useToolArgsStatus.ts +2 -1
- 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.destroy.test.tsx +172 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +127 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +99 -35
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +274 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +223 -152
- package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
- package/src/react/runtimes/RemoteThreadResource.ts +20 -16
- 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 +546 -5
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +546 -103
- package/src/react/runtimes/cloud/auiV0.ts +5 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +103 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +237 -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.ts +1 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
- package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
- package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +57 -6
- package/src/react/types/MessagePartComponentTypes.ts +7 -3
- package/src/react/types/scopes/tools.ts +2 -0
- package/src/runtime/api/message-part-runtime.ts +3 -3
- package/src/runtime/api/message-runtime.test.ts +75 -0
- package/src/runtime/api/thread-list-item-runtime.ts +10 -3
- package/src/runtime/api/thread-list-runtime.ts +46 -12
- package/src/runtime/api/thread-runtime.test.ts +78 -0
- package/src/runtime/api/thread-runtime.ts +8 -1
- package/src/runtime/base/base-composer-runtime-core.ts +36 -8
- package/src/runtime/base/base-thread-runtime-core.test.ts +149 -4
- package/src/runtime/base/base-thread-runtime-core.ts +16 -8
- package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
- package/src/runtime/interfaces/thread-list-runtime-core.ts +25 -2
- package/src/runtime/interfaces/thread-runtime-core.ts +17 -1
- package/src/runtime/utils/auto-status.test.ts +57 -0
- package/src/runtime/utils/auto-status.ts +13 -1
- package/src/runtime/utils/external-message-conversion.test.ts +165 -0
- package/src/runtime/utils/external-message-conversion.ts +18 -2
- package/src/runtime/utils/message-repository.ts +29 -17
- 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 +3 -11
- 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 +18 -13
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +56 -33
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
- package/src/runtimes/internal.ts +1 -0
- package/src/runtimes/local/local-thread-runtime-core.test.ts +29 -3
- package/src/runtimes/local/local-thread-runtime-core.ts +5 -1
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +238 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +223 -44
- package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
- package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
- package/src/runtimes/remote-thread-list/title.test.ts +62 -0
- package/src/runtimes/remote-thread-list/title.ts +16 -0
- package/src/runtimes/remote-thread-list/types.ts +16 -5
- package/src/runtimes/tool-invocations/EDGE_CASES.md +110 -5
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +750 -136
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +144 -91
- package/src/store/clients/external-thread.ts +62 -11
- package/src/store/clients/model-context-client.ts +5 -1
- package/src/store/clients/single-thread-list.ts +1 -0
- package/src/store/clients/suggestions.test.ts +195 -1
- package/src/store/clients/suggestions.ts +45 -34
- 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/composer-runtime-client.ts +42 -9
- package/src/store/runtime-clients/message-runtime-client.ts +54 -6
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
- package/src/store/runtime-clients/thread-list-runtime-client.ts +17 -2
- package/src/store/runtime-clients/thread-runtime-client.ts +58 -10
- package/src/store/runtime-clients/useSubscribable.ts +8 -2
- package/src/store/scopes/composer.ts +16 -4
- package/src/store/scopes/message.ts +14 -0
- package/src/store/scopes/part.ts +6 -3
- package/src/store/scopes/thread-list-item.ts +5 -2
- package/src/store/scopes/thread.ts +4 -0
- package/src/store/scopes/threads.ts +1 -0
- package/src/subscribable/subscribable.test.ts +50 -0
- package/src/subscribable/subscribable.ts +33 -21
- package/src/tests/MessageRepository.test.ts +116 -0
- package/src/tests/OptimisticState-list-race.test.ts +1 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +158 -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 +89 -0
- package/src/tests/attachment-adapters.test.ts +14 -0
- package/src/tests/base-composer-runtime-core.test.ts +39 -0
- package/src/tests/external-store-optimistic-id.test.ts +79 -0
- package/src/tests/external-store-repository-instance.test.ts +166 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +83 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +49 -34
- package/src/tests/external-thread-attachments.test.tsx +224 -1
- package/src/tests/external-thread-parity.test.tsx +23 -0
- package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
- package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
- package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
- package/src/tests/thread-switch-events.test.tsx +475 -2
- package/src/tests/tools-scope-migration.test.tsx +28 -0
- package/src/types/attachment.ts +4 -0
- package/src/types/message.ts +50 -2
- package/src/utils/abortable-iterable.test.ts +213 -0
- package/src/utils/abortable-iterable.ts +93 -0
- package/src/utils/composite-context-provider.test.ts +25 -0
- package/src/utils/composite-context-provider.ts +23 -2
- package/src/utils/record.test.ts +48 -0
- package/src/utils/record.ts +11 -0
|
@@ -1,14 +1,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"}
|
|
@@ -62,7 +62,7 @@ const useExternalMessageConverter = (t0) => {
|
|
|
62
62
|
const threadMessages = state.converterCache.convertMessages(chunks, (cache, message_1, idx) => convertExternalMessageChunk(message_1, idx, chunks.length, isRunning, state.metadata.error, {
|
|
63
63
|
message: cache,
|
|
64
64
|
generatedFallbackMessages
|
|
65
|
-
}));
|
|
65
|
+
}, state.metadata.cancelledMessageIds));
|
|
66
66
|
bindExternalStoreMessage(threadMessages, messages);
|
|
67
67
|
t3 = completeExternalMessageConversion(threadMessages, state.metadata.error);
|
|
68
68
|
$[6] = isRunning;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-converter.js","names":["c","_c","useMemo","useState","chunkExternalMessages","completeExternalMessageConversion","convertExternalMessageCallback","convertExternalMessageChunk","convertExternalMessages","convertExternalMessagesInternal","shallowArrayEqual","ExternalMessageConverterCallback","ExternalMessageConverterCallbackResult","ExternalMessageConverterChunk","ExternalMessageConverterMessage","ExternalMessageConverterMetadata","JoinStrategy","bindExternalStoreMessage","ThreadMessageConverter","ThreadMessage","generatedFallbackMessages","WeakSet","useExternalMessageConverter","Message","Metadata","Callback","T","WeakKey","messages","callback","isRunning","metadata","CallbackCacheEntry","t0","$","joinStrategy","caches","_temp","t1","t2","state","t3","callbackCache","chunkCache","converterCache","callbackResults","message","result","get","set","push","t4","message_0","key","outputs","cached","chunks","map","threadMessages","convertMessages","cache","message_1","idx","length","error","WeakMap"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport {\n chunkExternalMessages,\n completeExternalMessageConversion,\n convertExternalMessageCallback,\n convertExternalMessageChunk,\n convertExternalMessages as convertExternalMessagesInternal,\n shallowArrayEqual,\n type ExternalMessageConverterCallback,\n type ExternalMessageConverterCallbackResult,\n type ExternalMessageConverterChunk,\n type ExternalMessageConverterMessage,\n type ExternalMessageConverterMetadata,\n type JoinStrategy,\n} from \"../../runtime/utils/external-message-conversion\";\nimport { bindExternalStoreMessage } from \"../../runtime/utils/external-store-message\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport type { ThreadMessage } from \"../../types/message\";\n\n// Generatedness is tracked by identity, not by id shape: a caller-supplied id\n// that happens to match the generated pattern must never be rewritten.\nconst generatedFallbackMessages = new WeakSet<object>();\n\nexport type { JoinStrategy };\n\nexport namespace useExternalMessageConverter {\n export type Message = ExternalMessageConverterMessage;\n export type Metadata = ExternalMessageConverterMetadata;\n export type Callback<T> = ExternalMessageConverterCallback<T>;\n}\n\nexport const convertExternalMessages: <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n) => ThreadMessage[] = convertExternalMessagesInternal;\n\ntype CallbackCacheEntry<T> = ExternalMessageConverterCallbackResult<T> & {\n metadata: useExternalMessageConverter.Metadata;\n callback: useExternalMessageConverter.Callback<T>;\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n // The caches live for the component lifetime; React Compiler hoists\n // allocations without reactive dependencies out of useMemo, so re-creating\n // them on dependency change would not survive compilation. Staleness is\n // instead tracked per entry via the metadata/callback that produced it,\n // keeping correctness independent of memoization (which React treats as\n // droppable). A \"use no memo\" opt-out would restore the useMemo semantics\n // but leave cache flushing coupled to memo firing.\n const [caches] = useState(() => ({\n callbackCache: new WeakMap<T, CallbackCacheEntry<T>>(),\n chunkCache: new WeakMap<\n ExternalMessageConverterMessage,\n ExternalMessageConverterChunk<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }));\n\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n ...caches,\n }),\n [callback, metadata, caches],\n );\n\n return useMemo(() => {\n const callbackResults: ExternalMessageConverterCallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (\n !result ||\n result.metadata !== state.metadata ||\n result.callback !== state.callback\n ) {\n result = {\n ...convertExternalMessageCallback(\n message,\n state.callback,\n state.metadata,\n ),\n metadata: state.metadata,\n callback: state.callback,\n };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (message) => {\n const key = message.outputs[0];\n if (!key) return message;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, message.outputs)) {\n return cached;\n }\n state.chunkCache.set(key, message);\n return message;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n state.metadata.error,\n {\n message: cache,\n generatedFallbackMessages,\n },\n ),\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n return completeExternalMessageConversion(\n threadMessages,\n state.metadata.error,\n );\n }, [state, messages, isRunning, joinStrategy]);\n};\n"],"mappings":";;;;;;;AAuBA,MAAMoB,4CAA4B,IAAIC,QAAgB;AAUtD,MAAab,0BAKUC;AAOvB,MAAaa,+BAA8BW,OAAA;CAAA,MAAAC,IAAAjC,EAAA,EAAA;CAAoB,MAAA,EAAA4B,UAAAD,UAAAE,WAAAK,cAAAJ,aAAAE;CAoB7D,MAAA,CAAAG,UAAiBjC,SAASkC,KAOxB;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAH,UAAA;EAIUO,KAAAP,YAAA,CAAa;EAACG,EAAA,KAAAH;EAAAG,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAK;CAAA,IAAAL,EAAA,OAAAE,UAAAF,EAAA,OAAAL,YAAAK,EAAA,OAAAI,IAAA;EADnBC,KAAA;GAAAR,UACKO;GAAcT;GAAA,GAErBO;EACL;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAL;EAAAK,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CALH,MAAAM,QACSD;CAMP,IAAAE;CAAA,IAAAP,EAAA,OAAAJ,aAAAI,EAAA,OAAAC,gBAAAD,EAAA,OAAAN,YAAAM,EAAA,OAAAM,MAAAX,YAAAK,EAAA,QAAAM,MAAAE,iBAAAR,EAAA,QAAAM,MAAAG,cAAAT,EAAA,QAAAM,MAAAI,kBAAAV,EAAA,QAAAM,MAAAT,UAAA;EAGA,MAAAc,kBAAqE,CAAA;EACrE,KAAK,MAAAC,WAAiBlB,UAAQ;GAC5B,IAAAmB,SAAaP,MAAKE,cAAcM,IAAKF,OAAO;GAC5C,IACE,CAACC,UACDA,OAAMhB,aAAcS,MAAKT,YACzBgB,OAAMlB,aAAcW,MAAKX,UAAS;IAElCkB,SAASA;KAAAA,GACJzC,+BACDwC,SACAN,MAAKX,UACLW,MAAKT,QACP;KAACA,UACSS,MAAKT;KAASF,UACdW,MAAKX;IACjB;IACAW,MAAKE,cAAcO,IAAKH,SAASC,MAAM;GAAC;GAE1CF,gBAAeK,KAAMH,MAAM;EAAC;EAC7B,IAAAI;EAAA,IAAAjB,EAAA,QAAAM,MAAAG,YAAA;GAGCQ,MAAAC,cAAA;IACE,MAAAC,MAAYP,UAAOQ,QAAQ;IAC3B,IAAI,CAACD,KAAG,OAASP;IAEjB,MAAAS,SAAef,MAAKG,WAAWK,IAAKK,GAAG;IACvC,IAAIE,UAAU7C,kBAAkB6C,OAAMD,SAAUR,UAAOQ,OAAQ,GAAC,OACvDC;IAETf,MAAKG,WAAWM,IAAKI,KAAKP,SAAO;IAAC,OAC3BA;GAAO;GACfZ,EAAA,MAAAM,MAAAG;GAAAT,EAAA,MAAAiB;EAAA,OAAAA,KAAAjB,EAAA;EAXH,MAAAsB,SAAepD,sBAAsByC,iBAAiBV,YAAY,CAAC,CAAAsB,IACjEN,EAWF;EAEA,MAAAO,iBAAuBlB,MAAKI,eAAee,gBACzCH,SACAI,OAAAC,WAAAC,QACEvD,4BACEuC,WACAgB,KACAN,OAAMO,QACNjC,WACAU,MAAKT,SAASiC,OACd;GAAAlB,SACWc;GAAKxC;EAEhB,
|
|
1
|
+
{"version":3,"file":"external-message-converter.js","names":["c","_c","useMemo","useState","chunkExternalMessages","completeExternalMessageConversion","convertExternalMessageCallback","convertExternalMessageChunk","convertExternalMessages","convertExternalMessagesInternal","shallowArrayEqual","ExternalMessageConverterCallback","ExternalMessageConverterCallbackResult","ExternalMessageConverterChunk","ExternalMessageConverterMessage","ExternalMessageConverterMetadata","JoinStrategy","bindExternalStoreMessage","ThreadMessageConverter","ThreadMessage","generatedFallbackMessages","WeakSet","useExternalMessageConverter","Message","Metadata","Callback","T","WeakKey","messages","callback","isRunning","metadata","CallbackCacheEntry","t0","$","joinStrategy","caches","_temp","t1","t2","state","t3","callbackCache","chunkCache","converterCache","callbackResults","message","result","get","set","push","t4","message_0","key","outputs","cached","chunks","map","threadMessages","convertMessages","cache","message_1","idx","length","error","cancelledMessageIds","WeakMap"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport {\n chunkExternalMessages,\n completeExternalMessageConversion,\n convertExternalMessageCallback,\n convertExternalMessageChunk,\n convertExternalMessages as convertExternalMessagesInternal,\n shallowArrayEqual,\n type ExternalMessageConverterCallback,\n type ExternalMessageConverterCallbackResult,\n type ExternalMessageConverterChunk,\n type ExternalMessageConverterMessage,\n type ExternalMessageConverterMetadata,\n type JoinStrategy,\n} from \"../../runtime/utils/external-message-conversion\";\nimport { bindExternalStoreMessage } from \"../../runtime/utils/external-store-message\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport type { ThreadMessage } from \"../../types/message\";\n\n// Generatedness is tracked by identity, not by id shape: a caller-supplied id\n// that happens to match the generated pattern must never be rewritten.\nconst generatedFallbackMessages = new WeakSet<object>();\n\nexport type { JoinStrategy };\n\nexport namespace useExternalMessageConverter {\n export type Message = ExternalMessageConverterMessage;\n export type Metadata = ExternalMessageConverterMetadata;\n export type Callback<T> = ExternalMessageConverterCallback<T>;\n}\n\nexport const convertExternalMessages: <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n) => ThreadMessage[] = convertExternalMessagesInternal;\n\ntype CallbackCacheEntry<T> = ExternalMessageConverterCallbackResult<T> & {\n metadata: useExternalMessageConverter.Metadata;\n callback: useExternalMessageConverter.Callback<T>;\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n // The caches live for the component lifetime; React Compiler hoists\n // allocations without reactive dependencies out of useMemo, so re-creating\n // them on dependency change would not survive compilation. Staleness is\n // instead tracked per entry via the metadata/callback that produced it,\n // keeping correctness independent of memoization (which React treats as\n // droppable). A \"use no memo\" opt-out would restore the useMemo semantics\n // but leave cache flushing coupled to memo firing.\n const [caches] = useState(() => ({\n callbackCache: new WeakMap<T, CallbackCacheEntry<T>>(),\n chunkCache: new WeakMap<\n ExternalMessageConverterMessage,\n ExternalMessageConverterChunk<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }));\n\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n ...caches,\n }),\n [callback, metadata, caches],\n );\n\n return useMemo(() => {\n const callbackResults: ExternalMessageConverterCallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (\n !result ||\n result.metadata !== state.metadata ||\n result.callback !== state.callback\n ) {\n result = {\n ...convertExternalMessageCallback(\n message,\n state.callback,\n state.metadata,\n ),\n metadata: state.metadata,\n callback: state.callback,\n };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (message) => {\n const key = message.outputs[0];\n if (!key) return message;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, message.outputs)) {\n return cached;\n }\n state.chunkCache.set(key, message);\n return message;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n state.metadata.error,\n {\n message: cache,\n generatedFallbackMessages,\n },\n state.metadata.cancelledMessageIds,\n ),\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n return completeExternalMessageConversion(\n threadMessages,\n state.metadata.error,\n );\n }, [state, messages, isRunning, joinStrategy]);\n};\n"],"mappings":"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"}
|
|
@@ -7,64 +7,93 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
|
7
7
|
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
8
8
|
//#region src/react/runtimes/useExternalStoreRuntime.ts
|
|
9
9
|
const useExternalStoreRuntime = (store) => {
|
|
10
|
-
const $ = c(
|
|
10
|
+
const $ = c(21);
|
|
11
|
+
const { modelContext, feedback } = useRuntimeAdapters() ?? {};
|
|
11
12
|
let t0;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
bb0: {
|
|
14
|
+
if (!feedback || store.adapters?.feedback) {
|
|
15
|
+
t0 = store;
|
|
16
|
+
break bb0;
|
|
17
|
+
}
|
|
18
|
+
let t1;
|
|
19
|
+
if ($[0] !== feedback || $[1] !== store.adapters) {
|
|
20
|
+
t1 = {
|
|
21
|
+
...store.adapters,
|
|
22
|
+
feedback
|
|
23
|
+
};
|
|
24
|
+
$[0] = feedback;
|
|
25
|
+
$[1] = store.adapters;
|
|
26
|
+
$[2] = t1;
|
|
27
|
+
} else t1 = $[2];
|
|
28
|
+
let t2;
|
|
29
|
+
if ($[3] !== store || $[4] !== t1) {
|
|
30
|
+
t2 = {
|
|
31
|
+
...store,
|
|
32
|
+
adapters: t1
|
|
33
|
+
};
|
|
34
|
+
$[3] = store;
|
|
35
|
+
$[4] = t1;
|
|
36
|
+
$[5] = t2;
|
|
37
|
+
} else t2 = $[5];
|
|
38
|
+
t0 = t2;
|
|
39
|
+
}
|
|
40
|
+
const adaptedStore = t0;
|
|
18
41
|
let t1;
|
|
19
|
-
if ($[
|
|
20
|
-
t1 = () => ()
|
|
42
|
+
if ($[6] !== adaptedStore) {
|
|
43
|
+
t1 = () => new ExternalStoreRuntimeCore(adaptedStore);
|
|
44
|
+
$[6] = adaptedStore;
|
|
45
|
+
$[7] = t1;
|
|
46
|
+
} else t1 = $[7];
|
|
47
|
+
const [runtime] = useState(t1);
|
|
48
|
+
let t2;
|
|
49
|
+
if ($[8] !== runtime.threads) {
|
|
50
|
+
t2 = () => () => {
|
|
21
51
|
invalidateThreadRuntime(runtime.threads.getMainThreadRuntimeCore());
|
|
22
52
|
};
|
|
23
|
-
$[
|
|
24
|
-
$[
|
|
25
|
-
} else
|
|
26
|
-
let t2;
|
|
27
|
-
if ($[4] !== runtime) {
|
|
28
|
-
t2 = [runtime];
|
|
29
|
-
$[4] = runtime;
|
|
30
|
-
$[5] = t2;
|
|
31
|
-
} else t2 = $[5];
|
|
32
|
-
useEffect(t1, t2);
|
|
53
|
+
$[8] = runtime.threads;
|
|
54
|
+
$[9] = t2;
|
|
55
|
+
} else t2 = $[9];
|
|
33
56
|
let t3;
|
|
34
|
-
if ($[
|
|
35
|
-
t3 =
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
$[8] = t3;
|
|
41
|
-
} else t3 = $[8];
|
|
42
|
-
useEffect(t3);
|
|
43
|
-
const { modelContext } = useRuntimeAdapters() ?? {};
|
|
57
|
+
if ($[10] !== runtime) {
|
|
58
|
+
t3 = [runtime];
|
|
59
|
+
$[10] = runtime;
|
|
60
|
+
$[11] = t3;
|
|
61
|
+
} else t3 = $[11];
|
|
62
|
+
useEffect(t2, t3);
|
|
44
63
|
let t4;
|
|
45
|
-
|
|
46
|
-
if ($[9] !== modelContext || $[10] !== runtime) {
|
|
64
|
+
if ($[12] !== adaptedStore || $[13] !== runtime) {
|
|
47
65
|
t4 = () => {
|
|
66
|
+
runtime.setAdapter(adaptedStore);
|
|
67
|
+
};
|
|
68
|
+
$[12] = adaptedStore;
|
|
69
|
+
$[13] = runtime;
|
|
70
|
+
$[14] = t4;
|
|
71
|
+
} else t4 = $[14];
|
|
72
|
+
useEffect(t4);
|
|
73
|
+
let t5;
|
|
74
|
+
let t6;
|
|
75
|
+
if ($[15] !== modelContext || $[16] !== runtime) {
|
|
76
|
+
t5 = () => {
|
|
48
77
|
if (!modelContext) return;
|
|
49
78
|
return runtime.registerModelContextProvider(modelContext);
|
|
50
79
|
};
|
|
51
|
-
|
|
52
|
-
$[
|
|
53
|
-
$[
|
|
54
|
-
$[
|
|
55
|
-
$[
|
|
80
|
+
t6 = [modelContext, runtime];
|
|
81
|
+
$[15] = modelContext;
|
|
82
|
+
$[16] = runtime;
|
|
83
|
+
$[17] = t5;
|
|
84
|
+
$[18] = t6;
|
|
56
85
|
} else {
|
|
57
|
-
|
|
58
|
-
|
|
86
|
+
t5 = $[17];
|
|
87
|
+
t6 = $[18];
|
|
59
88
|
}
|
|
60
|
-
useEffect(
|
|
61
|
-
let
|
|
62
|
-
if ($[
|
|
63
|
-
|
|
64
|
-
$[
|
|
65
|
-
$[
|
|
66
|
-
} else
|
|
67
|
-
return
|
|
89
|
+
useEffect(t5, t6);
|
|
90
|
+
let t7;
|
|
91
|
+
if ($[19] !== runtime) {
|
|
92
|
+
t7 = new AssistantRuntimeImpl(runtime);
|
|
93
|
+
$[19] = runtime;
|
|
94
|
+
$[20] = t7;
|
|
95
|
+
} else t7 = $[20];
|
|
96
|
+
return t7;
|
|
68
97
|
};
|
|
69
98
|
//#endregion
|
|
70
99
|
export { useExternalStoreRuntime };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalStoreRuntime.js","names":["c","_c","useEffect","useMemo","useState","ExternalStoreRuntimeCore","ExternalStoreAdapter","AssistantRuntime","AssistantRuntimeImpl","invalidateThreadRuntime","useRuntimeAdapters","useExternalStoreRuntime","store","$","t0","
|
|
1
|
+
{"version":3,"file":"useExternalStoreRuntime.js","names":["c","_c","useEffect","useMemo","useState","ExternalStoreRuntimeCore","ExternalStoreAdapter","AssistantRuntime","AssistantRuntimeImpl","invalidateThreadRuntime","useRuntimeAdapters","useExternalStoreRuntime","store","$","modelContext","feedback","t0","bb0","adapters","t1","t2","adaptedStore","runtime","threads","getMainThreadRuntimeCore","t3","t4","setAdapter","t5","t6","registerModelContextProvider","t7"],"sources":["../../../src/react/runtimes/useExternalStoreRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ExternalStoreRuntimeCore } from \"../../runtimes/internal\";\nimport type { ExternalStoreAdapter } from \"../../runtimes/external-store/external-store-adapter\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { AssistantRuntimeImpl } from \"../../runtime/internal\";\nimport { invalidateThreadRuntime } from \"../../runtime/utils/thread-runtime-lifecycle\";\nimport { useRuntimeAdapters } from \"./RuntimeAdapterProvider\";\n\nexport const useExternalStoreRuntime = <T>(\n store: ExternalStoreAdapter<T>,\n): AssistantRuntime => {\n const { modelContext, feedback } = useRuntimeAdapters() ?? {};\n const adaptedStore = useMemo(() => {\n if (!feedback || store.adapters?.feedback) return store;\n return {\n ...store,\n adapters: { ...store.adapters, feedback },\n };\n }, [feedback, store]);\n const [runtime] = useState(() => new ExternalStoreRuntimeCore(adaptedStore));\n\n useEffect(() => {\n return () => {\n invalidateThreadRuntime(runtime.threads.getMainThreadRuntimeCore());\n };\n }, [runtime]);\n\n useEffect(() => {\n runtime.setAdapter(adaptedStore);\n });\n\n useEffect(() => {\n if (!modelContext) return undefined;\n return runtime.registerModelContextProvider(modelContext);\n }, [modelContext, runtime]);\n\n return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);\n};\n"],"mappings":";;;;;;;;AAUA,MAAaW,2BAA0BC,UAAA;CAAA,MAAAC,IAAAZ,EAAA,EAAA;CAGrC,MAAA,EAAAa,cAAAC,aAAmCL,mBAAyB,KAAzB,CAAyB;CAAE,IAAAM;CAAAC,KAAA;EAE5D,IAAI,CAACF,YAAYH,MAAKM,UAAmBH,UAAA;GAAEC,KAAOJ;GAAP,MAAAK;EAAa;EAAA,IAAAE;EAAA,IAAAN,EAAA,OAAAE,YAAAF,EAAA,OAAAD,MAAAM,UAAA;GAG5CC,KAAA;IAAA,GAAKP,MAAKM;IAASH;GAAW;GAACF,EAAA,KAAAE;GAAAF,EAAA,KAAAD,MAAAM;GAAAL,EAAA,KAAAM;EAAA,OAAAA,KAAAN,EAAA;EAAA,IAAAO;EAAA,IAAAP,EAAA,OAAAD,SAAAC,EAAA,OAAAM,IAAA;GAFpCC,KAAA;IAAA,GACFR;IAAKM,UACEC;GACZ;GAACN,EAAA,KAAAD;GAAAC,EAAA,KAAAM;GAAAN,EAAA,KAAAO;EAAA,OAAAA,KAAAP,EAAA;EAHDG,KAAOI;CAGL;CALJ,MAAAC,eAAqBL;CAMC,IAAAG;CAAA,IAAAN,EAAA,OAAAQ,cAAA;EACKF,WAAM,IAAId,yBAAyBgB,YAAY;EAACR,EAAA,KAAAQ;EAAAR,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAA3E,MAAA,CAAAS,WAAkBlB,SAASe,EAAgD;CAAE,IAAAC;CAAA,IAAAP,EAAA,OAAAS,QAAAC,SAAA;EAEnEH,iBACD;GACLX,wBAAwBa,QAAOC,QAAQC,yBAA0B,CAAC;EAAC;EAEtEX,EAAA,KAAAS,QAAAC;EAAAV,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,QAAAS,SAAA;EAAEG,KAAA,CAACH,OAAO;EAACT,EAAA,MAAAS;EAAAT,EAAA,MAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAJZX,UAAUkB,IAIPK,EAAS;CAAC,IAAAC;CAAA,IAAAb,EAAA,QAAAQ,gBAAAR,EAAA,QAAAS,SAAA;EAEHI,WAAA;GACRJ,QAAOK,WAAYN,YAAY;EAAC;EACjCR,EAAA,MAAAQ;EAAAR,EAAA,MAAAS;EAAAT,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAFDX,UAAUwB,EAET;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAAhB,EAAA,QAAAC,gBAAAD,EAAA,QAAAS,SAAA;EAEQM,WAAA;GACR,IAAI,CAACd,cAAY;GAAmB,OAC7BQ,QAAOQ,6BAA8BhB,YAAY;EAAC;EACxDe,KAAA,CAACf,cAAcQ,OAAO;EAACT,EAAA,MAAAC;EAAAD,EAAA,MAAAS;EAAAT,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;CAAA,OAAA;EAAAD,KAAAf,EAAA;EAAAgB,KAAAhB,EAAA;CAAA;CAH1BX,UAAU0B,IAGPC,EAAuB;CAAC,IAAAE;CAAA,IAAAlB,EAAA,QAAAS,SAAA;EAENS,KAAA,IAAIvB,qBAAqBc,OAAO;EAACT,EAAA,MAAAS;EAAAT,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,OAAjCkB;AAAiC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRemoteThreadListRuntime.d.ts","names":[],"sources":["../../../src/react/runtimes/useRemoteThreadListRuntime.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useRemoteThreadListRuntime.d.ts","names":[],"sources":["../../../src/react/runtimes/useRemoteThreadListRuntime.ts"],"mappings":";;;cAkFa,6BACX,SAAS,4BACR"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { WritableSubscribable } from "../../subscribable/subscribable.js";
|
|
1
2
|
import { BaseAssistantRuntimeCore } from "../../runtime/base/base-assistant-runtime-core.js";
|
|
2
3
|
import { AssistantRuntimeImpl } from "../../runtime/api/assistant-runtime.js";
|
|
4
|
+
import { useSubscribable } from "../../store/runtime-clients/useSubscribable.js";
|
|
3
5
|
import { RemoteThreadListThreadListRuntimeCore } from "./RemoteThreadListThreadListRuntimeCore.js";
|
|
4
6
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
|
-
import { useCallback, useEffect, useEffectEvent, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
7
|
+
import { useCallback, useEffect, useEffectEvent, useInsertionEffect, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
6
8
|
import { useAui } from "@assistant-ui/store";
|
|
7
9
|
//#region src/react/runtimes/useRemoteThreadListRuntime.ts
|
|
8
10
|
var RemoteThreadListRuntimeCore = class extends BaseAssistantRuntimeCore {
|
|
@@ -16,7 +18,7 @@ var RemoteThreadListRuntimeCore = class extends BaseAssistantRuntimeCore {
|
|
|
16
18
|
}
|
|
17
19
|
};
|
|
18
20
|
const useRemoteThreadListRuntimeImpl = (options) => {
|
|
19
|
-
const $ = c(
|
|
21
|
+
const $ = c(18);
|
|
20
22
|
let t0;
|
|
21
23
|
if ($[0] !== options) {
|
|
22
24
|
t0 = () => new RemoteThreadListRuntimeCore(options);
|
|
@@ -25,38 +27,84 @@ const useRemoteThreadListRuntimeImpl = (options) => {
|
|
|
25
27
|
} else t0 = $[1];
|
|
26
28
|
const [runtime] = useState(t0);
|
|
27
29
|
let t1;
|
|
28
|
-
if ($[2] !==
|
|
29
|
-
t1 = () =>
|
|
30
|
+
if ($[2] !== runtime.threads) {
|
|
31
|
+
t1 = () => () => queueMicrotask(() => runtime.threads.__internal_dispose());
|
|
32
|
+
$[2] = runtime.threads;
|
|
33
|
+
$[3] = t1;
|
|
34
|
+
} else t1 = $[3];
|
|
35
|
+
let t2;
|
|
36
|
+
if ($[4] !== runtime) {
|
|
37
|
+
t2 = [runtime];
|
|
38
|
+
$[4] = runtime;
|
|
39
|
+
$[5] = t2;
|
|
40
|
+
} else t2 = $[5];
|
|
41
|
+
useInsertionEffect(t1, t2);
|
|
42
|
+
let t3;
|
|
43
|
+
if ($[6] !== options || $[7] !== runtime.threads) {
|
|
44
|
+
t3 = () => {
|
|
30
45
|
runtime.threads.__internal_setOptions(options);
|
|
31
46
|
runtime.threads.__internal_load();
|
|
32
47
|
};
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
35
|
-
$[
|
|
36
|
-
} else
|
|
37
|
-
let
|
|
38
|
-
if ($[
|
|
39
|
-
|
|
40
|
-
$[
|
|
41
|
-
$[
|
|
42
|
-
$[
|
|
43
|
-
} else
|
|
44
|
-
useEffect(
|
|
45
|
-
let
|
|
46
|
-
if ($[
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
$[6] = options;
|
|
49
|
+
$[7] = runtime.threads;
|
|
50
|
+
$[8] = t3;
|
|
51
|
+
} else t3 = $[8];
|
|
52
|
+
let t4;
|
|
53
|
+
if ($[9] !== options || $[10] !== runtime) {
|
|
54
|
+
t4 = [runtime, options];
|
|
55
|
+
$[9] = options;
|
|
56
|
+
$[10] = runtime;
|
|
57
|
+
$[11] = t4;
|
|
58
|
+
} else t4 = $[11];
|
|
59
|
+
useEffect(t3, t4);
|
|
60
|
+
let t5;
|
|
61
|
+
if ($[12] !== runtime.threads) {
|
|
62
|
+
t5 = () => {
|
|
63
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
64
|
+
const reloadAfterError = () => {
|
|
65
|
+
if (runtime.threads.loadError !== void 0) runtime.threads.reload();
|
|
66
|
+
};
|
|
67
|
+
const reloadAfterVisible = () => {
|
|
68
|
+
if (document.visibilityState === "visible") reloadAfterError();
|
|
69
|
+
};
|
|
70
|
+
window.addEventListener("online", reloadAfterError);
|
|
71
|
+
document.addEventListener("visibilitychange", reloadAfterVisible);
|
|
72
|
+
return () => {
|
|
73
|
+
window.removeEventListener("online", reloadAfterError);
|
|
74
|
+
document.removeEventListener("visibilitychange", reloadAfterVisible);
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
$[12] = runtime.threads;
|
|
78
|
+
$[13] = t5;
|
|
79
|
+
} else t5 = $[13];
|
|
80
|
+
let t6;
|
|
81
|
+
if ($[14] !== runtime) {
|
|
82
|
+
t6 = [runtime];
|
|
83
|
+
$[14] = runtime;
|
|
84
|
+
$[15] = t6;
|
|
85
|
+
} else t6 = $[15];
|
|
86
|
+
useEffect(t5, t6);
|
|
87
|
+
let t7;
|
|
88
|
+
if ($[16] !== runtime) {
|
|
89
|
+
t7 = new AssistantRuntimeImpl(runtime);
|
|
90
|
+
$[16] = runtime;
|
|
91
|
+
$[17] = t7;
|
|
92
|
+
} else t7 = $[17];
|
|
93
|
+
return t7;
|
|
52
94
|
};
|
|
53
95
|
const useRemoteThreadListRuntime = (options) => {
|
|
54
|
-
const
|
|
55
|
-
|
|
96
|
+
const [runtimeHookStore] = useState(() => new WritableSubscribable(options.runtimeHook));
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
runtimeHookStore.setState(options.runtimeHook);
|
|
99
|
+
}, [runtimeHookStore, options.runtimeHook]);
|
|
56
100
|
const initialThreadIdRef = useRef(options.initialThreadId);
|
|
57
|
-
const stableRuntimeHook = useCallback(()
|
|
58
|
-
return
|
|
59
|
-
|
|
101
|
+
const stableRuntimeHook = useCallback(function useCommittedRuntimeHook() {
|
|
102
|
+
return useSubscribable({
|
|
103
|
+
subscribe: runtimeHookStore.subscribe,
|
|
104
|
+
getState: runtimeHookStore.getState,
|
|
105
|
+
getServerSnapshot: runtimeHookStore.getState
|
|
106
|
+
})();
|
|
107
|
+
}, [runtimeHookStore]);
|
|
60
108
|
const onThreadIdChange = useEffectEvent((threadId) => {
|
|
61
109
|
options.onThreadIdChange?.(threadId);
|
|
62
110
|
});
|
|
@@ -75,7 +123,7 @@ const useRemoteThreadListRuntime = (options) => {
|
|
|
75
123
|
]);
|
|
76
124
|
if (useAui().threadListItem.source !== null) {
|
|
77
125
|
if (!stableOptions.allowNesting) throw new Error("useRemoteThreadListRuntime cannot be nested inside another RemoteThreadListRuntime. Set allowNesting: true to allow nesting (the inner runtime will become a no-op).");
|
|
78
|
-
return
|
|
126
|
+
return options.runtimeHook();
|
|
79
127
|
}
|
|
80
128
|
return useRemoteThreadListRuntimeImpl(stableOptions);
|
|
81
129
|
};
|