@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
|
@@ -22,7 +22,7 @@ import type {
|
|
|
22
22
|
ThreadAssistantMessage,
|
|
23
23
|
} from "../../types/message";
|
|
24
24
|
import type { RunConfig } from "../../types/message";
|
|
25
|
-
import { toAssistantError } from "../../types/error";
|
|
25
|
+
import { MessageNotSentError, toAssistantError } from "../../types/error";
|
|
26
26
|
import type { ModelContextProvider } from "../../model-context/types";
|
|
27
27
|
import {
|
|
28
28
|
createMessageQueue,
|
|
@@ -33,6 +33,11 @@ import {
|
|
|
33
33
|
EMPTY_QUEUE_ITEMS,
|
|
34
34
|
type QueueItemState,
|
|
35
35
|
} from "../../store/scopes/queue-item";
|
|
36
|
+
import {
|
|
37
|
+
captureThreadRuntimeGeneration,
|
|
38
|
+
invalidateThreadRuntime,
|
|
39
|
+
isThreadRuntimeGenerationCurrent,
|
|
40
|
+
} from "../../runtime/utils/thread-runtime-lifecycle";
|
|
36
41
|
|
|
37
42
|
class AbortError extends Error {
|
|
38
43
|
override name = "AbortError";
|
|
@@ -162,6 +167,7 @@ export class LocalThreadRuntimeCore
|
|
|
162
167
|
public __internal_setOptions(options: LocalRuntimeOptionsBase) {
|
|
163
168
|
if (this._options === options) return;
|
|
164
169
|
|
|
170
|
+
const previousHistory = this._options?.adapters.history;
|
|
165
171
|
this._options = options;
|
|
166
172
|
|
|
167
173
|
let hasUpdates = false;
|
|
@@ -234,13 +240,31 @@ export class LocalThreadRuntimeCore
|
|
|
234
240
|
}
|
|
235
241
|
|
|
236
242
|
if (hasUpdates) this._notifySubscribers();
|
|
243
|
+
|
|
244
|
+
if (
|
|
245
|
+
this._loadRequested &&
|
|
246
|
+
!this._loadPromise &&
|
|
247
|
+
!previousHistory &&
|
|
248
|
+
options.adapters.history &&
|
|
249
|
+
this.messages.length === 0
|
|
250
|
+
) {
|
|
251
|
+
void this.__internal_load().catch((error: unknown) => {
|
|
252
|
+
console.error(
|
|
253
|
+
"[assistant-ui] local thread history load failed:",
|
|
254
|
+
error,
|
|
255
|
+
);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
237
258
|
}
|
|
238
259
|
|
|
239
260
|
private _loadPromise: Promise<void> | undefined;
|
|
261
|
+
private _loadRequested = false;
|
|
240
262
|
public __internal_load() {
|
|
263
|
+
this._loadRequested = true;
|
|
241
264
|
if (this._loadPromise) return this._loadPromise;
|
|
265
|
+
if (!this.adapters.history) return Promise.resolve();
|
|
242
266
|
|
|
243
|
-
const promise = this.adapters.history
|
|
267
|
+
const promise = this.adapters.history.load();
|
|
244
268
|
|
|
245
269
|
this._isLoading = true;
|
|
246
270
|
this._notifySubscribers();
|
|
@@ -312,38 +336,72 @@ export class LocalThreadRuntimeCore
|
|
|
312
336
|
this._queue?.adapter.remove(queueItemId);
|
|
313
337
|
}
|
|
314
338
|
|
|
339
|
+
private _rollbackAppend(messageId: string) {
|
|
340
|
+
try {
|
|
341
|
+
this.repository.deleteMessage(messageId);
|
|
342
|
+
} catch {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
this._notifySubscribers();
|
|
346
|
+
}
|
|
347
|
+
|
|
315
348
|
private async _runAppend(rawMessage: AppendMessage): Promise<void> {
|
|
316
349
|
// Stamped here rather than in `append` so a queued message is gated after
|
|
317
350
|
// the flush re-pointed its parentId at the current tail.
|
|
351
|
+
const generation = captureThreadRuntimeGeneration(this);
|
|
318
352
|
const message = this.enrichAppendMetadata(rawMessage);
|
|
319
353
|
this.ensureInitialized();
|
|
320
354
|
|
|
321
|
-
const initPromise = this._getInitializePromise?.();
|
|
322
|
-
if (initPromise) {
|
|
323
|
-
await initPromise;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
355
|
const newMessage = fromThreadMessageLike(message, generateId(), {
|
|
327
356
|
type: "complete",
|
|
328
357
|
reason: "unknown",
|
|
329
358
|
});
|
|
330
359
|
this.repository.addOrUpdateMessage(message.parentId, newMessage);
|
|
331
|
-
this.
|
|
360
|
+
this._notifySubscribers();
|
|
361
|
+
|
|
362
|
+
// Initialization only gates the history write and the run; the message
|
|
363
|
+
// is already on screen. A failed barrier rolls the optimistic message
|
|
364
|
+
// back and rejects as an unsent message so the composer restores the
|
|
365
|
+
// draft; a thread invalidated mid-wait rolls back silently.
|
|
366
|
+
try {
|
|
367
|
+
const initPromise = this._getInitializePromise?.();
|
|
368
|
+
if (initPromise) {
|
|
369
|
+
await initPromise;
|
|
370
|
+
}
|
|
371
|
+
} catch (error) {
|
|
372
|
+
this._rollbackAppend(newMessage.id);
|
|
373
|
+
if (!isThreadRuntimeGenerationCurrent(this, generation)) return;
|
|
374
|
+
const notSent = new MessageNotSentError();
|
|
375
|
+
notSent.cause = error;
|
|
376
|
+
throw notSent;
|
|
377
|
+
}
|
|
378
|
+
if (!isThreadRuntimeGenerationCurrent(this, generation)) {
|
|
379
|
+
this._rollbackAppend(newMessage.id);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
const historyWrite = this._options.adapters.history?.append({
|
|
332
383
|
parentId: message.parentId,
|
|
333
384
|
message: newMessage,
|
|
334
385
|
...(message.runConfig !== undefined && { runConfig: message.runConfig }),
|
|
335
386
|
});
|
|
387
|
+
void historyWrite?.catch(() => {});
|
|
336
388
|
|
|
337
389
|
const startRun = message.startRun ?? message.role === "user";
|
|
338
390
|
if (startRun) {
|
|
339
|
-
await
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
391
|
+
const [runResult, historyResult] = await Promise.allSettled([
|
|
392
|
+
this.startRun({
|
|
393
|
+
parentId: newMessage.id,
|
|
394
|
+
sourceId: message.sourceId,
|
|
395
|
+
runConfig: message.runConfig ?? {},
|
|
396
|
+
}),
|
|
397
|
+
historyWrite,
|
|
398
|
+
]);
|
|
399
|
+
if (runResult.status === "rejected") throw runResult.reason;
|
|
400
|
+
if (historyResult.status === "rejected") throw historyResult.reason;
|
|
344
401
|
} else {
|
|
345
402
|
this.repository.resetHead(newMessage.id);
|
|
346
403
|
this._notifySubscribers();
|
|
404
|
+
await historyWrite;
|
|
347
405
|
}
|
|
348
406
|
}
|
|
349
407
|
|
|
@@ -380,6 +438,10 @@ export class LocalThreadRuntimeCore
|
|
|
380
438
|
throw new Error("Runtime does not support importing external states.");
|
|
381
439
|
}
|
|
382
440
|
|
|
441
|
+
public unstable_notifySessionReset(): void {
|
|
442
|
+
throw new Error("Runtime does not support resetting sessions.");
|
|
443
|
+
}
|
|
444
|
+
|
|
383
445
|
public async startRun(
|
|
384
446
|
{ parentId, runConfig }: StartRunConfig,
|
|
385
447
|
runCallback?: ChatModelAdapter["run"],
|
|
@@ -424,6 +486,7 @@ export class LocalThreadRuntimeCore
|
|
|
424
486
|
this._activeRun = run;
|
|
425
487
|
this._runGeneration++;
|
|
426
488
|
|
|
489
|
+
let active = false;
|
|
427
490
|
try {
|
|
428
491
|
// mark busy for runs not started through the queue (regenerate, resume)
|
|
429
492
|
this._queue?.notifyBusy();
|
|
@@ -438,16 +501,18 @@ export class LocalThreadRuntimeCore
|
|
|
438
501
|
message,
|
|
439
502
|
runConfig,
|
|
440
503
|
alreadyPersisted,
|
|
504
|
+
run,
|
|
441
505
|
runCallback,
|
|
442
506
|
);
|
|
443
507
|
runCallback = undefined;
|
|
508
|
+
if (this._activeRun !== run) break;
|
|
444
509
|
} while (shouldContinue(message, this._options.unstable_humanToolNames));
|
|
445
510
|
} finally {
|
|
446
511
|
this._notifyEventSubscribers("runEnd", {});
|
|
447
512
|
// the settle belongs to this run only while it is still the active run
|
|
448
513
|
// or was cancelled (the engine expects a cancelled run's settle); a run
|
|
449
514
|
// superseded by a newer one stays silent
|
|
450
|
-
|
|
515
|
+
active = this._activeRun === run;
|
|
451
516
|
if (active) this._activeRun = null;
|
|
452
517
|
if (active || run.cancelled) {
|
|
453
518
|
queueMicrotask(() => this._queue?.notifyIdle());
|
|
@@ -455,6 +520,7 @@ export class LocalThreadRuntimeCore
|
|
|
455
520
|
}
|
|
456
521
|
|
|
457
522
|
if (
|
|
523
|
+
active &&
|
|
458
524
|
this.adapters.suggestion &&
|
|
459
525
|
message.status?.type !== "requires-action"
|
|
460
526
|
) {
|
|
@@ -484,6 +550,7 @@ export class LocalThreadRuntimeCore
|
|
|
484
550
|
message: ThreadAssistantMessage,
|
|
485
551
|
runConfig: RunConfig | undefined,
|
|
486
552
|
alreadyPersisted: boolean,
|
|
553
|
+
run: { cancelled: boolean },
|
|
487
554
|
runCallback?: ChatModelAdapter["run"],
|
|
488
555
|
) {
|
|
489
556
|
const messages = parentId ? this.repository.getMessages(parentId) : [];
|
|
@@ -498,7 +565,23 @@ export class LocalThreadRuntimeCore
|
|
|
498
565
|
const initialData = message.metadata?.unstable_data;
|
|
499
566
|
const initialSteps = message.metadata?.steps;
|
|
500
567
|
const initialCustom = message.metadata?.custom;
|
|
568
|
+
let hasStoredMessage = true;
|
|
569
|
+
try {
|
|
570
|
+
this.repository.getMessage(message.id);
|
|
571
|
+
} catch {
|
|
572
|
+
hasStoredMessage = false;
|
|
573
|
+
}
|
|
574
|
+
// Other writers replace the stored message object, so identity distinguishes this run from a newer owner.
|
|
575
|
+
const ownsMessage = () => {
|
|
576
|
+
if (!hasStoredMessage) return this._activeRun === run;
|
|
577
|
+
try {
|
|
578
|
+
return this.repository.getMessage(message.id).message === message;
|
|
579
|
+
} catch {
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
582
|
+
};
|
|
501
583
|
const updateMessage = (m: Partial<ChatModelRunResult>) => {
|
|
584
|
+
if (!ownsMessage()) return;
|
|
502
585
|
const newSteps = m.metadata?.steps;
|
|
503
586
|
const steps = newSteps
|
|
504
587
|
? [...(initialSteps ?? []), ...newSteps]
|
|
@@ -545,6 +628,7 @@ export class LocalThreadRuntimeCore
|
|
|
545
628
|
: undefined),
|
|
546
629
|
};
|
|
547
630
|
this.repository.addOrUpdateMessage(parentId, message);
|
|
631
|
+
hasStoredMessage = true;
|
|
548
632
|
this._notifySubscribers();
|
|
549
633
|
};
|
|
550
634
|
|
|
@@ -583,6 +667,12 @@ export class LocalThreadRuntimeCore
|
|
|
583
667
|
this.adapters.chatModel.run.bind(this.adapters.chatModel);
|
|
584
668
|
|
|
585
669
|
const abortSignal = abortController.signal;
|
|
670
|
+
const shouldCancelMessage = () =>
|
|
671
|
+
abortSignal.aborted &&
|
|
672
|
+
(message.status.type === "running" ||
|
|
673
|
+
(message.status.type === "requires-action" &&
|
|
674
|
+
(this._activeRun !== run ||
|
|
675
|
+
shouldContinue(message, this._options.unstable_humanToolNames))));
|
|
586
676
|
const threadId = this._getThreadId?.();
|
|
587
677
|
const promiseOrGenerator = runCallback({
|
|
588
678
|
messages,
|
|
@@ -601,9 +691,11 @@ export class LocalThreadRuntimeCore
|
|
|
601
691
|
if (Symbol.asyncIterator in promiseOrGenerator) {
|
|
602
692
|
for await (const r of promiseOrGenerator) {
|
|
603
693
|
if (abortSignal.aborted) {
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
694
|
+
if (shouldCancelMessage()) {
|
|
695
|
+
updateMessage({
|
|
696
|
+
status: { type: "incomplete", reason: "cancelled" },
|
|
697
|
+
});
|
|
698
|
+
}
|
|
607
699
|
break;
|
|
608
700
|
}
|
|
609
701
|
|
|
@@ -613,11 +705,13 @@ export class LocalThreadRuntimeCore
|
|
|
613
705
|
updateMessage(await promiseOrGenerator);
|
|
614
706
|
}
|
|
615
707
|
|
|
616
|
-
if (
|
|
708
|
+
if (shouldCancelMessage()) {
|
|
709
|
+
updateMessage({
|
|
710
|
+
status: { type: "incomplete", reason: "cancelled" },
|
|
711
|
+
});
|
|
712
|
+
} else if (message.status.type === "running") {
|
|
617
713
|
updateMessage({
|
|
618
|
-
status:
|
|
619
|
-
? { type: "incomplete", reason: "cancelled" }
|
|
620
|
-
: { type: "complete", reason: "unknown" },
|
|
714
|
+
status: { type: "complete", reason: "unknown" },
|
|
621
715
|
});
|
|
622
716
|
}
|
|
623
717
|
} catch (e) {
|
|
@@ -660,7 +754,7 @@ export class LocalThreadRuntimeCore
|
|
|
660
754
|
|
|
661
755
|
// Pauses are written only for adapters that can rewrite the entry later;
|
|
662
756
|
// an append-only adapter would strand a half-finished run in history.
|
|
663
|
-
if (isTerminal || (isPausing && history?.update)) {
|
|
757
|
+
if (ownsMessage() && (isTerminal || (isPausing && history?.update))) {
|
|
664
758
|
const write =
|
|
665
759
|
alreadyPersisted && history?.update
|
|
666
760
|
? history.update.bind(history)
|
|
@@ -674,6 +768,7 @@ export class LocalThreadRuntimeCore
|
|
|
674
768
|
}
|
|
675
769
|
|
|
676
770
|
public detach() {
|
|
771
|
+
invalidateThreadRuntime(this);
|
|
677
772
|
// drop the queue so pending items cannot dispatch on a detached thread
|
|
678
773
|
this._queue = null;
|
|
679
774
|
const error = new AbortError(true);
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import type { Unsubscribe } from "../../types/unsubscribe";
|
|
2
1
|
import type { ThreadMessage } from "../../types/message";
|
|
3
|
-
import
|
|
4
|
-
|
|
2
|
+
import {
|
|
3
|
+
InertThreadRuntimeCore,
|
|
4
|
+
createInertComposer,
|
|
5
|
+
} from "../inert/InertThreadRuntimeCore";
|
|
5
6
|
|
|
6
7
|
const READONLY_THREAD_ERROR = new Error(
|
|
7
8
|
"This is a readonly thread. You cannot perform mutations on readonly threads.",
|
|
8
9
|
);
|
|
9
10
|
|
|
10
|
-
export class ReadonlyThreadRuntimeCore
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
export class ReadonlyThreadRuntimeCore extends InertThreadRuntimeCore {
|
|
12
|
+
protected get error() {
|
|
13
|
+
return READONLY_THREAD_ERROR;
|
|
14
|
+
}
|
|
15
|
+
|
|
14
16
|
private _messages: readonly ThreadMessage[] = [];
|
|
15
17
|
|
|
16
18
|
get messages() {
|
|
@@ -39,198 +41,6 @@ export class ReadonlyThreadRuntimeCore
|
|
|
39
41
|
return [messageId];
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
switchToBranch(): void {
|
|
43
|
-
throw READONLY_THREAD_ERROR;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
append(): void {
|
|
47
|
-
throw READONLY_THREAD_ERROR;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
deleteMessage(): void {
|
|
51
|
-
throw READONLY_THREAD_ERROR;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
startRun(): void {
|
|
55
|
-
throw READONLY_THREAD_ERROR;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
resumeRun(): void {
|
|
59
|
-
throw READONLY_THREAD_ERROR;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
cancelRun(): void {}
|
|
63
|
-
|
|
64
|
-
addToolResult(): void {
|
|
65
|
-
throw READONLY_THREAD_ERROR;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
resumeToolCall(): void {
|
|
69
|
-
throw READONLY_THREAD_ERROR;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
respondToToolApproval(): void {
|
|
73
|
-
throw READONLY_THREAD_ERROR;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
speak(): void {
|
|
77
|
-
throw READONLY_THREAD_ERROR;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
stopSpeaking(): void {}
|
|
81
|
-
|
|
82
|
-
connectVoice(): void {
|
|
83
|
-
throw READONLY_THREAD_ERROR;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
disconnectVoice(): void {}
|
|
87
|
-
|
|
88
|
-
getVoiceVolume = () => 0;
|
|
89
|
-
subscribeVoiceVolume = (): Unsubscribe => () => {};
|
|
90
|
-
|
|
91
|
-
muteVoice(): void {
|
|
92
|
-
throw READONLY_THREAD_ERROR;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
unmuteVoice(): void {
|
|
96
|
-
throw READONLY_THREAD_ERROR;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
submitFeedback(): void {
|
|
100
|
-
throw READONLY_THREAD_ERROR;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
getModelContext() {
|
|
104
|
-
return {};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
exportExternalState() {
|
|
108
|
-
throw READONLY_THREAD_ERROR;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
importExternalState(): void {
|
|
112
|
-
throw READONLY_THREAD_ERROR;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
composer = {
|
|
116
|
-
attachments: [] as never[],
|
|
117
|
-
attachmentAccept: "*",
|
|
118
|
-
|
|
119
|
-
async addAttachment() {
|
|
120
|
-
throw READONLY_THREAD_ERROR;
|
|
121
|
-
},
|
|
122
|
-
|
|
123
|
-
async removeAttachment() {
|
|
124
|
-
throw READONLY_THREAD_ERROR;
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
isEditing: false as const,
|
|
128
|
-
canCancel: false,
|
|
129
|
-
canSend: false,
|
|
130
|
-
isEmpty: true,
|
|
131
|
-
text: "",
|
|
132
|
-
|
|
133
|
-
setText() {
|
|
134
|
-
throw READONLY_THREAD_ERROR;
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
role: "user" as const,
|
|
138
|
-
|
|
139
|
-
setRole() {
|
|
140
|
-
throw READONLY_THREAD_ERROR;
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
runConfig: {},
|
|
144
|
-
|
|
145
|
-
setRunConfig() {
|
|
146
|
-
throw READONLY_THREAD_ERROR;
|
|
147
|
-
},
|
|
148
|
-
|
|
149
|
-
async reset() {
|
|
150
|
-
// noop
|
|
151
|
-
},
|
|
152
|
-
|
|
153
|
-
async clearAttachments() {
|
|
154
|
-
// noop
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
send() {
|
|
158
|
-
throw READONLY_THREAD_ERROR;
|
|
159
|
-
},
|
|
160
|
-
|
|
161
|
-
cancel() {
|
|
162
|
-
// noop
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
queue: [] as never[],
|
|
166
|
-
moveQueueItem() {},
|
|
167
|
-
removeQueueItem() {},
|
|
168
|
-
|
|
169
|
-
dictation: undefined,
|
|
170
|
-
|
|
171
|
-
startDictation() {
|
|
172
|
-
throw READONLY_THREAD_ERROR;
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
stopDictation() {
|
|
176
|
-
// noop
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
quote: undefined,
|
|
180
|
-
|
|
181
|
-
setQuote() {
|
|
182
|
-
throw READONLY_THREAD_ERROR;
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
subscribe() {
|
|
186
|
-
return () => {};
|
|
187
|
-
},
|
|
188
|
-
|
|
189
|
-
unstable_on() {
|
|
190
|
-
return () => {};
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
getEditComposer() {
|
|
195
|
-
return undefined;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
beginEdit(): void {
|
|
199
|
-
throw READONLY_THREAD_ERROR;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
speech = undefined;
|
|
203
|
-
voice = undefined;
|
|
204
|
-
|
|
205
|
-
capabilities = {
|
|
206
|
-
switchToBranch: false,
|
|
207
|
-
switchBranchDuringRun: false,
|
|
208
|
-
edit: false,
|
|
209
|
-
delete: false,
|
|
210
|
-
reload: false,
|
|
211
|
-
refetchThread: false,
|
|
212
|
-
cancel: false,
|
|
213
|
-
unstable_copy: false,
|
|
214
|
-
speech: false,
|
|
215
|
-
dictation: false,
|
|
216
|
-
voice: false,
|
|
217
|
-
attachments: false,
|
|
218
|
-
feedback: false,
|
|
219
|
-
queue: false,
|
|
220
|
-
} as const;
|
|
221
|
-
|
|
222
|
-
isDisabled = false;
|
|
223
|
-
isSendDisabled = false;
|
|
224
|
-
isLoading = false;
|
|
225
|
-
|
|
226
|
-
state = null;
|
|
227
|
-
suggestions = [] as never[];
|
|
228
|
-
extras = undefined;
|
|
229
|
-
|
|
230
|
-
import(): void {
|
|
231
|
-
throw READONLY_THREAD_ERROR;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
44
|
export() {
|
|
235
45
|
return {
|
|
236
46
|
messages: this._messages.map((message, idx) => ({
|
|
@@ -240,11 +50,13 @@ export class ReadonlyThreadRuntimeCore
|
|
|
240
50
|
};
|
|
241
51
|
}
|
|
242
52
|
|
|
243
|
-
|
|
244
|
-
throw READONLY_THREAD_ERROR;
|
|
245
|
-
}
|
|
53
|
+
composer = createInertComposer(READONLY_THREAD_ERROR, false);
|
|
246
54
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
55
|
+
isLoading = false;
|
|
56
|
+
|
|
57
|
+
override cancelRun(): void {}
|
|
58
|
+
|
|
59
|
+
override stopSpeaking(): void {}
|
|
60
|
+
|
|
61
|
+
override disconnectVoice(): void {}
|
|
250
62
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SILENT_RUNTIME_ACTION } from "../../utils/silent-runtime-action";
|
|
2
|
+
|
|
3
|
+
export class ThreadListAdapterChangedError extends Error {
|
|
4
|
+
readonly [SILENT_RUNTIME_ACTION] = true;
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
super("Thread list adapter changed while an operation was pending.");
|
|
8
|
+
this.name = "ThreadListAdapterChangedError";
|
|
9
|
+
}
|
|
10
|
+
}
|