@assistant-ui/core 0.3.13 → 0.3.14
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/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +9 -15
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/thread-history.d.ts +2 -0
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/adapters/voice.js +27 -15
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +6 -6
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +2 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +16 -4
- package/dist/model-context/registry.js.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +8 -1
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.js +23 -18
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +28 -12
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +11 -0
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -0
- package/dist/react/client/AdaptedRemoteThread.js +27 -0
- package/dist/react/client/AdaptedRemoteThread.js.map +1 -0
- package/dist/react/client/InMemoryThreadList.d.ts +19 -0
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -0
- package/dist/react/client/InMemoryThreadList.js +418 -0
- package/dist/react/client/InMemoryThreadList.js.map +1 -0
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +159 -102
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +34 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -0
- package/dist/react/client/RemoteThreadList.js +826 -0
- package/dist/react/client/RemoteThreadList.js.map +1 -0
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +38 -27
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +7 -2
- package/dist/react/index.js +5 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +145 -110
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js +13 -18
- package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js +2 -4
- package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js +2 -4
- package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js +2 -6
- package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js +2 -6
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js +2 -4
- package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js +2 -4
- package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +6 -2
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +13 -0
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +22 -10
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +109 -71
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +8 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +40 -13
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +30 -0
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -0
- package/dist/react/runtimes/RemoteThreadResource.js +134 -0
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -0
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -10
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js +3 -6
- package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +17 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.js +55 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +11 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +165 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +15 -0
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/runManager.js +86 -0
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/types.d.ts +130 -0
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/types.js +0 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +14 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +296 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +7 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.js +25 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +7 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.js +27 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -0
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +39 -13
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +3 -3
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +4 -0
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +7 -0
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +22 -12
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +16 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js +36 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -0
- package/dist/react/runtimes/external-message-converter.js +14 -14
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +44 -28
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.js.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +9 -0
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -0
- package/dist/react/runtimes/useRuntimeAdapters.js +20 -0
- package/dist/react/runtimes/useRuntimeAdapters.js.map +1 -0
- package/dist/runtime/api/composer-runtime.d.ts +5 -0
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.js +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +1 -0
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +4 -2
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +12 -2
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +8 -2
- 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 +8 -7
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -0
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +3 -3
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +0 -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 +10 -4
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +6 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.js +5 -5
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +2 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +8 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.js +11 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -0
- package/dist/runtimes/external-store/external-store-shared-options.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +4 -1
- 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 +8 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +35 -13
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +3 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +53 -13
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +3 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +3 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +29 -1
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +1 -12
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +67 -38
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/suggestions.js +2 -2
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +10 -0
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -0
- package/dist/store/clients/thread-selection-events.js +40 -0
- package/dist/store/clients/thread-selection-events.js.map +1 -0
- package/dist/store/env.d.ts +5 -0
- package/dist/store/env.d.ts.map +1 -0
- package/dist/store/env.js +12 -0
- package/dist/store/env.js.map +1 -0
- package/dist/store/index.d.ts +5 -3
- package/dist/store/index.js +4 -2
- package/dist/store/internal.d.ts +4 -1
- package/dist/store/internal.js +4 -1
- package/dist/store/primitive-predicates.d.ts +19 -0
- package/dist/store/primitive-predicates.d.ts.map +1 -0
- package/dist/store/primitive-predicates.js +19 -0
- package/dist/store/primitive-predicates.js.map +1 -0
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +18 -11
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +5 -0
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -0
- package/dist/store/runtime-clients/handle-runtime-action.js +12 -0
- package/dist/store/runtime-clients/handle-runtime-action.js.map +1 -0
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +5 -0
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -0
- package/dist/store/runtime-clients/handle-thread-list-action.js +7 -0
- package/dist/store/runtime-clients/handle-thread-list-action.js.map +1 -0
- 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 +62 -29
- 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 +5 -6
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/scopes/composer.d.ts +9 -4
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +7 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -7
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +17 -1
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +2 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -18
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +25 -9
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +2 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.js +2 -2
- package/dist/utils/notify-event-listeners.js.map +1 -1
- package/package.json +7 -7
- package/src/adapters/speech.test.ts +118 -1
- package/src/adapters/speech.ts +21 -22
- package/src/adapters/thread-history.ts +2 -0
- package/src/adapters/voice.test.ts +69 -0
- package/src/adapters/voice.ts +27 -27
- package/src/index.ts +1 -0
- package/src/model-context/frame/host.test.ts +23 -0
- package/src/model-context/frame/host.ts +2 -1
- package/src/model-context/registry.test.ts +131 -0
- package/src/model-context/registry.ts +16 -6
- package/src/react/RuntimeAdapter.test.ts +2 -0
- package/src/react/RuntimeAdapter.ts +20 -8
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +34 -17
- package/src/react/client/AdaptedRemoteThread.ts +41 -0
- package/src/react/client/InMemoryThreadList.test.tsx +148 -0
- package/src/react/client/InMemoryThreadList.ts +290 -0
- package/src/react/client/Interactables.test.ts +326 -2
- package/src/react/client/Interactables.ts +227 -110
- package/src/react/client/RemoteThreadList.test.ts +1026 -0
- package/src/react/client/RemoteThreadList.ts +1067 -0
- package/src/react/client/Tools.ts +36 -29
- package/src/react/index.ts +13 -0
- package/src/react/interactables-legacy/Interactables.test.ts +317 -0
- package/src/react/interactables-legacy/Interactables.ts +204 -128
- package/src/react/primitive-hooks/useActionBarCopy.ts +2 -7
- package/src/react/primitive-hooks/useActionBarEdit.ts +2 -1
- package/src/react/primitive-hooks/useActionBarReload.ts +2 -6
- package/src/react/primitive-hooks/useBranchPickerNext.ts +2 -7
- package/src/react/primitive-hooks/useBranchPickerPrevious.ts +2 -7
- package/src/react/primitive-hooks/useComposerCancel.ts +2 -1
- package/src/react/primitive-hooks/useComposerSend.ts +2 -5
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +11 -0
- package/src/react/primitive-hooks/useSuggestionTrigger.ts +4 -5
- package/src/react/primitives/message/MessageParts.tsx +0 -1
- package/src/react/primitives/thread/ThreadMessages.tsx +2 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +116 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +1 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +57 -6
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +272 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +159 -124
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +59 -20
- package/src/react/runtimes/RemoteThreadResource.test.ts +141 -0
- package/src/react/runtimes/RemoteThreadResource.ts +231 -0
- package/src/react/runtimes/RuntimeAdapterProvider.tsx +8 -20
- package/src/react/runtimes/assistant-transport/commandQueue.ts +68 -0
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +455 -0
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +172 -0
- package/src/react/runtimes/assistant-transport/runManager.ts +124 -0
- package/src/react/runtimes/assistant-transport/transport-delivery.test.tsx +79 -0
- package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +97 -0
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +414 -0
- package/src/react/runtimes/assistant-transport/types.ts +170 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +141 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +625 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +481 -0
- package/src/react/runtimes/assistant-transport/useConvertedState.ts +20 -0
- package/src/react/runtimes/assistant-transport/useLatestRef.ts +9 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +131 -6
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +61 -15
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +6 -4
- package/src/react/runtimes/cloud/auiV0.ts +17 -1
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +36 -21
- package/src/react/runtimes/cloud/useCloudThreadListRuntime.test.tsx +56 -0
- package/src/react/runtimes/cloud/useCloudThreadListRuntime.ts +31 -0
- package/src/react/runtimes/external-message-converter.test.ts +143 -0
- package/src/react/runtimes/external-message-converter.ts +41 -41
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +58 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +83 -0
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +13 -3
- package/src/react/runtimes/useExternalStoreRuntime.ts +7 -0
- package/src/react/runtimes/useExternalStoreSharedOptions.ts +3 -1
- package/src/react/runtimes/useLocalRuntime.test.tsx +130 -4
- package/src/react/runtimes/useRuntimeAdapters.test.tsx +62 -0
- package/src/react/runtimes/useRuntimeAdapters.ts +28 -0
- package/src/runtime/api/composer-runtime.ts +5 -0
- package/src/runtime/api/thread-list-runtime.ts +3 -1
- package/src/runtime/api/thread-runtime.ts +20 -2
- package/src/runtime/base/base-composer-runtime-core.ts +6 -5
- package/src/runtime/base/base-thread-runtime-core.test.ts +191 -0
- package/src/runtime/base/base-thread-runtime-core.ts +11 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -4
- package/src/runtime/interfaces/thread-runtime-core.ts +6 -0
- package/src/runtime/queue/message-queue.ts +2 -1
- package/src/runtime/utils/thread-runtime-lifecycle.ts +18 -0
- package/src/runtimes/external-store/external-store-shared-options.ts +3 -1
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +4 -1
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +99 -34
- package/src/runtimes/local/local-thread-runtime-core.test.ts +373 -4
- package/src/runtimes/local/local-thread-runtime-core.ts +79 -14
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +4 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +4 -0
- package/src/runtimes/remote-thread-list/types.ts +30 -0
- package/src/runtimes/tool-invocations/EDGE_CASES.md +17 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +243 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +127 -61
- package/src/store/clients/model-context-client.test.ts +16 -8
- package/src/store/clients/suggestions.ts +2 -2
- package/src/store/clients/thread-selection-events.ts +21 -0
- package/src/store/env.ts +11 -0
- package/src/store/index.ts +14 -1
- package/src/store/internal.ts +13 -0
- package/src/store/primitive-predicates.test.ts +184 -0
- package/src/store/primitive-predicates.ts +43 -0
- package/src/store/runtime-clients/attachment-runtime-client.test.ts +41 -0
- package/src/store/runtime-clients/attachment-runtime-client.ts +2 -1
- package/src/store/runtime-clients/handle-runtime-action.ts +11 -0
- package/src/store/runtime-clients/handle-thread-list-action.test.ts +69 -0
- package/src/store/runtime-clients/handle-thread-list-action.ts +6 -0
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +15 -7
- package/src/store/runtime-clients/thread-list-runtime-client.ts +9 -6
- package/src/store/scopes/composer.ts +9 -4
- package/src/store/scopes/thread-list-item.ts +7 -6
- package/src/store/scopes/thread.ts +8 -7
- package/src/store/scopes/threads.ts +14 -0
- package/src/subscribable/subscribable.test.ts +77 -1
- package/src/subscribable/subscribable.ts +38 -23
- package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-unarchive.test.ts +25 -0
- package/src/tests/auiV0Encode.test.ts +66 -0
- package/src/tests/base-composer-runtime-core-send.test.ts +30 -0
- package/src/tests/base-composer-runtime-core.test.ts +28 -0
- package/src/tests/composer-can-cancel.test.ts +101 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +101 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +191 -1
- package/src/tests/external-store-thread-runtime-core.test.ts +124 -0
- package/src/tests/interactables-toolui-migration.test.tsx +66 -0
- package/src/tests/message-queue.test.ts +28 -0
- package/src/tests/session-reset-notification.test.ts +145 -0
- package/src/tests/thread-switch-events.test.tsx +99 -1
- package/src/tests/tools-scope-migration.test.tsx +58 -0
- package/src/utils/composite-context-provider.test.ts +139 -0
- package/src/utils/composite-context-provider.ts +26 -8
- package/src/utils/notify-event-listeners.ts +10 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","MessageByIdProvider","MessageState","MessagesComponentConfig","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","ThreadPrimitiveMessages","Props","components","children","value","message","isComponentsSame","prev","next","DEFAULT_SYSTEM_MESSAGE","messageIdSetCache","WeakMap","ReadonlySet","hasMessageId","messages","messageId","ids","get","Set","map","m","id","set","has","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponentProps","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadPrimitiveMessageByIndex","index","displayName","ThreadPrimitiveUnstable_MessageById","s","thread","exists","t3","ThreadPrimitiveMessagesInner","messagesLength","length","Array","from","_","aui","getState","getItem","ThreadPrimitiveMessagesImpl","s_0","composer"],"sources":["../../../../src/react/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useMemo,\n} from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"../../providers/MessageByIndexProvider\";\nimport { MessageByIdProvider } from \"../../providers/MessageByIdProvider\";\nimport type { MessageState } from \"../../../store\";\n\ntype MessagesComponentConfig =\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n\nexport namespace ThreadPrimitiveMessages {\n export type Props =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessagesComponentConfig;\n children?: never;\n }\n | {\n /** Render function called for each message. Receives the message. */\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n}\n\nconst isComponentsSame = (\n prev: MessagesComponentConfig,\n next: MessagesComponentConfig,\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst messageIdSetCache = new WeakMap<\n readonly MessageState[],\n ReadonlySet<string>\n>();\n\nconst hasMessageId = (messages: readonly MessageState[], messageId: string) => {\n let ids = messageIdSetCache.get(messages);\n if (!ids) {\n ids = new Set(messages.map((m) => m.id));\n messageIdSetCache.set(messages, ids);\n }\n return ids.has(messageId);\n};\n\nconst getComponent = (\n components: MessagesComponentConfig,\n role: MessageState[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: MessagesComponentConfig;\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\nexport namespace ThreadPrimitiveMessageByIndex {\n export type Props = {\n index: number;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders a single message at the specified index in the current thread.\n */\nexport const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =\n memo(\n ({ index, components }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nexport namespace ThreadPrimitiveUnstable_MessageById {\n export type Props = {\n messageId: string;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders the message with the given id in the current thread.\n *\n * Unlike {@link ThreadPrimitiveMessageByIndex}, this keys off the message id,\n * so it stays attached to the same message across reordering and windowing -\n * the shape needed to drive a virtualized or custom message list together with\n * `unstable_useThreadMessageIds`. A missing or removed id renders `null` rather\n * than throwing.\n *\n * @deprecated Unstable / Experimental - may change in any release.\n *\n * @example\n * ```tsx\n * const messageIds = unstable_useThreadMessageIds();\n * return messageIds.map((messageId) => (\n * <ThreadPrimitive.Unstable_MessageById\n * key={messageId}\n * messageId={messageId}\n * components={MESSAGE_COMPONENTS}\n * />\n * ));\n * ```\n */\nexport const ThreadPrimitiveUnstable_MessageById: FC<ThreadPrimitiveUnstable_MessageById.Props> =\n memo(\n ({ messageId, components }) => {\n const exists = useAuiState((s) =>\n hasMessageId(s.thread.messages, messageId),\n );\n if (!exists) return null;\n\n return (\n <MessageByIdProvider id={messageId}>\n <ThreadMessageComponent components={components} />\n </MessageByIdProvider>\n );\n },\n (prev, next) =>\n prev.messageId === next.messageId &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveUnstable_MessageById.displayName =\n \"ThreadPrimitive.Unstable_MessageById\";\n\nconst ThreadPrimitiveMessagesInner: FC<{\n children: (value: { message: MessageState }) => ReactNode;\n}> = ({ children }) => {\n const messagesLength = useAuiState((s) => s.thread.messages.length);\n\n return useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <MessageByIndexProvider key={index} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread.message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n ));\n }, [messagesLength, children]);\n};\n\n/**\n * Renders all messages in the current thread.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages>\n * {({ message }) => {\n * if (message.role === \"user\") return <MyUserMessage />;\n * return <MyAssistantMessage />;\n * }}\n * </ThreadPrimitive.Messages>\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n children,\n}) => {\n if (components) {\n return (\n <ThreadPrimitiveMessagesInner>\n {() => <ThreadMessageComponent components={components} />}\n </ThreadPrimitiveMessagesInner>\n );\n }\n return (\n <ThreadPrimitiveMessagesInner>{children}</ThreadPrimitiveMessagesInner>\n );\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => {\n if (prev.children || next.children) {\n return prev.children === next.children;\n }\n return isComponentsSame(prev.components!, next.components!);\n },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","MessageByIdProvider","MessageState","MessagesComponentConfig","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","ThreadPrimitiveMessages","Props","components","children","value","message","isComponentsSame","prev","next","DEFAULT_SYSTEM_MESSAGE","messageIdSetCache","WeakMap","ReadonlySet","hasMessageId","messages","messageId","ids","get","Set","map","m","id","set","has","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponentProps","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadPrimitiveMessageByIndex","index","displayName","ThreadPrimitiveUnstable_MessageById","s","thread","exists","t3","ThreadPrimitiveMessagesInner","messagesLength","length","Array","from","_","aui","getState","getItem","ThreadPrimitiveMessagesImpl","s_0","composer"],"sources":["../../../../src/react/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useMemo,\n} from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"../../providers/MessageByIndexProvider\";\nimport { MessageByIdProvider } from \"../../providers/MessageByIdProvider\";\nimport type { MessageState } from \"../../../store\";\n\ntype MessagesComponentConfig =\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n\nexport namespace ThreadPrimitiveMessages {\n export type Props =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessagesComponentConfig;\n children?: never;\n }\n | {\n /** Render function called for each message. Receives the message. */\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n}\n\nconst isComponentsSame = (\n prev: MessagesComponentConfig,\n next: MessagesComponentConfig,\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst messageIdSetCache = new WeakMap<\n readonly MessageState[],\n ReadonlySet<string>\n>();\n\nconst hasMessageId = (messages: readonly MessageState[], messageId: string) => {\n let ids = messageIdSetCache.get(messages);\n if (!ids) {\n ids = new Set(messages.map((m) => m.id));\n messageIdSetCache.set(messages, ids);\n }\n return ids.has(messageId);\n};\n\nconst getComponent = (\n components: MessagesComponentConfig,\n role: MessageState[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: MessagesComponentConfig;\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\nexport namespace ThreadPrimitiveMessageByIndex {\n export type Props = {\n index: number;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders a single message at the specified index in the current thread.\n */\nexport const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =\n memo(\n ({ index, components }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nexport namespace ThreadPrimitiveUnstable_MessageById {\n export type Props = {\n messageId: string;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders the message with the given id in the current thread.\n *\n * Unlike {@link ThreadPrimitiveMessageByIndex}, this keys off the message id,\n * so it stays attached to the same message across reordering and windowing -\n * the shape needed to drive a virtualized or custom message list together with\n * `unstable_useThreadMessageIds`. A missing or removed id renders `null` rather\n * than throwing.\n *\n * @deprecated Unstable / Experimental - may change in any release.\n *\n * @example\n * ```tsx\n * const messageIds = unstable_useThreadMessageIds();\n * return messageIds.map((messageId) => (\n * <ThreadPrimitive.Unstable_MessageById\n * key={messageId}\n * messageId={messageId}\n * components={MESSAGE_COMPONENTS}\n * />\n * ));\n * ```\n */\nexport const ThreadPrimitiveUnstable_MessageById: FC<ThreadPrimitiveUnstable_MessageById.Props> =\n memo(\n ({ messageId, components }) => {\n const exists = useAuiState((s) =>\n hasMessageId(s.thread.messages, messageId),\n );\n if (!exists) return null;\n\n return (\n <MessageByIdProvider id={messageId}>\n <ThreadMessageComponent components={components} />\n </MessageByIdProvider>\n );\n },\n (prev, next) =>\n prev.messageId === next.messageId &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveUnstable_MessageById.displayName =\n \"ThreadPrimitive.Unstable_MessageById\";\n\nconst ThreadPrimitiveMessagesInner: FC<{\n children: (value: { message: MessageState }) => ReactNode;\n}> = ({ children }) => {\n const messagesLength = useAuiState((s) => s.thread.messages.length);\n\n return useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <MessageByIndexProvider key={index} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread.message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n ));\n }, [messagesLength, children]);\n};\n\n/**\n * Renders all messages in the current thread.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages>\n * {({ message }) => {\n * if (message.role === \"user\") return <MyUserMessage />;\n * return <MyAssistantMessage />;\n * }}\n * </ThreadPrimitive.Messages>\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n children,\n}) => {\n if (components) {\n return (\n <ThreadPrimitiveMessagesInner>\n {() => <ThreadMessageComponent components={components} />}\n </ThreadPrimitiveMessagesInner>\n );\n }\n return (\n <ThreadPrimitiveMessagesInner>{children}</ThreadPrimitiveMessagesInner>\n );\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => {\n if (prev.children || next.children) {\n return prev.children === next.children;\n }\n return isComponentsSame(prev.components!, next.components!);\n },\n);\n"],"mappings":"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"}
|
|
@@ -9,17 +9,22 @@ import { EditComposerRuntimeCore, ThreadComposerRuntimeCore } from "../../runtim
|
|
|
9
9
|
import { AddToolResultOptions, RespondToToolApprovalOptions, ResumeRunConfig, ResumeToolCallOptions, RuntimeCapabilities, SpeechState, StartRunConfig, SubmitFeedbackOptions, ThreadRuntimeEventCallback, ThreadRuntimeEventType, ThreadSuggestion, VoiceSessionState } from "../../runtime/interfaces/thread-runtime-core.js";
|
|
10
10
|
import { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
|
|
11
11
|
import { BaseSubscribable } from "../../subscribable/subscribable.js";
|
|
12
|
+
import { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
|
|
12
13
|
import "../../store/index.js";
|
|
13
14
|
import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
|
|
14
15
|
import "../../index.js";
|
|
16
|
+
import "./RuntimeAdapterProvider.js";
|
|
17
|
+
import { RemoteThreadListHook } from "./RemoteThreadResource.js";
|
|
15
18
|
import { ComponentType, FC, PropsWithChildren } from "react";
|
|
19
|
+
import { AssistantClient } from "@assistant-ui/store";
|
|
16
20
|
//#region src/react/runtimes/RemoteThreadListHookInstanceManager.d.ts
|
|
17
|
-
type RemoteThreadListHook = () => AssistantRuntime;
|
|
18
21
|
declare class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
19
|
-
private
|
|
22
|
+
private runtimeHook;
|
|
23
|
+
private readonly adapterStore;
|
|
24
|
+
private readonly hostStore;
|
|
25
|
+
private readonly pendingThreadAdapters;
|
|
20
26
|
private instances;
|
|
21
27
|
private nextGeneration;
|
|
22
|
-
private useAliveThreadsKeysChanged;
|
|
23
28
|
private parent;
|
|
24
29
|
constructor(runtimeHook: RemoteThreadListHook, parent: ThreadListRuntimeCore);
|
|
25
30
|
private _whenRuntimeAttached;
|
|
@@ -36,6 +41,7 @@ declare class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
36
41
|
startRun: (config: StartRunConfig) => void;
|
|
37
42
|
resumeRun: (config: ResumeRunConfig) => void;
|
|
38
43
|
cancelRun: () => void;
|
|
44
|
+
unstable_notifySessionReset: () => void;
|
|
39
45
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
40
46
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
41
47
|
respondToToolApproval: (options: RespondToToolApprovalOptions) => void;
|
|
@@ -89,6 +95,7 @@ declare class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
89
95
|
startRun: (config: StartRunConfig) => void;
|
|
90
96
|
resumeRun: (config: ResumeRunConfig) => void;
|
|
91
97
|
cancelRun: () => void;
|
|
98
|
+
unstable_notifySessionReset: () => void;
|
|
92
99
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
93
100
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
94
101
|
respondToToolApproval: (options: RespondToToolApprovalOptions) => void;
|
|
@@ -142,6 +149,7 @@ declare class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
142
149
|
startRun: (config: StartRunConfig) => void;
|
|
143
150
|
resumeRun: (config: ResumeRunConfig) => void;
|
|
144
151
|
cancelRun: () => void;
|
|
152
|
+
unstable_notifySessionReset: () => void;
|
|
145
153
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
146
154
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
147
155
|
respondToToolApproval: (options: RespondToToolApprovalOptions) => void;
|
|
@@ -184,22 +192,26 @@ declare class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
184
192
|
}> | undefined;
|
|
185
193
|
__internal_isThreadRunning(threadId: string): boolean;
|
|
186
194
|
private runningSubscribers;
|
|
187
|
-
/**
|
|
188
|
-
* Fires when any thread crosses the running boundary. Separate from the
|
|
189
|
-
* general subscription so a run does not push the thread list through the
|
|
190
|
-
* channel that resolves pending runtime attachments.
|
|
191
|
-
*/
|
|
192
195
|
__internal_subscribeRunningChanged(callback: () => void): Unsubscribe;
|
|
196
|
+
private _publish;
|
|
193
197
|
private _publishThreadRuntime;
|
|
194
198
|
private _trackRunning;
|
|
195
199
|
private _setRunning;
|
|
196
200
|
stopThreadRuntime(threadId: string): void;
|
|
197
201
|
setRuntimeHook(newRuntimeHook: RemoteThreadListHook): void;
|
|
198
|
-
|
|
199
|
-
|
|
202
|
+
__internal_setDefaultAdapters(adapters: RuntimeAdapters | null): void;
|
|
203
|
+
__internal_setThreadAdapters(threadId: string, adapters: RuntimeAdapters | null): void;
|
|
204
|
+
__internal_dispose(): void;
|
|
205
|
+
private _syncHostThreads;
|
|
206
|
+
__internal_useHost(parentClient: AssistantClient): AssistantRuntime[];
|
|
200
207
|
__internal_RenderThreadRuntimes: FC<{
|
|
201
208
|
provider: ComponentType<PropsWithChildren>;
|
|
202
209
|
}>;
|
|
210
|
+
__internal_Host: FC<{
|
|
211
|
+
parentClient: AssistantClient;
|
|
212
|
+
}>;
|
|
213
|
+
private _OuterActiveThreadProvider;
|
|
214
|
+
private _AdapterSink;
|
|
203
215
|
}
|
|
204
216
|
//#endregion
|
|
205
217
|
export { RemoteThreadListHookInstanceManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListHookInstanceManager.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RemoteThreadListHookInstanceManager.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;cA2Da,4CAA4C;UAC/C;mBACS;mBAIA;mBAIA;UAIT;UACA;UACA;EAGN,YAAA,aAAa,sBACb,QAAQ;UAOF;EAsBD,mBAAmB,mBAAgB,QAAA;;;eA7BhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CH,gCAAgC,mBAAgB,QAAA;;;eAbb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBnC,qBAAqB,mBAAgB;;;eAZW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBhD,2BAA2B;UAI1B;EAED,mCAAmC,uBAAuB;UAKzD;UAQA;UAmBA;UAgBA;EASD,kBAAkB;EAUlB,eAAe,gBAAgB;EAS/B,8BAA8B,UAAU;EAMxC,6BACL,kBACA,UAAU;EASL;UAMC;EAYD,mBAAmB,cAAc,kBAAA;EAyBjC,iCAAiC;IACtC,UAAU,cAAc;;EAenB,iBAAiB;IAAK,cAAc;;UAOnC;UAmCA"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { BaseSubscribable } from "../../subscribable/subscribable.js";
|
|
2
2
|
import { getThreadRuntimeCoreIsRunning } from "../../runtime/api/thread-runtime.js";
|
|
3
3
|
import { ThreadListRuntimeImpl } from "../../runtime/api/thread-list-runtime.js";
|
|
4
|
+
import { invalidateThreadRuntime } from "../../runtime/utils/thread-runtime-lifecycle.js";
|
|
5
|
+
import { useRuntimeAdapters } from "./useRuntimeAdapters.js";
|
|
4
6
|
import { ThreadListItemRuntimeProvider } from "../providers/ThreadListItemRuntimeProvider.js";
|
|
7
|
+
import { RemoteThreadResource } from "./RemoteThreadResource.js";
|
|
5
8
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
6
|
-
import { Fragment, memo,
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
+
import { Fragment, memo, useEffect, useLayoutEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
|
|
10
|
+
import { useResources, withKey } from "@assistant-ui/tap";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
12
|
import { create } from "zustand";
|
|
10
13
|
//#region src/react/runtimes/RemoteThreadListHookInstanceManager.tsx
|
|
11
14
|
const ProviderRenderDetector = (t0) => {
|
|
@@ -29,15 +32,23 @@ const ProviderRenderDetector = (t0) => {
|
|
|
29
32
|
return null;
|
|
30
33
|
};
|
|
31
34
|
var RemoteThreadListHookInstanceManager = class extends BaseSubscribable {
|
|
32
|
-
|
|
35
|
+
runtimeHook;
|
|
36
|
+
adapterStore = create(() => ({
|
|
37
|
+
defaultAdapters: null,
|
|
38
|
+
threadAdapters: /* @__PURE__ */ new Map()
|
|
39
|
+
}));
|
|
40
|
+
hostStore = create(() => ({
|
|
41
|
+
threads: [],
|
|
42
|
+
hookEpoch: 0
|
|
43
|
+
}));
|
|
44
|
+
pendingThreadAdapters = /* @__PURE__ */ new Map();
|
|
33
45
|
instances = /* @__PURE__ */ new Map();
|
|
34
46
|
nextGeneration = 0;
|
|
35
|
-
useAliveThreadsKeysChanged = create(() => ({}));
|
|
36
47
|
parent;
|
|
37
48
|
constructor(runtimeHook, parent) {
|
|
38
49
|
super();
|
|
39
50
|
this.parent = parent;
|
|
40
|
-
this.
|
|
51
|
+
this.runtimeHook = runtimeHook;
|
|
41
52
|
}
|
|
42
53
|
_whenRuntimeAttached(threadId) {
|
|
43
54
|
return new Promise((resolve, reject) => {
|
|
@@ -58,19 +69,21 @@ var RemoteThreadListHookInstanceManager = class extends BaseSubscribable {
|
|
|
58
69
|
}
|
|
59
70
|
startThreadRuntime(threadId) {
|
|
60
71
|
if (!this.instances.has(threadId)) {
|
|
72
|
+
const generation = this.nextGeneration++;
|
|
61
73
|
this.instances.set(threadId, {
|
|
62
|
-
generation
|
|
74
|
+
generation,
|
|
63
75
|
isRunning: false
|
|
64
76
|
});
|
|
65
|
-
this.
|
|
77
|
+
this._syncHostThreads();
|
|
66
78
|
}
|
|
67
79
|
return this._whenRuntimeAttached(threadId);
|
|
68
80
|
}
|
|
69
81
|
__internal_restartThreadRuntime(threadId) {
|
|
70
82
|
const instance = this.instances.get(threadId);
|
|
71
83
|
if (!instance) return this.startThreadRuntime(threadId);
|
|
84
|
+
if (instance.runtime) invalidateThreadRuntime(instance.runtime);
|
|
72
85
|
instance.generation = this.nextGeneration++;
|
|
73
|
-
this.
|
|
86
|
+
this._syncHostThreads();
|
|
74
87
|
this._notifySubscribers();
|
|
75
88
|
return this._whenRuntimeAttached(threadId);
|
|
76
89
|
}
|
|
@@ -83,18 +96,16 @@ var RemoteThreadListHookInstanceManager = class extends BaseSubscribable {
|
|
|
83
96
|
return this.instances.get(threadId)?.isRunning ?? false;
|
|
84
97
|
}
|
|
85
98
|
runningSubscribers = /* @__PURE__ */ new Set();
|
|
86
|
-
/**
|
|
87
|
-
* Fires when any thread crosses the running boundary. Separate from the
|
|
88
|
-
* general subscription so a run does not push the thread list through the
|
|
89
|
-
* channel that resolves pending runtime attachments.
|
|
90
|
-
*/
|
|
91
99
|
__internal_subscribeRunningChanged(callback) {
|
|
92
100
|
this.runningSubscribers.add(callback);
|
|
93
101
|
return () => this.runningSubscribers.delete(callback);
|
|
94
102
|
}
|
|
103
|
+
_publish = (threadId, runtime, generation) => {
|
|
104
|
+
this._publishThreadRuntime(threadId, runtime, generation);
|
|
105
|
+
};
|
|
95
106
|
_publishThreadRuntime(threadId, runtime, generation) {
|
|
96
107
|
const instance = this.instances.get(threadId);
|
|
97
|
-
if (!instance)
|
|
108
|
+
if (!instance) return;
|
|
98
109
|
if (instance.generation !== generation) return;
|
|
99
110
|
const previousRuntime = instance.runtime;
|
|
100
111
|
instance.runtime = runtime;
|
|
@@ -121,83 +132,110 @@ var RemoteThreadListHookInstanceManager = class extends BaseSubscribable {
|
|
|
121
132
|
for (const callback of this.runningSubscribers) callback();
|
|
122
133
|
}
|
|
123
134
|
stopThreadRuntime(threadId) {
|
|
124
|
-
this.instances.get(threadId)
|
|
135
|
+
const instance = this.instances.get(threadId);
|
|
136
|
+
if (instance?.runtime) invalidateThreadRuntime(instance.runtime);
|
|
137
|
+
instance?.unsubscribeRunning?.();
|
|
125
138
|
this.instances.delete(threadId);
|
|
126
|
-
this.
|
|
139
|
+
this.pendingThreadAdapters.delete(threadId);
|
|
140
|
+
this._syncHostThreads();
|
|
127
141
|
this._notifySubscribers();
|
|
128
142
|
}
|
|
129
143
|
setRuntimeHook(newRuntimeHook) {
|
|
130
|
-
if (this.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
if (this.runtimeHook === newRuntimeHook) return;
|
|
145
|
+
this.runtimeHook = newRuntimeHook;
|
|
146
|
+
this.hostStore.setState((state) => ({
|
|
147
|
+
...state,
|
|
148
|
+
hookEpoch: state.hookEpoch + 1
|
|
149
|
+
}), true);
|
|
150
|
+
}
|
|
151
|
+
__internal_setDefaultAdapters(adapters) {
|
|
152
|
+
const current = this.adapterStore.getState();
|
|
153
|
+
if (current.defaultAdapters === adapters) return;
|
|
154
|
+
this.adapterStore.setState({
|
|
155
|
+
...current,
|
|
156
|
+
defaultAdapters: adapters
|
|
157
|
+
}, true);
|
|
158
|
+
}
|
|
159
|
+
__internal_setThreadAdapters(threadId, adapters) {
|
|
160
|
+
const current = this.adapterStore.getState();
|
|
161
|
+
const next = new Map(current.threadAdapters);
|
|
162
|
+
if (adapters === null) next.delete(threadId);
|
|
163
|
+
else next.set(threadId, adapters);
|
|
164
|
+
this.adapterStore.setState({
|
|
165
|
+
...current,
|
|
166
|
+
threadAdapters: next
|
|
167
|
+
}, true);
|
|
168
|
+
}
|
|
169
|
+
__internal_dispose() {
|
|
170
|
+
for (const threadId of [...this.instances.keys()]) this.stopThreadRuntime(threadId);
|
|
171
|
+
}
|
|
172
|
+
_syncHostThreads() {
|
|
173
|
+
this.hostStore.setState((state) => ({
|
|
174
|
+
...state,
|
|
175
|
+
threads: Array.from(this.instances.entries()).map(([id, { generation }]) => ({
|
|
176
|
+
id,
|
|
177
|
+
generation
|
|
178
|
+
}))
|
|
179
|
+
}), true);
|
|
180
|
+
}
|
|
181
|
+
__internal_useHost(parentClient) {
|
|
182
|
+
const { threads, hookEpoch } = this.hostStore();
|
|
183
|
+
const adapters = this.adapterStore();
|
|
184
|
+
const runtimeHook = this.runtimeHook;
|
|
185
|
+
return useResources(threads.map(({ id, generation }) => {
|
|
186
|
+
const threadAdapters = this.pendingThreadAdapters.has(id) ? this.pendingThreadAdapters.get(id) : adapters.threadAdapters.get(id) ?? adapters.defaultAdapters;
|
|
187
|
+
return withKey(`${id}:${generation}:${hookEpoch}`, RemoteThreadResource({
|
|
188
|
+
threadId: id,
|
|
189
|
+
generation,
|
|
190
|
+
parentList: this.parent,
|
|
191
|
+
runtimeHook,
|
|
192
|
+
parentClient,
|
|
193
|
+
adapters: threadAdapters,
|
|
194
|
+
publish: this._publish
|
|
195
|
+
}));
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
__internal_RenderThreadRuntimes = ({ provider }) => {
|
|
199
|
+
this.hostStore();
|
|
200
|
+
return Array.from(this.instances.entries()).map(([threadId, { generation }]) => /* @__PURE__ */ jsx(this._OuterActiveThreadProvider, {
|
|
139
201
|
threadId,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
isMounted.current = true;
|
|
147
|
-
updateRuntime();
|
|
148
|
-
return threadBinding.outerSubscribe(updateRuntime);
|
|
149
|
-
}, [threadBinding, updateRuntime]);
|
|
150
|
-
const aui = useAui();
|
|
151
|
-
const initPromiseRef = useRef(void 0);
|
|
152
|
-
const hasInitializedRef = useRef(false);
|
|
153
|
-
useEffect(() => {
|
|
154
|
-
const runtimeCore = threadBinding.getState();
|
|
155
|
-
const setGetInitializePromise = runtimeCore.__internal_setGetInitializePromise;
|
|
156
|
-
if (typeof setGetInitializePromise === "function") setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);
|
|
157
|
-
}, [threadBinding]);
|
|
158
|
-
const handleInitialize = useEffectEvent(() => {
|
|
159
|
-
if (hasInitializedRef.current) return;
|
|
160
|
-
if (aui.threadListItem.getState().status !== "new") return;
|
|
161
|
-
hasInitializedRef.current = true;
|
|
162
|
-
initPromiseRef.current = aui.threadListItem.initialize();
|
|
163
|
-
const dispose = runtime.thread.unstable_on("runEnd", () => {
|
|
164
|
-
dispose();
|
|
165
|
-
aui.threadListItem.generateTitle();
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
useEffect(() => {
|
|
169
|
-
hasInitializedRef.current = false;
|
|
170
|
-
return runtime.threads.main.unstable_on("initialize", handleInitialize);
|
|
171
|
-
}, [runtime]);
|
|
172
|
-
return /* @__PURE__ */ jsx(Fragment$1, { children });
|
|
202
|
+
provider
|
|
203
|
+
}, `${threadId}:${generation}`));
|
|
204
|
+
};
|
|
205
|
+
__internal_Host = ({ parentClient }) => {
|
|
206
|
+
this.__internal_useHost(parentClient);
|
|
207
|
+
return null;
|
|
173
208
|
};
|
|
174
|
-
_OuterActiveThreadProvider = memo(({ threadId,
|
|
209
|
+
_OuterActiveThreadProvider = memo(({ threadId, provider: Provider }) => {
|
|
175
210
|
const runtime = useMemo(() => new ThreadListRuntimeImpl(this.parent).getItemById(threadId), [threadId]);
|
|
176
211
|
const detectorRef = useRef(false);
|
|
177
212
|
useEffect(() => {
|
|
178
213
|
if (process.env.NODE_ENV !== "production" && Provider !== Fragment) {
|
|
179
214
|
const id = setTimeout(() => {
|
|
180
|
-
if (!detectorRef.current) console.warn("RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. Render `children` on first commit; deferring them behind a loading state, Suspense boundary, or `useEffect` gate strands the runtime
|
|
215
|
+
if (!detectorRef.current) console.warn("RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. Render `children` on first commit; deferring them behind a loading state, Suspense boundary, or `useEffect` gate strands the runtime host and leaves the thread without context.");
|
|
181
216
|
}, 100);
|
|
182
217
|
return () => clearTimeout(id);
|
|
183
218
|
}
|
|
184
219
|
}, [Provider]);
|
|
185
220
|
return /* @__PURE__ */ jsx(ThreadListItemRuntimeProvider, {
|
|
186
221
|
runtime,
|
|
187
|
-
children: /* @__PURE__ */ jsx(Provider, { children: /* @__PURE__ */ jsx(this.
|
|
222
|
+
children: /* @__PURE__ */ jsx(Provider, { children: /* @__PURE__ */ jsx(this._AdapterSink, {
|
|
188
223
|
threadId,
|
|
189
|
-
|
|
190
|
-
children: /* @__PURE__ */ jsx(ProviderRenderDetector, { detectorRef })
|
|
224
|
+
detectorRef
|
|
191
225
|
}) })
|
|
192
226
|
});
|
|
193
227
|
});
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
228
|
+
_AdapterSink = ({ threadId, detectorRef }) => {
|
|
229
|
+
const adapters = useRuntimeAdapters();
|
|
230
|
+
this.pendingThreadAdapters.set(threadId, adapters);
|
|
231
|
+
useLayoutEffect(() => {
|
|
232
|
+
this.__internal_setThreadAdapters(threadId, adapters);
|
|
233
|
+
return () => {
|
|
234
|
+
if (this.pendingThreadAdapters.get(threadId) === adapters) this.pendingThreadAdapters.delete(threadId);
|
|
235
|
+
this.__internal_setThreadAdapters(threadId, null);
|
|
236
|
+
};
|
|
237
|
+
}, [threadId, adapters]);
|
|
238
|
+
return /* @__PURE__ */ jsx(ProviderRenderDetector, { detectorRef });
|
|
201
239
|
};
|
|
202
240
|
};
|
|
203
241
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListHookInstanceManager.js","names":["FC","RefObject","useCallback","useRef","useEffect","useEffectEvent","useLayoutEffect","memo","PropsWithChildren","ComponentType","useMemo","Fragment","UseBoundStore","StoreApi","create","useAui","ThreadListItemRuntimeProvider","ThreadRuntimeCore","ThreadListRuntimeCore","AssistantRuntime","Unsubscribe","BaseSubscribable","getThreadRuntimeCoreIsRunning","ThreadRuntimeImpl","ThreadListRuntimeImpl","RemoteThreadListHook","RemoteThreadListHookInstance","runtime","publishedGeneration","generation","isRunning","unsubscribeRunning","ProviderRenderDetector","detectorRef","t0","$","_c","t1","t2","current","RemoteThreadListHookInstanceManager","useRuntimeHook","useRuntime","instances","Map","nextGeneration","useAliveThreadsKeysChanged","parent","constructor","runtimeHook","_whenRuntimeAttached","threadId","Promise","resolve","reject","callback","instance","get","dispose","Error","subscribe","startThreadRuntime","has","set","setState","__internal_restartThreadRuntime","_notifySubscribers","getThreadRuntimeCore","undefined","__internal_isThreadRunning","runningSubscribers","Set","__internal_subscribeRunningChanged","add","delete","_publishThreadRuntime","previousRuntime","_trackRunning","_setRunning","stopThreadRuntime","setRuntimeHook","newRuntimeHook","prevRuntimeHook","getState","_RuntimeBinder","children","threadBinding","thread","__internal_threadBinding","updateRuntime","isMounted","outerSubscribe","aui","initPromiseRef","hasInitializedRef","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","handleInitialize","state","threadListItem","status","initialize","unstable_on","generateTitle","threads","main","_OuterActiveThreadProvider","provider","Provider","getItemById","process","env","NODE_ENV","id","setTimeout","console","warn","clearTimeout","__internal_RenderThreadRuntimes","Array","from","entries","map"],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"sourcesContent":["import {\n type FC,\n type RefObject,\n useCallback,\n useRef,\n useEffect,\n useEffectEvent,\n useLayoutEffect,\n memo,\n type PropsWithChildren,\n type ComponentType,\n useMemo,\n Fragment,\n} from \"react\";\nimport { type UseBoundStore, type StoreApi, create } from \"zustand\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { ThreadListItemRuntimeProvider } from \"../providers/ThreadListItemRuntimeProvider\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport {\n getThreadRuntimeCoreIsRunning,\n type ThreadRuntimeImpl,\n} from \"../../runtime/api/thread-runtime\";\nimport { ThreadListRuntimeImpl } from \"../../runtime/api/thread-list-runtime\";\n\ntype RemoteThreadListHook = () => AssistantRuntime;\n\ntype RemoteThreadListHookInstance = {\n runtime?: ThreadRuntimeCore | undefined;\n // A runtime riding across a restart stays readable, but only counts as\n // attached once a binder of the current generation re-publishes it.\n publishedGeneration?: number | undefined;\n // Part of the binder's React key, so only a bump remounts the hook.\n generation: number;\n isRunning: boolean;\n unsubscribeRunning?: Unsubscribe | undefined;\n};\n\nconst ProviderRenderDetector: FC<{\n detectorRef: RefObject<boolean>;\n}> = ({ detectorRef }) => {\n useLayoutEffect(() => {\n detectorRef.current = true;\n }, [detectorRef]);\n return null;\n};\nexport class RemoteThreadListHookInstanceManager extends BaseSubscribable {\n private useRuntimeHook: UseBoundStore<\n StoreApi<{ useRuntime: RemoteThreadListHook }>\n >;\n private instances = new Map<string, RemoteThreadListHookInstance>();\n // Manager-wide so it survives instance deletion: a stop and start within one\n // React commit must not reuse a binder key.\n private nextGeneration = 0;\n private useAliveThreadsKeysChanged = create(() => ({}));\n private parent: ThreadListRuntimeCore;\n\n constructor(\n runtimeHook: RemoteThreadListHook,\n parent: ThreadListRuntimeCore,\n ) {\n super();\n this.parent = parent;\n this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));\n }\n\n private _whenRuntimeAttached(threadId: string) {\n return new Promise<ThreadRuntimeCore>((resolve, reject) => {\n const callback = () => {\n const instance = this.instances.get(threadId);\n if (!instance) {\n dispose();\n reject(new Error(\"Thread was deleted before runtime was started\"));\n } else if (\n !instance.runtime ||\n instance.publishedGeneration !== instance.generation\n ) {\n return; // not yet published by the current generation's binder\n } else {\n dispose();\n resolve(instance.runtime);\n }\n };\n const dispose = this.subscribe(callback);\n callback();\n });\n }\n\n public startThreadRuntime(threadId: string) {\n if (!this.instances.has(threadId)) {\n this.instances.set(threadId, {\n generation: this.nextGeneration++,\n isRunning: false,\n });\n this.useAliveThreadsKeysChanged.setState({}, true);\n }\n\n return this._whenRuntimeAttached(threadId);\n }\n\n public __internal_restartThreadRuntime(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return this.startThreadRuntime(threadId);\n\n instance.generation = this.nextGeneration++;\n this.useAliveThreadsKeysChanged.setState({}, true);\n this._notifySubscribers();\n\n return this._whenRuntimeAttached(threadId);\n }\n\n public getThreadRuntimeCore(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return undefined;\n return instance.runtime;\n }\n\n public __internal_isThreadRunning(threadId: string) {\n return this.instances.get(threadId)?.isRunning ?? false;\n }\n\n private runningSubscribers = new Set<() => void>();\n\n /**\n * Fires when any thread crosses the running boundary. Separate from the\n * general subscription so a run does not push the thread list through the\n * channel that resolves pending runtime attachments.\n */\n public __internal_subscribeRunningChanged(callback: () => void): Unsubscribe {\n this.runningSubscribers.add(callback);\n return () => this.runningSubscribers.delete(callback);\n }\n\n private _publishThreadRuntime(\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) {\n const instance = this.instances.get(threadId);\n if (!instance)\n throw new Error(\n `Thread \"${threadId}\" runtime binding not found. This is a bug in assistant-ui.`,\n );\n\n // An outgoing binder outlives its generation until React commits the key\n // change, and must not publish over the incoming one.\n if (instance.generation !== generation) return;\n\n const previousRuntime = instance.runtime;\n instance.runtime = runtime;\n instance.publishedGeneration = generation;\n if (previousRuntime !== runtime) {\n this._trackRunning(instance);\n }\n this._notifySubscribers();\n }\n\n // Run state changes far more often than the thread list does, so the list is\n // only notified when a thread crosses the running boundary.\n private _trackRunning(instance: RemoteThreadListHookInstance) {\n instance.unsubscribeRunning?.();\n\n const runtime = instance.runtime;\n if (!runtime) {\n instance.unsubscribeRunning = undefined;\n this._setRunning(instance, false);\n return;\n }\n\n this._setRunning(instance, getThreadRuntimeCoreIsRunning(runtime));\n instance.unsubscribeRunning = runtime.subscribe(() => {\n this._setRunning(instance, getThreadRuntimeCoreIsRunning(runtime));\n });\n }\n\n private _setRunning(\n instance: RemoteThreadListHookInstance,\n isRunning: boolean,\n ) {\n if (instance.isRunning === isRunning) return;\n instance.isRunning = isRunning;\n for (const callback of this.runningSubscribers) callback();\n }\n\n public stopThreadRuntime(threadId: string) {\n this.instances.get(threadId)?.unsubscribeRunning?.();\n this.instances.delete(threadId);\n this.useAliveThreadsKeysChanged.setState({}, true);\n this._notifySubscribers();\n }\n\n public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {\n const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;\n if (prevRuntimeHook !== newRuntimeHook) {\n this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);\n }\n }\n\n // Rendered as a child of the user's Provider so the runtime hook can\n // read context the Provider injects (e.g. RuntimeAdapterProvider).\n private _RuntimeBinder: FC<\n PropsWithChildren<{ threadId: string; generation: number }>\n > = ({ threadId, generation, children }) => {\n const { useRuntime } = this.useRuntimeHook();\n const runtime = useRuntime();\n\n const threadBinding = (runtime.thread as ThreadRuntimeImpl)\n .__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n this._publishThreadRuntime(\n threadId,\n threadBinding.getState(),\n generation,\n );\n }, [threadId, generation, threadBinding]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const aui = useAui();\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n\n useEffect(() => {\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);\n }\n }, [threadBinding]);\n\n const handleInitialize = useEffectEvent(() => {\n if (hasInitializedRef.current) return;\n\n const state = aui.threadListItem.getState();\n if (state.status !== \"new\") return;\n hasInitializedRef.current = true;\n\n initPromiseRef.current = aui.threadListItem.initialize();\n\n const dispose = runtime.thread.unstable_on(\"runEnd\", () => {\n dispose();\n aui.threadListItem.generateTitle();\n });\n });\n\n useEffect(() => {\n hasInitializedRef.current = false;\n return runtime.threads.main.unstable_on(\"initialize\", handleInitialize);\n }, [runtime]);\n\n return <>{children}</>;\n };\n\n private _OuterActiveThreadProvider: FC<{\n threadId: string;\n generation: number;\n provider: ComponentType<PropsWithChildren>;\n }> = memo(({ threadId, generation, provider: Provider }) => {\n const runtime = useMemo(\n () => new ThreadListRuntimeImpl(this.parent).getItemById(threadId),\n [threadId],\n );\n\n const detectorRef = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\" && Provider !== Fragment) {\n const id = setTimeout(() => {\n if (!detectorRef.current) {\n console.warn(\n \"RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. \" +\n \"Render `children` on first commit; deferring them behind a loading state, Suspense boundary, \" +\n \"or `useEffect` gate strands the runtime binder and leaves the thread without context.\",\n );\n }\n }, 100);\n return () => clearTimeout(id);\n }\n return undefined;\n }, [Provider]);\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <Provider>\n <this._RuntimeBinder threadId={threadId} generation={generation}>\n <ProviderRenderDetector detectorRef={detectorRef} />\n </this._RuntimeBinder>\n </Provider>\n </ThreadListItemRuntimeProvider>\n );\n });\n\n public __internal_RenderThreadRuntimes: FC<{\n provider: ComponentType<PropsWithChildren>;\n }> = ({ provider }) => {\n this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change\n\n return Array.from(this.instances.entries()).map(\n ([threadId, { generation }]) => (\n <this._OuterActiveThreadProvider\n key={`${threadId}:${generation}`}\n threadId={threadId}\n generation={generation}\n provider={provider}\n />\n ),\n );\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemoteThreadListHookInstanceManager.js","names":["FC","RefObject","useEffect","useLayoutEffect","useMemo","useRef","memo","PropsWithChildren","ComponentType","Fragment","create","useResources","withKey","AssistantClient","ThreadListItemRuntimeProvider","ThreadRuntimeCore","ThreadListRuntimeCore","Unsubscribe","BaseSubscribable","getThreadRuntimeCoreIsRunning","ThreadListRuntimeImpl","invalidateThreadRuntime","useRuntimeAdapters","RuntimeAdapters","RemoteThreadResource","RemoteThreadListHook","RemoteThreadListHookInstance","runtime","publishedGeneration","generation","isRunning","unsubscribeRunning","AdapterSnapshot","defaultAdapters","threadAdapters","ReadonlyMap","HostSnapshot","threads","id","hookEpoch","ProviderRenderDetector","detectorRef","t0","$","_c","t1","t2","current","RemoteThreadListHookInstanceManager","runtimeHook","adapterStore","Map","hostStore","pendingThreadAdapters","instances","nextGeneration","parent","constructor","_whenRuntimeAttached","threadId","Promise","resolve","reject","callback","instance","get","dispose","Error","subscribe","startThreadRuntime","has","set","_syncHostThreads","__internal_restartThreadRuntime","_notifySubscribers","getThreadRuntimeCore","undefined","__internal_isThreadRunning","runningSubscribers","Set","__internal_subscribeRunningChanged","add","delete","_publish","_publishThreadRuntime","previousRuntime","_trackRunning","_setRunning","stopThreadRuntime","setRuntimeHook","newRuntimeHook","setState","state","__internal_setDefaultAdapters","adapters","getState","__internal_setThreadAdapters","next","__internal_dispose","keys","Array","from","entries","map","__internal_useHost","parentClient","parentList","publish","__internal_RenderThreadRuntimes","provider","__internal_Host","_OuterActiveThreadProvider","Provider","getItemById","process","env","NODE_ENV","setTimeout","console","warn","clearTimeout","_AdapterSink"],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"sourcesContent":["import {\n type FC,\n type RefObject,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n memo,\n type PropsWithChildren,\n type ComponentType,\n Fragment,\n} from \"react\";\nimport { create } from \"zustand\";\nimport { useResources, withKey } from \"@assistant-ui/tap\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport { ThreadListItemRuntimeProvider } from \"../providers/ThreadListItemRuntimeProvider\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport { getThreadRuntimeCoreIsRunning } from \"../../runtime/api/thread-runtime\";\nimport { ThreadListRuntimeImpl } from \"../../runtime/api/thread-list-runtime\";\nimport { invalidateThreadRuntime } from \"../../runtime/utils/thread-runtime-lifecycle\";\nimport {\n useRuntimeAdapters,\n type RuntimeAdapters,\n} from \"./RuntimeAdapterProvider\";\nimport {\n RemoteThreadResource,\n type RemoteThreadListHook,\n} from \"./RemoteThreadResource\";\n\ntype RemoteThreadListHookInstance = {\n runtime?: ThreadRuntimeCore | undefined;\n publishedGeneration?: number | undefined;\n generation: number;\n isRunning: boolean;\n unsubscribeRunning?: Unsubscribe | undefined;\n};\n\ntype AdapterSnapshot = {\n defaultAdapters: RuntimeAdapters | null;\n threadAdapters: ReadonlyMap<string, RuntimeAdapters | null>;\n};\n\ntype HostSnapshot = {\n threads: readonly { id: string; generation: number }[];\n hookEpoch: number;\n};\n\nconst ProviderRenderDetector: FC<{\n detectorRef: RefObject<boolean>;\n}> = ({ detectorRef }) => {\n useLayoutEffect(() => {\n detectorRef.current = true;\n }, [detectorRef]);\n return null;\n};\n\nexport class RemoteThreadListHookInstanceManager extends BaseSubscribable {\n private runtimeHook: RemoteThreadListHook;\n private readonly adapterStore = create<AdapterSnapshot>(() => ({\n defaultAdapters: null,\n threadAdapters: new Map(),\n }));\n private readonly hostStore = create<HostSnapshot>(() => ({\n threads: [],\n hookEpoch: 0,\n }));\n private readonly pendingThreadAdapters = new Map<\n string,\n RuntimeAdapters | null\n >();\n private instances = new Map<string, RemoteThreadListHookInstance>();\n private nextGeneration = 0;\n private parent: ThreadListRuntimeCore;\n\n constructor(\n runtimeHook: RemoteThreadListHook,\n parent: ThreadListRuntimeCore,\n ) {\n super();\n this.parent = parent;\n this.runtimeHook = runtimeHook;\n }\n\n private _whenRuntimeAttached(threadId: string) {\n return new Promise<ThreadRuntimeCore>((resolve, reject) => {\n const callback = () => {\n const instance = this.instances.get(threadId);\n if (!instance) {\n dispose();\n reject(new Error(\"Thread was deleted before runtime was started\"));\n } else if (\n !instance.runtime ||\n instance.publishedGeneration !== instance.generation\n ) {\n return;\n } else {\n dispose();\n resolve(instance.runtime);\n }\n };\n const dispose = this.subscribe(callback);\n callback();\n });\n }\n\n public startThreadRuntime(threadId: string) {\n if (!this.instances.has(threadId)) {\n const generation = this.nextGeneration++;\n this.instances.set(threadId, {\n generation,\n isRunning: false,\n });\n this._syncHostThreads();\n }\n\n return this._whenRuntimeAttached(threadId);\n }\n\n public __internal_restartThreadRuntime(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return this.startThreadRuntime(threadId);\n\n if (instance.runtime) invalidateThreadRuntime(instance.runtime);\n instance.generation = this.nextGeneration++;\n this._syncHostThreads();\n this._notifySubscribers();\n\n return this._whenRuntimeAttached(threadId);\n }\n\n public getThreadRuntimeCore(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return undefined;\n return instance.runtime;\n }\n\n public __internal_isThreadRunning(threadId: string) {\n return this.instances.get(threadId)?.isRunning ?? false;\n }\n\n private runningSubscribers = new Set<() => void>();\n\n public __internal_subscribeRunningChanged(callback: () => void): Unsubscribe {\n this.runningSubscribers.add(callback);\n return () => this.runningSubscribers.delete(callback);\n }\n\n private _publish = (\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) => {\n this._publishThreadRuntime(threadId, runtime, generation);\n };\n\n private _publishThreadRuntime(\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) {\n const instance = this.instances.get(threadId);\n if (!instance) return;\n\n if (instance.generation !== generation) return;\n\n const previousRuntime = instance.runtime;\n instance.runtime = runtime;\n instance.publishedGeneration = generation;\n if (previousRuntime !== runtime) {\n this._trackRunning(instance);\n }\n this._notifySubscribers();\n }\n\n private _trackRunning(instance: RemoteThreadListHookInstance) {\n instance.unsubscribeRunning?.();\n\n const runtime = instance.runtime;\n if (!runtime) {\n instance.unsubscribeRunning = undefined;\n this._setRunning(instance, false);\n return;\n }\n\n this._setRunning(instance, getThreadRuntimeCoreIsRunning(runtime));\n instance.unsubscribeRunning = runtime.subscribe(() => {\n this._setRunning(instance, getThreadRuntimeCoreIsRunning(runtime));\n });\n }\n\n private _setRunning(\n instance: RemoteThreadListHookInstance,\n isRunning: boolean,\n ) {\n if (instance.isRunning === isRunning) return;\n instance.isRunning = isRunning;\n for (const callback of this.runningSubscribers) callback();\n }\n\n public stopThreadRuntime(threadId: string) {\n const instance = this.instances.get(threadId);\n if (instance?.runtime) invalidateThreadRuntime(instance.runtime);\n instance?.unsubscribeRunning?.();\n this.instances.delete(threadId);\n this.pendingThreadAdapters.delete(threadId);\n this._syncHostThreads();\n this._notifySubscribers();\n }\n\n public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {\n if (this.runtimeHook === newRuntimeHook) return;\n this.runtimeHook = newRuntimeHook;\n this.hostStore.setState(\n (state) => ({ ...state, hookEpoch: state.hookEpoch + 1 }),\n true,\n );\n }\n\n public __internal_setDefaultAdapters(adapters: RuntimeAdapters | null) {\n const current = this.adapterStore.getState();\n if (current.defaultAdapters === adapters) return;\n this.adapterStore.setState({ ...current, defaultAdapters: adapters }, true);\n }\n\n public __internal_setThreadAdapters(\n threadId: string,\n adapters: RuntimeAdapters | null,\n ) {\n const current = this.adapterStore.getState();\n const next = new Map(current.threadAdapters);\n if (adapters === null) next.delete(threadId);\n else next.set(threadId, adapters);\n this.adapterStore.setState({ ...current, threadAdapters: next }, true);\n }\n\n public __internal_dispose() {\n for (const threadId of [...this.instances.keys()]) {\n this.stopThreadRuntime(threadId);\n }\n }\n\n private _syncHostThreads() {\n this.hostStore.setState(\n (state) => ({\n ...state,\n threads: Array.from(this.instances.entries()).map(\n ([id, { generation }]) => ({ id, generation }),\n ),\n }),\n true,\n );\n }\n\n public __internal_useHost(parentClient: AssistantClient) {\n const { threads, hookEpoch } = this.hostStore();\n const adapters = this.adapterStore();\n const runtimeHook = this.runtimeHook;\n return useResources(\n threads.map(({ id, generation }) => {\n const threadAdapters = this.pendingThreadAdapters.has(id)\n ? this.pendingThreadAdapters.get(id)!\n : (adapters.threadAdapters.get(id) ?? adapters.defaultAdapters);\n return withKey(\n `${id}:${generation}:${hookEpoch}`,\n RemoteThreadResource({\n threadId: id,\n generation,\n parentList: this.parent,\n runtimeHook,\n parentClient,\n adapters: threadAdapters,\n publish: this._publish,\n }),\n );\n }),\n );\n }\n\n public __internal_RenderThreadRuntimes: FC<{\n provider: ComponentType<PropsWithChildren>;\n }> = ({ provider }) => {\n this.hostStore();\n\n return Array.from(this.instances.entries()).map(\n ([threadId, { generation }]) => (\n <this._OuterActiveThreadProvider\n key={`${threadId}:${generation}`}\n threadId={threadId}\n provider={provider}\n />\n ),\n );\n };\n\n public __internal_Host: FC<{ parentClient: AssistantClient }> = ({\n parentClient,\n }) => {\n this.__internal_useHost(parentClient);\n return null;\n };\n\n private _OuterActiveThreadProvider: FC<{\n threadId: string;\n provider: ComponentType<PropsWithChildren>;\n }> = memo(({ threadId, provider: Provider }) => {\n const runtime = useMemo(\n () => new ThreadListRuntimeImpl(this.parent).getItemById(threadId),\n [threadId],\n );\n\n const detectorRef = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\" && Provider !== Fragment) {\n const id = setTimeout(() => {\n if (!detectorRef.current) {\n console.warn(\n \"RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. \" +\n \"Render `children` on first commit; deferring them behind a loading state, Suspense boundary, \" +\n \"or `useEffect` gate strands the runtime host and leaves the thread without context.\",\n );\n }\n }, 100);\n return () => clearTimeout(id);\n }\n return undefined;\n }, [Provider]);\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <Provider>\n <this._AdapterSink threadId={threadId} detectorRef={detectorRef} />\n </Provider>\n </ThreadListItemRuntimeProvider>\n );\n });\n\n private _AdapterSink: FC<{\n threadId: string;\n detectorRef: RefObject<boolean>;\n }> = ({ threadId, detectorRef }) => {\n const adapters = useRuntimeAdapters();\n this.pendingThreadAdapters.set(threadId, adapters);\n useLayoutEffect(() => {\n this.__internal_setThreadAdapters(threadId, adapters);\n return () => {\n if (this.pendingThreadAdapters.get(threadId) === adapters) {\n this.pendingThreadAdapters.delete(threadId);\n }\n this.__internal_setThreadAdapters(threadId, null);\n };\n }, [threadId, adapters]);\n return <ProviderRenderDetector detectorRef={detectorRef} />;\n };\n}\n"],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ import { EditComposerRuntimeCore, ThreadComposerRuntimeCore } from "../../runtim
|
|
|
9
9
|
import { AddToolResultOptions, RespondToToolApprovalOptions, ResumeRunConfig, ResumeToolCallOptions, RuntimeCapabilities, SpeechState, StartRunConfig, SubmitFeedbackOptions, ThreadRuntimeEventCallback, ThreadRuntimeEventType, ThreadSuggestion, VoiceSessionState } from "../../runtime/interfaces/thread-runtime-core.js";
|
|
10
10
|
import { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
|
|
11
11
|
import { BaseSubscribable } from "../../subscribable/subscribable.js";
|
|
12
|
-
import "../../store/index.js";
|
|
13
12
|
import { RemoteThreadListOptions } from "../../runtimes/remote-thread-list/types.js";
|
|
13
|
+
import "../../store/index.js";
|
|
14
14
|
import { RemoteThreadData, THREAD_MAPPING_ID } from "../../runtimes/remote-thread-list/remote-thread-state.js";
|
|
15
15
|
import "../../internal.js";
|
|
16
16
|
import "../../index.js";
|
|
@@ -19,6 +19,7 @@ import { FC } from "react";
|
|
|
19
19
|
declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable implements ThreadListRuntimeCore {
|
|
20
20
|
private _options;
|
|
21
21
|
private readonly _hookManager;
|
|
22
|
+
private readonly _runtimeAdapters;
|
|
22
23
|
private _loadThreadsPromise;
|
|
23
24
|
private _loadMorePromise;
|
|
24
25
|
private _loadGeneration;
|
|
@@ -26,10 +27,12 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
|
|
|
26
27
|
private _switchTask;
|
|
27
28
|
private _mainThreadId;
|
|
28
29
|
private readonly _state;
|
|
30
|
+
private readonly _useAdaptersProvider;
|
|
31
|
+
private readonly _SynthesizedAdapters;
|
|
32
|
+
private resolveProvider;
|
|
29
33
|
get threadItems(): Readonly<Record<THREAD_MAPPING_ID, RemoteThreadData>>;
|
|
30
34
|
getLoadThreadsPromise(): Promise<void>;
|
|
31
35
|
loadMore(): Promise<void>;
|
|
32
|
-
private readonly contextProvider;
|
|
33
36
|
constructor(options: RemoteThreadListOptions, contextProvider: ModelContextProvider);
|
|
34
37
|
private _initialThreadLoaded;
|
|
35
38
|
private useProvider;
|
|
@@ -60,6 +63,7 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
|
|
|
60
63
|
startRun: (config: StartRunConfig) => void;
|
|
61
64
|
resumeRun: (config: ResumeRunConfig) => void;
|
|
62
65
|
cancelRun: () => void;
|
|
66
|
+
unstable_notifySessionReset: () => void;
|
|
63
67
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
64
68
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
65
69
|
respondToToolApproval: (options: RespondToToolApprovalOptions) => void;
|
|
@@ -113,6 +117,7 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
|
|
|
113
117
|
startRun: (config: StartRunConfig) => void;
|
|
114
118
|
resumeRun: (config: ResumeRunConfig) => void;
|
|
115
119
|
cancelRun: () => void;
|
|
120
|
+
unstable_notifySessionReset: () => void;
|
|
116
121
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
117
122
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
118
123
|
respondToToolApproval: (options: RespondToToolApprovalOptions) => void;
|
|
@@ -175,6 +180,7 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
|
|
|
175
180
|
archive(threadIdOrRemoteId: string): Promise<void>;
|
|
176
181
|
unarchive(threadIdOrRemoteId: string): Promise<void>;
|
|
177
182
|
delete(threadIdOrRemoteId: string): Promise<void>;
|
|
183
|
+
__internal_dispose(): void;
|
|
178
184
|
detach(threadIdOrRemoteId: string): Promise<void>;
|
|
179
185
|
private useBoundIds;
|
|
180
186
|
__internal_RenderComponent: FC;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;;;;cAiDa,8CACH,4BACG;UAEH;mBACS;mBACA;UAET;UACA;UACA;UACA;UACA;UAEA;mBACS;mBAWA;mBAYA;UAcT;MAUG,eAAW,SAAA,OA9DX,mBA8DW;EAIf,yBAAqB;EAsDrB,YAAY;EAoDjB,YAAA,SAAS,yBACT,iBAAiB;UAwBX;UACA;EAED,sBAAsB,SAAS;EAkC/B;EAgBM,oBAAoB;EA4B1B,UAAM;MAWF;MAIA;MAIA;MAIA;MAIA;MAIA;MAIA;cAMC;UAKJ;UAEA;EASD,4BAAwB;;;eAzDlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+DN,qBAAqB,6BAA0B;;;eANvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBxB,yBAAyB;EAMzB,YAAY,6BAA0B;EAItC,eACL,4BACA;IAAY;MACX;UAIK;UAgBM;EA0GP,qBAAqB;UAIpB;UAMA;UAOM;EA6CP,aAAoB,qBAAgB;;;;EAwDpC,gBAAuB,qBAAgB;EAsCvC,OAAO,4BAA4B,mBAAmB;EA6BtD,aACL,4BACA,QAAQ,sCACP;UAiDW;EAsBD,QAAQ,6BAA0B;EAmBxC,UAAU,6BAA6B;EAsBjC,OAAO,6BAA0B;EAoBvC;EAIM,OAAO,6BAA6B;UAUzC;EAED,4BAA4B"}
|