@assistant-ui/core 0.2.12 → 0.2.15
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.js.map +1 -1
- package/dist/adapters/directive-formatter.js.map +1 -1
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/thread-history.d.ts +3 -1
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.js +2 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/frame/types.js.map +1 -1
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/tool.js.map +1 -1
- package/dist/model-context/types.d.ts +1 -0
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/AssistantProvider.js +7 -1
- package/dist/react/AssistantProvider.js.map +1 -1
- package/dist/react/AssistantRuntimeProvider.js +18 -6
- package/dist/react/AssistantRuntimeProvider.js.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +1 -1
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.js +35 -6
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +29 -7
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.js.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -8
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +56 -36
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +71 -70
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -13
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +121 -57
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.js.map +1 -1
- package/dist/react/model-context/define-toolkit.js.map +1 -1
- package/dist/react/model-context/external-tool.js.map +1 -1
- package/dist/react/model-context/human-tool.js.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.js.map +1 -1
- package/dist/react/model-context/provider-tool.js.map +1 -1
- package/dist/react/model-context/stub-tool.js.map +1 -1
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.js +27 -8
- package/dist/react/model-context/useAssistantDataUI.js.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.js +33 -10
- package/dist/react/model-context/useAssistantInstructions.js.map +1 -1
- package/dist/react/model-context/useAssistantInteractable.js.map +1 -1
- package/dist/react/model-context/useAssistantTool.js +59 -17
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.js +30 -9
- package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.js +35 -8
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/model-context/useInteractableState.js +65 -19
- package/dist/react/model-context/useInteractableState.js.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +42 -14
- package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js +59 -22
- package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js +25 -7
- package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.js +49 -13
- package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js +25 -7
- package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.js +28 -9
- package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +25 -7
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js +27 -11
- package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js +27 -11
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.js +24 -8
- package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js +25 -7
- package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.js +25 -7
- package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js +25 -7
- package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.js +18 -4
- package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.js +25 -7
- package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.js +41 -9
- package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.js +4 -1
- package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.js +25 -7
- package/dist/react/primitive-hooks/useMessageReload.js.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +31 -13
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.js +4 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.js +4 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +25 -7
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.js +18 -4
- package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.js +4 -1
- package/dist/react/primitive-hooks/useThreadMessages.js.map +1 -1
- package/dist/react/primitive-hooks/useVoice.js +63 -13
- package/dist/react/primitive-hooks/useVoice.js.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +42 -7
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +67 -16
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.js +30 -9
- package/dist/react/primitives/composer/ComposerIf.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +55 -13
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +68 -16
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +6 -6
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +28 -1
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +665 -163
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/message/MessageQuote.js +18 -2
- package/dist/react/primitives/message/MessageQuote.js.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.js +6 -2
- package/dist/react/primitives/messagePart/MessagePartInProgress.js.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +46 -14
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +67 -10
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +50 -10
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +55 -14
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js +15 -2
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.js +57 -12
- package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +33 -11
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +29 -6
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.js +49 -19
- package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
- package/dist/react/providers/PartByIndexProvider.js +29 -6
- package/dist/react/providers/PartByIndexProvider.js.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.js +29 -6
- package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js +83 -28
- package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.js +29 -6
- package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +75 -26
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.js +30 -6
- package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.js +28 -5
- package/dist/react/providers/ThreadListItemRuntimeProvider.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -0
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +19 -4
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +2 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js +27 -10
- package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +16 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +19 -17
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/createMessageConverter.js.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +67 -30
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +44 -10
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.js +17 -12
- package/dist/react/runtimes/useExternalStoreSharedOptions.js.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +34 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +5 -6
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.js.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -1
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +17 -5
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/runtime/api/assistant-runtime.js.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/bindings.d.ts +1 -0
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -9
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -6
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +2 -0
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +5 -0
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +1 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +3 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +4 -0
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -0
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +30 -0
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -0
- package/dist/runtime/branch/external-thread-branch-adapter.js +0 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +1 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +4 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-store-message.js.map +1 -1
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +15 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.js +35 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -0
- package/dist/runtime/utils/thread-message-like.d.ts +5 -1
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/assistant-transport/utils.js.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +1 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +13 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.js.map +1 -1
- package/dist/runtimes/local/local-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +9 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +65 -5
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.js +4 -2
- package/dist/runtimes/local/should-continue.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +2 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +4 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +4 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +2 -7
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/chain-of-thought-client.js +39 -20
- package/dist/store/clients/chain-of-thought-client.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +67 -16
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +2 -4
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +96 -54
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -3
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.js +2 -15
- package/dist/store/clients/runtime-adapter.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts +1 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +63 -23
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +1 -1
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +184 -73
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/internal.d.ts +2 -2
- package/dist/store/internal.js +2 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +31 -7
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +2 -10
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +195 -72
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +7 -0
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -0
- package/dist/store/runtime-clients/liveRef.js +8 -0
- package/dist/store/runtime-clients/liveRef.js.map +1 -0
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +49 -9
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +2 -7
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +220 -54
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +71 -26
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +2 -5
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +141 -36
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +196 -72
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.js +2 -9
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
- package/dist/store/scopes/message.d.ts +1 -0
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +5 -6
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.js.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +1 -0
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +1 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
- package/dist/types/message.d.ts +38 -5
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/json/is-json-equal.js.map +1 -1
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/package.json +6 -6
- package/src/adapters/thread-history.ts +2 -0
- package/src/index.ts +5 -0
- package/src/internal.ts +1 -0
- package/src/model-context/types.ts +1 -0
- package/src/react/AssistantProvider.tsx +10 -1
- package/src/react/RuntimeAdapter.ts +25 -8
- package/src/react/client/DataRenderers.ts +42 -45
- package/src/react/client/Interactables.ts +261 -261
- package/src/react/client/Tools.ts +9 -9
- package/src/react/primitives/message/MessageGroupedParts.tsx +19 -7
- package/src/react/primitives/message/MessageParts.tsx +64 -13
- package/src/react/providers/TextMessagePartProvider.tsx +5 -3
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +1 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +11 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +6 -0
- package/src/react/runtimes/external-message-converter.ts +3 -1
- package/src/react/types/MessagePartComponentTypes.ts +5 -5
- package/src/react/utils/groupParts.ts +27 -0
- package/src/runtime/api/bindings.ts +1 -0
- package/src/runtime/api/message-part-runtime.ts +14 -11
- package/src/runtime/api/message-runtime.ts +7 -0
- package/src/runtime/api/thread-list-runtime.ts +1 -0
- package/src/runtime/api/thread-runtime.ts +7 -0
- package/src/runtime/base/base-thread-runtime-core.ts +1 -0
- package/src/runtime/branch/external-thread-branch-adapter.ts +26 -0
- package/src/runtime/interfaces/thread-list-runtime-core.ts +1 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +4 -0
- package/src/runtime/utils/resolveToolApprovalResponse.test.ts +91 -0
- package/src/runtime/utils/resolveToolApprovalResponse.ts +55 -0
- package/src/runtime/utils/thread-message-like.ts +10 -1
- package/src/runtimes/external-store/external-store-adapter.ts +1 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +24 -0
- package/src/runtimes/local/local-runtime-options.ts +1 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +370 -0
- package/src/runtimes/local/local-thread-runtime-core.ts +113 -7
- package/src/runtimes/local/should-continue.ts +24 -13
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +5 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +5 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +2 -0
- package/src/runtimes/remote-thread-list/types.ts +1 -0
- package/src/store/clients/chain-of-thought-client.ts +5 -3
- package/src/store/clients/model-context-client.test.ts +5 -4
- package/src/store/clients/model-context-client.ts +21 -21
- package/src/store/clients/no-op-composer-client.ts +5 -3
- package/src/store/clients/runtime-adapter.ts +0 -24
- package/src/store/clients/suggestions.ts +12 -23
- package/src/store/clients/thread-message-client.ts +42 -40
- package/src/store/internal.ts +1 -4
- package/src/store/runtime-clients/attachment-runtime-client.ts +14 -14
- package/src/store/runtime-clients/composer-runtime-client.ts +48 -45
- package/src/store/runtime-clients/liveRef.ts +5 -0
- package/src/store/runtime-clients/message-part-runtime-client.ts +5 -3
- package/src/store/runtime-clients/message-runtime-client.ts +42 -40
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +5 -3
- package/src/store/runtime-clients/thread-list-runtime-client.ts +13 -11
- package/src/store/runtime-clients/thread-runtime-client.ts +20 -16
- package/src/store/runtime-clients/useSubscribable.ts +2 -10
- package/src/store/scopes/message.ts +1 -0
- package/src/store/scopes/part.ts +5 -2
- package/src/store/scopes/thread-list-item.ts +1 -0
- package/src/store/scopes/thread.ts +1 -0
- package/src/tests/external-store-thread-runtime-core.test.ts +57 -0
- package/src/tests/groupMessageParts.test.ts +84 -0
- package/src/tests/groupParts.test.ts +55 -0
- package/src/types/message.ts +45 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auiV0.js","names":["unhandledType"],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"sourcesContent":["import type {\n MessageStatus,\n SourceProviderMetadata,\n ThreadMessage,\n} from \"../../../types/message\";\nimport { fromThreadMessageLike } from \"../../../runtime/utils/thread-message-like\";\nimport type { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../../utils/json/is-json\";\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\n\ntype AuiV0MessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"image\";\n readonly image: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport function auiV0Encode(message: ThreadMessage): AuiV0Message {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n\n const status: MessageStatus | undefined =\n message.status?.type === \"running\"\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : message.status;\n\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"reasoning\":\n return { type: \"reasoning\", text: part.text };\n\n case \"source\":\n if (part.sourceType === \"url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.id,\n url: part.url,\n ...(part.title != null ? { title: part.title } : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n }\n\n return {\n type: \"source\",\n sourceType: \"document\",\n id: part.id,\n title: part.title,\n mediaType: part.mediaType,\n ...(part.filename != null\n ? { filename: part.filename }\n : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n `tool-call result is not JSON! ${JSON.stringify(part)}`,\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? { args: part.args }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : undefined),\n ...(part.isError ? { isError: true } : undefined),\n };\n }\n\n case \"image\":\n return { type: \"image\", image: part.image };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename ? { filename: part.filename } : undefined),\n };\n\n default: {\n const unhandledType: \"audio\" | \"data\" | \"generative-ui\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(status ? { status } : undefined),\n };\n}\n\nexport function auiV0Decode(\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n { type: \"complete\", reason: \"unknown\" },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n}\n"],"mappings":";;;AAqFA,
|
|
1
|
+
{"version":3,"file":"auiV0.js","names":["MessageStatus","SourceProviderMetadata","ThreadMessage","fromThreadMessageLike","CloudMessage","isJSONValue","ReadonlyJSONObject","ReadonlyJSONValue","ExportedMessageRepositoryItem","AuiV0MessagePart","type","text","sourceType","id","url","title","providerMetadata","mediaType","filename","toolCallId","toolName","args","result","isError","argsText","image","data","mimeType","AuiV0Message","role","status","content","metadata","unstable_state","unstable_annotations","unstable_data","steps","usage","inputTokens","outputTokens","custom","auiV0Encode","message","reason","map","part","undefined","console","warn","JSON","stringify","unhandledType","Error","auiV0Decode","cloudMessage","format","payload","createdAt","created_at","parentId","parent_id"],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"sourcesContent":["import type {\n MessageStatus,\n SourceProviderMetadata,\n ThreadMessage,\n} from \"../../../types/message\";\nimport { fromThreadMessageLike } from \"../../../runtime/utils/thread-message-like\";\nimport type { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../../utils/json/is-json\";\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\n\ntype AuiV0MessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"image\";\n readonly image: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport function auiV0Encode(message: ThreadMessage): AuiV0Message {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n\n const status: MessageStatus | undefined =\n message.status?.type === \"running\"\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : message.status;\n\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"reasoning\":\n return { type: \"reasoning\", text: part.text };\n\n case \"source\":\n if (part.sourceType === \"url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.id,\n url: part.url,\n ...(part.title != null ? { title: part.title } : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n }\n\n return {\n type: \"source\",\n sourceType: \"document\",\n id: part.id,\n title: part.title,\n mediaType: part.mediaType,\n ...(part.filename != null\n ? { filename: part.filename }\n : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n `tool-call result is not JSON! ${JSON.stringify(part)}`,\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? { args: part.args }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : undefined),\n ...(part.isError ? { isError: true } : undefined),\n };\n }\n\n case \"image\":\n return { type: \"image\", image: part.image };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename ? { filename: part.filename } : undefined),\n };\n\n default: {\n const unhandledType: \"audio\" | \"data\" | \"generative-ui\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(status ? { status } : undefined),\n };\n}\n\nexport function auiV0Decode(\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n { type: \"complete\", reason: \"unknown\" },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n}\n"],"mappings":";;;AAqFA,SAAgByC,YAAYC,SAAsC;CAIhE,MAAMZ,SACJY,QAAQZ,QAAQpB,SAAS,YACrB;EAAEA,MAAM;EAAciC,QAAQ;CAAY,IAC1CD,QAAQZ;CAEd,OAAO;EACLD,MAAMa,QAAQb;EACdE,SAASW,QAAQX,QAAQa,KAAKC,SAAS;GACrC,MAAMnC,OAAOmC,KAAKnC;GAClB,QAAQA,MAAR;IACE,KAAK,QACH,OAAO;KAAEA,MAAM;KAAQC,MAAMkC,KAAKlC;IAAK;IAEzC,KAAK,aACH,OAAO;KAAED,MAAM;KAAaC,MAAMkC,KAAKlC;IAAK;IAE9C,KAAK;KACH,IAAIkC,KAAKjC,eAAe,OACtB,OAAO;MACLF,MAAM;MACNE,YAAY;MACZC,IAAIgC,KAAKhC;MACTC,KAAK+B,KAAK/B;MACV,GAAI+B,KAAK9B,SAAS,OAAO,EAAEA,OAAO8B,KAAK9B,MAAM,IAAI+B,KAAAA;MACjD,GAAID,KAAK7B,oBAAoB,OACzB,EAAEA,kBAAkB6B,KAAK7B,iBAAiB,IAC1C8B,KAAAA;KACN;KAGF,OAAO;MACLpC,MAAM;MACNE,YAAY;MACZC,IAAIgC,KAAKhC;MACTE,OAAO8B,KAAK9B;MACZE,WAAW4B,KAAK5B;MAChB,GAAI4B,KAAK3B,YAAY,OACjB,EAAEA,UAAU2B,KAAK3B,SAAS,IAC1B4B,KAAAA;MACJ,GAAID,KAAK7B,oBAAoB,OACzB,EAAEA,kBAAkB6B,KAAK7B,iBAAiB,IAC1C8B,KAAAA;KACN;IAEF,KAAK;KACH,IAAI,CAACzC,YAAYwC,KAAKvB,MAAM,GAC1ByB,QAAQC,KACN,iCAAiCC,KAAKC,UAAUL,IAAI,GACtD;KAEF,OAAO;MACLnC,MAAM;MACNS,YAAY0B,KAAK1B;MACjBC,UAAUyB,KAAKzB;MACf,GAAI6B,KAAKC,UAAUL,KAAKxB,IAAI,MAAMwB,KAAKrB,WACnC,EAAEH,MAAMwB,KAAKxB,KAAK,IAClB,EAAEG,UAAUqB,KAAKrB,SAAS;MAC9B,GAAIqB,KAAKvB,SACL,EAAEA,QAAQuB,KAAKvB,OAA4B,IAC3CwB,KAAAA;MACJ,GAAID,KAAKtB,UAAU,EAAEA,SAAS,KAAK,IAAIuB,KAAAA;KACzC;IAGF,KAAK,SACH,OAAO;KAAEpC,MAAM;KAASe,OAAOoB,KAAKpB;IAAM;IAE5C,KAAK,QACH,OAAO;KACLf,MAAM;KACNgB,MAAMmB,KAAKnB;KACXC,UAAUkB,KAAKlB;KACf,GAAIkB,KAAK3B,WAAW,EAAEA,UAAU2B,KAAK3B,SAAS,IAAI4B,KAAAA;IACpD;IAEF,SAEE,MAAM,IAAIM,MACR,8CAA8CD,MAChD;GAEJ;EACF,CAAC;EACDnB,UAAUU,QAAQV;EAClB,GAAIF,SAAS,EAAEA,OAAO,IAAIgB,KAAAA;CAC5B;AACF;AAEA,SAAgBO,YACdC,cAC+B;CAC/B,MAAME,UAAUF,aAAavB;CAC7B,MAAMW,UAAUvC,sBACd;EACEU,IAAIyC,aAAazC;EACjB4C,WAAWH,aAAaI;EACxB,GAAGF;CACL,GACAF,aAAazC,IACb;EAAEH,MAAM;EAAYiC,QAAQ;CAAU,CACxC;CAEA,OAAO;EACLgB,UAAUL,aAAaM;EACvBlB;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"mappings":";;;;KAkBK,UAAA;EACH,UAAU;AAAA;AAAA,KAGP,6BAAA;EACH,KAAA,GAAQ,cAAA;EAER,MAAA,UAAgB,OAAA,CAAQ,UAAA;EACxB,MAAA,KAAW,QAAA,aAAqB,OAAA;AAAA;AAAA,cAarB,yBAAA,GACX,OAAA,EAAS,6BAAA,KACR,
|
|
1
|
+
{"version":3,"file":"useCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"mappings":";;;;KAkBK,UAAA;EACH,UAAU;AAAA;AAAA,KAGP,6BAAA;EACH,KAAA,GAAQ,cAAA;EAER,MAAA,UAAgB,OAAA,CAAQ,UAAA;EACxB,MAAA,KAAW,QAAA,aAAqB,OAAA;AAAA;AAAA,cAarB,yBAAA,GACX,OAAA,EAAS,6BAAA,KACR,uBA+HF"}
|
|
@@ -51,13 +51,14 @@ const useCloudThreadListAdapter = (adapter) => {
|
|
|
51
51
|
status: t.is_archived ? "archived" : "regular",
|
|
52
52
|
remoteId: t.id,
|
|
53
53
|
title: t.title,
|
|
54
|
+
lastMessageAt: t.last_message_at ? new Date(t.last_message_at) : void 0,
|
|
54
55
|
externalId: t.external_id ?? void 0,
|
|
55
56
|
custom: toCustom(t.metadata)
|
|
56
57
|
})) };
|
|
57
58
|
},
|
|
58
59
|
initialize: async () => {
|
|
59
|
-
const
|
|
60
|
-
const external_id =
|
|
60
|
+
const t_0 = await (adapter.create?.() ?? Promise.resolve());
|
|
61
|
+
const external_id = t_0 ? t_0.externalId : void 0;
|
|
61
62
|
const { thread_id: remoteId } = await cloud.threads.create({
|
|
62
63
|
last_message_at: /* @__PURE__ */ new Date(),
|
|
63
64
|
external_id
|
|
@@ -67,39 +68,40 @@ const useCloudThreadListAdapter = (adapter) => {
|
|
|
67
68
|
remoteId
|
|
68
69
|
};
|
|
69
70
|
},
|
|
70
|
-
rename: async (
|
|
71
|
-
return cloud.threads.update(
|
|
71
|
+
rename: async (threadId_0, newTitle) => {
|
|
72
|
+
return cloud.threads.update(threadId_0, { title: newTitle });
|
|
72
73
|
},
|
|
73
|
-
updateCustom: async (
|
|
74
|
-
return cloud.threads.update(
|
|
74
|
+
updateCustom: async (threadId_1, custom) => {
|
|
75
|
+
return cloud.threads.update(threadId_1, { metadata: custom ?? null });
|
|
75
76
|
},
|
|
76
|
-
archive: async (
|
|
77
|
-
return cloud.threads.update(
|
|
77
|
+
archive: async (threadId_2) => {
|
|
78
|
+
return cloud.threads.update(threadId_2, { is_archived: true });
|
|
78
79
|
},
|
|
79
|
-
unarchive: async (
|
|
80
|
-
return cloud.threads.update(
|
|
80
|
+
unarchive: async (threadId_3) => {
|
|
81
|
+
return cloud.threads.update(threadId_3, { is_archived: false });
|
|
81
82
|
},
|
|
82
|
-
delete: async (
|
|
83
|
-
await adapter.delete?.(
|
|
84
|
-
return cloud.threads.delete(
|
|
83
|
+
delete: async (threadId_4) => {
|
|
84
|
+
await adapter.delete?.(threadId_4);
|
|
85
|
+
return cloud.threads.delete(threadId_4);
|
|
85
86
|
},
|
|
86
|
-
generateTitle: async (
|
|
87
|
+
generateTitle: async (threadId_5, messages) => {
|
|
87
88
|
const filteredMessages = messages.map((msg) => ({
|
|
88
89
|
...msg,
|
|
89
90
|
content: msg.content.filter((part) => part.type === "text" || part.type === "tool-call")
|
|
90
91
|
}));
|
|
91
92
|
return cloud.runs.stream({
|
|
92
|
-
thread_id:
|
|
93
|
+
thread_id: threadId_5,
|
|
93
94
|
assistant_id: "system/thread_title",
|
|
94
95
|
messages: filteredMessages
|
|
95
96
|
});
|
|
96
97
|
},
|
|
97
|
-
fetch: async (
|
|
98
|
-
const thread = await cloud.threads.get(
|
|
98
|
+
fetch: async (threadId_6) => {
|
|
99
|
+
const thread = await cloud.threads.get(threadId_6);
|
|
99
100
|
return {
|
|
100
101
|
status: thread.is_archived ? "archived" : "regular",
|
|
101
102
|
remoteId: thread.id,
|
|
102
103
|
title: thread.title,
|
|
104
|
+
lastMessageAt: thread.last_message_at ? new Date(thread.last_message_at) : void 0,
|
|
103
105
|
externalId: thread.external_id ?? void 0,
|
|
104
106
|
custom: toCustom(thread.metadata)
|
|
105
107
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloudThreadListAdapter.js","names":[],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport {\n type FC,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport type { RemoteThreadListAdapter } from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport { RuntimeAdapterProvider } from \"../RuntimeAdapterProvider\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\ntype CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nconst autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nexport const useCloudThreadListAdapter = (\n adapter: CloudThreadListAdapterOptions,\n): RemoteThreadListAdapter => {\n const adapterRef = useRef(adapter);\n useEffect(() => {\n adapterRef.current = adapter;\n }, [adapter]);\n\n const unstable_Provider = useCallback<FC<PropsWithChildren>>(\n function Provider({ children }) {\n const history = useAssistantCloudThreadHistoryAdapter({\n get current() {\n return adapterRef.current.cloud ?? autoCloud!;\n },\n });\n const cloudInstance = adapterRef.current.cloud ?? autoCloud!;\n const attachments = useMemo(\n () => new CloudFileAttachmentAdapter(cloudInstance),\n [cloudInstance],\n );\n\n const adapters = useMemo(\n () => ({\n history,\n attachments,\n }),\n [history, attachments],\n );\n\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n },\n [],\n );\n\n const cloud = adapter.cloud ?? autoCloud;\n if (!cloud) {\n const ref = adapterRef;\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await ref.current.create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n return {\n list: async () => {\n const { threads } = await cloud.threads.list();\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? \"archived\" : \"regular\",\n remoteId: t.id,\n title: t.title,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n };\n },\n\n initialize: async () => {\n const createTask = adapter.create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await adapter.delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n // Filter messages to only include content types the title generator understands\n // (reasoning, source, etc. are not needed for title generation)\n // TODO serialize these to a more efficient format\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived ? \"archived\" : \"regular\",\n remoteId: thread.id,\n title: thread.title,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_Provider,\n };\n};\n"],"mappings":";;;;;;;;;AA6BA,
|
|
1
|
+
{"version":3,"file":"useCloudThreadListAdapter.js","names":["process","env","Record","FC","PropsWithChildren","useCallback","useEffect","useMemo","useRef","AssistantCloud","RemoteThreadListAdapter","InMemoryThreadListAdapter","useAssistantCloudThreadHistoryAdapter","RuntimeAdapterProvider","CloudFileAttachmentAdapter","isRecord","ThreadData","externalId","CloudThreadListAdapterOptions","cloud","create","Promise","delete","threadId","toCustom","value","undefined","baseUrl","NEXT_PUBLIC_ASSISTANT_BASE_URL","autoCloud","anonymous","useCloudThreadListAdapter","adapter","adapterRef","current","unstable_Provider","Provider","children","history","cloudInstance","attachments","adapters","ref","inMemory","initialize","result","remoteId","list","threads","map","t","status","is_archived","id","title","lastMessageAt","last_message_at","Date","external_id","custom","metadata","createTask","resolve","thread_id","rename","newTitle","update","updateCustom","archive","unarchive","generateTitle","messages","filteredMessages","msg","content","filter","part","type","runs","stream","assistant_id","fetch","thread","get"],"sources":["../../../../src/react/runtimes/cloud/useCloudThreadListAdapter.tsx"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport {\n type FC,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport type { RemoteThreadListAdapter } from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport { RuntimeAdapterProvider } from \"../RuntimeAdapterProvider\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\ntype CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nconst autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nexport const useCloudThreadListAdapter = (\n adapter: CloudThreadListAdapterOptions,\n): RemoteThreadListAdapter => {\n const adapterRef = useRef(adapter);\n useEffect(() => {\n adapterRef.current = adapter;\n }, [adapter]);\n\n const unstable_Provider = useCallback<FC<PropsWithChildren>>(\n function Provider({ children }) {\n const history = useAssistantCloudThreadHistoryAdapter({\n get current() {\n return adapterRef.current.cloud ?? autoCloud!;\n },\n });\n const cloudInstance = adapterRef.current.cloud ?? autoCloud!;\n const attachments = useMemo(\n () => new CloudFileAttachmentAdapter(cloudInstance),\n [cloudInstance],\n );\n\n const adapters = useMemo(\n () => ({\n history,\n attachments,\n }),\n [history, attachments],\n );\n\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n },\n [],\n );\n\n const cloud = adapter.cloud ?? autoCloud;\n if (!cloud) {\n const ref = adapterRef;\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await ref.current.create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n return {\n list: async () => {\n const { threads } = await cloud.threads.list();\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? \"archived\" : \"regular\",\n remoteId: t.id,\n title: t.title,\n lastMessageAt: t.last_message_at\n ? new Date(t.last_message_at)\n : undefined,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n };\n },\n\n initialize: async () => {\n const createTask = adapter.create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await adapter.delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n // Filter messages to only include content types the title generator understands\n // (reasoning, source, etc. are not needed for title generation)\n // TODO serialize these to a more efficient format\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived ? \"archived\" : \"regular\",\n remoteId: thread.id,\n title: thread.title,\n lastMessageAt: thread.last_message_at\n ? new Date(thread.last_message_at)\n : undefined,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_Provider,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMessageConverter.js","names":[],"sources":["../../../src/react/runtimes/createMessageConverter.ts"],"sourcesContent":["\"use client\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadState } from \"../../runtime/api/thread-runtime\";\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n type JoinStrategy,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"../../runtime/utils/external-store-message\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n metadata,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n });\n },\n toThreadMessages: (\n messages: T[],\n isRunning = false,\n metadata: useExternalMessageConverter.Metadata = {},\n ) => {\n return convertExternalMessages(messages, callback, isRunning, metadata);\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const aui = useAui();\n const partMessages = useAuiState((s) => {\n if (aui.part.source) return getExternalStoreMessages(s.part);\n return undefined;\n });\n\n const messageMessages = useAuiState<T[]>((s) =>\n getExternalStoreMessages(s.message),\n );\n\n const messages = partMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"createMessageConverter.js","names":["ThreadMessage","ThreadState","useAui","useAuiState","useExternalMessageConverter","convertExternalMessages","JoinStrategy","getExternalStoreMessages","createMessageConverter","callback","Callback","T","result","useThreadMessages","messages","isRunning","joinStrategy","metadata","Metadata","toThreadMessages","toOriginalMessages","input","length","Error","toOriginalMessage","useOriginalMessage","messageMessages","useOriginalMessages","first","aui","partMessages","s","part","source","undefined","message"],"sources":["../../../src/react/runtimes/createMessageConverter.ts"],"sourcesContent":["\"use client\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadState } from \"../../runtime/api/thread-runtime\";\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n type JoinStrategy,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"../../runtime/utils/external-store-message\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n metadata,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n });\n },\n toThreadMessages: (\n messages: T[],\n isRunning = false,\n metadata: useExternalMessageConverter.Metadata = {},\n ) => {\n return convertExternalMessages(messages, callback, isRunning, metadata);\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const aui = useAui();\n const partMessages = useAuiState((s) => {\n if (aui.part.source) return getExternalStoreMessages(s.part);\n return undefined;\n });\n\n const messageMessages = useAuiState<T[]>((s) =>\n getExternalStoreMessages(s.message),\n );\n\n const messages = partMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;;;AAWA,MAAaQ,0BACXC,aACG;CACH,MAAMG,SAAS;EACbC,oBAAoB,EAClBC,UACAC,WACAC,cACAC,eAMI;GACJ,OAAOb,4BAA+B;IACpCK;IACAK;IACAC;IACAC;IACAC;GACF,CAAC;EACH;EACAE,mBACEL,UACAC,YAAY,OACZE,WAAiD,CAAC,MAC/C;GACH,OAAOZ,wBAAwBS,UAAUL,UAAUM,WAAWE,QAAQ;EACxE;EACAG,qBACEC,UACG;GACH,MAAMP,WAAWP,yBAAyBc,KAAK;GAC/C,IAAIP,SAASQ,WAAW,GAAG,MAAM,IAAIC,MAAM,4BAA4B;GACvE,OAAOT;EACT;EACAU,oBACEH,UACG;GAEH,OADiBT,OAAOQ,mBAAmBC,KACpCP,CAAQ,CAAC;EAClB;EACAW,0BAA0B;GAGxB,OAFwBb,OAAOe,oBACjBD,CAAe,CAAC;EAEhC;EACAC,2BAA2B;GACzB,MAAME,MAAM3B,OAAO;GACnB,MAAM4B,eAAe3B,aAAa4B,MAAM;IACtC,IAAIF,IAAIG,KAAKC,QAAQ,OAAO1B,yBAAyBwB,EAAEC,IAAI;GAE7D,CAAC;GAED,MAAMN,kBAAkBvB,aAAkB4B,MACxCxB,yBAAyBwB,EAAEI,OAAO,CACpC;GAEA,MAAMrB,WAAWgB,gBAAgBJ;GACjC,IAAIZ,SAASQ,WAAW,GAAG,MAAM,IAAIC,MAAM,4BAA4B;GACvE,OAAOT;EACT;CACF;CAEA,OAAOF;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":";;;;;;KAwBY,YAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":";;;;;;KAwBY,YAAA;AAAA,kBAoBK,2BAAA;EAAA,KACH,OAAA,IACP,iBAAA;IAAA,SACU,aAAA;MAAA,SACE,YAAA,GAAe,YAAA;IAAA;EAAA;IAI1B,IAAA;IACA,UAAA;IACA,QAAA;IACA,MAAA;IACA,QAAA;IACA,OAAA;IACA,QAAA,YAAoB,aAAA;EAAA;EAAA,KAGd,QAAA;IAAA,SACD,YAAA,GAAe,MAAA,SAAe,mBAAA;IAAA,SAC9B,KAAA,GAAQ,iBAAA;IAAA,SACR,aAAA,GAAgB,MAAA,SAAe,aAAA;EAAA;EAAA,KAG9B,QAAA,OACV,OAAA,EAAS,CAAA,EACT,QAAA,EAAU,QAAA,KACP,OAAA,GAAU,OAAA;AAAA;AAAA,cAgRJ,uBAAA,aAAqC,OAAA,EAChD,QAAA,EAAU,CAAA,IACV,QAAA,EAAU,2BAAA,CAA4B,QAAA,CAAS,CAAA,GAC/C,SAAA,WACA,QAAA,EAAU,2BAAA,CAA4B,QAAA,KAAQ,aAAA;AAAA,cA+CnC,2BAAA,aAAyC,OAAA;EAAS,QAAA;EAAA,QAAA;EAAA,SAAA;EAAA,YAAA;EAAA;AAAA;EAO7D,QAAA,EAAU,2BAAA,CAA4B,QAAA,CAAS,CAAA;EAC/C,QAAA,EAAU,CAAA;EACV,SAAA;EACA,YAAA,GAAe,YAAA;EACf,QAAA,GAAW,2BAAA,CAA4B,QAAA;AAAA,MACxC,aAAA"}
|
|
@@ -4,12 +4,12 @@ import { bindExternalStoreMessage, getExternalStoreMessages, symbolInnerMessage
|
|
|
4
4
|
import { getAutoStatus, isAutoStatus } from "../../runtime/utils/auto-status.js";
|
|
5
5
|
import { fromThreadMessageLike } from "../../runtime/utils/thread-message-like.js";
|
|
6
6
|
import { ThreadMessageConverter } from "../../runtimes/external-store/thread-message-converter.js";
|
|
7
|
-
import {
|
|
7
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
8
8
|
//#region src/react/runtimes/external-message-converter.ts
|
|
9
9
|
const isPendingToolCall = (c) => c.type === "tool-call" && c.result === void 0;
|
|
10
10
|
const isInterruptedToolCall = (c) => {
|
|
11
11
|
if (c.type !== "tool-call" || c.result !== void 0) return false;
|
|
12
|
-
return c.interrupt != null || c.approval != null && c.approval.approved === void 0;
|
|
12
|
+
return c.interrupt != null || c.approval != null && c.approval.approved === void 0 && c.approval.resolution === void 0;
|
|
13
13
|
};
|
|
14
14
|
const mergeInnerMessages = (existing, incoming) => ({ [symbolInnerMessage]: [...existing[symbolInnerMessage] ?? [], ...incoming[symbolInnerMessage] ?? []] });
|
|
15
15
|
const joinExternalMessages = (messages) => {
|
|
@@ -175,15 +175,46 @@ const convertExternalMessages = (messages, callback, isRunning, metadata) => {
|
|
|
175
175
|
}
|
|
176
176
|
return result;
|
|
177
177
|
};
|
|
178
|
-
const useExternalMessageConverter = (
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
178
|
+
const useExternalMessageConverter = (t0) => {
|
|
179
|
+
const $ = c(15);
|
|
180
|
+
const { callback, messages, isRunning, joinStrategy, metadata } = t0;
|
|
181
|
+
let t1;
|
|
182
|
+
if ($[0] !== metadata) {
|
|
183
|
+
t1 = metadata ?? {};
|
|
184
|
+
$[0] = metadata;
|
|
185
|
+
$[1] = t1;
|
|
186
|
+
} else t1 = $[1];
|
|
187
|
+
let t2;
|
|
188
|
+
let t3;
|
|
189
|
+
let t4;
|
|
190
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
191
|
+
t2 = /* @__PURE__ */ new WeakMap();
|
|
192
|
+
t3 = /* @__PURE__ */ new WeakMap();
|
|
193
|
+
t4 = new ThreadMessageConverter();
|
|
194
|
+
$[2] = t2;
|
|
195
|
+
$[3] = t3;
|
|
196
|
+
$[4] = t4;
|
|
197
|
+
} else {
|
|
198
|
+
t2 = $[2];
|
|
199
|
+
t3 = $[3];
|
|
200
|
+
t4 = $[4];
|
|
201
|
+
}
|
|
202
|
+
let t5;
|
|
203
|
+
if ($[5] !== callback || $[6] !== t1) {
|
|
204
|
+
t5 = {
|
|
205
|
+
metadata: t1,
|
|
206
|
+
callback,
|
|
207
|
+
callbackCache: t2,
|
|
208
|
+
chunkCache: t3,
|
|
209
|
+
converterCache: t4
|
|
210
|
+
};
|
|
211
|
+
$[5] = callback;
|
|
212
|
+
$[6] = t1;
|
|
213
|
+
$[7] = t5;
|
|
214
|
+
} else t5 = $[7];
|
|
215
|
+
const state = t5;
|
|
216
|
+
let threadMessages;
|
|
217
|
+
if ($[8] !== isRunning || $[9] !== joinStrategy || $[10] !== messages || $[11] !== state) {
|
|
187
218
|
const callbackResults = [];
|
|
188
219
|
for (const message of messages) {
|
|
189
220
|
let result = state.callbackCache.get(message);
|
|
@@ -197,23 +228,29 @@ const useExternalMessageConverter = ({ callback, messages, isRunning, joinStrate
|
|
|
197
228
|
}
|
|
198
229
|
callbackResults.push(result);
|
|
199
230
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
231
|
+
let t6;
|
|
232
|
+
if ($[13] !== state.chunkCache) {
|
|
233
|
+
t6 = (m) => {
|
|
234
|
+
const key = m.outputs[0];
|
|
235
|
+
if (!key) return m;
|
|
236
|
+
const cached = state.chunkCache.get(key);
|
|
237
|
+
if (cached && shallowArrayEqual(cached.outputs, m.outputs)) return cached;
|
|
238
|
+
state.chunkCache.set(key, m);
|
|
239
|
+
return m;
|
|
240
|
+
};
|
|
241
|
+
$[13] = state.chunkCache;
|
|
242
|
+
$[14] = t6;
|
|
243
|
+
} else t6 = $[14];
|
|
244
|
+
const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(t6);
|
|
245
|
+
threadMessages = state.converterCache.convertMessages(chunks, (cache, message_0, idx) => {
|
|
209
246
|
const isLast = idx === chunks.length - 1;
|
|
210
|
-
const joined = joinExternalMessages(
|
|
247
|
+
const joined = joinExternalMessages(message_0.outputs);
|
|
211
248
|
const autoStatus = getAutoStatus(isLast, isRunning, typeof joined.content === "object" && joined.content.some(isInterruptedToolCall), typeof joined.content === "object" && joined.content.some(isPendingToolCall), isLast ? state.metadata.error : void 0);
|
|
212
249
|
if (cache && (cache.role !== "assistant" || !isAutoStatus(cache.status) || cache.status === autoStatus)) {
|
|
213
|
-
if (shallowArrayEqual(getExternalStoreMessages(cache),
|
|
250
|
+
if (shallowArrayEqual(getExternalStoreMessages(cache), message_0.inputs)) return cache;
|
|
214
251
|
}
|
|
215
252
|
const newMessage = fromThreadMessageLike(joined, idx.toString(), autoStatus);
|
|
216
|
-
bindExternalStoreMessage(newMessage,
|
|
253
|
+
bindExternalStoreMessage(newMessage, message_0.inputs);
|
|
217
254
|
return newMessage;
|
|
218
255
|
});
|
|
219
256
|
bindExternalStoreMessage(threadMessages, messages);
|
|
@@ -221,13 +258,13 @@ const useExternalMessageConverter = ({ callback, messages, isRunning, joinStrate
|
|
|
221
258
|
const lastMessage = threadMessages.at(-1);
|
|
222
259
|
if (!lastMessage || lastMessage.role !== "assistant") threadMessages.push(createErrorAssistantMessage(state.metadata.error));
|
|
223
260
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
261
|
+
$[8] = isRunning;
|
|
262
|
+
$[9] = joinStrategy;
|
|
263
|
+
$[10] = messages;
|
|
264
|
+
$[11] = state;
|
|
265
|
+
$[12] = threadMessages;
|
|
266
|
+
} else threadMessages = $[12];
|
|
267
|
+
return threadMessages;
|
|
231
268
|
};
|
|
232
269
|
const shallowArrayEqual = (a, b) => {
|
|
233
270
|
if (a.length !== b.length) return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-converter.js","names":["unsupportedRole"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport {\n getExternalStoreMessages,\n symbolInnerMessage,\n bindExternalStoreMessage,\n} from \"../../runtime/utils/external-store-message\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"../../runtime/utils/thread-message-like\";\nimport { getAutoStatus, isAutoStatus } from \"../../runtime/utils/auto-status\";\nimport type { ToolExecutionStatus } from \"../../runtimes/tool-invocations/ToolInvocationTracker\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { generateErrorMessageId } from \"../../utils/id\";\nimport type {\n ThreadAssistantMessage,\n ThreadMessage,\n ToolCallMessagePart,\n} from \"../../types/message\";\nimport type { MessageTiming } from \"../../types/message\";\n\nexport type JoinStrategy = \"concat-content\" | \"none\";\n\ntype ThreadMessageLikeContentItem = Exclude<\n ThreadMessageLike[\"content\"],\n string\n>[number];\n\nconst isPendingToolCall = (c: ThreadMessageLikeContentItem): boolean =>\n c.type === \"tool-call\" && c.result === undefined;\n\nconst isInterruptedToolCall = (c: ThreadMessageLikeContentItem): boolean => {\n if (c.type !== \"tool-call\" || c.result !== undefined) return false;\n return (\n c.interrupt != null ||\n (c.approval != null && c.approval.approved === undefined)\n );\n};\n\nexport namespace useExternalMessageConverter {\n export type Message =\n | (ThreadMessageLike & {\n readonly convertConfig?: {\n readonly joinStrategy?: JoinStrategy;\n };\n })\n | {\n role: \"tool\";\n toolCallId: string;\n toolName?: string | undefined;\n result: any;\n artifact?: any;\n isError?: boolean;\n messages?: readonly ThreadMessage[];\n };\n\n export type Metadata = {\n readonly toolStatuses?: Record<string, ToolExecutionStatus>;\n readonly error?: ReadonlyJSONValue;\n readonly messageTiming?: Record<string, MessageTiming>;\n };\n\n export type Callback<T> = (\n message: T,\n metadata: Metadata,\n ) => Message | Message[];\n}\n\ntype CallbackResult<T> = {\n input: T;\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype ChunkResult<T> = {\n inputs: T[];\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst mergeInnerMessages = (existing: object, incoming: object) => ({\n [symbolInnerMessage]: [\n ...((existing as any)[symbolInnerMessage] ?? []),\n ...((incoming as any)[symbolInnerMessage] ?? []),\n ],\n});\n\nconst joinExternalMessages = (\n messages: readonly useExternalMessageConverter.Message[],\n): ThreadMessageLike => {\n const assistantMessage: Mutable<Omit<ThreadMessageLike, \"metadata\">> & {\n content: Exclude<ThreadMessageLike[\"content\"][0], string>[];\n metadata?: Mutable<ThreadMessageLike[\"metadata\"]>;\n } = {\n role: \"assistant\",\n content: [],\n };\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = assistantMessage.content.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === output.toolCallId,\n );\n // Ignore orphaned tool results so one bad tool message does not\n // prevent rendering the rest of the conversation.\n if (toolCallIdx !== -1) {\n const toolCall = assistantMessage.content[\n toolCallIdx\n ]! as ToolCallMessagePart;\n if (output.toolName !== undefined) {\n if (toolCall.toolName !== output.toolName)\n throw new Error(\n `Tool call name ${output.toolCallId} ${output.toolName} does not match existing tool call ${toolCall.toolName}`,\n );\n }\n assistantMessage.content[toolCallIdx] = {\n ...toolCall,\n ...{\n [symbolInnerMessage]: [\n ...((toolCall as any)[symbolInnerMessage] ?? []),\n output,\n ],\n },\n result: output.result,\n artifact: output.artifact,\n isError: output.isError,\n messages: output.messages,\n };\n }\n } else {\n const role = output.role;\n const content = (\n typeof output.content === \"string\"\n ? [{ type: \"text\" as const, text: output.content }]\n : output.content\n ).map((c) => ({\n ...c,\n ...{ [symbolInnerMessage]: [output] },\n }));\n switch (role) {\n case \"system\":\n case \"user\":\n return {\n ...output,\n content,\n };\n case \"assistant\":\n if (assistantMessage.content.length === 0) {\n assistantMessage.id = output.id;\n assistantMessage.createdAt ??= output.createdAt;\n assistantMessage.status ??= output.status;\n\n if (output.attachments) {\n assistantMessage.attachments = [\n ...(assistantMessage.attachments ?? []),\n ...output.attachments,\n ];\n }\n\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state) {\n assistantMessage.metadata.unstable_state =\n output.metadata.unstable_state;\n }\n if (output.metadata.unstable_annotations) {\n assistantMessage.metadata.unstable_annotations = [\n ...(assistantMessage.metadata.unstable_annotations ?? []),\n ...output.metadata.unstable_annotations,\n ];\n }\n if (output.metadata.unstable_data) {\n assistantMessage.metadata.unstable_data = [\n ...(assistantMessage.metadata.unstable_data ?? []),\n ...output.metadata.unstable_data,\n ];\n }\n if (output.metadata.steps) {\n assistantMessage.metadata.steps = [\n ...(assistantMessage.metadata.steps ?? []),\n ...output.metadata.steps,\n ];\n }\n if (output.metadata.custom) {\n assistantMessage.metadata.custom = {\n ...(assistantMessage.metadata.custom ?? {}),\n ...output.metadata.custom,\n };\n }\n\n if (output.metadata.timing) {\n assistantMessage.metadata.timing = output.metadata.timing;\n }\n\n if (output.metadata.submittedFeedback) {\n assistantMessage.metadata.submittedFeedback =\n output.metadata.submittedFeedback;\n }\n\n if (output.metadata.isOptimistic) {\n assistantMessage.metadata.isOptimistic = true;\n }\n }\n // TODO keep this in sync\n }\n\n // Add content parts, merging reasoning parts with same parentId\n for (const part of content) {\n if (part.type === \"tool-call\") {\n const existingIdx = assistantMessage.content.findIndex(\n (c) =>\n c.type === \"tool-call\" && c.toolCallId === part.toolCallId,\n );\n if (existingIdx !== -1) {\n const existing = assistantMessage.content[\n existingIdx\n ] as typeof part;\n assistantMessage.content[existingIdx] = {\n ...existing,\n ...part,\n ...mergeInnerMessages(existing, part),\n };\n continue;\n }\n }\n\n if (\n part.type === \"reasoning\" &&\n \"parentId\" in part &&\n part.parentId\n ) {\n const existingIdx = assistantMessage.content.findIndex(\n (c) =>\n c.type === \"reasoning\" &&\n \"parentId\" in c &&\n c.parentId === part.parentId,\n );\n if (existingIdx !== -1) {\n const existing = assistantMessage.content[\n existingIdx\n ] as typeof part;\n assistantMessage.content[existingIdx] = {\n ...existing,\n text: `${existing.text}\\n\\n${part.text}`,\n ...mergeInnerMessages(existing, part),\n };\n continue;\n }\n }\n assistantMessage.content.push(part);\n }\n break;\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n }\n }\n return assistantMessage;\n};\n\nconst chunkExternalMessages = <T>(\n callbackResults: CallbackResult<T>[],\n joinStrategy?: JoinStrategy,\n) => {\n const results: ChunkResult<T>[] = [];\n let isAssistant = false;\n let pendingNone = false; // true if the previous assistant message had joinStrategy \"none\"\n let inputs: T[] = [];\n let outputs: useExternalMessageConverter.Message[] = [];\n\n const flush = () => {\n if (outputs.length) {\n results.push({\n inputs,\n outputs,\n });\n }\n inputs = [];\n outputs = [];\n isAssistant = false;\n pendingNone = false;\n };\n\n for (const callbackResult of callbackResults) {\n for (const output of callbackResult.outputs) {\n if (\n (pendingNone && output.role !== \"tool\") ||\n !isAssistant ||\n output.role === \"user\" ||\n output.role === \"system\"\n ) {\n flush();\n }\n isAssistant = output.role === \"assistant\" || output.role === \"tool\";\n\n if (inputs.at(-1) !== callbackResult.input) {\n inputs.push(callbackResult.input);\n }\n outputs.push(output);\n\n if (\n output.role === \"assistant\" &&\n (output.convertConfig?.joinStrategy === \"none\" ||\n joinStrategy === \"none\")\n ) {\n pendingNone = true;\n }\n }\n }\n flush();\n return results;\n};\n\nfunction createErrorAssistantMessage(\n error: ReadonlyJSONValue,\n): ThreadAssistantMessage {\n const msg: ThreadAssistantMessage = {\n id: generateErrorMessageId(),\n role: \"assistant\",\n content: [],\n status: { type: \"incomplete\", reason: \"error\", error },\n createdAt: new Date(),\n metadata: {\n unstable_state: null,\n unstable_annotations: [],\n unstable_data: [],\n custom: {},\n steps: [],\n },\n };\n bindExternalStoreMessage(msg, []);\n return msg;\n}\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n) => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n const output = callback(message, metadata);\n const outputs = Array.isArray(output) ? output : [output];\n const result = { input: message, outputs };\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults);\n\n const result = chunks.map((message, idx) => {\n const isLast = idx === chunks.length - 1;\n const joined = joinExternalMessages(message.outputs);\n const hasInterruptedToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isInterruptedToolCall);\n const hasPendingToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isPendingToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? metadata.error : undefined,\n );\n const newMessage = fromThreadMessageLike(\n joined,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\n });\n\n if (metadata.error) {\n const lastMessage = result.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n result.push(createErrorAssistantMessage(metadata.error));\n }\n }\n\n return result;\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n callbackCache: new WeakMap<T, CallbackResult<T>>(),\n chunkCache: new WeakMap<\n useExternalMessageConverter.Message,\n ChunkResult<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }),\n [callback, metadata],\n );\n\n return useMemo(() => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (!result) {\n const output = state.callback(message, state.metadata);\n const outputs = Array.isArray(output) ? output : [output];\n result = { input: message, outputs };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (m) => {\n const key = m.outputs[0];\n if (!key) return m;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, m.outputs))\n return cached;\n state.chunkCache.set(key, m);\n return m;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) => {\n const isLast = idx === chunks.length - 1;\n\n const joined = joinExternalMessages(message.outputs);\n const hasInterruptedToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isInterruptedToolCall);\n const hasPendingToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isPendingToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? state.metadata.error : undefined,\n );\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n ) {\n const inputs = getExternalStoreMessages<T>(cache);\n if (shallowArrayEqual(inputs, message.inputs)) {\n return cache;\n }\n }\n\n const newMessage = fromThreadMessageLike(\n joined,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\n },\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n\n if (state.metadata.error) {\n const lastMessage = threadMessages.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n threadMessages.push(createErrorAssistantMessage(state.metadata.error));\n }\n }\n\n return threadMessages;\n }, [state, messages, isRunning, joinStrategy]);\n};\n\nconst shallowArrayEqual = (a: unknown[], b: unknown[]) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"external-message-converter.js","names":["c","_c","useMemo","ThreadMessageConverter","getExternalStoreMessages","symbolInnerMessage","bindExternalStoreMessage","fromThreadMessageLike","ThreadMessageLike","getAutoStatus","isAutoStatus","ToolExecutionStatus","ReadonlyJSONValue","generateErrorMessageId","ThreadAssistantMessage","ThreadMessage","ToolCallMessagePart","MessageTiming","JoinStrategy","ThreadMessageLikeContentItem","Exclude","isPendingToolCall","type","result","undefined","isInterruptedToolCall","interrupt","approval","approved","resolution","useExternalMessageConverter","Message","convertConfig","joinStrategy","role","toolCallId","toolName","artifact","isError","messages","Metadata","toolStatuses","Record","error","messageTiming","Callback","message","T","metadata","CallbackResult","input","outputs","ChunkResult","inputs","Mutable","P","mergeInnerMessages","existing","incoming","joinExternalMessages","assistantMessage","Omit","content","output","toolCallIdx","findIndex","toolCall","Error","const","text","map","length","id","createdAt","status","attachments","unstable_state","unstable_annotations","unstable_data","steps","custom","timing","submittedFeedback","isOptimistic","part","existingIdx","parentId","push","unsupportedRole","chunkExternalMessages","callbackResults","results","isAssistant","pendingNone","flush","callbackResult","at","createErrorAssistantMessage","msg","reason","Date","convertExternalMessages","WeakKey","callback","isRunning","Array","isArray","chunks","idx","isLast","joined","hasInterruptedToolCalls","some","hasPendingToolCalls","autoStatus","newMessage","toString","lastMessage","t0","$","t1","t2","t3","t4","Symbol","for","WeakMap","t5","callbackCache","chunkCache","converterCache","state","threadMessages","get","set","t6","m","key","cached","shallowArrayEqual","convertMessages","cache","message_0","a","b","i"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport {\n getExternalStoreMessages,\n symbolInnerMessage,\n bindExternalStoreMessage,\n} from \"../../runtime/utils/external-store-message\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"../../runtime/utils/thread-message-like\";\nimport { getAutoStatus, isAutoStatus } from \"../../runtime/utils/auto-status\";\nimport type { ToolExecutionStatus } from \"../../runtimes/tool-invocations/ToolInvocationTracker\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { generateErrorMessageId } from \"../../utils/id\";\nimport type {\n ThreadAssistantMessage,\n ThreadMessage,\n ToolCallMessagePart,\n} from \"../../types/message\";\nimport type { MessageTiming } from \"../../types/message\";\n\nexport type JoinStrategy = \"concat-content\" | \"none\";\n\ntype ThreadMessageLikeContentItem = Exclude<\n ThreadMessageLike[\"content\"],\n string\n>[number];\n\nconst isPendingToolCall = (c: ThreadMessageLikeContentItem): boolean =>\n c.type === \"tool-call\" && c.result === undefined;\n\nconst isInterruptedToolCall = (c: ThreadMessageLikeContentItem): boolean => {\n if (c.type !== \"tool-call\" || c.result !== undefined) return false;\n return (\n c.interrupt != null ||\n (c.approval != null &&\n c.approval.approved === undefined &&\n c.approval.resolution === undefined)\n );\n};\n\nexport namespace useExternalMessageConverter {\n export type Message =\n | (ThreadMessageLike & {\n readonly convertConfig?: {\n readonly joinStrategy?: JoinStrategy;\n };\n })\n | {\n role: \"tool\";\n toolCallId: string;\n toolName?: string | undefined;\n result: any;\n artifact?: any;\n isError?: boolean;\n messages?: readonly ThreadMessage[];\n };\n\n export type Metadata = {\n readonly toolStatuses?: Record<string, ToolExecutionStatus>;\n readonly error?: ReadonlyJSONValue;\n readonly messageTiming?: Record<string, MessageTiming>;\n };\n\n export type Callback<T> = (\n message: T,\n metadata: Metadata,\n ) => Message | Message[];\n}\n\ntype CallbackResult<T> = {\n input: T;\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype ChunkResult<T> = {\n inputs: T[];\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst mergeInnerMessages = (existing: object, incoming: object) => ({\n [symbolInnerMessage]: [\n ...((existing as any)[symbolInnerMessage] ?? []),\n ...((incoming as any)[symbolInnerMessage] ?? []),\n ],\n});\n\nconst joinExternalMessages = (\n messages: readonly useExternalMessageConverter.Message[],\n): ThreadMessageLike => {\n const assistantMessage: Mutable<Omit<ThreadMessageLike, \"metadata\">> & {\n content: Exclude<ThreadMessageLike[\"content\"][0], string>[];\n metadata?: Mutable<ThreadMessageLike[\"metadata\"]>;\n } = {\n role: \"assistant\",\n content: [],\n };\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = assistantMessage.content.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === output.toolCallId,\n );\n // Ignore orphaned tool results so one bad tool message does not\n // prevent rendering the rest of the conversation.\n if (toolCallIdx !== -1) {\n const toolCall = assistantMessage.content[\n toolCallIdx\n ]! as ToolCallMessagePart;\n if (output.toolName !== undefined) {\n if (toolCall.toolName !== output.toolName)\n throw new Error(\n `Tool call name ${output.toolCallId} ${output.toolName} does not match existing tool call ${toolCall.toolName}`,\n );\n }\n assistantMessage.content[toolCallIdx] = {\n ...toolCall,\n ...{\n [symbolInnerMessage]: [\n ...((toolCall as any)[symbolInnerMessage] ?? []),\n output,\n ],\n },\n result: output.result,\n artifact: output.artifact,\n isError: output.isError,\n messages: output.messages,\n };\n }\n } else {\n const role = output.role;\n const content = (\n typeof output.content === \"string\"\n ? [{ type: \"text\" as const, text: output.content }]\n : output.content\n ).map((c) => ({\n ...c,\n ...{ [symbolInnerMessage]: [output] },\n }));\n switch (role) {\n case \"system\":\n case \"user\":\n return {\n ...output,\n content,\n };\n case \"assistant\":\n if (assistantMessage.content.length === 0) {\n assistantMessage.id = output.id;\n assistantMessage.createdAt ??= output.createdAt;\n assistantMessage.status ??= output.status;\n\n if (output.attachments) {\n assistantMessage.attachments = [\n ...(assistantMessage.attachments ?? []),\n ...output.attachments,\n ];\n }\n\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state) {\n assistantMessage.metadata.unstable_state =\n output.metadata.unstable_state;\n }\n if (output.metadata.unstable_annotations) {\n assistantMessage.metadata.unstable_annotations = [\n ...(assistantMessage.metadata.unstable_annotations ?? []),\n ...output.metadata.unstable_annotations,\n ];\n }\n if (output.metadata.unstable_data) {\n assistantMessage.metadata.unstable_data = [\n ...(assistantMessage.metadata.unstable_data ?? []),\n ...output.metadata.unstable_data,\n ];\n }\n if (output.metadata.steps) {\n assistantMessage.metadata.steps = [\n ...(assistantMessage.metadata.steps ?? []),\n ...output.metadata.steps,\n ];\n }\n if (output.metadata.custom) {\n assistantMessage.metadata.custom = {\n ...(assistantMessage.metadata.custom ?? {}),\n ...output.metadata.custom,\n };\n }\n\n if (output.metadata.timing) {\n assistantMessage.metadata.timing = output.metadata.timing;\n }\n\n if (output.metadata.submittedFeedback) {\n assistantMessage.metadata.submittedFeedback =\n output.metadata.submittedFeedback;\n }\n\n if (output.metadata.isOptimistic) {\n assistantMessage.metadata.isOptimistic = true;\n }\n }\n // TODO keep this in sync\n }\n\n // Add content parts, merging reasoning parts with same parentId\n for (const part of content) {\n if (part.type === \"tool-call\") {\n const existingIdx = assistantMessage.content.findIndex(\n (c) =>\n c.type === \"tool-call\" && c.toolCallId === part.toolCallId,\n );\n if (existingIdx !== -1) {\n const existing = assistantMessage.content[\n existingIdx\n ] as typeof part;\n assistantMessage.content[existingIdx] = {\n ...existing,\n ...part,\n ...mergeInnerMessages(existing, part),\n };\n continue;\n }\n }\n\n if (\n part.type === \"reasoning\" &&\n \"parentId\" in part &&\n part.parentId\n ) {\n const existingIdx = assistantMessage.content.findIndex(\n (c) =>\n c.type === \"reasoning\" &&\n \"parentId\" in c &&\n c.parentId === part.parentId,\n );\n if (existingIdx !== -1) {\n const existing = assistantMessage.content[\n existingIdx\n ] as typeof part;\n assistantMessage.content[existingIdx] = {\n ...existing,\n text: `${existing.text}\\n\\n${part.text}`,\n ...mergeInnerMessages(existing, part),\n };\n continue;\n }\n }\n assistantMessage.content.push(part);\n }\n break;\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n }\n }\n return assistantMessage;\n};\n\nconst chunkExternalMessages = <T>(\n callbackResults: CallbackResult<T>[],\n joinStrategy?: JoinStrategy,\n) => {\n const results: ChunkResult<T>[] = [];\n let isAssistant = false;\n let pendingNone = false; // true if the previous assistant message had joinStrategy \"none\"\n let inputs: T[] = [];\n let outputs: useExternalMessageConverter.Message[] = [];\n\n const flush = () => {\n if (outputs.length) {\n results.push({\n inputs,\n outputs,\n });\n }\n inputs = [];\n outputs = [];\n isAssistant = false;\n pendingNone = false;\n };\n\n for (const callbackResult of callbackResults) {\n for (const output of callbackResult.outputs) {\n if (\n (pendingNone && output.role !== \"tool\") ||\n !isAssistant ||\n output.role === \"user\" ||\n output.role === \"system\"\n ) {\n flush();\n }\n isAssistant = output.role === \"assistant\" || output.role === \"tool\";\n\n if (inputs.at(-1) !== callbackResult.input) {\n inputs.push(callbackResult.input);\n }\n outputs.push(output);\n\n if (\n output.role === \"assistant\" &&\n (output.convertConfig?.joinStrategy === \"none\" ||\n joinStrategy === \"none\")\n ) {\n pendingNone = true;\n }\n }\n }\n flush();\n return results;\n};\n\nfunction createErrorAssistantMessage(\n error: ReadonlyJSONValue,\n): ThreadAssistantMessage {\n const msg: ThreadAssistantMessage = {\n id: generateErrorMessageId(),\n role: \"assistant\",\n content: [],\n status: { type: \"incomplete\", reason: \"error\", error },\n createdAt: new Date(),\n metadata: {\n unstable_state: null,\n unstable_annotations: [],\n unstable_data: [],\n custom: {},\n steps: [],\n },\n };\n bindExternalStoreMessage(msg, []);\n return msg;\n}\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n) => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n const output = callback(message, metadata);\n const outputs = Array.isArray(output) ? output : [output];\n const result = { input: message, outputs };\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults);\n\n const result = chunks.map((message, idx) => {\n const isLast = idx === chunks.length - 1;\n const joined = joinExternalMessages(message.outputs);\n const hasInterruptedToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isInterruptedToolCall);\n const hasPendingToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isPendingToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? metadata.error : undefined,\n );\n const newMessage = fromThreadMessageLike(\n joined,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\n });\n\n if (metadata.error) {\n const lastMessage = result.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n result.push(createErrorAssistantMessage(metadata.error));\n }\n }\n\n return result;\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n callbackCache: new WeakMap<T, CallbackResult<T>>(),\n chunkCache: new WeakMap<\n useExternalMessageConverter.Message,\n ChunkResult<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }),\n [callback, metadata],\n );\n\n return useMemo(() => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (!result) {\n const output = state.callback(message, state.metadata);\n const outputs = Array.isArray(output) ? output : [output];\n result = { input: message, outputs };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (m) => {\n const key = m.outputs[0];\n if (!key) return m;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, m.outputs))\n return cached;\n state.chunkCache.set(key, m);\n return m;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) => {\n const isLast = idx === chunks.length - 1;\n\n const joined = joinExternalMessages(message.outputs);\n const hasInterruptedToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isInterruptedToolCall);\n const hasPendingToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isPendingToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? state.metadata.error : undefined,\n );\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n ) {\n const inputs = getExternalStoreMessages<T>(cache);\n if (shallowArrayEqual(inputs, message.inputs)) {\n return cache;\n }\n }\n\n const newMessage = fromThreadMessageLike(\n joined,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\n },\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n\n if (state.metadata.error) {\n const lastMessage = threadMessages.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n threadMessages.push(createErrorAssistantMessage(state.metadata.error));\n }\n }\n\n return threadMessages;\n }, [state, messages, isRunning, joinStrategy]);\n};\n\nconst shallowArrayEqual = (a: unknown[], b: unknown[]) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n"],"mappings":"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"}
|
|
@@ -2,19 +2,53 @@
|
|
|
2
2
|
import { AssistantRuntimeImpl } from "../../runtime/api/assistant-runtime.js";
|
|
3
3
|
import { ExternalStoreRuntimeCore } from "../../runtimes/external-store/external-store-runtime-core.js";
|
|
4
4
|
import { useRuntimeAdapters } from "./RuntimeAdapterProvider.js";
|
|
5
|
-
import { useEffect,
|
|
5
|
+
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
6
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
6
7
|
//#region src/react/runtimes/useExternalStoreRuntime.ts
|
|
7
8
|
const useExternalStoreRuntime = (store) => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const $ = c(11);
|
|
10
|
+
let t0;
|
|
11
|
+
if ($[0] !== store) {
|
|
12
|
+
t0 = () => new ExternalStoreRuntimeCore(store);
|
|
13
|
+
$[0] = store;
|
|
14
|
+
$[1] = t0;
|
|
15
|
+
} else t0 = $[1];
|
|
16
|
+
const [runtime] = useState(t0);
|
|
17
|
+
let t1;
|
|
18
|
+
if ($[2] !== runtime || $[3] !== store) {
|
|
19
|
+
t1 = () => {
|
|
20
|
+
runtime.setAdapter(store);
|
|
21
|
+
};
|
|
22
|
+
$[2] = runtime;
|
|
23
|
+
$[3] = store;
|
|
24
|
+
$[4] = t1;
|
|
25
|
+
} else t1 = $[4];
|
|
26
|
+
useEffect(t1);
|
|
12
27
|
const { modelContext } = useRuntimeAdapters() ?? {};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
let t2;
|
|
29
|
+
let t3;
|
|
30
|
+
if ($[5] !== modelContext || $[6] !== runtime) {
|
|
31
|
+
t2 = () => {
|
|
32
|
+
if (!modelContext) return;
|
|
33
|
+
return runtime.registerModelContextProvider(modelContext);
|
|
34
|
+
};
|
|
35
|
+
t3 = [modelContext, runtime];
|
|
36
|
+
$[5] = modelContext;
|
|
37
|
+
$[6] = runtime;
|
|
38
|
+
$[7] = t2;
|
|
39
|
+
$[8] = t3;
|
|
40
|
+
} else {
|
|
41
|
+
t2 = $[7];
|
|
42
|
+
t3 = $[8];
|
|
43
|
+
}
|
|
44
|
+
useEffect(t2, t3);
|
|
45
|
+
let t4;
|
|
46
|
+
if ($[9] !== runtime) {
|
|
47
|
+
t4 = new AssistantRuntimeImpl(runtime);
|
|
48
|
+
$[9] = runtime;
|
|
49
|
+
$[10] = t4;
|
|
50
|
+
} else t4 = $[10];
|
|
51
|
+
return t4;
|
|
18
52
|
};
|
|
19
53
|
//#endregion
|
|
20
54
|
export { useExternalStoreRuntime };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalStoreRuntime.js","names":[],"sources":["../../../src/react/runtimes/useExternalStoreRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ExternalStoreRuntimeCore } from \"../../runtimes/internal\";\nimport type { ExternalStoreAdapter } from \"../../runtimes/external-store/external-store-adapter\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { AssistantRuntimeImpl } from \"../../runtime/internal\";\nimport { useRuntimeAdapters } from \"./RuntimeAdapterProvider\";\n\nexport const useExternalStoreRuntime = <T>(\n store: ExternalStoreAdapter<T>,\n): AssistantRuntime => {\n const [runtime] = useState(() => new ExternalStoreRuntimeCore(store));\n\n useEffect(() => {\n runtime.setAdapter(store);\n });\n\n const { modelContext } = useRuntimeAdapters() ?? {};\n\n useEffect(() => {\n if (!modelContext) return undefined;\n return runtime.registerModelContextProvider(modelContext);\n }, [modelContext, runtime]);\n\n return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useExternalStoreRuntime.js","names":["c","_c","useEffect","useMemo","useState","ExternalStoreRuntimeCore","ExternalStoreAdapter","AssistantRuntime","AssistantRuntimeImpl","useRuntimeAdapters","useExternalStoreRuntime","store","$","t0","runtime","t1","setAdapter","modelContext","t2","t3","registerModelContextProvider","t4"],"sources":["../../../src/react/runtimes/useExternalStoreRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ExternalStoreRuntimeCore } from \"../../runtimes/internal\";\nimport type { ExternalStoreAdapter } from \"../../runtimes/external-store/external-store-adapter\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { AssistantRuntimeImpl } from \"../../runtime/internal\";\nimport { useRuntimeAdapters } from \"./RuntimeAdapterProvider\";\n\nexport const useExternalStoreRuntime = <T>(\n store: ExternalStoreAdapter<T>,\n): AssistantRuntime => {\n const [runtime] = useState(() => new ExternalStoreRuntimeCore(store));\n\n useEffect(() => {\n runtime.setAdapter(store);\n });\n\n const { modelContext } = useRuntimeAdapters() ?? {};\n\n useEffect(() => {\n if (!modelContext) return undefined;\n return runtime.registerModelContextProvider(modelContext);\n }, [modelContext, runtime]);\n\n return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);\n};\n"],"mappings":";;;;;;;AASA,MAAaU,2BAA0BC,UAAA;CAAA,MAAAC,IAAAX,EAAA,EAAA;CAAA,IAAAY;CAAA,IAAAD,EAAA,OAAAD,OAAA;EAGVE,WAAM,IAAIR,yBAAyBM,KAAK;EAACC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAApE,MAAA,CAAAE,WAAkBV,SAASS,EAAyC;CAAE,IAAAE;CAAA,IAAAH,EAAA,OAAAE,WAAAF,EAAA,OAAAD,OAAA;EAE5DI,WAAA;GACRD,QAAOE,WAAYL,KAAK;EAAC;EAC1BC,EAAA,KAAAE;EAAAF,EAAA,KAAAD;EAAAC,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAFDV,UAAUa,EAET;CAED,MAAA,EAAAE,iBAAyBR,mBAAyB,KAAzB,CAAyB;CAAE,IAAAS;CAAA,IAAAC;CAAA,IAAAP,EAAA,OAAAK,gBAAAL,EAAA,OAAAE,SAAA;EAE1CI,WAAA;GACR,IAAI,CAACD,cAAY;GAAmB,OAC7BH,QAAOM,6BAA8BH,YAAY;EAAC;EACxDE,KAAA,CAACF,cAAcH,OAAO;EAACF,EAAA,KAAAK;EAAAL,EAAA,KAAAE;EAAAF,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAA;EAAAD,KAAAN,EAAA;EAAAO,KAAAP,EAAA;CAAA;CAH1BV,UAAUgB,IAGPC,EAAuB;CAAC,IAAAE;CAAA,IAAAT,EAAA,OAAAE,SAAA;EAENO,KAAA,IAAIb,qBAAqBM,OAAO;EAACF,EAAA,KAAAE;EAAAF,EAAA,MAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAAjCS;AAAiC"}
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
3
|
//#region src/react/runtimes/useExternalStoreSharedOptions.ts
|
|
4
4
|
const useExternalStoreSharedOptions = (options) => {
|
|
5
|
+
const $ = c(5);
|
|
5
6
|
const { isDisabled, isSendDisabled, unstable_capabilities, suggestions } = options;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
let t0;
|
|
8
|
+
if ($[0] !== isDisabled || $[1] !== isSendDisabled || $[2] !== suggestions || $[3] !== unstable_capabilities) {
|
|
9
|
+
t0 = {
|
|
10
|
+
isDisabled,
|
|
11
|
+
isSendDisabled,
|
|
12
|
+
unstable_capabilities,
|
|
13
|
+
suggestions
|
|
14
|
+
};
|
|
15
|
+
$[0] = isDisabled;
|
|
16
|
+
$[1] = isSendDisabled;
|
|
17
|
+
$[2] = suggestions;
|
|
18
|
+
$[3] = unstable_capabilities;
|
|
19
|
+
$[4] = t0;
|
|
20
|
+
} else t0 = $[4];
|
|
21
|
+
return t0;
|
|
17
22
|
};
|
|
18
23
|
//#endregion
|
|
19
24
|
export { useExternalStoreSharedOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalStoreSharedOptions.js","names":[],"sources":["../../../src/react/runtimes/useExternalStoreSharedOptions.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ExternalStoreSharedOptions } from \"../../runtimes/external-store/external-store-shared-options\";\n\nexport const useExternalStoreSharedOptions = (\n options: ExternalStoreSharedOptions,\n): ExternalStoreSharedOptions => {\n const { isDisabled, isSendDisabled, unstable_capabilities, suggestions } =\n options;\n return useMemo(\n () =>\n ({\n isDisabled,\n isSendDisabled,\n unstable_capabilities,\n suggestions,\n }) satisfies {\n [K in keyof Required<ExternalStoreSharedOptions>]: ExternalStoreSharedOptions[K];\n },\n [isDisabled, isSendDisabled, unstable_capabilities, suggestions],\n );\n};\n"],"mappings":";;;AAKA,
|
|
1
|
+
{"version":3,"file":"useExternalStoreSharedOptions.js","names":["c","_c","useMemo","ExternalStoreSharedOptions","useExternalStoreSharedOptions","options","$","isDisabled","isSendDisabled","unstable_capabilities","suggestions","t0","Required","K"],"sources":["../../../src/react/runtimes/useExternalStoreSharedOptions.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ExternalStoreSharedOptions } from \"../../runtimes/external-store/external-store-shared-options\";\n\nexport const useExternalStoreSharedOptions = (\n options: ExternalStoreSharedOptions,\n): ExternalStoreSharedOptions => {\n const { isDisabled, isSendDisabled, unstable_capabilities, suggestions } =\n options;\n return useMemo(\n () =>\n ({\n isDisabled,\n isSendDisabled,\n unstable_capabilities,\n suggestions,\n }) satisfies {\n [K in keyof Required<ExternalStoreSharedOptions>]: ExternalStoreSharedOptions[K];\n },\n [isDisabled, isSendDisabled, unstable_capabilities, suggestions],\n );\n};\n"],"mappings":";;;AAKA,MAAaI,iCAAgCC,YAAA;CAAA,MAAAC,IAAAL,EAAA,CAAA;CAG3C,MAAA,EAAAM,YAAAC,gBAAAC,uBAAAC,gBACEL;CAAQ,IAAAM;CAAA,IAAAL,EAAA,OAAAC,cAAAD,EAAA,OAAAE,kBAAAF,EAAA,OAAAI,eAAAJ,EAAA,OAAAG,uBAAA;EAGLE,KAAA;GAAAJ;GAAAC;GAAAC;GAAAC;EAKD;EAACJ,EAAA,KAAAC;EAAAD,EAAA,KAAAE;EAAAF,EAAA,KAAAI;EAAAJ,EAAA,KAAAG;EAAAH,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,OALAK;AAOA"}
|