@assistant-ui/core 0.3.13 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +9 -15
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/thread-history.d.ts +2 -0
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/adapters/voice.js +38 -15
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -2
- package/dist/internal.js +8 -7
- package/dist/model-context/frame/host.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +19 -4
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +4 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +50 -3
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/frame/types.d.ts +4 -1
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/frame/types.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +16 -4
- package/dist/model-context/registry.js.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +8 -1
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.js +23 -18
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +28 -12
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +11 -0
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -0
- package/dist/react/client/AdaptedRemoteThread.js +27 -0
- package/dist/react/client/AdaptedRemoteThread.js.map +1 -0
- package/dist/react/client/InMemoryThreadList.d.ts +19 -0
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -0
- package/dist/react/client/InMemoryThreadList.js +418 -0
- package/dist/react/client/InMemoryThreadList.js.map +1 -0
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +159 -102
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +34 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -0
- package/dist/react/client/RemoteThreadList.js +898 -0
- package/dist/react/client/RemoteThreadList.js.map +1 -0
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +38 -27
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +7 -2
- package/dist/react/index.js +5 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +145 -110
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js +20 -19
- package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js +2 -4
- package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js +2 -4
- package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js +2 -6
- package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js +2 -6
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js +2 -4
- package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js +2 -4
- package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +6 -2
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +3 -0
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.js +3 -0
- package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +3 -0
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.js +3 -0
- package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +13 -0
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts.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/runtimes/RemoteThreadListHookInstanceManager.d.ts +24 -10
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +115 -71
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +14 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +232 -63
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +30 -0
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -0
- package/dist/react/runtimes/RemoteThreadResource.js +136 -0
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -0
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -10
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js +3 -6
- package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +17 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.js +55 -0
- package/dist/react/runtimes/assistant-transport/commandQueue.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +11 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +165 -0
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +15 -0
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/runManager.js +86 -0
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/types.d.ts +130 -0
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/types.js +0 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +14 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +296 -0
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +7 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.js +25 -0
- package/dist/react/runtimes/assistant-transport/useConvertedState.js.map +1 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +7 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.js +27 -0
- package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -0
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +39 -13
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +3 -3
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +4 -0
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +7 -0
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +60 -17
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +16 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js +36 -0
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -0
- package/dist/react/runtimes/external-message-converter.js +14 -14
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +44 -28
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.js.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +9 -0
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -0
- package/dist/react/runtimes/useRuntimeAdapters.js +20 -0
- package/dist/react/runtimes/useRuntimeAdapters.js.map +1 -0
- package/dist/runtime/api/composer-runtime.d.ts +5 -0
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.js +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +1 -0
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +4 -2
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +12 -2
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +8 -2
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +8 -7
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -0
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +3 -3
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +0 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +10 -4
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +6 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.js +5 -5
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +2 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +27 -18
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +8 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.js +11 -0
- package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -0
- package/dist/runtimes/external-store/external-store-shared-options.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +4 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +8 -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 +37 -13
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +102 -0
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -0
- package/dist/runtimes/inert/InertThreadRuntimeCore.js +156 -0
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -0
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +3 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +78 -19
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +12 -59
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +10 -142
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +9 -0
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/adapter-changed.js +13 -0
- package/dist/runtimes/remote-thread-list/adapter-changed.js.map +1 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +16 -152
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +2 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.js +11 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +32 -1
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +1 -12
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +67 -38
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/external-thread.js +1 -1
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/suggestions.js +2 -2
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +10 -0
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -0
- package/dist/store/clients/thread-selection-events.js +40 -0
- package/dist/store/clients/thread-selection-events.js.map +1 -0
- package/dist/store/env.d.ts +5 -0
- package/dist/store/env.d.ts.map +1 -0
- package/dist/store/env.js +12 -0
- package/dist/store/env.js.map +1 -0
- package/dist/store/index.d.ts +5 -3
- package/dist/store/index.js +4 -2
- package/dist/store/internal.d.ts +4 -1
- package/dist/store/internal.js +4 -1
- package/dist/store/primitive-predicates.d.ts +19 -0
- package/dist/store/primitive-predicates.d.ts.map +1 -0
- package/dist/store/primitive-predicates.js +19 -0
- package/dist/store/primitive-predicates.js.map +1 -0
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +18 -11
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +5 -0
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -0
- package/dist/store/runtime-clients/handle-runtime-action.js +14 -0
- package/dist/store/runtime-clients/handle-runtime-action.js.map +1 -0
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +5 -0
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -0
- package/dist/store/runtime-clients/handle-thread-list-action.js +7 -0
- package/dist/store/runtime-clients/handle-thread-list-action.js.map +1 -0
- 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 +62 -29
- 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 +5 -6
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/scopes/composer.d.ts +9 -4
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +7 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -7
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +17 -1
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +2 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -18
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/message.d.ts +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +25 -9
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +2 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.js +2 -2
- package/dist/utils/notify-event-listeners.js.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +6 -0
- package/dist/utils/silent-runtime-action.d.ts.map +1 -0
- package/dist/utils/silent-runtime-action.js +7 -0
- package/dist/utils/silent-runtime-action.js.map +1 -0
- package/package.json +8 -8
- package/src/adapters/speech.test.ts +118 -1
- package/src/adapters/speech.ts +21 -22
- package/src/adapters/thread-history.ts +2 -0
- package/src/adapters/voice.test.ts +134 -0
- package/src/adapters/voice.ts +35 -27
- package/src/index.ts +1 -0
- package/src/internal.ts +1 -0
- package/src/model-context/frame/host.test.ts +87 -5
- package/src/model-context/frame/host.ts +18 -4
- package/src/model-context/frame/provider.test.ts +347 -20
- package/src/model-context/frame/provider.ts +58 -2
- package/src/model-context/frame/types.ts +5 -0
- package/src/model-context/registry.test.ts +131 -0
- package/src/model-context/registry.ts +16 -6
- package/src/react/RuntimeAdapter.test.ts +2 -0
- package/src/react/RuntimeAdapter.ts +20 -8
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +34 -17
- package/src/react/client/AdaptedRemoteThread.ts +41 -0
- package/src/react/client/InMemoryThreadList.test.tsx +148 -0
- package/src/react/client/InMemoryThreadList.ts +290 -0
- package/src/react/client/Interactables.test.ts +326 -2
- package/src/react/client/Interactables.ts +227 -110
- package/src/react/client/RemoteThreadList.test.ts +1222 -0
- package/src/react/client/RemoteThreadList.ts +1136 -0
- package/src/react/client/Tools.ts +36 -29
- package/src/react/index.ts +13 -0
- package/src/react/interactables-legacy/Interactables.test.ts +317 -0
- package/src/react/interactables-legacy/Interactables.ts +204 -128
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +15 -0
- package/src/react/primitive-hooks/useActionBarCopy.ts +15 -10
- package/src/react/primitive-hooks/useActionBarEdit.ts +2 -1
- package/src/react/primitive-hooks/useActionBarReload.ts +2 -6
- package/src/react/primitive-hooks/useBranchPickerNext.ts +2 -7
- package/src/react/primitive-hooks/useBranchPickerPrevious.ts +2 -7
- package/src/react/primitive-hooks/useComposerCancel.ts +2 -1
- package/src/react/primitive-hooks/useComposerSend.ts +2 -5
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +11 -0
- package/src/react/primitive-hooks/useSuggestionTrigger.ts +4 -5
- package/src/react/primitive-hooks/useThreadIsEmpty.ts +3 -0
- package/src/react/primitive-hooks/useThreadIsRunning.ts +3 -0
- package/src/react/primitives/message/MessageParts.tsx +0 -1
- package/src/react/primitives/thread/ThreadMessages.tsx +2 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +116 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +1 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +57 -6
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +272 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +171 -124
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.republish.test.ts +87 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +327 -83
- package/src/react/runtimes/RemoteThreadResource.test.ts +141 -0
- package/src/react/runtimes/RemoteThreadResource.ts +233 -0
- package/src/react/runtimes/RuntimeAdapterProvider.tsx +8 -20
- package/src/react/runtimes/assistant-transport/commandQueue.ts +68 -0
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +455 -0
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +172 -0
- package/src/react/runtimes/assistant-transport/runManager.ts +124 -0
- package/src/react/runtimes/assistant-transport/transport-delivery.test.tsx +79 -0
- package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +97 -0
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +414 -0
- package/src/react/runtimes/assistant-transport/types.ts +170 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +141 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +683 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +483 -0
- package/src/react/runtimes/assistant-transport/useConvertedState.ts +20 -0
- package/src/react/runtimes/assistant-transport/useLatestRef.ts +9 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +131 -6
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +61 -15
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +6 -4
- package/src/react/runtimes/cloud/auiV0.ts +17 -1
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +98 -3
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +104 -27
- package/src/react/runtimes/cloud/useCloudThreadListRuntime.test.tsx +56 -0
- package/src/react/runtimes/cloud/useCloudThreadListRuntime.ts +31 -0
- package/src/react/runtimes/external-message-converter.test.ts +143 -0
- package/src/react/runtimes/external-message-converter.ts +41 -41
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +58 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +83 -0
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +13 -3
- package/src/react/runtimes/useExternalStoreRuntime.ts +7 -0
- package/src/react/runtimes/useExternalStoreSharedOptions.ts +3 -1
- package/src/react/runtimes/useLocalRuntime.test.tsx +134 -8
- package/src/react/runtimes/useRuntimeAdapters.test.tsx +62 -0
- package/src/react/runtimes/useRuntimeAdapters.ts +28 -0
- package/src/runtime/api/composer-runtime.ts +5 -0
- package/src/runtime/api/thread-list-runtime.ts +3 -1
- package/src/runtime/api/thread-runtime.ts +20 -2
- package/src/runtime/base/base-composer-runtime-core.ts +6 -5
- package/src/runtime/base/base-thread-runtime-core.test.ts +191 -0
- package/src/runtime/base/base-thread-runtime-core.ts +11 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -4
- package/src/runtime/interfaces/thread-runtime-core.ts +6 -0
- package/src/runtime/queue/message-queue.ts +2 -1
- package/src/runtime/utils/message-repository.ts +26 -18
- package/src/runtime/utils/thread-runtime-lifecycle.ts +18 -0
- package/src/runtimes/external-store/external-store-shared-options.ts +3 -1
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +4 -1
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +103 -34
- package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +253 -0
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +232 -0
- package/src/runtimes/local/local-thread-runtime-core.test.ts +692 -4
- package/src/runtimes/local/local-thread-runtime-core.ts +117 -22
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +17 -205
- package/src/runtimes/remote-thread-list/adapter-changed.ts +10 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +28 -217
- package/src/runtimes/remote-thread-list/optimistic-state.test.ts +18 -0
- package/src/runtimes/remote-thread-list/optimistic-state.ts +13 -0
- package/src/runtimes/remote-thread-list/types.ts +34 -0
- package/src/runtimes/tool-invocations/EDGE_CASES.md +17 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +243 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +127 -61
- package/src/store/clients/external-thread.ts +1 -1
- package/src/store/clients/model-context-client.test.ts +16 -8
- package/src/store/clients/suggestions.ts +2 -2
- package/src/store/clients/thread-selection-events.ts +21 -0
- package/src/store/env.ts +11 -0
- package/src/store/index.ts +14 -1
- package/src/store/internal.ts +13 -0
- package/src/store/primitive-predicates.test.ts +184 -0
- package/src/store/primitive-predicates.ts +43 -0
- package/src/store/runtime-clients/attachment-runtime-client.test.ts +41 -0
- package/src/store/runtime-clients/attachment-runtime-client.ts +2 -1
- package/src/store/runtime-clients/handle-runtime-action.test.ts +40 -0
- package/src/store/runtime-clients/handle-runtime-action.ts +14 -0
- package/src/store/runtime-clients/handle-thread-list-action.test.ts +69 -0
- package/src/store/runtime-clients/handle-thread-list-action.ts +6 -0
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +15 -7
- package/src/store/runtime-clients/thread-list-runtime-client.ts +9 -6
- package/src/store/scopes/composer.ts +9 -4
- package/src/store/scopes/thread-list-item.ts +7 -6
- package/src/store/scopes/thread.ts +8 -7
- package/src/store/scopes/threads.ts +14 -0
- package/src/subscribable/subscribable.test.ts +77 -1
- package/src/subscribable/subscribable.ts +38 -23
- package/src/tests/MessageRepository.test.ts +48 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +2 -2
- package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +8 -6
- package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-unarchive.test.ts +25 -0
- package/src/tests/auiV0Encode.test.ts +66 -0
- package/src/tests/base-composer-runtime-core-send.test.ts +30 -0
- package/src/tests/base-composer-runtime-core.test.ts +28 -0
- package/src/tests/composer-can-cancel.test.ts +101 -0
- package/src/tests/empty-thread-core.test.ts +6 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +101 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +211 -1
- package/src/tests/external-store-thread-runtime-core.test.ts +124 -0
- package/src/tests/external-thread-isEmpty.test.tsx +100 -0
- package/src/tests/interactables-toolui-migration.test.tsx +66 -0
- package/src/tests/message-queue.test.ts +28 -0
- package/src/tests/remote-thread-list-adapter-switch.test.ts +383 -0
- package/src/tests/session-reset-notification.test.ts +145 -0
- package/src/tests/thread-switch-events.test.tsx +99 -1
- package/src/tests/tools-scope-migration.test.tsx +58 -0
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +67 -0
- package/src/types/message.ts +1 -1
- package/src/utils/composite-context-provider.test.ts +139 -0
- package/src/utils/composite-context-provider.ts +26 -8
- package/src/utils/notify-event-listeners.ts +10 -5
- package/src/utils/silent-runtime-action.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","AttachmentAddOperation","cancelled","attachmentIds","Set","AttachmentAddOperations","operations","start","operation","add","accept","attachmentId","finish","isCancelled","cancel","has","cancelAll","clear","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","Symbol","asyncIterator","useLiveState","initial","setState","ref","for","next","current","prev","T","set","const","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","attachment_1","error","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","deduped","i","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp9","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport { isCreateAttachment } from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\ntype AttachmentAddOperation = {\n cancelled: boolean;\n attachmentIds: Set<string>;\n};\n\nclass AttachmentAddOperations {\n private readonly operations = new Set<AttachmentAddOperation>();\n\n start() {\n const operation: AttachmentAddOperation = {\n cancelled: false,\n attachmentIds: new Set(),\n };\n this.operations.add(operation);\n return operation;\n }\n\n accept(operation: AttachmentAddOperation, attachmentId: string) {\n if (operation.cancelled) return false;\n operation.attachmentIds.add(attachmentId);\n return true;\n }\n\n finish(operation: AttachmentAddOperation) {\n this.operations.delete(operation);\n }\n\n isCancelled(operation: AttachmentAddOperation) {\n return operation.cancelled;\n }\n\n cancel(attachmentId: string) {\n for (const operation of [...this.operations]) {\n if (!operation.attachmentIds.has(attachmentId)) continue;\n operation.cancelled = true;\n this.operations.delete(operation);\n }\n }\n\n cancelAll() {\n for (const operation of this.operations) {\n operation.cancelled = true;\n }\n this.operations.clear();\n }\n}\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => boolean,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n if (!upsert(attachment)) break;\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","AttachmentAddOperation","cancelled","attachmentIds","Set","AttachmentAddOperations","operations","start","operation","add","accept","attachmentId","finish","isCancelled","cancel","has","cancelAll","clear","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","Symbol","asyncIterator","useLiveState","initial","setState","ref","for","next","current","prev","T","set","const","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","attachment_1","error","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","deduped","i","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp9","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport { isCreateAttachment } from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\ntype AttachmentAddOperation = {\n cancelled: boolean;\n attachmentIds: Set<string>;\n};\n\nclass AttachmentAddOperations {\n private readonly operations = new Set<AttachmentAddOperation>();\n\n start() {\n const operation: AttachmentAddOperation = {\n cancelled: false,\n attachmentIds: new Set(),\n };\n this.operations.add(operation);\n return operation;\n }\n\n accept(operation: AttachmentAddOperation, attachmentId: string) {\n if (operation.cancelled) return false;\n operation.attachmentIds.add(attachmentId);\n return true;\n }\n\n finish(operation: AttachmentAddOperation) {\n this.operations.delete(operation);\n }\n\n isCancelled(operation: AttachmentAddOperation) {\n return operation.cancelled;\n }\n\n cancel(attachmentId: string) {\n for (const operation of [...this.operations]) {\n if (!operation.attachmentIds.has(attachmentId)) continue;\n operation.cancelled = true;\n this.operations.delete(operation);\n }\n }\n\n cancelAll() {\n for (const operation of this.operations) {\n operation.cancelled = true;\n }\n this.operations.clear();\n }\n}\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => boolean,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n if (!upsert(attachment)) break;\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0 && !isLoading,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggestions.js","names":["useMemo","useState","resource","withKey","ClientOutput","useClientLookup","SuggestionsState","SuggestionState","ThreadSuggestion","SuggestionConfig","title","label","prompt","useSuggestionClient","state","getState","SuggestionClient","useSuggestionsClient","$","_c","t0","suggestions","map","_temp","suggestionClients","t1","t2","t3","index","index_0","get","suggestion","useStaticSuggestions","normalizedSuggestions","_temp2","Suggestions","useThreadSuggestions","_temp3","ThreadSuggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\nimport type { ThreadSuggestion } from \"../../runtime/interfaces/thread-runtime-core\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsClient = (\n state: SuggestionsState,\n): ClientOutput<\"suggestions\"> => {\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nconst useStaticSuggestions = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n const [state] = useState<SuggestionsState>(() => {\n const normalizedSuggestions = (suggestions ?? []).map((s) => {\n if (typeof s === \"string\") {\n return {\n title: s,\n label: \"\",\n prompt: s,\n };\n }\n return {\n title: s.title,\n label: s.label,\n prompt: s.prompt,\n };\n });\n\n return {\n suggestions: normalizedSuggestions,\n };\n });\n\n return useSuggestionsClient(state);\n};\n\nexport const Suggestions = resource(useStaticSuggestions);\n\nconst useThreadSuggestions = (\n suggestions: readonly ThreadSuggestion[],\n): ClientOutput<\"suggestions\"> => {\n const state = useMemo<SuggestionsState>(\n () => ({\n suggestions: suggestions.map((s) => ({\n title: s.prompt,\n label: \"\",\n prompt: s.prompt,\n })),\n }),\n [suggestions],\n );\n\n return useSuggestionsClient(state);\n};\n\nexport const ThreadSuggestions = resource(useThreadSuggestions);\n"],"mappings":";;;;;AAYA,MAAMa,uBACJC,UAC+B;CAC/B,OAAO,EACLC,gBAAgBD,MAClB;AACF;AAEA,MAAME,mBAAmBd,SAASW,mBAAmB;AAErD,MAAMI,wBAAuBH,UAAA;CAAA,MAAAI,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAJ,MAAAO,aAAA;EAIzBD,KAAAN,MAAKO,YAAYC,IAAKC,KAEtB;EAACL,EAAA,KAAAJ,MAAAO;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAHH,MAAAM,oBAA0BnB,gBACxBe,EAGF;CAAE,IAAAK;CAAA,IAAAP,EAAA,OAAAJ,OAAA;EAGUW,WAAMX;EAAKI,EAAA,KAAAJ;EAAAI,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAM,mBAAA;EACTE,MAAAC,OAAA;GAAC,MAAA,EAAAC,OAAAC,YAAAF;GAA4B,OAChCH,kBAAiBM,IAAK,EAAAF,OAAEA,QAAM,CAAC;EAAC;EACxCV,EAAA,KAAAM;EAAAN,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,IAAA;EAJIC,KAAA;GAAAZ,UACKU;GAAWM,YACTL;EAGd;EAACR,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OALMS;AAKN;AAGH,MAAMK,wBAAuBX,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAGgBD,WAAA;GActC,OAEI,EAAAC,cAfwBA,eAAA,CAAA,EAAA,CAAiBC,IAAMY,MAgBvCD,EACf;EAAC;EACFf,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAnBD,MAAA,CAAAJ,SAAgBb,SAA2BmB,EAmB1C;CAAE,OAEIH,qBAAqBH,KAAK;AAAC;AAGpC,MAAaqB,cAAcjC,SAAS8B,oBAAoB;AAExD,MAAMI,wBAAuBf,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAKVD,KAAAC,YAAWC,IAAKe,MAI3B;EAACnB,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAE,IAAA;EALEK,KAAA,EAAAJ,aACQD,GAKf;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAED,OAEKD,qBAAqBH,EAAK;AAAC;AAGpC,MAAawB,oBAAoBpC,SAASkC,oBAAoB;AA/DjC,SAAAb,MAAAQ,YAAAH,OAAA;CAAA,OAKvBzB,QAAQyB,OAAOZ,iBAAiBe,UAAU,GAAG,CAACA,UAAU,CAAC;AAAC;AAYnC,SAAAG,OAAAK,GAAA;CAKvB,IAAI,OAAOA,MAAM,UAAQ,OAChB;EAAA7B,OACE6B;EAAC5B,OACD;EAAEC,QACD2B;CACV;CACD,OACM;EAAA7B,OACE6B,EAAC7B;EAAMC,OACP4B,EAAC5B;EAAMC,QACN2B,EAAC3B;CACX;AAAC;AAasB,SAAAyB,OAAAE,GAAA;CAAA,OAKc;EAAA7B,OAC5B6B,EAAC3B;EAAOD,
|
|
1
|
+
{"version":3,"file":"suggestions.js","names":["useMemo","useState","resource","withKey","ClientOutput","useClientLookup","SuggestionsState","SuggestionState","ThreadSuggestion","SuggestionConfig","title","label","prompt","useSuggestionClient","state","getState","SuggestionClient","useSuggestionsClient","$","_c","t0","suggestions","map","_temp","suggestionClients","t1","t2","t3","index","index_0","get","suggestion","useStaticSuggestions","normalizedSuggestions","_temp2","Suggestions","useThreadSuggestions","_temp3","ThreadSuggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\nimport type { ThreadSuggestion } from \"../../runtime/interfaces/thread-runtime-core\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsClient = (\n state: SuggestionsState,\n): ClientOutput<\"suggestions\"> => {\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nconst useStaticSuggestions = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n const [state] = useState<SuggestionsState>(() => {\n const normalizedSuggestions = (suggestions ?? []).map((s) => {\n if (typeof s === \"string\") {\n return {\n title: s,\n label: \"\",\n prompt: s,\n };\n }\n return {\n title: s.title,\n label: s.label,\n prompt: s.prompt,\n };\n });\n\n return {\n suggestions: normalizedSuggestions,\n };\n });\n\n return useSuggestionsClient(state);\n};\n\nexport const Suggestions = resource(useStaticSuggestions);\n\nconst useThreadSuggestions = (\n suggestions: readonly ThreadSuggestion[],\n): ClientOutput<\"suggestions\"> => {\n const state = useMemo<SuggestionsState>(\n () => ({\n suggestions: suggestions.map((s) => ({\n title: s.title ?? s.prompt,\n label: s.label ?? \"\",\n prompt: s.prompt,\n })),\n }),\n [suggestions],\n );\n\n return useSuggestionsClient(state);\n};\n\nexport const ThreadSuggestions = resource(useThreadSuggestions);\n"],"mappings":";;;;;AAYA,MAAMa,uBACJC,UAC+B;CAC/B,OAAO,EACLC,gBAAgBD,MAClB;AACF;AAEA,MAAME,mBAAmBd,SAASW,mBAAmB;AAErD,MAAMI,wBAAuBH,UAAA;CAAA,MAAAI,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAJ,MAAAO,aAAA;EAIzBD,KAAAN,MAAKO,YAAYC,IAAKC,KAEtB;EAACL,EAAA,KAAAJ,MAAAO;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAHH,MAAAM,oBAA0BnB,gBACxBe,EAGF;CAAE,IAAAK;CAAA,IAAAP,EAAA,OAAAJ,OAAA;EAGUW,WAAMX;EAAKI,EAAA,KAAAJ;EAAAI,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAM,mBAAA;EACTE,MAAAC,OAAA;GAAC,MAAA,EAAAC,OAAAC,YAAAF;GAA4B,OAChCH,kBAAiBM,IAAK,EAAAF,OAAEA,QAAM,CAAC;EAAC;EACxCV,EAAA,KAAAM;EAAAN,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,IAAA;EAJIC,KAAA;GAAAZ,UACKU;GAAWM,YACTL;EAGd;EAACR,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OALMS;AAKN;AAGH,MAAMK,wBAAuBX,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAGgBD,WAAA;GActC,OAEI,EAAAC,cAfwBA,eAAA,CAAA,EAAA,CAAiBC,IAAMY,MAgBvCD,EACf;EAAC;EACFf,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAnBD,MAAA,CAAAJ,SAAgBb,SAA2BmB,EAmB1C;CAAE,OAEIH,qBAAqBH,KAAK;AAAC;AAGpC,MAAaqB,cAAcjC,SAAS8B,oBAAoB;AAExD,MAAMI,wBAAuBf,gBAAA;CAAA,MAAAH,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,aAAA;EAKVD,KAAAC,YAAWC,IAAKe,MAI3B;EAACnB,EAAA,KAAAG;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAE,IAAA;EALEK,KAAA,EAAAJ,aACQD,GAKf;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAED,OAEKD,qBAAqBH,EAAK;AAAC;AAGpC,MAAawB,oBAAoBpC,SAASkC,oBAAoB;AA/DjC,SAAAb,MAAAQ,YAAAH,OAAA;CAAA,OAKvBzB,QAAQyB,OAAOZ,iBAAiBe,UAAU,GAAG,CAACA,UAAU,CAAC;AAAC;AAYnC,SAAAG,OAAAK,GAAA;CAKvB,IAAI,OAAOA,MAAM,UAAQ,OAChB;EAAA7B,OACE6B;EAAC5B,OACD;EAAEC,QACD2B;CACV;CACD,OACM;EAAA7B,OACE6B,EAAC7B;EAAMC,OACP4B,EAAC5B;EAAMC,QACN2B,EAAC3B;CACX;AAAC;AAasB,SAAAyB,OAAAE,GAAA;CAAA,OAKc;EAAA7B,OAC5B6B,EAAC7B,SAAU6B,EAAC3B;EAAOD,OACnB4B,EAAC5B,SAAD;EAAaC,QACZ2B,EAAC3B;CACX;AAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/store/clients/thread-selection-events.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Emits `threads.selectionChanged` whenever the main thread selection changes.
|
|
4
|
+
* Does not emit for the initially selected thread on mount. Every `threads`
|
|
5
|
+
* client whose selection can change calls this with its current main thread id.
|
|
6
|
+
*/
|
|
7
|
+
declare const useThreadSelectionEvents: (mainThreadId: string) => void;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { useThreadSelectionEvents };
|
|
10
|
+
//# sourceMappingURL=thread-selection-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-selection-events.d.ts","names":[],"sources":["../../../src/store/clients/thread-selection-events.ts"],"mappings":";;;;;;cAQa,2BAA4B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
|
+
import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
|
|
3
|
+
import { useAssistantEmit } from "@assistant-ui/store/client";
|
|
4
|
+
//#region src/store/clients/thread-selection-events.ts
|
|
5
|
+
/**
|
|
6
|
+
* Emits `threads.selectionChanged` whenever the main thread selection changes.
|
|
7
|
+
* Does not emit for the initially selected thread on mount. Every `threads`
|
|
8
|
+
* client whose selection can change calls this with its current main thread id.
|
|
9
|
+
*/
|
|
10
|
+
const useThreadSelectionEvents = (mainThreadId) => {
|
|
11
|
+
const $ = c(4);
|
|
12
|
+
const emit = useAssistantEmit();
|
|
13
|
+
const previousMainThreadIdRef = useRef(mainThreadId);
|
|
14
|
+
let t0;
|
|
15
|
+
let t1;
|
|
16
|
+
if ($[0] !== emit || $[1] !== mainThreadId) {
|
|
17
|
+
t0 = () => {
|
|
18
|
+
const previousThreadId = previousMainThreadIdRef.current;
|
|
19
|
+
if (previousThreadId === mainThreadId) return;
|
|
20
|
+
previousMainThreadIdRef.current = mainThreadId;
|
|
21
|
+
emit("threads.selectionChanged", {
|
|
22
|
+
threadId: mainThreadId,
|
|
23
|
+
previousThreadId
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
t1 = [mainThreadId, emit];
|
|
27
|
+
$[0] = emit;
|
|
28
|
+
$[1] = mainThreadId;
|
|
29
|
+
$[2] = t0;
|
|
30
|
+
$[3] = t1;
|
|
31
|
+
} else {
|
|
32
|
+
t0 = $[2];
|
|
33
|
+
t1 = $[3];
|
|
34
|
+
}
|
|
35
|
+
useEffect(t0, t1);
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { useThreadSelectionEvents };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=thread-selection-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-selection-events.js","names":["useEffect","useRef","useAssistantEmit","useThreadSelectionEvents","mainThreadId","$","_c","emit","previousMainThreadIdRef","t0","t1","previousThreadId","current","threadId"],"sources":["../../../src/store/clients/thread-selection-events.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useAssistantEmit } from \"@assistant-ui/store/client\";\n\n/**\n * Emits `threads.selectionChanged` whenever the main thread selection changes.\n * Does not emit for the initially selected thread on mount. Every `threads`\n * client whose selection can change calls this with its current main thread id.\n */\nexport const useThreadSelectionEvents = (mainThreadId: string) => {\n const emit = useAssistantEmit();\n const previousMainThreadIdRef = useRef(mainThreadId);\n useEffect(() => {\n const previousThreadId = previousMainThreadIdRef.current;\n if (previousThreadId === mainThreadId) return;\n previousMainThreadIdRef.current = mainThreadId;\n emit(\"threads.selectionChanged\", {\n threadId: mainThreadId,\n previousThreadId,\n });\n }, [mainThreadId, emit]);\n};\n"],"mappings":";;;;;;;;;AAQA,MAAaG,4BAA2BC,iBAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACtC,MAAAC,OAAaL,iBAAiB;CAC9B,MAAAM,0BAAgCP,OAAOG,YAAY;CAAE,IAAAK;CAAA,IAAAC;CAAA,IAAAL,EAAA,OAAAE,QAAAF,EAAA,OAAAD,cAAA;EAC3CK,WAAA;GACR,MAAAE,mBAAyBH,wBAAuBI;GAChD,IAAID,qBAAqBP,cAAY;GACrCI,wBAAuBI,UAAWR;GAClCG,KAAK,4BAA4B;IAAAM,UACrBT;IAAYO;GAExB,CAAC;EAAC;EACDD,KAAA,CAACN,cAAcG,IAAI;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAD;EAAAC,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAA;EAAAD,KAAAJ,EAAA;EAAAK,KAAAL,EAAA;CAAA;CARvBL,UAAUS,IAQPC,EAAoB;AAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","names":[],"sources":["../../src/store/env.ts"],"mappings":";cAEa"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/store/env.ts
|
|
2
|
+
const isDevelopment = (() => {
|
|
3
|
+
try {
|
|
4
|
+
return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
|
|
5
|
+
} catch {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
})();
|
|
9
|
+
//#endregion
|
|
10
|
+
export { isDevelopment };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","names":["isDevelopment","process","env","NODE_ENV"],"sources":["../../src/store/env.ts"],"sourcesContent":["// Bundlers replace the process.env.NODE_ENV literal statically (Vite, webpack,\n// Metro); the try covers hosts where no process binding exists at runtime.\nexport const isDevelopment = (() => {\n try {\n return (\n process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"test\"\n );\n } catch {\n return false;\n }\n})();\n"],"mappings":";AAEA,MAAaA,uBAAuB;CAClC,IAAI;EACF,OACEC,QAAQC,IAAIC,aAAa,iBAAiBF,QAAQC,IAAIC,aAAa;CAEvE,QAAQ;EACN,OAAO;CACT;AACF,EAAA,CAAG"}
|
package/dist/store/index.d.ts
CHANGED
|
@@ -9,10 +9,12 @@ import { MessageClientSchema, MessageMeta, MessageMethods, MessageState } from "
|
|
|
9
9
|
import { SuggestionClientSchema, SuggestionMeta, SuggestionMethods, SuggestionState } from "./scopes/suggestion.js";
|
|
10
10
|
import { Suggestion, SuggestionsClientSchema, SuggestionsMethods, SuggestionsState } from "./scopes/suggestions.js";
|
|
11
11
|
import { ThreadClientSchema, ThreadEvents, ThreadMeta, ThreadMethods, ThreadState } from "./scopes/thread.js";
|
|
12
|
-
import { ThreadsClientSchema, ThreadsMethods, ThreadsState } from "./scopes/threads.js";
|
|
12
|
+
import { ThreadsClientSchema, ThreadsEvents, ThreadsMethods, ThreadsState } from "./scopes/threads.js";
|
|
13
13
|
import { ModelContextClientSchema, ModelContextMethods, ModelContextState } from "./scopes/model-context.js";
|
|
14
14
|
import { ChainOfThoughtClientSchema, ChainOfThoughtMeta, ChainOfThoughtMethods, ChainOfThoughtPart, ChainOfThoughtState } from "./scopes/chain-of-thought.js";
|
|
15
|
-
import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
|
|
15
|
+
import { RuntimeAdapter, runtimeAdapterTransformScopes } from "../react/RuntimeAdapter.js";
|
|
16
|
+
import { InMemoryThreadList, InMemoryThreadListProps, inMemoryThreadListTransformScopes } from "../react/client/InMemoryThreadList.js";
|
|
17
|
+
import { RemoteThreadList, RemoteThreadListProps } from "../react/client/RemoteThreadList.js";
|
|
16
18
|
import { JoinStrategy, convertExternalMessages, useExternalMessageConverter } from "../react/runtimes/external-message-converter.js";
|
|
17
19
|
import { StreamingTimingAccessors, StreamingTimingOptions, StreamingTimingState } from "../runtime/utils/streaming-timing.js";
|
|
18
20
|
import { useStreamingTiming } from "../react/runtimes/useStreamingTiming.js";
|
|
@@ -27,4 +29,4 @@ import { SuggestionConfig, Suggestions } from "./clients/suggestions.js";
|
|
|
27
29
|
import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
|
|
28
30
|
import { ThreadMessageClient, ThreadMessageClientProps } from "./clients/thread-message-client.js";
|
|
29
31
|
import { ModelContext } from "./clients/model-context-client.js";
|
|
30
|
-
export { type AttachmentClientSchema, type AttachmentMeta, type AttachmentMethods, type AttachmentState, ChainOfThoughtClient, type ChainOfThoughtClientSchema, type ChainOfThoughtMeta, type ChainOfThoughtMethods, type ChainOfThoughtPart, type ChainOfThoughtState, type ComposerClientSchema, type ComposerEvents, type ComposerMeta, type ComposerMethods, type ComposerSendOptions, type ComposerState, ExternalThread, type ExternalThreadMessage, type ExternalThreadProps, type JoinStrategy, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, type MessageClientSchema, type MessageMeta, type MessageMethods, type MessageState, ModelContext, type ModelContextClientSchema, type ModelContextMethods, type ModelContextState, NoOpComposerClient, type PartClientSchema, type PartMeta, type PartMethods, type PartState, type QueueItemClientSchema, type QueueItemMeta, type QueueItemMethods, type QueueItemState, RuntimeAdapter, type RuntimeExtrasBrand, SingleThreadList, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, type Suggestion, type SuggestionClientSchema, type SuggestionConfig, type SuggestionMeta, type SuggestionMethods, type SuggestionState, Suggestions, type SuggestionsClientSchema, type SuggestionsMethods, type SuggestionsState, type ThreadClientSchema, type ThreadEvents, type ThreadListItemClientSchema, type ThreadListItemEvents, type ThreadListItemMeta, type ThreadListItemMethods, type ThreadListItemState, ThreadMessageClient, type ThreadMessageClientProps, type ThreadMeta, type ThreadMethods, type ThreadState, type ThreadsClientSchema, type ThreadsMethods, type ThreadsState, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
|
|
32
|
+
export { type AttachmentClientSchema, type AttachmentMeta, type AttachmentMethods, type AttachmentState, ChainOfThoughtClient, type ChainOfThoughtClientSchema, type ChainOfThoughtMeta, type ChainOfThoughtMethods, type ChainOfThoughtPart, type ChainOfThoughtState, type ComposerClientSchema, type ComposerEvents, type ComposerMeta, type ComposerMethods, type ComposerSendOptions, type ComposerState, ExternalThread, type ExternalThreadMessage, type ExternalThreadProps, InMemoryThreadList, type InMemoryThreadListProps, type JoinStrategy, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, type MessageClientSchema, type MessageMeta, type MessageMethods, type MessageState, ModelContext, type ModelContextClientSchema, type ModelContextMethods, type ModelContextState, NoOpComposerClient, type PartClientSchema, type PartMeta, type PartMethods, type PartState, type QueueItemClientSchema, type QueueItemMeta, type QueueItemMethods, type QueueItemState, RemoteThreadList, type RemoteThreadListProps, RuntimeAdapter, type RuntimeExtrasBrand, SingleThreadList, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, type Suggestion, type SuggestionClientSchema, type SuggestionConfig, type SuggestionMeta, type SuggestionMethods, type SuggestionState, Suggestions, type SuggestionsClientSchema, type SuggestionsMethods, type SuggestionsState, type ThreadClientSchema, type ThreadEvents, type ThreadListItemClientSchema, type ThreadListItemEvents, type ThreadListItemMeta, type ThreadListItemMethods, type ThreadListItemState, ThreadMessageClient, type ThreadMessageClientProps, type ThreadMeta, type ThreadMethods, type ThreadState, type ThreadsClientSchema, type ThreadsEvents, type ThreadsMethods, type ThreadsState, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, inMemoryThreadListTransformScopes, runtimeAdapterTransformScopes, useExternalMessageConverter, useStreamingTiming };
|
package/dist/store/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Suggestions } from "./clients/suggestions.js";
|
|
2
2
|
import { ModelContext } from "./clients/model-context-client.js";
|
|
3
|
-
import { RuntimeAdapter } from "../react/RuntimeAdapter.js";
|
|
3
|
+
import { RuntimeAdapter, runtimeAdapterTransformScopes } from "../react/RuntimeAdapter.js";
|
|
4
4
|
import { defineToolkit } from "../react/model-context/define-toolkit.js";
|
|
5
5
|
import { defineMcpToolkit } from "../react/model-context/define-mcp-toolkit.js";
|
|
6
|
+
import { InMemoryThreadList, inMemoryThreadListTransformScopes } from "../react/client/InMemoryThreadList.js";
|
|
7
|
+
import { RemoteThreadList } from "../react/client/RemoteThreadList.js";
|
|
6
8
|
import { convertExternalMessages, useExternalMessageConverter } from "../react/runtimes/external-message-converter.js";
|
|
7
9
|
import { useStreamingTiming } from "../react/runtimes/useStreamingTiming.js";
|
|
8
10
|
import { createRuntimeExtrasBrand } from "../runtime/utils/runtime-extras-brand.js";
|
|
@@ -11,4 +13,4 @@ import { ExternalThread } from "./clients/external-thread.js";
|
|
|
11
13
|
import { NoOpComposerClient } from "./clients/no-op-composer-client.js";
|
|
12
14
|
import { ChainOfThoughtClient } from "./clients/chain-of-thought-client.js";
|
|
13
15
|
import { ThreadMessageClient } from "./clients/thread-message-client.js";
|
|
14
|
-
export { ChainOfThoughtClient, ExternalThread, ModelContext, NoOpComposerClient, RuntimeAdapter, SingleThreadList, Suggestions, ThreadMessageClient, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, useExternalMessageConverter, useStreamingTiming };
|
|
16
|
+
export { ChainOfThoughtClient, ExternalThread, InMemoryThreadList, ModelContext, NoOpComposerClient, RemoteThreadList, RuntimeAdapter, SingleThreadList, Suggestions, ThreadMessageClient, convertExternalMessages, createRuntimeExtrasBrand, defineMcpToolkit, defineToolkit, inMemoryThreadListTransformScopes, runtimeAdapterTransformScopes, useExternalMessageConverter, useStreamingTiming };
|