@assistant-ui/core 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +9 -10
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +2 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -2
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +2 -2
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/speech.d.ts +6 -7
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +13 -3
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +5 -6
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +10 -7
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -2
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +5 -6
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -2
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts +1 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +26 -11
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -2
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/types.d.ts +5 -6
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +11 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +3 -4
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +1 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +2 -3
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +2 -3
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +8 -9
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +3 -4
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -3
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +43 -19
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -2
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +20 -15
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +3 -4
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +11 -5
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +2 -3
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +3 -2
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -2
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +2 -3
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +3 -2
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +9 -10
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +2 -3
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -4
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +3 -4
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +2 -3
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +9 -10
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -2
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -3
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +1 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +4 -5
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.js +4 -1
- package/dist/react/model-context/useInteractable.js.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +1 -2
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.js +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +13 -5
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +10 -10
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +4 -4
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +1 -0
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +6 -5
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +2 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -26
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +152 -378
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +51 -18
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +125 -17
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +6 -6
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +4 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +5 -0
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +14 -4
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +26 -61
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +3 -3
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +10 -11
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +4 -5
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +1 -2
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -9
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +6 -0
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -2
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.js +6 -1
- package/dist/react/utils/useJSONEqual.js.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +6 -0
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
- package/dist/react/utils/useJSONSchemaDependency.js +20 -0
- package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
- package/dist/runtime/api/assistant-runtime.d.ts +2 -3
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +6 -7
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/bindings.d.ts +5 -6
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +10 -10
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -4
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +8 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +3 -2
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +6 -7
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -11
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -5
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +46 -10
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +10 -3
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +212 -77
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +23 -16
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +10 -4
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +70 -7
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +2 -3
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +9 -6
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +12 -4
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +26 -15
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +51 -14
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +4 -5
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +3 -4
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +4 -5
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -3
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +83 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +4 -5
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +7 -6
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +4 -2
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +36 -6
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +10 -5
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +57 -10
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -2
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +3 -4
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +256 -211
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -2
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -2
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -2
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +1 -2
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/suggestions.d.ts +3 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +2 -3
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +12 -0
- package/dist/store/clients/thread-tasks.d.ts.map +1 -0
- package/dist/store/clients/thread-tasks.js +69 -0
- package/dist/store/clients/thread-tasks.js.map +1 -0
- package/dist/store/env.d.ts +1 -2
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +3 -2
- package/dist/store/index.js +3 -3
- package/dist/store/primitive-predicates.d.ts +11 -12
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +4 -4
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -2
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +176 -128
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +2 -0
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +4 -5
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +5 -6
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +6 -7
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +6 -6
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +3 -4
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +4 -5
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +4 -4
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +4 -5
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +5 -6
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +35 -0
- package/dist/store/scopes/task.d.ts.map +1 -0
- package/dist/store/scopes/task.js +0 -0
- package/dist/store/scopes/thread-list-item.d.ts +5 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +25 -6
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +4 -5
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +15 -15
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -15
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -10
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +3 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +2 -3
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +8 -9
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/message.d.ts +53 -44
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +1 -2
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -3
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -3
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.js +30 -14
- package/dist/utils/abortable-iterable.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -2
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +6 -7
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +17 -2
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.js +32 -7
- package/dist/utils/getGroupStatus.js.map +1 -1
- package/dist/utils/id.d.ts +3 -4
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +4 -5
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +4 -5
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -3
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -4
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/dist/utils/wire-media.js +2 -2
- package/dist/utils/wire-media.js.map +1 -1
- package/package.json +15 -14
- package/src/adapters/attachment.ts +8 -1
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +236 -0
- package/src/adapters/speech.ts +17 -10
- package/src/adapters/thread-history.ts +3 -0
- package/src/index.ts +1 -0
- package/src/model-context/frame/host.test.ts +113 -1
- package/src/model-context/frame/host.ts +39 -12
- package/src/model-context/frame/provider.test.ts +45 -20
- package/src/model-context/interactable-composer-metadata.test.ts +30 -0
- package/src/model-context/interactable-composer-metadata.ts +10 -10
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +361 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +69 -19
- package/src/react/client/DataRenderers.test.tsx +45 -0
- package/src/react/client/DataRenderers.ts +13 -9
- package/src/react/client/Interactables.test.ts +52 -4
- package/src/react/client/Interactables.ts +7 -1
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.test.ts +46 -7
- package/src/react/client/RemoteThreadList.ts +15 -2
- package/src/react/client/interactable-model-context.test.ts +44 -0
- package/src/react/client/interactable-model-context.ts +3 -2
- package/src/react/index.ts +5 -1
- package/src/react/interactables-legacy/Interactables.test.ts +9 -3
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +150 -0
- package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
- package/src/react/model-context/useInteractable.test.tsx +204 -0
- package/src/react/model-context/useInteractable.ts +3 -0
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -6
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +99 -0
- package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
- package/src/react/primitives/part/PartMessages.test.tsx +104 -1
- package/src/react/primitives/part/PartMessages.tsx +1 -0
- package/src/react/primitives/thread/ThreadMessages.test.tsx +160 -0
- package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
- package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +7 -1
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +323 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +190 -523
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +81 -0
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
- package/src/react/runtimes/cloud/auiV0.ts +281 -26
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +21 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +7 -1
- package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
- package/src/react/runtimes/external-message-converter.test.ts +143 -4
- package/src/react/runtimes/external-message-converter.ts +39 -93
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -2
- package/src/react/utils/groupParts.ts +12 -1
- package/src/react/utils/useJSONEqual.ts +9 -0
- package/src/react/utils/useJSONSchemaDependency.ts +22 -0
- package/src/runtime/api/message-part-runtime.ts +4 -1
- package/src/runtime/api/message-runtime.ts +15 -2
- package/src/runtime/api/thread-runtime.test.ts +58 -0
- package/src/runtime/api/thread-runtime.ts +2 -4
- package/src/runtime/base/base-composer-runtime-core.ts +69 -16
- package/src/runtime/base/base-thread-runtime-core.test.ts +1799 -49
- package/src/runtime/base/base-thread-runtime-core.ts +296 -94
- package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +8 -0
- package/src/runtime/queue/message-queue.ts +79 -7
- package/src/runtime/utils/auto-status.test.ts +112 -1
- package/src/runtime/utils/auto-status.ts +31 -5
- package/src/runtime/utils/external-message-conversion.test.ts +177 -0
- package/src/runtime/utils/external-message-conversion.ts +128 -33
- package/src/runtime/utils/message-repository.test.ts +49 -0
- package/src/runtime/utils/message-repository.ts +3 -3
- package/src/runtime/utils/stored-message-parts.ts +174 -0
- package/src/runtime/utils/thread-message-like.test.ts +52 -0
- package/src/runtime/utils/thread-message-like.ts +11 -2
- package/src/runtimes/external-store/external-store-adapter.ts +4 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +74 -9
- package/src/runtimes/local/local-thread-runtime-core.test.ts +189 -12
- package/src/runtimes/local/local-thread-runtime-core.ts +91 -10
- package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
- package/src/store/clients/external-thread.ts +53 -14
- package/src/store/clients/thread-tasks.test.ts +274 -0
- package/src/store/clients/thread-tasks.ts +138 -0
- package/src/store/index.ts +8 -0
- package/src/store/primitive-predicates.test.ts +64 -5
- package/src/store/primitive-predicates.ts +10 -2
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +31 -1
- package/src/store/scope-registration.ts +2 -0
- package/src/store/scopes/message.ts +4 -1
- package/src/store/scopes/task.ts +34 -0
- package/src/store/scopes/thread.ts +16 -0
- package/src/store/thread-tasks.test.tsx +209 -0
- package/src/subscribable/subscribable.test.ts +161 -1
- package/src/subscribable/subscribable.ts +25 -15
- package/src/tests/MessageRepository.test.ts +1 -5
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +304 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
- package/src/tests/base-composer-runtime-core.test.ts +329 -6
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +22 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +369 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
- package/src/tests/external-thread-attachments.test.tsx +91 -23
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-parity.test.tsx +35 -1
- package/src/tests/groupParts.test.ts +71 -0
- package/src/tests/message-queue.test.ts +290 -2
- package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +45 -1
- package/src/types/index.ts +1 -0
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +23 -7
- package/src/utils/abortable-iterable.test.ts +115 -0
- package/src/utils/abortable-iterable.ts +34 -23
- package/src/utils/getGroupStatus.test.ts +70 -4
- package/src/utils/getGroupStatus.ts +35 -12
- package/src/utils/wire-media.test.ts +10 -0
- package/src/utils/wire-media.ts +6 -2
|
@@ -475,6 +475,17 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
475
475
|
this._messages = messagesSnapshot;
|
|
476
476
|
}
|
|
477
477
|
|
|
478
|
+
if (this._voiceMessages.length > 0) {
|
|
479
|
+
const hostIds = new Set(this._messages.map((message) => message.id));
|
|
480
|
+
const remaining = this._voiceMessages.filter(
|
|
481
|
+
(message) => !hostIds.has(message.id),
|
|
482
|
+
);
|
|
483
|
+
if (remaining.length !== this._voiceMessages.length) {
|
|
484
|
+
this._voiceMessages = remaining;
|
|
485
|
+
this._markVoiceMessagesDirty();
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
478
489
|
if (repositoryChanged) {
|
|
479
490
|
this._runTrackerUpdate(() => this._toolInvocations?.reset());
|
|
480
491
|
}
|
|
@@ -637,21 +648,31 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
637
648
|
}
|
|
638
649
|
|
|
639
650
|
public async append(rawMessage: AppendMessage): Promise<void> {
|
|
651
|
+
let message = {
|
|
652
|
+
...rawMessage,
|
|
653
|
+
parentId: this._resolveAppendParent(rawMessage.parentId),
|
|
654
|
+
};
|
|
655
|
+
if (this.voice)
|
|
656
|
+
throw new Error(
|
|
657
|
+
"Cannot send a text message while a voice session is connected",
|
|
658
|
+
);
|
|
659
|
+
if (this._isVoiceMessage(message.sourceId))
|
|
660
|
+
throw new Error("Voice transcript messages cannot be edited");
|
|
640
661
|
// sourceId marks an edit send; the parent may coincide with the head
|
|
641
662
|
// after a resync (e.g. cancelRun dropped the edited message).
|
|
642
663
|
const isEdit =
|
|
643
|
-
|
|
644
|
-
|
|
664
|
+
message.sourceId != null ||
|
|
665
|
+
message.parentId !== (this._getBaseMessages().at(-1)?.id ?? null);
|
|
645
666
|
|
|
646
667
|
// A transformed-queue send is stamped at flush; any other queue's
|
|
647
668
|
// transform would gate against its own thread's messages, so those stamp
|
|
648
669
|
// at send.
|
|
649
|
-
|
|
670
|
+
message =
|
|
650
671
|
!isEdit &&
|
|
651
672
|
this._store.queue &&
|
|
652
673
|
this._store.queue === this._transformedQueue
|
|
653
|
-
?
|
|
654
|
-
: this.enrichAppendMetadata(
|
|
674
|
+
? message
|
|
675
|
+
: this.enrichAppendMetadata(message);
|
|
655
676
|
|
|
656
677
|
const generation = captureThreadRuntimeGeneration(this);
|
|
657
678
|
this.ensureInitialized();
|
|
@@ -705,6 +726,10 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
705
726
|
}
|
|
706
727
|
}
|
|
707
728
|
|
|
729
|
+
protected override _commitVoiceMessage(message: ThreadMessage): void {
|
|
730
|
+
this._store.onVoiceTranscript?.(message);
|
|
731
|
+
}
|
|
732
|
+
|
|
708
733
|
public async deleteMessage(messageId: string): Promise<void> {
|
|
709
734
|
if (this._store.onDelete) {
|
|
710
735
|
// The host owns deletion here, and it may decline (fail a server call,
|
|
@@ -761,7 +786,14 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
761
786
|
}
|
|
762
787
|
|
|
763
788
|
this.repository.deleteMessage(messageId);
|
|
764
|
-
this.
|
|
789
|
+
this._publishRepositoryMessages();
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
// Notifies even when the visible messages are unchanged: deleting an
|
|
793
|
+
// off-branch message still changes the branch counts subscribers read.
|
|
794
|
+
private _publishRepositoryMessages() {
|
|
795
|
+
const messages = this.repository.getMessages();
|
|
796
|
+
if (!shallowArrayEqual(this._messages, messages)) this._messages = messages;
|
|
765
797
|
this._notifySubscribers();
|
|
766
798
|
}
|
|
767
799
|
|
|
@@ -786,6 +818,10 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
786
818
|
public async startRun(config: StartRunConfig): Promise<void> {
|
|
787
819
|
if (!this._store.onReload)
|
|
788
820
|
throw new Error("Runtime does not support reloading messages.");
|
|
821
|
+
if (this.voice)
|
|
822
|
+
throw new Error("Cannot start a run while a voice session is connected");
|
|
823
|
+
if (this._isVoiceMessage(config.sourceId))
|
|
824
|
+
throw new Error("Voice transcript messages cannot be reloaded");
|
|
789
825
|
|
|
790
826
|
this._pendingDeleteEvictions.clear();
|
|
791
827
|
|
|
@@ -800,6 +836,10 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
800
836
|
public async resumeRun(config: ResumeRunConfig): Promise<void> {
|
|
801
837
|
if (!this._store.onResume)
|
|
802
838
|
throw new Error("Runtime does not support resuming runs.");
|
|
839
|
+
if (this.voice)
|
|
840
|
+
throw new Error("Cannot start a run while a voice session is connected");
|
|
841
|
+
if (this._isVoiceMessage(config.sourceId))
|
|
842
|
+
throw new Error("Voice transcript messages cannot be reloaded");
|
|
803
843
|
|
|
804
844
|
await this._store.onResume(config);
|
|
805
845
|
}
|
|
@@ -892,7 +932,7 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
892
932
|
movedLeaf = { id: trailingUserLeaf.id, draft };
|
|
893
933
|
}
|
|
894
934
|
}
|
|
895
|
-
|
|
935
|
+
this._publishRepositoryMessages();
|
|
896
936
|
|
|
897
937
|
// The resync commits what the cancel left (a kept optimistic message, the
|
|
898
938
|
// restored branch) back to the store a macrotask later. The store may move
|
|
@@ -914,7 +954,8 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
914
954
|
this.composer.retractDraft(movedLeaf.draft);
|
|
915
955
|
}
|
|
916
956
|
}
|
|
917
|
-
this.
|
|
957
|
+
this._publishRepositoryMessages();
|
|
958
|
+
this.updateMessages(this._messages);
|
|
918
959
|
}, 0);
|
|
919
960
|
}
|
|
920
961
|
|
|
@@ -961,8 +1002,32 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
961
1002
|
): Promise<void> {
|
|
962
1003
|
if (!this._store.onRespondToToolApproval)
|
|
963
1004
|
throw new Error("Runtime does not support tool approvals.");
|
|
1005
|
+
const message = this.messages.findLast(
|
|
1006
|
+
(candidate) =>
|
|
1007
|
+
candidate.role === "assistant" &&
|
|
1008
|
+
candidate.content.some(
|
|
1009
|
+
(part) =>
|
|
1010
|
+
part.type === "tool-call" &&
|
|
1011
|
+
part.approval?.id === options.approvalId,
|
|
1012
|
+
),
|
|
1013
|
+
);
|
|
1014
|
+
const toolCall = message?.content.find(
|
|
1015
|
+
(part) =>
|
|
1016
|
+
part.type === "tool-call" && part.approval?.id === options.approvalId,
|
|
1017
|
+
);
|
|
964
1018
|
try {
|
|
965
|
-
return Promise.resolve(this._store.onRespondToToolApproval(options))
|
|
1019
|
+
return Promise.resolve(this._store.onRespondToToolApproval(options)).then(
|
|
1020
|
+
() => {
|
|
1021
|
+
if (message && toolCall?.type === "tool-call") {
|
|
1022
|
+
this._notifyToolApprovalAnswered(
|
|
1023
|
+
message.id,
|
|
1024
|
+
toolCall.toolCallId,
|
|
1025
|
+
toolCall.toolName,
|
|
1026
|
+
options.approved,
|
|
1027
|
+
);
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
);
|
|
966
1031
|
} catch (error) {
|
|
967
1032
|
return Promise.reject(error);
|
|
968
1033
|
}
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
ChatModelRunResult,
|
|
7
7
|
} from "../../runtime/utils/chat-model-adapter";
|
|
8
8
|
import type { AppendMessage, ToolCallMessagePart } from "../../types/message";
|
|
9
|
+
import type { ThreadHistoryAdapter } from "../../adapters/thread-history";
|
|
9
10
|
import type { LocalRuntimeOptionsBase } from "./local-runtime-options";
|
|
10
11
|
import {
|
|
11
12
|
ExportedMessageRepository,
|
|
@@ -407,6 +408,76 @@ describe("LocalThreadRuntimeCore human-in-the-loop tools", () => {
|
|
|
407
408
|
});
|
|
408
409
|
});
|
|
409
410
|
|
|
411
|
+
describe("LocalThreadRuntimeCore addToolResult content", () => {
|
|
412
|
+
it("stores modelContent and forwards it to the resumed adapter", async () => {
|
|
413
|
+
const { thread, runs } = createApprovalThread(toolCallResult("send_email"));
|
|
414
|
+
|
|
415
|
+
await thread.append(userMessage("send an email"));
|
|
416
|
+
await flush();
|
|
417
|
+
|
|
418
|
+
thread.addToolResult({
|
|
419
|
+
messageId: thread.messages.at(-1)!.id,
|
|
420
|
+
toolCallId: "call-send_email",
|
|
421
|
+
toolName: "send_email",
|
|
422
|
+
result: { approved: true },
|
|
423
|
+
isError: false,
|
|
424
|
+
modelContent: [{ type: "text", text: "Email sent." }],
|
|
425
|
+
});
|
|
426
|
+
await flush();
|
|
427
|
+
|
|
428
|
+
const resumedToolCall = runs[1]!
|
|
429
|
+
.unstable_getMessage()
|
|
430
|
+
.content.find((part) => part.type === "tool-call");
|
|
431
|
+
expect(resumedToolCall?.modelContent).toEqual([
|
|
432
|
+
{ type: "text", text: "Email sent." },
|
|
433
|
+
]);
|
|
434
|
+
|
|
435
|
+
const storedToolCall = thread.messages
|
|
436
|
+
.at(-1)!
|
|
437
|
+
.content.find((part) => part.type === "tool-call");
|
|
438
|
+
expect(storedToolCall?.modelContent).toEqual([
|
|
439
|
+
{ type: "text", text: "Email sent." },
|
|
440
|
+
]);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it("keeps a stored artifact when a later result omits it", async () => {
|
|
444
|
+
const { thread } = createApprovalThread(toolCallResult("send_email"));
|
|
445
|
+
|
|
446
|
+
await thread.append(userMessage("send an email"));
|
|
447
|
+
await flush();
|
|
448
|
+
|
|
449
|
+
const messageId = thread.messages.at(-1)!.id;
|
|
450
|
+
thread.addToolResult({
|
|
451
|
+
messageId,
|
|
452
|
+
toolCallId: "call-send_email",
|
|
453
|
+
toolName: "send_email",
|
|
454
|
+
result: { approved: true },
|
|
455
|
+
isError: false,
|
|
456
|
+
artifact: { draftId: "d-1" },
|
|
457
|
+
});
|
|
458
|
+
await flush();
|
|
459
|
+
|
|
460
|
+
thread.addToolResult({
|
|
461
|
+
messageId,
|
|
462
|
+
toolCallId: "call-send_email",
|
|
463
|
+
toolName: "send_email",
|
|
464
|
+
result: { approved: true, sent: true },
|
|
465
|
+
isError: false,
|
|
466
|
+
});
|
|
467
|
+
await flush();
|
|
468
|
+
|
|
469
|
+
const storedToolCall = thread.messages
|
|
470
|
+
.map((message) =>
|
|
471
|
+
message.content.find(
|
|
472
|
+
(part): part is ToolCallMessagePart =>
|
|
473
|
+
part.type === "tool-call" && part.toolCallId === "call-send_email",
|
|
474
|
+
),
|
|
475
|
+
)
|
|
476
|
+
.find((part): part is ToolCallMessagePart => part !== undefined);
|
|
477
|
+
expect(storedToolCall?.artifact).toEqual({ draftId: "d-1" });
|
|
478
|
+
});
|
|
479
|
+
});
|
|
480
|
+
|
|
410
481
|
describe("LocalThreadRuntimeCore state", () => {
|
|
411
482
|
it.each([
|
|
412
483
|
["false", false],
|
|
@@ -427,6 +498,27 @@ describe("LocalThreadRuntimeCore state", () => {
|
|
|
427
498
|
});
|
|
428
499
|
|
|
429
500
|
describe("LocalThreadRuntimeCore tool approvals", () => {
|
|
501
|
+
it("emits a decision with its message and tool call IDs", async () => {
|
|
502
|
+
const { thread } = createApprovalThread(
|
|
503
|
+
toolCallResult("send_email", { id: "a1" }),
|
|
504
|
+
);
|
|
505
|
+
const answered = vi.fn();
|
|
506
|
+
thread.unstable_on("toolApprovalAnswered", answered);
|
|
507
|
+
|
|
508
|
+
await thread.append(userMessage("send an email"));
|
|
509
|
+
await flush();
|
|
510
|
+
const messageId = thread.messages.at(-1)?.id;
|
|
511
|
+
|
|
512
|
+
await thread.respondToToolApproval({ approvalId: "a1", approved: false });
|
|
513
|
+
|
|
514
|
+
expect(answered).toHaveBeenCalledWith({
|
|
515
|
+
messageId,
|
|
516
|
+
toolCallId: "call-send_email",
|
|
517
|
+
toolName: "send_email",
|
|
518
|
+
approved: false,
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
|
|
430
522
|
it("pauses the run while an approval is pending, even for unlisted tools", async () => {
|
|
431
523
|
const { thread, runs } = createApprovalThread(
|
|
432
524
|
toolCallResult("deploy", { id: "a1" }),
|
|
@@ -835,7 +927,7 @@ describe("LocalThreadRuntimeCore cancellation", () => {
|
|
|
835
927
|
const toolCall = thread.messages
|
|
836
928
|
.find((item) => item.id === messageId)
|
|
837
929
|
?.content.find(
|
|
838
|
-
(part) =>
|
|
930
|
+
(part): part is ToolCallMessagePart =>
|
|
839
931
|
part.type === "tool-call" && part.toolCallId === "call-send_email",
|
|
840
932
|
);
|
|
841
933
|
expect(toolCall?.result).toEqual({ approved: true });
|
|
@@ -843,9 +935,10 @@ describe("LocalThreadRuntimeCore cancellation", () => {
|
|
|
843
935
|
|
|
844
936
|
resolveSecond({ content: [{ type: "text", text: "replacement" }] });
|
|
845
937
|
await vi.waitFor(() => {
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
938
|
+
const message = thread.messages.find((item) => item.id === messageId);
|
|
939
|
+
if (message?.role !== "assistant")
|
|
940
|
+
throw new Error("expected assistant message");
|
|
941
|
+
expect(message.status.type).toBe("complete");
|
|
849
942
|
});
|
|
850
943
|
});
|
|
851
944
|
|
|
@@ -894,16 +987,19 @@ describe("LocalThreadRuntimeCore cancellation", () => {
|
|
|
894
987
|
await appendPromise;
|
|
895
988
|
|
|
896
989
|
const message = thread.messages.find((item) => item.id === messageId);
|
|
897
|
-
|
|
898
|
-
(
|
|
990
|
+
if (message?.role !== "assistant")
|
|
991
|
+
throw new Error("expected assistant message");
|
|
992
|
+
const sendEmail = message.content.find(
|
|
993
|
+
(part): part is ToolCallMessagePart =>
|
|
899
994
|
part.type === "tool-call" && part.toolCallId === "call-send_email",
|
|
900
995
|
);
|
|
901
|
-
const deploy = message
|
|
902
|
-
(part)
|
|
996
|
+
const deploy = message.content.find(
|
|
997
|
+
(part): part is ToolCallMessagePart =>
|
|
998
|
+
part.type === "tool-call" && part.toolCallId === "call-deploy",
|
|
903
999
|
);
|
|
904
1000
|
expect(sendEmail?.result).toEqual({ approved: true });
|
|
905
1001
|
expect(deploy?.approval).toEqual({ id: "approval-1" });
|
|
906
|
-
expect(message
|
|
1002
|
+
expect(message.status.type).toBe("requires-action");
|
|
907
1003
|
});
|
|
908
1004
|
|
|
909
1005
|
it("ignores a superseded result after its message is removed", async () => {
|
|
@@ -1830,7 +1926,7 @@ describe("LocalThreadRuntimeCore runs", () => {
|
|
|
1830
1926
|
],
|
|
1831
1927
|
status: { type: "requires-action", reason: "tool-calls" },
|
|
1832
1928
|
metadata: {
|
|
1833
|
-
steps: [{ usage: {
|
|
1929
|
+
steps: [{ usage: { inputTokens: 10, outputTokens: 5 } }],
|
|
1834
1930
|
},
|
|
1835
1931
|
}));
|
|
1836
1932
|
const thread = createPlainThread({ run }, { maxSteps: 1 });
|
|
@@ -1892,7 +1988,7 @@ describe("LocalThreadRuntimeCore runs", () => {
|
|
|
1892
1988
|
run: async () => ({ content: [] }),
|
|
1893
1989
|
};
|
|
1894
1990
|
const thread = createPlainThread(adapter);
|
|
1895
|
-
const load = vi.fn(async () => ({
|
|
1991
|
+
const load = vi.fn<ThreadHistoryAdapter["load"]>(async () => ({
|
|
1896
1992
|
headId: "restored",
|
|
1897
1993
|
messages: [
|
|
1898
1994
|
{
|
|
@@ -1901,6 +1997,7 @@ describe("LocalThreadRuntimeCore runs", () => {
|
|
|
1901
1997
|
id: "restored",
|
|
1902
1998
|
role: "user" as const,
|
|
1903
1999
|
content: [{ type: "text" as const, text: "hello" }],
|
|
2000
|
+
attachments: [],
|
|
1904
2001
|
createdAt: new Date(0),
|
|
1905
2002
|
metadata: { custom: {} },
|
|
1906
2003
|
},
|
|
@@ -1929,7 +2026,7 @@ describe("LocalThreadRuntimeCore runs", () => {
|
|
|
1929
2026
|
run: async () => ({ content: [] }),
|
|
1930
2027
|
};
|
|
1931
2028
|
const thread = createPlainThread(adapter);
|
|
1932
|
-
const load = vi.fn(async () => ({
|
|
2029
|
+
const load = vi.fn<ThreadHistoryAdapter["load"]>(async () => ({
|
|
1933
2030
|
headId: "restored",
|
|
1934
2031
|
messages: [
|
|
1935
2032
|
{
|
|
@@ -1938,6 +2035,7 @@ describe("LocalThreadRuntimeCore runs", () => {
|
|
|
1938
2035
|
id: "restored",
|
|
1939
2036
|
role: "user" as const,
|
|
1940
2037
|
content: [{ type: "text" as const, text: "hello" }],
|
|
2038
|
+
attachments: [],
|
|
1941
2039
|
createdAt: new Date(0),
|
|
1942
2040
|
metadata: { custom: {} },
|
|
1943
2041
|
},
|
|
@@ -2199,3 +2297,82 @@ describe("LocalThreadRuntimeCore imported approvals", () => {
|
|
|
2199
2297
|
expect(thread.messages.at(-1)?.status?.type).toBe("complete");
|
|
2200
2298
|
});
|
|
2201
2299
|
});
|
|
2300
|
+
|
|
2301
|
+
describe("LocalThreadRuntimeCore message queue", () => {
|
|
2302
|
+
const createQueuedThread = () => {
|
|
2303
|
+
const dispatched: string[] = [];
|
|
2304
|
+
let release!: () => void;
|
|
2305
|
+
let gate = new Promise<void>((resolve) => (release = resolve));
|
|
2306
|
+
|
|
2307
|
+
const core = new LocalRuntimeCore(
|
|
2308
|
+
{
|
|
2309
|
+
adapters: {
|
|
2310
|
+
chatModel: {
|
|
2311
|
+
async run(options) {
|
|
2312
|
+
const last = options.messages.at(-1);
|
|
2313
|
+
const text = last?.content
|
|
2314
|
+
.filter((part) => part.type === "text")
|
|
2315
|
+
.map((part) => (part as { text: string }).text)
|
|
2316
|
+
.join("");
|
|
2317
|
+
dispatched.push(text ?? "");
|
|
2318
|
+
await gate;
|
|
2319
|
+
return { content: [{ type: "text", text: "ok" }] };
|
|
2320
|
+
},
|
|
2321
|
+
},
|
|
2322
|
+
},
|
|
2323
|
+
unstable_enableMessageQueue: true,
|
|
2324
|
+
},
|
|
2325
|
+
undefined,
|
|
2326
|
+
);
|
|
2327
|
+
|
|
2328
|
+
// the in-flight run already awaits the current gate, so the next gate has
|
|
2329
|
+
// to be installed before releasing it or the run dispatched next resolves
|
|
2330
|
+
// against an already-settled promise
|
|
2331
|
+
const releaseRun = async () => {
|
|
2332
|
+
const releaseCurrent = release;
|
|
2333
|
+
gate = new Promise<void>((resolve) => (release = resolve));
|
|
2334
|
+
releaseCurrent();
|
|
2335
|
+
await flush();
|
|
2336
|
+
};
|
|
2337
|
+
|
|
2338
|
+
return {
|
|
2339
|
+
thread: core.threads.getMainThreadRuntimeCore(),
|
|
2340
|
+
dispatched,
|
|
2341
|
+
releaseRun,
|
|
2342
|
+
};
|
|
2343
|
+
};
|
|
2344
|
+
|
|
2345
|
+
it("keeps the steer lane for implicit sends during back-to-back queued runs", async () => {
|
|
2346
|
+
const { thread, dispatched, releaseRun } = createQueuedThread();
|
|
2347
|
+
// the queue lane is only taken for a message appended onto the tail
|
|
2348
|
+
const appendToTail = (text: string, steer?: boolean) =>
|
|
2349
|
+
void thread.append({
|
|
2350
|
+
...userMessage(text),
|
|
2351
|
+
parentId: thread.messages.at(-1)?.id ?? null,
|
|
2352
|
+
...(steer !== undefined && { steer }),
|
|
2353
|
+
});
|
|
2354
|
+
|
|
2355
|
+
appendToTail("first");
|
|
2356
|
+
await flush();
|
|
2357
|
+
expect(dispatched).toEqual(["first"]);
|
|
2358
|
+
|
|
2359
|
+
// buffers behind the running dispatch, so releasing "first" dispatches it
|
|
2360
|
+
appendToTail("second", false);
|
|
2361
|
+
await flush();
|
|
2362
|
+
await releaseRun();
|
|
2363
|
+
expect(dispatched).toEqual(["first", "second"]);
|
|
2364
|
+
|
|
2365
|
+
// "second" is a queue-dispatched run in flight, so an implicit send steers
|
|
2366
|
+
// ahead of a bulk item even though it is appended after it
|
|
2367
|
+
appendToTail("bulk", false);
|
|
2368
|
+
appendToTail("implicit");
|
|
2369
|
+
await flush();
|
|
2370
|
+
await releaseRun();
|
|
2371
|
+
|
|
2372
|
+
expect(dispatched).toEqual(["first", "second", "implicit"]);
|
|
2373
|
+
|
|
2374
|
+
await releaseRun();
|
|
2375
|
+
expect(dispatched).toEqual(["first", "second", "implicit", "bulk"]);
|
|
2376
|
+
await releaseRun();
|
|
2377
|
+
});
|
|
2378
|
+
});
|
|
@@ -114,7 +114,10 @@ export class LocalThreadRuntimeCore
|
|
|
114
114
|
private abortController: AbortController | null = null;
|
|
115
115
|
|
|
116
116
|
private _queue: MessageQueueController | null = null;
|
|
117
|
-
|
|
117
|
+
// Identifies the dispatch in flight, not merely that one is: consecutive
|
|
118
|
+
// queue runs overlap, and the previous dispatch settles after the next one
|
|
119
|
+
// has already started.
|
|
120
|
+
private _queueRunInFlight: object | null = null;
|
|
118
121
|
private _activeRun: { cancelled: boolean } | null = null;
|
|
119
122
|
private _runGeneration = 0;
|
|
120
123
|
|
|
@@ -255,22 +258,29 @@ export class LocalThreadRuntimeCore
|
|
|
255
258
|
run: (message) => {
|
|
256
259
|
// release the queue when the dispatch settles, even if it rejects
|
|
257
260
|
// before reaching startRun's finally, so a failure can't deadlock it
|
|
258
|
-
|
|
261
|
+
const dispatch = {};
|
|
262
|
+
this._queueRunInFlight = dispatch;
|
|
259
263
|
const generation = this._runGeneration;
|
|
260
264
|
// the tail may have moved since the message was enqueued
|
|
261
265
|
void this._runAppend({
|
|
262
266
|
...message,
|
|
263
|
-
parentId: this.
|
|
267
|
+
parentId: this._resolveAppendParent(
|
|
268
|
+
this.messages.at(-1)?.id ?? null,
|
|
269
|
+
),
|
|
264
270
|
})
|
|
265
271
|
.finally(() => {
|
|
266
|
-
this._queueRunInFlight
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
272
|
+
if (this._queueRunInFlight === dispatch) {
|
|
273
|
+
this._queueRunInFlight = null;
|
|
274
|
+
// A dispatch that failed before starting a run settles here;
|
|
275
|
+
// runs that did start release from _runLoop.
|
|
276
|
+
if (this._runGeneration === generation)
|
|
277
|
+
this._queue?.notifyIdle();
|
|
278
|
+
}
|
|
270
279
|
})
|
|
271
280
|
.catch(() => {});
|
|
272
281
|
},
|
|
273
282
|
});
|
|
283
|
+
if (this.voice) this._queue.hold();
|
|
274
284
|
this._queue.subscribe(() => this._notifySubscribers());
|
|
275
285
|
} else if (!canQueue && this._queue) {
|
|
276
286
|
this._queue = null;
|
|
@@ -342,10 +352,20 @@ export class LocalThreadRuntimeCore
|
|
|
342
352
|
}
|
|
343
353
|
|
|
344
354
|
public async append(message: AppendMessage): Promise<void> {
|
|
355
|
+
message = {
|
|
356
|
+
...message,
|
|
357
|
+
parentId: this._resolveAppendParent(message.parentId),
|
|
358
|
+
};
|
|
359
|
+
if (this.voice)
|
|
360
|
+
throw new Error(
|
|
361
|
+
"Cannot send a text message while a voice session is connected",
|
|
362
|
+
);
|
|
363
|
+
if (this._isVoiceMessage(message.sourceId))
|
|
364
|
+
throw new Error("Voice transcript messages cannot be edited");
|
|
345
365
|
const isTail = message.parentId === (this.messages.at(-1)?.id ?? null);
|
|
346
366
|
const willRun = message.startRun ?? message.role === "user";
|
|
347
367
|
if (this._queue && willRun && isTail) {
|
|
348
|
-
if (message.steer ?? this._queueRunInFlight)
|
|
368
|
+
if (message.steer ?? this._queueRunInFlight !== null)
|
|
349
369
|
this._queue.adapter.steer(message);
|
|
350
370
|
else this._queue.adapter.enqueue(message);
|
|
351
371
|
return;
|
|
@@ -359,6 +379,28 @@ export class LocalThreadRuntimeCore
|
|
|
359
379
|
return this._runAppend(message);
|
|
360
380
|
}
|
|
361
381
|
|
|
382
|
+
protected override _commitVoiceMessage(message: ThreadMessage): void {
|
|
383
|
+
const parentId = this.repository.headId;
|
|
384
|
+
this.repository.addOrUpdateMessage(parentId, message);
|
|
385
|
+
this.repository.resetHead(message.id);
|
|
386
|
+
void this._options.adapters.history
|
|
387
|
+
?.append({ parentId, message })
|
|
388
|
+
.catch(() => {});
|
|
389
|
+
const index = this._voiceMessages.findIndex(
|
|
390
|
+
(voiceMessage) => voiceMessage.id === message.id,
|
|
391
|
+
);
|
|
392
|
+
if (index !== -1) this._voiceMessages.splice(index, 1);
|
|
393
|
+
this._markVoiceMessagesDirty();
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
protected override _onVoiceConnected(): void {
|
|
397
|
+
this._queue?.hold();
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
protected override _onVoiceDisconnected(): void {
|
|
401
|
+
this._queue?.release();
|
|
402
|
+
}
|
|
403
|
+
|
|
362
404
|
public getQueueItems(): readonly QueueItemState[] {
|
|
363
405
|
// Reads can arrive during base-thread construction, before the queue field
|
|
364
406
|
// is assigned, so guard against the unset field.
|
|
@@ -386,7 +428,22 @@ export class LocalThreadRuntimeCore
|
|
|
386
428
|
this._notifySubscribers();
|
|
387
429
|
}
|
|
388
430
|
|
|
431
|
+
private _pendingAppends = 0;
|
|
432
|
+
|
|
433
|
+
protected override _isRunActive(): boolean {
|
|
434
|
+
return this._pendingAppends > 0 || super._isRunActive();
|
|
435
|
+
}
|
|
436
|
+
|
|
389
437
|
private async _runAppend(rawMessage: AppendMessage): Promise<void> {
|
|
438
|
+
this._pendingAppends += 1;
|
|
439
|
+
try {
|
|
440
|
+
await this._runAppendInner(rawMessage);
|
|
441
|
+
} finally {
|
|
442
|
+
this._pendingAppends -= 1;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
private async _runAppendInner(rawMessage: AppendMessage): Promise<void> {
|
|
390
447
|
// Stamped here rather than in `append` so a queued message is gated after
|
|
391
448
|
// the flush re-pointed its parentId at the current tail.
|
|
392
449
|
const generation = captureThreadRuntimeGeneration(this);
|
|
@@ -488,10 +545,14 @@ export class LocalThreadRuntimeCore
|
|
|
488
545
|
}
|
|
489
546
|
|
|
490
547
|
public async startRun(
|
|
491
|
-
{ parentId, runConfig }: StartRunConfig,
|
|
548
|
+
{ parentId, sourceId, runConfig }: StartRunConfig,
|
|
492
549
|
runCallback?: ChatModelAdapter["run"],
|
|
493
550
|
): Promise<void> {
|
|
494
551
|
this.ensureInitialized();
|
|
552
|
+
if (this.voice)
|
|
553
|
+
throw new Error("Cannot start a run while a voice session is connected");
|
|
554
|
+
if (this._isVoiceMessage(sourceId))
|
|
555
|
+
throw new Error("Voice transcript messages cannot be reloaded");
|
|
495
556
|
|
|
496
557
|
// add assistant message
|
|
497
558
|
const id = generateId();
|
|
@@ -519,6 +580,8 @@ export class LocalThreadRuntimeCore
|
|
|
519
580
|
runConfig: RunConfig | undefined,
|
|
520
581
|
runCallback?: ChatModelAdapter["run"],
|
|
521
582
|
): Promise<void> {
|
|
583
|
+
if (this.voice)
|
|
584
|
+
throw new Error("Cannot start a run while a voice session is connected");
|
|
522
585
|
this._notifyEventSubscribers("runStart", {});
|
|
523
586
|
|
|
524
587
|
// A run entered on a requires-action message resumes a pause an
|
|
@@ -845,7 +908,12 @@ export class LocalThreadRuntimeCore
|
|
|
845
908
|
result,
|
|
846
909
|
isError,
|
|
847
910
|
artifact,
|
|
911
|
+
modelContent,
|
|
848
912
|
}: AddToolResultOptions) {
|
|
913
|
+
if (this.voice)
|
|
914
|
+
throw new Error(
|
|
915
|
+
"Cannot add a tool result while a voice session is connected",
|
|
916
|
+
);
|
|
849
917
|
const messageData = this.repository.getMessage(messageId);
|
|
850
918
|
const { parentId } = messageData;
|
|
851
919
|
let { message } = messageData;
|
|
@@ -860,11 +928,14 @@ export class LocalThreadRuntimeCore
|
|
|
860
928
|
if (c.toolCallId !== toolCallId) return c;
|
|
861
929
|
found = true;
|
|
862
930
|
if (c.result === undefined) added = true;
|
|
931
|
+
// artifact and modelContent are optional; only override when supplied so
|
|
932
|
+
// a later result that omits them does not clobber a stored value.
|
|
863
933
|
return {
|
|
864
934
|
...c,
|
|
865
935
|
result,
|
|
866
|
-
artifact,
|
|
867
936
|
isError,
|
|
937
|
+
...(artifact !== undefined && { artifact }),
|
|
938
|
+
...(modelContent !== undefined && { modelContent }),
|
|
868
939
|
};
|
|
869
940
|
});
|
|
870
941
|
|
|
@@ -903,6 +974,10 @@ export class LocalThreadRuntimeCore
|
|
|
903
974
|
text,
|
|
904
975
|
reason,
|
|
905
976
|
}: RespondToToolApprovalOptions): Promise<void> {
|
|
977
|
+
if (this.voice)
|
|
978
|
+
throw new Error(
|
|
979
|
+
"Cannot respond to a tool approval while a voice session is connected",
|
|
980
|
+
);
|
|
906
981
|
let message = this.repository
|
|
907
982
|
.getMessages()
|
|
908
983
|
.findLast(
|
|
@@ -961,6 +1036,12 @@ export class LocalThreadRuntimeCore
|
|
|
961
1036
|
const { parentId } = this.repository.getMessage(message.id);
|
|
962
1037
|
this.repository.addOrUpdateMessage(parentId, message);
|
|
963
1038
|
this._notifySubscribers();
|
|
1039
|
+
this._notifyToolApprovalAnswered(
|
|
1040
|
+
message.id,
|
|
1041
|
+
target.toolCallId,
|
|
1042
|
+
target.toolName,
|
|
1043
|
+
approved,
|
|
1044
|
+
);
|
|
964
1045
|
|
|
965
1046
|
if (
|
|
966
1047
|
this.repository.headId === message.id &&
|
|
@@ -72,9 +72,7 @@ If the tool also had a frontend `execute`, the executor is short-circuited
|
|
|
72
72
|
via the entry's per-execution skip marker. Single fire.
|
|
73
73
|
|
|
74
74
|
### A.6. Previously-resolved tool's `result` is replaced
|
|
75
|
-
Silently ignored
|
|
76
|
-
re-`setResponse` path and the downstream result-chunk handler. The host
|
|
77
|
-
sees only the first result.
|
|
75
|
+
Silently ignored. A restored entry with a result remains historical even when a live snapshot reserializes its `argsText` or replaces its result. For active entries, `entry.hasResult` short-circuits both the re-`setResponse` path and the downstream result-chunk handler. The host sees only the first result.
|
|
78
76
|
|
|
79
77
|
### A.7. Previously-resolved tool loses its `result` (back to undefined)
|
|
80
78
|
Silently ignored. The entry stays in the resolved phase internally.
|
|
@@ -213,9 +211,7 @@ Silently kept as restored. Recursion into `content.messages` still
|
|
|
213
211
|
happens so any nested live tool calls are processed.
|
|
214
212
|
|
|
215
213
|
### C.3. Restored entry observed in a live snapshot, signature changed
|
|
216
|
-
|
|
217
|
-
`_startActiveEntry`. This is PR #4057's promotion path. `streamCall`
|
|
218
|
-
fires once — its first and only fire for this `toolCallId`.
|
|
214
|
+
A restored entry with a result remains historical regardless of later `argsText` or result changes. An unresolved restored entry is promoted only when a result lands or its `argsText` changes. Complete `argsText` values that parse to equivalent JSON are unchanged. Promotion deletes the restored entry and starts a new active entry via `_startActiveEntry`. `streamCall` fires once, its first and only fire for this `toolCallId`.
|
|
219
215
|
|
|
220
216
|
### C.4. `isLoading` transitions `true → false` while messages are stable
|
|
221
217
|
The next `setState` call sees `isLoading === false` and processes
|