@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","AttachmentAddOperations","drainAttachmentAdd","toMessagePartStatus","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","useLiveState","initial","setState","ref","Symbol","for","next","current","prev","T","set","const","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","cancel","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","accept","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","operation","start","add","attachment_1","finish","error","isCancelled","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","cancelAll","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","removed_2","catch","_temp7","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp8","stopDictation","_temp9","queueItem","createSpeechController","notify","session","clear","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","Set","deduped","i","has","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp0","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp1","resumeRun","cancelRun","importExternalState","getModelContext","_temp10","export","_temp11","import","_temp12","_temp13","connectVoice","_temp14","disconnectVoice","_temp15","getVoiceVolume","_temp16","subscribeVoiceVolume","_temp18","muteVoice","_temp19","unmuteVoice","_temp20","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","error_1","s","arr","config","_temp17"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport { isCreateAttachment } from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport {\n AttachmentAddOperations,\n drainAttachmentAdd,\n} from \"../../runtime/utils/attachment-add-operations\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAttachmentAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n // An edit session ends here, so its in-flight adapter adds must not\n // land in a later session; the thread composer's cancel stops the run\n // and leaves the draft (and its pending adds) alone.\n if (type === \"edit\") {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n removePendingAttachments(removed).catch((error) => {\n console.error(\"Failed to remove cancelled edit attachments\", error);\n });\n }\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0 && !isLoading,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isAttachmentComplete","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","AttachmentAddOperations","drainAttachmentAdd","toMessagePartStatus","generateId","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","resolve","error","reject","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","useLiveState","initial","setState","ref","Symbol","for","next","current","prev","T","set","const","removeAttachmentThroughAdapter","setAttachments","String","candidate","reason","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","cancel","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","accept","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","operation","start","add","attachment_1","finish","isCancelled","newAttachment","prev_1","newAttachment_0","prev_2","cancelAll","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","removed_2","catch","_temp7","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp8","stopDictation","_temp9","queueItem","createSpeechController","notify","session","clear","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","Set","deduped","i","has","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp0","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp1","resumeRun","cancelRun","importExternalState","getModelContext","_temp10","export","_temp11","import","_temp12","_temp13","connectVoice","_temp14","disconnectVoice","_temp15","getVoiceVolume","_temp16","subscribeVoiceVolume","_temp18","muteVoice","_temp19","unmuteVoice","_temp20","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","error_1","s","arr","config","_temp17"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport {\n isAttachmentComplete,\n isCreateAttachment,\n} from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport {\n AttachmentAddOperations,\n drainAttachmentAdd,\n} from \"../../runtime/utils/attachment-add-operations\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { generateId } from \"../../utils/id\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (\n options: RespondToToolApprovalOptions,\n ) => void | Promise<void>;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void | Promise<void>)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void | Promise<void>)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n const options = resolveToolApprovalResponse(part.approval, response);\n try {\n return Promise.resolve(onRespondToToolApproval(options));\n } catch (error) {\n return Promise.reject(error);\n }\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// A try/catch inside the resource makes the React Compiler bail out of the\n// whole hook, so the adapter call and its failure status live at module scope.\nconst removeAttachmentThroughAdapter = async (\n attachment: Attachment,\n attachmentAdapter: AttachmentAdapter | undefined,\n setAttachments: (\n next:\n | readonly Attachment[]\n | ((prev: readonly Attachment[]) => readonly Attachment[]),\n ) => void,\n) => {\n try {\n await attachmentAdapter?.remove(attachment);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n setAttachments((prev) =>\n prev.map((candidate) =>\n candidate.id === attachment.id && !isAttachmentComplete(candidate)\n ? {\n ...candidate,\n status: { type: \"incomplete\", reason: \"error\", message },\n }\n : candidate,\n ),\n );\n throw error;\n }\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n if (!isAttachmentComplete(attachment)) {\n await removeAttachmentThroughAdapter(\n attachment,\n attachmentAdapter,\n setAttachments,\n );\n }\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAttachmentAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: generateId(),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? generateId(),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n // An edit session ends here, so its in-flight adapter adds must not\n // land in a later session; the thread composer's cancel stops the run\n // and leaves the draft (and its pending adds) alone.\n if (type === \"edit\") {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n removePendingAttachments(removed).catch((error) => {\n console.error(\"Failed to remove cancelled edit attachments\", error);\n });\n }\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n // `messages` changes identity on every streamed token, and this body fans out\n // to one client per message, so pruning during render would re-run the whole\n // fan-out per token. The effect bails out on an unchanged map instead.\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0 && !isLoading,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId:\n message.parentId === undefined\n ? (messages.at(-1)?.id ?? null)\n : message.parentId,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AA6DA,MAAMmD,oBAA+C,CAAA;AACrD,MAAMC,mBAAsC,CAAA;AAC5C,MAAMC,oBAAiD,CAAA;AAMvD,MAAMG,kBAAqCC,OAAOC,OAAO,EACvDC,MAAM,WACR,CAAC;AAED,MAAMC,oBACJC,SACAC,WACAC,SAC8B;CAC9B,IAAI,CAACF,QAAQG,QAAQ,OAAOR;CAC5B,OAAOZ,oBAAoBiB,SAASC,WAAWC,IAAI;AACrD;AAuEA,MAAMoC,oBAAmBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAzC,SAAA+B,OAAAjB,UAAAF,QAAAC,UAAAc,OAAAC,UAAAC,yBAAAT,iBAAAE,kBAAAE,mBAAAQ,mBAAAC,kBAAAE,QAAAC,SAAAC,mBAAAE;CAkBxB,MAAA,CAAAG,UAAAC,eAAgCxG,SAAS,KAAK;CAC9C,MAAA,CAAAyG,YAAAC,iBAAoC1G,SAAS,KAAK;CAAE,IAAA2G;CAAA,IAAAN,EAAA,OAAAxC,WAAAwC,EAAA,OAAApB,mBAAAoB,EAAA,OAAAX,2BAAAW,EAAA,OAAAlB,kBAAA;EAGlDwB,KAAA9C,QAAO+C,QAAQC,KAAK9C,MAAA+C,QAClBxG,QACEwG,KACAC,aAAa;GAAAhD;GAAAC,QAEHJ,iBAAiBC,SAASiD,KAAK/C,IAAI;GAACiD,WACjCnD,QAAON;GAAGmC;GAAAT;GAAAE;EAIvB,CAAC,CACH,CACF;EAACkB,EAAA,KAAAxC;EAAAwC,EAAA,KAAApB;EAAAoB,EAAA,KAAAX;EAAAW,EAAA,KAAAlB;EAAAkB,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAbH,MAAAY,cAAoBxG,gBAClBkG,EAaF;CAAE,IAAAO;CAAA,IAAAb,EAAA,OAAAxC,QAAAsD,aAAA;EAGCD,KAAArD,QAAOsD,eAAP,CAAA;EAAyBd,EAAA,KAAAxC,QAAAsD;EAAAd,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAe;CAAA,IAAAf,EAAA,OAAAa,IAAA;EAA1BE,KAACF,GAAyBL,IAAMQ,MAQhC;EAAChB,EAAA,KAAAa;EAAAb,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CATH,MAAAiB,oBAA0B7G,gBACxB2G,EASF;CAAE,IAAAG;CAAA,IAAAlB,EAAA,OAAA5B,QAAA;EAEsB8C,WAAA;GACtB,IAAI,CAAC9C,QAAQ,MAAM,IAAI+C,MAAM,mCAAmC;EAAE;EACnEnB,EAAA,KAAA5B;EAAA4B,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAFD,MAAAoB,kBAAwBF;CAEtB,IAAAG;CAAA,IAAArB,EAAA,QAAAxC,QAAAN,MAAA8C,EAAA,QAAA5B,UAAA4B,EAAA,QAAA1B,UAAA;EAEqB+C,MAAAC,QAAA;GACrB,IAAI,CAAClD,QAAQ,MAAM,IAAI+C,MAAM,mCAAmC;GAChE/C,OAAO;IAAA,GACFkD;IAAGhD;IAAAiD,UAEI/D,QAAON;GACnB,CAAC;EAAC;EACH8C,EAAA,MAAAxC,QAAAN;EAAA8C,EAAA,MAAA5B;EAAA4B,EAAA,MAAA1B;EAAA0B,EAAA,MAAAqB;CAAA,OAAAA,KAAArB,EAAA;CAPD,MAAAwB,iBAAuBH;CAOrB,IAAAI;CAAA,IAAAzB,EAAA,QAAAhB,qBAAAgB,EAAA,QAAAoB,mBAAApB,EAAA,QAAAwB,kBAAAxB,EAAA,QAAAxC,WAAAwC,EAAA,QAAAb,OAAA;EAGAsC,KAAAC,uBAAuB;GAAApE,MACf;GAAMqE,WACD;GAAIC,aACFR;GAAeS,QACpBL;GAAchE;GAAA2B;GAAAH;EAIxB,CAAC;EAACgB,EAAA,MAAAhB;EAAAgB,EAAA,MAAAoB;EAAApB,EAAA,MAAAwB;EAAAxB,EAAA,MAAAxC;EAAAwC,EAAA,MAAAb;EAAAa,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CATJ,MAAA8B,iBAAuBxH,kBACrBmH,EASF;CAAE,IAAAM;CAAA,IAAAC;CAAA,IAAAhC,EAAA,QAAAZ,YAAAY,EAAA,QAAAxC,QAAAN,IAAA;EAEF6E,YAAkB3C,UAAQ6C,YAAczE,QAAON,EAAuB,KAApDH;EACEiF,KAAAD,UAASG,QAAS1E,QAAON,EAAG;EAAC8C,EAAA,MAAAZ;EAAAY,EAAA,MAAAxC,QAAAN;EAAA8C,EAAA,MAAA+B;EAAA/B,EAAA,MAAAgC;CAAA,OAAA;EAAAD,YAAA/B,EAAA;EAAAgC,KAAAhC,EAAA;CAAA;CAAjD,MAAAmC,cAAoBH;CACpB,MAAAI,eAAqBD,gBAAgB,KAAhB,IAAyBA,cAAc;CAC5D,MAAAE,cAAoBF,gBAAgB,KAAhB,IAAyBJ,UAASO;CAAQ,IAAAC;CAAA,IAAAvC,EAAA,QAAAxC,WAAAwC,EAAA,QAAAR,mBAAA;EAI1D+C,KAAA/C,qBAAqBhC,QAAOgF,SAAU,cAAtC;GAAA,GAEShF;GAAOiF,UACA;IAAA,GACLjF,QAAOiF;IAASjD,mBACA,EAAAlC,MAAQkC,kBAAkB;GAC/C;EAEI,IARVhC;EAQWwC,EAAA,MAAAxC;EAAAwC,EAAA,MAAAR;EAAAQ,EAAA,MAAAuC;CAAA,OAAAA,KAAAvC,EAAA;CATb,MAAA0C,sBACEH;CAQY,IAAAI;CAAA,IAAA3C,EAAA,QAAAxC,QAAAsD,aAAA;EAGC6B,KAAAnF,QAAOsD,eAAP,CAAA;EAAyBd,EAAA,MAAAxC,QAAAsD;EAAAd,EAAA,MAAA2C;CAAA,OAAAA,KAAA3C,EAAA;CAAA,IAAA4C;CAAA,IAAA5C,EAAA,QAAAqC,eAAArC,EAAA,QAAAoC,gBAAApC,EAAA,QAAA8B,eAAA9D,SAAAgC,EAAA,QAAAT,SAAAS,EAAA,QAAAE,YAAAF,EAAA,QAAAI,cAAAJ,EAAA,QAAA0C,uBAAA1C,EAAA,QAAA1B,YAAA0B,EAAA,QAAAY,YAAA5C,SAAAgC,EAAA,QAAAL,UAAAK,EAAA,QAAA2C,IAAA;EAFjCC,MAAA;GAAA,GACFF;GAAmB5B,aACT6B;GAAyBrE;GAAAuE,QAE9B;GAAKT;GAAAC;GAAA1C;GAAAmD,OAINlC,YAAW5C;GAAMkC;GAAAE;GAAAb;GAAAwD,UAIdjB,eAAc9D;EAC1B;EAACgC,EAAA,MAAAqC;EAAArC,EAAA,MAAAoC;EAAApC,EAAA,MAAA8B,eAAA9D;EAAAgC,EAAA,MAAAT;EAAAS,EAAA,MAAAE;EAAAF,EAAA,MAAAI;EAAAJ,EAAA,MAAA0C;EAAA1C,EAAA,MAAA1B;EAAA0B,EAAA,MAAAY,YAAA5C;EAAAgC,EAAA,MAAAL;EAAAK,EAAA,MAAA2C;EAAA3C,EAAA,MAAA4C;CAAA,OAAAA,MAAA5C,EAAA;CAxBH,MAAAhC,QAWE4E;CA0BC,IAAAI;CAAA,IAAAhD,EAAA,QAAAhC,OAAA;EAGSgF,YAAMhF;EAAKgC,EAAA,MAAAhC;EAAAgC,EAAA,MAAAgD;CAAA,OAAAA,MAAAhD,EAAA;CAAA,IAAAiD;CAAA,IAAAjD,EAAA,QAAA8B,eAAAoB,SAAA;EACXD,YAAMnB,eAAcoB;EAAQlD,EAAA,MAAA8B,eAAAoB;EAAAlD,EAAA,MAAAiD;CAAA,OAAAA,MAAAjD,EAAA;CAAA,IAAAmD;CAAA,IAAAnD,EAAA,QAAA3B,UAAA;EAE9B8E,YAAA;GACN9E,WAAW;EAAC;EACb2B,EAAA,MAAA3B;EAAA2B,EAAA,MAAAmD;CAAA,OAAAA,MAAAnD,EAAA;CAAA,IAAAoD;CAAA,IAAApD,EAAA,QAAA+B,aAAA/B,EAAA,QAAAmC,eAAAnC,EAAA,QAAAZ,YAAAY,EAAA,QAAAxC,QAAAN,IAAA;EAIekG,OAAAC,QAAA;GAAC,MAAA,EAAAC,UAAAC,aAAAF;GACf,IAAI,CAACjE,UAAQ;GACb,MAAAoE,SACED,aACCpB,gBAAgB,KAAhBsB,KAAAA,IAEGH,aAAa,aACXvB,UAAUI,cAAc,KACxBmB,aAAa,SACXvB,UAAUI,cAAc,KAD1BsB,KAAAA;GAGR,IAAID,WAAWC,KAAAA,KAAaD,WAAWhG,QAAON,IAC5CkC,SAAQsE,eAAgBF,MAAM;EAAE;EACnCxD,EAAA,MAAA+B;EAAA/B,EAAA,MAAAmC;EAAAnC,EAAA,MAAAZ;EAAAY,EAAA,MAAAxC,QAAAN;EAAA8C,EAAA,MAAAoD;CAAA,OAAAA,MAAApD,EAAA;CAAA,IAAAqD;CAAA,IAAArD,EAAA,QAAAxC,SAAA;EACY6F,YAAMlH,qBAAqBqB,OAAO;EAACwC,EAAA,MAAAxC;EAAAwC,EAAA,MAAAqD;CAAA,OAAAA,MAAArD,EAAA;CAAA,IAAA2D;CAAA,IAAA3D,EAAA,QAAAY,eAAAZ,EAAA,QAAAhC,OAAA;EAC1C2F,OAAAC,aAAA;GACJ,IAAI,WAAWA,UAAQ,OACdhD,YAAWiD,IAAKD,QAAQ;GAEjC,MAAAnG,YAAkBO,MAAK8E,MAAMgB,WAC3BC,MAAOA,EAACzG,SAAU,eAAeyG,EAACC,eAAgBJ,SAAQI,UAC5D;GAAE,OACKpD,YAAWiD,IAAK,EAAAtE,OAAS9B,UAAU,CAAC;EAAC;EAC7CuC,EAAA,MAAAY;EAAAZ,EAAA,MAAAhC;EAAAgC,EAAA,MAAA2D;CAAA,OAAAA,MAAA3D,EAAA;CAAA,IAAAiE;CAAA,IAAAjE,EAAA,QAAAiB,mBAAA;EACWgD,OAAAC,eAAA;GACV,IAAI,QAAQN,YAAQ,OACX3C,kBAAiB4C,IAAK,EAAAM,KAAOP,WAAQ1G,GAAI,CAAC;GAClD,OACM+D,kBAAiB4C,IAAKD,UAAQ;EAAC;EACvC5D,EAAA,MAAAiB;EAAAjB,EAAA,MAAAiE;CAAA,OAAAA,MAAAjE,EAAA;CAAA,IAAAoE;CAAA,IAAApE,EAAA,QAAAJ,WAAAI,EAAA,QAAAH,kBAAAG,EAAA,QAAAP,oBAAAO,EAAA,QAAAgD,OAAAhD,EAAA,QAAAiD,OAAAjD,EAAA,QAAAmD,OAAAnD,EAAA,QAAAoD,OAAApD,EAAA,QAAAqD,OAAArD,EAAA,QAAA2D,OAAA3D,EAAA,QAAAiE,KAAA;EAvCIG,MAAA;GAAAC,UACKrB;GAAWD,UACXE;GAA4BqB,QAC9BC;GAAQC,QACRrB;GAEPsB,OACM7E;GAAO8E,cACA7E;GAAc8E,gBACZlF;GAAgBiE,gBAChBN;GAafwB,aACYvB;GAAmC3F,MAC1CiG;GAQLkB,YACWZ;GAKX9D;GAAAE;EAGH;EAACL,EAAA,MAAAJ;EAAAI,EAAA,MAAAH;EAAAG,EAAA,MAAAP;EAAAO,EAAA,MAAAgD;EAAAhD,EAAA,MAAAiD;EAAAjD,EAAA,MAAAmD;EAAAnD,EAAA,MAAAoD;EAAApD,EAAA,MAAAqD;EAAArD,EAAA,MAAA2D;EAAA3D,EAAA,MAAAiE;EAAAjE,EAAA,MAAAoE;CAAA,OAAAA,MAAApE,EAAA;CAAA,OA1CMoE;AA0CN;AAGH,MAAMU,gBAAgB9K,SAAS8F,gBAAgB;AAc/C,MAAMkF,mBAAkBjF,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAvC,MAAAC,QAAAgD,WAAAtB,yBAAAT,iBAAAE,qBAAAiB;CASK,MAAAO,KAAA3C;CAA2B,IAAAkD;CAAA,IAAAb,EAAA,OAAAtC,QAAAsC,EAAA,OAAAM,IAAA;EAA9CO,KAAA;GAAA,GAAKnD;GAAIC,QAAU2C;EAA4B;EAACN,EAAA,KAAAtC;EAAAsC,EAAA,KAAAM;EAAAN,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CADzD,MAAAhC,QACS6C;CAEP,IAAAE;CAAA,IAAAf,EAAA,OAAAhC,OAAA;EAGU+C,WAAM/C;EAAKgC,EAAA,KAAAhC;EAAAgC,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAW,aAAAX,EAAA,OAAApB,mBAAAoB,EAAA,OAAAtC,MAAA;EACNwD,MAAA+D,WAAA;GACb,IAAI,CAACrG,iBACH,MAAM,IAAIuC,MACR,qEACF;GACF,IAAIzD,KAAIJ,SAAU,aAChB,MAAM,IAAI6D,MAAM,mDAAmD;GAErE,MAAA+D,WAAiBpJ,aAAYqJ,WAAYF,MAAM;GAC/CrG,gBAAgB;IAAA+B;IAAAyE,UAEJ1H,KAAI0H;IAASpB,YACXtG,KAAIsG;IAAWiB,QACnBC,SAAQD;IAA4BI,SACnCH,SAAQG;IAAQ,GACrBH,SAAQI,aAAc7B,KAAAA,KAAtB,EAAA6B,UAA+CJ,SAAQI,SAAU;IAAC,GAClEJ,SAAQK,iBAAkB9B,KAAAA,KAA1B,EAAA8B,cACYL,SAAQK,aACxB;GACF,CAAC;EAAC;EACHvF,EAAA,KAAAW;EAAAX,EAAA,KAAApB;EAAAoB,EAAA,KAAAtC;EAAAsC,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAqB;CAAA,IAAArB,EAAA,OAAAlB,oBAAAkB,EAAA,QAAAtC,MAAA;EACe2D,MAAAmE,YAAA;GACd,IAAI,CAAC1G,kBACH,MAAM,IAAIqC,MACR,6EACF;GACF,IAAIzD,KAAIJ,SAAU,aAChB,MAAM,IAAI6D,MAAM,oDAAoD;GAEtErC,iBAAiB;IAAAkF,YAActG,KAAIsG;IAAWwB;GAAU,CAAC;EAAC;EAC3DxF,EAAA,KAAAlB;EAAAkB,EAAA,MAAAtC;EAAAsC,EAAA,MAAAqB;CAAA,OAAAA,KAAArB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAX,2BAAAW,EAAA,QAAAtC,MAAA;EACsB+D,MAAAgE,eAAA;GACrB,IAAI,CAACpG,yBACH,MAAM,IAAI8B,MAAM,0CAA0C;GAE5D,IAAIzD,KAAIJ,SAAU,aAChB,MAAM,IAAI6D,MACR,4DACF;GAEF,IACE,CAACzD,KAAIgI,YACLhI,KAAIgI,SAASC,aAAclC,KAAAA,KAC3B/F,KAAIgI,SAASE,eAAgBnC,KAAAA,GAE7B,MAAM,IAAItC,MAAM,mCAAmC;GAErD,MAAAtC,UAAgBzC,4BAA4BsB,KAAIgI,UAAWR,UAAQ;GACnE,IAAA;IAAA,OACSvG,QAAOkH,QAASxG,wBAAwBR,OAAO,CAAC;GAAC,SAAAmD,IAAA;IACjD8D,MAAAA,QAAAA;IAAK,OACLnH,QAAOoH,OAAQD,KAAK;GAAC;EAC7B;EACF9F,EAAA,MAAAX;EAAAW,EAAA,MAAAtC;EAAAsC,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAAgC;CAAA,IAAAhC,EAAA,QAAAe,MAAAf,EAAA,QAAAkB,MAAAlB,EAAA,QAAAqB,MAAArB,EAAA,QAAAyB,IAAA;EAvDIO,KAAA;GAAAqC,UACKtD;GAAWiF,eACN9E;GAoBd+E,gBACe5E;GASf6E,uBACsBzE;EAuBzB;EAACzB,EAAA,MAAAe;EAAAf,EAAA,MAAAkB;EAAAlB,EAAA,MAAAqB;EAAArB,EAAA,MAAAyB;EAAAzB,EAAA,MAAAgC;CAAA,OAAAA,KAAAhC,EAAA;CAAA,OAxDMgC;AAwDN;AAGH,MAAMtB,eAAe1G,SAASgL,eAAe;AAQ7C,MAAMqB,yBAAyB,EAC7BxB,YACAuB,eACyD;CACzD,OAAO;EACL/B,gBAAgBQ;EAChByB,QAAQ,YAAY;GAClB,MAAMF,WAAW;EACnB;CACF;AACF;AAEA,MAAMG,qBAAqBvM,SAASqM,qBAAqB;AAezD,MAAMI,sBAAsB,EAC1BC,MACAC,QACAP,eAK+B;CAC/B,OAAO;EACL/B,gBAAgBqC;EAChBG,aAAaF,OAAO;GAAEG,MAAM;GAASC,aAAa;EAAK,CAAC;EACxDC,MAAML;EACNL,QAAQF;CACV;AACF;AAEA,MAAMa,kBAAkBjN,SAASyM,kBAAkB;AAKnD,MAAMS,gBAAeC,YAAA;CAAA,MAAAnH,IAAAC,EAAA,CAAA;CACnB,MAAA,CAAAjC,OAAAoJ,YAA0BzN,SAASwN,OAAO;CAC1C,MAAAE,MAAYtN,OAAOiE,KAAK;CAAE,IAAA+B;CAAA,IAAAC,EAAA,OAAAsH,OAAAC,IAAA,2BAAA,GAAA;EACFxH,MAAAyH,SAAA;GACtBH,IAAGI,UACD,OAAOD,SAAS,aAAcA,KAAwBH,IAAGI,OAAe,IAAxED;GACFJ,SAASC,IAAGI,OAAQ;EAAC;EACtBzH,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CAJD,MAAA4H,MAAY7H;CAIL,IAAAO;CAAA,IAAAN,EAAA,OAAAhC,OAAA;EACAsC,KAAA;GAACtC;GAAO4J;GAAKP;EAAG;EAACrH,EAAA,KAAAhC;EAAAgC,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OAAjBM;AAA0B;AAKnC,MAAMwH,iCAAiC,OACrCjD,YACA7F,mBACA+I,mBAKG;CACH,IAAI;EACF,MAAM/I,mBAAmBsH,OAAOzB,UAAU;CAC5C,SAASiB,OAAO;EACd,MAAMtI,UAAUsI,iBAAiB3E,QAAQ2E,MAAMtI,UAAUwK,OAAOlC,KAAK;EACrEiC,gBAAgBL,SACdA,KAAKlH,KAAKyH,cACRA,UAAU/K,OAAO2H,WAAW3H,MAAM,CAACjC,qBAAqBgN,SAAS,IAC7D;GACE,GAAGA;GACHtK,QAAQ;IAAEL,MAAM;IAAc4K,QAAQ;IAAS1K;GAAQ;EACzD,IACAyK,SACN,CACF;EACA,MAAMnC;CACR;AACF;AAGA,MAAMqC,6BAA4BpI,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAC,MAAA,EAAA3C,MAAAqE,WAAA7D,WAAAwC,IAAApC,gBAAA2C,IAAArC,UAAAoD,aAAAC,QAAArE,SAAA2B,OAAAH,sBAAAe;CAGjC,MAAAjC,YAAAwC,OAAAmD,KAAAA,IAAA,QAAAnD;CACA,MAAApC,iBAAA2C,OAAA4C,KAAAA,IAAA,QAAA5C;CAQA,MAAA,CAAAuH,WAAAC,cAAAC,gBAAgDpB,aAC9C5J,SAAS,QACX;CACA,MAAA,CAAAiL,MAAAC,SAAAC,WAAiCvB,aAAa,EAAE;CAChD,MAAA,CAAA1E,MAAAkG,SAAAC,WAAiCzB,aAE/B,MAAM;CAAE,IAAAnG;CAAA,IAAAf,EAAA,OAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAGRxG,KAAA,CAAC;EAACf,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAFJ,MAAA,CAAA4I,WAAAC,cAAAC,gBAAgD5B,aAE9CnG,EAAE;CAAE,IAAAG;CAAA,IAAAlB,EAAA,OAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAGJrG,KAAA,CAAA;EAAElB,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAFJ,MAAA,CAAAc,aAAAiH,gBAAAgB,kBAAsD7B,aAEpDhG,EAAE;CACJ,MAAA,CAAA8H,OAAAC,UAAAC,YAAoChC,aAElCzD,KAAAA,CAAS;CAAE,IAAApC;CAAA,IAAArB,EAAA,OAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAELlG,KAAA,IAAIhF,wBAAwB;EAAC2D,EAAA,KAAAqB;CAAA,OAAAA,KAAArB,EAAA;CADrC,MAAAmJ,0BACQ9H;CAEN,IAAAI;CAAA,IAAAzB,EAAA,OAAAxC,WAAAwC,EAAA,OAAA+H,kBAAA/H,EAAA,OAAA0I,WAAA1I,EAAA,OAAAwI,SAAA;EAEwB/G,WAAA;GACxB,IAAI,CAACjE,SAAO;GACZ,MAAA4L,cAAoB5L,QAAO+C,QAAQ8I,OACzBC,MAA8B,CAAC,CAAA9I,IAClC+I,MAAmB,CAAC,CAAAC,KACnB,MAAM;GACdhB,QAAQY,WAAW;GACnBV,QAAQlL,QAAOgF,IAAK;GACpBuF,eAAevK,QAAOsD,eAAP,CAAA,CAAyB;EAAC;EAC1Cd,EAAA,KAAAxC;EAAAwC,EAAA,KAAA+H;EAAA/H,EAAA,KAAA0I;EAAA1I,EAAA,KAAAwI;EAAAxI,EAAA,KAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CATD,MAAAyJ,oBAA0BhI;CASxB,IAAAO;CAAA,IAAAhC,EAAA,OAAAhB,qBAAAgB,EAAA,OAAAc,eAAAd,EAAA,QAAA+H,gBAAA;EAAA,IAAAxF;EAAA,IAAAvC,EAAA,QAAAhB,qBAAAgB,EAAA,QAAA+H,gBAAA;GAGgBxF,MAAAsC,eACd5K,QACE4K,WAAU3H,IACVqJ,mBAAmB;IAAA1B;IAAAuB,UAEP,YAAA;KACR+C,wBAAuBO,OAAQ7E,WAAU3H,EAAG;KAC5C,IAAI,CAACjC,qBAAqB4J,UAAU,GAClC,MAAMiD,+BACJjD,YACA7F,mBACA+I,cACF;KAEFA,gBAAeL,SACbA,KAAI2B,QAAQM,MAAOA,EAACzM,OAAQ2H,WAAU3H,EAAG,CAC3C;IAAC;GAEL,CAAC,CACH;GAAC8C,EAAA,MAAAhB;GAAAgB,EAAA,MAAA+H;GAAA/H,EAAA,MAAAuC;EAAA,OAAAA,KAAAvC,EAAA;EAnBHgC,KAAAlB,YAAWN,IAAK+B,EAoBhB;EAACvC,EAAA,KAAAhB;EAAAgB,EAAA,KAAAc;EAAAd,EAAA,MAAA+H;EAAA/H,EAAA,MAAAgC;CAAA,OAAAA,KAAAhC,EAAA;CArBH,MAAAiB,oBAA0B7G,gBACxB4H,EAqBF;CAAE,IAAAO;CAAA,IAAAvC,EAAA,QAAAhB,mBAAA;EAE+BuD,KAAA,OAAAqH,YAAA;GAC/B,IAAI,CAAC5K,mBAAiB;GACtB,MAAML,QAAOkL,IACXD,QAAOP,OACGS,MAAmC,CAAC,CAAAtJ,KACvCuJ,QAAO/K,kBAAiBsH,OAAQqD,GAAC,CAAC,CAC3C;EAAC;EACF3J,EAAA,MAAAhB;EAAAgB,EAAA,MAAAuC;CAAA,OAAAA,KAAAvC,EAAA;CAPD,MAAAgK,2BAAiCzH;CAO/B,IAAAI;CAAA,IAAA3C,EAAA,QAAA+H,gBAAA;EAEuBpF,MAAAsH,iBAAA;GACvBlC,gBAAemC,WAAA;IACb,MAAAzJ,MAAYiH,OAAI5D,WAAWqG,QAAOR,IAACzM,OAAQ2H,aAAU3H,EAAG;IACxD,IAAIuD,QAAQ,IAAE,OAAS,CAAA,GAAIiH,QAAM7C,YAAU;IAC3C,MAAA2C,OAAa,CAAA,GAAIE,MAAI;IACrBF,KAAK/G,OAAOoE;IAAH,OACF2C;GAAI,CACZ;EAAC;EACHxH,EAAA,MAAA+H;EAAA/H,EAAA,MAAA2C;CAAA,OAAAA,KAAA3C,EAAA;CARD,MAAAoK,mBAAyBzH;CAUzB,MAAA0H,aAAmBlL,OAAKkL,cAALvN;CACnB,MAAAwN,YAAkBnL,OAAKoL,SAALzN;CAAkC,IAAA8F;CAAA,IAAA5C,EAAA,QAAAsK,aAAAtK,EAAA,QAAAqK,YAAA;EAGhDzH,MAAAyH,WAAU/H,WAAY,IAAtBgI,YAEIA,UAAShI,WAAY,IAArB+H,aAAA,CAAA,GAEMA,YAAU,GAAKC,SAAS;EAACtK,EAAA,MAAAsK;EAAAtK,EAAA,MAAAqK;EAAArK,EAAA,MAAA4C;CAAA,OAAAA,MAAA5C,EAAA;CANvC,MAAAwK,aAEI5H;CAMF,IAAAI;CAAA,IAAAhD,EAAA,QAAAb,SAAAa,EAAA,QAAAwK,YAAA;EAAA,IAAAvH;EAAA,IAAAjD,EAAA,QAAAb,OAAA;GAEe8D,OAAAyD,SACbzM,QACEyM,KAAIxJ,IACJ+J,gBAAgB;IAAAP;IAAAC,SAENC,cAAezH,OAAK6H,KAAON,KAAIxJ,IAAK0J,SAAS;IAACR,gBACtCjH,OAAKmH,OAASI,KAAIxJ,EAAG;GACvC,CAAC,CACH;GAAC8C,EAAA,MAAAb;GAAAa,EAAA,MAAAiD;EAAA,OAAAA,MAAAjD,EAAA;EARHgD,MAAAwH,WAAUhK,IAAKyC,GASf;EAACjD,EAAA,MAAAb;EAAAa,EAAA,MAAAwK;EAAAxK,EAAA,MAAAgD;CAAA,OAAAA,MAAAhD,EAAA;CAVH,MAAAyK,mBAAyBrQ,gBACvB4I,GAUF;CAAE,IAAAC;CAAA,IAAAjD,EAAA,QAAAhB,mBAAA0L,UAAA1K,EAAA,QAAAiB,kBAAAjD,SAAAgC,EAAA,QAAAc,YAAAwB,UAAAtC,EAAA,QAAA2B,aAAA3B,EAAA,QAAAoI,aAAApI,EAAA,QAAA9B,kBAAA8B,EAAA,QAAAwK,cAAAxK,EAAA,QAAAgJ,SAAAhJ,EAAA,QAAAwC,QAAAxC,EAAA,QAAA4I,aAAA5I,EAAA,QAAAuI,QAAAvI,EAAA,QAAA1C,MAAA;EAEoB2F,YAAA;GACpB,MAAA0H,UAAgB,CAACpC,KAAIqC,KAAM,KAAX,CAAiB9J,YAAWwB;GAAQ,OAC7C;IAAAiG;IAAA/F;IAAA1B,aAGQG,kBAAiBjD;IAAM4K;IAAAR;IAAAzG;IAAAkJ,SAI3BzC,aAAA,CAAcuC,WAAd,CAA0BzM;IAAc4M,kBAC/B9L,mBAAiB0L,UAAjB;IAAgCC;IAAArN;IAAAyN,WAGvCtH,KAAAA;IAASuF;IAAA7J,OAEbqL;GACT;EAAC;EACFxK,EAAA,MAAAhB,mBAAA0L;EAAA1K,EAAA,MAAAiB,kBAAAjD;EAAAgC,EAAA,MAAAc,YAAAwB;EAAAtC,EAAA,MAAA2B;EAAA3B,EAAA,MAAAoI;EAAApI,EAAA,MAAA9B;EAAA8B,EAAA,MAAAwK;EAAAxK,EAAA,MAAAgJ;EAAAhJ,EAAA,MAAAwC;EAAAxC,EAAA,MAAA4I;EAAA5I,EAAA,MAAAuI;EAAAvI,EAAA,MAAA1C;EAAA0C,EAAA,MAAAiD;CAAA,OAAAA,MAAAjD,EAAA;CAYChB,mBAAiB0L;CAAQ,IAAAvH;CAAA,IAAAnD,EAAA,QAAAiD,KAAA;EA7BbE,MAAQF,IA8BrB;EAACjD,EAAA,MAAAiD;EAAAjD,EAAA,MAAAmD;CAAA,OAAAA,MAAAnD,EAAA;CA9BF,MAAAhC,QAAcmF;CA8BX,IAAAC;CAAA,IAAApD,EAAA,QAAAhC,OAAA;EAGSoF,YAAMpF;EAAKgC,EAAA,MAAAhC;EAAAgC,EAAA,MAAAoD;CAAA,OAAAA,MAAApD,EAAA;CAAA,IAAAqD;CAAA,IAAArD,EAAA,QAAAhB,qBAAAgB,EAAA,QAAA+H,kBAAA/H,EAAA,QAAAoK,kBAAA;EAIN/G,MAAA,OAAA2H,qBAAA;GACb,IAAIhM,mBAAiB;IACnB,MAAAiM,OAAa/P,mBAAmB8P,gBAK+B,IALlD;KAAAE,MAEDF,iBAAgBE;KAAK5N,MACrB0N,iBAAgBG,eAAhB;IAEmD,IALlD;KAAAD,MAKDF,iBAAgBE;KAAK5N,MAAQ0N,iBAAgB1N;IAAM;IAC/D,IAAI,CAACpB,kBAAkB+O,MAAMjM,kBAAiB0L,MAAO,GACnD,MAAM,IAAIvJ,MACR,aAAa8J,KAAI3N,QAAJ,UAAsB,oCAAqC0B,kBAAiB0L,QAC3F;GAAE;GAEN,IAAI,CAACxP,mBAAmB8P,gBAAgB,KAApChM,mBAA0D;IAC5D,MAAAoM,YAAkBjC,wBAAuBkC,MAAO;IAChD,IAAA;KACE,MAAM/O,mBACJ0C,kBAAiBsM,IAAK,EAAAL,MAAQD,iBAAiB,CAAC,IAChDO,iBAAA;MACE,IAAI,CAACpC,wBAAuBuB,OAAQU,WAAWvG,aAAU3H,EAAG,GAAC,OACpD;MACTkN,iBAAiBvF,YAAU;MAAC,OACrB;KAAI,CAEf;KACAsE,wBAAuBqC,OAAQJ,SAAS;IAAC,SAAAzH,KAAA;KAClCmC,MAAAA,QAAAA;KACPqD,wBAAuBqC,OAAQJ,SAAS;KACxC,IAAI,CAACjC,wBAAuBsC,YAAaL,SAAS,GAAG,MAAMtF;IAAM;GAClE,OACI,IAAI,CAAC5K,mBAAmB8P,gBAAgB,GAAC;IAC9C,MAAAU,gBAAkC;KAAAxO,IAC5BV,WAAW;KAACc,MACV;KAAM4N,MACNF,iBAAgBE;KAAKC,aACdH,iBAAgB1N;KAAK2N,MAC5BD;KAAgBrN,QACd,EAAAL,MAAQ,WAAW;KAACiD,SACnB,CAAA;IACX;IACAwH,gBAAe4D,WAAU,CAAA,GAAIjE,QAAMgE,aAAa,CAAC;GAAC,OAAA;IAElD,MAAAE,kBAAkC;KAAA1O,IAC5B8N,iBAAgB9N,MAAOV,WAAW;KAACc,MACjC0N,iBAAgB1N,QAAhB;KAAmC4N,MACnCF,iBAAgBE;KAAKC,aACdH,iBAAgBG;KAAY5K,SAChCyK,iBAAgBzK;KAAQ5C,QACzB,EAAAL,MAAQ,WAAW;IAC7B;IACAyK,gBAAe8D,WAAU,CAAA,GAAInE,QAAMgE,eAAa,CAAC;GAAC;EACnD;EACF1L,EAAA,MAAAhB;EAAAgB,EAAA,MAAA+H;EAAA/H,EAAA,MAAAoK;EAAApK,EAAA,MAAAqD;CAAA,OAAAA,MAAArD,EAAA;CAAA,IAAA2D;CAAA,IAAA3D,EAAA,QAAA+I,kBAAA/I,EAAA,QAAAgK,4BAAAhK,EAAA,QAAA+H,gBAAA;EACiBpE,MAAA,YAAA;GAChBwF,wBAAuB2C,UAAW;GAClC,MAAAC,YAAgBhD,eAActB;GAC9BM,eAAe,CAAA,CAAE;GACjB,MAAMiC,yBAAyBJ,SAAO;EAAC;EACxC5J,EAAA,MAAA+I;EAAA/I,EAAA,MAAAgK;EAAAhK,EAAA,MAAA+H;EAAA/H,EAAA,MAAA2D;CAAA,OAAAA,MAAA3D,EAAA;CAAA,IAAAiE;CAAA,IAAAjE,EAAA,QAAAiB,mBAAA;EACWgD,OAAAL,aAAA;GACV,IAAI,QAAQA,UAAQ,OACX3C,kBAAiB4C,IAAK,EAAAM,KAAOP,SAAQ1G,GAAI,CAAC;GAClD,OACM+D,kBAAiB4C,IAAKD,QAAQ;EAAC;EACvC5D,EAAA,MAAAiB;EAAAjB,EAAA,MAAAiE;CAAA,OAAAA,MAAAjE,EAAA;CAAA,IAAAoE;CAAA,IAAApE,EAAA,QAAA+I,kBAAA/I,EAAA,QAAAgK,4BAAAhK,EAAA,QAAA+H,kBAAA/H,EAAA,QAAAiJ,YAAAjJ,EAAA,QAAA0I,WAAA1I,EAAA,QAAA6I,gBAAA7I,EAAA,QAAAwI,SAAA;EACMpE,MAAA,YAAA;GACL+E,wBAAuB2C,UAAW;GAClC,MAAAE,YAAgBjD,eAActB;GAC9Be,QAAQ,EAAE;GACVE,QAAQ,MAAM;GACdG,aAAa,CAAC,CAAC;GACfd,eAAe,CAAA,CAAE;GACjBkB,SAASxF,KAAAA,CAAS;GAClB,MAAMuG,yBAAyBJ,SAAO;EAAC;EACxC5J,EAAA,MAAA+I;EAAA/I,EAAA,MAAAgK;EAAAhK,EAAA,MAAA+H;EAAA/H,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAA0I;EAAA1I,EAAA,MAAA6I;EAAA7I,EAAA,MAAAwI;EAAAxI,EAAA,MAAAoE;CAAA,OAAAA,MAAApE,EAAA;CAAA,IAAAiM;CAAA,IAAAjM,EAAA,QAAAhB,qBAAAgB,EAAA,QAAA+I,kBAAA/I,EAAA,QAAAsI,gBAAAtI,EAAA,QAAAlC,aAAAkC,EAAA,QAAA9B,kBAAA8B,EAAA,QAAA6B,UAAA7B,EAAA,QAAAb,SAAAa,EAAA,QAAAkJ,YAAAlJ,EAAA,QAAA2I,WAAA3I,EAAA,QAAA8I,gBAAA9I,EAAA,QAAA+H,kBAAA/H,EAAA,QAAAqI,gBAAArI,EAAA,QAAAiJ,YAAAjJ,EAAA,QAAAwI,WAAAxI,EAAA,QAAAyI,WAAAzI,EAAA,QAAA1C,MAAA;EACK2O,OAAAC,SAAA;GACJ,MAAAC,eAAqBjD,SAAQzB;GAC7B,MAAA2E,cAAoB3D,QAAOhB;GAC3B,MAAA4E,cAAoB1D,QAAOlB;GAC3B,MAAA6E,mBAAyBxD,aAAYrB;GACrC,MAAA8E,qBAA2BxD,eAActB;GACzC,MAAA+E,YAAgB,CAACJ,YAAWxB,KAAM,KAAlB,CAAwB2B,mBAAkBjK;GAC1D,IAAI,CAACgG,aAAYb,SAAU,MAAM,IAAItG,MAAM,2BAA2B;GACtE,IAAIqL,aAAAtO,gBAAyB;GAE7BiL,wBAAuB2C,UAAW;GAClCtD,QAAQ,EAAE;GACVT,eAAe,CAAA,CAAE;GACjBkB,SAASxF,KAAAA,CAAS;GAElB,MAAAgJ,YAAiBC,oBAAA;IACf,MAAAC,kBAAuC;KAAAnK,MAC/B6J;KAAW9L,SACR6L,cAAA,CACJ;MAAA9O,MAAQ;MAAeiL,MAAQ6D;KAAY,CAAC,IADxC,CAAA;KAEHtL,aACO4L;KAAsBE,2BACxB,IAAIC,KAAK;KAACvO,UACX;KAAIiD,UACJ;KAAIqH,WACH0D;KAAgBQ,UACjBZ,MAAIY;KAAUrK,UACd,EAAAsK,QACA,EAAA,GAAMZ,eAAA,EAAAnD,OAAwBmD,aAAkB,IAA1C,CAA0C,EAAG,EAC7D;IACF;IAEA,IAAIhN,SAAS7B,SAAS,UAAQ;KAC5B,IAAI4O,MAAIrF,SAAJ/I,WAA0BqB,MAAK0H,MAAO8F,eAAe;UACpDxN,MAAK6N,QAASL,eAAe;IAAE,OAEpC9K,SAAS8K,eAAe;IAE1B,IAAIrP,SAAS,QAAQ+K,aAAa,KAAK;GAAE;GAG3C,IAAIrJ,qBAAqBuN,mBAAkBjK,SAAU,GAC9C3D,QAAOkL,IACV0C,mBAAkB/L,KAAKyM,iBACrBpI,aAAUlH,OAAOL,SAAU,aAA3B2P,eAEIjO,kBAAiBkO,KAAMrI,YAA+B,CAC5D,CACF,CAAC,CAAAsI,KAAMV,WAAUW,YAAA;IAEf5E,SAAQ6E,WACNjB,eAAAiB,SACIjB,cAAc,OAAO1E,SACrB0E,eAAAiB,MACN;IACApE,UAASqE,WAAUA,UAAAnB,YAAoB;IACvCpE,gBAAewF,WAAU,CAAA,GAAIhB,oBAAkB,GAAK7E,MAAI,CAAC;IACzD8F,QAAO1H,MAAO,8BAA8BA,OAAK;GAAC,CACnD;QAED2G,SAASF,kBAAkB;EAC5B;EACFvM,EAAA,MAAAhB;EAAAgB,EAAA,MAAA+I;EAAA/I,EAAA,MAAAsI;EAAAtI,EAAA,MAAAlC;EAAAkC,EAAA,MAAA9B;EAAA8B,EAAA,MAAA6B;EAAA7B,EAAA,MAAAb;EAAAa,EAAA,MAAAkJ;EAAAlJ,EAAA,MAAA2I;EAAA3I,EAAA,MAAA8I;EAAA9I,EAAA,MAAA+H;EAAA/H,EAAA,MAAAqI;EAAArI,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAAwI;EAAAxI,EAAA,MAAAyI;EAAAzI,EAAA,MAAA1C;EAAA0C,EAAA,MAAAiM;CAAA,OAAAA,MAAAjM,EAAA;CAAA,IAAAyN;CAAA,IAAAzN,EAAA,QAAA+I,kBAAA/I,EAAA,QAAAxB,YAAAwB,EAAA,QAAAgK,4BAAAhK,EAAA,QAAA+H,kBAAA/H,EAAA,QAAAqI,gBAAArI,EAAA,QAAA1C,MAAA;EACOmQ,YAAA;GAIN,IAAInQ,SAAS,QAAM;IACjB6L,wBAAuB2C,UAAW;IAClC,MAAA4B,YAAgB3E,eAActB;IAC9BM,eAAe,CAAA,CAAE;IACjBiC,yBAAyBJ,SAAO,CAAC,CAAA+D,MAAOC,MAEvC;GAAC;GAEJpP,WAAW;GACX,IAAIlB,SAAS,QAAQ+K,aAAa,KAAK;EAAE;EAC1CrI,EAAA,MAAA+I;EAAA/I,EAAA,MAAAxB;EAAAwB,EAAA,MAAAgK;EAAAhK,EAAA,MAAA+H;EAAA/H,EAAA,MAAAqI;EAAArI,EAAA,MAAA1C;EAAA0C,EAAA,MAAAyN;CAAA,OAAAA,MAAAzN,EAAA;CAAA,IAAA6N;CAAA,IAAA7N,EAAA,QAAAsI,gBAAAtI,EAAA,QAAA4B,eAAA5B,EAAA,QAAAqI,gBAAArI,EAAA,QAAA1C,QAAA0C,EAAA,QAAAyJ,mBAAA;EACUoE,YAAA;GACTjM,cAAc;GACd,IAAItE,SAAS,UAAQ;GACrB,IAAIgL,aAAYb,SAAU,MAAM,IAAItG,MAAM,0BAA0B;GACpEkH,aAAa,IAAI;GACjBoB,kBAAkB;EAAC;EACpBzJ,EAAA,MAAAsI;EAAAtI,EAAA,MAAA4B;EAAA5B,EAAA,MAAAqI;EAAArI,EAAA,MAAA1C;EAAA0C,EAAA,MAAAyJ;EAAAzJ,EAAA,MAAA6N;CAAA,OAAAA,MAAA7N,EAAA;CAAA,IAAA8N;CAAA,IAAA9N,EAAA,QAAAyK,kBAAA;EAIUqD,OAAA5J,eAAA;GACT,IAAI,QAAQN,YAAQ,OACX6G,iBAAgB5G,IAAK,EAAAM,KAAOP,WAAQ1G,GAAI,CAAC;GACjD,OACMuN,iBAAgB5G,IAAKD,UAAQ;EAAC;EACtC5D,EAAA,MAAAyK;EAAAzK,EAAA,MAAA8N;CAAA,OAAAA,MAAA9N,EAAA;CAAA,IAAA+N;CAAA,IAAA/N,EAAA,QAAAiJ,YAAAjJ,EAAA,QAAA0I,WAAA1I,EAAA,QAAA6I,gBAAA7I,EAAA,QAAAwI,WAAAxI,EAAA,QAAAoD,OAAApD,EAAA,QAAAqD,OAAArD,EAAA,SAAA2D,OAAA3D,EAAA,SAAAiE,OAAAjE,EAAA,SAAAoE,OAAApE,EAAA,SAAAiM,OAAAjM,EAAA,SAAAyN,OAAAzN,EAAA,SAAA6N,OAAA7N,EAAA,SAAA8N,KAAA;EA7KIC,MAAA;GAAA1J,UACKjB;GAAWoF;GAAAE;GAAAG;GAAAmF,eAIN3K;GAoDd4K,kBACiBtK;GAKjBkB,YACWZ;GAKXiK,OACM9J;GASN8I,MACKjB;GA8DLvC,QACO+D;GAcPU,WACUN;GAMVO,gBACeC;GAAQC,eACTC;GAAQtF;GAAAuF,WAEZV;EAMb;EAAC9N,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAA0I;EAAA1I,EAAA,MAAA6I;EAAA7I,EAAA,MAAAwI;EAAAxI,EAAA,MAAAoD;EAAApD,EAAA,MAAAqD;EAAArD,EAAA,OAAA2D;EAAA3D,EAAA,OAAAiE;EAAAjE,EAAA,OAAAoE;EAAApE,EAAA,OAAAiM;EAAAjM,EAAA,OAAAyN;EAAAzN,EAAA,OAAA6N;EAAA7N,EAAA,OAAA8N;EAAA9N,EAAA,OAAA+N;CAAA,OAAAA,MAAA/N,EAAA;CAAA,OA9KM+N;AA8KN;AAGH,MAAMrM,yBAAyB1H,SAASmO,yBAAyB;AAEjE,MAAMsG,0BACJC,WACG;CACH,IAAIC;CAEJ,MAAMC,cAAc;EAClB,IAAI,CAACD,SAAS;EACdA,QAAQjF,OAAO;EACfiF,UAAUlL,KAAAA;EACViL,OAAOjL,KAAAA,CAAS;CAClB;CAEA,OAAO;EACLgB,QACEoK,SACArR,YACG;GACHoR,MAAM;GAEN,MAAME,YAAYD,QAAQpK,MAAMtI,qBAAqBqB,OAAO,CAAC;GAC7D,IAAIuR;GACJA,QAAQD,UAAUE,gBAAgB;IAChC,IAAIF,UAAUnR,OAAOL,SAAS,SAAS;KACrCyR,QAAQ;KACRJ,UAAUlL,KAAAA;KACViL,OAAOjL,KAAAA,CAAS;IAClB,OACEiL,OAAO;KAAE/N,WAAWnD,QAAQN;KAAIS,QAAQmR,UAAUnR;IAAO,CAAC;GAE9D,CAAC;GAED,IAAImR,UAAUnR,OAAOL,SAAS,SAAS;IACrCyR,MAAM;IACNL,OAAOjL,KAAAA,CAAS;IAChB;GACF;GAEAkL,UAAU;IACRhO,WAAWnD,QAAQN;IACnBwM,cAAc;KACZqF,MAAO;KACPD,UAAUpF,OAAO;IACnB;GACF;GACAgF,OAAO;IAAE/N,WAAWnD,QAAQN;IAAIS,QAAQmR,UAAUnR;GAAO,CAAC;EAC5D;EACAsR,YAAY;GACV,IAAI,CAACN,SAAS,MAAM,IAAIxN,MAAM,4BAA4B;GAC1DyN,MAAM;EACR;EACAM,cAAcvO,cAAsB;GAClC,IAAIgO,SAAShO,cAAcA,WACzB,MAAM,IAAIQ,MAAM,6BAA6B;GAC/CyN,MAAM;EACR;EACAO,SAASP;CACX;AACF;AAEA,MAAMQ,sBAAsBvR,aAA+C;CACzE,MAAMwR,0BAAU,IAAIC,IAAY;CAChC,MAAMC,UAAmC,CAAA;CACzC,KAAK,IAAIC,IAAI3R,SAASyE,SAAS,GAAGkN,KAAK,GAAGA,KAAK;EAC7C,MAAMhS,UAAUK,SAAS2R;EACzB,IAAIH,QAAQI,IAAIjS,QAAQN,EAAE,GAAG;GAC3BsQ,QAAQkC,KACN,yCAAyClS,QAAQN,GAAE,+DACrD;GACA;EACF;EACAmS,QAAQ/D,IAAI9N,QAAQN,EAAE;EACtBqS,QAAQI,KAAKnS,OAAO;CACtB;CACA,OAAO+R,QAAQjN,WAAWzE,SAASyE,SAASzE,WAAW0R,QAAQK,QAAQ;AACzE;AAGA,MAAMC,qBAAoB9P,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAC,MAAA,EAAApC,UAAAiS,cAAAhS,WAAAwC,IAAAvC,WAAA8C,IAAA7C,OAAA+R,aAAA9R,QAAAC,gBAAA6C,IAAA5C,OAAAC,QAAAC,UAAAE,YAAAC,UAAAC,UAAAC,iBAAAE,iBAAAE,kBAAAC,qBAAAC,mBAAAC,iBAAAC,eAAAC,OAAAC,UAAAC,4BAAAU;CAEzB,MAAAjC,YAAAwC,OAAAmD,KAAAA,IAAA,QAAAnD;CACA,MAAAvC,YAAA8C,OAAA4C,KAAAA,IAAA,QAAA5C;CAGA,MAAA3C,iBAAA6C,OAAA0C,KAAAA,IAAA,QAAA1C;CAAsB,IAAAG;CAAA,IAAAlB,EAAA,OAAA8P,cAAA;EAmBd5O,KAAAkO,mBAAmBU,YAAY;EAAC9P,EAAA,KAAA8P;EAAA9P,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CADxC,MAAAnC,WACQqD;CAEN,IAAAG;CAAA,IAAArB,EAAA,OAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAYAlG,KAAA,CAAC;EAACrB,EAAA,KAAAqB;CAAA,OAAAA,KAAArB,EAAA;CARJ,MAAA,CAAAR,mBAAAwQ,wBAAkDrW,SAQhD0H,EAAE;CAAE,IAAAI;CAAA,IAAAzB,EAAA,OAAAR,mBAAA;EAEciC,MAAAH,QAAA;GAClB,MAAA2O,QAAczQ,kBAAkB8B,IAAGpE;GAAK,OACjC+S,SAAS3O,IAAGmB,SAASjD,mBAAwBlC,SAAK2S,MAAKC,WAC1DD,MAAK3S,OADFmG,KAAAA;EAEM;EACdzD,EAAA,KAAAR;EAAAQ,EAAA,KAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CALD,MAAAmQ,cAAoB1O;CAKlB,IAAAO;CAAA,IAAAO;CAAA,IAAAvC,EAAA,OAAAnC,UAAA;EAKQmE,WAAA;GAERgO,sBAAqBtI,SAAA;IACnB,MAAA0I,OAAahT,OAAMiT,QAAS3I,IAAI,CAAC,CAAA2B,QAAQ1G,OAAA;KAAC,MAAA,CAAAzF,IAAAoT,WAAA3N;KACxC,MAAA4N,QAAY1S,SAAQ2S,MAAMC,MAAOA,EAACvT,OAAQA,EAAE;KAAE,OACvC,CAAC,CAACoE,SAAOA,MAAGmB,SAASjD,mBAAwBlC,SAAK2S,QAAKC;IAAS,CACxE;IAAE,OACIE,KAAI9N,WAAYlF,OAAMsT,KAAMhJ,IAAI,CAAC,CAAApF,SAAjCoF,OAEHtK,OAAMuT,YAAaP,IAAI;GAAC,CAC7B;EAAC;EACD7N,KAAA,CAAC1E,QAAQ;EAACmC,EAAA,KAAAnC;EAAAmC,EAAA,KAAAgC;EAAAhC,EAAA,KAAAuC;CAAA,OAAA;EAAAP,KAAAhC,EAAA;EAAAuC,KAAAvC,EAAA;CAAA;CAXbnG,UAAUmI,IAWPO,EAAU;CAAC,IAAAI;CAAA,IAAA3C,EAAA,OAAAf,iBAAA;EAEe0D,MAAAnF,SAAAoF,QAAA;GAE3B,MAAA,EAAAtF,SAAAsF;GAEA,IAAI,CAAC3D,iBAAiB,MAAM,IAAIkC,MAAM,iCAAiC;GACvElC,gBAAe2R,OAAQ;IAAApT;IAAAF;GAAgB,CAAC;GAExC,IAAIE,QAAOgF,SAAU,aACnBwN,sBAAqB9F,YAAW;IAAA,GAC3BxC;KACFlK,QAAON,KAAM;KAAAI;KAAA4S,UAEF1S,QAAOiF,SAASjD,mBAAwBlC;IACpD;GACF,EAAE;EACH;EACF0C,EAAA,KAAAf;EAAAe,EAAA,KAAA2C;CAAA,OAAAA,KAAA3C,EAAA;CAhBD,MAAA6Q,uBAA6BlO;CAkB7B,MAAA,CAAAmO,aAAAC,aAAiCpX,SAAkC8J,KAAAA,CAAS;CAAE,IAAAb;CAAA,IAAA5C,EAAA,QAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAC1C3E,YAAM6L,uBAAuBsC,SAAS;EAAC/Q,EAAA,MAAA4C;CAAA,OAAAA,MAAA5C,EAAA;CAA3E,MAAA,CAAAgR,oBAA2BrX,SAASiJ,GAAuC;CAE3E,MAAAqO,mBAAyB,CAAC,CAAC/R;CAC3B,MAAAS,SAAesR,mBAAAH,cAAArN,KAAAA;CAA2C,IAAAT;CAAA,IAAAC;CAAA,IAAAjD,EAAA,QAAAiR,oBAAAjR,EAAA,QAAAgR,kBAAA;EAChDhO,YAAA;GACR,IAAI,CAACiO,kBAAkBD,iBAAgB7B,QAAS;EAAE;EACjDlM,MAAA,CAACgO,kBAAkBD,gBAAgB;EAAChR,EAAA,MAAAiR;EAAAjR,EAAA,MAAAgR;EAAAhR,EAAA,MAAAgD;EAAAhD,EAAA,MAAAiD;CAAA,OAAA;EAAAD,MAAAhD,EAAA;EAAAiD,MAAAjD,EAAA;CAAA;CAFvCnG,UAAUmJ,KAEPC,GAAoC;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAApD,EAAA,QAAAgR,kBAAA;EAE9B7N,kBAAY6N,iBAAgB7B,QAAS;EAAG/L,MAAA,CAAC4N,gBAAgB;EAAChR,EAAA,MAAAgR;EAAAhR,EAAA,MAAAmD;EAAAnD,EAAA,MAAAoD;CAAA,OAAA;EAAAD,MAAAnD,EAAA;EAAAoD,MAAApD,EAAA;CAAA;CAApEnG,UAAUsJ,KAAwCC,GAAkB;CAAC,IAAAC;CAAA,IAAArD,EAAA,QAAAd,iBAAAc,EAAA,QAAAgR,kBAAA;EAEjD3N,OAAA6N,cAAA;GAClB,IAAI,CAAChS,eAAe,MAAM,IAAIiC,MAAM,+BAA+B;GACnE6P,iBAAgBvM,MAAOvF,eAAe1B,SAAO;EAAC;EAC/CwC,EAAA,MAAAd;EAAAc,EAAA,MAAAgR;EAAAhR,EAAA,MAAAqD;CAAA,OAAAA,MAAArD,EAAA;CAHD,MAAAmR,cAAoB9N;CAGlB,IAAAM;CAAA,IAAA3D,EAAA,QAAAnC,YAAAmC,EAAA,QAAA3B,UAAA;EAEmBsF,OAAAhD,cAAA;GACnB,MAAAyQ,eAAqBvT,SAAQiG,WAAWuN,QAAOZ,IAACvT,OAAQyD,SAAS;GACjE,IAAIyQ,iBAAiB,IAAE;GAEvB,MAAA9S,WAAiB8S,eAAe,IAAIvT,SAASuT,eAAe,EAAE,CAAAlU,KAA7C;GACjBmB,WAAWC,QAAQ;EAAC;EACrB0B,EAAA,MAAAnC;EAAAmC,EAAA,MAAA3B;EAAA2B,EAAA,MAAA2D;CAAA,OAAAA,MAAA3D,EAAA;CAND,MAAAsR,eAAqB3N;CAMnB,IAAAM;CAAA,IAAAjE,EAAA,QAAAhB,qBAAAgB,EAAA,QAAAZ,YAAAY,EAAA,QAAAmQ,eAAAnQ,EAAA,QAAAsR,gBAAAtR,EAAA,QAAAmR,eAAAnR,EAAA,QAAA6Q,wBAAA7Q,EAAA,QAAAnC,YAAAmC,EAAA,QAAApB,mBAAAoB,EAAA,QAAA5B,UAAA4B,EAAA,QAAAX,2BAAAW,EAAA,QAAAlB,oBAAAkB,EAAA,QAAAb,SAAAa,EAAA,QAAAL,UAAAK,EAAA,QAAAgR,kBAAA;EAGA/M,MAAApG,SAAQ2C,KAAK+Q,OAAAhS,UAAA;GACX,MAAAiS,QAAkC;IAAAhU,SACvB8D;IAAG/B;IAAAjB,UAEFiB,QAAQ,IAAI1B,SAAS0B,QAAQ,EAAE,CAAArC,KAA/B;IAA0CmB,gBACpCiT,aAAahQ,MAAGpE,EAAG;IAACiC;IAAAC;IAAAC;IAAAT;IAAAE;IAAAE;IAAAQ,mBAOjB2Q,YAAY7O,KAAG;IAAC7B,mBACjBC,aAAcmR,qBAAqBvP,OAAK5B,QAAQ;IAACC,QAC3DA,QAAMgB,cAAgBW,MAAGpE,KAAzByC,SAAA8D,KAAAA;IAAiD7D,eAC1CuR,YAAY7P,KAAG;IAACzB,sBACTmR,iBAAgB9B,YAAa5N,MAAGpE,EAAG;GAC3D;GACA,IAAIkB,QAAQoT,MAAKpT,SAAUA;GAAO,OAC3BnE,QAAQqH,MAAGpE,IAAK4H,cAAc0M,KAAK,CAAC;EAAC,CAC7C;EAACxR,EAAA,MAAAhB;EAAAgB,EAAA,MAAAZ;EAAAY,EAAA,MAAAmQ;EAAAnQ,EAAA,MAAAsR;EAAAtR,EAAA,MAAAmR;EAAAnR,EAAA,MAAA6Q;EAAA7Q,EAAA,MAAAnC;EAAAmC,EAAA,MAAApB;EAAAoB,EAAA,MAAA5B;EAAA4B,EAAA,MAAAX;EAAAW,EAAA,MAAAlB;EAAAkB,EAAA,MAAAb;EAAAa,EAAA,MAAAL;EAAAK,EAAA,MAAAgR;EAAAhR,EAAA,MAAAiE;CAAA,OAAAA,MAAAjE,EAAA;CArBJ,MAAAyR,iBAAuBrX,gBACrB6J,GAqBF;CAAE,IAAAG;CAAA,IAAApE,EAAA,QAAAxB,YAAAwB,EAAA,QAAAb,OAAA;EAEsBiF,YAAA;GAGtB,IAAI,CAAC5F,UAAQ;GAKbW,OAAKuS,6BAA+B;GACpClT,SAAS;EAAC;EACXwB,EAAA,MAAAxB;EAAAwB,EAAA,MAAAb;EAAAa,EAAA,MAAAoE;CAAA,OAAAA,MAAApE,EAAA;CAVD,MAAA2R,kBAAwBvN;CAUtB,IAAA6H;CAAA,IAAAjM,EAAA,QAAAnC,YAAAmC,EAAA,QAAA7B,OAAA;EAEoB8N,OAAA2F,cAAA;GAGpBzT,QAAQ;IAAA,GAAKX;IAAOc,UAAYT,SAAQgU,GAAI,EAAM,CAAC,EAAA3U,MAAnB;GAA4B,CAAC;EAAC;EAC/D8C,EAAA,MAAAnC;EAAAmC,EAAA,MAAA7B;EAAA6B,EAAA,MAAAiM;CAAA,OAAAA,MAAAjM,EAAA;CAJD,MAAA8R,gBAAsB7F;CAIpB,IAAAwB;CAAA,IAAAzN,EAAA,QAAAnC,UAAA;EAEa4P,MAAA5P,SAAQgU,GAAI,EAAM,CAAC,EAAA3U,MAAnB;EAA2B8C,EAAA,MAAAnC;EAAAmC,EAAA,MAAAyN;CAAA,OAAAA,MAAAzN,EAAA;CAA1C,MAAA+R,SAAetE;CACf,MAAAuE,YAAkB,CAAC,CAACxT;CACpB,MAAAyT,mBAAyB,CAAC,CAACvT;CAAgB,IAAAmP;CAAA,IAAA7N,EAAA,QAAA+R,UAAA/R,EAAA,QAAAb,OAAA;EAGvC0O,MAAA1O,SAAA;GAAA,GACKA;GAAK6N,UACCkF,cACP/S,MAAK6N,QAAS;IAAA,GAAKxP;IAAOc,UAAYd,UAAOc,YAAPyT;GAA2B,CAAC;GAAClL,QAC9DsL,cACLhT,MAAK0H,MAAO;IAAA,GAAKrJ;IAAOc,UAAYd,UAAOc,YAAPyT;GAA2B,CAAC;EACpE;EAAC/R,EAAA,MAAA+R;EAAA/R,EAAA,MAAAb;EAAAa,EAAA,MAAA6N;CAAA,OAAAA,MAAA7N,EAAA;CARL,MAAAoS,gBAEIvE;CAaW,MAAAC,MAAAhQ,aAAAkU;CAAsB,IAAAjE;CAAA,IAAA/N,EAAA,QAAAhB,qBAAAgB,EAAA,QAAAoS,iBAAApS,EAAA,QAAA2R,mBAAA3R,EAAA,QAAA8R,iBAAA9R,EAAA,QAAAlC,aAAAkC,EAAA,QAAA9B,kBAAA8B,EAAA,QAAA8N,KAAA;EAFnCC,MAAArM,uBAAuB;GAAApE,MACf;GAAQqE,WACHmM;GAAsBhQ;GAAAI;GAAAM,UAGvBmT;GAAe9P,QACjBiQ;GAAa3S,OACdiT;GAAapT;EAEtB,CAAC;EAACgB,EAAA,MAAAhB;EAAAgB,EAAA,MAAAoS;EAAApS,EAAA,MAAA2R;EAAA3R,EAAA,MAAA8R;EAAA9R,EAAA,MAAAlC;EAAAkC,EAAA,MAAA9B;EAAA8B,EAAA,MAAA8N;EAAA9N,EAAA,MAAA+N;CAAA,OAAAA,MAAA/N,EAAA;CAVJ,MAAA8B,iBAAuBxH,kBACrByT,GAUF;CAAE,IAAAsE;CAAA,IAAArS,EAAA,QAAAsH,OAAAC,IAAA,2BAAA,GAAA;EAEA8K,MAAA3V,kBAAkBM,iBAAiB;EAACgD,EAAA,MAAAqS;CAAA,OAAAA,MAAArS,EAAA;CADtC,MAAAsS,oBAA0BhY,kBACxB+X,GACF;CAEA,MAAAE,WAAiB,CAAC,CAACpT;CACnB,MAAAqT,cAAoB,CAAC,CAACpT;CACtB,MAAAqT,UAAgB,CAAC,CAACrU;CAClB,MAAAsU,YAAkB,CAAC,CAACrU;CACpB,MAAAsU,iBAAuB,CAAC,CAAC3T;CACzB,MAAA4T,cAAoB,CAAC,CAAC3T;CACtB,MAAA4T,YAAkB,CAAC,CAAC3T;CAAc,IAAA4T;CAAA,IAAA9S,EAAA,QAAAyR,eAAAzT,OAAA;EAEV8U,MAAArB,eAAczT,MAAMwC,IAAKuS,MAG7C;EAAC/S,EAAA,MAAAyR,eAAAzT;EAAAgC,EAAA,MAAA8S;CAAA,OAAAA,MAAA9S,EAAA;CAHH,MAAAgT,gBAAsBF;CAMX,MAAAG,MAAApV,SAAQyE,WAAY,KAApB,CAA0BvE;CAAS,IAAAmV;CAAA,IAAAlT,EAAA,QAAA2S,kBAAA3S,EAAA,QAAAwS,eAAAxS,EAAA,QAAAgS,aAAAhS,EAAA,QAAAyS,WAAAzS,EAAA,QAAA4S,eAAA5S,EAAA,QAAAuS,YAAAvS,EAAA,QAAAiS,oBAAAjS,EAAA,QAAA0S,aAAA1S,EAAA,QAAA6S,WAAA;EAI9BK,MAAA;GAAAC,MACNV;GAAOnO,QACL;GAAKE,QACLkO;GAASU,eACFnB;GAAgBvI,QACvBsI;GAASrS,QACTkT;GAAS/R,aACJ6R;GAAcjT,UACjBkT;GAAWS,OACd;GAAK3P,gBACI8O;GAAWc,uBACJ;GAAKC,eACb;GAAKxI,WACT;GAAK5L,OACToT;EACT;EAACvS,EAAA,MAAA2S;EAAA3S,EAAA,MAAAwS;EAAAxS,EAAA,MAAAgS;EAAAhS,EAAA,MAAAyS;EAAAzS,EAAA,MAAA4S;EAAA5S,EAAA,MAAAuS;EAAAvS,EAAA,MAAAiS;EAAAjS,EAAA,MAAA0S;EAAA1S,EAAA,MAAA6S;EAAA7S,EAAA,MAAAkT;CAAA,OAAAA,MAAAlT,EAAA;CAAA,IAAAwT;CAAA,IAAAxT,EAAA,QAAA+P,aAAA;EAEMyD,MAAAzD,eAAA,CAAgB;EAAC/P,EAAA,MAAA+P;EAAA/P,EAAA,MAAAwT;CAAA,OAAAA,MAAAxT,EAAA;CAAA,IAAAyT;CAAA,IAAAzT,EAAA,QAAA8B,eAAA9D,SAAAgC,EAAA,QAAA/B,UAAA+B,EAAA,QAAAjC,aAAAiC,EAAA,QAAAlC,aAAAkC,EAAA,QAAAgT,iBAAAhT,EAAA,QAAAL,UAAAK,EAAA,QAAAiT,OAAAjT,EAAA,QAAAkT,OAAAlT,EAAA,QAAAwT,KAAA;EAtBnBC,MAAA;GAAA9I,SACIsI;GAAmCS,YAChC;GAAK3V;GAAAD;GAAA6V,cAGHT;GAebrV,UACSmV;GAAahV,OAChBwV;GAAiBI,aACX5W;GAAiBiB;GAAA0B;GAAA0T,OAGvB5P,KAAAA;GAASV,UACNjB,eAAc9D;EAC1B;EAACgC,EAAA,MAAA8B,eAAA9D;EAAAgC,EAAA,MAAA/B;EAAA+B,EAAA,MAAAjC;EAAAiC,EAAA,MAAAlC;EAAAkC,EAAA,MAAAgT;EAAAhT,EAAA,MAAAL;EAAAK,EAAA,MAAAiT;EAAAjT,EAAA,MAAAkT;EAAAlT,EAAA,MAAAwT;EAAAxT,EAAA,MAAAyT;CAAA,OAAAA,MAAAzT,EAAA;CAlCH,MAAAhC,QAMEyV;CA+CC,IAAAI;CAAA,IAAA7T,EAAA,QAAAhC,OAAA;EAGS6V,YAAM7V;EAAKgC,EAAA,MAAAhC;EAAAgC,EAAA,MAAA6T;CAAA,OAAAA,MAAA7T,EAAA;CAAA,IAAA8T;CAAA,IAAA9T,EAAA,QAAA8B,eAAAoB,SAAA;EACX4Q,YAAMhS,eAAcoB;EAAQlD,EAAA,MAAA8B,eAAAoB;EAAAlD,EAAA,MAAA8T;CAAA,OAAAA,MAAA9T,EAAA;CAAA,IAAA+T;CAAA,IAAA/T,EAAA,QAAAsS,mBAAA;EACzByB,YAAMzB,kBAAiBpP;EAAQlD,EAAA,MAAAsS;EAAAtS,EAAA,MAAA+T;CAAA,OAAAA,MAAA/T,EAAA;CAAA,IAAAgU;CAAA,IAAAhU,EAAA,QAAAnC,YAAAmC,EAAA,QAAA7B,SAAA6B,EAAA,QAAAb,OAAA;EACpC6U,OAAAC,cAAA;GACN,MAAAC,gBACE,OAAO1W,cAAY,WAAnB;IAAAoP,2BAEiB,IAAIC,KAAK;IAACvO,UACXT,SAAQgU,GAAI,EAAM,CAAC,EAAA3U,MAAnB;IAA2BqE,UAC3B;IAAIqH,WACH,CAAC;IAACpG,MACP;IAAMjC,SACH,CAAC;KAAAjD,MAAQ;KAAMiL,MAAQ/K;IAAQ,CAAC;IAACsD,aAC7B,CAAA;IAAE2B,UACL,EAAAsK,QAAU,CAAC,EAAE;GAezB,IAxBJ;IAAAH,WAYiBpP,UAAOoP,6BAAP,IAAyBC,KAAK;IAACvO,UAExCd,UAAOc,aAAcmF,KAAAA,IAChB5F,SAAQgU,GAAI,EAAM,CAAC,EAAA3U,MAAnB,OACDM,UAAOc;IAASiD,UACZ/D,UAAO+D,YAAP;IAAwBiB,MAC5BhF,UAAOgF,QAAP;IAAsBjC,SACnB/C,UAAO+C;IAAQO,aACXtD,UAAOsD,eAAP,CAAA;IAAyB2B,UAC5BjF,UAAOiF,YAAP,EAAAsK,QAA8B,CAAC,EAAE;IAACnE,WACjCpL,UAAOoL,aAAP,CAAsB;IAACkE,UACxBtP,UAAOsP;GACnB;GACN,IAAI3N,OACFA,MAAK6N,QAASkH,aAAa;QAE3B/V,QAAQ+V,aAAa;EACtB;EACFlU,EAAA,MAAAnC;EAAAmC,EAAA,MAAA7B;EAAA6B,EAAA,MAAAb;EAAAa,EAAA,MAAAgU;CAAA,OAAAA,MAAAhU,EAAA;CAAA,IAAAmU;CAAA,IAAAnU,EAAA,QAAAzB,YAAA;EAES4V,YAAA;GACR5V,aAAa;EAAC;EACfyB,EAAA,MAAAzB;EAAAyB,EAAA,MAAAmU;CAAA,OAAAA,MAAAnU,EAAA;CAAA,IAAAoU;CAAA,IAAApU,EAAA,QAAAvB,UAAA;EACU2V,YAAA;GACT,IAAI,CAAC3V,UACH,MAAM,IAAI0C,MACR,+DACF;GACF1C,SAAS;EAAC;EACXuB,EAAA,MAAAvB;EAAAuB,EAAA,MAAAoU;CAAA,OAAAA,MAAApU,EAAA;CAAA,IAAAqU;CAAA,IAAArU,EAAA,QAAAtB,iBAAA;EAEG2V,MAAA3V,mBAAA,EAAA4V,wBAA6C5V,gBAAgB;EAACsB,EAAA,MAAAtB;EAAAsB,EAAA,MAAAqU;CAAA,OAAAA,MAAArU,EAAA;CAAA,IAAAuU;CAAA,IAAAvU,EAAA,QAAAjB,qBAAA;EAC7CwV,OAAAC,YAAA;GACnB,IAAI,CAACzV,qBACH,MAAM,IAAIoC,MACR,sFACF;GACFpC,oBAAoBf,OAAK;EAAC;EAC3BgC,EAAA,MAAAjB;EAAAiB,EAAA,OAAAuU;CAAA,OAAAA,MAAAvU,EAAA;CAAA,IAAAyU;CAAA,IAAAzU,EAAA,SAAAyR,gBAAA;EAKQgD,OAAA7Q,aAAA;GACP,IAAI,QAAQA,UAAQ,OACX6N,eAAc5N,IAAK,EAAAM,KAAOP,SAAQ1G,GAAI,CAAC;GAC/C,OACMuU,eAAc5N,IAAKD,QAAQ;EAAC;EACpC5D,EAAA,OAAAyR;EAAAzR,EAAA,OAAAyU;CAAA,OAAAA,MAAAzU,EAAA;CAAA,IAAA0U;CAAA,IAAA1U,EAAA,SAAA2R,mBAAA3R,EAAA,SAAAgR,iBAAA/B,QAAAjP,EAAA,SAAA6T,OAAA7T,EAAA,SAAA8T,OAAA9T,EAAA,SAAA+T,OAAA/T,EAAA,SAAAgU,OAAAhU,EAAA,SAAAmU,OAAAnU,EAAA,SAAAoU,OAAApU,EAAA,SAAAqU,OAAArU,EAAA,SAAAuU,OAAAvU,EAAA,SAAAyU,KAAA;EAlEIC,MAAA;GAAArQ,UACKwP;GAAW9Q,UACX+Q;GAA4BF,aACzBG;GAA+BY,QACpCX;GAgCPY,eACcC;GAAQ/H,UACbqH;GAETW,WACUV;GAMVW,WACUpD;GAAe,GACtB0C;GAA8DW,qBAC7CT;GAMpBU,iBACgBC;GAAiCC,QAC1CC;GAAwBC,QACxBC;GAAQpH,OACTqH;GAAQ/X,SACNiX;GAKR/P,cACasM,iBAAgB/B;GAAKuG,cACrBC;GAAQC,iBACLC;GAAQC,gBACTC;GAAOC,sBACDC;GAAcC,WACzBC;GAAQC,aACNC;EACf;EAACnW,EAAA,OAAA2R;EAAA3R,EAAA,OAAAgR,iBAAA/B;EAAAjP,EAAA,OAAA6T;EAAA7T,EAAA,OAAA8T;EAAA9T,EAAA,OAAA+T;EAAA/T,EAAA,OAAAgU;EAAAhU,EAAA,OAAAmU;EAAAnU,EAAA,OAAAoU;EAAApU,EAAA,OAAAqU;EAAArU,EAAA,OAAAuU;EAAAvU,EAAA,OAAAyU;EAAAzU,EAAA,OAAA0U;CAAA,OAAAA,MAAA1U,EAAA;CAAA,OA1EM0U;AA0EN;AAGH,MAAa0B,iBAAiBpc,SAAS6V,iBAAiB;AAExDxV,sBAAsBwV,oBAAoBwG,QAAQC,WAAW;CAC3D,IAAI,CAACD,OAAOE,WAAWD,OAAOC,QAAQC,WAAW,MAAM;EACrD,MAAMC,gBAAgBJ,OAAOK;EAC7BL,OAAOE,UAAU1Z,iBAAiB,EAAE6Z,QAAQD,cAAc,CAAC;EAE3D,OAAOJ,OAAOK;EACdL,OAAOK,SAASnc,QAAQ;GACtBic,QAAQ;GACRG,OAAO,EAAErZ,MAAM,OAAO;GACtBuG,MAAM+S,QAAQA,IAAIL,QAAQG,OAAO,MAAM;EACzC,CAAC;CACH;CAEA,IAAI,CAACL,OAAOQ,kBAAkBP,OAAOO,eAAeL,WAAW,MAC7DH,OAAOQ,iBAAiBtc,QAAQ;EAC9Bic,QAAQ;EACRG,OAAO,EAAErZ,MAAM,OAAO;EACtBuG,MAAM+S,QAAQA,IAAIL,QAAQ7P,KAAK,MAAM;CACvC,CAAC;CAGH2P,OAAOtT,aAAaxI,QAAQ;EAC1Bic,QAAQ;EACRG,OAAO,CAAC;EACR9S,MAAM+S,QAAQA,IAAIF,OAAO3T,SAAS;CACpC,CAAC;CAED,IAAI,CAACsT,OAAOS,gBAAgBR,OAAOQ,aAAaN,WAAW,MACzDH,OAAOS,eAAera,aAAa;CAErC,IAAI,CAAC4Z,OAAOU,SAAST,OAAOS,MAAMP,WAAW,MAC3CH,OAAOU,QAAQpa,MAAM,CAAC,CAAC;CAEzB,IAAI,CAAC0Z,OAAOW,iBAAiBV,OAAOU,cAAcR,WAAW,MAC3DH,OAAOW,gBAAgBpa,cAAc;CAEvC,IAAI,CAACyZ,OAAOzC,eAAe0C,OAAO1C,YAAY4C,WAAW,MACvDH,OAAOzC,cAAcrZ,QAAQ;EAC3Bic,QAAQ;EACRG,OAAO,CAAC;EACR9S,MAAM+S,QAAQA,IAAIF,OAAO9C,YAAY;CACvC,CAAC;AAEL,CAAC;AArlCwB,SAAAqD,QAAA,CAAA;AAAA,SAAAjW,OAAA6D,YAAA;CAAA,OAuCnB5K,QACE4K,WAAU3H,IACVqJ,mBAAmB;EAAA1B;EAAAuB,UAEP6Q;CACZ,CAAC,CACH;AAAC;AA7CkB,SAAA1S,SAAA,CAAA;AA2VS,SAAA+E,OAAA5L,MAAA;CAAA,OAoCVA,KAAIJ,SAAU;AAAM;AApCV,SAAAiM,OAAA2N,QAAA;CAAA,OAqCbxZ,OAAI6K;AAAK;AArCI,SAAAuB,OAAAqN,KAAA;CAAA,OAwEXxN,IAAChM,OAAOL,SAAU;AAAU;AAxEjB,SAAAsQ,OAAAwJ,SAAA;CAuSxB5J,QAAO1H,MAAO,+CAA+CA,OAAK;AAAC;AAvS3C,SAAAuI,SAAA,CAAA;AAAA,SAAAE,SAAA,CAAA;AA+YR,SAAAwE,OAAAsE,GAAA5W,KAAA6W,KAAA;CAAA,OA2L2C;EAAA,GAC5DD;EAACxU,QACIpC,QAAQ6W,IAAGhV,SAAU;CAC/B;AAAC;AA9LqB,SAAAuS,SAAA,CAAA;AAAA,SAAAK,UAAA;CAAA,OA0SE;EAAA6B,OAAS,CAAC;EAACQ,QAAU,CAAC;CAAE;AAAC;AA1S3B,SAAAnC,UAAA;CAAA,OA2SP,EAAAvX,UAAY,CAAA,EAAG;AAAC;AA3ST,SAAAyX,UAAA,CAAA;AAAA,SAAAC,UAAA,CAAA;AAAA,SAAAE,UAAA,CAAA;AAAA,SAAAE,UAAA,CAAA;AAAA,SAAAE,UAAA;CAAA,OAuTA;AAAC;AAvTD,SAAA2B,UAAA,CAAA;AAAA,SAAAzB,UAAA;CAAA,OAwTMyB;AAAQ;AAxTd,SAAAvB,UAAA,CAAA;AAAA,SAAAE,UAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context-client.d.ts","names":[],"sources":["../../../src/store/clients/model-context-client.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"model-context-client.d.ts","names":[],"sources":["../../../src/store/clients/model-context-client.ts"],"mappings":";;cAwDa,0CAAY,SAAA"}
|
|
@@ -2,13 +2,14 @@ import { CompositeContextProvider } from "../../utils/composite-context-provider
|
|
|
2
2
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
3
|
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
import { resource } from "@assistant-ui/tap";
|
|
5
|
+
import { shallowEqual } from "@assistant-ui/store/internal";
|
|
5
6
|
//#region src/store/clients/model-context-client.ts
|
|
6
7
|
const EMPTY_TOOL_NAMES = [];
|
|
7
8
|
const INITIAL_STATE = {
|
|
8
9
|
modelName: void 0,
|
|
9
10
|
toolNames: EMPTY_TOOL_NAMES
|
|
10
11
|
};
|
|
11
|
-
const toolNamesEqual = (a, b) => a === b || a
|
|
12
|
+
const toolNamesEqual = (a, b) => a === b || shallowEqual(a, b);
|
|
12
13
|
const deriveState = (composite, prev) => {
|
|
13
14
|
const ctx = composite.getModelContext();
|
|
14
15
|
const modelName = ctx.config?.modelName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context-client.js","names":["useEffect","useMemo","useState","resource","ClientOutput","CompositeContextProvider","ModelContextState","EMPTY_TOOL_NAMES","INITIAL_STATE","modelName","undefined","toolNames","toolNamesEqual","a","b","
|
|
1
|
+
{"version":3,"file":"model-context-client.js","names":["useEffect","useMemo","useState","resource","ClientOutput","CompositeContextProvider","ModelContextState","shallowEqual","EMPTY_TOOL_NAMES","INITIAL_STATE","modelName","undefined","toolNames","toolNamesEqual","a","b","deriveState","composite","prev","ctx","getModelContext","config","keys","tools","Object","sort","length","useModelContext","$","_c","t0","Symbol","for","t1","state","setState","t2","t3","subscribe","prev_0","t4","t5","t6","t7","callback","provider","registerModelContextProvider","t8","getState","register","ModelContext"],"sources":["../../../src/store/clients/model-context-client.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { CompositeContextProvider } from \"../../utils/composite-context-provider\";\nimport type { ModelContextState } from \"../scopes/model-context\";\nimport { shallowEqual } from \"@assistant-ui/store/internal\";\n\nconst EMPTY_TOOL_NAMES: readonly string[] = [];\n\nconst INITIAL_STATE: ModelContextState = {\n modelName: undefined,\n toolNames: EMPTY_TOOL_NAMES,\n};\n\nconst toolNamesEqual = (a: readonly string[], b: readonly string[]): boolean =>\n a === b || shallowEqual(a, b);\n\nconst deriveState = (\n composite: CompositeContextProvider,\n prev: ModelContextState,\n): ModelContextState => {\n const ctx = composite.getModelContext();\n const modelName = ctx.config?.modelName;\n const keys = ctx.tools ? Object.keys(ctx.tools).sort() : EMPTY_TOOL_NAMES;\n const toolNames = keys.length ? keys : EMPTY_TOOL_NAMES;\n\n if (modelName === prev.modelName && toolNamesEqual(toolNames, prev.toolNames))\n return prev;\n\n return { modelName, toolNames };\n};\n\nconst useModelContext = (): ClientOutput<\"modelContext\"> => {\n const composite = useMemo(() => new CompositeContextProvider(), []);\n const [state, setState] = useState<ModelContextState>(() =>\n deriveState(composite, INITIAL_STATE),\n );\n\n useEffect(() => {\n // The composite is an external store; this catches the snapshot up for\n // providers registered between render and subscribe.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setState((prev) => deriveState(composite, prev));\n return composite.subscribe(() => {\n setState((prev) => deriveState(composite, prev));\n });\n }, [composite]);\n\n return {\n getState: () => deriveState(composite, state),\n getModelContext: () => composite.getModelContext(),\n subscribe: (callback) => composite.subscribe(callback),\n register: (provider) => composite.registerModelContextProvider(provider),\n };\n};\n\nexport const ModelContext = resource(useModelContext);\n"],"mappings":";;;;;;AAOA,MAAMQ,mBAAsC,CAAA;AAE5C,MAAMC,gBAAmC;CACvCC,WAAWC,KAAAA;CACXC,WAAWJ;AACb;AAEA,MAAMK,kBAAkBC,GAAsBC,MAC5CD,MAAMC,KAAKR,aAAaO,GAAGC,CAAC;AAE9B,MAAMC,eACJC,WACAC,SACsB;CACtB,MAAMC,MAAMF,UAAUG,gBAAgB;CACtC,MAAMV,YAAYS,IAAIE,QAAQX;CAC9B,MAAMY,OAAOH,IAAII,QAAQC,OAAOF,KAAKH,IAAII,KAAK,CAAC,CAACE,KAAK,IAAIjB;CACzD,MAAMI,YAAYU,KAAKI,SAASJ,OAAOd;CAEvC,IAAIE,cAAcQ,KAAKR,aAAaG,eAAeD,WAAWM,KAAKN,SAAS,GAC1E,OAAOM;CAET,OAAO;EAAER;EAAWE;CAAU;AAChC;AAEA,MAAMe,wBAAkB;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACUF,KAAA,IAAIzB,yBAAyB;EAACuB,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAA9D,MAAAX,YAAgCa;CAAoC,IAAAG;CAAA,IAAAL,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACdC,WACpDjB,YAAYC,WAAWR,aAAa;EAACmB,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CADvC,MAAA,CAAAM,OAAAC,YAA0BjC,SAA4B+B,EAEtD;CAAE,IAAAG;CAAA,IAAAC;CAAA,IAAAT,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAEQI,WAAA;GAIRD,UAASjB,SAAUF,YAAYC,WAAWC,IAAI,CAAC;GAAC,OACzCD,UAASqB,gBAAW;IACzBH,UAASI,WAAUvB,YAAYC,WAAWC,MAAI,CAAC;GAAC,CACjD;EAAC;EACDmB,KAAA,CAACpB,SAAS;EAACW,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAA;EAAAD,KAAAR,EAAA;EAAAS,KAAAT,EAAA;CAAA;CARd5B,UAAUoC,IAQPC,EAAW;CAAC,IAAAG;CAAA,IAAAZ,EAAA,OAAAM,OAAA;EAGHM,WAAMxB,YAAYC,WAAWiB,KAAK;EAACN,EAAA,KAAAM;EAAAN,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAf,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAC5BS,WAAMxB,UAASG,gBAAiB;EACtCsB,MAAAE,aAAc3B,UAASqB,UAAWM,QAAQ;EAC3CD,MAAAE,aAAc5B,UAAS6B,6BAA8BD,QAAQ;EAACjB,EAAA,KAAAa;EAAAb,EAAA,KAAAc;EAAAd,EAAA,KAAAe;CAAA,OAAA;EAAAF,KAAAb,EAAA;EAAAc,KAAAd,EAAA;EAAAe,KAAAf,EAAA;CAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAY,IAAA;EAJnEO,KAAA;GAAAC,UACKR;GAAmCpB,iBAC5BqB;GAAiCH,WACvCI;GAA2CO,UAC5CN;EACZ;EAACf,EAAA,KAAAY;EAAAZ,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OALMmB;AAKN;AAGH,MAAaG,eAAe/C,SAASwB,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-thread-list.d.ts","names":[],"sources":["../../../src/store/clients/single-thread-list.ts"],"mappings":";;KAuCK;EACH,QAAQ;;
|
|
1
|
+
{"version":3,"file":"single-thread-list.d.ts","names":[],"sources":["../../../src/store/clients/single-thread-list.ts"],"mappings":";;KAuCK;EACH,QAAQ;;cA+EG,8CAAgB,SAAA,0BAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { useClientResource } from "@assistant-ui/store/client";
|
|
1
2
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
3
|
import { useState } from "@assistant-ui/tap/react-shim";
|
|
3
4
|
import { resource } from "@assistant-ui/tap";
|
|
4
|
-
import { useClientResource } from "@assistant-ui/store/client";
|
|
5
5
|
//#region src/store/clients/single-thread-list.ts
|
|
6
6
|
const RESOLVED_PROMISE = Promise.resolve();
|
|
7
7
|
const THREAD_ID = "default";
|
|
@@ -77,6 +77,7 @@ const useSingleThreadList = (t0) => {
|
|
|
77
77
|
mainThreadId: THREAD_ID,
|
|
78
78
|
newThreadId: null,
|
|
79
79
|
isLoading: false,
|
|
80
|
+
loadError: void 0,
|
|
80
81
|
isLoadingMore: false,
|
|
81
82
|
hasMore: false,
|
|
82
83
|
threadIds: t2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-thread-list.js","names":["useMemo","useState","resource","ClientElement","ClientOutput","useClientResource","RESOLVED_PROMISE","Promise","resolve","THREAD_ID","useSingleThreadListItem","t0","$","_c","isRunning","custom","setCustom","t1","getState","id","remoteId","undefined","externalId","title","status","switchTo","_temp","rename","_temp2","updateCustom","archive","_temp3","unarchive","_temp4","delete","_temp5","generateTitle","_temp6","initialize","_temp7","detach","_temp8","SingleThreadListItem","SingleThreadListProps","thread","useSingleThreadList","threadClient","state","itemClient","t2","t3","Symbol","for","t4","t5","mainThreadId","newThreadId","isLoading","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t6","t7","methods","unstable_refetchThread","t8","selector","index","archived","Error","JSON","stringify","t9","selector_0","t10","switchToThread","_temp9","switchToNewThread","_temp0","getLoadThreadsPromise","_temp1","reload","_temp10","reloadMainThread","loadMore","_temp11","item","SingleThreadList"],"sources":["../../../src/store/clients/single-thread-list.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport { useClientResource } from \"@assistant-ui/store/client\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\nconst THREAD_ID = \"default\";\n\nconst useSingleThreadListItem = ({\n isRunning,\n}: {\n isRunning: boolean;\n}): ClientOutput<\"threadListItem\"> => {\n const [custom, setCustom] = useState<Record<string, unknown> | undefined>();\n\n return {\n getState: () => ({\n id: THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n status: \"regular\",\n custom,\n isRunning,\n }),\n switchTo: () => {},\n rename: () => {},\n updateCustom: setCustom,\n archive: () => {},\n unarchive: () => {},\n delete: () => {},\n generateTitle: () => {},\n initialize: async () => ({ remoteId: THREAD_ID, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst SingleThreadListItem = resource(useSingleThreadListItem);\n\ntype SingleThreadListProps = {\n thread: ClientElement<\"thread\">;\n};\n\n/**\n * A minimal threads scope that wraps a single thread.\n * Automatically provided by ExternalThread when no threads scope exists.\n * Mounts the provided thread resource element.\n */\nconst useSingleThreadList = ({\n thread,\n}: SingleThreadListProps): ClientOutput<\"threads\"> => {\n const threadClient = useClientResource(thread);\n const itemClient = useClientResource(\n SingleThreadListItem({ isRunning: threadClient.state.isRunning }),\n );\n\n const state = useMemo(\n () => ({\n mainThreadId: THREAD_ID,\n newThreadId: null,\n isLoading: false,\n isLoadingMore: false,\n hasMore: false,\n threadIds: [THREAD_ID],\n archivedThreadIds: [],\n threadItems: [itemClient.state],\n main: threadClient.state,\n }),\n [itemClient.state, threadClient.state],\n );\n\n return {\n getState: () => state,\n switchToThread: () => {\n throw new Error(\"SingleThreadList does not support switchToThread\");\n },\n switchToNewThread: () => {\n throw new Error(\"SingleThreadList does not support switchToNewThread\");\n },\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n threadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (\n selector !== \"main\" &&\n !(\n typeof selector === \"object\" &&\n \"id\" in selector &&\n selector.id === THREAD_ID\n ) &&\n !(\n typeof selector === \"object\" &&\n \"index\" in selector &&\n selector.index === 0 &&\n // Index selectors address their archived/regular subset, and the\n // archived subset here is always empty.\n !selector.archived\n )\n ) {\n throw new Error(\n `SingleThreadList: unknown item selector ${JSON.stringify(selector)}`,\n );\n }\n return itemClient.methods;\n },\n thread: (selector) => {\n if (selector !== \"main\" && selector !== THREAD_ID) {\n throw new Error(\n `SingleThreadList: unknown thread selector ${JSON.stringify(selector)}`,\n );\n }\n return threadClient.methods;\n },\n };\n};\n\nexport const SingleThreadList = resource(useSingleThreadList);\n"],"mappings":";;;;;AAKA,MAAMM,mBAAmBC,QAAQC,QAAQ;AACzC,MAAMC,YAAY;AAElB,MAAMC,2BAA0BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,cAAAH;CAK/B,MAAA,CAAAI,QAAAC,aAA4Bf,SAA8C;CAAE,IAAAgB;CAAA,IAAAL,EAAA,OAAAG,UAAAH,EAAA,OAAAE,WAAA;EAErEG,KAAA;GAAAC,iBACY;IAAAC,IACXV;IAASW,UACHC,KAAAA;IAASC,YACPD,KAAAA;IAASE,OACdF,KAAAA;IAASG,QACR;IAAST;IAAAD;GAGnB;GAAEW,UACQC;GAAQC,QACVC;GAAQC,cACFb;GAASc,SACdC;GAAQC,WACNC;GAAQC,QACXC;GAAQC,eACDC;GAAQC,YACXC;GAA4DC,QAChEC;EACV;EAAC7B,EAAA,KAAAG;EAAAH,EAAA,KAAAE;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,OAnBMK;AAmBN;AAGH,MAAMyB,uBAAuBxC,SAASQ,uBAAuB;;;;;;AAW7D,MAAMmC,uBAAsBlC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAA+B,WAAAjC;CAG3B,MAAAmC,eAAqBzC,kBAAkBuC,MAAM;CAAE,IAAA3B;CAAA,IAAAL,EAAA,OAAAkC,aAAAC,MAAAjC,WAAA;EAE7CG,KAAAyB,qBAAqB,EAAA5B,WAAagC,aAAYC,MAAMjC,UAAW,CAAC;EAACF,EAAA,KAAAkC,aAAAC,MAAAjC;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CADnE,MAAAoC,aAAmB3C,kBACjBY,EACF;CAAE,IAAAgC;CAAA,IAAAC;CAAA,IAAAtC,EAAA,OAAAuC,OAAAC,IAAA,2BAAA,GAAA;
|
|
1
|
+
{"version":3,"file":"single-thread-list.js","names":["useMemo","useState","resource","ClientElement","ClientOutput","useClientResource","RESOLVED_PROMISE","Promise","resolve","THREAD_ID","useSingleThreadListItem","t0","$","_c","isRunning","custom","setCustom","t1","getState","id","remoteId","undefined","externalId","title","status","switchTo","_temp","rename","_temp2","updateCustom","archive","_temp3","unarchive","_temp4","delete","_temp5","generateTitle","_temp6","initialize","_temp7","detach","_temp8","SingleThreadListItem","SingleThreadListProps","thread","useSingleThreadList","threadClient","state","itemClient","t2","t3","Symbol","for","t4","t5","mainThreadId","newThreadId","isLoading","loadError","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t6","t7","methods","unstable_refetchThread","t8","selector","index","archived","Error","JSON","stringify","t9","selector_0","t10","switchToThread","_temp9","switchToNewThread","_temp0","getLoadThreadsPromise","_temp1","reload","_temp10","reloadMainThread","loadMore","_temp11","item","SingleThreadList"],"sources":["../../../src/store/clients/single-thread-list.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport { useClientResource } from \"@assistant-ui/store/client\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\nconst THREAD_ID = \"default\";\n\nconst useSingleThreadListItem = ({\n isRunning,\n}: {\n isRunning: boolean;\n}): ClientOutput<\"threadListItem\"> => {\n const [custom, setCustom] = useState<Record<string, unknown> | undefined>();\n\n return {\n getState: () => ({\n id: THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n status: \"regular\",\n custom,\n isRunning,\n }),\n switchTo: () => {},\n rename: () => {},\n updateCustom: setCustom,\n archive: () => {},\n unarchive: () => {},\n delete: () => {},\n generateTitle: () => {},\n initialize: async () => ({ remoteId: THREAD_ID, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst SingleThreadListItem = resource(useSingleThreadListItem);\n\ntype SingleThreadListProps = {\n thread: ClientElement<\"thread\">;\n};\n\n/**\n * A minimal threads scope that wraps a single thread.\n * Automatically provided by ExternalThread when no threads scope exists.\n * Mounts the provided thread resource element.\n */\nconst useSingleThreadList = ({\n thread,\n}: SingleThreadListProps): ClientOutput<\"threads\"> => {\n const threadClient = useClientResource(thread);\n const itemClient = useClientResource(\n SingleThreadListItem({ isRunning: threadClient.state.isRunning }),\n );\n\n const state = useMemo(\n () => ({\n mainThreadId: THREAD_ID,\n newThreadId: null,\n isLoading: false,\n loadError: undefined,\n isLoadingMore: false,\n hasMore: false,\n threadIds: [THREAD_ID],\n archivedThreadIds: [],\n threadItems: [itemClient.state],\n main: threadClient.state,\n }),\n [itemClient.state, threadClient.state],\n );\n\n return {\n getState: () => state,\n switchToThread: () => {\n throw new Error(\"SingleThreadList does not support switchToThread\");\n },\n switchToNewThread: () => {\n throw new Error(\"SingleThreadList does not support switchToNewThread\");\n },\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n threadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (\n selector !== \"main\" &&\n !(\n typeof selector === \"object\" &&\n \"id\" in selector &&\n selector.id === THREAD_ID\n ) &&\n !(\n typeof selector === \"object\" &&\n \"index\" in selector &&\n selector.index === 0 &&\n // Index selectors address their archived/regular subset, and the\n // archived subset here is always empty.\n !selector.archived\n )\n ) {\n throw new Error(\n `SingleThreadList: unknown item selector ${JSON.stringify(selector)}`,\n );\n }\n return itemClient.methods;\n },\n thread: (selector) => {\n if (selector !== \"main\" && selector !== THREAD_ID) {\n throw new Error(\n `SingleThreadList: unknown thread selector ${JSON.stringify(selector)}`,\n );\n }\n return threadClient.methods;\n },\n };\n};\n\nexport const SingleThreadList = resource(useSingleThreadList);\n"],"mappings":";;;;;AAKA,MAAMM,mBAAmBC,QAAQC,QAAQ;AACzC,MAAMC,YAAY;AAElB,MAAMC,2BAA0BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,cAAAH;CAK/B,MAAA,CAAAI,QAAAC,aAA4Bf,SAA8C;CAAE,IAAAgB;CAAA,IAAAL,EAAA,OAAAG,UAAAH,EAAA,OAAAE,WAAA;EAErEG,KAAA;GAAAC,iBACY;IAAAC,IACXV;IAASW,UACHC,KAAAA;IAASC,YACPD,KAAAA;IAASE,OACdF,KAAAA;IAASG,QACR;IAAST;IAAAD;GAGnB;GAAEW,UACQC;GAAQC,QACVC;GAAQC,cACFb;GAASc,SACdC;GAAQC,WACNC;GAAQC,QACXC;GAAQC,eACDC;GAAQC,YACXC;GAA4DC,QAChEC;EACV;EAAC7B,EAAA,KAAAG;EAAAH,EAAA,KAAAE;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,OAnBMK;AAmBN;AAGH,MAAMyB,uBAAuBxC,SAASQ,uBAAuB;;;;;;AAW7D,MAAMmC,uBAAsBlC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAA+B,WAAAjC;CAG3B,MAAAmC,eAAqBzC,kBAAkBuC,MAAM;CAAE,IAAA3B;CAAA,IAAAL,EAAA,OAAAkC,aAAAC,MAAAjC,WAAA;EAE7CG,KAAAyB,qBAAqB,EAAA5B,WAAagC,aAAYC,MAAMjC,UAAW,CAAC;EAACF,EAAA,KAAAkC,aAAAC,MAAAjC;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CADnE,MAAAoC,aAAmB3C,kBACjBY,EACF;CAAE,IAAAgC;CAAA,IAAAC;CAAA,IAAAtC,EAAA,OAAAuC,OAAAC,IAAA,2BAAA,GAAA;EAUaH,KAAA,CAACxC,SAAS;EACFyC,KAAA,CAAA;EAAEtC,EAAA,KAAAqC;EAAArC,EAAA,KAAAsC;CAAA,OAAA;EAAAD,KAAArC,EAAA;EAAAsC,KAAAtC,EAAA;CAAA;CAAA,IAAAyC;CAAA,IAAAzC,EAAA,OAAAoC,WAAAD,OAAA;EACRM,KAAA,CAACL,WAAUD,KAAM;EAACnC,EAAA,KAAAoC,WAAAD;EAAAnC,EAAA,KAAAyC;CAAA,OAAAA,KAAAzC,EAAA;CAAA,IAAA0C;CAAA,IAAA1C,EAAA,OAAAyC,MAAAzC,EAAA,OAAAkC,aAAAC,OAAA;EAT1BO,KAAA;GAAAC,cACS9C;GAAS+C,aACV;GAAIC,WACN;GAAKC,WACLrC,KAAAA;GAASsC,eACL;GAAKC,SACX;GAAKC,WACHZ;GAAWa,mBACHZ;GAAEa,aACRV;GAAkBW,MACzBlB,aAAYC;EACpB;EAACnC,EAAA,KAAAyC;EAAAzC,EAAA,KAAAkC,aAAAC;EAAAnC,EAAA,KAAA0C;CAAA,OAAAA,KAAA1C,EAAA;CAZH,MAAAmC,QACSO;CAaP,IAAAW;CAAA,IAAArD,EAAA,OAAAmC,OAAA;EAGUkB,WAAMlB;EAAKnC,EAAA,KAAAmC;EAAAnC,EAAA,MAAAqD;CAAA,OAAAA,KAAArD,EAAA;CAAA,IAAAsD;CAAA,IAAAtD,EAAA,QAAAkC,aAAAqB,SAAA;EASHD,WAChBpB,aAAYqB,QAAQC,yBAA8C,KAAlE9D;EAAmEM,EAAA,MAAAkC,aAAAqB;EAAAvD,EAAA,MAAAsD;CAAA,OAAAA,KAAAtD,EAAA;CAAA,IAAAyD;CAAA,IAAAzD,EAAA,QAAAoC,WAAAmB,SAAA;EAE/DE,MAAAC,aAAA;GACJ,IACEA,aAAa,UAAb,EAEE,OAAOA,aAAa,YACpB,QAAQA,YACRA,SAAQnD,OAAQV,cAJlB,EAOE,OAAO6D,aAAa,YACpB,WAAWA,YACXA,SAAQC,UAAW,KAFnB,CAKCD,SAAQE,WAGX,MAAM,IAAIC,MACR,2CAA2CC,KAAIC,UAAWL,QAAQ,GACpE;GACD,OACMtB,WAAUmB;EAAQ;EAC1BvD,EAAA,MAAAoC,WAAAmB;EAAAvD,EAAA,MAAAyD;CAAA,OAAAA,KAAAzD,EAAA;CAAA,IAAAgE;CAAA,IAAAhE,EAAA,QAAAkC,aAAAqB,SAAA;EACOS,MAAAC,eAAA;GACN,IAAIP,eAAa,UAAUA,eAAa7D,WACtC,MAAM,IAAIgE,MACR,6CAA6CC,KAAIC,UAAWL,UAAQ,GACtE;GACD,OACMxB,aAAYqB;EAAQ;EAC5BvD,EAAA,MAAAkC,aAAAqB;EAAAvD,EAAA,MAAAgE;CAAA,OAAAA,KAAAhE,EAAA;CAAA,IAAAkE;CAAA,IAAAlE,EAAA,QAAAqD,MAAArD,EAAA,QAAAsD,MAAAtD,EAAA,QAAAyD,MAAAzD,EAAA,QAAAgE,IAAA;EA3CIE,MAAA;GAAA5D,UACK+C;GAAWc,gBACLC;GAEfC,mBACkBC;GAElBC,uBACsBC;GAAsBC,QACrCC;GAAsBC,kBACZrB;GACmDsB,UAC3DC;GAAsBC,MAC1BrB;GAsBLzB,QACOgC;EAQV;EAAChE,EAAA,MAAAqD;EAAArD,EAAA,MAAAsD;EAAAtD,EAAA,MAAAyD;EAAAzD,EAAA,MAAAgE;EAAAhE,EAAA,MAAAkE;CAAA,OAAAA,MAAAlE,EAAA;CAAA,OA5CMkE;AA4CN;AAGH,MAAaa,mBAAmBzF,SAAS2C,mBAAmB;AA/G5B,SAAAnB,QAAA,CAAA;AAAA,SAAAE,SAAA,CAAA;AAAA,SAAAG,SAAA,CAAA;AAAA,SAAAE,SAAA,CAAA;AAAA,SAAAE,SAAA,CAAA;AAAA,SAAAE,SAAA,CAAA;AAAA,eAAAE,SAAA;CAAA,OAwBH;EAAAnB,UAAYX;EAASa,YAAcD,KAAAA;CAAU;AAAC;AAxB3C,SAAAoB,SAAA,CAAA;AAwCJ,SAAAuC,SAAA;CA2BtB,MAAM,IAAIP,MAAM,kDAAkD;AAAE;AA3B9C,SAAAS,SAAA;CA8BtB,MAAM,IAAIT,MAAM,qDAAqD;AAAE;AA9BjD,SAAAW,SAAA;CAAA,OAgCK9E;AAAgB;AAhCrB,SAAAgF,UAAA;CAAA,OAiCVhF;AAAgB;AAjCN,SAAAmF,UAAA;CAAA,OAoCRnF;AAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/clients/suggestions.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/clients/suggestions.ts"],"mappings":";;;KASY;EAEN;EAAe;EAAe;;cAsEvB,yCAAW,SAAA,8BAAA,cAAA;cAcX,+CAAiB,SAAA,8BAAA,sBAAA"}
|
|
@@ -1,14 +1,28 @@
|
|
|
1
|
+
import { useClientLookup } from "@assistant-ui/store/client";
|
|
1
2
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
|
-
import "@assistant-ui/tap/react-shim";
|
|
3
|
+
import { useMemo } from "@assistant-ui/tap/react-shim";
|
|
3
4
|
import { resource, withKey } from "@assistant-ui/tap";
|
|
4
|
-
import {
|
|
5
|
+
import { shallowEqual as shallowEqual$1 } from "@assistant-ui/store/internal";
|
|
5
6
|
//#region src/store/clients/suggestions.ts
|
|
7
|
+
const useStableSuggestionsState = (next) => {
|
|
8
|
+
const cell = useMemo(() => ({}), []);
|
|
9
|
+
const previous = cell.state;
|
|
10
|
+
const suggestions = [];
|
|
11
|
+
next.suggestions.forEach((suggestion) => {
|
|
12
|
+
const previousSuggestion = previous?.suggestions[suggestions.length];
|
|
13
|
+
suggestions.push(previousSuggestion && shallowEqual$1(previousSuggestion, suggestion) ? previousSuggestion : suggestion);
|
|
14
|
+
});
|
|
15
|
+
const state = previous && shallowEqual$1(suggestions, previous.suggestions) ? previous : { suggestions };
|
|
16
|
+
cell.state = state;
|
|
17
|
+
return state;
|
|
18
|
+
};
|
|
6
19
|
const useSuggestionClient = (state) => {
|
|
7
20
|
return { getState: () => state };
|
|
8
21
|
};
|
|
9
22
|
const SuggestionClient = resource(useSuggestionClient);
|
|
10
|
-
const useSuggestionsClient = (
|
|
23
|
+
const useSuggestionsClient = (nextState) => {
|
|
11
24
|
const $ = c(9);
|
|
25
|
+
const state = useStableSuggestionsState(nextState);
|
|
12
26
|
let t0;
|
|
13
27
|
if ($[0] !== state.suggestions) {
|
|
14
28
|
t0 = state.suggestions.map(_temp);
|
|
@@ -87,12 +101,11 @@ function _temp(suggestion, index) {
|
|
|
87
101
|
return withKey(index, SuggestionClient(suggestion), [suggestion]);
|
|
88
102
|
}
|
|
89
103
|
function _temp2(s) {
|
|
90
|
-
|
|
104
|
+
return typeof s === "string" ? {
|
|
91
105
|
title: s,
|
|
92
106
|
label: "",
|
|
93
107
|
prompt: s
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
108
|
+
} : {
|
|
96
109
|
title: s.title,
|
|
97
110
|
label: s.label,
|
|
98
111
|
prompt: s.prompt
|