@assistant-ui/core 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +5 -4
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +4 -2
- package/dist/internal.js +4 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +10 -4
- 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 +101 -28
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +16 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +3 -5
- 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/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +5 -4
- package/dist/model-context/types.js.map +1 -1
- 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 +63 -57
- 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 +25 -28
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +16 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +354 -242
- 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 +24 -18
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.js +2 -1
- package/dist/react/interactables-legacy/Interactables.js +246 -125
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
- package/dist/react/model-context/makeAssistantTool.js +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- 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/useAssistantTool.d.ts +2 -2
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantTool.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/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +2 -1
- package/dist/react/model-context/useToolArgsStatus.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/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 +6 -4
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +59 -29
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +11 -6
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +160 -143
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +2 -6
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +15 -13
- package/dist/react/runtimes/RemoteThreadResource.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 +4 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +424 -52
- 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 +160 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.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/external-message-converter.js +1 -1
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +77 -29
- 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/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-item-runtime.d.ts +7 -3
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js +2 -2
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +12 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +23 -14
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +5 -1
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +1 -1
- 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 +16 -12
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +8 -7
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +18 -3
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +15 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +1 -1
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +6 -2
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +3 -2
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +5 -4
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +15 -6
- package/dist/runtime/utils/message-repository.js.map +1 -1
- 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 +2 -10
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +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.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
- 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 +2 -1
- 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 +34 -28
- 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/internal.d.ts +2 -2
- package/dist/runtimes/internal.js +2 -2
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +3 -1
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -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 +148 -43
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
- package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
- package/dist/runtimes/remote-thread-list/title.d.ts +11 -0
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title.js +14 -0
- package/dist/runtimes/remote-thread-list/title.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +16 -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 +97 -60
- 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 +30 -7
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +2 -1
- package/dist/store/clients/model-context-client.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 -1
- 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 +19 -6
- 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 +2 -1
- 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.d.ts +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +98 -62
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +221 -144
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +2 -2
- 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 +128 -107
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +194 -122
- package/dist/store/runtime-clients/thread-runtime-client.js.map +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/scopes/composer.d.ts +10 -2
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +30 -1
- package/dist/store/scopes/message.d.ts.map +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/thread-list-item.d.ts +2 -2
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +1 -0
- package/dist/store/scopes/threads.d.ts.map +1 -1
- 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/attachment.d.ts +2 -1
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/attachment.js +2 -1
- package/dist/types/attachment.js.map +1 -1
- package/dist/types/message.d.ts +40 -1
- 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/abortable-iterable.d.ts +19 -0
- package/dist/utils/abortable-iterable.d.ts.map +1 -0
- package/dist/utils/abortable-iterable.js +72 -0
- package/dist/utils/abortable-iterable.js.map +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +20 -2
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/record.d.ts +11 -0
- package/dist/utils/record.d.ts.map +1 -0
- package/dist/utils/record.js +12 -0
- package/dist/utils/record.js.map +1 -0
- package/package.json +12 -17
- package/src/adapters/attachment.test.ts +50 -1
- package/src/adapters/attachment.ts +7 -4
- package/src/index.ts +7 -1
- package/src/internal.ts +12 -0
- package/src/model-context/frame/host.test.ts +24 -0
- package/src/model-context/frame/host.ts +10 -4
- package/src/model-context/frame/provider.test.ts +288 -1
- package/src/model-context/frame/provider.ts +148 -30
- package/src/model-context/interactable-composer-metadata.test.ts +28 -0
- package/src/model-context/interactable-composer-metadata.ts +9 -3
- package/src/model-context/registry.test.ts +12 -0
- package/src/model-context/registry.ts +3 -2
- package/src/model-context/tool-call-text.test.ts +67 -0
- package/src/model-context/tool-call-text.ts +67 -0
- package/src/model-context/types.test.ts +25 -0
- package/src/model-context/types.ts +9 -4
- package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
- package/src/react/RuntimeAdapter.test.ts +34 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
- package/src/react/client/InMemoryThreadList.ts +1 -0
- package/src/react/client/Interactables.test.ts +28 -0
- package/src/react/client/Interactables.ts +15 -13
- package/src/react/client/RemoteThreadList.background.test.ts +526 -0
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +315 -0
- package/src/react/client/RemoteThreadList.test.ts +617 -3
- package/src/react/client/RemoteThreadList.ts +433 -167
- package/src/react/client/Tools.ts +29 -12
- package/src/react/index.ts +4 -0
- package/src/react/interactables-legacy/Interactables.ts +16 -16
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
- package/src/react/model-context/makeAssistantTool.ts +2 -2
- 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/useAssistantTool.ts +2 -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/model-context/useToolArgsStatus.test.tsx +30 -0
- package/src/react/model-context/useToolArgsStatus.ts +2 -1
- 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.destroy.test.tsx +172 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +127 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +99 -35
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +274 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +223 -152
- package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
- package/src/react/runtimes/RemoteThreadResource.ts +20 -16
- 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 +546 -5
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +546 -103
- package/src/react/runtimes/cloud/auiV0.ts +5 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +103 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +237 -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.ts +1 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
- package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
- package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +57 -6
- package/src/react/types/MessagePartComponentTypes.ts +7 -3
- package/src/react/types/scopes/tools.ts +2 -0
- package/src/runtime/api/message-part-runtime.ts +3 -3
- package/src/runtime/api/message-runtime.test.ts +75 -0
- package/src/runtime/api/thread-list-item-runtime.ts +10 -3
- package/src/runtime/api/thread-list-runtime.ts +46 -12
- package/src/runtime/api/thread-runtime.test.ts +78 -0
- package/src/runtime/api/thread-runtime.ts +8 -1
- package/src/runtime/base/base-composer-runtime-core.ts +36 -8
- package/src/runtime/base/base-thread-runtime-core.test.ts +149 -4
- package/src/runtime/base/base-thread-runtime-core.ts +16 -8
- package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
- package/src/runtime/interfaces/thread-list-runtime-core.ts +25 -2
- package/src/runtime/interfaces/thread-runtime-core.ts +17 -1
- package/src/runtime/utils/auto-status.test.ts +57 -0
- package/src/runtime/utils/auto-status.ts +13 -1
- package/src/runtime/utils/external-message-conversion.test.ts +165 -0
- package/src/runtime/utils/external-message-conversion.ts +18 -2
- package/src/runtime/utils/message-repository.ts +29 -17
- 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 +3 -11
- 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 +18 -13
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +56 -33
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
- package/src/runtimes/internal.ts +1 -0
- package/src/runtimes/local/local-thread-runtime-core.test.ts +29 -3
- package/src/runtimes/local/local-thread-runtime-core.ts +5 -1
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +238 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +223 -44
- package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
- package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
- package/src/runtimes/remote-thread-list/title.test.ts +62 -0
- package/src/runtimes/remote-thread-list/title.ts +16 -0
- package/src/runtimes/remote-thread-list/types.ts +16 -5
- package/src/runtimes/tool-invocations/EDGE_CASES.md +110 -5
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +750 -136
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +144 -91
- package/src/store/clients/external-thread.ts +62 -11
- package/src/store/clients/model-context-client.ts +5 -1
- package/src/store/clients/single-thread-list.ts +1 -0
- package/src/store/clients/suggestions.test.ts +195 -1
- package/src/store/clients/suggestions.ts +45 -34
- 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/composer-runtime-client.ts +42 -9
- package/src/store/runtime-clients/message-runtime-client.ts +54 -6
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
- package/src/store/runtime-clients/thread-list-runtime-client.ts +17 -2
- package/src/store/runtime-clients/thread-runtime-client.ts +58 -10
- package/src/store/runtime-clients/useSubscribable.ts +8 -2
- package/src/store/scopes/composer.ts +16 -4
- package/src/store/scopes/message.ts +14 -0
- package/src/store/scopes/part.ts +6 -3
- package/src/store/scopes/thread-list-item.ts +5 -2
- package/src/store/scopes/thread.ts +4 -0
- package/src/store/scopes/threads.ts +1 -0
- package/src/subscribable/subscribable.test.ts +50 -0
- package/src/subscribable/subscribable.ts +33 -21
- package/src/tests/MessageRepository.test.ts +116 -0
- package/src/tests/OptimisticState-list-race.test.ts +1 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +158 -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 +89 -0
- package/src/tests/attachment-adapters.test.ts +14 -0
- package/src/tests/base-composer-runtime-core.test.ts +39 -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-list-runtime-core.test.ts +83 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +49 -34
- package/src/tests/external-thread-attachments.test.tsx +224 -1
- package/src/tests/external-thread-parity.test.tsx +23 -0
- package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
- package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
- package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
- package/src/tests/thread-switch-events.test.tsx +475 -2
- package/src/tests/tools-scope-migration.test.tsx +28 -0
- package/src/types/attachment.ts +4 -0
- package/src/types/message.ts +50 -2
- package/src/utils/abortable-iterable.test.ts +213 -0
- package/src/utils/abortable-iterable.ts +93 -0
- package/src/utils/composite-context-provider.test.ts +25 -0
- package/src/utils/composite-context-provider.ts +23 -2
- package/src/utils/record.test.ts +48 -0
- package/src/utils/record.ts +11 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { auiV0Decode, auiV0Encode } from "./auiV0.js";
|
|
2
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
3
|
import { useEffect, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
3
4
|
import { getClientId, useAui } from "@assistant-ui/store";
|
|
4
|
-
import { CloudMessagePersistence, createFormattedPersistence, createRunTelemetryToolCall, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "assistant-cloud";
|
|
5
|
+
import { CloudMessagePersistence, createFormattedPersistence, createRunReport, createRunTelemetryToolCall, deriveRunOutcome, describeRunError, extractRunTelemetryModelId, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "assistant-cloud";
|
|
5
6
|
//#region src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts
|
|
6
7
|
const globalPersistence = /* @__PURE__ */ new WeakMap();
|
|
7
8
|
var AssistantCloudThreadHistoryAdapter = class {
|
|
@@ -22,12 +23,54 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
22
23
|
get _persistence() {
|
|
23
24
|
return this.getPersistence();
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* A send is the moment the runtime creates the remote thread, so that one
|
|
28
|
+
* event waits for the id; every other event reads the id that already
|
|
29
|
+
* exists, because initializing a thread nobody has written to would create
|
|
30
|
+
* an empty remote thread just to attribute an event.
|
|
31
|
+
*/
|
|
32
|
+
async resolveEngagementEventIds(threadId, messageId, options) {
|
|
33
|
+
const threadListItem = this.getThreadListItem(threadId);
|
|
34
|
+
if (!threadListItem) return {};
|
|
35
|
+
let remoteThreadId = threadListItem.getState().remoteId;
|
|
36
|
+
if (!remoteThreadId && options?.awaitThread) remoteThreadId = await threadListItem.initialize().then((result) => result.remoteId).catch(() => void 0);
|
|
37
|
+
const remoteMessageId = messageId ? this.getPersistence(threadListItem).getResolvedRemoteId(messageId) : void 0;
|
|
38
|
+
return {
|
|
39
|
+
...remoteThreadId ? { thread_id: remoteThreadId } : void 0,
|
|
40
|
+
...remoteMessageId ? { message_id: remoteMessageId } : void 0
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
feedback = { submit: ({ message, type }) => {
|
|
44
|
+
(async () => {
|
|
45
|
+
const threadListItem = this.tryGetKeyedThreadListItem();
|
|
46
|
+
const remoteThreadId = threadListItem?.getState().remoteId;
|
|
47
|
+
if (!threadListItem || !remoteThreadId) {
|
|
48
|
+
console.warn(`[assistant-ui] Skipping feedback for message ${message.id}: the thread has no remote id.`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const cloudMessageId = await this.getPersistence(threadListItem).getRemoteId(message.id);
|
|
52
|
+
if (!cloudMessageId) {
|
|
53
|
+
console.warn(`[assistant-ui] Skipping feedback for message ${message.id}: no cloud message id is mapped.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
await this.cloudRef.current.threads.messages.feedback(remoteThreadId, cloudMessageId, { type });
|
|
57
|
+
})().catch((error) => {
|
|
58
|
+
console.error("[assistant-ui] Cloud feedback submission failed:", error);
|
|
59
|
+
});
|
|
60
|
+
} };
|
|
25
61
|
tryGetKeyedThreadListItem() {
|
|
26
62
|
const live = this.aui.threadListItem;
|
|
27
63
|
if (!live.source) return void 0;
|
|
28
64
|
const id = live.getState().id;
|
|
29
65
|
if (id === void 0) return void 0;
|
|
30
|
-
return this.aui.threads.item({ id });
|
|
66
|
+
return this.aui.threads.getState().threadItems.some((item) => item.id === id || item.remoteId === id) ? this.aui.threads.item({ id }) : live;
|
|
67
|
+
}
|
|
68
|
+
getThreadListItem(threadId) {
|
|
69
|
+
const current = this.aui.threadListItem;
|
|
70
|
+
const currentState = current.getState();
|
|
71
|
+
if (currentState.id === threadId || currentState.remoteId === threadId) return current;
|
|
72
|
+
const listed = this.aui.threads.getState().threadItems.find((item) => item.id === threadId || item.remoteId === threadId);
|
|
73
|
+
return listed ? this.aui.threads.item({ id: listed.id }) : void 0;
|
|
31
74
|
}
|
|
32
75
|
withFormat(formatAdapter) {
|
|
33
76
|
const adapter = this;
|
|
@@ -38,7 +81,6 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
38
81
|
return threadListItem;
|
|
39
82
|
};
|
|
40
83
|
const resolvePinned = () => threadListItem ?? pinCurrent();
|
|
41
|
-
const getFormatted = () => createFormattedPersistence(adapter._persistence, formatAdapter);
|
|
42
84
|
const getTargetFormatted = (item) => createFormattedPersistence(adapter.getPersistence(item), formatAdapter);
|
|
43
85
|
return {
|
|
44
86
|
pin() {
|
|
@@ -61,14 +103,14 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
61
103
|
},
|
|
62
104
|
reportTelemetry(items, options) {
|
|
63
105
|
const encodedRunMessages = items.map((item) => formatAdapter.encode(item));
|
|
64
|
-
adapter._reportRunTelemetry(formatAdapter.format, encodedRunMessages, options, resolvePinned());
|
|
106
|
+
adapter._reportRunTelemetry(formatAdapter.format, encodedRunMessages, options, resolvePinned(), extractLastRunMessageInfo(items, formatAdapter));
|
|
65
107
|
},
|
|
66
108
|
async load() {
|
|
67
|
-
pinCurrent();
|
|
109
|
+
const pinned = pinCurrent();
|
|
68
110
|
const live = adapter.aui.threadListItem;
|
|
69
111
|
const remoteId = live.source ? live.getState().remoteId : void 0;
|
|
70
112
|
if (!remoteId) return { messages: [] };
|
|
71
|
-
return
|
|
113
|
+
return getTargetFormatted(pinned ?? live).load(remoteId);
|
|
72
114
|
}
|
|
73
115
|
};
|
|
74
116
|
}
|
|
@@ -76,7 +118,7 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
76
118
|
const { remoteId } = await this.aui.threadListItem.initialize();
|
|
77
119
|
const encoded = auiV0Encode(message);
|
|
78
120
|
await this._persistence.append(remoteId, message.id, parentId, "aui/v0", encoded);
|
|
79
|
-
if (this.cloudRef.current.telemetry.enabled) this._maybeReportRun(remoteId, "aui/v0", encoded);
|
|
121
|
+
if (this.cloudRef.current.telemetry.enabled) this._maybeReportRun(remoteId, "aui/v0", encoded, extractRunMessageInfo(message, "aui/v0"));
|
|
80
122
|
}
|
|
81
123
|
async update(item) {
|
|
82
124
|
if (!this._persistence.isPersisted(item.message.id)) return this.append(item);
|
|
@@ -85,7 +127,7 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
85
127
|
if (!remoteId) return;
|
|
86
128
|
const encoded = auiV0Encode(message);
|
|
87
129
|
await this._persistence.update(remoteId, message.id, "aui/v0", encoded);
|
|
88
|
-
if (this.cloudRef.current.telemetry.enabled) this._maybeReportRun(remoteId, "aui/v0", encoded);
|
|
130
|
+
if (this.cloudRef.current.telemetry.enabled) this._maybeReportRun(remoteId, "aui/v0", encoded, extractRunMessageInfo(message, "aui/v0"));
|
|
89
131
|
}
|
|
90
132
|
async delete() {
|
|
91
133
|
throw new Error("Assistant Cloud does not support deleting thread messages yet.");
|
|
@@ -95,42 +137,68 @@ var AssistantCloudThreadHistoryAdapter = class {
|
|
|
95
137
|
if (!remoteId) return { messages: [] };
|
|
96
138
|
return { messages: (await this._persistence.load(remoteId, "aui/v0")).filter((m) => m.format === "aui/v0").map(auiV0Decode).reverse() };
|
|
97
139
|
}
|
|
98
|
-
_reportRunTelemetry(format, runMessages, options, threadListItem) {
|
|
140
|
+
_reportRunTelemetry(format, runMessages, options, threadListItem, messageInfo) {
|
|
99
141
|
if (!this.cloudRef.current.telemetry.enabled) return;
|
|
100
|
-
const
|
|
142
|
+
const item = threadListItem ?? this.aui.threadListItem;
|
|
143
|
+
const remoteId = item.getState().remoteId;
|
|
101
144
|
if (!remoteId) return;
|
|
102
145
|
const extracted = extractRunTelemetry(format, runMessages);
|
|
103
146
|
if (!extracted) return;
|
|
104
|
-
this._sendReport(remoteId, extracted, options?.durationMs, options?.stepTimestamps);
|
|
147
|
+
this._sendReport(remoteId, extracted, options?.durationMs, options?.stepTimestamps, messageInfo, this.getPersistence(item));
|
|
105
148
|
}
|
|
106
|
-
_maybeReportRun(remoteId, format, content) {
|
|
149
|
+
_maybeReportRun(remoteId, format, content, messageInfo) {
|
|
107
150
|
const extracted = extractTelemetry(format, content);
|
|
108
151
|
if (!extracted) return;
|
|
109
|
-
this._sendReport(remoteId, extracted);
|
|
152
|
+
this._sendReport(remoteId, extracted, void 0, void 0, messageInfo);
|
|
110
153
|
}
|
|
111
|
-
_sendReport(remoteId, data, durationMs, stepTimestamps) {
|
|
154
|
+
_sendReport(remoteId, data, durationMs, stepTimestamps, messageInfo, persistence = this._persistence) {
|
|
112
155
|
const mergedSteps = mergeStepTimestamps(data.steps, stepTimestamps);
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
156
|
+
const messageId = messageInfo?.localMessageId ? persistence.getResolvedRemoteId(messageInfo.localMessageId) : void 0;
|
|
157
|
+
const initial = createRunReport({
|
|
158
|
+
threadId: remoteId,
|
|
159
|
+
status: messageInfo?.status ?? data.status,
|
|
160
|
+
outcome: messageInfo?.outcomeType,
|
|
161
|
+
error: messageInfo?.error,
|
|
162
|
+
errorCode: messageInfo?.errorCode,
|
|
163
|
+
messageId,
|
|
164
|
+
traceId: messageInfo?.traceId,
|
|
165
|
+
modelId: data.modelId,
|
|
166
|
+
provider: messageInfo?.provider,
|
|
167
|
+
usage: {
|
|
168
|
+
inputTokens: data.inputTokens,
|
|
169
|
+
outputTokens: data.outputTokens,
|
|
170
|
+
reasoningTokens: data.reasoningTokens,
|
|
171
|
+
cachedInputTokens: data.cachedInputTokens
|
|
172
|
+
},
|
|
173
|
+
steps: toRunReportSteps(mergedSteps),
|
|
174
|
+
totalSteps: data.totalSteps,
|
|
175
|
+
toolCalls: data.toolCalls,
|
|
176
|
+
durationMs,
|
|
177
|
+
firstTokenMs: messageInfo?.firstTokenMs,
|
|
178
|
+
outputText: data.outputText,
|
|
179
|
+
metadata: data.metadata,
|
|
180
|
+
telemetry: this.cloudRef.current.telemetry
|
|
181
|
+
});
|
|
128
182
|
const { beforeReport } = this.cloudRef.current.telemetry;
|
|
129
183
|
const report = beforeReport ? beforeReport(initial) : initial;
|
|
130
184
|
if (!report) return;
|
|
131
185
|
this.cloudRef.current.runs.report(report).catch(() => {});
|
|
132
186
|
}
|
|
133
187
|
};
|
|
188
|
+
function toRunReportSteps(steps) {
|
|
189
|
+
if (!steps) return void 0;
|
|
190
|
+
return steps.map((step) => ({
|
|
191
|
+
usage: {
|
|
192
|
+
inputTokens: step.input_tokens,
|
|
193
|
+
outputTokens: step.output_tokens,
|
|
194
|
+
reasoningTokens: step.reasoning_tokens,
|
|
195
|
+
cachedInputTokens: step.cached_input_tokens
|
|
196
|
+
},
|
|
197
|
+
toolCalls: step.tool_calls,
|
|
198
|
+
startMs: step.start_ms,
|
|
199
|
+
endMs: step.end_ms
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
134
202
|
function mergeStepTimestamps(steps, timestamps) {
|
|
135
203
|
if (!timestamps) return steps;
|
|
136
204
|
if (!steps) return timestamps.map((t) => ({ ...t }));
|
|
@@ -140,6 +208,46 @@ function mergeStepTimestamps(steps, timestamps) {
|
|
|
140
208
|
...i < len ? timestamps[i] : void 0
|
|
141
209
|
}));
|
|
142
210
|
}
|
|
211
|
+
function extractLastRunMessageInfo(items, formatAdapter) {
|
|
212
|
+
for (let i = items.length - 1; i >= 0; i--) {
|
|
213
|
+
const item = items[i];
|
|
214
|
+
const info = extractRunMessageInfo(item.message, formatAdapter.format, formatAdapter.getId(item.message));
|
|
215
|
+
if (info) return info;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function extractRunMessageInfo(message, format, localMessageId) {
|
|
219
|
+
if (!isRecord(message) || message.role !== "assistant") return void 0;
|
|
220
|
+
const status = isRecord(message.status) ? message.status : void 0;
|
|
221
|
+
const metadata = isRecord(message.metadata) ? message.metadata : void 0;
|
|
222
|
+
const custom = isRecord(metadata?.custom) ? metadata.custom : void 0;
|
|
223
|
+
const timing = isRecord(metadata?.timing) ? metadata.timing : void 0;
|
|
224
|
+
const streamStartTime = timing?.streamStartTime;
|
|
225
|
+
const firstTokenTime = timing?.firstTokenTime;
|
|
226
|
+
const firstTokenMs = typeof streamStartTime === "number" && Number.isFinite(streamStartTime) && typeof firstTokenTime === "number" && Number.isFinite(firstTokenTime) ? Math.round(firstTokenTime - streamStartTime) : void 0;
|
|
227
|
+
const finishReason = status?.type === "incomplete" ? status.reason : typeof metadata?.finishReason === "string" ? metadata.finishReason : void 0;
|
|
228
|
+
const failed = status?.type === "incomplete" && status.reason === "error";
|
|
229
|
+
const outcome = deriveRunOutcome({
|
|
230
|
+
finishReason: typeof finishReason === "string" ? finishReason : void 0,
|
|
231
|
+
isError: failed
|
|
232
|
+
});
|
|
233
|
+
const outcomeType = outcome.outcome;
|
|
234
|
+
const failure = failed ? describeRunError(status.error) : {};
|
|
235
|
+
const messageId = localMessageId ?? (typeof message.id === "string" ? message.id : void 0);
|
|
236
|
+
const traceId = format === "aui/v0" ? custom?.traceId : format === "ai-sdk/v6" ? metadata?.traceId : void 0;
|
|
237
|
+
const provider = typeof custom?.provider === "string" ? custom.provider : typeof metadata?.provider === "string" ? metadata.provider : void 0;
|
|
238
|
+
return {
|
|
239
|
+
...messageId ? { localMessageId: messageId } : void 0,
|
|
240
|
+
...outcome.status === "error" ? { status: "error" } : void 0,
|
|
241
|
+
...outcomeType ? { outcomeType } : void 0,
|
|
242
|
+
...failure,
|
|
243
|
+
...firstTokenMs != null && firstTokenMs >= 0 ? { firstTokenMs } : void 0,
|
|
244
|
+
...typeof traceId === "string" ? { traceId } : void 0,
|
|
245
|
+
...provider !== void 0 ? { provider } : void 0
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function isRecord(value) {
|
|
249
|
+
return value !== null && typeof value === "object";
|
|
250
|
+
}
|
|
143
251
|
function extractTelemetry(format, content) {
|
|
144
252
|
switch (format) {
|
|
145
253
|
case "aui/v0": return extractAuiV0(content);
|
|
@@ -187,20 +295,23 @@ function extractAuiV0(content) {
|
|
|
187
295
|
let hasReasoning = false;
|
|
188
296
|
let hasCachedInput = false;
|
|
189
297
|
for (const step of steps) {
|
|
190
|
-
if (step.usage
|
|
191
|
-
|
|
298
|
+
if (!step.usage) continue;
|
|
299
|
+
const usage = normalizeRunTelemetryUsage(step.usage);
|
|
300
|
+
if (!usage) continue;
|
|
301
|
+
if (usage.inputTokens != null) {
|
|
302
|
+
totalInput += usage.inputTokens;
|
|
192
303
|
hasInput = true;
|
|
193
304
|
}
|
|
194
|
-
if (
|
|
195
|
-
totalOutput +=
|
|
305
|
+
if (usage.outputTokens != null) {
|
|
306
|
+
totalOutput += usage.outputTokens;
|
|
196
307
|
hasOutput = true;
|
|
197
308
|
}
|
|
198
|
-
if (
|
|
199
|
-
totalReasoning +=
|
|
309
|
+
if (usage.reasoningTokens != null) {
|
|
310
|
+
totalReasoning += usage.reasoningTokens;
|
|
200
311
|
hasReasoning = true;
|
|
201
312
|
}
|
|
202
|
-
if (
|
|
203
|
-
totalCachedInput +=
|
|
313
|
+
if (usage.cachedInputTokens != null) {
|
|
314
|
+
totalCachedInput += usage.cachedInputTokens;
|
|
204
315
|
hasCachedInput = true;
|
|
205
316
|
}
|
|
206
317
|
}
|
|
@@ -210,15 +321,18 @@ function extractAuiV0(content) {
|
|
|
210
321
|
cachedInputTokens = hasCachedInput ? totalCachedInput : void 0;
|
|
211
322
|
}
|
|
212
323
|
const statusType = msg.status?.type;
|
|
213
|
-
const status = statusType && AUI_STATUS_MAP[statusType] || "completed";
|
|
324
|
+
const status = statusType === "incomplete" && msg.status?.reason === "error" ? "error" : statusType && AUI_STATUS_MAP[statusType] || "completed";
|
|
214
325
|
const metadata = msg.metadata?.custom;
|
|
215
|
-
const modelId =
|
|
216
|
-
const telemetrySteps = steps && steps.length > 1 ? steps.map((s) =>
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
326
|
+
const modelId = extractRunTelemetryModelId(msg.metadata);
|
|
327
|
+
const telemetrySteps = steps && steps.length > 1 ? steps.map((s) => {
|
|
328
|
+
const usage = s.usage ? normalizeRunTelemetryUsage(s.usage) : void 0;
|
|
329
|
+
return {
|
|
330
|
+
...usage?.inputTokens != null ? { input_tokens: usage.inputTokens } : void 0,
|
|
331
|
+
...usage?.outputTokens != null ? { output_tokens: usage.outputTokens } : void 0,
|
|
332
|
+
...usage?.reasoningTokens != null ? { reasoning_tokens: usage.reasoningTokens } : void 0,
|
|
333
|
+
...usage?.cachedInputTokens != null ? { cached_input_tokens: usage.cachedInputTokens } : void 0
|
|
334
|
+
};
|
|
335
|
+
}) : void 0;
|
|
222
336
|
return {
|
|
223
337
|
status,
|
|
224
338
|
...toolCalls && toolCalls.length > 0 ? { toolCalls } : void 0,
|
|
@@ -272,16 +386,10 @@ function collectAiSdkV6Parts(parts) {
|
|
|
272
386
|
stepsData
|
|
273
387
|
};
|
|
274
388
|
}
|
|
275
|
-
function extractModelId(metadata) {
|
|
276
|
-
if (!metadata) return void 0;
|
|
277
|
-
if (typeof metadata.modelId === "string") return metadata.modelId;
|
|
278
|
-
const custom = metadata.custom;
|
|
279
|
-
if (typeof custom?.modelId === "string") return custom.modelId;
|
|
280
|
-
}
|
|
281
389
|
function buildAiSdkV6Result(textParts, toolCalls, totalSteps, metadata, stepsData, usage) {
|
|
282
390
|
const hasText = textParts.length > 0;
|
|
283
391
|
const outputText = hasText ? truncateRunTelemetryText(textParts.join("")) : void 0;
|
|
284
|
-
const modelId =
|
|
392
|
+
const modelId = extractRunTelemetryModelId(metadata);
|
|
285
393
|
const steps = stepsData && stepsData.length > 1 ? stepsData.map((s) => ({ ...s.tool_calls.length > 0 ? { tool_calls: s.tool_calls } : void 0 })) : void 0;
|
|
286
394
|
return {
|
|
287
395
|
status: hasText ? "completed" : "incomplete",
|
|
@@ -409,8 +517,272 @@ function useAssistantCloudThreadHistoryAdapter(cloudRef) {
|
|
|
409
517
|
auiRef.current = aui;
|
|
410
518
|
});
|
|
411
519
|
const [adapter] = useState(() => new AssistantCloudThreadHistoryAdapter(cloudRef, () => auiRef.current));
|
|
520
|
+
useAssistantCloudEngagementEvents(cloudRef, adapter, aui);
|
|
412
521
|
return adapter;
|
|
413
522
|
}
|
|
523
|
+
const rootEngagementTrackers = /* @__PURE__ */ new WeakMap();
|
|
524
|
+
/**
|
|
525
|
+
* Thread switches are a thread list event, so one subscription per assistant
|
|
526
|
+
* client reports them; every thread runtime mounted under it shares the
|
|
527
|
+
* subscription and the last one to unmount removes it.
|
|
528
|
+
*/
|
|
529
|
+
const useRootEngagementEvents = (cloudRef, adapter, aui) => {
|
|
530
|
+
const $ = c(5);
|
|
531
|
+
let t0;
|
|
532
|
+
let t1;
|
|
533
|
+
if ($[0] !== adapter || $[1] !== aui || $[2] !== cloudRef) {
|
|
534
|
+
t0 = () => {
|
|
535
|
+
let tracker = rootEngagementTrackers.get(aui);
|
|
536
|
+
if (!tracker) {
|
|
537
|
+
const created = {
|
|
538
|
+
count: 0,
|
|
539
|
+
adapter,
|
|
540
|
+
cloudRef,
|
|
541
|
+
dispose: _temp
|
|
542
|
+
};
|
|
543
|
+
created.dispose = aui.on({
|
|
544
|
+
scope: "*",
|
|
545
|
+
event: "threads.selectionChanged"
|
|
546
|
+
}, (payload) => {
|
|
547
|
+
created.adapter.resolveEngagementEventIds(payload.threadId).then((ids) => {
|
|
548
|
+
if (!ids.thread_id) return;
|
|
549
|
+
created.cloudRef.current.events?.track({
|
|
550
|
+
kind: "thread_switched",
|
|
551
|
+
...ids
|
|
552
|
+
});
|
|
553
|
+
}).catch(_temp2);
|
|
554
|
+
});
|
|
555
|
+
rootEngagementTrackers.set(aui, created);
|
|
556
|
+
tracker = created;
|
|
557
|
+
}
|
|
558
|
+
const active = tracker;
|
|
559
|
+
active.adapter = adapter;
|
|
560
|
+
active.cloudRef = cloudRef;
|
|
561
|
+
active.count = active.count + 1;
|
|
562
|
+
return () => {
|
|
563
|
+
active.count = active.count - 1;
|
|
564
|
+
if (active.count === 0) {
|
|
565
|
+
active.dispose();
|
|
566
|
+
rootEngagementTrackers.delete(aui);
|
|
567
|
+
}
|
|
568
|
+
};
|
|
569
|
+
};
|
|
570
|
+
t1 = [
|
|
571
|
+
adapter,
|
|
572
|
+
aui,
|
|
573
|
+
cloudRef
|
|
574
|
+
];
|
|
575
|
+
$[0] = adapter;
|
|
576
|
+
$[1] = aui;
|
|
577
|
+
$[2] = cloudRef;
|
|
578
|
+
$[3] = t0;
|
|
579
|
+
$[4] = t1;
|
|
580
|
+
} else {
|
|
581
|
+
t0 = $[3];
|
|
582
|
+
t1 = $[4];
|
|
583
|
+
}
|
|
584
|
+
useEffect(t0, t1);
|
|
585
|
+
};
|
|
586
|
+
const useAssistantCloudEngagementEvents = (cloudRef, adapter, aui) => {
|
|
587
|
+
const $ = c(13);
|
|
588
|
+
useRootEngagementEvents(cloudRef, adapter, aui);
|
|
589
|
+
let t0;
|
|
590
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
591
|
+
t0 = /* @__PURE__ */ new Map();
|
|
592
|
+
$[0] = t0;
|
|
593
|
+
} else t0 = $[0];
|
|
594
|
+
const runStartedAt = useRef(t0);
|
|
595
|
+
let t1;
|
|
596
|
+
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
|
|
597
|
+
t1 = /* @__PURE__ */ new Map();
|
|
598
|
+
$[1] = t1;
|
|
599
|
+
} else t1 = $[1];
|
|
600
|
+
const runEndedAt = useRef(t1);
|
|
601
|
+
let t2;
|
|
602
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
603
|
+
t2 = /* @__PURE__ */ new Set();
|
|
604
|
+
$[2] = t2;
|
|
605
|
+
} else t2 = $[2];
|
|
606
|
+
const shownSuggestions = useRef(t2);
|
|
607
|
+
let t3;
|
|
608
|
+
let t4;
|
|
609
|
+
if ($[3] !== adapter || $[4] !== aui || $[5] !== cloudRef) {
|
|
610
|
+
t3 = () => {
|
|
611
|
+
const track = (event, threadId, messageId, options) => {
|
|
612
|
+
adapter.resolveEngagementEventIds(threadId, messageId, options).then((ids) => {
|
|
613
|
+
cloudRef.current.events?.track({
|
|
614
|
+
...event,
|
|
615
|
+
...ids
|
|
616
|
+
});
|
|
617
|
+
}).catch(_temp3);
|
|
618
|
+
};
|
|
619
|
+
const trackRunStopped = (threadId_0) => {
|
|
620
|
+
const startedAt = runStartedAt.current.get(threadId_0);
|
|
621
|
+
if (startedAt === void 0) return;
|
|
622
|
+
runStartedAt.current.delete(threadId_0);
|
|
623
|
+
track({
|
|
624
|
+
kind: "run_stopped",
|
|
625
|
+
value: Math.max(0, Date.now() - startedAt)
|
|
626
|
+
}, threadId_0);
|
|
627
|
+
};
|
|
628
|
+
const unsubscribers = [
|
|
629
|
+
aui.on({
|
|
630
|
+
scope: "thread",
|
|
631
|
+
event: "composer.send"
|
|
632
|
+
}, (payload) => {
|
|
633
|
+
const previousRunEndedAt = runEndedAt.current.get(payload.threadId);
|
|
634
|
+
track({
|
|
635
|
+
kind: payload.messageId ? "message_edited" : "message_sent",
|
|
636
|
+
...payload.messageId ? { props: { chars: payload.chars } } : { props: {
|
|
637
|
+
chars: payload.chars,
|
|
638
|
+
attachments: payload.attachments
|
|
639
|
+
} },
|
|
640
|
+
...!payload.messageId && previousRunEndedAt !== void 0 ? { value: Math.max(0, Date.now() - previousRunEndedAt) } : void 0
|
|
641
|
+
}, payload.threadId, payload.messageId, { awaitThread: !payload.messageId });
|
|
642
|
+
if (payload.suggestion) track({ kind: "suggestion_clicked" }, payload.threadId);
|
|
643
|
+
}),
|
|
644
|
+
aui.on({
|
|
645
|
+
scope: "thread",
|
|
646
|
+
event: "composer.attachmentAdd"
|
|
647
|
+
}, (payload_0) => {
|
|
648
|
+
track({
|
|
649
|
+
kind: "attachment_added",
|
|
650
|
+
...payload_0.contentType ? { props: { type: payload_0.contentType } } : void 0
|
|
651
|
+
}, payload_0.threadId, payload_0.messageId);
|
|
652
|
+
}),
|
|
653
|
+
aui.on({
|
|
654
|
+
scope: "thread",
|
|
655
|
+
event: "composer.attachmentAddError"
|
|
656
|
+
}, (payload_1) => {
|
|
657
|
+
track({
|
|
658
|
+
kind: "attachment_failed",
|
|
659
|
+
...payload_1.contentType ? { props: { type: payload_1.contentType } } : void 0
|
|
660
|
+
}, payload_1.threadId, payload_1.messageId);
|
|
661
|
+
}),
|
|
662
|
+
aui.on({
|
|
663
|
+
scope: "thread",
|
|
664
|
+
event: "composer.cancel"
|
|
665
|
+
}, (payload_2) => {
|
|
666
|
+
trackRunStopped(payload_2.threadId);
|
|
667
|
+
}),
|
|
668
|
+
aui.on({
|
|
669
|
+
scope: "thread",
|
|
670
|
+
event: "thread.runStart"
|
|
671
|
+
}, (payload_3) => {
|
|
672
|
+
runStartedAt.current.set(payload_3.threadId, Date.now());
|
|
673
|
+
}),
|
|
674
|
+
aui.on({
|
|
675
|
+
scope: "thread",
|
|
676
|
+
event: "thread.runEnd"
|
|
677
|
+
}, (payload_4) => {
|
|
678
|
+
runStartedAt.current.delete(payload_4.threadId);
|
|
679
|
+
runEndedAt.current.set(payload_4.threadId, Date.now());
|
|
680
|
+
}),
|
|
681
|
+
aui.on({
|
|
682
|
+
scope: "thread",
|
|
683
|
+
event: "thread.cancelRun"
|
|
684
|
+
}, (payload_5) => {
|
|
685
|
+
trackRunStopped(payload_5.threadId);
|
|
686
|
+
}),
|
|
687
|
+
aui.on({
|
|
688
|
+
scope: "thread",
|
|
689
|
+
event: "thread.voiceStarted"
|
|
690
|
+
}, (payload_6) => {
|
|
691
|
+
track({ kind: "voice_started" }, payload_6.threadId);
|
|
692
|
+
}),
|
|
693
|
+
aui.on({
|
|
694
|
+
scope: "thread",
|
|
695
|
+
event: "message.reload"
|
|
696
|
+
}, (payload_7) => {
|
|
697
|
+
track({ kind: "message_regenerated" }, payload_7.threadId, payload_7.messageId);
|
|
698
|
+
}),
|
|
699
|
+
aui.on({
|
|
700
|
+
scope: "thread",
|
|
701
|
+
event: "message.branchSwitched"
|
|
702
|
+
}, (payload_8) => {
|
|
703
|
+
track({ kind: "branch_switched" }, payload_8.threadId, payload_8.messageId);
|
|
704
|
+
}),
|
|
705
|
+
aui.on({
|
|
706
|
+
scope: "thread",
|
|
707
|
+
event: "message.copied"
|
|
708
|
+
}, (payload_9) => {
|
|
709
|
+
track({ kind: "message_copied" }, payload_9.threadId, payload_9.messageId);
|
|
710
|
+
}),
|
|
711
|
+
aui.on({
|
|
712
|
+
scope: "thread",
|
|
713
|
+
event: "message.speak"
|
|
714
|
+
}, (payload_10) => {
|
|
715
|
+
track({ kind: "speech_started" }, payload_10.threadId, payload_10.messageId);
|
|
716
|
+
}),
|
|
717
|
+
aui.on({
|
|
718
|
+
scope: "thread",
|
|
719
|
+
event: "message.error"
|
|
720
|
+
}, (payload_11) => {
|
|
721
|
+
track({
|
|
722
|
+
kind: "error_shown",
|
|
723
|
+
props: { reason: payload_11.reason }
|
|
724
|
+
}, payload_11.threadId, payload_11.messageId);
|
|
725
|
+
})
|
|
726
|
+
];
|
|
727
|
+
return () => {
|
|
728
|
+
for (const unsubscribe of unsubscribers) unsubscribe();
|
|
729
|
+
};
|
|
730
|
+
};
|
|
731
|
+
t4 = [
|
|
732
|
+
adapter,
|
|
733
|
+
aui,
|
|
734
|
+
cloudRef
|
|
735
|
+
];
|
|
736
|
+
$[3] = adapter;
|
|
737
|
+
$[4] = aui;
|
|
738
|
+
$[5] = cloudRef;
|
|
739
|
+
$[6] = t3;
|
|
740
|
+
$[7] = t4;
|
|
741
|
+
} else {
|
|
742
|
+
t3 = $[6];
|
|
743
|
+
t4 = $[7];
|
|
744
|
+
}
|
|
745
|
+
useEffect(t3, t4);
|
|
746
|
+
let t5;
|
|
747
|
+
let t6;
|
|
748
|
+
if ($[8] !== adapter || $[9] !== aui || $[10] !== cloudRef) {
|
|
749
|
+
t5 = () => {
|
|
750
|
+
const reportSuggestions = () => {
|
|
751
|
+
const { mainThreadId } = aui.threads.getState();
|
|
752
|
+
if (aui.threadListItem.getState().id !== mainThreadId) return;
|
|
753
|
+
const { isEmpty, suggestions } = aui.thread.getState();
|
|
754
|
+
if (!isEmpty || suggestions.length === 0 || shownSuggestions.current.has(mainThreadId)) return;
|
|
755
|
+
shownSuggestions.current.add(mainThreadId);
|
|
756
|
+
adapter.resolveEngagementEventIds(mainThreadId).then((ids_0) => {
|
|
757
|
+
cloudRef.current.events?.track({
|
|
758
|
+
kind: "suggestions_shown",
|
|
759
|
+
value: suggestions.length,
|
|
760
|
+
...ids_0
|
|
761
|
+
});
|
|
762
|
+
});
|
|
763
|
+
};
|
|
764
|
+
reportSuggestions();
|
|
765
|
+
return aui.subscribe(reportSuggestions);
|
|
766
|
+
};
|
|
767
|
+
t6 = [
|
|
768
|
+
adapter,
|
|
769
|
+
aui,
|
|
770
|
+
cloudRef
|
|
771
|
+
];
|
|
772
|
+
$[8] = adapter;
|
|
773
|
+
$[9] = aui;
|
|
774
|
+
$[10] = cloudRef;
|
|
775
|
+
$[11] = t5;
|
|
776
|
+
$[12] = t6;
|
|
777
|
+
} else {
|
|
778
|
+
t5 = $[11];
|
|
779
|
+
t6 = $[12];
|
|
780
|
+
}
|
|
781
|
+
useEffect(t5, t6);
|
|
782
|
+
};
|
|
783
|
+
function _temp() {}
|
|
784
|
+
function _temp2() {}
|
|
785
|
+
function _temp3() {}
|
|
414
786
|
//#endregion
|
|
415
787
|
export { extractAuiV0, useAssistantCloudThreadHistoryAdapter };
|
|
416
788
|
|