@assistant-ui/core 0.3.19 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +9 -10
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +2 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -2
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +2 -2
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/speech.d.ts +6 -7
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/suggestion.d.ts +5 -6
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +6 -7
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -2
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +5 -6
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -2
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/model-context/frame/host.d.ts +1 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -2
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/types.d.ts +5 -6
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/registry-handles.d.ts +3 -4
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +1 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +2 -3
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +2 -3
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +8 -9
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +3 -4
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -3
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +20 -34
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -2
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +3 -4
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +2 -3
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -2
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +2 -3
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +9 -10
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +2 -3
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -4
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +3 -4
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +2 -3
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +9 -10
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -2
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -3
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +1 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +4 -5
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +1 -2
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +2 -3
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +10 -10
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +3 -4
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -3
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +17 -4
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +11 -3
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +63 -2
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +4 -5
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +1 -2
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +6 -6
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +10 -11
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +4 -5
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +1 -2
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +7 -8
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +2 -3
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +1 -2
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts +2 -3
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +6 -7
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/bindings.d.ts +5 -6
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +10 -10
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -4
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +8 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +3 -2
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +6 -7
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -11
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +8 -3
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +71 -27
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +17 -16
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +5 -4
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +9 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +2 -3
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +7 -8
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +15 -16
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +3 -2
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +4 -5
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +3 -4
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +4 -5
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +83 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +4 -5
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +5 -5
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +29 -6
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +9 -4
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +53 -9
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -2
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +3 -4
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +15 -11
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -2
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -2
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -2
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +1 -2
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/suggestions.d.ts +3 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +2 -3
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +3 -4
- package/dist/store/clients/thread-tasks.d.ts.map +1 -1
- package/dist/store/env.d.ts +1 -2
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/primitive-predicates.d.ts +11 -12
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +2 -2
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -2
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +4 -5
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +5 -6
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +6 -7
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +6 -6
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +3 -4
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +4 -5
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +4 -4
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +4 -5
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +5 -6
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +4 -5
- package/dist/store/scopes/task.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +5 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +5 -6
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +4 -5
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +15 -16
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -10
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +3 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +2 -3
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +8 -9
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/message.d.ts +48 -46
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +1 -2
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -3
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -3
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -2
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +6 -7
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +2 -3
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/id.d.ts +3 -4
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +4 -5
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +4 -5
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -3
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -4
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/package.json +14 -13
- package/src/adapters/attachment.ts +8 -1
- package/src/adapters/feedback.ts +1 -0
- package/src/model-context/frame/provider.test.ts +45 -20
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +117 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +27 -74
- package/src/react/client/Interactables.test.ts +12 -7
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.test.ts +5 -6
- package/src/react/interactables-legacy/Interactables.test.ts +9 -3
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
- package/src/react/model-context/useInteractable.test.tsx +56 -29
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +4 -1
- package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +102 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +24 -11
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +8 -4
- package/src/react/runtimes/cloud/auiV0.ts +121 -1
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
- package/src/react/runtimes/external-message-converter.test.ts +7 -3
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
- package/src/runtime/api/message-part-runtime.ts +4 -1
- package/src/runtime/api/message-runtime.ts +15 -2
- package/src/runtime/base/base-thread-runtime-core.test.ts +761 -18
- package/src/runtime/base/base-thread-runtime-core.ts +89 -26
- package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +2 -0
- package/src/runtime/queue/message-queue.ts +11 -1
- package/src/runtime/utils/external-message-conversion.test.ts +43 -0
- package/src/runtime/utils/external-message-conversion.ts +6 -2
- package/src/runtime/utils/stored-message-parts.ts +174 -0
- package/src/runtime/utils/thread-message-like.ts +7 -2
- package/src/runtimes/external-store/external-store-adapter.ts +4 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +44 -9
- package/src/runtimes/local/local-thread-runtime-core.test.ts +168 -12
- package/src/runtimes/local/local-thread-runtime-core.ts +80 -9
- package/src/store/clients/external-thread.ts +34 -13
- package/src/store/primitive-predicates.test.ts +16 -0
- package/src/store/primitive-predicates.ts +4 -1
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
- package/src/store/scopes/message.ts +4 -1
- package/src/subscribable/subscribable.test.ts +7 -2
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +4 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core.test.ts +16 -5
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +22 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +229 -27
- package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
- package/src/tests/external-thread-attachments.test.tsx +22 -23
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-parity.test.tsx +1 -1
- package/src/tests/message-queue.test.ts +45 -10
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +16 -8
|
@@ -4,8 +4,8 @@ import { ToolExecutionStatus } from "../../runtimes/tool-invocations/ToolInvocat
|
|
|
4
4
|
import { ThreadMessageConverter } from "../../runtimes/external-store/thread-message-converter.js";
|
|
5
5
|
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
6
6
|
//#region src/runtime/utils/external-message-conversion.d.ts
|
|
7
|
-
type JoinStrategy = "concat-content" | "none";
|
|
8
|
-
type ExternalMessageConverterMessage = (ThreadMessageLike & {
|
|
7
|
+
export type JoinStrategy = "concat-content" | "none";
|
|
8
|
+
export type ExternalMessageConverterMessage = (ThreadMessageLike & {
|
|
9
9
|
readonly convertConfig?: {
|
|
10
10
|
readonly joinStrategy?: JoinStrategy;
|
|
11
11
|
};
|
|
@@ -18,25 +18,25 @@ type ExternalMessageConverterMessage = (ThreadMessageLike & {
|
|
|
18
18
|
isError?: boolean;
|
|
19
19
|
messages?: readonly ThreadMessage[];
|
|
20
20
|
};
|
|
21
|
-
type ExternalMessageConverterMetadata = {
|
|
21
|
+
export type ExternalMessageConverterMetadata = {
|
|
22
22
|
readonly toolStatuses?: Record<string, ToolExecutionStatus>;
|
|
23
23
|
readonly error?: ReadonlyJSONValue;
|
|
24
24
|
readonly cancelledMessageIds?: ReadonlySet<string>;
|
|
25
25
|
readonly messageTiming?: Record<string, MessageTiming>;
|
|
26
26
|
};
|
|
27
|
-
type ExternalMessageConverterCallback<T> = (message: T, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterMessage | ExternalMessageConverterMessage[];
|
|
28
|
-
type ExternalMessageConverterCallbackResult<T> = {
|
|
27
|
+
export type ExternalMessageConverterCallback<T> = (message: T, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterMessage | ExternalMessageConverterMessage[];
|
|
28
|
+
export type ExternalMessageConverterCallbackResult<T> = {
|
|
29
29
|
input: T;
|
|
30
30
|
outputs: ExternalMessageConverterMessage[];
|
|
31
31
|
};
|
|
32
|
-
type ExternalMessageConverterChunk<T> = {
|
|
32
|
+
export type ExternalMessageConverterChunk<T> = {
|
|
33
33
|
inputs: T[];
|
|
34
34
|
outputs: ExternalMessageConverterMessage[];
|
|
35
35
|
};
|
|
36
|
-
declare const convertExternalMessageCallback: <T>(input: T, callback: ExternalMessageConverterCallback<T>, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterCallbackResult<T>;
|
|
37
|
-
declare const joinExternalMessages: (messages: readonly ExternalMessageConverterMessage[]) => ThreadMessageLike;
|
|
38
|
-
declare const chunkExternalMessages: <T>(callbackResults: ExternalMessageConverterCallbackResult<T>[], joinStrategy?: JoinStrategy) => ExternalMessageConverterChunk<T>[];
|
|
39
|
-
declare const shallowArrayEqual: (a: readonly unknown[], b: readonly unknown[]) => boolean;
|
|
36
|
+
export declare const convertExternalMessageCallback: <T>(input: T, callback: ExternalMessageConverterCallback<T>, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterCallbackResult<T>;
|
|
37
|
+
export declare const joinExternalMessages: (messages: readonly ExternalMessageConverterMessage[]) => ThreadMessageLike;
|
|
38
|
+
export declare const chunkExternalMessages: <T>(callbackResults: ExternalMessageConverterCallbackResult<T>[], joinStrategy?: JoinStrategy) => ExternalMessageConverterChunk<T>[];
|
|
39
|
+
export declare const shallowArrayEqual: (a: readonly unknown[], b: readonly unknown[]) => boolean;
|
|
40
40
|
type ExternalMessageChunkConversionCache = {
|
|
41
41
|
message: ThreadMessage | undefined;
|
|
42
42
|
generatedFallbackMessages: WeakSet<object>;
|
|
@@ -45,16 +45,15 @@ type ExternalMessageConversionCallbackCacheEntry<T> = ExternalMessageConverterCa
|
|
|
45
45
|
metadata: ExternalMessageConverterMetadata;
|
|
46
46
|
callback: ExternalMessageConverterCallback<T>;
|
|
47
47
|
};
|
|
48
|
-
type InternalExternalMessageConversionCache<T extends WeakKey = WeakKey> = {
|
|
48
|
+
export type InternalExternalMessageConversionCache<T extends WeakKey = WeakKey> = {
|
|
49
49
|
callbackCache: WeakMap<T, ExternalMessageConversionCallbackCacheEntry<T>>;
|
|
50
50
|
chunkCache: WeakMap<ExternalMessageConverterMessage, ExternalMessageConverterChunk<T>>;
|
|
51
51
|
converterCache: ThreadMessageConverter;
|
|
52
52
|
generatedFallbackMessages: WeakSet<object>;
|
|
53
53
|
};
|
|
54
|
-
declare const createExternalMessageConversionCache: <T extends WeakKey = WeakKey>() => InternalExternalMessageConversionCache<T>;
|
|
55
|
-
declare const convertExternalMessageChunk: <T>(message: ExternalMessageConverterChunk<T>, idx: number, chunkCount: number, isRunning: boolean, error: ReadonlyJSONValue | undefined, cache?: ExternalMessageChunkConversionCache, cancelledMessageIds?: ReadonlySet<string>) => ThreadMessage;
|
|
56
|
-
declare const completeExternalMessageConversion: (messages: ThreadMessage[], error: ReadonlyJSONValue | undefined) => ThreadMessage[];
|
|
57
|
-
declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: ExternalMessageConverterCallback<T>, isRunning: boolean, metadata: ExternalMessageConverterMetadata, joinStrategy?: JoinStrategy, cache?: InternalExternalMessageConversionCache<T>) => ThreadMessage[];
|
|
54
|
+
export declare const createExternalMessageConversionCache: <T extends WeakKey = WeakKey>() => InternalExternalMessageConversionCache<T>;
|
|
55
|
+
export declare const convertExternalMessageChunk: <T>(message: ExternalMessageConverterChunk<T>, idx: number, chunkCount: number, isRunning: boolean, error: ReadonlyJSONValue | undefined, cache?: ExternalMessageChunkConversionCache, cancelledMessageIds?: ReadonlySet<string>) => ThreadMessage;
|
|
56
|
+
export declare const completeExternalMessageConversion: (messages: ThreadMessage[], error: ReadonlyJSONValue | undefined) => ThreadMessage[];
|
|
57
|
+
export declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: ExternalMessageConverterCallback<T>, isRunning: boolean, metadata: ExternalMessageConverterMetadata, joinStrategy?: JoinStrategy, cache?: InternalExternalMessageConversionCache<T>) => ThreadMessage[];
|
|
58
58
|
//#endregion
|
|
59
|
-
export { ExternalMessageConverterCallback, ExternalMessageConverterCallbackResult, ExternalMessageConverterChunk, ExternalMessageConverterMessage, ExternalMessageConverterMetadata, InternalExternalMessageConversionCache, JoinStrategy, chunkExternalMessages, completeExternalMessageConversion, convertExternalMessageCallback, convertExternalMessageChunk, convertExternalMessages, createExternalMessageConversionCache, joinExternalMessages, shallowArrayEqual };
|
|
60
59
|
//# sourceMappingURL=external-message-conversion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-conversion.d.ts","names":[],"sources":["../../../src/runtime/utils/external-message-conversion.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"external-message-conversion.d.ts","names":[],"sources":["../../../src/runtime/utils/external-message-conversion.ts"],"mappings":";;;;;;YA6BY;YAEA,mCACP;WACU;aACE,eAAe;;;EAI1B;EACA;EACA;EACA;EACA;EACA;EACA,oBAAoB;;YAGd;WACD,eAAe,eAAe;WAC9B,QAAQ;WACR,sBAAsB;WACtB,gBAAgB,eAAe;;YAG9B,iCAAiC,MAC3C,SAAS,GACT,UAAU,qCACP,kCAAkC;YAE3B,uCAAuC;EACjD,OAAO;EACP,SAAS;;YAGC,8BAA8B;EACxC,QAAQ;EACR,SAAS;;qBAsDE,iCAAkC,GAC7C,OAAO,GACP,UAAU,iCAAiC,IAC3C,UAAU,qCACT,uCAAuC;qBAe7B,uBACX,mBAAmB,sCAClB;qBAwLU,wBAAyB,GACpC,iBAAiB,uCAAuC,MACxD,eAAe,iBAAY,8BAAA;qBAuDhB,oBACX,uBACA;KASG;EACH,SAAS;EACT,2BAA2B;;KAGxB,4CAA4C,KAC/C,uCAAuC;EACrC,UAAU;EACV,UAAU,iCAAiC;;YAGnC,uCACV,UAAU,UAAU;EAEpB,eAAe,QAAQ,GAAG,4CAA4C;EACtE,YAAY,QACV,iCACA,8BAA8B;EAEhC,gBAAgB;EAEhB,2BAA2B;;qBAGhB,uCACX,UAAU,UAAU,cACjB,uCAAuC;qBAO/B,8BAA+B,GAC1C,SAAS,8BAA8B,IACvC,aACA,oBACA,oBACA,OAAO,+BACP,QAAQ,qCACR,sBAAsB,wBAAmB;qBA8F9B,oCACX,UAAU,iBACV,OAAO,kCAA6B;qBAWzB,0BAA2B,UAAU,SAChD,UAAU,KACV,UAAU,iCAAiC,IAC3C,oBACA,UAAU,kCACV,eAAe,cACf,QAAQ,uCAAuC,OAAE"}
|
|
@@ -146,11 +146,12 @@ const chunkExternalMessages = (callbackResults, joinStrategy) => {
|
|
|
146
146
|
pendingNone = false;
|
|
147
147
|
};
|
|
148
148
|
for (const callbackResult of callbackResults) for (const output of callbackResult.outputs) {
|
|
149
|
-
|
|
149
|
+
const isVoice = output.role === "assistant" && output.metadata?.modality === "voice";
|
|
150
|
+
if (pendingNone && output.role !== "tool" || !isAssistant || output.role === "user" || output.role === "system" || isVoice) flush();
|
|
150
151
|
isAssistant = output.role === "assistant" || output.role === "tool";
|
|
151
152
|
if (inputs.at(-1) !== callbackResult.input) inputs.push(callbackResult.input);
|
|
152
153
|
outputs.push(output);
|
|
153
|
-
if (output.role === "assistant" && (output.convertConfig?.joinStrategy === "none" || joinStrategy === "none")) pendingNone = true;
|
|
154
|
+
if (output.role === "assistant" && (isVoice || output.convertConfig?.joinStrategy === "none" || joinStrategy === "none")) pendingNone = true;
|
|
154
155
|
}
|
|
155
156
|
flush();
|
|
156
157
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-message-conversion.js","names":["ReadonlyJSONValue","ToolExecutionStatus","ThreadMessageConverter","ThreadAssistantMessage","ThreadMessage","ToolCallMessagePart","MessageTiming","generateErrorMessageId","isJSONValueEqual","getAutoStatus","isAutoStatus","isBackgroundToolCall","isInterruptedToolCall","isPendingToolCall","bindExternalStoreMessage","FALLBACK_ID_PREFIX","getExternalStoreMessages","symbolInnerMessage","fromThreadMessageLike","ThreadMessageLike","JoinStrategy","ExternalMessageConverterMessage","convertConfig","joinStrategy","role","toolCallId","toolName","result","artifact","isError","messages","ExternalMessageConverterMetadata","toolStatuses","Record","error","cancelledMessageIds","ReadonlySet","messageTiming","ExternalMessageConverterCallback","message","T","metadata","ExternalMessageConverterCallbackResult","input","outputs","ExternalMessageConverterChunk","inputs","Mutable","P","stringifyForError","value","text","Error","String","JSON","stringify","length","slice","toCallbackOutputs","output","Array","isArray","o","valid","content","filter","warnedDroppedToolResults","has","add","console","warn","WeakSet","convertExternalMessageCallback","callback","mergeInnerMessages","existing","incoming","isNaNToolCallId","Number","isNaN","joinExternalMessages","assistantMessage","Omit","Exclude","toolCallIndices","Map","reasoningIndices","toolCallIdx","get","toolCall","type","const","map","c","id","createdAt","status","attachments","unstable_state","undefined","unstable_annotations","unstable_data","steps","custom","timing","modality","submittedFeedback","isOptimistic","part","existingIdx","parentId","partIdx","push","set","unsupportedRole","chunkExternalMessages","callbackResults","results","isAssistant","pendingNone","flush","callbackResult","at","shallowArrayEqual","a","b","i","ExternalMessageChunkConversionCache","generatedFallbackMessages","ExternalMessageConversionCallbackCacheEntry","InternalExternalMessageConversionCache","WeakKey","callbackCache","WeakMap","chunkCache","converterCache","createExternalMessageConversionCache","convertExternalMessageChunk","idx","chunkCount","isRunning","cache","isLast","joined","isCancelled","some","hasInterruptedToolCalls","hasPendingToolCalls","hasBackgroundToolCalls","autoStatus","fallbackId","cachedMessage","reason","updated","newMessage","createErrorAssistantMessage","msg","Date","completeExternalMessageConversion","lastMessage","convertExternalMessages","chunks","key","cached","convertMessages"],"sources":["../../../src/runtime/utils/external-message-conversion.ts"],"sourcesContent":["import type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { ToolExecutionStatus } from \"../../runtimes/tool-invocations/ToolInvocationTracker\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport type {\n ThreadAssistantMessage,\n ThreadMessage,\n ToolCallMessagePart,\n} from \"../../types/message\";\nimport type { MessageTiming } from \"../../types/message\";\nimport { generateErrorMessageId } from \"../../utils/id\";\nimport { isJSONValueEqual } from \"../../utils/json/is-json-equal\";\nimport {\n getAutoStatus,\n isAutoStatus,\n isBackgroundToolCall,\n isInterruptedToolCall,\n isPendingToolCall,\n} from \"./auto-status\";\nimport {\n bindExternalStoreMessage,\n FALLBACK_ID_PREFIX,\n getExternalStoreMessages,\n symbolInnerMessage,\n} from \"./external-store-message\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"./thread-message-like\";\n\nexport type JoinStrategy = \"concat-content\" | \"none\";\n\nexport type ExternalMessageConverterMessage =\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\nexport type ExternalMessageConverterMetadata = {\n readonly toolStatuses?: Record<string, ToolExecutionStatus>;\n readonly error?: ReadonlyJSONValue;\n readonly cancelledMessageIds?: ReadonlySet<string>;\n readonly messageTiming?: Record<string, MessageTiming>;\n};\n\nexport type ExternalMessageConverterCallback<T> = (\n message: T,\n metadata: ExternalMessageConverterMetadata,\n) => ExternalMessageConverterMessage | ExternalMessageConverterMessage[];\n\nexport type ExternalMessageConverterCallbackResult<T> = {\n input: T;\n outputs: ExternalMessageConverterMessage[];\n};\n\nexport type ExternalMessageConverterChunk<T> = {\n inputs: T[];\n outputs: ExternalMessageConverterMessage[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst stringifyForError = (value: unknown) => {\n let text;\n try {\n text = value instanceof Error ? String(value) : JSON.stringify(value);\n } catch {\n /* circular */\n }\n text ??= String(value);\n return text.length > 200 ? `${text.slice(0, 200)}…` : text;\n};\n\nconst toCallbackOutputs = (\n output: ExternalMessageConverterMessage | ExternalMessageConverterMessage[],\n input: unknown,\n): ExternalMessageConverterMessage[] => {\n const outputs = Array.isArray(output) ? output : [output];\n for (const o of outputs) {\n const valid =\n typeof o === \"object\" &&\n o !== null &&\n (o.role === \"tool\" ||\n ((o.role === \"assistant\" || o.role === \"user\" || o.role === \"system\") &&\n (typeof o.content === \"string\" || Array.isArray(o.content))));\n if (!valid)\n throw new Error(\n `External message converter: the converter callback returned an invalid message (${stringifyForError(o)}) for input ${stringifyForError(input)}. Return an empty array to skip a message.`,\n );\n }\n // Providers can emit tool results without a usable id (react-langchain maps\n // a missing tool_call_id to \"\"); converters must not throw on those, so the\n // result is dropped like any other orphaned tool output.\n return outputs.filter((o) => {\n if (o.role !== \"tool\") return true;\n if (typeof o.toolCallId === \"string\" && o.toolCallId.length > 0)\n return true;\n if (!warnedDroppedToolResults.has(o)) {\n warnedDroppedToolResults.add(o);\n console.warn(\n `External message converter: dropping a tool result without a toolCallId (${stringifyForError(o)}) for input ${stringifyForError(input)}.`,\n );\n }\n return false;\n });\n};\n\nconst warnedDroppedToolResults = new WeakSet<object>();\n\nexport const convertExternalMessageCallback = <T>(\n input: T,\n callback: ExternalMessageConverterCallback<T>,\n metadata: ExternalMessageConverterMetadata,\n): ExternalMessageConverterCallbackResult<T> => ({\n input,\n outputs: toCallbackOutputs(callback(input, metadata), input),\n});\n\nconst mergeInnerMessages = (existing: object, incoming: object) => ({\n [symbolInnerMessage]: [\n ...((existing as any)[symbolInnerMessage] ?? []),\n ...((incoming as any)[symbolInnerMessage] ?? []),\n ],\n});\n\nconst isNaNToolCallId = (toolCallId: unknown) =>\n typeof toolCallId === \"number\" && Number.isNaN(toolCallId);\n\nexport const joinExternalMessages = (\n messages: readonly ExternalMessageConverterMessage[],\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 const toolCallIndices = new Map<unknown, number>();\n const reasoningIndices = new Map<string, number>();\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = !isNaNToolCallId(output.toolCallId)\n ? (toolCallIndices.get(output.toolCallId) ?? -1)\n : -1;\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 != null) {\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\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state !== undefined) {\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.modality) {\n assistantMessage.metadata.modality = output.metadata.modality;\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 // TODO keep this in sync with ThreadMessageLike[\"metadata\"] / fromThreadMessageLike\n }\n\n // Add content parts, merging reasoning parts with same parentId\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const existingIdx = toolCallIndices.get(part.toolCallId);\n if (existingIdx !== undefined) {\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 = reasoningIndices.get(part.parentId);\n if (existingIdx !== undefined) {\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 const partIdx = assistantMessage.content.length;\n assistantMessage.content.push(part);\n if (\n part.type === \"tool-call\" &&\n !isNaNToolCallId(part.toolCallId) &&\n !toolCallIndices.has(part.toolCallId)\n ) {\n toolCallIndices.set(part.toolCallId, partIdx);\n } else if (\n part.type === \"reasoning\" &&\n \"parentId\" in part &&\n part.parentId\n ) {\n reasoningIndices.set(part.parentId, partIdx);\n }\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\nexport const chunkExternalMessages = <T>(\n callbackResults: ExternalMessageConverterCallbackResult<T>[],\n joinStrategy?: JoinStrategy,\n) => {\n const results: ExternalMessageConverterChunk<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: ExternalMessageConverterMessage[] = [];\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\nexport const shallowArrayEqual = (\n a: readonly unknown[],\n b: readonly unknown[],\n) => {\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\ntype ExternalMessageChunkConversionCache = {\n message: ThreadMessage | undefined;\n generatedFallbackMessages: WeakSet<object>;\n};\n\ntype ExternalMessageConversionCallbackCacheEntry<T> =\n ExternalMessageConverterCallbackResult<T> & {\n metadata: ExternalMessageConverterMetadata;\n callback: ExternalMessageConverterCallback<T>;\n };\n\nexport type InternalExternalMessageConversionCache<\n T extends WeakKey = WeakKey,\n> = {\n callbackCache: WeakMap<T, ExternalMessageConversionCallbackCacheEntry<T>>;\n chunkCache: WeakMap<\n ExternalMessageConverterMessage,\n ExternalMessageConverterChunk<T>\n >;\n converterCache: ThreadMessageConverter;\n // Generatedness is tracked by identity, not by id shape: a caller-supplied id that happens to match the generated pattern must never be rewritten.\n generatedFallbackMessages: WeakSet<object>;\n};\n\nexport const createExternalMessageConversionCache = <\n T extends WeakKey = WeakKey,\n>(): InternalExternalMessageConversionCache<T> => ({\n callbackCache: new WeakMap(),\n chunkCache: new WeakMap(),\n converterCache: new ThreadMessageConverter(),\n generatedFallbackMessages: new WeakSet(),\n});\n\nexport const convertExternalMessageChunk = <T>(\n message: ExternalMessageConverterChunk<T>,\n idx: number,\n chunkCount: number,\n isRunning: boolean,\n error: ReadonlyJSONValue | undefined,\n cache?: ExternalMessageChunkConversionCache,\n cancelledMessageIds?: ReadonlySet<string>,\n) => {\n const isLast = idx === chunkCount - 1;\n const joined = joinExternalMessages(message.outputs);\n const isCancelled =\n cancelledMessageIds !== undefined &&\n message.outputs.some(\n (output) =>\n output.role !== \"tool\" &&\n output.id != null &&\n cancelledMessageIds.has(output.id),\n );\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 hasBackgroundToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isBackgroundToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? error : undefined,\n isCancelled,\n hasBackgroundToolCalls,\n );\n const fallbackId = `${FALLBACK_ID_PREFIX}${idx}`;\n\n const cachedMessage = cache?.message;\n if (\n cachedMessage &&\n (cachedMessage.role !== \"assistant\" ||\n !isAutoStatus(cachedMessage.status) ||\n cachedMessage.status === autoStatus ||\n (cachedMessage.status.type === \"incomplete\" &&\n cachedMessage.status.reason === \"error\" &&\n cachedMessage.status.error !== undefined &&\n autoStatus.type === \"incomplete\" &&\n autoStatus.reason === \"error\" &&\n autoStatus.error !== undefined &&\n (cachedMessage.status.error === autoStatus.error ||\n isJSONValueEqual(cachedMessage.status.error, autoStatus.error))))\n ) {\n const inputs = getExternalStoreMessages<T>(cachedMessage);\n if (shallowArrayEqual(inputs, message.inputs)) {\n // A positional fallback id goes stale when messages are prepended\n // or reordered; serving it unchanged makes two messages collide on\n // one id and the dedup downstream drops one of them.\n if (\n cache.generatedFallbackMessages.has(cachedMessage) &&\n cachedMessage.id !== fallbackId\n ) {\n const updated = { ...cachedMessage, id: fallbackId };\n cache.generatedFallbackMessages.add(updated);\n bindExternalStoreMessage(updated, message.inputs);\n return updated;\n }\n return cachedMessage;\n }\n }\n\n const newMessage = fromThreadMessageLike(joined, fallbackId, autoStatus);\n if (cache && joined.id == null) {\n cache.generatedFallbackMessages.add(newMessage);\n }\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\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 completeExternalMessageConversion = (\n messages: ThreadMessage[],\n error: ReadonlyJSONValue | undefined,\n) => {\n if (error) {\n const lastMessage = messages.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n messages.push(createErrorAssistantMessage(error));\n }\n }\n return messages;\n};\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: ExternalMessageConverterCallback<T>,\n isRunning: boolean,\n metadata: ExternalMessageConverterMetadata,\n joinStrategy?: JoinStrategy,\n cache?: InternalExternalMessageConversionCache<T>,\n) => {\n const callbackResults = messages.map((message) => {\n let result = cache?.callbackCache.get(message);\n if (\n !result ||\n result.metadata !== metadata ||\n result.callback !== callback\n ) {\n result = {\n ...convertExternalMessageCallback(message, callback, metadata),\n metadata,\n callback,\n };\n cache?.callbackCache.set(message, result);\n }\n return result;\n });\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (message) => {\n const key = message.outputs[0];\n if (!key || !cache) return message;\n\n const cached = cache.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, message.outputs)) {\n return cached;\n }\n cache.chunkCache.set(key, message);\n return message;\n },\n );\n const result = cache\n ? cache.converterCache.convertMessages(chunks, (cached, message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n metadata.error,\n {\n message: cached,\n generatedFallbackMessages: cache.generatedFallbackMessages,\n },\n metadata.cancelledMessageIds,\n ),\n )\n : chunks.map((message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n metadata.error,\n undefined,\n metadata.cancelledMessageIds,\n ),\n );\n return completeExternalMessageConversion(result, metadata.error);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"external-message-conversion.js","names":["ReadonlyJSONValue","ToolExecutionStatus","ThreadMessageConverter","ThreadAssistantMessage","ThreadMessage","ToolCallMessagePart","MessageTiming","generateErrorMessageId","isJSONValueEqual","getAutoStatus","isAutoStatus","isBackgroundToolCall","isInterruptedToolCall","isPendingToolCall","bindExternalStoreMessage","FALLBACK_ID_PREFIX","getExternalStoreMessages","symbolInnerMessage","fromThreadMessageLike","ThreadMessageLike","JoinStrategy","ExternalMessageConverterMessage","convertConfig","joinStrategy","role","toolCallId","toolName","result","artifact","isError","messages","ExternalMessageConverterMetadata","toolStatuses","Record","error","cancelledMessageIds","ReadonlySet","messageTiming","ExternalMessageConverterCallback","message","T","metadata","ExternalMessageConverterCallbackResult","input","outputs","ExternalMessageConverterChunk","inputs","Mutable","P","stringifyForError","value","text","Error","String","JSON","stringify","length","slice","toCallbackOutputs","output","Array","isArray","o","valid","content","filter","warnedDroppedToolResults","has","add","console","warn","WeakSet","convertExternalMessageCallback","callback","mergeInnerMessages","existing","incoming","isNaNToolCallId","Number","isNaN","joinExternalMessages","assistantMessage","Omit","Exclude","toolCallIndices","Map","reasoningIndices","toolCallIdx","get","toolCall","type","const","map","c","id","createdAt","status","attachments","unstable_state","undefined","unstable_annotations","unstable_data","steps","custom","timing","modality","submittedFeedback","isOptimistic","part","existingIdx","parentId","partIdx","push","set","unsupportedRole","chunkExternalMessages","callbackResults","results","isAssistant","pendingNone","flush","callbackResult","isVoice","at","shallowArrayEqual","a","b","i","ExternalMessageChunkConversionCache","generatedFallbackMessages","ExternalMessageConversionCallbackCacheEntry","InternalExternalMessageConversionCache","WeakKey","callbackCache","WeakMap","chunkCache","converterCache","createExternalMessageConversionCache","convertExternalMessageChunk","idx","chunkCount","isRunning","cache","isLast","joined","isCancelled","some","hasInterruptedToolCalls","hasPendingToolCalls","hasBackgroundToolCalls","autoStatus","fallbackId","cachedMessage","reason","updated","newMessage","createErrorAssistantMessage","msg","Date","completeExternalMessageConversion","lastMessage","convertExternalMessages","chunks","key","cached","convertMessages"],"sources":["../../../src/runtime/utils/external-message-conversion.ts"],"sourcesContent":["import type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { ToolExecutionStatus } from \"../../runtimes/tool-invocations/ToolInvocationTracker\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport type {\n ThreadAssistantMessage,\n ThreadMessage,\n ToolCallMessagePart,\n} from \"../../types/message\";\nimport type { MessageTiming } from \"../../types/message\";\nimport { generateErrorMessageId } from \"../../utils/id\";\nimport { isJSONValueEqual } from \"../../utils/json/is-json-equal\";\nimport {\n getAutoStatus,\n isAutoStatus,\n isBackgroundToolCall,\n isInterruptedToolCall,\n isPendingToolCall,\n} from \"./auto-status\";\nimport {\n bindExternalStoreMessage,\n FALLBACK_ID_PREFIX,\n getExternalStoreMessages,\n symbolInnerMessage,\n} from \"./external-store-message\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"./thread-message-like\";\n\nexport type JoinStrategy = \"concat-content\" | \"none\";\n\nexport type ExternalMessageConverterMessage =\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\nexport type ExternalMessageConverterMetadata = {\n readonly toolStatuses?: Record<string, ToolExecutionStatus>;\n readonly error?: ReadonlyJSONValue;\n readonly cancelledMessageIds?: ReadonlySet<string>;\n readonly messageTiming?: Record<string, MessageTiming>;\n};\n\nexport type ExternalMessageConverterCallback<T> = (\n message: T,\n metadata: ExternalMessageConverterMetadata,\n) => ExternalMessageConverterMessage | ExternalMessageConverterMessage[];\n\nexport type ExternalMessageConverterCallbackResult<T> = {\n input: T;\n outputs: ExternalMessageConverterMessage[];\n};\n\nexport type ExternalMessageConverterChunk<T> = {\n inputs: T[];\n outputs: ExternalMessageConverterMessage[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst stringifyForError = (value: unknown) => {\n let text;\n try {\n text = value instanceof Error ? String(value) : JSON.stringify(value);\n } catch {\n /* circular */\n }\n text ??= String(value);\n return text.length > 200 ? `${text.slice(0, 200)}…` : text;\n};\n\nconst toCallbackOutputs = (\n output: ExternalMessageConverterMessage | ExternalMessageConverterMessage[],\n input: unknown,\n): ExternalMessageConverterMessage[] => {\n const outputs = Array.isArray(output) ? output : [output];\n for (const o of outputs) {\n const valid =\n typeof o === \"object\" &&\n o !== null &&\n (o.role === \"tool\" ||\n ((o.role === \"assistant\" || o.role === \"user\" || o.role === \"system\") &&\n (typeof o.content === \"string\" || Array.isArray(o.content))));\n if (!valid)\n throw new Error(\n `External message converter: the converter callback returned an invalid message (${stringifyForError(o)}) for input ${stringifyForError(input)}. Return an empty array to skip a message.`,\n );\n }\n // Providers can emit tool results without a usable id (react-langchain maps\n // a missing tool_call_id to \"\"); converters must not throw on those, so the\n // result is dropped like any other orphaned tool output.\n return outputs.filter((o) => {\n if (o.role !== \"tool\") return true;\n if (typeof o.toolCallId === \"string\" && o.toolCallId.length > 0)\n return true;\n if (!warnedDroppedToolResults.has(o)) {\n warnedDroppedToolResults.add(o);\n console.warn(\n `External message converter: dropping a tool result without a toolCallId (${stringifyForError(o)}) for input ${stringifyForError(input)}.`,\n );\n }\n return false;\n });\n};\n\nconst warnedDroppedToolResults = new WeakSet<object>();\n\nexport const convertExternalMessageCallback = <T>(\n input: T,\n callback: ExternalMessageConverterCallback<T>,\n metadata: ExternalMessageConverterMetadata,\n): ExternalMessageConverterCallbackResult<T> => ({\n input,\n outputs: toCallbackOutputs(callback(input, metadata), input),\n});\n\nconst mergeInnerMessages = (existing: object, incoming: object) => ({\n [symbolInnerMessage]: [\n ...((existing as any)[symbolInnerMessage] ?? []),\n ...((incoming as any)[symbolInnerMessage] ?? []),\n ],\n});\n\nconst isNaNToolCallId = (toolCallId: unknown) =>\n typeof toolCallId === \"number\" && Number.isNaN(toolCallId);\n\nexport const joinExternalMessages = (\n messages: readonly ExternalMessageConverterMessage[],\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 const toolCallIndices = new Map<unknown, number>();\n const reasoningIndices = new Map<string, number>();\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = !isNaNToolCallId(output.toolCallId)\n ? (toolCallIndices.get(output.toolCallId) ?? -1)\n : -1;\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 != null) {\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\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state !== undefined) {\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.modality) {\n assistantMessage.metadata.modality = output.metadata.modality;\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 // TODO keep this in sync with ThreadMessageLike[\"metadata\"] / fromThreadMessageLike\n }\n\n // Add content parts, merging reasoning parts with same parentId\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const existingIdx = toolCallIndices.get(part.toolCallId);\n if (existingIdx !== undefined) {\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 = reasoningIndices.get(part.parentId);\n if (existingIdx !== undefined) {\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 const partIdx = assistantMessage.content.length;\n assistantMessage.content.push(part);\n if (\n part.type === \"tool-call\" &&\n !isNaNToolCallId(part.toolCallId) &&\n !toolCallIndices.has(part.toolCallId)\n ) {\n toolCallIndices.set(part.toolCallId, partIdx);\n } else if (\n part.type === \"reasoning\" &&\n \"parentId\" in part &&\n part.parentId\n ) {\n reasoningIndices.set(part.parentId, partIdx);\n }\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\nexport const chunkExternalMessages = <T>(\n callbackResults: ExternalMessageConverterCallbackResult<T>[],\n joinStrategy?: JoinStrategy,\n) => {\n const results: ExternalMessageConverterChunk<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: ExternalMessageConverterMessage[] = [];\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 const isVoice =\n output.role === \"assistant\" && output.metadata?.modality === \"voice\";\n if (\n (pendingNone && output.role !== \"tool\") ||\n !isAssistant ||\n output.role === \"user\" ||\n output.role === \"system\" ||\n isVoice\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 (isVoice ||\n output.convertConfig?.joinStrategy === \"none\" ||\n joinStrategy === \"none\")\n ) {\n pendingNone = true;\n }\n }\n }\n flush();\n return results;\n};\n\nexport const shallowArrayEqual = (\n a: readonly unknown[],\n b: readonly unknown[],\n) => {\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\ntype ExternalMessageChunkConversionCache = {\n message: ThreadMessage | undefined;\n generatedFallbackMessages: WeakSet<object>;\n};\n\ntype ExternalMessageConversionCallbackCacheEntry<T> =\n ExternalMessageConverterCallbackResult<T> & {\n metadata: ExternalMessageConverterMetadata;\n callback: ExternalMessageConverterCallback<T>;\n };\n\nexport type InternalExternalMessageConversionCache<\n T extends WeakKey = WeakKey,\n> = {\n callbackCache: WeakMap<T, ExternalMessageConversionCallbackCacheEntry<T>>;\n chunkCache: WeakMap<\n ExternalMessageConverterMessage,\n ExternalMessageConverterChunk<T>\n >;\n converterCache: ThreadMessageConverter;\n // Generatedness is tracked by identity, not by id shape: a caller-supplied id that happens to match the generated pattern must never be rewritten.\n generatedFallbackMessages: WeakSet<object>;\n};\n\nexport const createExternalMessageConversionCache = <\n T extends WeakKey = WeakKey,\n>(): InternalExternalMessageConversionCache<T> => ({\n callbackCache: new WeakMap(),\n chunkCache: new WeakMap(),\n converterCache: new ThreadMessageConverter(),\n generatedFallbackMessages: new WeakSet(),\n});\n\nexport const convertExternalMessageChunk = <T>(\n message: ExternalMessageConverterChunk<T>,\n idx: number,\n chunkCount: number,\n isRunning: boolean,\n error: ReadonlyJSONValue | undefined,\n cache?: ExternalMessageChunkConversionCache,\n cancelledMessageIds?: ReadonlySet<string>,\n) => {\n const isLast = idx === chunkCount - 1;\n const joined = joinExternalMessages(message.outputs);\n const isCancelled =\n cancelledMessageIds !== undefined &&\n message.outputs.some(\n (output) =>\n output.role !== \"tool\" &&\n output.id != null &&\n cancelledMessageIds.has(output.id),\n );\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 hasBackgroundToolCalls =\n typeof joined.content === \"object\" &&\n joined.content.some(isBackgroundToolCall);\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n hasInterruptedToolCalls,\n hasPendingToolCalls,\n isLast ? error : undefined,\n isCancelled,\n hasBackgroundToolCalls,\n );\n const fallbackId = `${FALLBACK_ID_PREFIX}${idx}`;\n\n const cachedMessage = cache?.message;\n if (\n cachedMessage &&\n (cachedMessage.role !== \"assistant\" ||\n !isAutoStatus(cachedMessage.status) ||\n cachedMessage.status === autoStatus ||\n (cachedMessage.status.type === \"incomplete\" &&\n cachedMessage.status.reason === \"error\" &&\n cachedMessage.status.error !== undefined &&\n autoStatus.type === \"incomplete\" &&\n autoStatus.reason === \"error\" &&\n autoStatus.error !== undefined &&\n (cachedMessage.status.error === autoStatus.error ||\n isJSONValueEqual(cachedMessage.status.error, autoStatus.error))))\n ) {\n const inputs = getExternalStoreMessages<T>(cachedMessage);\n if (shallowArrayEqual(inputs, message.inputs)) {\n // A positional fallback id goes stale when messages are prepended\n // or reordered; serving it unchanged makes two messages collide on\n // one id and the dedup downstream drops one of them.\n if (\n cache.generatedFallbackMessages.has(cachedMessage) &&\n cachedMessage.id !== fallbackId\n ) {\n const updated = { ...cachedMessage, id: fallbackId };\n cache.generatedFallbackMessages.add(updated);\n bindExternalStoreMessage(updated, message.inputs);\n return updated;\n }\n return cachedMessage;\n }\n }\n\n const newMessage = fromThreadMessageLike(joined, fallbackId, autoStatus);\n if (cache && joined.id == null) {\n cache.generatedFallbackMessages.add(newMessage);\n }\n bindExternalStoreMessage(newMessage, message.inputs);\n return newMessage;\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 completeExternalMessageConversion = (\n messages: ThreadMessage[],\n error: ReadonlyJSONValue | undefined,\n) => {\n if (error) {\n const lastMessage = messages.at(-1);\n if (!lastMessage || lastMessage.role !== \"assistant\") {\n messages.push(createErrorAssistantMessage(error));\n }\n }\n return messages;\n};\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: ExternalMessageConverterCallback<T>,\n isRunning: boolean,\n metadata: ExternalMessageConverterMetadata,\n joinStrategy?: JoinStrategy,\n cache?: InternalExternalMessageConversionCache<T>,\n) => {\n const callbackResults = messages.map((message) => {\n let result = cache?.callbackCache.get(message);\n if (\n !result ||\n result.metadata !== metadata ||\n result.callback !== callback\n ) {\n result = {\n ...convertExternalMessageCallback(message, callback, metadata),\n metadata,\n callback,\n };\n cache?.callbackCache.set(message, result);\n }\n return result;\n });\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (message) => {\n const key = message.outputs[0];\n if (!key || !cache) return message;\n\n const cached = cache.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, message.outputs)) {\n return cached;\n }\n cache.chunkCache.set(key, message);\n return message;\n },\n );\n const result = cache\n ? cache.converterCache.convertMessages(chunks, (cached, message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n metadata.error,\n {\n message: cached,\n generatedFallbackMessages: cache.generatedFallbackMessages,\n },\n metadata.cancelledMessageIds,\n ),\n )\n : chunks.map((message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n metadata.error,\n undefined,\n metadata.cancelledMessageIds,\n ),\n );\n return completeExternalMessageConversion(result, metadata.error);\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ThreadMessage } from "../../types/message.js";
|
|
2
2
|
//#region src/runtime/utils/external-store-message.d.ts
|
|
3
|
-
declare const symbolInnerMessage: unique symbol;
|
|
3
|
+
export declare const symbolInnerMessage: unique symbol;
|
|
4
4
|
/**
|
|
5
5
|
* Attach the original external store message(s) to a ThreadMessage or message part.
|
|
6
6
|
* This is a no-op if the target already has a bound message.
|
|
@@ -8,11 +8,10 @@ declare const symbolInnerMessage: unique symbol;
|
|
|
8
8
|
*
|
|
9
9
|
* @deprecated This API is experimental and may change without notice.
|
|
10
10
|
*/
|
|
11
|
-
declare const bindExternalStoreMessage: <T>(target: object, message: T | T[]) => void;
|
|
12
|
-
declare const getExternalStoreMessages: <T>(input: {
|
|
11
|
+
export declare const bindExternalStoreMessage: <T>(target: object, message: T | T[]) => void;
|
|
12
|
+
export declare const getExternalStoreMessages: <T>(input: {
|
|
13
13
|
messages: readonly ThreadMessage[];
|
|
14
14
|
} | ThreadMessage | ThreadMessage["content"][number]) => T[];
|
|
15
|
-
declare const FALLBACK_ID_PREFIX = "__external_store_fallback_";
|
|
15
|
+
export declare const FALLBACK_ID_PREFIX = "__external_store_fallback_";
|
|
16
16
|
//#endregion
|
|
17
|
-
export { FALLBACK_ID_PREFIX, bindExternalStoreMessage, getExternalStoreMessages, symbolInnerMessage };
|
|
18
17
|
//# sourceMappingURL=external-store-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-store-message.d.ts","names":[],"sources":["../../../src/runtime/utils/external-store-message.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"external-store-message.d.ts","names":[],"sources":["../../../src/runtime/utils/external-store-message.ts"],"mappings":";;qBAEa;;;;;;;;qBAiBA,2BAA4B,GACvC,gBACA,SAAS,IAAI;qBAMF,2BAA4B,GACvC;EACM,mBAAmB;IACrB,gBACA,qCAAgC;qBAczB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ThreadMessage } from "../../types/message.js";
|
|
2
2
|
import { ExportedMessageRepository, MessageRepository } from "./message-repository.js";
|
|
3
3
|
//#region src/runtime/utils/message-repository-session.d.ts
|
|
4
|
-
type MessageRepositorySessionOptions = {
|
|
4
|
+
export type MessageRepositorySessionOptions = {
|
|
5
5
|
decorateExport?: (exported: ExportedMessageRepository, repository: MessageRepository) => ExportedMessageRepository;
|
|
6
6
|
};
|
|
7
|
-
declare const createMessageRepositorySession: (options?: MessageRepositorySessionOptions) => {
|
|
7
|
+
export declare const createMessageRepositorySession: (options?: MessageRepositorySessionOptions) => {
|
|
8
8
|
getMessages: () => readonly ThreadMessage[];
|
|
9
9
|
readonly headId: string | null;
|
|
10
10
|
export: () => ExportedMessageRepository;
|
|
@@ -24,7 +24,6 @@ declare const createMessageRepositorySession: (options?: MessageRepositorySessio
|
|
|
24
24
|
updateMessage: (messageId: string, updater: (message: ThreadMessage) => ThreadMessage) => boolean;
|
|
25
25
|
applyExternalMessageRepository: (loaded: ExportedMessageRepository) => void;
|
|
26
26
|
};
|
|
27
|
-
type MessageRepositorySession = ReturnType<typeof createMessageRepositorySession>;
|
|
27
|
+
export type MessageRepositorySession = ReturnType<typeof createMessageRepositorySession>;
|
|
28
28
|
//#endregion
|
|
29
|
-
export { MessageRepositorySession, MessageRepositorySessionOptions, createMessageRepositorySession };
|
|
30
29
|
//# sourceMappingURL=message-repository-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-repository-session.d.ts","names":[],"sources":["../../../src/runtime/utils/message-repository-session.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"message-repository-session.d.ts","names":[],"sources":["../../../src/runtime/utils/message-repository-session.ts"],"mappings":";;;YAMY;EACV,kBACE,UAAU,2BACV,YAAY,sBACT;;qBAGM,iCACX,UAAS;EAKe,4BAAS;;EAsInB,cAAA;EAlIoB,gBAAA;;;;;EASrB,iBAAA,+BACD;EAQmB,aAAA;EAKnB,qBAAA,yBAAa,SACd;EAOE,gBAAA,mBAAM;EAOkB,mBAAA;EAMF,iBAAA;EAKL,YAAA;EAKZ;EAML,gBAAA,mBAAM,UACP,SAAS,kBAAkB;EAW7B,iCAAA,QAAA;;YA8EA,2BAA2B,kBAC9B"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { RunConfig, ThreadMessage } from "../../types/message.js";
|
|
2
2
|
import { ThreadMessageLike } from "./thread-message-like.js";
|
|
3
3
|
//#region src/runtime/utils/message-repository.d.ts
|
|
4
|
-
type ExportedMessageRepositoryItem = {
|
|
4
|
+
export type ExportedMessageRepositoryItem = {
|
|
5
5
|
message: ThreadMessage;
|
|
6
6
|
parentId: string | null;
|
|
7
7
|
runConfig?: RunConfig;
|
|
8
8
|
};
|
|
9
|
-
type ExportedMessageRepository = {
|
|
9
|
+
export type ExportedMessageRepository = {
|
|
10
10
|
headId?: string | null;
|
|
11
11
|
messages: Array<{
|
|
12
12
|
message: ThreadMessage;
|
|
@@ -14,7 +14,7 @@ type ExportedMessageRepository = {
|
|
|
14
14
|
runConfig?: RunConfig;
|
|
15
15
|
}>;
|
|
16
16
|
};
|
|
17
|
-
declare const ExportedMessageRepository: {
|
|
17
|
+
export declare const ExportedMessageRepository: {
|
|
18
18
|
fromArray: (messages: readonly ThreadMessageLike[]) => ExportedMessageRepository;
|
|
19
19
|
fromBranchableArray: (items: readonly {
|
|
20
20
|
message: ThreadMessageLike;
|
|
@@ -23,7 +23,7 @@ declare const ExportedMessageRepository: {
|
|
|
23
23
|
headId?: string | null;
|
|
24
24
|
}) => ExportedMessageRepository;
|
|
25
25
|
};
|
|
26
|
-
declare class MessageRepository {
|
|
26
|
+
export declare class MessageRepository {
|
|
27
27
|
private messages;
|
|
28
28
|
private head;
|
|
29
29
|
private root;
|
|
@@ -58,5 +58,4 @@ declare class MessageRepository {
|
|
|
58
58
|
import({ headId, messages }: ExportedMessageRepository): void;
|
|
59
59
|
}
|
|
60
60
|
//#endregion
|
|
61
|
-
export { ExportedMessageRepository, ExportedMessageRepositoryItem, MessageRepository };
|
|
62
61
|
//# sourceMappingURL=message-repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-repository.d.ts","names":[],"sources":["../../../src/runtime/utils/message-repository.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"message-repository.d.ts","names":[],"sources":["../../../src/runtime/utils/message-repository.ts"],"mappings":";;;YAOY;EACV,SAAS;EACT;EACA,YAAY;;YAGF;EACV;EACA,UAAU;IACR,SAAS;IACT;IACA,YAAY;;;qBAIH;EAEC,YAAA,mBAAS,wBAClB;EAkBM,sBAAA;IACL,SAAS;IACT;OACC;IACS;QACX;;qBAgEQ;UACH;UACA;UACA;UAKA;UAgBA;UAUA;UAgEA;MAQJ;MAIA;EAUJ,YAAY,2BAAe;EAuB3B,mBAAmB,yBAAyB,SAAS;EAiCrD,WAAW;;;;;EAcX,cAAc,mBAAmB;EAsCjC,YAAY;;;;;;;;;UAmBJ;EA+BR,eAAe;EAiBf,UAAU;EAuCV;EAUA,UAAU;EAgCV,SAAS,QAAQ,YAAY"}
|
|
@@ -4,8 +4,8 @@ type PendingToolCallMessage<TToolCall> = {
|
|
|
4
4
|
} | {
|
|
5
5
|
toolCallId: string;
|
|
6
6
|
} | undefined;
|
|
7
|
-
declare const scanPendingToolCalls: <TMessage, TToolCall>(messages: readonly TMessage[], getMessage: (message: TMessage) => PendingToolCallMessage<TToolCall>, getToolCallId: (toolCall: TToolCall) => string) => TToolCall[];
|
|
8
|
-
declare const createToolCallCancellationStub: (toolCall: {
|
|
7
|
+
export declare const scanPendingToolCalls: <TMessage, TToolCall>(messages: readonly TMessage[], getMessage: (message: TMessage) => PendingToolCallMessage<TToolCall>, getToolCallId: (toolCall: TToolCall) => string) => TToolCall[];
|
|
8
|
+
export declare const createToolCallCancellationStub: (toolCall: {
|
|
9
9
|
readonly id: string;
|
|
10
10
|
readonly name: string;
|
|
11
11
|
}) => {
|
|
@@ -16,5 +16,4 @@ declare const createToolCallCancellationStub: (toolCall: {
|
|
|
16
16
|
status: "error";
|
|
17
17
|
};
|
|
18
18
|
//#endregion
|
|
19
|
-
export { createToolCallCancellationStub, scanPendingToolCalls };
|
|
20
19
|
//# sourceMappingURL=pending-tool-calls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-tool-calls.d.ts","names":[],"sources":["../../../src/runtime/utils/pending-tool-calls.ts"],"mappings":";KAAK,uBAAuB;EACtB,oBAAoB;;EACpB;;
|
|
1
|
+
{"version":3,"file":"pending-tool-calls.d.ts","names":[],"sources":["../../../src/runtime/utils/pending-tool-calls.ts"],"mappings":";KAAK,uBAAuB;EACtB,oBAAoB;;EACpB;;qBAGO,uBAAwB,UAAU,WAC7C,mBAAmB,YACnB,aAAa,SAAS,aAAa,uBAAuB,YAC1D,gBAAgB,UAAU,yBACzB;qBAgBU,iCAAkC;WACpC;WACA"}
|
|
@@ -6,12 +6,11 @@ import { RespondToToolApprovalOptions } from "../interfaces/thread-runtime-core.
|
|
|
6
6
|
* free-form answer) against the approval's request shape into the
|
|
7
7
|
* runtime-facing decision shape.
|
|
8
8
|
*/
|
|
9
|
-
declare const resolveToolApprovalResponse: (approval: {
|
|
9
|
+
export declare const resolveToolApprovalResponse: (approval: {
|
|
10
10
|
readonly id: string;
|
|
11
11
|
readonly display?: ToolApprovalDisplay;
|
|
12
12
|
readonly allowFreeform?: boolean;
|
|
13
13
|
readonly options?: readonly ToolApprovalOption[];
|
|
14
14
|
}, response: ToolApprovalResponse) => RespondToToolApprovalOptions;
|
|
15
15
|
//#endregion
|
|
16
|
-
export { resolveToolApprovalResponse };
|
|
17
16
|
//# sourceMappingURL=resolveToolApprovalResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveToolApprovalResponse.d.ts","names":[],"sources":["../../../src/runtime/utils/resolveToolApprovalResponse.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"resolveToolApprovalResponse.d.ts","names":[],"sources":["../../../src/runtime/utils/resolveToolApprovalResponse.ts"],"mappings":";;;;;;;;qBAoBa,8BACX;WACW;WACA,UAAU;WACV;WACA,mBAAmB;GAE9B,UAAU,yBACT"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/runtime/utils/runtime-extras-brand.d.ts
|
|
2
2
|
/** @deprecated Internal API for external-store adapter authors. Not part of the public API; may change or be removed without notice. */
|
|
3
|
-
type RuntimeExtrasBrand<T extends object> = {
|
|
3
|
+
export type RuntimeExtrasBrand<T extends object> = {
|
|
4
4
|
provide: (value: T) => T;
|
|
5
5
|
is: (extras: unknown) => extras is T;
|
|
6
6
|
tryGet: (extras: unknown) => T | undefined;
|
|
@@ -15,7 +15,6 @@ type RuntimeExtrasBrand<T extends object> = {
|
|
|
15
15
|
*
|
|
16
16
|
* @deprecated Internal API for external-store adapter authors. Not part of the public API; may change or be removed without notice.
|
|
17
17
|
*/
|
|
18
|
-
declare const createRuntimeExtrasBrand: <T extends object>(runtimeName: string) => RuntimeExtrasBrand<T>;
|
|
18
|
+
export declare const createRuntimeExtrasBrand: <T extends object>(runtimeName: string) => RuntimeExtrasBrand<T>;
|
|
19
19
|
//#endregion
|
|
20
|
-
export { RuntimeExtrasBrand, createRuntimeExtrasBrand };
|
|
21
20
|
//# sourceMappingURL=runtime-extras-brand.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-extras-brand.d.ts","names":[],"sources":["../../../src/runtime/utils/runtime-extras-brand.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"runtime-extras-brand.d.ts","names":[],"sources":["../../../src/runtime/utils/runtime-extras-brand.ts"],"mappings":";;YACY,mBAAmB;EAC7B,UAAU,OAAO,MAAM;EACvB,KAAK,oBAAoB,UAAU;EACnC,SAAS,oBAAoB;EAC7B,SAAS,oBAAoB;;;;;;;;;;;qBAYlB,2BAA4B,kBACvC,wBACC,mBAAmB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ThreadMessage } from "../../types/message.js";
|
|
2
|
+
import { CompleteAttachment } from "../../types/attachment.js";
|
|
3
|
+
//#region src/runtime/utils/stored-message-parts.d.ts
|
|
4
|
+
export declare const MAX_STORED_MESSAGE_DEPTH = 100;
|
|
5
|
+
export type StoredMessagePart = Record<string, unknown> & {
|
|
6
|
+
type: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const parseStoredDate: (value: unknown) => Date | null;
|
|
9
|
+
export declare const isStoredMessageRole: (value: unknown) => value is ThreadMessage["role"];
|
|
10
|
+
export declare const isStoredMessagePart: (value: unknown) => value is StoredMessagePart;
|
|
11
|
+
/**
|
|
12
|
+
* `fromThreadMessageLike` converts each part through its role's branch and
|
|
13
|
+
* throws on a part that branch does not carry, which would cost the whole
|
|
14
|
+
* stored row. The aui/v0 boundary decodes through that converter, so it filters
|
|
15
|
+
* by role as well as by shape. A part type unknown to this table is left to the
|
|
16
|
+
* boundary predicate, which keeps the `data-` prefixes the converter handles.
|
|
17
|
+
*/
|
|
18
|
+
export declare const isStoredAuiV0RolePart: (role: ThreadMessage["role"], value: unknown) => value is StoredMessagePart;
|
|
19
|
+
export declare const parseStoredAttachment: (value: unknown, isPart: (value: unknown) => value is StoredMessagePart) => CompleteAttachment | null;
|
|
20
|
+
//#endregion
|
|
21
|
+
//# sourceMappingURL=stored-message-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stored-message-parts.d.ts","names":[],"sources":["../../../src/runtime/utils/stored-message-parts.ts"],"mappings":";;;qBAQa;YAID,oBAAoB;EAA4B;;qBAE/C,kBAAmB,mBAAiB;qBAQpC,sBACX,mBACC,SAAS;qBAiEC,sBAAmB,mBARL,SAAS;;;;;;;;qBA4DvB,wBACX,MAAM,uBACN,mBACC,SAAS;qBASC,wBACX,gBACA,SAAS,mBAAmB,SAAS,sBACpC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { isRecord } from "../../utils/json/is-json.js";
|
|
2
|
+
//#region src/runtime/utils/stored-message-parts.ts
|
|
3
|
+
const MAX_STORED_MESSAGE_DEPTH = 100;
|
|
4
|
+
const parseStoredDate = (value) => {
|
|
5
|
+
if (value instanceof Date && !Number.isNaN(value.getTime())) return value;
|
|
6
|
+
if (typeof value !== "string" && typeof value !== "number") return null;
|
|
7
|
+
const date = new Date(value);
|
|
8
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
9
|
+
};
|
|
10
|
+
const isStoredMessageRole = (value) => value === "system" || value === "user" || value === "assistant";
|
|
11
|
+
/**
|
|
12
|
+
* Builds the readability predicate for a persistence boundary. A stored part is
|
|
13
|
+
* readable when it passes the guard for its known type, or when its type is
|
|
14
|
+
* unknown and the boundary can still read it.
|
|
15
|
+
*
|
|
16
|
+
* Unknown types are where the boundaries part: local storage hands its rows to
|
|
17
|
+
* the runtime untouched, so a type written by a newer release still loads,
|
|
18
|
+
* while the aui/v0 decoder converts a `data-` prefix and throws on anything
|
|
19
|
+
* else unknown. Per-type differences ride in `overrides`.
|
|
20
|
+
*/
|
|
21
|
+
const makeIsStoredMessagePart = (overrides, isReadableUnknownType) => {
|
|
22
|
+
const guards = {
|
|
23
|
+
text: (part) => typeof part.text === "string",
|
|
24
|
+
reasoning: (part) => typeof part.text === "string" || typeof part.unstable_summary === "string",
|
|
25
|
+
image: (part) => typeof part.image === "string",
|
|
26
|
+
file: (part) => typeof part.data === "string" && typeof part.mimeType === "string",
|
|
27
|
+
audio: (part) => isRecord(part.audio) && typeof part.audio.data === "string" && typeof part.audio.format === "string",
|
|
28
|
+
data: (part) => typeof part.name === "string",
|
|
29
|
+
source: (part) => typeof part.id === "string" && (part.sourceType === "url" ? typeof part.url === "string" : part.sourceType === "document" && typeof part.title === "string" && typeof part.mediaType === "string"),
|
|
30
|
+
"generative-ui": (part) => isRecord(part.spec),
|
|
31
|
+
"tool-call": (part) => typeof part.toolCallId === "string" && typeof part.toolName === "string" && isRecord(part.args) && typeof part.argsText === "string",
|
|
32
|
+
...overrides
|
|
33
|
+
};
|
|
34
|
+
return (value) => isRecord(value) && typeof value.type === "string" && (Object.hasOwn(guards, value.type) ? guards[value.type](value) : isReadableUnknownType(value.type));
|
|
35
|
+
};
|
|
36
|
+
const isStoredMessagePart = makeIsStoredMessagePart({}, () => true);
|
|
37
|
+
/**
|
|
38
|
+
* The aui/v0 decoder dereferences each present field rather than reading only
|
|
39
|
+
* the one it needs, so this boundary checks every field it will touch, while
|
|
40
|
+
* local storage stays no stricter than what the runtime itself writes.
|
|
41
|
+
*/
|
|
42
|
+
const isStoredAuiV0Part = makeIsStoredMessagePart({
|
|
43
|
+
reasoning: (part) => (part.text === void 0 || typeof part.text === "string") && (part.unstable_summary === void 0 || typeof part.unstable_summary === "string") && (typeof part.text === "string" || typeof part.unstable_summary === "string"),
|
|
44
|
+
"tool-call": (part) => typeof part.toolCallId === "string" && typeof part.toolName === "string" && (part.args === void 0 || isRecord(part.args)) && (part.argsText === void 0 || typeof part.argsText === "string") && (part.args !== void 0 || part.argsText !== void 0)
|
|
45
|
+
}, (type) => type.startsWith("data-"));
|
|
46
|
+
const rolePartTypes = {
|
|
47
|
+
user: {
|
|
48
|
+
text: true,
|
|
49
|
+
image: true,
|
|
50
|
+
file: true,
|
|
51
|
+
data: true,
|
|
52
|
+
audio: true
|
|
53
|
+
},
|
|
54
|
+
assistant: {
|
|
55
|
+
text: true,
|
|
56
|
+
reasoning: true,
|
|
57
|
+
"tool-call": true,
|
|
58
|
+
source: true,
|
|
59
|
+
file: true,
|
|
60
|
+
image: true,
|
|
61
|
+
data: true,
|
|
62
|
+
"generative-ui": true
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* `fromThreadMessageLike` converts each part through its role's branch and
|
|
67
|
+
* throws on a part that branch does not carry, which would cost the whole
|
|
68
|
+
* stored row. The aui/v0 boundary decodes through that converter, so it filters
|
|
69
|
+
* by role as well as by shape. A part type unknown to this table is left to the
|
|
70
|
+
* boundary predicate, which keeps the `data-` prefixes the converter handles.
|
|
71
|
+
*/
|
|
72
|
+
const isStoredAuiV0RolePart = (role, value) => isStoredAuiV0Part(value) && (role === "system" ? value.type === "text" : Object.hasOwn(rolePartTypes.assistant, value.type) || Object.hasOwn(rolePartTypes.user, value.type) ? Object.hasOwn(rolePartTypes[role], value.type) : true);
|
|
73
|
+
const parseStoredAttachment = (value, isPart) => {
|
|
74
|
+
if (!isRecord(value) || typeof value.id !== "string" || typeof value.type !== "string" || typeof value.name !== "string" || !isRecord(value.status) || value.status.type !== "complete" || !Array.isArray(value.content)) return null;
|
|
75
|
+
return {
|
|
76
|
+
...value,
|
|
77
|
+
content: value.content.filter(isPart)
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
//#endregion
|
|
81
|
+
export { MAX_STORED_MESSAGE_DEPTH, isStoredAuiV0RolePart, isStoredMessagePart, isStoredMessageRole, parseStoredAttachment, parseStoredDate };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=stored-message-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stored-message-parts.js","names":["CompleteAttachment","ThreadAssistantMessagePart","ThreadMessage","ThreadUserMessagePart","isRecord","MAX_STORED_MESSAGE_DEPTH","StoredPartGuard","part","Record","StoredMessagePart","type","parseStoredDate","value","Date","Number","isNaN","getTime","date","isStoredMessageRole","makeIsStoredMessagePart","overrides","Partial","isReadableUnknownType","storedPartGuards","text","reasoning","unstable_summary","image","file","data","mimeType","audio","format","name","source","id","sourceType","url","title","mediaType","spec","toolCallId","toolName","args","argsText","guards","Object","hasOwn","isStoredMessagePart","isStoredAuiV0Part","undefined","startsWith","rolePartTypes","user","assistant","isStoredAuiV0RolePart","role","parseStoredAttachment","isPart","status","Array","isArray","content","filter"],"sources":["../../../src/runtime/utils/stored-message-parts.ts"],"sourcesContent":["import type { CompleteAttachment } from \"../../types/attachment\";\nimport type {\n ThreadAssistantMessagePart,\n ThreadMessage,\n ThreadUserMessagePart,\n} from \"../../types/message\";\nimport { isRecord } from \"../../utils/json/is-json\";\n\nexport const MAX_STORED_MESSAGE_DEPTH = 100;\n\ntype StoredPartGuard = (part: Record<string, unknown>) => boolean;\n\nexport type StoredMessagePart = Record<string, unknown> & { type: string };\n\nexport const parseStoredDate = (value: unknown): Date | null => {\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value;\n if (typeof value !== \"string\" && typeof value !== \"number\") return null;\n\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\nexport const isStoredMessageRole = (\n value: unknown,\n): value is ThreadMessage[\"role\"] =>\n value === \"system\" || value === \"user\" || value === \"assistant\";\n\n/**\n * Builds the readability predicate for a persistence boundary. A stored part is\n * readable when it passes the guard for its known type, or when its type is\n * unknown and the boundary can still read it.\n *\n * Unknown types are where the boundaries part: local storage hands its rows to\n * the runtime untouched, so a type written by a newer release still loads,\n * while the aui/v0 decoder converts a `data-` prefix and throws on anything\n * else unknown. Per-type differences ride in `overrides`.\n */\nconst makeIsStoredMessagePart = (\n overrides: Partial<\n Record<\n (ThreadUserMessagePart | ThreadAssistantMessagePart)[\"type\"],\n StoredPartGuard\n >\n >,\n isReadableUnknownType: (type: string) => boolean,\n) => {\n const storedPartGuards = {\n text: (part) => typeof part.text === \"string\",\n reasoning: (part) =>\n typeof part.text === \"string\" ||\n typeof part.unstable_summary === \"string\",\n image: (part) => typeof part.image === \"string\",\n file: (part) =>\n typeof part.data === \"string\" && typeof part.mimeType === \"string\",\n audio: (part) =>\n isRecord(part.audio) &&\n typeof part.audio.data === \"string\" &&\n typeof part.audio.format === \"string\",\n data: (part) => typeof part.name === \"string\",\n source: (part) =>\n typeof part.id === \"string\" &&\n (part.sourceType === \"url\"\n ? typeof part.url === \"string\"\n : part.sourceType === \"document\" &&\n typeof part.title === \"string\" &&\n typeof part.mediaType === \"string\"),\n \"generative-ui\": (part) => isRecord(part.spec),\n \"tool-call\": (part) =>\n typeof part.toolCallId === \"string\" &&\n typeof part.toolName === \"string\" &&\n isRecord(part.args) &&\n typeof part.argsText === \"string\",\n } satisfies Record<\n (ThreadUserMessagePart | ThreadAssistantMessagePart)[\"type\"],\n StoredPartGuard\n >;\n const guards: Record<string, StoredPartGuard> = {\n ...storedPartGuards,\n ...overrides,\n };\n\n return (value: unknown): value is StoredMessagePart =>\n isRecord(value) &&\n typeof value.type === \"string\" &&\n (Object.hasOwn(guards, value.type)\n ? guards[value.type]!(value)\n : isReadableUnknownType(value.type));\n};\n\nexport const isStoredMessagePart = makeIsStoredMessagePart({}, () => true);\n\n/**\n * The aui/v0 decoder dereferences each present field rather than reading only\n * the one it needs, so this boundary checks every field it will touch, while\n * local storage stays no stricter than what the runtime itself writes.\n */\nconst isStoredAuiV0Part = makeIsStoredMessagePart(\n {\n reasoning: (part) =>\n (part.text === undefined || typeof part.text === \"string\") &&\n (part.unstable_summary === undefined ||\n typeof part.unstable_summary === \"string\") &&\n (typeof part.text === \"string\" ||\n typeof part.unstable_summary === \"string\"),\n \"tool-call\": (part) =>\n typeof part.toolCallId === \"string\" &&\n typeof part.toolName === \"string\" &&\n (part.args === undefined || isRecord(part.args)) &&\n (part.argsText === undefined || typeof part.argsText === \"string\") &&\n (part.args !== undefined || part.argsText !== undefined),\n },\n (type) => type.startsWith(\"data-\"),\n);\n\nconst rolePartTypes = {\n user: {\n text: true,\n image: true,\n file: true,\n data: true,\n audio: true,\n } satisfies Record<ThreadUserMessagePart[\"type\"], true>,\n assistant: {\n text: true,\n reasoning: true,\n \"tool-call\": true,\n source: true,\n file: true,\n image: true,\n data: true,\n \"generative-ui\": true,\n } satisfies Record<ThreadAssistantMessagePart[\"type\"], true>,\n};\n\n/**\n * `fromThreadMessageLike` converts each part through its role's branch and\n * throws on a part that branch does not carry, which would cost the whole\n * stored row. The aui/v0 boundary decodes through that converter, so it filters\n * by role as well as by shape. A part type unknown to this table is left to the\n * boundary predicate, which keeps the `data-` prefixes the converter handles.\n */\nexport const isStoredAuiV0RolePart = (\n role: ThreadMessage[\"role\"],\n value: unknown,\n): value is StoredMessagePart =>\n isStoredAuiV0Part(value) &&\n (role === \"system\"\n ? value.type === \"text\"\n : Object.hasOwn(rolePartTypes.assistant, value.type) ||\n Object.hasOwn(rolePartTypes.user, value.type)\n ? Object.hasOwn(rolePartTypes[role], value.type)\n : true);\n\nexport const parseStoredAttachment = (\n value: unknown,\n isPart: (value: unknown) => value is StoredMessagePart,\n): CompleteAttachment | null => {\n if (\n !isRecord(value) ||\n typeof value.id !== \"string\" ||\n typeof value.type !== \"string\" ||\n typeof value.name !== \"string\" ||\n !isRecord(value.status) ||\n value.status.type !== \"complete\" ||\n !Array.isArray(value.content)\n ) {\n return null;\n }\n\n return {\n ...value,\n content: value.content.filter(isPart),\n } as CompleteAttachment;\n};\n"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { MessageTiming } from "../../types/message.js";
|
|
|
6
6
|
* provides three pure functions over its own message type; the timing state
|
|
7
7
|
* machine itself lives once in core.
|
|
8
8
|
*/
|
|
9
|
-
type StreamingTimingAccessors<TMessage> = {
|
|
9
|
+
export type StreamingTimingAccessors<TMessage> = {
|
|
10
10
|
/** Resolve the id of the last assistant message, or `undefined` if none. */
|
|
11
11
|
readonly getAssistantMessageId: (messages: readonly TMessage[]) => string | undefined;
|
|
12
12
|
/** Total text length (incl. reasoning/thinking) of the assistant message. */
|
|
@@ -14,7 +14,7 @@ type StreamingTimingAccessors<TMessage> = {
|
|
|
14
14
|
/** Number of tool calls recorded on the assistant message. */
|
|
15
15
|
readonly getToolCallCount: (messages: readonly TMessage[], messageId: string) => number;
|
|
16
16
|
};
|
|
17
|
-
type StreamingTimingOptions = {
|
|
17
|
+
export type StreamingTimingOptions = {
|
|
18
18
|
/**
|
|
19
19
|
* Estimate token count from a text length. Defaults to `Math.ceil(n / 4)`.
|
|
20
20
|
* Adapters with real usage data can override this.
|
|
@@ -31,7 +31,7 @@ type StreamingTimingOptions = {
|
|
|
31
31
|
* transition is reconciled at finalize, so `totalChunks` and the token
|
|
32
32
|
* estimate (derived from final length) count the same content.
|
|
33
33
|
*/
|
|
34
|
-
type StreamingTimingState = {
|
|
34
|
+
export type StreamingTimingState = {
|
|
35
35
|
readonly messageId: string;
|
|
36
36
|
readonly startTime: number;
|
|
37
37
|
readonly firstTokenTime?: number;
|
|
@@ -52,10 +52,9 @@ type StreamingTimingState = {
|
|
|
52
52
|
* `totalChunks` count the same content (the per-adapter hooks this replaces
|
|
53
53
|
* reuse a stale growth delta and miss that last chunk).
|
|
54
54
|
*/
|
|
55
|
-
declare const stepStreamingTiming: <TMessage>(state: StreamingTimingState | null, messages: readonly TMessage[], isRunning: boolean, accessors: StreamingTimingAccessors<TMessage>, options: StreamingTimingOptions | undefined, now?: () => number) => {
|
|
55
|
+
export declare const stepStreamingTiming: <TMessage>(state: StreamingTimingState | null, messages: readonly TMessage[], isRunning: boolean, accessors: StreamingTimingAccessors<TMessage>, options: StreamingTimingOptions | undefined, now?: () => number) => {
|
|
56
56
|
readonly state: StreamingTimingState | null;
|
|
57
57
|
readonly timings: Record<string, MessageTiming>;
|
|
58
58
|
};
|
|
59
59
|
//#endregion
|
|
60
|
-
export { StreamingTimingAccessors, StreamingTimingOptions, StreamingTimingState, stepStreamingTiming };
|
|
61
60
|
//# sourceMappingURL=streaming-timing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-timing.d.ts","names":[],"sources":["../../../src/runtime/utils/streaming-timing.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"streaming-timing.d.ts","names":[],"sources":["../../../src/runtime/utils/streaming-timing.ts"],"mappings":";;;;;;;;YAQY,yBAAyB;;WAE1B,wBACP,mBAAmB;;WAGZ,gBACP,mBAAmB,YACnB;;WAGO,mBACP,mBAAmB,YACnB;;YAIQ;;;;;WAKD,kBAAkB;;;;;;;;;;;;YAajB;WACD;WACA;WACA;WACA;WACA;;;;;;;;;;;;;;;;qBAuCE,sBAAuB,UAClC,OAAO,6BACP,mBAAmB,YACnB,oBACA,WAAW,yBAAyB,WACpC,SAAS,oCACT;WAES,OAAO;WACP,SAAS,eAAe"}
|