@assistant-ui/core 0.3.15 → 0.3.17
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/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +8 -2
- package/dist/internal.js +9 -3
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +3 -2
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +5 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +141 -28
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +1 -1
- package/dist/model-context/interactable-composer-metadata.js +1 -1
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry.d.ts +2 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +9 -28
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +26 -0
- package/dist/model-context/tool-call-text.d.ts.map +1 -0
- package/dist/model-context/tool-call-text.js +18 -0
- package/dist/model-context/tool-call-text.js.map +1 -0
- package/dist/react/RuntimeAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.js +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.js +25 -21
- package/dist/react/client/InMemoryThreadList.js.map +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +60 -178
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +15 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +263 -194
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +6 -2
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +4 -2
- package/dist/react/index.js +2 -1
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +60 -178
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +24 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +138 -0
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -0
- package/dist/react/model-context/toolbox.d.ts +2 -14
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.js +1 -13
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js +37 -7
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js +31 -5
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.js +10 -36
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.js +2 -8
- package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +2 -4
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +4 -3
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js +4 -3
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +7 -6
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +2 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +3 -3
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +5 -4
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -5
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +44 -22
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +7 -6
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +102 -117
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -6
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +3 -3
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.js +2 -12
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.js +2 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -10
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +43 -85
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +5 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +29 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +159 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +12 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js +10 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -9
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +16 -153
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +2 -1
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +6 -25
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +33 -233
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +14 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +7 -3
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +2 -0
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +2 -2
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +1 -1
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +9 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +5 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +2 -3
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +14 -29
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +4 -6
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +5 -11
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -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 +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +14 -2
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +16 -2
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +2 -1
- package/dist/runtime/internal.js +2 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +1 -1
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +1 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +12 -0
- package/dist/runtime/queue/queue-item.d.ts.map +1 -0
- package/dist/runtime/queue/queue-item.js +6 -0
- package/dist/runtime/queue/queue-item.js.map +1 -0
- package/dist/runtime/utils/abortable-thread-load.d.ts +15 -0
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -0
- package/dist/runtime/utils/abortable-thread-load.js +35 -0
- package/dist/runtime/utils/abortable-thread-load.js.map +1 -0
- package/dist/runtime/utils/attachment-add-operations.d.ts +18 -0
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -0
- package/dist/runtime/utils/attachment-add-operations.js +43 -0
- package/dist/runtime/utils/attachment-add-operations.js.map +1 -0
- package/dist/runtime/utils/auto-status.d.ts +7 -2
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +13 -3
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +48 -0
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -0
- package/dist/runtime/utils/external-message-conversion.js +222 -0
- package/dist/runtime/utils/external-message-conversion.js.map +1 -0
- package/dist/runtime/utils/external-store-message.d.ts +2 -1
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/external-store-message.js +2 -1
- package/dist/runtime/utils/external-store-message.js.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +30 -0
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -0
- package/dist/runtime/utils/message-repository-session.js +130 -0
- package/dist/runtime/utils/message-repository-session.js.map +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -4
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +20 -0
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -0
- package/dist/runtime/utils/pending-tool-calls.js +22 -0
- package/dist/runtime/utils/pending-tool-calls.js.map +1 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.js +12 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +3 -10
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +39 -0
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -0
- package/dist/runtime/utils/tool-call-tree.js +85 -0
- package/dist/runtime/utils/tool-call-tree.js.map +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts +29 -2
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -5
- 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 +3 -10
- 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 +21 -2
- 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 +154 -46
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +4 -2
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +23 -3
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +12 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +107 -14
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +9 -0
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title.js +6 -0
- package/dist/runtimes/remote-thread-list/title.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +6 -5
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +31 -8
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +98 -59
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/external-thread.d.ts +1 -1
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +85 -103
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.js +2 -2
- package/dist/store/clients/single-thread-list.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +33 -12
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.js +1 -1
- package/dist/store/clients/thread-selection-events.js +1 -1
- package/dist/store/index.d.ts +6 -3
- package/dist/store/index.js +2 -1
- package/dist/store/internal.d.ts +2 -2
- package/dist/store/internal.js +2 -2
- package/dist/store/primitive-predicates.d.ts +4 -1
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +9 -1
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +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 +124 -105
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +3 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
- package/dist/store/scope-registration.d.ts +1 -1
- package/dist/store/scopes/composer.d.ts +2 -1
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +1 -1
- package/dist/store/scopes/part.d.ts +6 -3
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +2 -9
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.js +0 -6
- package/dist/subscribable/subscribable.d.ts +8 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +24 -16
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/message.d.ts +47 -4
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +7 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/data-url.d.ts +14 -1
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/data-url.js +13 -1
- package/dist/utils/data-url.js.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +5 -0
- package/dist/utils/invoke-user-callback.d.ts.map +1 -0
- package/dist/utils/invoke-user-callback.js +19 -0
- package/dist/utils/invoke-user-callback.js.map +1 -0
- package/dist/utils/normalizePartStatus.js.map +1 -1
- package/package.json +12 -17
- package/src/index.ts +6 -1
- package/src/internal.ts +20 -0
- package/src/model-context/frame/host.test.ts +91 -7
- package/src/model-context/frame/host.ts +7 -2
- package/src/model-context/frame/provider.test.ts +484 -13
- package/src/model-context/frame/provider.ts +205 -35
- package/src/model-context/interactable-composer-metadata.ts +1 -1
- package/src/model-context/registry.test.ts +44 -0
- package/src/model-context/registry.ts +13 -35
- package/src/model-context/tool-call-text.test.ts +67 -0
- package/src/model-context/tool-call-text.ts +67 -0
- package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
- package/src/react/client/InMemoryThreadList.test.tsx +49 -0
- package/src/react/client/InMemoryThreadList.ts +7 -1
- package/src/react/client/Interactables.ts +19 -178
- package/src/react/client/RemoteThreadList.background.test.ts +384 -0
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +274 -0
- package/src/react/client/RemoteThreadList.test.ts +369 -1
- package/src/react/client/RemoteThreadList.ts +320 -142
- package/src/react/client/Tools.ts +7 -1
- package/src/react/index.ts +4 -0
- package/src/react/interactables-legacy/Interactables.ts +20 -177
- package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +161 -0
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +206 -0
- package/src/react/model-context/modelContextHooks.test.tsx +131 -0
- package/src/react/model-context/toolbox.test.ts +9 -9
- package/src/react/model-context/toolbox.ts +9 -36
- package/src/react/model-context/useAssistantContext.ts +4 -2
- package/src/react/model-context/useAuiToolOverrides.ts +4 -2
- package/src/react/model-context/useInlineRender.test.tsx +48 -0
- package/src/react/model-context/useInlineRender.ts +14 -10
- package/src/react/primitive-hooks/useMessageError.ts +2 -19
- package/src/react/primitive-hooks/useThreadListLoadMore.ts +2 -3
- package/src/react/primitives/composer/ComposerAttachments.test.tsx +76 -0
- package/src/react/primitives/composer/ComposerAttachments.tsx +9 -4
- package/src/react/primitives/composer/ComposerQueue.test.tsx +72 -0
- package/src/react/primitives/composer/ComposerQueue.tsx +7 -4
- package/src/react/primitives/message/MessageAttachments.test.tsx +107 -37
- package/src/react/primitives/message/MessageAttachments.tsx +10 -7
- package/src/react/primitives/message/MessageGroupedParts.tsx +2 -2
- package/src/react/primitives/message/MessageParts.tsx +3 -3
- package/src/react/primitives/threadList/ThreadListItems.test.tsx +99 -0
- package/src/react/primitives/threadList/ThreadListItems.tsx +8 -5
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +94 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +72 -31
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +169 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +140 -124
- package/src/react/runtimes/RemoteThreadResource.ts +1 -4
- package/src/react/runtimes/assistant-transport/runManager.ts +4 -17
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +51 -2
- package/src/react/runtimes/assistant-transport/useLatestRef.ts +2 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +45 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +157 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +82 -176
- package/src/react/runtimes/cloud/auiV0.ts +5 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +88 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +236 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.test.ts +37 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts +18 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +90 -1
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +33 -238
- package/src/react/runtimes/external-message-converter.test.ts +0 -14
- package/src/react/runtimes/external-message-converter.test.tsx +77 -0
- package/src/react/runtimes/external-message-converter.ts +59 -481
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +24 -6
- package/src/react/types/MessagePartComponentTypes.ts +7 -3
- package/src/react/types/scopes/tools.ts +2 -0
- package/src/runtime/api/composer-runtime.ts +1 -1
- package/src/runtime/api/message-part-runtime.ts +3 -3
- package/src/runtime/api/message-runtime.test.ts +28 -1
- package/src/runtime/api/thread-list-runtime.ts +25 -1
- package/src/runtime/base/base-composer-runtime-core.ts +20 -40
- package/src/runtime/base/base-thread-runtime-core.test.ts +110 -3
- package/src/runtime/base/base-thread-runtime-core.ts +16 -15
- package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -4
- package/src/runtime/interfaces/composer-runtime-core.ts +1 -1
- package/src/runtime/interfaces/thread-list-runtime-core.ts +20 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +18 -2
- package/src/runtime/internal.ts +5 -0
- package/src/runtime/queue/external-thread-queue-adapter.ts +1 -1
- package/src/runtime/queue/message-queue.ts +1 -4
- package/src/runtime/queue/queue-item.ts +10 -0
- package/src/runtime/utils/abortable-thread-load.test.ts +87 -0
- package/src/runtime/utils/abortable-thread-load.ts +53 -0
- package/src/runtime/utils/attachment-add-operations.ts +59 -0
- package/src/runtime/utils/auto-status.test.ts +57 -0
- package/src/runtime/utils/auto-status.ts +46 -1
- package/src/runtime/utils/external-message-conversion.test.ts +210 -0
- package/src/runtime/utils/external-message-conversion.ts +510 -0
- package/src/runtime/utils/external-store-message.ts +2 -0
- package/src/runtime/utils/message-repository-session.test.ts +195 -0
- package/src/runtime/utils/message-repository-session.ts +176 -0
- package/src/runtime/utils/message-repository.ts +7 -4
- package/src/runtime/utils/pending-tool-calls.test.ts +57 -0
- package/src/runtime/utils/pending-tool-calls.ts +35 -0
- package/src/runtime/utils/resolveToolApprovalResponse.test.ts +73 -0
- package/src/runtime/utils/resolveToolApprovalResponse.ts +27 -6
- package/src/runtime/utils/thread-message-like.ts +4 -10
- package/src/runtime/utils/tool-call-tree.test.ts +191 -0
- package/src/runtime/utils/tool-call-tree.ts +97 -0
- package/src/runtimes/external-store/external-store-adapter.ts +38 -2
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +6 -14
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +231 -61
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +201 -4
- package/src/runtimes/local/local-thread-runtime-core.ts +53 -4
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +149 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +178 -16
- package/src/runtimes/remote-thread-list/title.ts +3 -0
- package/src/runtimes/remote-thread-list/types.ts +6 -5
- package/src/runtimes/tool-invocations/EDGE_CASES.md +125 -3
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +856 -102
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +145 -89
- package/src/store/clients/external-thread.ts +30 -69
- package/src/store/clients/single-thread-list.ts +4 -1
- package/src/store/clients/suggestions.test.ts +185 -0
- package/src/store/clients/suggestions.ts +42 -35
- package/src/store/index.ts +4 -0
- package/src/store/internal.ts +2 -0
- package/src/store/primitive-predicates.ts +35 -0
- package/src/store/runtime-clients/thread-list-runtime-client.ts +16 -2
- package/src/store/runtime-clients/useSubscribable.ts +8 -2
- package/src/store/scopes/message.ts +1 -1
- package/src/store/scopes/part.ts +6 -3
- package/src/store/scopes/queue-item.ts +2 -9
- package/src/subscribable/subscribable.test.ts +50 -0
- package/src/subscribable/subscribable.ts +33 -21
- package/src/tests/MessageRepository.test.ts +77 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +305 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +78 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +52 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +158 -0
- package/src/tests/external-store-optimistic-id.test.ts +79 -0
- package/src/tests/external-store-repository-instance.test.ts +166 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +186 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +642 -0
- package/src/tests/external-thread-attachments.test.tsx +258 -1
- package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
- package/src/tests/single-thread-list-item.test.tsx +47 -0
- package/src/tests/thread-message-like.test.ts +39 -1
- package/src/tests/thread-switch-events.test.tsx +397 -2
- package/src/types/message.ts +58 -5
- package/src/utils/data-url.test.ts +52 -1
- package/src/utils/data-url.ts +21 -0
- package/src/utils/invoke-user-callback.test.ts +82 -0
- package/src/utils/invoke-user-callback.ts +31 -0
- package/src/utils/normalizePartStatus.ts +1 -1
- package/dist/store/scopes/queue-item.js.map +0 -1
|
@@ -6,8 +6,8 @@ import { ModelContext } from "../../model-context/types.js";
|
|
|
6
6
|
import { ChatModelRunOptions, ChatModelRunResult } from "../utils/chat-model-adapter.js";
|
|
7
7
|
import { ThreadMessageLike } from "../utils/thread-message-like.js";
|
|
8
8
|
import { ExportedMessageRepository } from "../utils/message-repository.js";
|
|
9
|
+
import { QueueItemState } from "../queue/queue-item.js";
|
|
9
10
|
import { QueuePlacement } from "../queue/external-thread-queue-adapter.js";
|
|
10
|
-
import { QueueItemState } from "../../store/scopes/queue-item.js";
|
|
11
11
|
import { EditComposerRuntimeCore, ThreadComposerRuntimeCore } from "./composer-runtime-core.js";
|
|
12
12
|
import { ToolModelContentPart } from "assistant-stream";
|
|
13
13
|
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
@@ -53,6 +53,8 @@ type RespondToToolApprovalOptions = {
|
|
|
53
53
|
approved: boolean;
|
|
54
54
|
/** The approval option that produced this decision, when the request carried options. */
|
|
55
55
|
optionId?: string;
|
|
56
|
+
/** The free-form answer, when the request asked for one. */
|
|
57
|
+
text?: string;
|
|
56
58
|
reason?: string;
|
|
57
59
|
};
|
|
58
60
|
type SubmitFeedbackOptions = {
|
|
@@ -135,7 +137,19 @@ type ThreadRuntimeCore = Readonly<{
|
|
|
135
137
|
unstable_notifySessionReset: () => void;
|
|
136
138
|
addToolResult: (options: AddToolResultOptions) => void;
|
|
137
139
|
resumeToolCall: (options: ResumeToolCallOptions) => void;
|
|
138
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Records a decision on a tool approval gate. Resolves once the runtime has
|
|
142
|
+
* accepted the response and rejects when it could not be recorded, so a
|
|
143
|
+
* caller can leave the gate retryable rather than spending it. A capability
|
|
144
|
+
* or state precondition still throws synchronously; a failure to record
|
|
145
|
+
* arrives as a rejection, including one an adapter raises synchronously.
|
|
146
|
+
*
|
|
147
|
+
* Acceptance is as far as the runtime can see the response: one that records
|
|
148
|
+
* the decision locally settles on the record, while one that answers by
|
|
149
|
+
* resuming a run settles on the resume. A failure of the work the decision
|
|
150
|
+
* unblocks is reported through the runtime's own error channel, not here.
|
|
151
|
+
*/
|
|
152
|
+
respondToToolApproval: (options: RespondToToolApprovalOptions) => Promise<void>;
|
|
139
153
|
speak: (messageId: string) => void;
|
|
140
154
|
stopSpeaking: () => void;
|
|
141
155
|
connectVoice: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/interfaces/thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;KAqBY;WACD;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGC;EACV;EACA;EACA;EACA,QAAQ;EACR;EACA,WAAW;;;;;;;EAOX,wBAAwB;;KAGd;EACV;EACA;;KAGU;EACV;EACA;;EAEA;EACA;;KAGU;EACV;EACA;;KAGU;;EAEV;;EAEA;;EAEA;;KAGU;WACD;WACA,QAAQ,uBAAuB;;KAG9B;WACD,QAAQ,qBAAqB;WAC7B;WACA,MAAM,qBAAqB;;KAG1B;WACD;;KAGC;;;;;;;EAOV,UAAU;;;;;;;EAOV,QAAQ;;;;;;;;;EASR,YAAY;;;;;EAKZ,oBAAoB;;KAGV,+BAA+B;KAE/B,2BAA2B,UAAU,2BAC/C,SAAS,0BAA0B;KAGzB;EACV;EACA;EACA,WAAW;;KAGD,kBAAkB;EAC5B,UACE,SAAS,wBACN,eAAe;;KAGV,oBAAoB;EAC9B,iBAAiB;IAEX;IACA,SAAS;IACT;;EAIN,cAAc;EACd,iBAAiB;EAEjB,SAAS,SAAS;EAClB,gBAAgB,6BAA6B;EAC7C,WAAW,QAAQ;EACnB,YAAY,QAAQ;EACpB;EACA;EAEA,gBAAgB,SAAS;EACzB,iBAAiB,SAAS
|
|
1
|
+
{"version":3,"file":"thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/interfaces/thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;KAqBY;WACD;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGC;EACV;EACA;EACA;EACA,QAAQ;EACR;EACA,WAAW;;;;;;;EAOX,wBAAwB;;KAGd;EACV;EACA;;KAGU;EACV;EACA;;EAEA;;EAEA;EACA;;KAGU;EACV;EACA;;KAGU;;EAEV;;EAEA;;EAEA;;KAGU;WACD;WACA,QAAQ,uBAAuB;;KAG9B;WACD,QAAQ,qBAAqB;WAC7B;WACA,MAAM,qBAAqB;;KAG1B;WACD;;KAGC;;;;;;;EAOV,UAAU;;;;;;;EAOV,QAAQ;;;;;;;;;EASR,YAAY;;;;;EAKZ,oBAAoB;;KAGV,+BAA+B;KAE/B,2BAA2B,UAAU,2BAC/C,SAAS,0BAA0B;KAGzB;EACV;EACA;EACA,WAAW;;KAGD,kBAAkB;EAC5B,UACE,SAAS,wBACN,eAAe;;KAGV,oBAAoB;EAC9B,iBAAiB;IAEX;IACA,SAAS;IACT;;EAIN,cAAc;EACd,iBAAiB;EAEjB,SAAS,SAAS;EAClB,gBAAgB,6BAA6B;EAC7C,WAAW,QAAQ;EACnB,YAAY,QAAQ;EACpB;EACA;EAEA,gBAAgB,SAAS;EACzB,iBAAiB,SAAS;;;;;;;;;;;;;EAa1B,wBACE,SAAS,iCACN;EAEL,QAAQ;EACR;EAEA;EACA;EACA;EACA;EAEA,iBAAiB,UAAU;EAE3B,uBAAuB;EAEvB,UAAU;EACV,kBAAkB,sBAAsB;EACxC,YAAY;EAEZ,+BAA+B;EAC/B,oCAAoC;EACpC,iBAAiB,qBAAqB,WAAW;EACjD,mBAAmB;EAEnB,QAAQ;EACR,OAAO;EAEP,cAAc,SAAS;EACvB;;;;;;EAMA;EACA;;;;;;;EAOA;EACA,mBAAmB;EACnB,OAAO;EACP,sBAAsB;EAEtB;EAEA,YAAY,yBAAyB;EAErC;EACA,uBAAuB,yBAAyB;EAEhD,OAAO,YAAY;EACnB,UAAU;EAEV;EACA,oBAAoB;EAEpB,MAAM,2BAA2B;;;;;;;;;;;;EAajC,gCAAgC;;;;;;EAOhC,YAAY,UAAU,wBACpB,OAAO,GACP,UAAU,2BAA2B,KACpC"}
|
|
@@ -14,6 +14,7 @@ import { MessagePartRuntimeImpl } from "./api/message-part-runtime.js";
|
|
|
14
14
|
import { MessageRuntimeImpl } from "./api/message-runtime.js";
|
|
15
15
|
import { symbolInnerMessage } from "./utils/external-store-message.js";
|
|
16
16
|
import { getAutoStatus, isAutoStatus } from "./utils/auto-status.js";
|
|
17
|
+
import { MessageRepositorySession, MessageRepositorySessionOptions, createMessageRepositorySession } from "./utils/message-repository-session.js";
|
|
17
18
|
import { ThreadListItemRuntimeBinding, ThreadRuntimeCoreBinding, ThreadRuntimeImpl, getThreadState } from "./api/thread-runtime.js";
|
|
18
19
|
import { AssistantRuntimeImpl } from "./api/assistant-runtime.js";
|
|
19
|
-
export { AssistantRuntimeImpl, AttachmentRuntimeImpl, BaseAssistantRuntimeCore, BaseComposerRuntimeCore, BaseThreadRuntimeCore, type ComposerRuntimeCoreBinding, ComposerRuntimeImpl, DefaultEditComposerRuntimeCore, DefaultThreadComposerRuntimeCore, EditComposerAttachmentRuntimeImpl, type EditComposerRuntimeCoreBinding, EditComposerRuntimeImpl, ExportedMessageRepository, type ExportedMessageRepositoryItem, MessageAttachmentRuntimeImpl, MessagePartRuntimeImpl, MessageRepository, MessageRuntimeImpl, type MessageStateBinding, ThreadComposerAttachmentRuntimeImpl, type ThreadComposerRuntimeCoreBinding, ThreadComposerRuntimeImpl, type ThreadListItemRuntimeBinding, ThreadListItemRuntimeImpl, type ThreadListItemStateBinding, type ThreadListRuntimeCoreBinding, ThreadListRuntimeImpl, type ThreadRuntimeCoreBinding, ThreadRuntimeImpl, fromThreadMessageLike, getAutoStatus, getThreadState, isAutoStatus, symbolInnerMessage };
|
|
20
|
+
export { AssistantRuntimeImpl, AttachmentRuntimeImpl, BaseAssistantRuntimeCore, BaseComposerRuntimeCore, BaseThreadRuntimeCore, type ComposerRuntimeCoreBinding, ComposerRuntimeImpl, DefaultEditComposerRuntimeCore, DefaultThreadComposerRuntimeCore, EditComposerAttachmentRuntimeImpl, type EditComposerRuntimeCoreBinding, EditComposerRuntimeImpl, ExportedMessageRepository, type ExportedMessageRepositoryItem, MessageAttachmentRuntimeImpl, MessagePartRuntimeImpl, MessageRepository, type MessageRepositorySession, type MessageRepositorySessionOptions, MessageRuntimeImpl, type MessageStateBinding, ThreadComposerAttachmentRuntimeImpl, type ThreadComposerRuntimeCoreBinding, ThreadComposerRuntimeImpl, type ThreadListItemRuntimeBinding, ThreadListItemRuntimeImpl, type ThreadListItemStateBinding, type ThreadListRuntimeCoreBinding, ThreadListRuntimeImpl, type ThreadRuntimeCoreBinding, ThreadRuntimeImpl, createMessageRepositorySession, fromThreadMessageLike, getAutoStatus, getThreadState, isAutoStatus, symbolInnerMessage };
|
package/dist/runtime/internal.js
CHANGED
|
@@ -15,4 +15,5 @@ import { BaseThreadRuntimeCore } from "./base/base-thread-runtime-core.js";
|
|
|
15
15
|
import { ThreadListItemRuntimeImpl } from "./api/thread-list-item-runtime.js";
|
|
16
16
|
import { ThreadListRuntimeImpl } from "./api/thread-list-runtime.js";
|
|
17
17
|
import { AssistantRuntimeImpl } from "./api/assistant-runtime.js";
|
|
18
|
-
|
|
18
|
+
import { createMessageRepositorySession } from "./utils/message-repository-session.js";
|
|
19
|
+
export { AssistantRuntimeImpl, AttachmentRuntimeImpl, BaseAssistantRuntimeCore, BaseComposerRuntimeCore, BaseThreadRuntimeCore, ComposerRuntimeImpl, DefaultEditComposerRuntimeCore, DefaultThreadComposerRuntimeCore, EditComposerAttachmentRuntimeImpl, EditComposerRuntimeImpl, ExportedMessageRepository, MessageAttachmentRuntimeImpl, MessagePartRuntimeImpl, MessageRepository, MessageRuntimeImpl, ThreadComposerAttachmentRuntimeImpl, ThreadComposerRuntimeImpl, ThreadListItemRuntimeImpl, ThreadListRuntimeImpl, ThreadRuntimeImpl, createMessageRepositorySession, fromThreadMessageLike, getAutoStatus, getThreadState, isAutoStatus, symbolInnerMessage };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AppendMessage } from "../../types/message.js";
|
|
2
|
-
import { QueueItemState } from "
|
|
2
|
+
import { QueueItemState } from "./queue-item.js";
|
|
3
3
|
//#region src/runtime/queue/external-thread-queue-adapter.d.ts
|
|
4
4
|
type QueuePlacement = {
|
|
5
5
|
readonly lane?: "queue" | "steer";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.d.ts","names":[],"sources":["../../../src/runtime/queue/message-queue.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"message-queue.d.ts","names":[],"sources":["../../../src/runtime/queue/message-queue.ts"],"mappings":";;;KAcY;EACV,MAAM,SAAS,eAAe;IAAW;;;EAEzC;;KAGU;WACD,SAAS;;EAElB;;EAEA;;;;;;;EAOA;;EAEA;EACA,YAAY;;cAgCD,qBACX,QAAQ,uBACP"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
|
|
2
2
|
import { generateId } from "../../utils/id.js";
|
|
3
3
|
import { getThreadMessageText } from "../../utils/text.js";
|
|
4
|
-
import { EMPTY_QUEUE_ITEMS } from "
|
|
4
|
+
import { EMPTY_QUEUE_ITEMS } from "./queue-item.js";
|
|
5
5
|
//#region src/runtime/queue/message-queue.ts
|
|
6
6
|
const getQueueItemParts = (message) => {
|
|
7
7
|
const source = [...message.content, ...(message.attachments ?? []).flatMap((attachment) => (attachment.content ?? []).filter((part) => part.type !== "text"))];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.js","names":["AppendMessage","FileMessagePart","TextMessagePart","EMPTY_QUEUE_ITEMS","QueueItemState","generateId","notifyEventListeners","getThreadMessageText","ExternalThreadQueueAdapter","QueuePlacement","MessageQueueDriver","run","message","options","steer","cancel","MessageQueueController","adapter","notifyBusy","notifyIdle","notifyCancelled","clear","subscribe","callback","Lane","getQueueItemParts","source","content","attachments","flatMap","attachment","filter","part","type","parts","push","data","image","mimeType","filename","undefined","createMessageQueue","driver","lanes","Record","queue","messages","Map","subscribers","Set","running","paused","dispatchTransform","m","suppressIdle","cancelSettles","interrupting","notify","setLanes","next","items","steerItems","toItem","id","prompt","laneOf","queueItemId","some","item","advance","lane","length","head","get","delete","slice","interrupt","Math","max","set","enqueue","move","placement","fromLane","Error","toLane","find","i","dest","anchorIndex","anchor","index","findIndex","insertAfter","insertBefore","after","before","nextDest","edit","map","remove","__internal_setDispatchTransform","transform","__internal_notifyCancelled","add"],"sources":["../../../src/runtime/queue/message-queue.ts"],"sourcesContent":["import type {\n AppendMessage,\n FileMessagePart,\n TextMessagePart,\n} from \"../../types/message\";\nimport {\n EMPTY_QUEUE_ITEMS,\n type QueueItemState,\n} from \"../../store/scopes/queue-item\";\nimport { generateId } from \"../../utils/id\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"./external-thread-queue-adapter\";\n\nexport type MessageQueueDriver = {\n run: (message: AppendMessage, options: { steer: boolean }) => void;\n /** When omitted, steering degrades to \"process next\" instead of interrupting. */\n cancel?: (() => void) | undefined;\n};\n\nexport type MessageQueueController = {\n readonly adapter: ExternalThreadQueueAdapter;\n /** Mark a run as in flight so concurrent sends buffer; call on the rising edge. */\n notifyBusy: () => void;\n /** Advances to the next pending message; call on the run's falling edge. */\n notifyIdle: () => void;\n /**\n * Pauses queue advance for a user-initiated cancel, so the cancelled run's\n * settle keeps the pending items instead of dispatching the next one; the\n * next explicit send or run start re-arms draining. Call before aborting\n * the run.\n */\n notifyCancelled: () => void;\n /** Empties both lanes without dispatching. */\n clear: () => void;\n subscribe: (callback: () => void) => () => void;\n};\n\ntype Lane = \"queue\" | \"steer\";\n\nconst getQueueItemParts = (\n message: AppendMessage,\n): readonly (FileMessagePart | TextMessagePart)[] => {\n // attachment-derived text is the file body, not user-authored prose;\n // project only the file/image content of attachments\n const source = [\n ...message.content,\n ...(message.attachments ?? []).flatMap((attachment) =>\n (attachment.content ?? []).filter((part) => part.type !== \"text\"),\n ),\n ];\n const parts: (FileMessagePart | TextMessagePart)[] = [];\n for (const part of source) {\n if (part.type === \"file\" || part.type === \"text\") {\n parts.push(part);\n } else if (part.type === \"image\") {\n parts.push({\n type: \"file\",\n data: part.image,\n mimeType: \"image/*\",\n ...(part.filename !== undefined && { filename: part.filename }),\n });\n }\n }\n return parts;\n};\n\nexport const createMessageQueue = (\n driver: MessageQueueDriver,\n): MessageQueueController => {\n let lanes: Record<Lane, readonly QueueItemState[]> = {\n queue: EMPTY_QUEUE_ITEMS,\n steer: EMPTY_QUEUE_ITEMS,\n };\n const messages = new Map<string, AppendMessage>();\n const subscribers = new Set<() => void>();\n\n let running = false;\n let paused = false;\n let dispatchTransform: (message: AppendMessage) => AppendMessage = (m) => m;\n // swallow the cancelled run's settle when steering so it does not double-advance\n let suppressIdle = 0;\n // settles from cancelled runs that must drop `running` without advancing\n let cancelSettles = 0;\n let interrupting = false;\n\n const notify = () => {\n notifyEventListeners(subscribers, undefined, \"Message queue\");\n };\n\n const setLanes = (next: Record<Lane, readonly QueueItemState[]>) => {\n lanes = next;\n adapter.items = next.queue;\n adapter.steerItems = next.steer;\n notify();\n };\n\n const toItem = (id: string, message: AppendMessage): QueueItemState => ({\n id,\n prompt: getThreadMessageText(message),\n parts: getQueueItemParts(message),\n });\n\n const laneOf = (queueItemId: string): Lane | undefined => {\n if (lanes.steer.some((item) => item.id === queueItemId)) return \"steer\";\n if (lanes.queue.some((item) => item.id === queueItemId)) return \"queue\";\n return undefined;\n };\n\n const advance = () => {\n if (running || paused) return;\n const lane: Lane = lanes.steer.length > 0 ? \"steer\" : \"queue\";\n const head = lanes[lane][0];\n if (!head) return;\n const message = messages.get(head.id);\n messages.delete(head.id);\n setLanes({ ...lanes, [lane]: lanes[lane].slice(1) });\n if (!message) return;\n running = true;\n driver.run(dispatchTransform(message), { steer: false });\n };\n\n const interrupt = (message: AppendMessage) => {\n paused = false;\n // the interrupted run settles exactly once, whether or not it was\n // already cancel-notified\n suppressIdle += Math.max(cancelSettles, 1);\n cancelSettles = 0;\n // a driver whose cancel routes through the runtime notifies this queue\n // back; the interrupt already accounted for that settle and is dispatching\n // in its place\n interrupting = true;\n try {\n driver.cancel!();\n } finally {\n interrupting = false;\n }\n running = true;\n driver.run(dispatchTransform(message), { steer: true });\n };\n\n const push = (lane: Lane, message: AppendMessage) => {\n paused = false;\n const id = generateId();\n messages.set(id, message);\n setLanes({ ...lanes, [lane]: [...lanes[lane], toItem(id, message)] });\n advance();\n };\n\n const enqueue = (message: AppendMessage) => {\n push(\"queue\", message);\n };\n\n const steer = (message: AppendMessage) => {\n if (running && driver.cancel) {\n interrupt(message);\n return;\n }\n push(\"steer\", message);\n };\n\n const move = (queueItemId: string, placement: QueuePlacement) => {\n const fromLane = laneOf(queueItemId);\n if (!fromLane) throw new Error(`Unknown queue item \"${queueItemId}\".`);\n const toLane = placement.lane ?? fromLane;\n\n const item = lanes[fromLane].find((i) => i.id === queueItemId)!;\n const dest = (toLane === fromLane ? lanes[fromLane] : lanes[toLane]).filter(\n (i) => i.id !== queueItemId,\n );\n\n const anchorIndex = (anchor: string) => {\n if (anchor === queueItemId)\n throw new Error(`Queue item \"${queueItemId}\" cannot anchor itself.`);\n const index = dest.findIndex((i) => i.id === anchor);\n if (index === -1)\n throw new Error(`Unknown anchor \"${anchor}\" in lane \"${toLane}\".`);\n return index;\n };\n\n const { insertAfter, insertBefore } = placement;\n let index: number;\n if (insertAfter === undefined && insertBefore === undefined) {\n index =\n toLane === fromLane\n ? lanes[fromLane].findIndex((i) => i.id === queueItemId)\n : dest.length;\n } else if (insertAfter !== undefined && insertBefore !== undefined) {\n const after = insertAfter === null ? -1 : anchorIndex(insertAfter);\n const before =\n insertBefore === null ? dest.length : anchorIndex(insertBefore);\n if (before !== after + 1)\n throw new Error(\n `insertAfter \"${insertAfter}\" and insertBefore \"${insertBefore}\" are not adjacent in lane \"${toLane}\".`,\n );\n index = after + 1;\n } else if (insertAfter !== undefined) {\n index = insertAfter === null ? 0 : anchorIndex(insertAfter) + 1;\n } else {\n index = insertBefore === null ? dest.length : anchorIndex(insertBefore!);\n }\n\n // placement and immediate dispatch cannot coexist: an anchored move into\n // the steer lane places without interrupting; only an unanchored one\n // cancels the live run and dispatches\n if (\n insertAfter === undefined &&\n insertBefore === undefined &&\n toLane === \"steer\" &&\n fromLane !== \"steer\" &&\n running &&\n driver.cancel\n ) {\n const message = messages.get(queueItemId)!;\n messages.delete(queueItemId);\n setLanes({\n queue: lanes.queue.filter((i) => i.id !== queueItemId),\n steer: lanes.steer,\n });\n interrupt(message);\n return;\n }\n\n const nextDest = [...dest.slice(0, index), item, ...dest.slice(index)];\n const next = { ...lanes, [toLane]: nextDest };\n if (toLane !== fromLane)\n next[fromLane] = lanes[fromLane].filter((i) => i.id !== queueItemId);\n setLanes(next);\n advance();\n };\n\n const edit = (queueItemId: string, message: AppendMessage) => {\n const lane = laneOf(queueItemId);\n if (!lane) throw new Error(`Unknown queue item \"${queueItemId}\".`);\n messages.set(queueItemId, message);\n setLanes({\n ...lanes,\n [lane]: lanes[lane].map((item) =>\n item.id === queueItemId ? toItem(queueItemId, message) : item,\n ),\n });\n };\n\n const remove = (queueItemId: string) => {\n if (!messages.delete(queueItemId)) return;\n setLanes({\n queue: lanes.queue.filter((item) => item.id !== queueItemId),\n steer: lanes.steer.filter((item) => item.id !== queueItemId),\n });\n };\n\n const notifyCancelled = () => {\n if (interrupting) return;\n if (running && cancelSettles === 0) {\n paused = true;\n cancelSettles = 1;\n }\n };\n\n const adapter: ExternalThreadQueueAdapter = {\n items: lanes.queue,\n steerItems: lanes.steer,\n enqueue,\n steer,\n move,\n edit,\n remove,\n __internal_setDispatchTransform: (transform) => {\n dispatchTransform = transform;\n },\n __internal_notifyCancelled: notifyCancelled,\n };\n\n return {\n adapter,\n notifyBusy: () => {\n paused = false;\n // a cancelled run's settle that is still outstanding belongs to a run\n // this new one replaces; swallow it entirely\n suppressIdle += cancelSettles;\n cancelSettles = 0;\n running = true;\n },\n notifyIdle: () => {\n if (suppressIdle > 0) {\n suppressIdle--;\n return;\n }\n if (cancelSettles > 0) cancelSettles--;\n running = false;\n advance();\n },\n notifyCancelled,\n clear: () => {\n messages.clear();\n setLanes({ queue: EMPTY_QUEUE_ITEMS, steer: EMPTY_QUEUE_ITEMS });\n },\n subscribe: (callback) => {\n subscribers.add(callback);\n return () => {\n subscribers.delete(callback);\n };\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message-queue.js","names":["AppendMessage","FileMessagePart","TextMessagePart","EMPTY_QUEUE_ITEMS","QueueItemState","generateId","notifyEventListeners","getThreadMessageText","ExternalThreadQueueAdapter","QueuePlacement","MessageQueueDriver","run","message","options","steer","cancel","MessageQueueController","adapter","notifyBusy","notifyIdle","notifyCancelled","clear","subscribe","callback","Lane","getQueueItemParts","source","content","attachments","flatMap","attachment","filter","part","type","parts","push","data","image","mimeType","filename","undefined","createMessageQueue","driver","lanes","Record","queue","messages","Map","subscribers","Set","running","paused","dispatchTransform","m","suppressIdle","cancelSettles","interrupting","notify","setLanes","next","items","steerItems","toItem","id","prompt","laneOf","queueItemId","some","item","advance","lane","length","head","get","delete","slice","interrupt","Math","max","set","enqueue","move","placement","fromLane","Error","toLane","find","i","dest","anchorIndex","anchor","index","findIndex","insertAfter","insertBefore","after","before","nextDest","edit","map","remove","__internal_setDispatchTransform","transform","__internal_notifyCancelled","add"],"sources":["../../../src/runtime/queue/message-queue.ts"],"sourcesContent":["import type {\n AppendMessage,\n FileMessagePart,\n TextMessagePart,\n} from \"../../types/message\";\nimport { EMPTY_QUEUE_ITEMS, type QueueItemState } from \"./queue-item\";\nimport { generateId } from \"../../utils/id\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"./external-thread-queue-adapter\";\n\nexport type MessageQueueDriver = {\n run: (message: AppendMessage, options: { steer: boolean }) => void;\n /** When omitted, steering degrades to \"process next\" instead of interrupting. */\n cancel?: (() => void) | undefined;\n};\n\nexport type MessageQueueController = {\n readonly adapter: ExternalThreadQueueAdapter;\n /** Mark a run as in flight so concurrent sends buffer; call on the rising edge. */\n notifyBusy: () => void;\n /** Advances to the next pending message; call on the run's falling edge. */\n notifyIdle: () => void;\n /**\n * Pauses queue advance for a user-initiated cancel, so the cancelled run's\n * settle keeps the pending items instead of dispatching the next one; the\n * next explicit send or run start re-arms draining. Call before aborting\n * the run.\n */\n notifyCancelled: () => void;\n /** Empties both lanes without dispatching. */\n clear: () => void;\n subscribe: (callback: () => void) => () => void;\n};\n\ntype Lane = \"queue\" | \"steer\";\n\nconst getQueueItemParts = (\n message: AppendMessage,\n): readonly (FileMessagePart | TextMessagePart)[] => {\n // attachment-derived text is the file body, not user-authored prose;\n // project only the file/image content of attachments\n const source = [\n ...message.content,\n ...(message.attachments ?? []).flatMap((attachment) =>\n (attachment.content ?? []).filter((part) => part.type !== \"text\"),\n ),\n ];\n const parts: (FileMessagePart | TextMessagePart)[] = [];\n for (const part of source) {\n if (part.type === \"file\" || part.type === \"text\") {\n parts.push(part);\n } else if (part.type === \"image\") {\n parts.push({\n type: \"file\",\n data: part.image,\n mimeType: \"image/*\",\n ...(part.filename !== undefined && { filename: part.filename }),\n });\n }\n }\n return parts;\n};\n\nexport const createMessageQueue = (\n driver: MessageQueueDriver,\n): MessageQueueController => {\n let lanes: Record<Lane, readonly QueueItemState[]> = {\n queue: EMPTY_QUEUE_ITEMS,\n steer: EMPTY_QUEUE_ITEMS,\n };\n const messages = new Map<string, AppendMessage>();\n const subscribers = new Set<() => void>();\n\n let running = false;\n let paused = false;\n let dispatchTransform: (message: AppendMessage) => AppendMessage = (m) => m;\n // swallow the cancelled run's settle when steering so it does not double-advance\n let suppressIdle = 0;\n // settles from cancelled runs that must drop `running` without advancing\n let cancelSettles = 0;\n let interrupting = false;\n\n const notify = () => {\n notifyEventListeners(subscribers, undefined, \"Message queue\");\n };\n\n const setLanes = (next: Record<Lane, readonly QueueItemState[]>) => {\n lanes = next;\n adapter.items = next.queue;\n adapter.steerItems = next.steer;\n notify();\n };\n\n const toItem = (id: string, message: AppendMessage): QueueItemState => ({\n id,\n prompt: getThreadMessageText(message),\n parts: getQueueItemParts(message),\n });\n\n const laneOf = (queueItemId: string): Lane | undefined => {\n if (lanes.steer.some((item) => item.id === queueItemId)) return \"steer\";\n if (lanes.queue.some((item) => item.id === queueItemId)) return \"queue\";\n return undefined;\n };\n\n const advance = () => {\n if (running || paused) return;\n const lane: Lane = lanes.steer.length > 0 ? \"steer\" : \"queue\";\n const head = lanes[lane][0];\n if (!head) return;\n const message = messages.get(head.id);\n messages.delete(head.id);\n setLanes({ ...lanes, [lane]: lanes[lane].slice(1) });\n if (!message) return;\n running = true;\n driver.run(dispatchTransform(message), { steer: false });\n };\n\n const interrupt = (message: AppendMessage) => {\n paused = false;\n // the interrupted run settles exactly once, whether or not it was\n // already cancel-notified\n suppressIdle += Math.max(cancelSettles, 1);\n cancelSettles = 0;\n // a driver whose cancel routes through the runtime notifies this queue\n // back; the interrupt already accounted for that settle and is dispatching\n // in its place\n interrupting = true;\n try {\n driver.cancel!();\n } finally {\n interrupting = false;\n }\n running = true;\n driver.run(dispatchTransform(message), { steer: true });\n };\n\n const push = (lane: Lane, message: AppendMessage) => {\n paused = false;\n const id = generateId();\n messages.set(id, message);\n setLanes({ ...lanes, [lane]: [...lanes[lane], toItem(id, message)] });\n advance();\n };\n\n const enqueue = (message: AppendMessage) => {\n push(\"queue\", message);\n };\n\n const steer = (message: AppendMessage) => {\n if (running && driver.cancel) {\n interrupt(message);\n return;\n }\n push(\"steer\", message);\n };\n\n const move = (queueItemId: string, placement: QueuePlacement) => {\n const fromLane = laneOf(queueItemId);\n if (!fromLane) throw new Error(`Unknown queue item \"${queueItemId}\".`);\n const toLane = placement.lane ?? fromLane;\n\n const item = lanes[fromLane].find((i) => i.id === queueItemId)!;\n const dest = (toLane === fromLane ? lanes[fromLane] : lanes[toLane]).filter(\n (i) => i.id !== queueItemId,\n );\n\n const anchorIndex = (anchor: string) => {\n if (anchor === queueItemId)\n throw new Error(`Queue item \"${queueItemId}\" cannot anchor itself.`);\n const index = dest.findIndex((i) => i.id === anchor);\n if (index === -1)\n throw new Error(`Unknown anchor \"${anchor}\" in lane \"${toLane}\".`);\n return index;\n };\n\n const { insertAfter, insertBefore } = placement;\n let index: number;\n if (insertAfter === undefined && insertBefore === undefined) {\n index =\n toLane === fromLane\n ? lanes[fromLane].findIndex((i) => i.id === queueItemId)\n : dest.length;\n } else if (insertAfter !== undefined && insertBefore !== undefined) {\n const after = insertAfter === null ? -1 : anchorIndex(insertAfter);\n const before =\n insertBefore === null ? dest.length : anchorIndex(insertBefore);\n if (before !== after + 1)\n throw new Error(\n `insertAfter \"${insertAfter}\" and insertBefore \"${insertBefore}\" are not adjacent in lane \"${toLane}\".`,\n );\n index = after + 1;\n } else if (insertAfter !== undefined) {\n index = insertAfter === null ? 0 : anchorIndex(insertAfter) + 1;\n } else {\n index = insertBefore === null ? dest.length : anchorIndex(insertBefore!);\n }\n\n // placement and immediate dispatch cannot coexist: an anchored move into\n // the steer lane places without interrupting; only an unanchored one\n // cancels the live run and dispatches\n if (\n insertAfter === undefined &&\n insertBefore === undefined &&\n toLane === \"steer\" &&\n fromLane !== \"steer\" &&\n running &&\n driver.cancel\n ) {\n const message = messages.get(queueItemId)!;\n messages.delete(queueItemId);\n setLanes({\n queue: lanes.queue.filter((i) => i.id !== queueItemId),\n steer: lanes.steer,\n });\n interrupt(message);\n return;\n }\n\n const nextDest = [...dest.slice(0, index), item, ...dest.slice(index)];\n const next = { ...lanes, [toLane]: nextDest };\n if (toLane !== fromLane)\n next[fromLane] = lanes[fromLane].filter((i) => i.id !== queueItemId);\n setLanes(next);\n advance();\n };\n\n const edit = (queueItemId: string, message: AppendMessage) => {\n const lane = laneOf(queueItemId);\n if (!lane) throw new Error(`Unknown queue item \"${queueItemId}\".`);\n messages.set(queueItemId, message);\n setLanes({\n ...lanes,\n [lane]: lanes[lane].map((item) =>\n item.id === queueItemId ? toItem(queueItemId, message) : item,\n ),\n });\n };\n\n const remove = (queueItemId: string) => {\n if (!messages.delete(queueItemId)) return;\n setLanes({\n queue: lanes.queue.filter((item) => item.id !== queueItemId),\n steer: lanes.steer.filter((item) => item.id !== queueItemId),\n });\n };\n\n const notifyCancelled = () => {\n if (interrupting) return;\n if (running && cancelSettles === 0) {\n paused = true;\n cancelSettles = 1;\n }\n };\n\n const adapter: ExternalThreadQueueAdapter = {\n items: lanes.queue,\n steerItems: lanes.steer,\n enqueue,\n steer,\n move,\n edit,\n remove,\n __internal_setDispatchTransform: (transform) => {\n dispatchTransform = transform;\n },\n __internal_notifyCancelled: notifyCancelled,\n };\n\n return {\n adapter,\n notifyBusy: () => {\n paused = false;\n // a cancelled run's settle that is still outstanding belongs to a run\n // this new one replaces; swallow it entirely\n suppressIdle += cancelSettles;\n cancelSettles = 0;\n running = true;\n },\n notifyIdle: () => {\n if (suppressIdle > 0) {\n suppressIdle--;\n return;\n }\n if (cancelSettles > 0) cancelSettles--;\n running = false;\n advance();\n },\n notifyCancelled,\n clear: () => {\n messages.clear();\n setLanes({ queue: EMPTY_QUEUE_ITEMS, steer: EMPTY_QUEUE_ITEMS });\n },\n subscribe: (callback) => {\n subscribers.add(callback);\n return () => {\n subscribers.delete(callback);\n };\n },\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FileMessagePart, TextMessagePart } from "../../types/message.js";
|
|
2
|
+
//#region src/runtime/queue/queue-item.d.ts
|
|
3
|
+
type QueueItemState = {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
/** @deprecated Derive from the text parts of `parts` instead. Removal after 2026-11-05. */
|
|
6
|
+
readonly prompt: string;
|
|
7
|
+
readonly parts: readonly (FileMessagePart | TextMessagePart)[];
|
|
8
|
+
};
|
|
9
|
+
declare const EMPTY_QUEUE_ITEMS: readonly QueueItemState[];
|
|
10
|
+
//#endregion
|
|
11
|
+
export { EMPTY_QUEUE_ITEMS, QueueItemState };
|
|
12
|
+
//# sourceMappingURL=queue-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/runtime/queue/queue-item.ts"],"mappings":";;KAEY;WACD;;WAEA;WACA,iBAAiB,kBAAkB;;cAGjC,4BAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-item.js","names":["FileMessagePart","TextMessagePart","QueueItemState","id","prompt","parts","EMPTY_QUEUE_ITEMS","Object","freeze"],"sources":["../../../src/runtime/queue/queue-item.ts"],"sourcesContent":["import type { FileMessagePart, TextMessagePart } from \"../../types/message\";\n\nexport type QueueItemState = {\n readonly id: string;\n /** @deprecated Derive from the text parts of `parts` instead. Removal after 2026-11-05. */\n readonly prompt: string;\n readonly parts: readonly (FileMessagePart | TextMessagePart)[];\n};\n\nexport const EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\n"],"mappings":";AASA,MAAaM,oBAA+CC,OAAOC,OAAO,CAAA,CAAE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/runtime/utils/abortable-thread-load.d.ts
|
|
2
|
+
type AbortableThreadLoadPurpose = "initial" | "reload";
|
|
3
|
+
type AbortableThreadLoadOptions = {
|
|
4
|
+
purpose?: AbortableThreadLoadPurpose;
|
|
5
|
+
load: (signal: AbortSignal) => Promise<void>;
|
|
6
|
+
onSettled: () => void;
|
|
7
|
+
onInitialError: (error: unknown) => void;
|
|
8
|
+
};
|
|
9
|
+
declare const createAbortableThreadLoad: () => {
|
|
10
|
+
abort(purpose?: AbortableThreadLoadPurpose): void;
|
|
11
|
+
run({ purpose, load, onSettled, onInitialError }: AbortableThreadLoadOptions): Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { AbortableThreadLoadPurpose, createAbortableThreadLoad };
|
|
15
|
+
//# sourceMappingURL=abortable-thread-load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-thread-load.d.ts","names":[],"sources":["../../../src/runtime/utils/abortable-thread-load.ts"],"mappings":";KAAY;KAEP;EACH,UAAU;EACV,OAAO,QAAQ,gBAAgB;EAC/B;EACA,iBAAiB;;cAGN;EAQO,MAAA,UAAA;EASb,MAAA,SAAA,MAAA,WAAA,kBAAA,6BAA6B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/runtime/utils/abortable-thread-load.ts
|
|
2
|
+
const createAbortableThreadLoad = () => {
|
|
3
|
+
let current = null;
|
|
4
|
+
return {
|
|
5
|
+
abort(purpose) {
|
|
6
|
+
if (purpose !== void 0 && current?.purpose !== purpose) return;
|
|
7
|
+
current?.controller.abort();
|
|
8
|
+
},
|
|
9
|
+
run({ purpose = "initial", load, onSettled, onInitialError }) {
|
|
10
|
+
if (purpose === "reload" && current?.purpose === "initial") return current.promise ?? Promise.resolve();
|
|
11
|
+
current?.controller.abort();
|
|
12
|
+
const controller = new AbortController();
|
|
13
|
+
const record = {
|
|
14
|
+
controller,
|
|
15
|
+
purpose
|
|
16
|
+
};
|
|
17
|
+
current = record;
|
|
18
|
+
const task = load(controller.signal).catch((error) => {
|
|
19
|
+
if (controller.signal.aborted) return;
|
|
20
|
+
throw error;
|
|
21
|
+
}).finally(() => {
|
|
22
|
+
if (current?.controller === controller) current = null;
|
|
23
|
+
if (controller.signal.aborted) return;
|
|
24
|
+
onSettled();
|
|
25
|
+
});
|
|
26
|
+
record.promise = task;
|
|
27
|
+
if (purpose === "reload") return task;
|
|
28
|
+
return task.catch(onInitialError);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { createAbortableThreadLoad };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=abortable-thread-load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-thread-load.js","names":["AbortableThreadLoadPurpose","AbortableThreadLoadOptions","purpose","load","signal","AbortSignal","Promise","onSettled","onInitialError","error","createAbortableThreadLoad","current","controller","AbortController","promise","abort","undefined","run","resolve","record","NonNullable","task","catch","aborted","finally"],"sources":["../../../src/runtime/utils/abortable-thread-load.ts"],"sourcesContent":["export type AbortableThreadLoadPurpose = \"initial\" | \"reload\";\n\ntype AbortableThreadLoadOptions = {\n purpose?: AbortableThreadLoadPurpose;\n load: (signal: AbortSignal) => Promise<void>;\n onSettled: () => void;\n onInitialError: (error: unknown) => void;\n};\n\nexport const createAbortableThreadLoad = () => {\n let current: {\n controller: AbortController;\n purpose: AbortableThreadLoadPurpose;\n promise?: Promise<void>;\n } | null = null;\n\n return {\n abort(purpose?: AbortableThreadLoadPurpose) {\n if (purpose !== undefined && current?.purpose !== purpose) return;\n current?.controller.abort();\n },\n run({\n purpose = \"initial\",\n load,\n onSettled,\n onInitialError,\n }: AbortableThreadLoadOptions): Promise<void> {\n if (purpose === \"reload\" && current?.purpose === \"initial\") {\n return current.promise ?? Promise.resolve();\n }\n\n current?.controller.abort();\n const controller = new AbortController();\n const record: NonNullable<typeof current> = { controller, purpose };\n current = record;\n\n const task = load(controller.signal)\n .catch((error: unknown) => {\n if (controller.signal.aborted) return;\n throw error;\n })\n .finally(() => {\n if (current?.controller === controller) current = null;\n if (controller.signal.aborted) return;\n onSettled();\n });\n record.promise = task;\n\n if (purpose === \"reload\") return task;\n return task.catch(onInitialError);\n },\n };\n};\n"],"mappings":";AASA,MAAaU,kCAAkC;CAC7C,IAAIC,UAIO;CAEX,OAAO;EACLI,MAAMb,SAAsC;GAC1C,IAAIA,YAAYc,KAAAA,KAAaL,SAAST,YAAYA,SAAS;GAC3DS,SAASC,WAAWG,MAAM;EAC5B;EACAE,IAAI,EACFf,UAAU,WACVC,MACAI,WACAC,kBAC4C;GAC5C,IAAIN,YAAY,YAAYS,SAAST,YAAY,WAC/C,OAAOS,QAAQG,WAAWR,QAAQY,QAAQ;GAG5CP,SAASC,WAAWG,MAAM;GAC1B,MAAMH,aAAa,IAAIC,gBAAgB;GACvC,MAAMM,SAAsC;IAAEP;IAAYV;GAAQ;GAClES,UAAUQ;GAEV,MAAME,OAAOlB,KAAKS,WAAWR,MAAM,CAAC,CACjCkB,OAAOb,UAAmB;IACzB,IAAIG,WAAWR,OAAOmB,SAAS;IAC/B,MAAMd;GACR,CAAC,CAAC,CACDe,cAAc;IACb,IAAIb,SAASC,eAAeA,YAAYD,UAAU;IAClD,IAAIC,WAAWR,OAAOmB,SAAS;IAC/BhB,UAAU;GACZ,CAAC;GACHY,OAAOL,UAAUO;GAEjB,IAAInB,YAAY,UAAU,OAAOmB;GACjC,OAAOA,KAAKC,MAAMd,cAAc;EAClC;CACF;AACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/runtime/utils/attachment-add-operations.d.ts
|
|
2
|
+
type AttachmentAddOperation = {
|
|
3
|
+
cancelled: boolean;
|
|
4
|
+
attachmentIds: Set<string>;
|
|
5
|
+
};
|
|
6
|
+
declare class AttachmentAddOperations {
|
|
7
|
+
private readonly operations;
|
|
8
|
+
start(): AttachmentAddOperation;
|
|
9
|
+
accept(operation: AttachmentAddOperation, attachmentId: string): boolean;
|
|
10
|
+
finish(operation: AttachmentAddOperation): void;
|
|
11
|
+
isCancelled(operation: AttachmentAddOperation): boolean;
|
|
12
|
+
cancel(attachmentId: string): void;
|
|
13
|
+
cancelAll(): void;
|
|
14
|
+
}
|
|
15
|
+
declare const drainAttachmentAdd: <T>(result: Promise<T> | AsyncIterable<T>, accept: (attachment: T) => boolean) => Promise<void>;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { AttachmentAddOperation, AttachmentAddOperations, drainAttachmentAdd };
|
|
18
|
+
//# sourceMappingURL=attachment-add-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-add-operations.d.ts","names":[],"sources":["../../../src/runtime/utils/attachment-add-operations.ts"],"mappings":";KAAY;EACV;EACA,eAAe;;cAGJ;mBACM;EAEjB,SAAK;EASL,OAAO,WAAW,wBAAwB;EAM1C,OAAO,WAAW;EAIlB,YAAY,WAAW;EAIvB,OAAO;EAQP;;cAQW,qBAA4B,GACvC,QAAQ,QAAQ,KAAK,cAAc,IACnC,SAAS,YAAY,kBAAa"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/runtime/utils/attachment-add-operations.ts
|
|
2
|
+
var AttachmentAddOperations = class {
|
|
3
|
+
operations = /* @__PURE__ */ new Set();
|
|
4
|
+
start() {
|
|
5
|
+
const operation = {
|
|
6
|
+
cancelled: false,
|
|
7
|
+
attachmentIds: /* @__PURE__ */ new Set()
|
|
8
|
+
};
|
|
9
|
+
this.operations.add(operation);
|
|
10
|
+
return operation;
|
|
11
|
+
}
|
|
12
|
+
accept(operation, attachmentId) {
|
|
13
|
+
if (operation.cancelled) return false;
|
|
14
|
+
operation.attachmentIds.add(attachmentId);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
finish(operation) {
|
|
18
|
+
this.operations.delete(operation);
|
|
19
|
+
}
|
|
20
|
+
isCancelled(operation) {
|
|
21
|
+
return operation.cancelled;
|
|
22
|
+
}
|
|
23
|
+
cancel(attachmentId) {
|
|
24
|
+
for (const operation of [...this.operations]) {
|
|
25
|
+
if (!operation.attachmentIds.has(attachmentId)) continue;
|
|
26
|
+
operation.cancelled = true;
|
|
27
|
+
this.operations.delete(operation);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
cancelAll() {
|
|
31
|
+
for (const operation of this.operations) operation.cancelled = true;
|
|
32
|
+
this.operations.clear();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const drainAttachmentAdd = async (result, accept) => {
|
|
36
|
+
if (Symbol.asyncIterator in result) {
|
|
37
|
+
for await (const attachment of result) if (!accept(attachment)) break;
|
|
38
|
+
} else accept(await result);
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { AttachmentAddOperations, drainAttachmentAdd };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=attachment-add-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-add-operations.js","names":["AttachmentAddOperation","cancelled","attachmentIds","Set","AttachmentAddOperations","operations","start","operation","add","accept","attachmentId","finish","delete","isCancelled","cancel","has","cancelAll","clear","drainAttachmentAdd","result","Promise","T","AsyncIterable","attachment","Symbol","asyncIterator"],"sources":["../../../src/runtime/utils/attachment-add-operations.ts"],"sourcesContent":["export type AttachmentAddOperation = {\n cancelled: boolean;\n attachmentIds: Set<string>;\n};\n\nexport class 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\nexport const drainAttachmentAdd = async <T>(\n result: Promise<T> | AsyncIterable<T>,\n accept: (attachment: T) => boolean,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n if (!accept(attachment)) break;\n }\n } else {\n accept(await result);\n }\n};\n"],"mappings":";AAKA,IAAaI,0BAAb,MAAqC;CACnC,6BAA8B,IAAID,IAA4B;CAE9DG,QAAQ;EACN,MAAMC,YAAoC;GACxCN,WAAW;GACXC,+BAAe,IAAIC,IAAI;EACzB;EACA,KAAKE,WAAWG,IAAID,SAAS;EAC7B,OAAOA;CACT;CAEAE,OAAOF,WAAmCG,cAAsB;EAC9D,IAAIH,UAAUN,WAAW,OAAO;EAChCM,UAAUL,cAAcM,IAAIE,YAAY;EACxC,OAAO;CACT;CAEAC,OAAOJ,WAAmC;EACxC,KAAKF,WAAWO,OAAOL,SAAS;CAClC;CAEAM,YAAYN,WAAmC;EAC7C,OAAOA,UAAUN;CACnB;CAEAa,OAAOJ,cAAsB;EAC3B,KAAK,MAAMH,aAAa,CAAC,GAAG,KAAKF,UAAU,GAAG;GAC5C,IAAI,CAACE,UAAUL,cAAca,IAAIL,YAAY,GAAG;GAChDH,UAAUN,YAAY;GACtB,KAAKI,WAAWO,OAAOL,SAAS;EAClC;CACF;CAEAS,YAAY;EACV,KAAK,MAAMT,aAAa,KAAKF,YAC3BE,UAAUN,YAAY;EAExB,KAAKI,WAAWY,MAAM;CACxB;AACF;AAEA,MAAaC,qBAAqB,OAChCC,QACAV,WACG;CACH,IAAIe,OAAOC,iBAAiBN,QACf;aAAA,MAAMI,cAAcJ,QAC7B,IAAI,CAACV,OAAOc,UAAU,GAAG;CAAA,OAG3Bd,OAAO,MAAMU,MAAM;AAEvB"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { MessageStatus } from "../../types/message.js";
|
|
2
|
+
import { ThreadMessageLike } from "./thread-message-like.js";
|
|
2
3
|
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
3
4
|
//#region src/runtime/utils/auto-status.d.ts
|
|
5
|
+
type ThreadMessageLikeContentItem = Exclude<ThreadMessageLike["content"], string>[number];
|
|
6
|
+
declare const isPendingToolCall: (c: ThreadMessageLikeContentItem) => boolean;
|
|
7
|
+
declare const isInterruptedToolCall: (c: ThreadMessageLikeContentItem) => boolean;
|
|
4
8
|
declare const isAutoStatus: (status: MessageStatus) => boolean;
|
|
5
|
-
declare const getAutoStatus: (isLast: boolean, isRunning: boolean, hasInterruptedToolCalls: boolean, hasPendingToolCalls: boolean, error?: ReadonlyJSONValue) => MessageStatus;
|
|
9
|
+
declare const getAutoStatus: (isLast: boolean, isRunning: boolean, hasInterruptedToolCalls: boolean, hasPendingToolCalls: boolean, error?: ReadonlyJSONValue, isCancelled?: boolean) => MessageStatus;
|
|
10
|
+
declare const getContentAutoStatus: (content: ThreadMessageLike["content"], isLast: boolean, isRunning: boolean) => MessageStatus;
|
|
6
11
|
//#endregion
|
|
7
|
-
export { getAutoStatus, isAutoStatus };
|
|
12
|
+
export { getAutoStatus, getContentAutoStatus, isAutoStatus, isInterruptedToolCall, isPendingToolCall };
|
|
8
13
|
//# sourceMappingURL=auto-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-status.d.ts","names":[],"sources":["../../../src/runtime/utils/auto-status.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"auto-status.d.ts","names":[],"sources":["../../../src/runtime/utils/auto-status.ts"],"mappings":";;;;KAIK,+BAA+B,QAClC;cAIW,oBAAqB,GAAG;cAGxB,wBACX,GAAG;cAuDQ,eAAgB,QAAQ;cAGxB,gBACX,iBACA,oBACA,kCACA,8BACA,QAAQ,mBACR,0BACC;cAuBU,uBACX,SAAS,8BACT,iBACA,uBACC"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
//#region src/runtime/utils/auto-status.ts
|
|
2
|
+
const isPendingToolCall = (c) => c.type === "tool-call" && c.result === void 0;
|
|
3
|
+
const isInterruptedToolCall = (c) => {
|
|
4
|
+
if (c.type !== "tool-call" || c.result !== void 0) return false;
|
|
5
|
+
return c.interrupt != null || c.approval != null && c.approval.approved === void 0 && c.approval.resolution === void 0;
|
|
6
|
+
};
|
|
2
7
|
const symbolAutoStatus = Symbol("autoStatus");
|
|
3
8
|
const AUTO_STATUS_RUNNING = Object.freeze(Object.assign({ type: "running" }, { [symbolAutoStatus]: true }));
|
|
4
9
|
const AUTO_STATUS_COMPLETE = Object.freeze(Object.assign({
|
|
5
10
|
type: "complete",
|
|
6
11
|
reason: "unknown"
|
|
7
12
|
}, { [symbolAutoStatus]: true }));
|
|
13
|
+
const AUTO_STATUS_CANCELLED = Object.freeze(Object.assign({
|
|
14
|
+
type: "incomplete",
|
|
15
|
+
reason: "cancelled"
|
|
16
|
+
}, { [symbolAutoStatus]: true }));
|
|
8
17
|
const AUTO_STATUS_PENDING = Object.freeze(Object.assign({
|
|
9
18
|
type: "requires-action",
|
|
10
19
|
reason: "tool-calls"
|
|
@@ -14,15 +23,16 @@ const AUTO_STATUS_INTERRUPT = Object.freeze(Object.assign({
|
|
|
14
23
|
reason: "interrupt"
|
|
15
24
|
}, { [symbolAutoStatus]: true }));
|
|
16
25
|
const isAutoStatus = (status) => status[symbolAutoStatus] === true;
|
|
17
|
-
const getAutoStatus = (isLast, isRunning, hasInterruptedToolCalls, hasPendingToolCalls, error) => {
|
|
26
|
+
const getAutoStatus = (isLast, isRunning, hasInterruptedToolCalls, hasPendingToolCalls, error, isCancelled) => {
|
|
18
27
|
if (isLast && error) return Object.assign({
|
|
19
28
|
type: "incomplete",
|
|
20
29
|
reason: "error",
|
|
21
30
|
error
|
|
22
31
|
}, { [symbolAutoStatus]: true });
|
|
23
|
-
return isLast && isRunning ? AUTO_STATUS_RUNNING : hasInterruptedToolCalls ? AUTO_STATUS_INTERRUPT : hasPendingToolCalls ? AUTO_STATUS_PENDING : AUTO_STATUS_COMPLETE;
|
|
32
|
+
return isLast && isRunning ? AUTO_STATUS_RUNNING : hasInterruptedToolCalls ? AUTO_STATUS_INTERRUPT : hasPendingToolCalls ? AUTO_STATUS_PENDING : isCancelled ? AUTO_STATUS_CANCELLED : AUTO_STATUS_COMPLETE;
|
|
24
33
|
};
|
|
34
|
+
const getContentAutoStatus = (content, isLast, isRunning) => getAutoStatus(isLast, isRunning, typeof content !== "string" && content.some(isInterruptedToolCall), typeof content !== "string" && content.some(isPendingToolCall));
|
|
25
35
|
//#endregion
|
|
26
|
-
export { getAutoStatus, isAutoStatus };
|
|
36
|
+
export { getAutoStatus, getContentAutoStatus, isAutoStatus, isInterruptedToolCall, isPendingToolCall };
|
|
27
37
|
|
|
28
38
|
//# sourceMappingURL=auto-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-status.js","names":["MessageStatus","ReadonlyJSONValue","symbolAutoStatus","Symbol","AUTO_STATUS_RUNNING","Object","freeze","assign","
|
|
1
|
+
{"version":3,"file":"auto-status.js","names":["MessageStatus","ReadonlyJSONValue","ThreadMessageLike","ThreadMessageLikeContentItem","Exclude","isPendingToolCall","c","type","result","undefined","isInterruptedToolCall","interrupt","approval","approved","resolution","symbolAutoStatus","Symbol","AUTO_STATUS_RUNNING","Object","freeze","assign","const","AUTO_STATUS_COMPLETE","reason","AUTO_STATUS_CANCELLED","AUTO_STATUS_PENDING","AUTO_STATUS_INTERRUPT","isAutoStatus","status","getAutoStatus","isLast","isRunning","hasInterruptedToolCalls","hasPendingToolCalls","error","isCancelled","getContentAutoStatus","content","some"],"sources":["../../../src/runtime/utils/auto-status.ts"],"sourcesContent":["import type { MessageStatus } from \"../../types/message\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { ThreadMessageLike } from \"./thread-message-like\";\n\ntype ThreadMessageLikeContentItem = Exclude<\n ThreadMessageLike[\"content\"],\n string\n>[number];\n\nexport const isPendingToolCall = (c: ThreadMessageLikeContentItem): boolean =>\n c.type === \"tool-call\" && c.result === undefined;\n\nexport const isInterruptedToolCall = (\n c: ThreadMessageLikeContentItem,\n): boolean => {\n if (c.type !== \"tool-call\" || c.result !== undefined) return false;\n return (\n c.interrupt != null ||\n (c.approval != null &&\n c.approval.approved === undefined &&\n c.approval.resolution === undefined)\n );\n};\n\nconst symbolAutoStatus = Symbol(\"autoStatus\");\n\nconst AUTO_STATUS_RUNNING = Object.freeze(\n Object.assign({ type: \"running\" as const }, { [symbolAutoStatus]: true }),\n);\nconst AUTO_STATUS_COMPLETE = Object.freeze(\n Object.assign(\n {\n type: \"complete\" as const,\n reason: \"unknown\" as const,\n },\n { [symbolAutoStatus]: true },\n ),\n);\nconst AUTO_STATUS_CANCELLED = Object.freeze(\n Object.assign(\n {\n type: \"incomplete\" as const,\n reason: \"cancelled\" as const,\n },\n { [symbolAutoStatus]: true },\n ),\n);\n\nconst AUTO_STATUS_PENDING = Object.freeze(\n Object.assign(\n {\n type: \"requires-action\" as const,\n reason: \"tool-calls\" as const,\n },\n { [symbolAutoStatus]: true },\n ),\n);\n\nconst AUTO_STATUS_INTERRUPT = Object.freeze(\n Object.assign(\n {\n type: \"requires-action\" as const,\n reason: \"interrupt\" as const,\n },\n { [symbolAutoStatus]: true },\n ),\n);\n\nexport const isAutoStatus = (status: MessageStatus) =>\n (status as any)[symbolAutoStatus] === true;\n\nexport const getAutoStatus = (\n isLast: boolean,\n isRunning: boolean,\n hasInterruptedToolCalls: boolean,\n hasPendingToolCalls: boolean,\n error?: ReadonlyJSONValue,\n isCancelled?: boolean,\n): MessageStatus => {\n if (isLast && error) {\n return Object.assign(\n {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n error: error,\n },\n { [symbolAutoStatus]: true },\n );\n }\n\n return isLast && isRunning\n ? AUTO_STATUS_RUNNING\n : hasInterruptedToolCalls\n ? AUTO_STATUS_INTERRUPT\n : hasPendingToolCalls\n ? AUTO_STATUS_PENDING\n : isCancelled\n ? AUTO_STATUS_CANCELLED\n : AUTO_STATUS_COMPLETE;\n};\n\nexport const getContentAutoStatus = (\n content: ThreadMessageLike[\"content\"],\n isLast: boolean,\n isRunning: boolean,\n): MessageStatus =>\n getAutoStatus(\n isLast,\n isRunning,\n typeof content !== \"string\" && content.some(isInterruptedToolCall),\n typeof content !== \"string\" && content.some(isPendingToolCall),\n );\n"],"mappings":";AASA,MAAaK,qBAAqBC,MAChCA,EAAEC,SAAS,eAAeD,EAAEE,WAAWC,KAAAA;AAEzC,MAAaC,yBACXJ,MACY;CACZ,IAAIA,EAAEC,SAAS,eAAeD,EAAEE,WAAWC,KAAAA,GAAW,OAAO;CAC7D,OACEH,EAAEK,aAAa,QACdL,EAAEM,YAAY,QACbN,EAAEM,SAASC,aAAaJ,KAAAA,KACxBH,EAAEM,SAASE,eAAeL,KAAAA;AAEhC;AAEA,MAAMM,mBAAmBC,OAAO,YAAY;AAE5C,MAAMC,sBAAsBC,OAAOC,OACjCD,OAAOE,OAAO,EAAEb,MAAM,UAAmB,GAAG,GAAGQ,mBAAmB,KAAK,CAAC,CAC1E;AACA,MAAMO,uBAAuBJ,OAAOC,OAClCD,OAAOE,OACL;CACEb,MAAM;CACNgB,QAAQ;AACV,GACA,GAAGR,mBAAmB,KAAK,CAC7B,CACF;AACA,MAAMS,wBAAwBN,OAAOC,OACnCD,OAAOE,OACL;CACEb,MAAM;CACNgB,QAAQ;AACV,GACA,GAAGR,mBAAmB,KAAK,CAC7B,CACF;AAEA,MAAMU,sBAAsBP,OAAOC,OACjCD,OAAOE,OACL;CACEb,MAAM;CACNgB,QAAQ;AACV,GACA,GAAGR,mBAAmB,KAAK,CAC7B,CACF;AAEA,MAAMW,wBAAwBR,OAAOC,OACnCD,OAAOE,OACL;CACEb,MAAM;CACNgB,QAAQ;AACV,GACA,GAAGR,mBAAmB,KAAK,CAC7B,CACF;AAEA,MAAaY,gBAAgBC,WAC1BA,OAAeb,sBAAsB;AAExC,MAAac,iBACXC,QACAC,WACAC,yBACAC,qBACAC,OACAC,gBACkB;CAClB,IAAIL,UAAUI,OACZ,OAAOhB,OAAOE,OACZ;EACEb,MAAM;EACNgB,QAAQ;EACDW;CACT,GACA,GAAGnB,mBAAmB,KAAK,CAC7B;CAGF,OAAOe,UAAUC,YACbd,sBACAe,0BACEN,wBACAO,sBACER,sBACAU,cACEX,wBACAF;AACZ;AAEA,MAAac,wBACXC,SACAP,QACAC,cAEAF,cACEC,QACAC,WACA,OAAOM,YAAY,YAAYA,QAAQC,KAAK5B,qBAAqB,GACjE,OAAO2B,YAAY,YAAYA,QAAQC,KAAKjC,iBAAiB,CAC/D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { MessageTiming, ThreadMessage } from "../../types/message.js";
|
|
2
|
+
import { ThreadMessageLike } from "./thread-message-like.js";
|
|
3
|
+
import { ToolExecutionStatus } from "../../runtimes/tool-invocations/ToolInvocationTracker.js";
|
|
4
|
+
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
5
|
+
//#region src/runtime/utils/external-message-conversion.d.ts
|
|
6
|
+
type JoinStrategy = "concat-content" | "none";
|
|
7
|
+
type ExternalMessageConverterMessage = (ThreadMessageLike & {
|
|
8
|
+
readonly convertConfig?: {
|
|
9
|
+
readonly joinStrategy?: JoinStrategy;
|
|
10
|
+
};
|
|
11
|
+
}) | {
|
|
12
|
+
role: "tool";
|
|
13
|
+
toolCallId: string;
|
|
14
|
+
toolName?: string | undefined;
|
|
15
|
+
result: any;
|
|
16
|
+
artifact?: any;
|
|
17
|
+
isError?: boolean;
|
|
18
|
+
messages?: readonly ThreadMessage[];
|
|
19
|
+
};
|
|
20
|
+
type ExternalMessageConverterMetadata = {
|
|
21
|
+
readonly toolStatuses?: Record<string, ToolExecutionStatus>;
|
|
22
|
+
readonly error?: ReadonlyJSONValue;
|
|
23
|
+
readonly cancelledMessageIds?: ReadonlySet<string>;
|
|
24
|
+
readonly messageTiming?: Record<string, MessageTiming>;
|
|
25
|
+
};
|
|
26
|
+
type ExternalMessageConverterCallback<T> = (message: T, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterMessage | ExternalMessageConverterMessage[];
|
|
27
|
+
type ExternalMessageConverterCallbackResult<T> = {
|
|
28
|
+
input: T;
|
|
29
|
+
outputs: ExternalMessageConverterMessage[];
|
|
30
|
+
};
|
|
31
|
+
type ExternalMessageConverterChunk<T> = {
|
|
32
|
+
inputs: T[];
|
|
33
|
+
outputs: ExternalMessageConverterMessage[];
|
|
34
|
+
};
|
|
35
|
+
declare const convertExternalMessageCallback: <T>(input: T, callback: ExternalMessageConverterCallback<T>, metadata: ExternalMessageConverterMetadata) => ExternalMessageConverterCallbackResult<T>;
|
|
36
|
+
declare const joinExternalMessages: (messages: readonly ExternalMessageConverterMessage[]) => ThreadMessageLike;
|
|
37
|
+
declare const chunkExternalMessages: <T>(callbackResults: ExternalMessageConverterCallbackResult<T>[], joinStrategy?: JoinStrategy) => ExternalMessageConverterChunk<T>[];
|
|
38
|
+
declare const shallowArrayEqual: (a: readonly unknown[], b: readonly unknown[]) => boolean;
|
|
39
|
+
type ExternalMessageConversionCache = {
|
|
40
|
+
message: ThreadMessage | undefined;
|
|
41
|
+
generatedFallbackMessages: WeakSet<object>;
|
|
42
|
+
};
|
|
43
|
+
declare const convertExternalMessageChunk: <T>(message: ExternalMessageConverterChunk<T>, idx: number, chunkCount: number, isRunning: boolean, error: ReadonlyJSONValue | undefined, cache?: ExternalMessageConversionCache, cancelledMessageIds?: ReadonlySet<string>) => ThreadMessage;
|
|
44
|
+
declare const completeExternalMessageConversion: (messages: ThreadMessage[], error: ReadonlyJSONValue | undefined) => ThreadMessage[];
|
|
45
|
+
declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: ExternalMessageConverterCallback<T>, isRunning: boolean, metadata: ExternalMessageConverterMetadata) => ThreadMessage[];
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ExternalMessageConverterCallback, ExternalMessageConverterCallbackResult, ExternalMessageConverterChunk, ExternalMessageConverterMessage, ExternalMessageConverterMetadata, JoinStrategy, chunkExternalMessages, completeExternalMessageConversion, convertExternalMessageCallback, convertExternalMessageChunk, convertExternalMessages, joinExternalMessages, shallowArrayEqual };
|
|
48
|
+
//# sourceMappingURL=external-message-conversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-message-conversion.d.ts","names":[],"sources":["../../../src/runtime/utils/external-message-conversion.ts"],"mappings":";;;;;KA2BY;KAEA,mCACP;WACU;aACE,eAAe;;;EAI1B;EACA;EACA;EACA;EACA;EACA;EACA,oBAAoB;;KAGd;WACD,eAAe,eAAe;WAC9B,QAAQ;WACR,sBAAsB;WACtB,gBAAgB,eAAe;;KAG9B,iCAAiC,MAC3C,SAAS,GACT,UAAU,qCACP,kCAAkC;KAE3B,uCAAuC;EACjD,OAAO;EACP,SAAS;;KAGC,8BAA8B;EACxC,QAAQ;EACR,SAAS;;cAsDE,iCAAkC,GAC7C,OAAO,GACP,UAAU,iCAAiC,IAC3C,UAAU,qCACT,uCAAuC;cAY7B,uBACX,mBAAmB,sCAClB;cA4KU,wBAAyB,GACpC,iBAAiB,uCAAuC,MACxD,eAAe,iBAAY,8BAAA;cAmDhB,oBACX,uBACA;KASG;EACH,SAAS;EACT,2BAA2B;;cAGhB,8BAA+B,GAC1C,SAAS,8BAA8B,IACvC,aACA,oBACA,oBACA,OAAO,+BACP,QAAQ,gCACR,sBAAsB,wBAAmB;cA0F9B,oCACX,UAAU,iBACV,OAAO,kCAA6B;cAWzB,0BAA2B,UAAU,SAChD,UAAU,KACV,UAAU,iCAAiC,IAC3C,oBACA,UAAU,qCAAgC"}
|