@assistant-ui/core 0.2.10 → 0.2.12
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.map +1 -1
- package/dist/adapters/attachment.js +22 -12
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.js.map +1 -1
- package/dist/adapters/speech.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/AssistantProvider.js +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.js +1 -1
- package/dist/react/RuntimeAdapter.js +4 -2
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +6 -5
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +30 -29
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +10 -9
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +5 -4
- package/dist/react/index.js +3 -2
- package/dist/react/model-context/define-mcp-toolkit.js.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +9 -12
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.js +1 -1
- package/dist/react/model-context/define-toolkit.js.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +14 -0
- package/dist/react/model-context/external-tool.d.ts.map +1 -0
- package/dist/react/model-context/external-tool.js +17 -0
- package/dist/react/model-context/external-tool.js.map +1 -0
- package/dist/react/model-context/human-tool.d.ts +27 -0
- package/dist/react/model-context/human-tool.d.ts.map +1 -0
- package/dist/react/model-context/human-tool.js +30 -0
- package/dist/react/model-context/human-tool.js.map +1 -0
- package/dist/react/model-context/toolbox.d.ts +3 -3
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js +1 -1
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.js +1 -1
- package/dist/react/model-context/useAssistantDataUI.js.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.js +1 -1
- package/dist/react/model-context/useAssistantInstructions.js.map +1 -1
- package/dist/react/model-context/useAssistantInteractable.js +1 -1
- package/dist/react/model-context/useAssistantInteractable.js.map +1 -1
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.js +1 -1
- package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.js +1 -1
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/model-context/useInteractableState.js +1 -1
- package/dist/react/model-context/useInteractableState.js.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.js +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.js +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.js +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.js +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.js +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.js +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.js +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.js +1 -1
- package/dist/react/primitive-hooks/useMessageReload.js.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.js +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.js +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.js +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -1
- package/dist/react/primitive-hooks/useVoice.js +1 -1
- package/dist/react/primitive-hooks/useVoice.js.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +1 -1
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +1 -1
- package/dist/react/primitives/message/MessageParts.js +1 -1
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/message/MessageQuote.js +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +2 -2
- package/dist/react/primitives/part/PartMessages.js +3 -3
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
- package/dist/react/providers/PartByIndexProvider.js.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +4 -3
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -0
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +7 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +2 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.js.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +4 -3
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +1 -1
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.js +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +2 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +4 -3
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/utils/groupParts.d.ts +1 -1
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +8 -2
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js +14 -0
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.js +1 -1
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +7 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +4 -0
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +7 -1
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +4 -0
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +17 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +6 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +4 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +20 -0
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -0
- package/dist/runtime/queue/external-thread-queue-adapter.js +0 -0
- package/dist/runtime/queue/message-queue.d.ts +20 -0
- package/dist/runtime/queue/message-queue.d.ts.map +1 -0
- package/dist/runtime/queue/message-queue.js +97 -0
- package/dist/runtime/queue/message-queue.js.map +1 -0
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +3 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +20 -2
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +5 -0
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +7 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +45 -0
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +3 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +3 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +3 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/chain-of-thought-client.js +6 -5
- package/dist/store/clients/chain-of-thought-client.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +6 -5
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +4 -3
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.js +7 -6
- package/dist/store/clients/runtime-adapter.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +7 -6
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +13 -12
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +3 -3
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +12 -5
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +32 -16
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +3 -3
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +6 -3
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +17 -16
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +8 -7
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +11 -10
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +15 -14
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +7 -0
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -0
- package/dist/store/runtime-clients/useSubscribable.js +16 -0
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -0
- package/dist/store/scope-registration.d.ts +1 -1
- package/dist/store/scopes/composer.d.ts +1 -1
- package/dist/store/scopes/queue-item.d.ts +2 -1
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.js +6 -0
- package/dist/store/scopes/queue-item.js.map +1 -0
- package/dist/store/scopes/thread.d.ts +1 -1
- package/dist/store/scopes/threads.d.ts +1 -1
- package/dist/types/message.d.ts +2 -1
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -1
- package/dist/utils/composite-context-provider.js +3 -1
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/package.json +14 -10
- package/src/adapters/attachment.ts +24 -4
- package/src/index.ts +8 -0
- package/src/react/RuntimeAdapter.ts +6 -4
- package/src/react/client/DataRenderers.ts +48 -42
- package/src/react/client/Interactables.ts +263 -267
- package/src/react/client/Tools.ts +122 -129
- package/src/react/index.ts +3 -1
- package/src/react/model-context/define-toolkit.test.ts +14 -7
- package/src/react/model-context/define-toolkit.ts +18 -19
- package/src/react/model-context/external-tool.ts +16 -0
- package/src/react/model-context/{hitl.ts → human-tool.ts} +13 -8
- package/src/react/model-context/toolbox.ts +3 -3
- package/src/react/primitives/message/MessageGroupedParts.tsx +1 -1
- package/src/react/primitives/part/PartMessages.tsx +2 -2
- package/src/react/providers/TextMessagePartProvider.tsx +31 -32
- package/src/react/runtimes/createMessageConverter.ts +2 -1
- package/src/react/runtimes/external-message-converter.ts +5 -3
- package/src/react/runtimes/useLocalRuntime.ts +2 -0
- package/src/runtime/api/composer-runtime.ts +26 -0
- package/src/runtime/base/base-composer-runtime-core.ts +11 -0
- package/src/runtime/base/default-thread-composer-runtime-core.ts +22 -0
- package/src/runtime/interfaces/composer-runtime-core.ts +7 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +5 -0
- package/src/runtime/queue/external-thread-queue-adapter.ts +14 -0
- package/src/runtime/queue/message-queue.ts +128 -0
- package/src/runtimes/external-store/external-store-adapter.ts +3 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +31 -2
- package/src/runtimes/local/local-runtime-options.ts +6 -0
- package/src/runtimes/local/local-thread-runtime-core.ts +70 -0
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +4 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +4 -0
- package/src/store/clients/chain-of-thought-client.ts +24 -25
- package/src/store/clients/model-context-client.ts +22 -19
- package/src/store/clients/no-op-composer-client.ts +69 -66
- package/src/store/clients/runtime-adapter.ts +9 -6
- package/src/store/clients/suggestions.ts +41 -40
- package/src/store/clients/thread-message-client.ts +127 -132
- package/src/store/runtime-clients/attachment-runtime-client.ts +7 -3
- package/src/store/runtime-clients/composer-runtime-client.ts +142 -113
- package/src/store/runtime-clients/message-part-runtime-client.ts +16 -14
- package/src/store/runtime-clients/message-runtime-client.ts +124 -122
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +44 -45
- package/src/store/runtime-clients/thread-list-runtime-client.ts +83 -80
- package/src/store/runtime-clients/thread-runtime-client.ts +113 -119
- package/src/store/runtime-clients/{tap-subscribable.ts → useSubscribable.ts} +4 -4
- package/src/store/scopes/queue-item.ts +2 -0
- package/src/tests/attachment-adapters.test.ts +86 -0
- package/src/tests/external-store-thread-runtime-core.test.ts +125 -0
- package/src/tests/message-queue.test.ts +168 -0
- package/src/types/message.ts +2 -0
- package/src/utils/composite-context-provider.ts +3 -1
- package/dist/react/model-context/hitl.d.ts +0 -23
- package/dist/react/model-context/hitl.d.ts.map +0 -1
- package/dist/react/model-context/hitl.js +0 -26
- package/dist/react/model-context/hitl.js.map +0 -1
- package/dist/store/runtime-clients/tap-subscribable.d.ts +0 -7
- package/dist/store/runtime-clients/tap-subscribable.d.ts.map +0 -1
- package/dist/store/runtime-clients/tap-subscribable.js +0 -16
- package/dist/store/runtime-clients/tap-subscribable.js.map +0 -1
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
2
|
import { AttachmentRuntimeClient } from "./attachment-runtime-client.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useEffect, useMemo } from "@assistant-ui/tap/react-shim";
|
|
4
|
+
import { useAssistantEmit, useClientLookup } from "@assistant-ui/store";
|
|
5
|
+
import { resource, useResource, withKey } from "@assistant-ui/tap";
|
|
5
6
|
//#region src/store/runtime-clients/composer-runtime-client.ts
|
|
6
|
-
const ComposerAttachmentClientByIndex = resource(({ runtime, index })
|
|
7
|
-
return
|
|
7
|
+
const ComposerAttachmentClientByIndex = resource(function ComposerAttachmentClientByIndex({ runtime, index }) {
|
|
8
|
+
return useResource(AttachmentRuntimeClient({ runtime: useMemo(() => runtime.getAttachmentByIndex(index), [runtime, index]) }));
|
|
8
9
|
});
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const QueueItemClient = resource(function QueueItemClient({ item, onSteer, onRemove }) {
|
|
11
|
+
return {
|
|
12
|
+
getState: () => item,
|
|
13
|
+
steer: onSteer,
|
|
14
|
+
remove: onRemove
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
const ComposerClient = resource(function ComposerClient({ threadIdRef, messageIdRef, runtime }) {
|
|
18
|
+
const runtimeState = useSubscribable(runtime);
|
|
19
|
+
const emit = useAssistantEmit();
|
|
20
|
+
useEffect(() => {
|
|
13
21
|
const unsubscribers = [];
|
|
14
22
|
for (const event of ["send", "attachmentAdd"]) {
|
|
15
23
|
const unsubscribe = runtime.unstable_on(event, () => {
|
|
@@ -38,11 +46,17 @@ const ComposerClient = resource(({ threadIdRef, messageIdRef, runtime }) => {
|
|
|
38
46
|
threadIdRef,
|
|
39
47
|
messageIdRef
|
|
40
48
|
]);
|
|
41
|
-
const attachments =
|
|
49
|
+
const attachments = useClientLookup(() => runtimeState.attachments.map((attachment, idx) => withKey(attachment.id, ComposerAttachmentClientByIndex({
|
|
42
50
|
runtime,
|
|
43
51
|
index: idx
|
|
44
52
|
}))), [runtimeState.attachments, runtime]);
|
|
45
|
-
const
|
|
53
|
+
const queue = runtimeState.queue;
|
|
54
|
+
const queueItems = useClientLookup(() => queue.map((item) => withKey(item.id, QueueItemClient({
|
|
55
|
+
item,
|
|
56
|
+
onSteer: () => runtime.steerQueueItem(item.id),
|
|
57
|
+
onRemove: () => runtime.removeQueueItem(item.id)
|
|
58
|
+
}))), [queue, runtime]);
|
|
59
|
+
const state = useMemo(() => {
|
|
46
60
|
return {
|
|
47
61
|
text: runtimeState.text,
|
|
48
62
|
role: runtimeState.role,
|
|
@@ -56,9 +70,13 @@ const ComposerClient = resource(({ threadIdRef, messageIdRef, runtime }) => {
|
|
|
56
70
|
type: runtimeState.type ?? "thread",
|
|
57
71
|
dictation: runtimeState.dictation,
|
|
58
72
|
quote: runtimeState.quote,
|
|
59
|
-
queue
|
|
73
|
+
queue
|
|
60
74
|
};
|
|
61
|
-
}, [
|
|
75
|
+
}, [
|
|
76
|
+
runtimeState,
|
|
77
|
+
attachments.state,
|
|
78
|
+
queue
|
|
79
|
+
]);
|
|
62
80
|
return {
|
|
63
81
|
getState: () => state,
|
|
64
82
|
setText: runtime.setText,
|
|
@@ -79,9 +97,7 @@ const ComposerClient = resource(({ threadIdRef, messageIdRef, runtime }) => {
|
|
|
79
97
|
if ("id" in selector) return attachments.get({ key: selector.id });
|
|
80
98
|
else return attachments.get(selector);
|
|
81
99
|
},
|
|
82
|
-
queueItem: () =>
|
|
83
|
-
throw new Error("Queue is not supported in this runtime");
|
|
84
|
-
},
|
|
100
|
+
queueItem: (selector) => queueItems.get(selector),
|
|
85
101
|
__internal_getRuntime: () => runtime
|
|
86
102
|
};
|
|
87
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport {\
|
|
1
|
+
{"version":3,"file":"composer-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useMemo, useEffect } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useAssistantEmit,\n useClientLookup,\n} from \"@assistant-ui/store\";\nimport type {\n ComposerRuntime,\n EditComposerRuntime,\n} from \"../../runtime/api/composer-runtime\";\nimport type { ComposerState } from \"../scopes/composer\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst ComposerAttachmentClientByIndex = resource(\n function ComposerAttachmentClientByIndex({\n runtime,\n index,\n }: {\n runtime: ComposerRuntime;\n index: number;\n }) {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n\n return useResource(\n AttachmentRuntimeClient({\n runtime: attachmentRuntime,\n }),\n );\n },\n);\n\nconst QueueItemClient = resource(function QueueItemClient({\n item,\n onSteer,\n onRemove,\n}: {\n item: QueueItemState;\n onSteer: () => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> {\n return {\n getState: () => item,\n steer: onSteer,\n remove: onRemove,\n };\n});\n\nexport const ComposerClient = resource(function ComposerClient({\n threadIdRef,\n messageIdRef,\n runtime,\n}: {\n threadIdRef: { current: string };\n messageIdRef?: { current: string };\n runtime: ComposerRuntime;\n}): ClientOutput<\"composer\"> {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind composer events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to composer events\n for (const event of [\"send\", \"attachmentAdd\"] as const) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`composer.${event}`, {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n unsubscribers.push(\n runtime.unstable_on(\"attachmentAddError\", (payload) => {\n // payload.error omitted: raw Error is not store-serializable; use runtime.unstable_on for it.\n emit(\"composer.attachmentAddError\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.attachmentId && { attachmentId: payload.attachmentId }),\n reason: payload.reason,\n message: payload.message,\n });\n }),\n );\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit, threadIdRef, messageIdRef]);\n\n const attachments = useClientLookup(\n () =>\n runtimeState.attachments.map((attachment, idx) =>\n withKey(\n attachment.id,\n ComposerAttachmentClientByIndex({\n runtime,\n index: idx,\n }),\n ),\n ),\n [runtimeState.attachments, runtime],\n );\n\n const queue = runtimeState.queue;\n const queueItems = useClientLookup(\n () =>\n queue.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onSteer: () => runtime.steerQueueItem(item.id),\n onRemove: () => runtime.removeQueueItem(item.id),\n }),\n ),\n ),\n [queue, runtime],\n );\n\n const state = useMemo<ComposerState>(() => {\n return {\n text: runtimeState.text,\n role: runtimeState.role,\n attachments: attachments.state,\n runConfig: runtimeState.runConfig,\n isEditing: runtimeState.isEditing,\n canCancel: runtimeState.canCancel,\n canSend: runtimeState.canSend,\n attachmentAccept: runtimeState.attachmentAccept,\n isEmpty: runtimeState.isEmpty,\n type: runtimeState.type ?? \"thread\",\n dictation: runtimeState.dictation,\n quote: runtimeState.quote,\n queue,\n };\n }, [runtimeState, attachments.state, queue]);\n\n return {\n getState: () => state,\n setText: runtime.setText,\n setRole: runtime.setRole,\n setRunConfig: runtime.setRunConfig,\n addAttachment: runtime.addAttachment,\n reset: runtime.reset,\n clearAttachments: runtime.clearAttachments,\n send: runtime.send,\n cancel: runtime.cancel,\n beginEdit:\n (runtime as EditComposerRuntime).beginEdit ??\n (() => {\n throw new Error(\"beginEdit is not supported in this runtime\");\n }),\n startDictation: runtime.startDictation,\n stopDictation: runtime.stopDictation,\n setQuote: runtime.setQuote,\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n queueItem: (selector) => queueItems.get(selector),\n __internal_getRuntime: () => runtime,\n };\n});\n"],"mappings":";;;;;;AAiBA,MAAM,kCAAkC,SACtC,SAAS,gCAAgC,EACvC,SACA,SAIC;CAMD,OAAO,YACL,wBAAwB,EACtB,SAPsB,cAClB,QAAQ,qBAAqB,KAAK,GACxC,CAAC,SAAS,KAAK,CAKY,EAC3B,CAAC,CACH;AACF,CACF;AAEA,MAAM,kBAAkB,SAAS,SAAS,gBAAgB,EACxD,MACA,SACA,YAK4B;CAC5B,OAAO;EACL,gBAAgB;EAChB,OAAO;EACP,QAAQ;CACV;AACF,CAAC;AAED,MAAa,iBAAiB,SAAS,SAAS,eAAe,EAC7D,aACA,cACA,WAK2B;CAC3B,MAAM,eAAe,gBAAgB,OAAO;CAC5C,MAAM,OAAO,iBAAiB;CAG9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAGtC,KAAK,MAAM,SAAS,CAAC,QAAQ,eAAe,GAAY;GACtD,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,KAAK,YAAY,SAAS;KACxB,UAAU,YAAY;KACtB,GAAI,gBAAgB,EAAE,WAAW,aAAa,QAAQ;IACxD,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,cAAc,KACZ,QAAQ,YAAY,uBAAuB,YAAY;GAErD,KAAK,+BAA+B;IAClC,UAAU,YAAY;IACtB,GAAI,gBAAgB,EAAE,WAAW,aAAa,QAAQ;IACtD,GAAI,QAAQ,gBAAgB,EAAE,cAAc,QAAQ,aAAa;IACjE,QAAQ,QAAQ;IAChB,SAAS,QAAQ;GACnB,CAAC;EACH,CAAC,CACH;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG;EAAC;EAAS;EAAM;EAAa;CAAY,CAAC;CAE7C,MAAM,cAAc,sBAEhB,aAAa,YAAY,KAAK,YAAY,QACxC,QACE,WAAW,IACX,gCAAgC;EAC9B;EACA,OAAO;CACT,CAAC,CACH,CACF,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,aAAa;CAC3B,MAAM,aAAa,sBAEf,MAAM,KAAK,SACT,QACE,KAAK,IACL,gBAAgB;EACd;EACA,eAAe,QAAQ,eAAe,KAAK,EAAE;EAC7C,gBAAgB,QAAQ,gBAAgB,KAAK,EAAE;CACjD,CAAC,CACH,CACF,GACF,CAAC,OAAO,OAAO,CACjB;CAEA,MAAM,QAAQ,cAA6B;EACzC,OAAO;GACL,MAAM,aAAa;GACnB,MAAM,aAAa;GACnB,aAAa,YAAY;GACzB,WAAW,aAAa;GACxB,WAAW,aAAa;GACxB,WAAW,aAAa;GACxB,SAAS,aAAa;GACtB,kBAAkB,aAAa;GAC/B,SAAS,aAAa;GACtB,MAAM,aAAa,QAAQ;GAC3B,WAAW,aAAa;GACxB,OAAO,aAAa;GACpB;EACF;CACF,GAAG;EAAC;EAAc,YAAY;EAAO;CAAK,CAAC;CAE3C,OAAO;EACL,gBAAgB;EAChB,SAAS,QAAQ;EACjB,SAAS,QAAQ;EACjB,cAAc,QAAQ;EACtB,eAAe,QAAQ;EACvB,OAAO,QAAQ;EACf,kBAAkB,QAAQ;EAC1B,MAAM,QAAQ;EACd,QAAQ,QAAQ;EAChB,WACG,QAAgC,oBAC1B;GACL,MAAM,IAAI,MAAM,4CAA4C;EAC9D;EACF,gBAAgB,QAAQ;EACxB,eAAe,QAAQ;EACvB,UAAU,QAAQ;EAClB,aAAa,aAAa;GACxB,IAAI,QAAQ,UACV,OAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAE3C,OAAO,YAAY,IAAI,QAAQ;EAEnC;EACA,YAAY,aAAa,WAAW,IAAI,QAAQ;EAChD,6BAA6B;CAC/B;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-part-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-part-runtime-client.ts"],"mappings":";;;;cAKa,iBAAA,GAAiB,KAAA;
|
|
1
|
+
{"version":3,"file":"message-part-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-part-runtime-client.ts"],"mappings":";;;;cAKa,iBAAA,GAAiB,KAAA;WAGnB,kBAAA;AAAA;WAAA,kBAAA;AAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
2
|
import { resource } from "@assistant-ui/tap";
|
|
3
3
|
//#region src/store/runtime-clients/message-part-runtime-client.ts
|
|
4
|
-
const MessagePartClient = resource(({ runtime })
|
|
5
|
-
const state =
|
|
4
|
+
const MessagePartClient = resource(function MessagePartClient({ runtime }) {
|
|
5
|
+
const state = useSubscribable(runtime);
|
|
6
6
|
return {
|
|
7
7
|
getState: () => state,
|
|
8
8
|
addToolResult: (result) => runtime.addToolResult(result),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-part-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/message-part-runtime-client.ts"],"sourcesContent":["import { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport type { MessagePartRuntime } from \"../../runtime/api/message-part-runtime\";\nimport {
|
|
1
|
+
{"version":3,"file":"message-part-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/message-part-runtime-client.ts"],"sourcesContent":["import { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport type { MessagePartRuntime } from \"../../runtime/api/message-part-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nexport const MessagePartClient = resource(function MessagePartClient({\n runtime,\n}: {\n runtime: MessagePartRuntime;\n}): ClientOutput<\"part\"> {\n const state = useSubscribable(runtime);\n\n return {\n getState: () => state,\n addToolResult: (result) => runtime.addToolResult(result),\n resumeToolCall: (payload) => runtime.resumeToolCall(payload),\n respondToToolApproval: (response) =>\n runtime.respondToToolApproval(response),\n __internal_getRuntime: () => runtime,\n };\n});\n"],"mappings":";;;AAKA,MAAa,oBAAoB,SAAS,SAAS,kBAAkB,EACnE,WAGuB;CACvB,MAAM,QAAQ,gBAAgB,OAAO;CAErC,OAAO;EACL,gBAAgB;EAChB,gBAAgB,WAAW,QAAQ,cAAc,MAAM;EACvD,iBAAiB,YAAY,QAAQ,eAAe,OAAO;EAC3D,wBAAwB,aACtB,QAAQ,sBAAsB,QAAQ;EACxC,6BAA6B;CAC/B;AACF,CAAC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { MessageRuntime } from "../../runtime/api/message-runtime.js";
|
|
2
2
|
import { ClientOutput } from "@assistant-ui/store";
|
|
3
|
-
import { tapRef } from "@assistant-ui/tap";
|
|
4
3
|
|
|
5
4
|
//#region src/store/runtime-clients/message-runtime-client.d.ts
|
|
6
5
|
declare const MessageClient: (props: {
|
|
7
6
|
runtime: MessageRuntime;
|
|
8
|
-
threadIdRef:
|
|
7
|
+
threadIdRef: {
|
|
8
|
+
current: string;
|
|
9
|
+
};
|
|
9
10
|
}) => import("@assistant-ui/tap").ResourceElement<ClientOutput<"message">, {
|
|
10
11
|
runtime: MessageRuntime;
|
|
11
|
-
threadIdRef:
|
|
12
|
+
threadIdRef: {
|
|
13
|
+
current: string;
|
|
14
|
+
};
|
|
12
15
|
}>;
|
|
13
16
|
//#endregion
|
|
14
17
|
export { MessageClient };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":";;;;cA4Ca,aAAA,GAAa,KAAA;WAIf,cAAA;;IACM,OAAA;EAAA;AAAA;WADN,cAAA;;IACM,OAAA;EAAA;AAAA"}
|
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
2
|
import { AttachmentRuntimeClient } from "./attachment-runtime-client.js";
|
|
3
3
|
import { MessagePartClient } from "./message-part-runtime-client.js";
|
|
4
4
|
import { ComposerClient } from "./composer-runtime-client.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { useMemo, useState } from "@assistant-ui/tap/react-shim";
|
|
6
|
+
import { useClientLookup, useClientResource } from "@assistant-ui/store";
|
|
7
|
+
import { resource, useResource, withKey } from "@assistant-ui/tap";
|
|
7
8
|
//#region src/store/runtime-clients/message-runtime-client.ts
|
|
8
|
-
const MessageAttachmentClientByIndex = resource(({ runtime, index })
|
|
9
|
-
return
|
|
9
|
+
const MessageAttachmentClientByIndex = resource(function MessageAttachmentClientByIndex({ runtime, index }) {
|
|
10
|
+
return useResource(AttachmentRuntimeClient({ runtime: useMemo(() => runtime.getAttachmentByIndex(index), [runtime, index]) }));
|
|
10
11
|
});
|
|
11
|
-
const MessagePartByIndex = resource(({ runtime, index })
|
|
12
|
-
return
|
|
12
|
+
const MessagePartByIndex = resource(function MessagePartByIndex({ runtime, index }) {
|
|
13
|
+
return useResource(MessagePartClient({ runtime: useMemo(() => runtime.getMessagePartByIndex(index), [runtime, index]) }));
|
|
13
14
|
});
|
|
14
|
-
const MessageClient = resource(({ runtime, threadIdRef })
|
|
15
|
-
const runtimeState =
|
|
16
|
-
const [isCopiedState, setIsCopied] =
|
|
17
|
-
const [isHoveringState, setIsHovering] =
|
|
18
|
-
const messageIdRef =
|
|
15
|
+
const MessageClient = resource(function MessageClient({ runtime, threadIdRef }) {
|
|
16
|
+
const runtimeState = useSubscribable(runtime);
|
|
17
|
+
const [isCopiedState, setIsCopied] = useState(false);
|
|
18
|
+
const [isHoveringState, setIsHovering] = useState(false);
|
|
19
|
+
const messageIdRef = useMemo(() => ({ get current() {
|
|
19
20
|
return runtime.getState().id;
|
|
20
21
|
} }), [runtime]);
|
|
21
|
-
const composer =
|
|
22
|
+
const composer = useClientResource(ComposerClient({
|
|
22
23
|
runtime: runtime.composer,
|
|
23
24
|
threadIdRef,
|
|
24
25
|
messageIdRef
|
|
25
26
|
}));
|
|
26
|
-
const parts =
|
|
27
|
+
const parts = useClientLookup(() => runtimeState.content.map((part, idx) => withKey("toolCallId" in part && part.toolCallId != null ? `toolCallId-${part.toolCallId}` : `index-${idx}`, MessagePartByIndex({
|
|
27
28
|
runtime,
|
|
28
29
|
index: idx
|
|
29
30
|
}))), [runtimeState.content, runtime]);
|
|
30
|
-
const attachments =
|
|
31
|
+
const attachments = useClientLookup(() => (runtimeState.attachments ?? []).map((attachment, idx) => withKey(attachment.id, MessageAttachmentClientByIndex({
|
|
31
32
|
runtime,
|
|
32
33
|
index: idx
|
|
33
34
|
}))), [runtimeState.attachments, runtime]);
|
|
34
|
-
const state =
|
|
35
|
+
const state = useMemo(() => {
|
|
35
36
|
return {
|
|
36
37
|
...runtimeState,
|
|
37
38
|
parts: parts.state,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"sourcesContent":["import {\
|
|
1
|
+
{"version":3,"file":"message-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport type { MessageRuntime } from \"../../runtime/api/message-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessagePartClient } from \"./message-part-runtime-client\";\nimport type { MessageState } from \"../scopes/message\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\n\nconst MessageAttachmentClientByIndex = resource(\n function MessageAttachmentClientByIndex({\n runtime,\n index,\n }: {\n runtime: MessageRuntime;\n index: number;\n }) {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return useResource(AttachmentRuntimeClient({ runtime: attachmentRuntime }));\n },\n);\n\nconst MessagePartByIndex = resource(function MessagePartByIndex({\n runtime,\n index,\n}: {\n runtime: MessageRuntime;\n index: number;\n}) {\n const partRuntime = useMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return useResource(MessagePartClient({ runtime: partRuntime }));\n});\n\nexport const MessageClient = resource(function MessageClient({\n runtime,\n threadIdRef,\n}: {\n runtime: MessageRuntime;\n threadIdRef: { current: string };\n}): ClientOutput<\"message\"> {\n const runtimeState = useSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n\n const messageIdRef = useMemo(\n () => ({\n get current() {\n return runtime.getState().id;\n },\n }),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n const parts = useClientLookup(\n () =>\n runtimeState.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n MessagePartByIndex({ runtime, index: idx }),\n ),\n ),\n [runtimeState.content, runtime],\n );\n\n const attachments = useClientLookup(\n () =>\n (runtimeState.attachments ?? []).map((attachment, idx) =>\n withKey(\n attachment.id,\n MessageAttachmentClientByIndex({ runtime, index: idx }),\n ),\n ),\n [runtimeState.attachments, runtime],\n );\n\n const state = useMemo<MessageState>(() => {\n return {\n ...(runtimeState as MessageState),\n\n parts: parts.state,\n composer: composer.state,\n\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n runtimeState,\n parts.state,\n composer.state,\n isCopiedState,\n isHoveringState,\n ]);\n\n return {\n getState: () => state,\n\n composer: () => composer.methods,\n\n reload: (config) => runtime.reload(config),\n speak: () => runtime.speak(),\n stopSpeaking: () => runtime.stopSpeaking(),\n submitFeedback: (feedback) => runtime.submitFeedback(feedback),\n switchToBranch: (options) => runtime.switchToBranch(options),\n getCopyText: () => runtime.unstable_getCopyText(),\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n\n setIsCopied,\n setIsHovering,\n\n __internal_getRuntime: () => runtime,\n };\n});\n"],"mappings":";;;;;;;;AAcA,MAAM,iCAAiC,SACrC,SAAS,+BAA+B,EACtC,SACA,SAIC;CAKD,OAAO,YAAY,wBAAwB,EAAE,SAJnB,cAClB,QAAQ,qBAAqB,KAAK,GACxC,CAAC,SAAS,KAAK,CAEqD,EAAE,CAAC,CAAC;AAC5E,CACF;AAEA,MAAM,qBAAqB,SAAS,SAAS,mBAAmB,EAC9D,SACA,SAIC;CAKD,OAAO,YAAY,kBAAkB,EAAE,SAJnB,cACZ,QAAQ,sBAAsB,KAAK,GACzC,CAAC,SAAS,KAAK,CAEyC,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAa,gBAAgB,SAAS,SAAS,cAAc,EAC3D,SACA,eAI0B;CAC1B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,CAAC,eAAe,eAAe,SAAS,KAAK;CACnD,MAAM,CAAC,iBAAiB,iBAAiB,SAAS,KAAK;CAEvD,MAAM,eAAe,eACZ,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,CAAC,CAAC;CAC5B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;EACA;CACF,CAAC,CACH;CACA,MAAM,QAAQ,sBAEV,aAAa,QAAQ,KAAK,MAAM,QAC9B,QACE,gBAAgB,QAAQ,KAAK,cAAc,OACvC,cAAc,KAAK,eACnB,SAAS,OACb,mBAAmB;EAAE;EAAS,OAAO;CAAI,CAAC,CAC5C,CACF,GACF,CAAC,aAAa,SAAS,OAAO,CAChC;CAEA,MAAM,cAAc,uBAEf,aAAa,eAAe,CAAC,EAAA,CAAG,KAAK,YAAY,QAChD,QACE,WAAW,IACX,+BAA+B;EAAE;EAAS,OAAO;CAAI,CAAC,CACxD,CACF,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,GAAI;GAEJ,OAAO,MAAM;GACb,UAAU,SAAS;GAEnB,UAAU;GACV,YAAY;EACd;CACF,GAAG;EACD;EACA,MAAM;EACN,SAAS;EACT;EACA;CACF,CAAC;CAED,OAAO;EACL,gBAAgB;EAEhB,gBAAgB,SAAS;EAEzB,SAAS,WAAW,QAAQ,OAAO,MAAM;EACzC,aAAa,QAAQ,MAAM;EAC3B,oBAAoB,QAAQ,aAAa;EACzC,iBAAiB,aAAa,QAAQ,eAAe,QAAQ;EAC7D,iBAAiB,YAAY,QAAQ,eAAe,OAAO;EAC3D,mBAAmB,QAAQ,qBAAqB;EAChD,OAAO,aAAa;GAClB,IAAI,WAAW,UACb,OAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;QAE1C,OAAO,MAAM,IAAI,EAAE,KAAK,cAAc,SAAS,aAAa,CAAC;EAEjE;EAEA,aAAa,aAAa;GACxB,IAAI,QAAQ,UACV,OAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAE3C,OAAO,YAAY,IAAI,QAAQ;EAEnC;EAEA;EACA;EAEA,6BAA6B;CAC/B;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;;cAUa,oBAAA,GAAoB,KAAA;WAGtB,qBAAA;AAAA;WAAA,qBAAA;AAAA"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
|
+
import { useEffect } from "@assistant-ui/tap/react-shim";
|
|
3
|
+
import { useAssistantEmit } from "@assistant-ui/store";
|
|
4
|
+
import { resource } from "@assistant-ui/tap";
|
|
4
5
|
//#region src/store/runtime-clients/thread-list-item-runtime-client.ts
|
|
5
|
-
const ThreadListItemClient = resource(({ runtime })
|
|
6
|
-
const state =
|
|
7
|
-
const emit =
|
|
8
|
-
|
|
6
|
+
const ThreadListItemClient = resource(function ThreadListItemClient({ runtime }) {
|
|
7
|
+
const state = useSubscribable(runtime);
|
|
8
|
+
const emit = useAssistantEmit();
|
|
9
|
+
useEffect(() => {
|
|
9
10
|
const unsubscribers = [];
|
|
10
11
|
for (const event of ["switchedTo", "switchedAway"]) {
|
|
11
12
|
const unsubscribe = runtime.unstable_on(event, () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-item-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { resource
|
|
1
|
+
{"version":3,"file":"thread-list-item-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport { type ClientOutput, useAssistantEmit } from \"@assistant-ui/store\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nexport const ThreadListItemClient = resource(function ThreadListItemClient({\n runtime,\n}: {\n runtime: ThreadListItemRuntime;\n}): ClientOutput<\"threadListItem\"> {\n const state = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind thread list item events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to thread list item events\n const threadListItemEvents: ThreadListItemEventType[] = [\n \"switchedTo\",\n \"switchedAway\",\n ];\n\n for (const event of threadListItemEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`threadListItem.${event}`, {\n threadId: runtime.getState()!.id,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n return {\n getState: () => state,\n switchTo: runtime.switchTo,\n rename: runtime.rename,\n updateCustom: runtime.updateCustom,\n archive: runtime.archive,\n unarchive: runtime.unarchive,\n delete: runtime.delete,\n generateTitle: runtime.generateTitle,\n initialize: runtime.initialize,\n detach: runtime.detach,\n __internal_getRuntime: () => runtime,\n };\n});\n"],"mappings":";;;;;AAUA,MAAa,uBAAuB,SAAS,SAAS,qBAAqB,EACzE,WAGiC;CACjC,MAAM,QAAQ,gBAAgB,OAAO;CACrC,MAAM,OAAO,iBAAiB;CAG9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAQtC,KAAK,MAAM,SAAS,CAJlB,cACA,cAGqC,GAAG;GACxC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,KAAK,kBAAkB,SAAS,EAC9B,UAAU,QAAQ,SAAS,CAAC,CAAE,GAChC,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,OAAO;EACL,gBAAgB;EAChB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,cAAc,QAAQ;EACtB,SAAS,QAAQ;EACjB,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,eAAe,QAAQ;EACvB,YAAY,QAAQ;EACpB,QAAQ,QAAQ;EAChB,6BAA6B;CAC/B;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;;cAgCa,gBAAA,GAAgB,KAAA;WAIlB,iBAAA;+BACoB,gBAAA;AAAA;WADpB,iBAAA;+BACoB,gBAAA;AAAA"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
2
|
import { ThreadClient } from "./thread-runtime-client.js";
|
|
3
3
|
import { ThreadListItemClient } from "./thread-list-item-runtime-client.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { useMemo } from "@assistant-ui/tap/react-shim";
|
|
5
|
+
import { useClientLookup, useClientResource } from "@assistant-ui/store";
|
|
6
|
+
import { resource, useResource, withKey } from "@assistant-ui/tap";
|
|
6
7
|
//#region src/store/runtime-clients/thread-list-runtime-client.ts
|
|
7
|
-
const ThreadListItemClientById = resource(({ runtime, id })
|
|
8
|
-
return
|
|
8
|
+
const ThreadListItemClientById = resource(function ThreadListItemClientById({ runtime, id }) {
|
|
9
|
+
return useResource(ThreadListItemClient({ runtime: useMemo(() => runtime.getItemById(id), [runtime, id]) }));
|
|
9
10
|
});
|
|
10
|
-
const ThreadListClient = resource(({ runtime, __internal_assistantRuntime })
|
|
11
|
-
const runtimeState =
|
|
12
|
-
const main =
|
|
13
|
-
const threadItems =
|
|
11
|
+
const ThreadListClient = resource(function ThreadListClient({ runtime, __internal_assistantRuntime }) {
|
|
12
|
+
const runtimeState = useSubscribable(runtime);
|
|
13
|
+
const main = useClientResource(ThreadClient({ runtime: runtime.main }));
|
|
14
|
+
const threadItems = useClientLookup(() => Object.keys(runtimeState.threadItems).map((id) => withKey(id, ThreadListItemClientById({
|
|
14
15
|
runtime,
|
|
15
16
|
id
|
|
16
17
|
}))), [runtimeState.threadItems, runtime]);
|
|
17
|
-
const state =
|
|
18
|
+
const state = useMemo(() => {
|
|
18
19
|
return {
|
|
19
20
|
mainThreadId: runtimeState.mainThreadId,
|
|
20
21
|
newThreadId: runtimeState.newThreadId ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"thread-list-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport type { ThreadListRuntime } from \"../../runtime/api/thread-list-runtime\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { ThreadListItemClient } from \"./thread-list-item-runtime-client\";\nimport { ThreadClient } from \"./thread-runtime-client\";\nimport type { ThreadsState } from \"../scopes/threads\";\n\nconst ThreadListItemClientById = resource(function ThreadListItemClientById({\n runtime,\n id,\n}: {\n runtime: ThreadListRuntime;\n id: string;\n}) {\n const threadListItemRuntime = useMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return useResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n }),\n );\n});\n\nexport const ThreadListClient = resource(function ThreadListClient({\n runtime,\n __internal_assistantRuntime,\n}: {\n runtime: ThreadListRuntime;\n __internal_assistantRuntime: AssistantRuntime;\n}): ClientOutput<\"threads\"> {\n const runtimeState = useSubscribable(runtime);\n\n const main = useClientResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n const threadItems = useClientLookup(\n () =>\n Object.keys(runtimeState.threadItems).map((id) =>\n withKey(id, ThreadListItemClientById({ runtime, id })),\n ),\n [runtimeState.threadItems, runtime],\n );\n\n const state = useMemo<ThreadsState>(() => {\n return {\n mainThreadId: runtimeState.mainThreadId,\n newThreadId: runtimeState.newThreadId ?? null,\n isLoading: runtimeState.isLoading,\n isLoadingMore: runtimeState.isLoadingMore,\n hasMore: runtimeState.hasMore,\n threadIds: runtimeState.threadIds,\n archivedThreadIds: runtimeState.archivedThreadIds,\n threadItems: threadItems.state,\n\n main: main.state,\n };\n }, [runtimeState, threadItems.state, main.state]);\n\n return {\n getState: () => state,\n thread: () => main.methods,\n item: (threadIdOrOptions) => {\n if (threadIdOrOptions === \"main\") {\n return threadItems.get({ key: state.mainThreadId });\n }\n\n if (\"id\" in threadIdOrOptions) {\n return threadItems.get({ key: threadIdOrOptions.id });\n }\n\n const { index, archived = false } = threadIdOrOptions;\n const id = archived\n ? state.archivedThreadIds[index]!\n : state.threadIds[index]!;\n return threadItems.get({ key: id });\n },\n switchToThread: async (threadId, options) => {\n await runtime.switchToThread(threadId, options);\n },\n switchToNewThread: async () => {\n await runtime.switchToNewThread();\n },\n getLoadThreadsPromise: () => runtime.getLoadThreadsPromise(),\n reload: () => runtime.reload(),\n loadMore: () => runtime.loadMore(),\n __internal_getAssistantRuntime: () => __internal_assistantRuntime,\n };\n});\n"],"mappings":";;;;;;;AAcA,MAAM,2BAA2B,SAAS,SAAS,yBAAyB,EAC1E,SACA,MAIC;CAKD,OAAO,YACL,qBAAqB,EACnB,SAN0B,cACtB,QAAQ,YAAY,EAAE,GAC5B,CAAC,SAAS,EAAE,CAImB,EAC/B,CAAC,CACH;AACF,CAAC;AAED,MAAa,mBAAmB,SAAS,SAAS,iBAAiB,EACjE,SACA,+BAI0B;CAC1B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,OAAO,kBACX,aAAa,EACX,SAAS,QAAQ,KACnB,CAAC,CACH;CACA,MAAM,cAAc,sBAEhB,OAAO,KAAK,aAAa,WAAW,CAAC,CAAC,KAAK,OACzC,QAAQ,IAAI,yBAAyB;EAAE;EAAS;CAAG,CAAC,CAAC,CACvD,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,cAAc,aAAa;GAC3B,aAAa,aAAa,eAAe;GACzC,WAAW,aAAa;GACxB,eAAe,aAAa;GAC5B,SAAS,aAAa;GACtB,WAAW,aAAa;GACxB,mBAAmB,aAAa;GAChC,aAAa,YAAY;GAEzB,MAAM,KAAK;EACb;CACF,GAAG;EAAC;EAAc,YAAY;EAAO,KAAK;CAAK,CAAC;CAEhD,OAAO;EACL,gBAAgB;EAChB,cAAc,KAAK;EACnB,OAAO,sBAAsB;GAC3B,IAAI,sBAAsB,QACxB,OAAO,YAAY,IAAI,EAAE,KAAK,MAAM,aAAa,CAAC;GAGpD,IAAI,QAAQ,mBACV,OAAO,YAAY,IAAI,EAAE,KAAK,kBAAkB,GAAG,CAAC;GAGtD,MAAM,EAAE,OAAO,WAAW,UAAU;GACpC,MAAM,KAAK,WACP,MAAM,kBAAkB,SACxB,MAAM,UAAU;GACpB,OAAO,YAAY,IAAI,EAAE,KAAK,GAAG,CAAC;EACpC;EACA,gBAAgB,OAAO,UAAU,YAAY;GAC3C,MAAM,QAAQ,eAAe,UAAU,OAAO;EAChD;EACA,mBAAmB,YAAY;GAC7B,MAAM,QAAQ,kBAAkB;EAClC;EACA,6BAA6B,QAAQ,sBAAsB;EAC3D,cAAc,QAAQ,OAAO;EAC7B,gBAAgB,QAAQ,SAAS;EACjC,sCAAsC;CACxC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"thread-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;;cAiCa,YAAA,GAAY,KAAA;WAGd,aAAA;AAAA;WAAA,aAAA;AAAA"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSubscribable } from "./useSubscribable.js";
|
|
2
2
|
import { ComposerClient } from "./composer-runtime-client.js";
|
|
3
3
|
import { MessageClient } from "./message-runtime-client.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { useEffect, useMemo } from "@assistant-ui/tap/react-shim";
|
|
5
|
+
import { useAssistantEmit, useClientLookup, useClientResource } from "@assistant-ui/store";
|
|
6
|
+
import { resource, useResource, withKey } from "@assistant-ui/tap";
|
|
6
7
|
//#region src/store/runtime-clients/thread-runtime-client.ts
|
|
7
|
-
const MessageClientById = resource(({ runtime, id, threadIdRef })
|
|
8
|
-
return
|
|
9
|
-
runtime:
|
|
8
|
+
const MessageClientById = resource(function MessageClientById({ runtime, id, threadIdRef }) {
|
|
9
|
+
return useResource(MessageClient({
|
|
10
|
+
runtime: useMemo(() => runtime.getMessageById(id), [runtime, id]),
|
|
10
11
|
threadIdRef
|
|
11
12
|
}));
|
|
12
13
|
});
|
|
13
|
-
const ThreadClient = resource(({ runtime })
|
|
14
|
-
const runtimeState =
|
|
15
|
-
const emit =
|
|
16
|
-
|
|
14
|
+
const ThreadClient = resource(function ThreadClient({ runtime }) {
|
|
15
|
+
const runtimeState = useSubscribable(runtime);
|
|
16
|
+
const emit = useAssistantEmit();
|
|
17
|
+
useEffect(() => {
|
|
17
18
|
const unsubscribers = [];
|
|
18
19
|
for (const event of [
|
|
19
20
|
"runStart",
|
|
@@ -31,14 +32,14 @@ const ThreadClient = resource(({ runtime }) => {
|
|
|
31
32
|
for (const unsub of unsubscribers) unsub();
|
|
32
33
|
};
|
|
33
34
|
}, [runtime, emit]);
|
|
34
|
-
const threadIdRef =
|
|
35
|
+
const threadIdRef = useMemo(() => ({ get current() {
|
|
35
36
|
return runtime.getState().threadId;
|
|
36
37
|
} }), [runtime]);
|
|
37
|
-
const composer =
|
|
38
|
+
const composer = useClientResource(ComposerClient({
|
|
38
39
|
runtime: runtime.composer,
|
|
39
40
|
threadIdRef
|
|
40
41
|
}));
|
|
41
|
-
const messages =
|
|
42
|
+
const messages = useClientLookup(() => runtimeState.messages.map((m) => withKey(m.id, MessageClientById({
|
|
42
43
|
runtime,
|
|
43
44
|
id: m.id,
|
|
44
45
|
threadIdRef
|
|
@@ -47,7 +48,7 @@ const ThreadClient = resource(({ runtime }) => {
|
|
|
47
48
|
runtime,
|
|
48
49
|
threadIdRef
|
|
49
50
|
]);
|
|
50
|
-
const state =
|
|
51
|
+
const state = useMemo(() => {
|
|
51
52
|
return {
|
|
52
53
|
isEmpty: messages.state.length === 0 && !runtimeState.isLoading,
|
|
53
54
|
isDisabled: runtimeState.isDisabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport {\
|
|
1
|
+
{"version":3,"file":"thread-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst MessageClientById = resource(function MessageClientById({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n});\n\nexport const ThreadClient = resource(function ThreadClient({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => ({\n get current() {\n return runtime.getState()!.threadId;\n },\n }),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = useClientLookup(\n () =>\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef })),\n ),\n [runtimeState.messages, runtime, threadIdRef],\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n append: runtime.append,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n});\n"],"mappings":";;;;;;;AAgBA,MAAM,oBAAoB,SAAS,SAAS,kBAAkB,EAC5D,SACA,IACA,eAKC;CAMD,OAAO,YAAY,cAAc;EAAE,SALZ,cACf,QAAQ,eAAe,EAAE,GAC/B,CAAC,SAAS,EAAE,CAG2C;EAAG;CAAY,CAAC,CAAC;AAC5E,CAAC;AAED,MAAa,eAAe,SAAS,SAAS,aAAa,EACzD,WAGyB;CACzB,MAAM,eAAe,gBAAgB,OAAO;CAC5C,MAAM,OAAO,iBAAiB;CAE9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAStC,KAAK,MAAM,SAAS;GANlB;GACA;GACA;GACA;EAG6B,GAAG;GAChC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,MAAM,WAAW,QAAQ,SAAS,CAAC,EAAE,YAAY;IACjD,KAAK,UAAU,SAAS,EACtB,SACF,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,MAAM,cAAc,eACX,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,CAAC,CAAE;CAC7B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;CACF,CAAC,CACH;CACA,MAAM,WAAW,sBAEb,aAAa,SAAS,KAAK,MACzB,QAAQ,EAAE,IAAI,kBAAkB;EAAE;EAAS,IAAI,EAAE;EAAI;CAAY,CAAC,CAAC,CACrE,GACF;EAAC,aAAa;EAAU;EAAS;CAAW,CAC9C;CAEA,MAAM,QAAQ,cAA2B;EACvC,OAAO;GACL,SAAS,SAAS,MAAM,WAAW,KAAK,CAAC,aAAa;GACtD,YAAY,aAAa;GACzB,WAAW,aAAa;GACxB,WAAW,aAAa;GACxB,cAAc,aAAa;GAC3B,OAAO,aAAa;GACpB,aAAa,aAAa;GAC1B,QAAQ,aAAa;GACrB,QAAQ,aAAa;GACrB,OAAO,aAAa;GAEpB,UAAU,SAAS;GACnB,UAAU,SAAS;EACrB;CACF,GAAG;EAAC;EAAc;EAAU,SAAS;CAAK,CAAC;CAE3C,OAAO;EACL,gBAAgB;EAChB,gBAAgB,SAAS;EACzB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,iBAAiB,QAAQ;EACzB,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,cAAc,QAAQ;EACtB,iBAAiB,QAAQ;EACzB,gBAAgB,QAAQ;EACxB,sBAAsB,QAAQ;EAC9B,WAAW,QAAQ;EACnB,aAAa,QAAQ;EACrB,UAAU,aAAa;GACrB,IAAI,QAAQ,UACV,OAAO,SAAS,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAExC,OAAO,SAAS,IAAI,QAAQ;EAEhC;EACA,6BAA6B;CAC/B;AACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SubscribableWithState } from "../../subscribable/subscribable.js";
|
|
2
|
+
|
|
3
|
+
//#region src/store/runtime-clients/useSubscribable.d.ts
|
|
4
|
+
declare const useSubscribable: <T>(subscribable: Omit<SubscribableWithState<T, any>, "path">) => T;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { useSubscribable };
|
|
7
|
+
//# sourceMappingURL=useSubscribable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSubscribable.d.ts","names":[],"sources":["../../../src/store/runtime-clients/useSubscribable.ts"],"mappings":";;;cAGa,eAAA,MACX,YAAA,EAAc,IAAA,CAAK,qBAAA,CAAsB,CAAA,oBAAgB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
2
|
+
//#region src/store/runtime-clients/useSubscribable.ts
|
|
3
|
+
const useSubscribable = (subscribable) => {
|
|
4
|
+
const [, setState] = useState(subscribable.getState);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
setState(subscribable.getState());
|
|
7
|
+
return subscribable.subscribe(() => {
|
|
8
|
+
setState(subscribable.getState());
|
|
9
|
+
});
|
|
10
|
+
}, [subscribable]);
|
|
11
|
+
return subscribable.getState();
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { useSubscribable };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=useSubscribable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSubscribable.js","names":[],"sources":["../../../src/store/runtime-clients/useSubscribable.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport type { SubscribableWithState } from \"../../subscribable/subscribable\";\n\nexport const useSubscribable = <T>(\n subscribable: Omit<SubscribableWithState<T, any>, \"path\">,\n) => {\n const [, setState] = useState(subscribable.getState);\n useEffect(() => {\n setState(subscribable.getState());\n return subscribable.subscribe(() => {\n setState(subscribable.getState());\n });\n }, [subscribable]);\n\n return subscribable.getState();\n};\n"],"mappings":";;AAGA,MAAa,mBACX,iBACG;CACH,MAAM,GAAG,YAAY,SAAS,aAAa,QAAQ;CACnD,gBAAgB;EACd,SAAS,aAAa,SAAS,CAAC;EAChC,OAAO,aAAa,gBAAgB;GAClC,SAAS,aAAa,SAAS,CAAC;EAClC,CAAC;CACH,GAAG,CAAC,YAAY,CAAC;CAEjB,OAAO,aAAa,SAAS;AAC/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { QueueItemClientSchema } from "./scopes/queue-item.js";
|
|
1
2
|
import { ThreadListItemClientSchema } from "./scopes/thread-list-item.js";
|
|
2
3
|
import { AttachmentClientSchema } from "./scopes/attachment.js";
|
|
3
|
-
import { QueueItemClientSchema } from "./scopes/queue-item.js";
|
|
4
4
|
import { ComposerClientSchema } from "./scopes/composer.js";
|
|
5
5
|
import { PartClientSchema } from "./scopes/part.js";
|
|
6
6
|
import { MessageClientSchema } from "./scopes/message.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { MessageRole, RunConfig } from "../../types/message.js";
|
|
2
2
|
import { Attachment, CreateAttachment } from "../../types/attachment.js";
|
|
3
3
|
import { QuoteInfo } from "../../types/quote.js";
|
|
4
|
+
import { QueueItemMethods, QueueItemState } from "./queue-item.js";
|
|
4
5
|
import { AttachmentAddErrorReason, DictationState, SendOptions } from "../../runtime/interfaces/composer-runtime-core.js";
|
|
5
6
|
import { ComposerRuntime } from "../../runtime/api/composer-runtime.js";
|
|
6
7
|
import { AttachmentMethods } from "./attachment.js";
|
|
7
|
-
import { QueueItemMethods, QueueItemState } from "./queue-item.js";
|
|
8
8
|
|
|
9
9
|
//#region src/store/scopes/composer.d.ts
|
|
10
10
|
type ComposerSendOptions = SendOptions & {
|
|
@@ -3,6 +3,7 @@ type QueueItemState = {
|
|
|
3
3
|
readonly id: string;
|
|
4
4
|
readonly prompt: string;
|
|
5
5
|
};
|
|
6
|
+
declare const EMPTY_QUEUE_ITEMS: readonly QueueItemState[];
|
|
6
7
|
type QueueItemMethods = {
|
|
7
8
|
getState(): QueueItemState;
|
|
8
9
|
steer(): void;
|
|
@@ -19,5 +20,5 @@ type QueueItemClientSchema = {
|
|
|
19
20
|
meta: QueueItemMeta;
|
|
20
21
|
};
|
|
21
22
|
//#endregion
|
|
22
|
-
export { QueueItemClientSchema, QueueItemMeta, QueueItemMethods, QueueItemState };
|
|
23
|
+
export { EMPTY_QUEUE_ITEMS, QueueItemClientSchema, QueueItemMeta, QueueItemMethods, QueueItemState };
|
|
23
24
|
//# sourceMappingURL=queue-item.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";KAAY,cAAA;EAAA,SACD,EAAA;EAAA,SACA,MAAM;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";KAAY,cAAA;EAAA,SACD,EAAA;EAAA,SACA,MAAM;AAAA;AAAA,cAGJ,iBAAA,WAA4B,cAAc;AAAA,KAE3C,gBAAA;EACV,QAAA,IAAY,cAAc;EAC1B,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;EACA,KAAA;IAAS,KAAA;EAAA;AAAA;AAAA,KAGC,qBAAA;EACV,OAAA,EAAS,gBAAA;EACT,IAAA,EAAM,aAAa;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-item.js","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"sourcesContent":["export type QueueItemState = {\n readonly id: string;\n readonly prompt: string;\n};\n\nexport const EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\n\nexport type QueueItemMethods = {\n getState(): QueueItemState;\n steer(): void;\n remove(): void;\n};\n\nexport type QueueItemMeta = {\n source: \"composer\";\n query: { index: number };\n};\n\nexport type QueueItemClientSchema = {\n methods: QueueItemMethods;\n meta: QueueItemMeta;\n};\n"],"mappings":";AAKA,MAAa,oBAA+C,OAAO,OAAO,CAAC,CAAC"}
|
|
@@ -3,9 +3,9 @@ import { ModelContext } from "../../model-context/types.js";
|
|
|
3
3
|
import { ThreadMessageLike } from "../../runtime/utils/thread-message-like.js";
|
|
4
4
|
import { ExportedMessageRepository } from "../../runtime/utils/message-repository.js";
|
|
5
5
|
import { RuntimeCapabilities, SpeechState, ThreadSuggestion, VoiceSessionState } from "../../runtime/interfaces/thread-runtime-core.js";
|
|
6
|
-
import { CreateAppendMessage, CreateResumeRunConfig, CreateStartRunConfig, ThreadRuntime } from "../../runtime/api/thread-runtime.js";
|
|
7
6
|
import { ComposerMethods, ComposerState } from "./composer.js";
|
|
8
7
|
import { MessageMethods, MessageState } from "./message.js";
|
|
8
|
+
import { CreateAppendMessage, CreateResumeRunConfig, CreateStartRunConfig, ThreadRuntime } from "../../runtime/api/thread-runtime.js";
|
|
9
9
|
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
10
10
|
|
|
11
11
|
//#region src/store/scopes/thread.d.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
|
|
2
1
|
import { ThreadListItemMethods, ThreadListItemState } from "./thread-list-item.js";
|
|
3
2
|
import { ThreadMethods, ThreadState } from "./thread.js";
|
|
3
|
+
import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
|
|
4
4
|
|
|
5
5
|
//#region src/store/scopes/threads.d.ts
|
|
6
6
|
type ThreadsState = {
|