@assistant-ui/core 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +9 -10
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +2 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -2
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +2 -2
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/speech.d.ts +6 -7
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +13 -3
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +5 -6
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +10 -7
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -2
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +5 -6
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -2
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts +1 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +26 -11
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -2
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/types.d.ts +5 -6
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +11 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +3 -4
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +1 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +2 -3
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +2 -3
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +8 -9
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +3 -4
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -3
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +43 -19
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -2
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +20 -15
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +3 -4
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +11 -5
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +2 -3
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +3 -2
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -2
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +2 -3
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +3 -2
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +9 -10
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +2 -3
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -4
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +3 -4
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +2 -3
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +9 -10
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -2
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -3
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +1 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +4 -5
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.js +4 -1
- package/dist/react/model-context/useInteractable.js.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +1 -2
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.js +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +13 -5
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +10 -10
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +4 -4
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +1 -0
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +6 -5
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +2 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -26
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +152 -378
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +51 -18
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +125 -17
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +6 -6
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +4 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +5 -0
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +14 -4
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +26 -61
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +3 -3
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +10 -11
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +4 -5
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +1 -2
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -9
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +6 -0
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -2
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.js +6 -1
- package/dist/react/utils/useJSONEqual.js.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +6 -0
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
- package/dist/react/utils/useJSONSchemaDependency.js +20 -0
- package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
- package/dist/runtime/api/assistant-runtime.d.ts +2 -3
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +6 -7
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/bindings.d.ts +5 -6
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +10 -10
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -4
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +8 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +3 -2
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +6 -7
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -11
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -5
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +46 -10
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +10 -3
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +212 -77
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +23 -16
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +10 -4
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +70 -7
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +2 -3
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +9 -6
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +12 -4
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +26 -15
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +51 -14
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +4 -5
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +3 -4
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +4 -5
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -3
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +83 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +4 -5
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +7 -6
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +4 -2
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
- 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 +36 -6
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +10 -5
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +57 -10
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -2
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +3 -4
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +256 -211
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -2
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -2
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -2
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +1 -2
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/suggestions.d.ts +3 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +2 -3
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +12 -0
- package/dist/store/clients/thread-tasks.d.ts.map +1 -0
- package/dist/store/clients/thread-tasks.js +69 -0
- package/dist/store/clients/thread-tasks.js.map +1 -0
- package/dist/store/env.d.ts +1 -2
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +3 -2
- package/dist/store/index.js +3 -3
- package/dist/store/primitive-predicates.d.ts +11 -12
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +4 -4
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -2
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +176 -128
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +2 -0
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +4 -5
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +5 -6
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +6 -7
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +6 -6
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +3 -4
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +4 -5
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +4 -4
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +4 -5
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +5 -6
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +35 -0
- package/dist/store/scopes/task.d.ts.map +1 -0
- package/dist/store/scopes/task.js +0 -0
- package/dist/store/scopes/thread-list-item.d.ts +5 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +25 -6
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +4 -5
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +15 -15
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -15
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -10
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +3 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +2 -3
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +8 -9
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/message.d.ts +53 -44
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +1 -2
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -3
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -3
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.js +30 -14
- package/dist/utils/abortable-iterable.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -2
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +6 -7
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +17 -2
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.js +32 -7
- package/dist/utils/getGroupStatus.js.map +1 -1
- package/dist/utils/id.d.ts +3 -4
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +4 -5
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +4 -5
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -3
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -4
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/dist/utils/wire-media.js +2 -2
- package/dist/utils/wire-media.js.map +1 -1
- package/package.json +15 -14
- package/src/adapters/attachment.ts +8 -1
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +236 -0
- package/src/adapters/speech.ts +17 -10
- package/src/adapters/thread-history.ts +3 -0
- package/src/index.ts +1 -0
- package/src/model-context/frame/host.test.ts +113 -1
- package/src/model-context/frame/host.ts +39 -12
- package/src/model-context/frame/provider.test.ts +45 -20
- package/src/model-context/interactable-composer-metadata.test.ts +30 -0
- package/src/model-context/interactable-composer-metadata.ts +10 -10
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +361 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +69 -19
- package/src/react/client/DataRenderers.test.tsx +45 -0
- package/src/react/client/DataRenderers.ts +13 -9
- package/src/react/client/Interactables.test.ts +52 -4
- package/src/react/client/Interactables.ts +7 -1
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.test.ts +46 -7
- package/src/react/client/RemoteThreadList.ts +15 -2
- package/src/react/client/interactable-model-context.test.ts +44 -0
- package/src/react/client/interactable-model-context.ts +3 -2
- package/src/react/index.ts +5 -1
- package/src/react/interactables-legacy/Interactables.test.ts +9 -3
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +150 -0
- package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
- package/src/react/model-context/useInteractable.test.tsx +204 -0
- package/src/react/model-context/useInteractable.ts +3 -0
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -6
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +99 -0
- package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
- package/src/react/primitives/part/PartMessages.test.tsx +104 -1
- package/src/react/primitives/part/PartMessages.tsx +1 -0
- package/src/react/primitives/thread/ThreadMessages.test.tsx +160 -0
- package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
- package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +7 -1
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +323 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +190 -523
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +81 -0
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
- package/src/react/runtimes/cloud/auiV0.ts +281 -26
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +21 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +7 -1
- package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
- package/src/react/runtimes/external-message-converter.test.ts +143 -4
- package/src/react/runtimes/external-message-converter.ts +39 -93
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -2
- package/src/react/utils/groupParts.ts +12 -1
- package/src/react/utils/useJSONEqual.ts +9 -0
- package/src/react/utils/useJSONSchemaDependency.ts +22 -0
- package/src/runtime/api/message-part-runtime.ts +4 -1
- package/src/runtime/api/message-runtime.ts +15 -2
- package/src/runtime/api/thread-runtime.test.ts +58 -0
- package/src/runtime/api/thread-runtime.ts +2 -4
- package/src/runtime/base/base-composer-runtime-core.ts +69 -16
- package/src/runtime/base/base-thread-runtime-core.test.ts +1799 -49
- package/src/runtime/base/base-thread-runtime-core.ts +296 -94
- package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +8 -0
- package/src/runtime/queue/message-queue.ts +79 -7
- package/src/runtime/utils/auto-status.test.ts +112 -1
- package/src/runtime/utils/auto-status.ts +31 -5
- package/src/runtime/utils/external-message-conversion.test.ts +177 -0
- package/src/runtime/utils/external-message-conversion.ts +128 -33
- package/src/runtime/utils/message-repository.test.ts +49 -0
- package/src/runtime/utils/message-repository.ts +3 -3
- package/src/runtime/utils/stored-message-parts.ts +174 -0
- package/src/runtime/utils/thread-message-like.test.ts +52 -0
- package/src/runtime/utils/thread-message-like.ts +11 -2
- package/src/runtimes/external-store/external-store-adapter.ts +4 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +74 -9
- package/src/runtimes/local/local-thread-runtime-core.test.ts +189 -12
- package/src/runtimes/local/local-thread-runtime-core.ts +91 -10
- package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
- package/src/store/clients/external-thread.ts +53 -14
- package/src/store/clients/thread-tasks.test.ts +274 -0
- package/src/store/clients/thread-tasks.ts +138 -0
- package/src/store/index.ts +8 -0
- package/src/store/primitive-predicates.test.ts +64 -5
- package/src/store/primitive-predicates.ts +10 -2
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +31 -1
- package/src/store/scope-registration.ts +2 -0
- package/src/store/scopes/message.ts +4 -1
- package/src/store/scopes/task.ts +34 -0
- package/src/store/scopes/thread.ts +16 -0
- package/src/store/thread-tasks.test.tsx +209 -0
- package/src/subscribable/subscribable.test.ts +161 -1
- package/src/subscribable/subscribable.ts +25 -15
- package/src/tests/MessageRepository.test.ts +1 -5
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +304 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
- package/src/tests/base-composer-runtime-core.test.ts +329 -6
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +22 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +369 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
- package/src/tests/external-thread-attachments.test.tsx +91 -23
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-parity.test.tsx +35 -1
- package/src/tests/groupParts.test.ts +71 -0
- package/src/tests/message-queue.test.ts +290 -2
- package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +45 -1
- package/src/types/index.ts +1 -0
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +23 -7
- package/src/utils/abortable-iterable.test.ts +115 -0
- package/src/utils/abortable-iterable.ts +34 -23
- package/src/utils/getGroupStatus.test.ts +70 -4
- package/src/utils/getGroupStatus.ts +35 -12
- package/src/utils/wire-media.test.ts +10 -0
- package/src/utils/wire-media.ts +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadList.js","names":["useCallback","useEffect","useMemo","useRef","useState","useSyncExternalStore","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","Derived","useAssistantContextProvider","useAssistantContextValue","useClientLookup","useClientResource","useConfiguredAui","isDevelopment","useThreadSelectionEvents","OptimisticState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","RemoteThreadData","RemoteThreadState","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadInitializeResponse","RemoteThreadListAdapter","ThreadListAdapterChangedError","ThreadMessage","handleThreadListAction","inMemoryThreadListTransformScopes","InMemoryThreadListProps","AdaptedRemoteThread","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","RESOLVED_PROMISE","Promise","resolve","EMPTY_LIST","RemoteThreadListProps","adapter","thread","threadId","onThreadIdChange","onSwitchToThread","onSwitchToNewThread","onDelete","backgroundThreads","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","toInitializeResult","result","remoteId","externalId","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","onGenerateTitle","onInitialize","onDetach","t0","lastMessageAt","undefined","t1","custom","id","title","state","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","initialize","detach","ThreadListItemClient","collectItemOrder","listState","mainThreadId","ids","newThreadId","threadIds","archivedThreadIds","filter","seenIds","Set","seenRemoteIds","items","has","add","push","itemMatchesId","item","isSameThread","left","right","useRemoteThreadBody","parent","setIsRunning","itemHandle","client","threadListItem","source","query","type","get","methods","bornNewRef","titleFiredRef","useBoundRemoteBody","body","bodyRunning","armed","current","hasTitleSource","messages","some","automatic","RemoteThreadBody","useMainThreadFacade","currentRef","facade","Proxy","_","prop","Record","PropertyKey","ownKeys","Reflect","getOwnPropertyDescriptor","useRemoteThreadListView","startedIds","threadFactory","useAdapters","bb0","seen","bodyIds","itemElementFor","data_0","options","options_0","bodyStateOf","mainThreadClient","bodies","map","id_0","made","key","wrapped","data_1","element","isRunning_0","id_1","direct","indexOf","findIndex","bodyId","bodyIndexOf","id_2","index","t4","t5","mainIndex","t6","itemOrder","threadListItems","data_2","t7","useRemoteThreadList","store","initialMainId","session","seeded","adapterAtLoad","adapterGeneration","titleStates","Map","loadGeneration","switchGeneration","loadPromise","loadMorePromise","lastNotifiedRemoteId","lastControlledThreadId","switchTask","isFirstThreadIdEffect","onStoreChange","subscribe","value","setMainThreadId","setStartedIds","assignMainThreadId","prev","includes","notifyRemoteId","emit","getLoadThreadsPromise","generation","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","isLoading","loadError","then","page","fresh","threads","threadIdMap","threadData","merged","cursor","nextCursor","catch","error","console","update","reload","adapterChanged","clear","reset","window","document","retryAfterError","retryAfterVisible","visibilityState","addEventListener","removeEventListener","unstable_useAdapters","unstable_Provider","warn","loadMore","snapshot","currentAdapter","task","after","isLoadingMore","appended","startSwitch","run","settle","reject","switchToThread","emitThreadIdChange","remoteMetadata","fetch","mappingId","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","initializeTask","targetId","optimistic","switchToNewThread","waitForUpdate","existing","existingId","ensureNotMain","lastAwaitedTask","startedFallback","requireAdapterGeneration","removedMappingId","replacementMainThreadId","retainedThreadId","reconciliation","survivorMappingId","startedId","newTitle","claim","deleteThread","states","generate","onTitle","stream","applyTitle","mainRemoteId","Object","is","hasMore","threadItems","main","reloadMainThread","unstable_refetchThread","selector","archived","RemoteThreadList"],"sources":["../../../src/react/client/RemoteThreadList.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n Derived,\n useAssistantContextProvider,\n useAssistantContextValue,\n useClientLookup,\n useClientResource,\n useConfiguredAui,\n} from \"@assistant-ui/store/client\";\nimport { isDevelopment, useThreadSelectionEvents } from \"../../store/internal\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n type RemoteThreadData,\n type RemoteThreadState,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport {\n inMemoryThreadListTransformScopes,\n type InMemoryThreadListProps,\n} from \"./InMemoryThreadList\";\nimport { AdaptedRemoteThread } from \"./AdaptedRemoteThread\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nconst EMPTY_LIST = createEmptyRemoteThreadState();\n\nexport type RemoteThreadListProps = {\n /**\n * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.\n */\n adapter: RemoteThreadListAdapter;\n /**\n * Factory for the visible thread. Per-thread history reload requires a\n * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed\n * factory keeps one instance across switches, so a mount-once history\n * loader will not fetch the next thread.\n */\n thread: InMemoryThreadListProps[\"thread\"];\n threadId?: string | undefined;\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n onSwitchToThread?: ((threadId: string) => void) | undefined;\n onSwitchToNewThread?: (() => void) | undefined;\n /** Called after the backing adapter successfully deletes the thread. */\n onDelete?: ((threadId: string) => void) | undefined;\n /**\n * Keeps every thread the session switched to mounted, so a run continues\n * after the user switches away, per-item `isRunning` reflects background\n * runs, and a freshly initialized thread generates its title automatically.\n * A body unmounts on delete, detach, or an adapter replacement (`reload()`\n * after swapping the adapter); visited threads otherwise stay mounted for\n * the client's lifetime. Each body reads its own thread through the ambient\n * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted\n * body. Off (the default), only the visible thread is mounted and a switch\n * unmounts it. The mode is fixed at mount.\n */\n backgroundThreads?: boolean | undefined;\n};\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" was not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst toInitializeResult = (\n result: RemoteThreadInitializeResponse,\n): { remoteId: string; externalId: string | undefined } => ({\n remoteId: result.remoteId,\n externalId: result.externalId,\n});\n\nconst useThreadListItemClient = (props: {\n data: RemoteThreadData;\n isRunning: boolean;\n onSwitchTo: (options?: { unarchive?: boolean }) => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n onGenerateTitle: (options?: { automatic?: boolean }) => void;\n onInitialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: \"lastMessageAt\" in data ? data.lastMessageAt : undefined,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: onGenerateTitle,\n initialize: onInitialize,\n detach: onDetach,\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\nconst collectItemOrder = (\n listState: RemoteThreadState,\n mainThreadId: string,\n): RemoteThreadData[] => {\n const ids = [\n listState.newThreadId,\n ...listState.threadIds,\n ...listState.archivedThreadIds,\n mainThreadId,\n ].filter((id): id is string => id !== undefined);\n const seenIds = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const items: RemoteThreadData[] = [];\n for (const id of ids) {\n const data = getThreadData(listState, id);\n if (!data || seenIds.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seenIds.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n items.push(data);\n }\n return items;\n};\n\nconst itemMatchesId = (\n item: RemoteThreadData,\n listState: RemoteThreadState,\n id: string,\n) => {\n const data = getThreadData(listState, id);\n return (\n item.id === id ||\n item.id === data?.id ||\n (data?.remoteId !== undefined &&\n (item.id === data.remoteId || item.remoteId === data.remoteId))\n );\n};\n\nconst isSameThread = (\n listState: RemoteThreadState,\n left: string,\n right: string,\n) => {\n if (left === right) return true;\n const data = getThreadData(listState, left);\n return data !== undefined && itemMatchesId(data, listState, right);\n};\n\nconst useRemoteThreadBody = ({\n id,\n status,\n remoteId,\n item,\n thread,\n}: {\n id: string;\n status: RemoteThreadData[\"status\"];\n remoteId: string | undefined;\n item: (isRunning: boolean) => ResourceElement<ClientOutput<\"threadListItem\">>;\n thread: ResourceElement<ClientOutput<\"thread\">>;\n}): ClientOutput<\"thread\"> => {\n const parent = useAssistantContextValue();\n const [isRunning, setIsRunning] = useState(false);\n // The item client is mounted inside the body and served to the subtree\n // through a Derived scope, which keeps the graft on the derived-only (no\n // nested client host) path; resolving `parent.threads` here instead would\n // read the threads scope during its own construction.\n const itemHandle = useClientResource(item(isRunning));\n const { client } = useConfiguredAui(parent, {\n threadListItem: Derived({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => itemHandle.methods,\n }),\n });\n // Auto-title arms only for a thread born \"new\" in this body's lifetime;\n // threads loaded or fetched from the adapter already carry their title. The\n // settled (non-optimistic) initialize is what writes remoteId, so its\n // arrival is the initialization signal.\n const bornNewRef = useRef(status === \"new\");\n const titleFiredRef = useRef(false);\n return useAssistantContextProvider(client, function useBoundRemoteBody() {\n const body = useClientResource(thread);\n const bodyRunning = body.state.isRunning === true;\n useEffect(() => {\n setIsRunning(bodyRunning);\n }, [bodyRunning]);\n const armed =\n bornNewRef.current && !titleFiredRef.current && remoteId !== undefined;\n const hasTitleSource =\n armed &&\n (\n body.state.messages as readonly {\n status?: { type: string } | undefined;\n }[]\n ).some(isTitleSourceMessage);\n useEffect(() => {\n if (!hasTitleSource || titleFiredRef.current) return;\n titleFiredRef.current = true;\n client.threadListItem.generateTitle({ automatic: true });\n }, [hasTitleSource]);\n return body.methods;\n });\n};\n\nconst RemoteThreadBody = resource(useRemoteThreadBody);\n\n// `thread(\"main\")` keeps one identity across switches, like the single\n// useClientResource slot it replaced: consumers (the ambient `thread` scope,\n// captured clients) hold the facade while it delegates to whichever body is\n// currently main. Publishing the target during commit keeps abandoned\n// concurrent renders from changing the facade observed by committed consumers.\nconst useMainThreadFacade = (\n current: ClientOutput<\"thread\">,\n): ClientOutput<\"thread\"> => {\n const currentRef = useRef(current);\n useEffect(() => {\n currentRef.current = current;\n }, [current]);\n const [facade] = useState(\n () =>\n new Proxy({} as ClientOutput<\"thread\">, {\n get: (_, prop) =>\n (currentRef.current as unknown as Record<PropertyKey, unknown>)[prop],\n has: (_, prop) => prop in (currentRef.current as object),\n ownKeys: () => Reflect.ownKeys(currentRef.current as object),\n getOwnPropertyDescriptor: (_, prop) =>\n Reflect.getOwnPropertyDescriptor(currentRef.current as object, prop),\n }),\n );\n return facade;\n};\n\nconst useRemoteThreadListView = ({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n}: {\n listState: RemoteThreadState;\n mainThreadId: string;\n startedIds: readonly string[];\n backgroundThreads: boolean;\n threadFactory: RemoteThreadListProps[\"thread\"];\n useAdapters: RemoteThreadListAdapter[\"unstable_useAdapters\"];\n onSwitchTo: (\n threadId: string,\n options?: { unarchive?: boolean },\n ) => Promise<void>;\n onRename: (threadId: string, title: string) => Promise<void>;\n onUpdateCustom: (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => Promise<void>;\n onArchive: (threadId: string) => Promise<void>;\n onUnarchive: (threadId: string) => Promise<void>;\n onDelete: (threadId: string) => Promise<void>;\n onGenerateTitle: (\n threadId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => Promise<void>;\n onInitialize: (threadId: string) => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: (threadId: string) => Promise<void>;\n}) => {\n const bodyIds = useMemo(() => {\n if (!backgroundThreads) return [mainThreadId];\n const seen = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const ids: string[] = [];\n for (const id of startedIds) {\n const data = getThreadData(listState, id);\n if (!data || seen.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seen.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n ids.push(data.id);\n }\n return ids;\n }, [backgroundThreads, listState, mainThreadId, startedIds]);\n\n const itemElementFor = (data: RemoteThreadData, isRunning: boolean) =>\n ThreadListItemClient({\n data,\n isRunning,\n onSwitchTo: (options) =>\n handleThreadListAction(\"switch\", () => onSwitchTo(data.id, options)),\n onRename: (title) =>\n handleThreadListAction(\"rename\", () => onRename(data.id, title)),\n onUpdateCustom: (custom) =>\n handleThreadListAction(\"update custom metadata\", () =>\n onUpdateCustom(data.id, custom),\n ),\n onArchive: () =>\n handleThreadListAction(\"archive\", () => onArchive(data.id)),\n onUnarchive: () =>\n handleThreadListAction(\"unarchive\", () => onUnarchive(data.id)),\n onDelete: () => handleThreadListAction(\"delete\", () => onDelete(data.id)),\n onGenerateTitle: (options) =>\n handleThreadListAction(\"generate title\", () =>\n onGenerateTitle(\n data.id,\n (backgroundThreads\n ? bodyStateOf(data.id)?.messages\n : mainThreadClient.state.messages) as\n | readonly ThreadMessage[]\n | undefined,\n options,\n ),\n ),\n onInitialize: () => onInitialize(data.id),\n onDetach: () => handleThreadListAction(\"detach\", () => onDetach(data.id)),\n });\n\n const bodies = useClientLookup(\n bodyIds.map((id) => {\n const made = threadFactory(id);\n // Background bodies never change occupant, so an unkeyed factory\n // element is keyed by the mapping id here; per-body history loads\n // without requiring the factory to key itself.\n const thread =\n backgroundThreads && made.key === undefined ? withKey(id, made) : made;\n const wrapped =\n useAdapters === undefined\n ? thread\n : AdaptedRemoteThread({\n useAdapters,\n thread,\n });\n const data = getThreadData(listState, id);\n const element =\n backgroundThreads && data !== undefined\n ? RemoteThreadBody({\n id,\n status: data.status,\n remoteId: data.remoteId,\n item: (isRunning) => itemElementFor(data, isRunning),\n thread: wrapped,\n })\n : wrapped;\n return withKey(backgroundThreads ? id : (made.key ?? \"main\"), element);\n }),\n );\n // A reload can remap a local thread id to its remote identity while the\n // body stays keyed by the original mapping id, so lookups fall back to\n // remote-identity matching.\n const bodyIndexOf = (id: string) => {\n const direct = bodyIds.indexOf(id);\n if (direct !== -1) return direct;\n return bodyIds.findIndex((bodyId) => isSameThread(listState, bodyId, id));\n };\n const bodyStateOf = (id: string) => {\n const index = bodyIndexOf(id);\n return index === -1 ? undefined : bodies.state[index];\n };\n const mainIndex = bodyIndexOf(mainThreadId);\n const mainThreadClient = {\n state: bodies.state[mainIndex]!,\n methods: useMainThreadFacade(bodies.get({ index: mainIndex })),\n };\n const itemOrder = useMemo(\n () => collectItemOrder(listState, mainThreadId),\n [listState, mainThreadId],\n );\n const threadListItems = useClientLookup(\n itemOrder.map((data) =>\n withKey(\n data.id,\n itemElementFor(\n data,\n backgroundThreads\n ? (bodyStateOf(data.id)?.isRunning ?? false)\n : itemMatchesId(data, listState, mainThreadId) &&\n mainThreadClient.state.isRunning,\n ),\n ),\n ),\n );\n return { mainThreadClient, itemOrder, threadListItems };\n};\n\nconst useRemoteThreadList = (\n props: RemoteThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n adapter,\n thread: threadFactory,\n threadId,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ store, initialMainId, session }] = useState(() => {\n const seeded = seedNewThread(EMPTY_LIST);\n return {\n store: new OptimisticState(seeded.state),\n initialMainId: seeded.id,\n session: {\n adapter,\n adapterAtLoad: adapter,\n adapterGeneration: 0,\n titleStates: new Map<string, ThreadTitleState>(),\n loadGeneration: 0,\n switchGeneration: 0,\n loadPromise: undefined as Promise<void> | undefined,\n loadMorePromise: undefined as Promise<void> | undefined,\n lastNotifiedRemoteId: undefined as string | undefined,\n lastControlledThreadId: undefined as string | undefined,\n switchTask: undefined as Promise<void> | undefined,\n mainThreadId: seeded.id,\n isFirstThreadIdEffect: true,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n },\n };\n });\n\n const listState = useSyncExternalStore(\n (onStoreChange) => store.subscribe(onStoreChange),\n () => store.value,\n () => store.value,\n );\n\n const [mainThreadId, setMainThreadId] = useState(initialMainId);\n const [startedIds, setStartedIds] = useState<readonly string[]>([\n initialMainId,\n ]);\n const [backgroundThreads] = useState(props.backgroundThreads === true);\n const assignMainThreadId = useCallback(\n (id: string) => {\n session.mainThreadId = id;\n setMainThreadId(id);\n setStartedIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [session],\n );\n useThreadSelectionEvents(mainThreadId);\n useEffect(() => {\n // Publishing after commit keeps imperative actions on the adapter the committed tree renders with; an abandoned render must not reach them.\n session.adapter = adapter;\n session.mainThreadId = mainThreadId;\n session.onThreadIdChange = onThreadIdChange;\n session.onSwitchToThread = onSwitchToThread;\n session.onSwitchToNewThread = onSwitchToNewThread;\n }, [\n adapter,\n mainThreadId,\n onSwitchToNewThread,\n onSwitchToThread,\n onThreadIdChange,\n session,\n ]);\n\n const notifyRemoteId = useCallback(\n (remoteId: string | undefined, emit: boolean) => {\n if (session.lastNotifiedRemoteId === remoteId) return;\n session.lastNotifiedRemoteId = remoteId;\n if (emit) session.onThreadIdChange?.(remoteId);\n },\n [session],\n );\n\n const getLoadThreadsPromise = useCallback(() => {\n if (session.loadPromise) return session.loadPromise;\n const generation = session.loadGeneration;\n const adapter = session.adapter;\n const statusAtRequest = statusSnapshot(store.baseValue);\n session.loadPromise = store\n .optimisticUpdate({\n execute: () => adapter.list(),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoading: true, loadError: undefined };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n session.adapterAtLoad = adapter;\n const fresh = classifyThreads(page.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(page.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n session.loadPromise = undefined;\n store.update({\n ...store.baseValue,\n isLoading: false,\n loadError: error,\n });\n })\n .then(() => {});\n return session.loadPromise;\n }, [session, store]);\n\n const reload = useCallback(() => {\n const adapterChanged = adapter !== session.adapterAtLoad;\n session.loadGeneration++;\n session.loadPromise = undefined;\n session.loadMorePromise = undefined;\n if (adapterChanged) {\n session.adapterGeneration++;\n session.titleStates.clear();\n session.switchGeneration++;\n session.switchTask = undefined;\n session.adapterAtLoad = adapter;\n const seeded = seedNewThread(EMPTY_LIST);\n store.reset({ ...seeded.state, isLoading: true });\n assignMainThreadId(seeded.id);\n setStartedIds([seeded.id]);\n notifyRemoteId(undefined, true);\n } else {\n store.update({\n ...store.baseValue,\n cursor: undefined,\n });\n }\n return getLoadThreadsPromise();\n }, [\n adapter,\n assignMainThreadId,\n getLoadThreadsPromise,\n notifyRemoteId,\n session,\n store,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const retryAfterError = () => {\n if (store.value.loadError !== undefined) void getLoadThreadsPromise();\n };\n const retryAfterVisible = () => {\n if (document.visibilityState === \"visible\") retryAfterError();\n };\n\n window.addEventListener(\"online\", retryAfterError);\n document.addEventListener(\"visibilitychange\", retryAfterVisible);\n return () => {\n window.removeEventListener(\"online\", retryAfterError);\n document.removeEventListener(\"visibilitychange\", retryAfterVisible);\n };\n }, [getLoadThreadsPromise, store]);\n\n useEffect(() => {\n void getLoadThreadsPromise();\n }, [getLoadThreadsPromise]);\n\n useEffect(() => {\n if (!isDevelopment) return;\n if (adapter.unstable_useAdapters !== undefined) return;\n if (adapter.unstable_Provider === undefined) return;\n console.warn(\n \"[assistant-ui] RemoteThreadList ignores RemoteThreadListAdapter.unstable_Provider. Expose unstable_useAdapters so per-thread history loads on this entry. useRemoteThreadListRuntime still honors unstable_Provider.\",\n );\n }, [adapter]);\n\n const loadMore = useCallback(() => {\n if (session.loadMorePromise) return session.loadMorePromise;\n const snapshot = store.value;\n if (snapshot.cursor === undefined || snapshot.isLoading) {\n return RESOLVED_PROMISE;\n }\n const generation = session.loadGeneration;\n const cursor = snapshot.cursor;\n const currentAdapter = session.adapter;\n const task = store\n .optimisticUpdate({\n execute: () => currentAdapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n const appended = classifyThreads(page.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(page.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (session.loadMorePromise === task) {\n session.loadMorePromise = undefined;\n }\n });\n session.loadMorePromise = task;\n return task;\n }, [session, store]);\n\n const startSwitch = useCallback(\n (run: (generation: number) => Promise<void>) => {\n const generation = ++session.switchGeneration;\n let settle!: (error?: unknown) => void;\n const task = new Promise<void>((resolve, reject) => {\n settle = (error) => {\n if (error === undefined) resolve();\n else reject(error);\n };\n });\n session.switchTask = task;\n void run(generation).then(\n () => settle(),\n (error: unknown) => settle(error),\n );\n return task;\n },\n [session],\n );\n\n const switchToThread = useCallback(\n (\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n emitThreadIdChange = true,\n ) =>\n startSwitch(async (generation) => {\n let data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n const remoteMetadata =\n await session.adapter.fetch(threadIdOrRemoteId);\n if (generation !== session.switchGeneration) return;\n const state = store.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteMetadata.remoteId)\n : state.archivedThreadIds.includes(remoteMetadata.remoteId);\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n store.update({\n ...state,\n threadIds:\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote,\n archivedThreadIds:\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n },\n },\n });\n data = getThreadData(store.value, threadIdOrRemoteId);\n }\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n }\n if (isSameThread(store.value, data.id, session.mainThreadId)) return;\n\n const targetId = data.id;\n let current: RemoteThreadData | undefined = data;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n const { remoteId } = await current.initializeTask;\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n if (current.status === \"archived\") {\n await store.optimisticUpdate({\n execute: () => session.adapter.unarchive(remoteId),\n optimistic: (state) =>\n updateStatusReducer(state, targetId, \"regular\"),\n });\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n }\n }\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(current.id);\n notifyRemoteId(current.remoteId, emitThreadIdChange);\n session.onSwitchToThread?.(current.id);\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const switchToNewThread = useCallback(\n (emitThreadIdChange = true) =>\n startSwitch(async (generation) => {\n while (\n store.baseValue.newThreadId !== undefined &&\n store.value.newThreadId === undefined\n ) {\n await store.waitForUpdate();\n if (generation !== session.switchGeneration) return;\n }\n const existing = store.value.newThreadId;\n if (existing !== undefined) {\n const existingId =\n getThreadData(store.value, existing)?.id ?? existing;\n if (isSameThread(store.value, existingId, session.mainThreadId)) {\n return;\n }\n assignMainThreadId(existingId);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n return;\n }\n const seeded = seedNewThread(store.baseValue);\n store.update(seeded.state);\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(seeded.id);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const ensureNotMain = useCallback(\n async (threadId: string) => {\n if (threadId === store.value.newThreadId) {\n throw new Error(\"Cannot ensure new thread is not main\");\n }\n let lastAwaitedTask: Promise<void> | undefined;\n while (isSameThread(store.value, threadId, session.mainThreadId)) {\n let switchTask = session.switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) {\n switchTask = switchToNewThread();\n }\n lastAwaitedTask = switchTask;\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && session.switchTask === switchTask) {\n throw error;\n }\n }\n }\n },\n [session, store, switchToNewThread],\n );\n\n const requireAdapterGeneration = useCallback(\n (generation: number) => {\n if (generation !== session.adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n },\n [session],\n );\n\n const initialize = useCallback(\n async (threadId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n if (store.value.newThreadId !== threadId) {\n const data = getThreadData(store.value, threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n }\n const result = toInitializeResult(await data.initializeTask);\n requireAdapterGeneration(adapterGeneration);\n return result;\n }\n requireAdapterGeneration(adapterGeneration);\n const initializeTask = currentAdapter.initialize(threadId);\n let removedMappingId: string | undefined;\n let replacementMainThreadId: string | undefined;\n const result = await store.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n // Background mode still owns the initializing body. Single-body mode\n // has already replaced it, so retain the currently mounted body.\n const retainedThreadId = backgroundThreads\n ? threadId\n : session.mainThreadId;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n retainedThreadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === session.mainThreadId) {\n replacementMainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n setStartedIds((prev) =>\n prev.filter((startedId) => startedId !== removedMappingId),\n );\n }\n if (\n replacementMainThreadId !== undefined &&\n session.mainThreadId === removedMappingId\n ) {\n assignMainThreadId(replacementMainThreadId);\n }\n if (threadId === session.mainThreadId) {\n notifyRemoteId(result.remoteId, true);\n }\n return toInitializeResult(result);\n },\n [\n assignMainThreadId,\n backgroundThreads,\n notifyRemoteId,\n requireAdapterGeneration,\n session,\n store,\n ],\n );\n\n const rename = useCallback(\n (threadIdOrRemoteId: string, newTitle: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n }\n const claim = startThreadTitleRename(\n session.titleStates,\n data.id,\n newTitle,\n );\n return store\n .optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title: newTitle,\n },\n },\n };\n },\n })\n .then(\n (result) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, true);\n return result;\n },\n (error: unknown) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, false);\n throw error;\n },\n );\n },\n [requireAdapterGeneration, session, store],\n );\n\n const updateCustom = useCallback(\n (\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n }\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return currentAdapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n custom,\n },\n },\n };\n },\n });\n },\n [requireAdapterGeneration, session, store],\n );\n\n const archive = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n }\n await ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.archive(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"archived\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const unarchive = useCallback(\n (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"be unarchived\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return await currentAdapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === session.adapterGeneration) {\n await ensureNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"regular\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const deleteThread = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n }\n await ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n const result = await store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.delete(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"deleted\"),\n });\n // An adapter swap resets the optimistic layer, and a listed thread's slot\n // id is its remote id, so a replacement adapter can re-list this slot\n // while the deletion is in flight.\n if (getThreadData(store.value, data.id) !== undefined) return result;\n clearThreadTitleState(session.titleStates, data.id);\n onDelete?.(data.id);\n return result;\n },\n [ensureNotMain, onDelete, requireAdapterGeneration, session, store],\n );\n\n const generateTitle = useCallback(\n async (\n threadIdOrRemoteId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"generating its title\");\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"generate a title\",\n );\n }\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (\n !backgroundThreads &&\n !isSameThread(store.value, data.id, session.mainThreadId)\n ) {\n return;\n }\n if (!messages) return;\n await runThreadTitleGeneration({\n states: session.titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await currentAdapter.generateTitle(remoteId, messages);\n requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n requireAdapterGeneration(adapterGeneration);\n await currentAdapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await store.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n const current = getThreadData(state, data.id);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title,\n },\n },\n };\n },\n });\n },\n });\n },\n [backgroundThreads, requireAdapterGeneration, session, store],\n );\n\n const detach = useCallback(\n async (threadId: string) => {\n await ensureNotMain(threadId);\n setStartedIds((prev) => prev.filter((id) => id !== threadId));\n },\n [ensureNotMain],\n );\n\n const { mainThreadClient, itemOrder, threadListItems } =\n useRemoteThreadListView({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters: adapter.unstable_useAdapters,\n onSwitchTo: (id, options) => switchToThread(id, options),\n onRename: (id, title) => rename(id, title),\n onUpdateCustom: (id, custom) => updateCustom(id, custom),\n onArchive: (id) => archive(id),\n onUnarchive: (id) => unarchive(id),\n onDelete: (id) => deleteThread(id),\n onGenerateTitle: (id, messages, options) =>\n generateTitle(id, messages, options),\n onInitialize: async (id) => toInitializeResult(await initialize(id)),\n onDetach: (id) => detach(id),\n });\n\n const mainRemoteId = getThreadData(listState, mainThreadId)?.remoteId;\n useEffect(() => {\n if (session.lastNotifiedRemoteId === mainRemoteId) return;\n session.lastNotifiedRemoteId = mainRemoteId;\n onThreadIdChange?.(mainRemoteId);\n }, [mainRemoteId, onThreadIdChange, session]);\n\n useEffect(() => {\n if (session.isFirstThreadIdEffect) {\n session.isFirstThreadIdEffect = false;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) return;\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n return;\n }\n if (Object.is(session.lastControlledThreadId, threadId)) return;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) {\n handleThreadListAction(\"create\", () => switchToNewThread(false));\n return;\n }\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n }, [session, switchToNewThread, switchToThread, threadId]);\n\n const state = useMemo(\n () => ({\n mainThreadId,\n newThreadId: listState.newThreadId ?? null,\n isLoading: listState.isLoading,\n loadError: listState.loadError,\n isLoadingMore: listState.isLoadingMore,\n hasMore: listState.cursor !== undefined,\n threadIds: listState.threadIds,\n archivedThreadIds: listState.archivedThreadIds,\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n }),\n [\n listState.archivedThreadIds,\n listState.cursor,\n listState.isLoading,\n listState.loadError,\n listState.isLoadingMore,\n listState.newThreadId,\n listState.threadIds,\n mainThreadClient.state,\n mainThreadId,\n threadListItems.state,\n ],\n );\n\n return {\n getState: () => state,\n switchToThread: (id, options) => {\n handleThreadListAction(\"switch\", () => switchToThread(id, options));\n },\n switchToNewThread: () => {\n handleThreadListAction(\"create\", () => switchToNewThread());\n },\n getLoadThreadsPromise,\n reload,\n reloadMainThread: () => {\n if (getThreadData(store.value, mainThreadId)?.status === \"new\") {\n return RESOLVED_PROMISE;\n }\n return (\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE\n );\n },\n loadMore,\n item: (selector) => {\n if (selector === \"main\") {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, mainThreadId),\n );\n return threadListItems.get({ index });\n }\n if (\"id\" in selector) {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, selector.id),\n );\n return threadListItems.get({ index });\n }\n const ids = selector.archived\n ? listState.archivedThreadIds\n : listState.threadIds;\n const id = ids[selector.index];\n if (id === undefined) {\n return threadListItems.get({ index: -1 });\n }\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, id),\n );\n return threadListItems.get({ index });\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\n/**\n * `AuiConfig` `threads` entry backed by a `RemoteThreadListAdapter`. Thread\n * bodies are born from the `thread` factory inside the client tree, so any\n * `AssistantClient` host can run a remote or cloud list. Per-thread history\n * and attachments come from `unstable_useAdapters`. `useRemoteThreadListRuntime`\n * uses the same hook when `unstable_Provider` is omitted. Key the factory\n * with `withKey` so history reloads when the visible thread changes.\n * With `backgroundThreads`, every visited thread stays mounted: runs continue\n * across switches, per-item `isRunning` is live, and freshly initialized\n * threads title themselves.\n */\nexport const RemoteThreadList = resource(useRemoteThreadList);\n\nattachTransformScopes(useRemoteThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemoteThreadList.js","names":["useCallback","useEffect","useMemo","useRef","useState","useSyncExternalStore","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","Derived","useAssistantContextProvider","useAssistantContextValue","useClientLookup","useClientResource","useConfiguredAui","isDevelopment","useThreadSelectionEvents","OptimisticState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","RemoteThreadData","RemoteThreadState","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadInitializeResponse","RemoteThreadListAdapter","ThreadListAdapterChangedError","ThreadMessage","handleThreadListAction","inMemoryThreadListTransformScopes","InMemoryThreadListProps","AdaptedRemoteThread","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","invokeUserCallback","RESOLVED_PROMISE","Promise","resolve","EMPTY_LIST","RemoteThreadListProps","adapter","thread","threadId","onThreadIdChange","onSwitchToThread","onSwitchToNewThread","onDelete","backgroundThreads","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","toInitializeResult","result","remoteId","externalId","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","onGenerateTitle","onInitialize","onDetach","t0","lastMessageAt","undefined","t1","custom","id","title","state","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","initialize","detach","ThreadListItemClient","collectItemOrder","listState","mainThreadId","ids","newThreadId","threadIds","archivedThreadIds","filter","seenIds","Set","seenRemoteIds","items","has","add","push","itemMatchesId","item","isSameThread","left","right","useRemoteThreadBody","parent","setIsRunning","itemHandle","client","threadListItem","source","query","type","get","methods","bornNewRef","titleFiredRef","useBoundRemoteBody","body","bodyRunning","armed","current","hasTitleSource","messages","some","automatic","RemoteThreadBody","useMainThreadFacade","currentRef","facade","Proxy","_","prop","Record","PropertyKey","ownKeys","Reflect","getOwnPropertyDescriptor","useRemoteThreadListView","startedIds","threadFactory","useAdapters","bb0","seen","bodyIds","itemElementFor","data_0","options","options_0","bodyStateOf","mainThreadClient","bodies","map","id_0","made","key","wrapped","data_1","element","isRunning_0","id_1","direct","indexOf","findIndex","bodyId","bodyIndexOf","id_2","index","t4","t5","mainIndex","t6","itemOrder","threadListItems","data_2","t7","useRemoteThreadList","store","initialMainId","session","seeded","adapterAtLoad","adapterGeneration","titleStates","Map","loadGeneration","switchGeneration","loadPromise","loadMorePromise","lastNotifiedRemoteId","lastControlledThreadId","switchTask","isFirstThreadIdEffect","onStoreChange","subscribe","value","setMainThreadId","setStartedIds","assignMainThreadId","prev","includes","notifyRemoteId","emit","getLoadThreadsPromise","generation","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","isLoading","loadError","then","page","fresh","threads","threadIdMap","threadData","merged","cursor","nextCursor","catch","error","console","update","reload","adapterChanged","clear","reset","window","document","retryAfterError","retryAfterVisible","visibilityState","addEventListener","removeEventListener","unstable_useAdapters","unstable_Provider","warn","loadMore","snapshot","currentAdapter","task","after","isLoadingMore","appended","startSwitch","run","settle","reject","switchToThread","emitThreadIdChange","remoteMetadata","fetch","mappingId","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","initializeTask","targetId","optimistic","switchToNewThread","waitForUpdate","existing","existingId","ensureNotMain","lastAwaitedTask","startedFallback","requireAdapterGeneration","removedMappingId","replacementMainThreadId","retainedThreadId","reconciliation","survivorMappingId","startedId","newTitle","claim","deleteThread","states","generate","onTitle","stream","applyTitle","mainRemoteId","Object","is","hasMore","threadItems","main","reloadMainThread","unstable_refetchThread","selector","archived","RemoteThreadList"],"sources":["../../../src/react/client/RemoteThreadList.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n Derived,\n useAssistantContextProvider,\n useAssistantContextValue,\n useClientLookup,\n useClientResource,\n useConfiguredAui,\n} from \"@assistant-ui/store/client\";\nimport { isDevelopment, useThreadSelectionEvents } from \"../../store/internal\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n type RemoteThreadData,\n type RemoteThreadState,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport {\n inMemoryThreadListTransformScopes,\n type InMemoryThreadListProps,\n} from \"./InMemoryThreadList\";\nimport { AdaptedRemoteThread } from \"./AdaptedRemoteThread\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\nimport { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nconst EMPTY_LIST = createEmptyRemoteThreadState();\n\nexport type RemoteThreadListProps = {\n /**\n * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.\n */\n adapter: RemoteThreadListAdapter;\n /**\n * Factory for the visible thread. Per-thread history reload requires a\n * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed\n * factory keeps one instance across switches, so a mount-once history\n * loader will not fetch the next thread.\n */\n thread: InMemoryThreadListProps[\"thread\"];\n threadId?: string | undefined;\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n onSwitchToThread?: ((threadId: string) => void) | undefined;\n onSwitchToNewThread?: (() => void) | undefined;\n /** Called after the backing adapter successfully deletes the thread. */\n onDelete?: ((threadId: string) => void) | undefined;\n /**\n * Keeps every thread the session switched to mounted, so a run continues\n * after the user switches away, per-item `isRunning` reflects background\n * runs, and a freshly initialized thread generates its title automatically.\n * A body unmounts on delete, detach, or an adapter replacement (`reload()`\n * after swapping the adapter); visited threads otherwise stay mounted for\n * the client's lifetime. Each body reads its own thread through the ambient\n * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted\n * body. Off (the default), only the visible thread is mounted and a switch\n * unmounts it. The mode is fixed at mount.\n */\n backgroundThreads?: boolean | undefined;\n};\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" was not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst toInitializeResult = (\n result: RemoteThreadInitializeResponse,\n): { remoteId: string; externalId: string | undefined } => ({\n remoteId: result.remoteId,\n externalId: result.externalId,\n});\n\nconst useThreadListItemClient = (props: {\n data: RemoteThreadData;\n isRunning: boolean;\n onSwitchTo: (options?: { unarchive?: boolean }) => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n onGenerateTitle: (options?: { automatic?: boolean }) => void;\n onInitialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: \"lastMessageAt\" in data ? data.lastMessageAt : undefined,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: onGenerateTitle,\n initialize: onInitialize,\n detach: onDetach,\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\nconst collectItemOrder = (\n listState: RemoteThreadState,\n mainThreadId: string,\n): RemoteThreadData[] => {\n const ids = [\n listState.newThreadId,\n ...listState.threadIds,\n ...listState.archivedThreadIds,\n mainThreadId,\n ].filter((id): id is string => id !== undefined);\n const seenIds = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const items: RemoteThreadData[] = [];\n for (const id of ids) {\n const data = getThreadData(listState, id);\n if (!data || seenIds.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seenIds.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n items.push(data);\n }\n return items;\n};\n\nconst itemMatchesId = (\n item: RemoteThreadData,\n listState: RemoteThreadState,\n id: string,\n) => {\n const data = getThreadData(listState, id);\n return (\n item.id === id ||\n item.id === data?.id ||\n (data?.remoteId !== undefined &&\n (item.id === data.remoteId || item.remoteId === data.remoteId))\n );\n};\n\nconst isSameThread = (\n listState: RemoteThreadState,\n left: string,\n right: string,\n) => {\n if (left === right) return true;\n const data = getThreadData(listState, left);\n return data !== undefined && itemMatchesId(data, listState, right);\n};\n\nconst useRemoteThreadBody = ({\n id,\n status,\n remoteId,\n item,\n thread,\n}: {\n id: string;\n status: RemoteThreadData[\"status\"];\n remoteId: string | undefined;\n item: (isRunning: boolean) => ResourceElement<ClientOutput<\"threadListItem\">>;\n thread: ResourceElement<ClientOutput<\"thread\">>;\n}): ClientOutput<\"thread\"> => {\n const parent = useAssistantContextValue();\n const [isRunning, setIsRunning] = useState(false);\n // The item client is mounted inside the body and served to the subtree\n // through a Derived scope, which keeps the graft on the derived-only (no\n // nested client host) path; resolving `parent.threads` here instead would\n // read the threads scope during its own construction.\n const itemHandle = useClientResource(item(isRunning));\n const { client } = useConfiguredAui(parent, {\n threadListItem: Derived({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => itemHandle.methods,\n }),\n });\n // Auto-title arms only for a thread born \"new\" in this body's lifetime;\n // threads loaded or fetched from the adapter already carry their title. The\n // settled (non-optimistic) initialize is what writes remoteId, so its\n // arrival is the initialization signal.\n const bornNewRef = useRef(status === \"new\");\n const titleFiredRef = useRef(false);\n return useAssistantContextProvider(client, function useBoundRemoteBody() {\n const body = useClientResource(thread);\n const bodyRunning = body.state.isRunning === true;\n useEffect(() => {\n setIsRunning(bodyRunning);\n }, [bodyRunning]);\n const armed =\n bornNewRef.current && !titleFiredRef.current && remoteId !== undefined;\n const hasTitleSource =\n armed &&\n (\n body.state.messages as readonly {\n status?: { type: string } | undefined;\n }[]\n ).some(isTitleSourceMessage);\n useEffect(() => {\n if (!hasTitleSource || titleFiredRef.current) return;\n titleFiredRef.current = true;\n client.threadListItem.generateTitle({ automatic: true });\n }, [hasTitleSource]);\n return body.methods;\n });\n};\n\nconst RemoteThreadBody = resource(useRemoteThreadBody);\n\n// `thread(\"main\")` keeps one identity across switches, like the single\n// useClientResource slot it replaced: consumers (the ambient `thread` scope,\n// captured clients) hold the facade while it delegates to whichever body is\n// currently main. Publishing the target during commit keeps abandoned\n// concurrent renders from changing the facade observed by committed consumers.\nconst useMainThreadFacade = (\n current: ClientOutput<\"thread\">,\n): ClientOutput<\"thread\"> => {\n const currentRef = useRef(current);\n useEffect(() => {\n currentRef.current = current;\n }, [current]);\n const [facade] = useState(\n () =>\n new Proxy({} as ClientOutput<\"thread\">, {\n get: (_, prop) =>\n (currentRef.current as unknown as Record<PropertyKey, unknown>)[prop],\n has: (_, prop) => prop in (currentRef.current as object),\n ownKeys: () => Reflect.ownKeys(currentRef.current as object),\n getOwnPropertyDescriptor: (_, prop) =>\n Reflect.getOwnPropertyDescriptor(currentRef.current as object, prop),\n }),\n );\n return facade;\n};\n\nconst useRemoteThreadListView = ({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n}: {\n listState: RemoteThreadState;\n mainThreadId: string;\n startedIds: readonly string[];\n backgroundThreads: boolean;\n threadFactory: RemoteThreadListProps[\"thread\"];\n useAdapters: RemoteThreadListAdapter[\"unstable_useAdapters\"];\n onSwitchTo: (\n threadId: string,\n options?: { unarchive?: boolean },\n ) => Promise<void>;\n onRename: (threadId: string, title: string) => Promise<void>;\n onUpdateCustom: (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => Promise<void>;\n onArchive: (threadId: string) => Promise<void>;\n onUnarchive: (threadId: string) => Promise<void>;\n onDelete: (threadId: string) => Promise<void>;\n onGenerateTitle: (\n threadId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => Promise<void>;\n onInitialize: (threadId: string) => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: (threadId: string) => Promise<void>;\n}) => {\n const bodyIds = useMemo(() => {\n if (!backgroundThreads) return [mainThreadId];\n const seen = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const ids: string[] = [];\n for (const id of startedIds) {\n const data = getThreadData(listState, id);\n if (!data || seen.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seen.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n ids.push(data.id);\n }\n return ids;\n }, [backgroundThreads, listState, mainThreadId, startedIds]);\n\n const itemElementFor = (data: RemoteThreadData, isRunning: boolean) =>\n ThreadListItemClient({\n data,\n isRunning,\n onSwitchTo: (options) =>\n handleThreadListAction(\"switch\", () => onSwitchTo(data.id, options)),\n onRename: (title) =>\n handleThreadListAction(\"rename\", () => onRename(data.id, title)),\n onUpdateCustom: (custom) =>\n handleThreadListAction(\"update custom metadata\", () =>\n onUpdateCustom(data.id, custom),\n ),\n onArchive: () =>\n handleThreadListAction(\"archive\", () => onArchive(data.id)),\n onUnarchive: () =>\n handleThreadListAction(\"unarchive\", () => onUnarchive(data.id)),\n onDelete: () => handleThreadListAction(\"delete\", () => onDelete(data.id)),\n onGenerateTitle: (options) =>\n handleThreadListAction(\"generate title\", () =>\n onGenerateTitle(\n data.id,\n (backgroundThreads\n ? bodyStateOf(data.id)?.messages\n : mainThreadClient.state.messages) as\n | readonly ThreadMessage[]\n | undefined,\n options,\n ),\n ),\n onInitialize: () => onInitialize(data.id),\n onDetach: () => handleThreadListAction(\"detach\", () => onDetach(data.id)),\n });\n\n const bodies = useClientLookup(\n bodyIds.map((id) => {\n const made = threadFactory(id);\n // Background bodies never change occupant, so an unkeyed factory\n // element is keyed by the mapping id here; per-body history loads\n // without requiring the factory to key itself.\n const thread =\n backgroundThreads && made.key === undefined ? withKey(id, made) : made;\n const wrapped =\n useAdapters === undefined\n ? thread\n : AdaptedRemoteThread({\n useAdapters,\n thread,\n });\n const data = getThreadData(listState, id);\n const element =\n backgroundThreads && data !== undefined\n ? RemoteThreadBody({\n id,\n status: data.status,\n remoteId: data.remoteId,\n item: (isRunning) => itemElementFor(data, isRunning),\n thread: wrapped,\n })\n : wrapped;\n return withKey(backgroundThreads ? id : (made.key ?? \"main\"), element);\n }),\n );\n // A reload can remap a local thread id to its remote identity while the\n // body stays keyed by the original mapping id, so lookups fall back to\n // remote-identity matching.\n const bodyIndexOf = (id: string) => {\n const direct = bodyIds.indexOf(id);\n if (direct !== -1) return direct;\n return bodyIds.findIndex((bodyId) => isSameThread(listState, bodyId, id));\n };\n const bodyStateOf = (id: string) => {\n const index = bodyIndexOf(id);\n return index === -1 ? undefined : bodies.state[index];\n };\n const mainIndex = bodyIndexOf(mainThreadId);\n const mainThreadClient = {\n state: bodies.state[mainIndex]!,\n methods: useMainThreadFacade(bodies.get({ index: mainIndex })),\n };\n const itemOrder = useMemo(\n () => collectItemOrder(listState, mainThreadId),\n [listState, mainThreadId],\n );\n const threadListItems = useClientLookup(\n itemOrder.map((data) =>\n withKey(\n data.id,\n itemElementFor(\n data,\n backgroundThreads\n ? (bodyStateOf(data.id)?.isRunning ?? false)\n : itemMatchesId(data, listState, mainThreadId) &&\n mainThreadClient.state.isRunning,\n ),\n ),\n ),\n );\n return { mainThreadClient, itemOrder, threadListItems };\n};\n\nconst useRemoteThreadList = (\n props: RemoteThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n adapter,\n thread: threadFactory,\n threadId,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ store, initialMainId, session }] = useState(() => {\n const seeded = seedNewThread(EMPTY_LIST);\n return {\n store: new OptimisticState(seeded.state),\n initialMainId: seeded.id,\n session: {\n adapter,\n adapterAtLoad: adapter,\n adapterGeneration: 0,\n titleStates: new Map<string, ThreadTitleState>(),\n loadGeneration: 0,\n switchGeneration: 0,\n loadPromise: undefined as Promise<void> | undefined,\n loadMorePromise: undefined as Promise<void> | undefined,\n lastNotifiedRemoteId: undefined as string | undefined,\n lastControlledThreadId: undefined as string | undefined,\n switchTask: undefined as Promise<void> | undefined,\n mainThreadId: seeded.id,\n isFirstThreadIdEffect: true,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n },\n };\n });\n\n const listState = useSyncExternalStore(\n (onStoreChange) => store.subscribe(onStoreChange),\n () => store.value,\n () => store.value,\n );\n\n const [mainThreadId, setMainThreadId] = useState(initialMainId);\n const [startedIds, setStartedIds] = useState<readonly string[]>([\n initialMainId,\n ]);\n const [backgroundThreads] = useState(props.backgroundThreads === true);\n const assignMainThreadId = useCallback(\n (id: string) => {\n session.mainThreadId = id;\n setMainThreadId(id);\n setStartedIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [session],\n );\n useThreadSelectionEvents(mainThreadId);\n useEffect(() => {\n // Publishing after commit keeps imperative actions on the adapter the committed tree renders with; an abandoned render must not reach them.\n session.adapter = adapter;\n session.mainThreadId = mainThreadId;\n session.onThreadIdChange = onThreadIdChange;\n session.onSwitchToThread = onSwitchToThread;\n session.onSwitchToNewThread = onSwitchToNewThread;\n }, [\n adapter,\n mainThreadId,\n onSwitchToNewThread,\n onSwitchToThread,\n onThreadIdChange,\n session,\n ]);\n\n const notifyRemoteId = useCallback(\n (remoteId: string | undefined, emit: boolean) => {\n if (session.lastNotifiedRemoteId === remoteId) return;\n session.lastNotifiedRemoteId = remoteId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n session.onThreadIdChange,\n remoteId,\n );\n }\n },\n [session],\n );\n\n const getLoadThreadsPromise = useCallback(() => {\n if (session.loadPromise) return session.loadPromise;\n const generation = session.loadGeneration;\n const adapter = session.adapter;\n const statusAtRequest = statusSnapshot(store.baseValue);\n session.loadPromise = store\n .optimisticUpdate({\n execute: () => adapter.list(),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoading: true, loadError: undefined };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n session.adapterAtLoad = adapter;\n const fresh = classifyThreads(page.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(page.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n session.loadPromise = undefined;\n store.update({\n ...store.baseValue,\n isLoading: false,\n loadError: error,\n });\n })\n .then(() => {});\n return session.loadPromise;\n }, [session, store]);\n\n const reload = useCallback(() => {\n const adapterChanged = adapter !== session.adapterAtLoad;\n session.loadGeneration++;\n session.loadPromise = undefined;\n session.loadMorePromise = undefined;\n if (adapterChanged) {\n session.adapterGeneration++;\n session.titleStates.clear();\n session.switchGeneration++;\n session.switchTask = undefined;\n session.adapterAtLoad = adapter;\n const seeded = seedNewThread(EMPTY_LIST);\n store.reset({ ...seeded.state, isLoading: true });\n assignMainThreadId(seeded.id);\n setStartedIds([seeded.id]);\n notifyRemoteId(undefined, true);\n } else {\n store.update({\n ...store.baseValue,\n cursor: undefined,\n });\n }\n return getLoadThreadsPromise();\n }, [\n adapter,\n assignMainThreadId,\n getLoadThreadsPromise,\n notifyRemoteId,\n session,\n store,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const retryAfterError = () => {\n if (store.value.loadError !== undefined) void getLoadThreadsPromise();\n };\n const retryAfterVisible = () => {\n if (document.visibilityState === \"visible\") retryAfterError();\n };\n\n window.addEventListener(\"online\", retryAfterError);\n document.addEventListener(\"visibilitychange\", retryAfterVisible);\n return () => {\n window.removeEventListener(\"online\", retryAfterError);\n document.removeEventListener(\"visibilitychange\", retryAfterVisible);\n };\n }, [getLoadThreadsPromise, store]);\n\n useEffect(() => {\n void getLoadThreadsPromise();\n }, [getLoadThreadsPromise]);\n\n useEffect(() => {\n if (!isDevelopment) return;\n if (adapter.unstable_useAdapters !== undefined) return;\n if (adapter.unstable_Provider === undefined) return;\n console.warn(\n \"[assistant-ui] RemoteThreadList ignores RemoteThreadListAdapter.unstable_Provider. Expose unstable_useAdapters so per-thread history loads on this entry. useRemoteThreadListRuntime still honors unstable_Provider.\",\n );\n }, [adapter]);\n\n const loadMore = useCallback(() => {\n if (session.loadMorePromise) return session.loadMorePromise;\n const snapshot = store.value;\n if (snapshot.cursor === undefined || snapshot.isLoading) {\n return RESOLVED_PROMISE;\n }\n const generation = session.loadGeneration;\n const cursor = snapshot.cursor;\n const currentAdapter = session.adapter;\n const task = store\n .optimisticUpdate({\n execute: () => currentAdapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n const appended = classifyThreads(page.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(page.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (session.loadMorePromise === task) {\n session.loadMorePromise = undefined;\n }\n });\n session.loadMorePromise = task;\n return task;\n }, [session, store]);\n\n const startSwitch = useCallback(\n (run: (generation: number) => Promise<void>) => {\n const generation = ++session.switchGeneration;\n let settle!: (error?: unknown) => void;\n const task = new Promise<void>((resolve, reject) => {\n settle = (error) => {\n if (error === undefined) resolve();\n else reject(error);\n };\n });\n session.switchTask = task;\n void run(generation).then(\n () => settle(),\n (error: unknown) => settle(error),\n );\n return task;\n },\n [session],\n );\n\n const switchToThread = useCallback(\n (\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n emitThreadIdChange = true,\n ) =>\n startSwitch(async (generation) => {\n let data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n const remoteMetadata =\n await session.adapter.fetch(threadIdOrRemoteId);\n if (generation !== session.switchGeneration) return;\n const state = store.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteMetadata.remoteId)\n : state.archivedThreadIds.includes(remoteMetadata.remoteId);\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n store.update({\n ...state,\n threadIds:\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote,\n archivedThreadIds:\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n },\n },\n });\n data = getThreadData(store.value, threadIdOrRemoteId);\n }\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n }\n if (isSameThread(store.value, data.id, session.mainThreadId)) return;\n\n const targetId = data.id;\n let current: RemoteThreadData | undefined = data;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n const { remoteId } = await current.initializeTask;\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n if (current.status === \"archived\") {\n await store.optimisticUpdate({\n execute: () => session.adapter.unarchive(remoteId),\n optimistic: (state) =>\n updateStatusReducer(state, targetId, \"regular\"),\n });\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n }\n }\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(current.id);\n notifyRemoteId(current.remoteId, emitThreadIdChange);\n session.onSwitchToThread?.(current.id);\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const switchToNewThread = useCallback(\n (emitThreadIdChange = true) =>\n startSwitch(async (generation) => {\n while (\n store.baseValue.newThreadId !== undefined &&\n store.value.newThreadId === undefined\n ) {\n await store.waitForUpdate();\n if (generation !== session.switchGeneration) return;\n }\n const existing = store.value.newThreadId;\n if (existing !== undefined) {\n const existingId =\n getThreadData(store.value, existing)?.id ?? existing;\n if (isSameThread(store.value, existingId, session.mainThreadId)) {\n return;\n }\n assignMainThreadId(existingId);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n return;\n }\n const seeded = seedNewThread(store.baseValue);\n store.update(seeded.state);\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(seeded.id);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const ensureNotMain = useCallback(\n async (threadId: string) => {\n if (threadId === store.value.newThreadId) {\n throw new Error(\"Cannot ensure new thread is not main\");\n }\n let lastAwaitedTask: Promise<void> | undefined;\n while (isSameThread(store.value, threadId, session.mainThreadId)) {\n let switchTask = session.switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) {\n switchTask = switchToNewThread();\n }\n lastAwaitedTask = switchTask;\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && session.switchTask === switchTask) {\n throw error;\n }\n }\n }\n },\n [session, store, switchToNewThread],\n );\n\n const requireAdapterGeneration = useCallback(\n (generation: number) => {\n if (generation !== session.adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n },\n [session],\n );\n\n const initialize = useCallback(\n async (threadId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n if (store.value.newThreadId !== threadId) {\n const data = getThreadData(store.value, threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n }\n const result = toInitializeResult(await data.initializeTask);\n requireAdapterGeneration(adapterGeneration);\n return result;\n }\n requireAdapterGeneration(adapterGeneration);\n const initializeTask = currentAdapter.initialize(threadId);\n let removedMappingId: string | undefined;\n let replacementMainThreadId: string | undefined;\n const result = await store.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n // Background mode still owns the initializing body. Single-body mode\n // has already replaced it, so retain the currently mounted body.\n const retainedThreadId = backgroundThreads\n ? threadId\n : session.mainThreadId;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n retainedThreadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === session.mainThreadId) {\n replacementMainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n setStartedIds((prev) =>\n prev.filter((startedId) => startedId !== removedMappingId),\n );\n }\n if (\n replacementMainThreadId !== undefined &&\n session.mainThreadId === removedMappingId\n ) {\n assignMainThreadId(replacementMainThreadId);\n }\n if (threadId === session.mainThreadId) {\n notifyRemoteId(result.remoteId, true);\n }\n return toInitializeResult(result);\n },\n [\n assignMainThreadId,\n backgroundThreads,\n notifyRemoteId,\n requireAdapterGeneration,\n session,\n store,\n ],\n );\n\n const rename = useCallback(\n (threadIdOrRemoteId: string, newTitle: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n }\n const claim = startThreadTitleRename(\n session.titleStates,\n data.id,\n newTitle,\n );\n return store\n .optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title: newTitle,\n },\n },\n };\n },\n })\n .then(\n (result) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, true);\n return result;\n },\n (error: unknown) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, false);\n throw error;\n },\n );\n },\n [requireAdapterGeneration, session, store],\n );\n\n const updateCustom = useCallback(\n (\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n }\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return currentAdapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n custom,\n },\n },\n };\n },\n });\n },\n [requireAdapterGeneration, session, store],\n );\n\n const archive = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n }\n await ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.archive(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"archived\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const unarchive = useCallback(\n (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"be unarchived\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return await currentAdapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === session.adapterGeneration) {\n await ensureNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"regular\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const deleteThread = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\") {\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n }\n await ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n const result = await store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.delete(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"deleted\"),\n });\n // An adapter swap resets the optimistic layer, and a listed thread's slot\n // id is its remote id, so a replacement adapter can re-list this slot\n // while the deletion is in flight.\n if (getThreadData(store.value, data.id) !== undefined) return result;\n clearThreadTitleState(session.titleStates, data.id);\n onDelete?.(data.id);\n return result;\n },\n [ensureNotMain, onDelete, requireAdapterGeneration, session, store],\n );\n\n const generateTitle = useCallback(\n async (\n threadIdOrRemoteId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"generating its title\");\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"generate a title\",\n );\n }\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (\n !backgroundThreads &&\n !isSameThread(store.value, data.id, session.mainThreadId)\n ) {\n return;\n }\n if (!messages) return;\n await runThreadTitleGeneration({\n states: session.titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await currentAdapter.generateTitle(remoteId, messages);\n requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n requireAdapterGeneration(adapterGeneration);\n await currentAdapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await store.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n const current = getThreadData(state, data.id);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title,\n },\n },\n };\n },\n });\n },\n });\n },\n [backgroundThreads, requireAdapterGeneration, session, store],\n );\n\n const detach = useCallback(\n async (threadId: string) => {\n await ensureNotMain(threadId);\n setStartedIds((prev) => prev.filter((id) => id !== threadId));\n },\n [ensureNotMain],\n );\n\n const { mainThreadClient, itemOrder, threadListItems } =\n useRemoteThreadListView({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters: adapter.unstable_useAdapters,\n onSwitchTo: (id, options) => switchToThread(id, options),\n onRename: (id, title) => rename(id, title),\n onUpdateCustom: (id, custom) => updateCustom(id, custom),\n onArchive: (id) => archive(id),\n onUnarchive: (id) => unarchive(id),\n onDelete: (id) => deleteThread(id),\n onGenerateTitle: (id, messages, options) =>\n generateTitle(id, messages, options),\n onInitialize: async (id) => toInitializeResult(await initialize(id)),\n onDetach: (id) => detach(id),\n });\n\n const mainRemoteId = getThreadData(listState, mainThreadId)?.remoteId;\n useEffect(() => {\n if (session.lastNotifiedRemoteId === mainRemoteId) return;\n session.lastNotifiedRemoteId = mainRemoteId;\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n onThreadIdChange,\n mainRemoteId,\n );\n }, [mainRemoteId, onThreadIdChange, session]);\n\n useEffect(() => {\n if (session.isFirstThreadIdEffect) {\n session.isFirstThreadIdEffect = false;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) return;\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n return;\n }\n if (Object.is(session.lastControlledThreadId, threadId)) return;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) {\n handleThreadListAction(\"create\", () => switchToNewThread(false));\n return;\n }\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n }, [session, switchToNewThread, switchToThread, threadId]);\n\n const state = useMemo(\n () => ({\n mainThreadId,\n newThreadId: listState.newThreadId ?? null,\n isLoading: listState.isLoading,\n loadError: listState.loadError,\n isLoadingMore: listState.isLoadingMore,\n hasMore: listState.cursor !== undefined,\n threadIds: listState.threadIds,\n archivedThreadIds: listState.archivedThreadIds,\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n }),\n [\n listState.archivedThreadIds,\n listState.cursor,\n listState.isLoading,\n listState.loadError,\n listState.isLoadingMore,\n listState.newThreadId,\n listState.threadIds,\n mainThreadClient.state,\n mainThreadId,\n threadListItems.state,\n ],\n );\n\n return {\n getState: () => state,\n switchToThread: (id, options) => {\n handleThreadListAction(\"switch\", () => switchToThread(id, options));\n },\n switchToNewThread: () => {\n handleThreadListAction(\"create\", () => switchToNewThread());\n },\n getLoadThreadsPromise,\n reload,\n reloadMainThread: () => {\n if (getThreadData(store.value, mainThreadId)?.status === \"new\") {\n return RESOLVED_PROMISE;\n }\n return (\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE\n );\n },\n loadMore,\n item: (selector) => {\n if (selector === \"main\") {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, mainThreadId),\n );\n return threadListItems.get({ index });\n }\n if (\"id\" in selector) {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, selector.id),\n );\n return threadListItems.get({ index });\n }\n const ids = selector.archived\n ? listState.archivedThreadIds\n : listState.threadIds;\n const id = ids[selector.index];\n if (id === undefined) {\n return threadListItems.get({ index: -1 });\n }\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, id),\n );\n return threadListItems.get({ index });\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\n/**\n * `AuiConfig` `threads` entry backed by a `RemoteThreadListAdapter`. Thread\n * bodies are born from the `thread` factory inside the client tree, so any\n * `AssistantClient` host can run a remote or cloud list. Per-thread history\n * and attachments come from `unstable_useAdapters`. `useRemoteThreadListRuntime`\n * uses the same hook when `unstable_Provider` is omitted. Key the factory\n * with `withKey` so history reloads when the visible thread changes.\n * With `backgroundThreads`, every visited thread stays mounted: runs continue\n * across switches, per-item `isRunning` is live, and freshly initialized\n * threads title themselves.\n */\nexport const RemoteThreadList = resource(useRemoteThreadList);\n\nattachTransformScopes(useRemoteThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import { McpAppResourceOutput } from "../types/scopes/tools.js";
|
|
|
3
3
|
import { ClientOutput } from "@assistant-ui/store";
|
|
4
4
|
import { ResourceElement } from "@assistant-ui/tap";
|
|
5
5
|
//#region src/react/client/Tools.d.ts
|
|
6
|
-
declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
|
|
6
|
+
export declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
|
|
7
7
|
/** Tools to expose to the model and optional renderers to install. */
|
|
8
8
|
toolkit?: Toolkit;
|
|
9
9
|
/** Optional MCP app resource whose tools should be merged into context. */
|
|
10
10
|
mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;
|
|
11
11
|
}]>;
|
|
12
12
|
//#endregion
|
|
13
|
-
export {
|
|
13
|
+
export type { McpAppResourceOutput };
|
|
14
14
|
//# sourceMappingURL=Tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;qBA8Ka,mCAAK,SAAA;;EAtIN,UAAA;;EAED,SAAA,gBAAgB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Unstable_InteractableDefinition } from "../types/scopes/interactables.js";
|
|
2
2
|
import { Tool, toJSONSchema } from "assistant-stream";
|
|
3
3
|
//#region src/react/client/interactable-model-context.d.ts
|
|
4
|
-
type PartialJSONSchema = ReturnType<typeof toJSONSchema>;
|
|
5
|
-
declare function buildInteractableModelContext(definitions: Record<string, Unstable_InteractableDefinition>, partialSchemaCache: Map<string, PartialJSONSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void, streamBaselines?: Map<string, {
|
|
4
|
+
export type PartialJSONSchema = ReturnType<typeof toJSONSchema>;
|
|
5
|
+
export declare function buildInteractableModelContext(definitions: Record<string, Unstable_InteractableDefinition>, partialSchemaCache: Map<string, PartialJSONSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void, streamBaselines?: Map<string, {
|
|
6
6
|
targetId: string;
|
|
7
7
|
state: unknown;
|
|
8
8
|
}>): {
|
|
@@ -10,5 +10,4 @@ declare function buildInteractableModelContext(definitions: Record<string, Unsta
|
|
|
10
10
|
unstable_composerMetadata?: Record<string, unknown>;
|
|
11
11
|
} | undefined;
|
|
12
12
|
//#endregion
|
|
13
|
-
export { PartialJSONSchema, buildInteractableModelContext };
|
|
14
13
|
//# sourceMappingURL=interactable-model-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/client/interactable-model-context.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/client/interactable-model-context.ts"],"mappings":";;;YAYY,oBAAoB,kBAAkB;wBAgIlC,8BACd,aAAa,eAAe,kCAC5B,oBAAoB,YAAY,oBAChC,cAAc,YAAY,UAAU,oCACpC,kBAAe;EAA+B;EAAe;;EAGzD,OAAO,eAAe;EACtB,4BAA4B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { nullProtoRecord } from "../../utils/record.js";
|
|
1
2
|
import { isRecord } from "../../utils/json/is-json.js";
|
|
2
3
|
import { interactableToolName, shallowMergeInteractableState } from "../../model-context/interactable-composer-metadata.js";
|
|
3
4
|
import { generateId } from "../../utils/id.js";
|
|
@@ -147,7 +148,7 @@ function buildInteractableModelContext(definitions, partialSchemaCache, setDefSt
|
|
|
147
148
|
}
|
|
148
149
|
const baseline = streamBaselines.get(toolCallId);
|
|
149
150
|
streamBaselines.delete(toolCallId);
|
|
150
|
-
const addedItemIds =
|
|
151
|
+
const addedItemIds = nullProtoRecord();
|
|
151
152
|
setDefState(target.id, (prev) => shallowMergeInteractableState(prev, partial, {
|
|
152
153
|
arrayBaseline: baseline?.targetId === target.id ? baseline.state : void 0,
|
|
153
154
|
idFactory: (field) => {
|
|
@@ -161,7 +162,7 @@ function buildInteractableModelContext(definitions, partialSchemaCache, setDefSt
|
|
|
161
162
|
success: true,
|
|
162
163
|
id: target.id
|
|
163
164
|
};
|
|
164
|
-
if (Object.keys(addedItemIds).length > 0) result.addedItemIds = addedItemIds;
|
|
165
|
+
if (Object.keys(addedItemIds).length > 0) result.addedItemIds = { ...addedItemIds };
|
|
165
166
|
return result;
|
|
166
167
|
}
|
|
167
168
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactable-model-context.js","names":["Tool","toJSONSchema","Unstable_InteractableDefinition","interactableToolName","shallowMergeInteractableState","Unstable_InteractableSnapshotEntry","generateId","isRecord","PartialJSONSchema","ReturnType","ID_PROPERTY","type","const","description","ITEM_ID_PROPERTY","hasIdProperty","schema","Record","properties","id","undefined","withRequiredItemId","required","withoutItemId","_omitted","Array","isArray","filter","key","toArrayUpdateSchema","field","itemSchema","items","idKeyed","add","remove","clear","update","additionalProperties","idKeyedArrayFieldNames","Set","names","value","Object","entries","withArrayUpdateSchemas","fromEntries","map","withRequiredId","partial","process","env","NODE_ENV","console","warn","_reserved","buildInteractableModelContext","definitions","partialSchemaCache","Map","setDefState","updater","prev","streamBaselines","targetId","state","tools","unstable_composerMetadata","values","length","byName","def","list","get","name","push","set","instances","toolName","first","partialSchema","idKeyedFields","resolveTarget","parameters","streamCall","reader","toolCallId","partialArgs","args","streamValues","keys","idIndex","indexOf","target","baseline","arrayBaseline","execute","validIds","d","success","error","JSON","stringify","join","delete","addedItemIds","idFactory","itemId","result","interactables"],"sources":["../../../src/react/client/interactable-model-context.ts"],"sourcesContent":["import type { Tool } from \"assistant-stream\";\nimport { toJSONSchema } from \"assistant-stream\";\nimport type { Unstable_InteractableDefinition } from \"../types/scopes/interactables\";\nimport {\n interactableToolName,\n shallowMergeInteractableState,\n type Unstable_InteractableSnapshotEntry,\n} from \"../../model-context/interactable-composer-metadata\";\nimport { generateId } from \"../../utils/id\";\nimport { isRecord } from \"../../utils/json/is-json\";\n\nexport type PartialJSONSchema = ReturnType<typeof toJSONSchema>;\n\nconst ID_PROPERTY = {\n type: \"string\" as const,\n description:\n \"The id of the instance to update, as shown in its state snapshot in the conversation.\",\n};\n\nconst ITEM_ID_PROPERTY = {\n type: \"string\" as const,\n description: \"The id of an item currently in this list.\",\n};\n\nconst hasIdProperty = (schema: Record<string, unknown>) => {\n const properties = schema.properties;\n return isRecord(properties) && properties.id !== undefined;\n};\n\nconst withRequiredItemId = (schema: Record<string, unknown>) => ({\n ...schema,\n required: [\"id\"],\n});\n\n// The framework assigns ids to new items, so the model never sees the `id`\n// field when adding (it can't address an item that doesn't exist yet).\nconst withoutItemId = (schema: Record<string, unknown>) => {\n const { id: _omitted, ...properties } = isRecord(schema.properties)\n ? schema.properties\n : {};\n const required = Array.isArray(schema.required)\n ? schema.required.filter((key) => key !== \"id\")\n : schema.required;\n return { ...schema, properties, required };\n};\n\nconst toArrayUpdateSchema = (schema: unknown, field: string) => {\n if (!isRecord(schema) || schema.type !== \"array\") return schema;\n const itemSchema = schema.items;\n if (Array.isArray(itemSchema) || !isRecord(itemSchema)) return schema;\n\n const idKeyed = hasIdProperty(itemSchema);\n const properties: Record<string, unknown> = {\n add: {\n type: \"array\",\n items: idKeyed ? withoutItemId(itemSchema) : itemSchema,\n },\n remove: {\n type: \"array\",\n items: idKeyed ? ITEM_ID_PROPERTY : itemSchema,\n },\n clear: { type: \"boolean\" },\n };\n\n if (idKeyed) {\n properties.update = {\n type: \"array\",\n items: withRequiredItemId(itemSchema),\n };\n }\n\n return {\n type: \"object\" as const,\n description:\n `Operations for array field \"${field}\". To change one item use update ` +\n `with its id; add new items (their ids are assigned for you), remove items ` +\n `by id, or clear to empty. Change only the items you mean to — never resend ` +\n `the whole array to edit one item.`,\n properties,\n additionalProperties: false,\n };\n};\n\n// Top-level array fields whose items carry an `id` — the fields the framework\n// mints ids for on add.\nconst idKeyedArrayFieldNames = (\n properties: Record<string, unknown>,\n): Set<string> => {\n const names = new Set<string>();\n for (const [key, value] of Object.entries(properties)) {\n if (\n isRecord(value) &&\n value.type === \"array\" &&\n isRecord(value.items) &&\n hasIdProperty(value.items)\n ) {\n names.add(key);\n }\n }\n return names;\n};\n\nconst withArrayUpdateSchemas = (properties: Record<string, unknown>) =>\n Object.fromEntries(\n Object.entries(properties).map(([key, value]) => [\n key,\n toArrayUpdateSchema(value, key),\n ]),\n );\n\n/**\n * Wraps an interactable's partial state schema with the required `id`\n * parameter. Falls back to a permissive schema when the partial conversion\n * failed at registration time.\n */\nfunction withRequiredId(partial: PartialJSONSchema | undefined) {\n if (!partial || typeof partial !== \"object\" || partial.type !== \"object\") {\n return {\n type: \"object\" as const,\n properties: { id: ID_PROPERTY },\n required: [\"id\"],\n additionalProperties: true,\n };\n }\n if (process.env.NODE_ENV !== \"production\" && partial.properties?.id) {\n console.warn(\n `[Interactables] a top-level \"id\" field in an interactable's stateSchema is ` +\n `reserved for instance addressing by the update tool and cannot be updated ` +\n `by the model. Rename the field to make it model-writable.`,\n );\n }\n const { id: _reserved, ...properties } = partial.properties ?? {};\n return {\n ...partial,\n properties: { id: ID_PROPERTY, ...withArrayUpdateSchemas(properties) },\n required: [\"id\"],\n };\n}\n\nexport function buildInteractableModelContext(\n definitions: Record<string, Unstable_InteractableDefinition>,\n partialSchemaCache: Map<string, PartialJSONSchema>,\n setDefState: (id: string, updater: (prev: unknown) => unknown) => void,\n streamBaselines = new Map<string, { targetId: string; state: unknown }>(),\n):\n | {\n tools: Record<string, Tool<any, any>>;\n unstable_composerMetadata?: Record<string, unknown>;\n }\n | undefined {\n const entries = Object.values(definitions);\n if (entries.length === 0) return undefined;\n\n const byName = new Map<string, Unstable_InteractableDefinition[]>();\n for (const def of entries) {\n const list = byName.get(def.name) ?? [];\n list.push(def);\n byName.set(def.name, list);\n }\n\n const tools: Record<string, Tool<any, any>> = {};\n\n for (const [name, instances] of byName) {\n const toolName = interactableToolName(name);\n if (tools[toolName]) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Interactables] interactable names \"${name}\" and another registered name ` +\n `both sanitize to the tool name \"${toolName}\". Rename one of them.`,\n );\n }\n continue;\n }\n\n const first = instances[0]!;\n const partialSchema = partialSchemaCache.get(first.id);\n const idKeyedFields =\n partialSchema && isRecord(partialSchema.properties)\n ? idKeyedArrayFieldNames(partialSchema.properties)\n : new Set<string>();\n\n // `id` resolves to a definition of this name; an id-less call is accepted\n // only while exactly one instance exists.\n const resolveTarget = (\n id: unknown,\n ): Unstable_InteractableDefinition | undefined => {\n if (typeof id === \"string\") {\n const def = definitions[id];\n return def?.name === name ? def : undefined;\n }\n return instances.length === 1 ? first : undefined;\n };\n\n tools[toolName] = {\n type: \"frontend\",\n description:\n `Update the state of interactable component \"${name}\". ${first.description} ` +\n `Pass the id of the instance to update — instance ids and current state ` +\n `appear in the conversation as state snapshots. Only include the fields ` +\n `you want to change; omitted fields keep their current values.`,\n parameters: withRequiredId(partialSchema),\n streamCall: async (reader, { toolCallId }) => {\n try {\n for await (const partialArgs of reader.args.streamValues()) {\n if (!partialArgs || typeof partialArgs !== \"object\") continue;\n const args = partialArgs as Record<string, unknown>;\n const keys = Object.keys(args);\n const idIndex = keys.indexOf(\"id\");\n if (idIndex === keys.length - 1) continue;\n\n const { id, ...partial } = args;\n if (Object.keys(partial).length === 0) continue;\n const target = resolveTarget(id);\n if (!target) continue;\n\n const baseline = streamBaselines.get(toolCallId);\n const arrayBaseline =\n baseline?.targetId === target.id ? baseline.state : target.state;\n if (!baseline || baseline.targetId !== target.id) {\n streamBaselines.set(toolCallId, {\n targetId: target.id,\n state: target.state,\n });\n }\n\n setDefState(target.id, (prev) =>\n shallowMergeInteractableState(prev, partial, { arrayBaseline }),\n );\n }\n } catch {\n // Non-fatal: execute handles the final state\n }\n },\n execute: async (args: unknown, { toolCallId }) => {\n const { id, ...partial } = (args ?? {}) as Record<string, unknown>;\n const target = resolveTarget(id);\n if (!target) {\n const validIds = instances.map((d) => d.id);\n return {\n success: false,\n error: `Unknown id ${JSON.stringify(id)} for interactable \"${name}\". Valid ids: ${validIds.join(\", \")}`,\n };\n }\n const baseline = streamBaselines.get(toolCallId);\n streamBaselines.delete(toolCallId);\n const addedItemIds: Record<string, string[]> = {};\n setDefState(target.id, (prev) =>\n shallowMergeInteractableState(prev, partial, {\n arrayBaseline:\n baseline?.targetId === target.id ? baseline.state : undefined,\n idFactory: (field) => {\n const itemId = generateId();\n (addedItemIds[field] ??= []).push(itemId);\n return itemId;\n },\n idKeyedFields,\n }),\n );\n // The resolved id lets an id-less call's UI (and the model) address\n // the instance that was actually updated.\n const result: {\n success: true;\n id: string;\n addedItemIds?: Record<string, string[]>;\n } = { success: true, id: target.id };\n if (Object.keys(addedItemIds).length > 0) {\n result.addedItemIds = addedItemIds;\n }\n return result;\n },\n };\n }\n\n const interactables: Unstable_InteractableSnapshotEntry[] = entries.map(\n (def) => ({\n id: def.id,\n name: def.name,\n state: def.state,\n }),\n );\n return { tools, unstable_composerMetadata: { interactables } };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interactable-model-context.js","names":["Tool","toJSONSchema","Unstable_InteractableDefinition","interactableToolName","shallowMergeInteractableState","Unstable_InteractableSnapshotEntry","generateId","isRecord","nullProtoRecord","PartialJSONSchema","ReturnType","ID_PROPERTY","type","const","description","ITEM_ID_PROPERTY","hasIdProperty","schema","Record","properties","id","undefined","withRequiredItemId","required","withoutItemId","_omitted","Array","isArray","filter","key","toArrayUpdateSchema","field","itemSchema","items","idKeyed","add","remove","clear","update","additionalProperties","idKeyedArrayFieldNames","Set","names","value","Object","entries","withArrayUpdateSchemas","fromEntries","map","withRequiredId","partial","process","env","NODE_ENV","console","warn","_reserved","buildInteractableModelContext","definitions","partialSchemaCache","Map","setDefState","updater","prev","streamBaselines","targetId","state","tools","unstable_composerMetadata","values","length","byName","def","list","get","name","push","set","instances","toolName","first","partialSchema","idKeyedFields","resolveTarget","parameters","streamCall","reader","toolCallId","partialArgs","args","streamValues","keys","idIndex","indexOf","target","baseline","arrayBaseline","execute","validIds","d","success","error","JSON","stringify","join","delete","addedItemIds","idFactory","itemId","result","interactables"],"sources":["../../../src/react/client/interactable-model-context.ts"],"sourcesContent":["import type { Tool } from \"assistant-stream\";\nimport { toJSONSchema } from \"assistant-stream\";\nimport type { Unstable_InteractableDefinition } from \"../types/scopes/interactables\";\nimport {\n interactableToolName,\n shallowMergeInteractableState,\n type Unstable_InteractableSnapshotEntry,\n} from \"../../model-context/interactable-composer-metadata\";\nimport { generateId } from \"../../utils/id\";\nimport { isRecord } from \"../../utils/json/is-json\";\nimport { nullProtoRecord } from \"../../utils/record\";\n\nexport type PartialJSONSchema = ReturnType<typeof toJSONSchema>;\n\nconst ID_PROPERTY = {\n type: \"string\" as const,\n description:\n \"The id of the instance to update, as shown in its state snapshot in the conversation.\",\n};\n\nconst ITEM_ID_PROPERTY = {\n type: \"string\" as const,\n description: \"The id of an item currently in this list.\",\n};\n\nconst hasIdProperty = (schema: Record<string, unknown>) => {\n const properties = schema.properties;\n return isRecord(properties) && properties.id !== undefined;\n};\n\nconst withRequiredItemId = (schema: Record<string, unknown>) => ({\n ...schema,\n required: [\"id\"],\n});\n\n// The framework assigns ids to new items, so the model never sees the `id`\n// field when adding (it can't address an item that doesn't exist yet).\nconst withoutItemId = (schema: Record<string, unknown>) => {\n const { id: _omitted, ...properties } = isRecord(schema.properties)\n ? schema.properties\n : {};\n const required = Array.isArray(schema.required)\n ? schema.required.filter((key) => key !== \"id\")\n : schema.required;\n return { ...schema, properties, required };\n};\n\nconst toArrayUpdateSchema = (schema: unknown, field: string) => {\n if (!isRecord(schema) || schema.type !== \"array\") return schema;\n const itemSchema = schema.items;\n if (Array.isArray(itemSchema) || !isRecord(itemSchema)) return schema;\n\n const idKeyed = hasIdProperty(itemSchema);\n const properties: Record<string, unknown> = {\n add: {\n type: \"array\",\n items: idKeyed ? withoutItemId(itemSchema) : itemSchema,\n },\n remove: {\n type: \"array\",\n items: idKeyed ? ITEM_ID_PROPERTY : itemSchema,\n },\n clear: { type: \"boolean\" },\n };\n\n if (idKeyed) {\n properties.update = {\n type: \"array\",\n items: withRequiredItemId(itemSchema),\n };\n }\n\n return {\n type: \"object\" as const,\n description:\n `Operations for array field \"${field}\". To change one item use update ` +\n `with its id; add new items (their ids are assigned for you), remove items ` +\n `by id, or clear to empty. Change only the items you mean to — never resend ` +\n `the whole array to edit one item.`,\n properties,\n additionalProperties: false,\n };\n};\n\n// Top-level array fields whose items carry an `id` — the fields the framework\n// mints ids for on add.\nconst idKeyedArrayFieldNames = (\n properties: Record<string, unknown>,\n): Set<string> => {\n const names = new Set<string>();\n for (const [key, value] of Object.entries(properties)) {\n if (\n isRecord(value) &&\n value.type === \"array\" &&\n isRecord(value.items) &&\n hasIdProperty(value.items)\n ) {\n names.add(key);\n }\n }\n return names;\n};\n\nconst withArrayUpdateSchemas = (properties: Record<string, unknown>) =>\n Object.fromEntries(\n Object.entries(properties).map(([key, value]) => [\n key,\n toArrayUpdateSchema(value, key),\n ]),\n );\n\n/**\n * Wraps an interactable's partial state schema with the required `id`\n * parameter. Falls back to a permissive schema when the partial conversion\n * failed at registration time.\n */\nfunction withRequiredId(partial: PartialJSONSchema | undefined) {\n if (!partial || typeof partial !== \"object\" || partial.type !== \"object\") {\n return {\n type: \"object\" as const,\n properties: { id: ID_PROPERTY },\n required: [\"id\"],\n additionalProperties: true,\n };\n }\n if (process.env.NODE_ENV !== \"production\" && partial.properties?.id) {\n console.warn(\n `[Interactables] a top-level \"id\" field in an interactable's stateSchema is ` +\n `reserved for instance addressing by the update tool and cannot be updated ` +\n `by the model. Rename the field to make it model-writable.`,\n );\n }\n const { id: _reserved, ...properties } = partial.properties ?? {};\n return {\n ...partial,\n properties: { id: ID_PROPERTY, ...withArrayUpdateSchemas(properties) },\n required: [\"id\"],\n };\n}\n\nexport function buildInteractableModelContext(\n definitions: Record<string, Unstable_InteractableDefinition>,\n partialSchemaCache: Map<string, PartialJSONSchema>,\n setDefState: (id: string, updater: (prev: unknown) => unknown) => void,\n streamBaselines = new Map<string, { targetId: string; state: unknown }>(),\n):\n | {\n tools: Record<string, Tool<any, any>>;\n unstable_composerMetadata?: Record<string, unknown>;\n }\n | undefined {\n const entries = Object.values(definitions);\n if (entries.length === 0) return undefined;\n\n const byName = new Map<string, Unstable_InteractableDefinition[]>();\n for (const def of entries) {\n const list = byName.get(def.name) ?? [];\n list.push(def);\n byName.set(def.name, list);\n }\n\n const tools: Record<string, Tool<any, any>> = {};\n\n for (const [name, instances] of byName) {\n const toolName = interactableToolName(name);\n if (tools[toolName]) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Interactables] interactable names \"${name}\" and another registered name ` +\n `both sanitize to the tool name \"${toolName}\". Rename one of them.`,\n );\n }\n continue;\n }\n\n const first = instances[0]!;\n const partialSchema = partialSchemaCache.get(first.id);\n const idKeyedFields =\n partialSchema && isRecord(partialSchema.properties)\n ? idKeyedArrayFieldNames(partialSchema.properties)\n : new Set<string>();\n\n // `id` resolves to a definition of this name; an id-less call is accepted\n // only while exactly one instance exists.\n const resolveTarget = (\n id: unknown,\n ): Unstable_InteractableDefinition | undefined => {\n if (typeof id === \"string\") {\n const def = definitions[id];\n return def?.name === name ? def : undefined;\n }\n return instances.length === 1 ? first : undefined;\n };\n\n tools[toolName] = {\n type: \"frontend\",\n description:\n `Update the state of interactable component \"${name}\". ${first.description} ` +\n `Pass the id of the instance to update — instance ids and current state ` +\n `appear in the conversation as state snapshots. Only include the fields ` +\n `you want to change; omitted fields keep their current values.`,\n parameters: withRequiredId(partialSchema),\n streamCall: async (reader, { toolCallId }) => {\n try {\n for await (const partialArgs of reader.args.streamValues()) {\n if (!partialArgs || typeof partialArgs !== \"object\") continue;\n const args = partialArgs as Record<string, unknown>;\n const keys = Object.keys(args);\n const idIndex = keys.indexOf(\"id\");\n if (idIndex === keys.length - 1) continue;\n\n const { id, ...partial } = args;\n if (Object.keys(partial).length === 0) continue;\n const target = resolveTarget(id);\n if (!target) continue;\n\n const baseline = streamBaselines.get(toolCallId);\n const arrayBaseline =\n baseline?.targetId === target.id ? baseline.state : target.state;\n if (!baseline || baseline.targetId !== target.id) {\n streamBaselines.set(toolCallId, {\n targetId: target.id,\n state: target.state,\n });\n }\n\n setDefState(target.id, (prev) =>\n shallowMergeInteractableState(prev, partial, { arrayBaseline }),\n );\n }\n } catch {\n // Non-fatal: execute handles the final state\n }\n },\n execute: async (args: unknown, { toolCallId }) => {\n const { id, ...partial } = (args ?? {}) as Record<string, unknown>;\n const target = resolveTarget(id);\n if (!target) {\n const validIds = instances.map((d) => d.id);\n return {\n success: false,\n error: `Unknown id ${JSON.stringify(id)} for interactable \"${name}\". Valid ids: ${validIds.join(\", \")}`,\n };\n }\n const baseline = streamBaselines.get(toolCallId);\n streamBaselines.delete(toolCallId);\n const addedItemIds = nullProtoRecord<string[]>();\n setDefState(target.id, (prev) =>\n shallowMergeInteractableState(prev, partial, {\n arrayBaseline:\n baseline?.targetId === target.id ? baseline.state : undefined,\n idFactory: (field) => {\n const itemId = generateId();\n (addedItemIds[field] ??= []).push(itemId);\n return itemId;\n },\n idKeyedFields,\n }),\n );\n // The resolved id lets an id-less call's UI (and the model) address\n // the instance that was actually updated.\n const result: {\n success: true;\n id: string;\n addedItemIds?: Record<string, string[]>;\n } = { success: true, id: target.id };\n if (Object.keys(addedItemIds).length > 0) {\n result.addedItemIds = { ...addedItemIds };\n }\n return result;\n },\n };\n }\n\n const interactables: Unstable_InteractableSnapshotEntry[] = entries.map(\n (def) => ({\n id: def.id,\n name: def.name,\n state: def.state,\n }),\n );\n return { tools, unstable_composerMetadata: { interactables } };\n}\n"],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { PartState } from "../store/scopes/part.js";
|
|
|
5
5
|
import { RuntimeAdapter } from "./RuntimeAdapter.js";
|
|
6
6
|
import { RuntimeAdapters } from "../runtimes/remote-thread-list/types.js";
|
|
7
7
|
import { JoinStrategy } from "../runtime/utils/external-message-conversion.js";
|
|
8
|
-
import { convertExternalMessages, useExternalMessageConverter } from "./runtimes/external-message-converter.js";
|
|
8
|
+
import { ExternalMessageConversionCache, convertExternalMessages, createExternalMessageConversionCache, useExternalMessageConverter } from "./runtimes/external-message-converter.js";
|
|
9
9
|
import { StreamingTimingAccessors, StreamingTimingOptions, StreamingTimingState } from "../runtime/utils/streaming-timing.js";
|
|
10
10
|
import { useStreamingTiming } from "./runtimes/useStreamingTiming.js";
|
|
11
11
|
import { DataMessagePartComponent, DataMessagePartProps, EmptyMessagePartComponent, EmptyMessagePartProps, FileMessagePartComponent, FileMessagePartProps, GenerativeUIComponentRegistry, GenerativeUIMessagePartComponent, GenerativeUIMessagePartProps, GenerativeUIRenderProps, ImageMessagePartComponent, ImageMessagePartProps, QuoteMessagePartComponent, QuoteMessagePartProps, ReasoningGroupComponent, ReasoningGroupProps, ReasoningMessagePartComponent, ReasoningMessagePartProps, SourceMessagePartComponent, SourceMessagePartProps, TextMessagePartComponent, TextMessagePartProps, ToolCallMessagePartComponent, ToolCallMessagePartProps, Unstable_AudioMessagePartComponent, Unstable_AudioMessagePartProps } from "./types/MessagePartComponentTypes.js";
|
|
@@ -119,4 +119,4 @@ import { useEditComposerCancel } from "./primitive-hooks/useEditComposerCancel.j
|
|
|
119
119
|
import { useEditComposerSend } from "./primitive-hooks/useEditComposerSend.js";
|
|
120
120
|
import { useMessageError } from "./primitive-hooks/useMessageError.js";
|
|
121
121
|
import { LocalRuntimeOptions, splitLocalRuntimeOptions, useLocalRuntime } from "./runtimes/useLocalRuntime.js";
|
|
122
|
-
export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AssistantTransportCommand, type AssistantTransportConnectionMetadata, type AssistantTransportOptions, type AssistantTransportProtocol, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, type CloudThreadListAdapterOptions, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type JoinStrategy, type LocalRuntimeOptions, type McpAppResourceOutput, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, type ProviderToolConfig, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type RuntimeExtras, type SendCommandsRequestBody, type SourceMessagePartComponent, type SourceMessagePartProps, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, ThreadPrimitiveUnstable_MessageById, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolCallText, type ToolDefinition, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type Unstable_InferInteractableState, type Unstable_InteractableConfig, type Unstable_InteractableDefinition, type Unstable_InteractablePersistedState, type Unstable_InteractablePersistenceAdapter, type Unstable_InteractablePersistenceStatus, type Unstable_InteractableRegistration, type Unstable_InteractableStateSchema, type Unstable_InteractableToolConfig, type Unstable_InteractableToolRenderProps, type Unstable_InteractableVersionInfo, type Unstable_InteractablesClientSchema, type Unstable_InteractablesConfig, type Unstable_InteractablesMethods, type Unstable_InteractablesState, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createCloudThreadListAdapter, createLocalStorageAdapter, createMessageConverter, createRuntimeExtras, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, externalTool, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, humanTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, unstable_Interactables, unstable_createRuntimeExtrasFromBrand, unstable_interactableTool, unstable_useInteractable, unstable_useInteractableState, unstable_useInteractableVersions, unstable_useThreadMessageIds, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAssistantTransportRuntime, useAssistantTransportSendCommand, useAssistantTransportState, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useCloudThreadListRuntime, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useStreamingTiming, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
|
|
122
|
+
export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AssistantTransportCommand, type AssistantTransportConnectionMetadata, type AssistantTransportOptions, type AssistantTransportProtocol, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, type CloudThreadListAdapterOptions, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type ExternalMessageConversionCache, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type JoinStrategy, type LocalRuntimeOptions, type McpAppResourceOutput, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, type ProviderToolConfig, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type RuntimeExtras, type SendCommandsRequestBody, type SourceMessagePartComponent, type SourceMessagePartProps, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, ThreadPrimitiveUnstable_MessageById, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolCallText, type ToolDefinition, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type Unstable_InferInteractableState, type Unstable_InteractableConfig, type Unstable_InteractableDefinition, type Unstable_InteractablePersistedState, type Unstable_InteractablePersistenceAdapter, type Unstable_InteractablePersistenceStatus, type Unstable_InteractableRegistration, type Unstable_InteractableStateSchema, type Unstable_InteractableToolConfig, type Unstable_InteractableToolRenderProps, type Unstable_InteractableVersionInfo, type Unstable_InteractablesClientSchema, type Unstable_InteractablesConfig, type Unstable_InteractablesMethods, type Unstable_InteractablesState, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createCloudThreadListAdapter, createExternalMessageConversionCache, createLocalStorageAdapter, createMessageConverter, createRuntimeExtras, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, externalTool, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, humanTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, unstable_Interactables, unstable_createRuntimeExtrasFromBrand, unstable_interactableTool, unstable_useInteractable, unstable_useInteractableState, unstable_useInteractableVersions, unstable_useThreadMessageIds, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAssistantTransportRuntime, useAssistantTransportSendCommand, useAssistantTransportState, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useCloudThreadListRuntime, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useStreamingTiming, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
|