@arbidocs/react 0.5.111 → 0.5.112
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/account/client.js +96 -0
- package/dist/account/client.js.map +7 -0
- package/dist/account/delete.js +70 -0
- package/dist/account/delete.js.map +7 -0
- package/dist/account/didit.js +34 -0
- package/dist/account/didit.js.map +7 -0
- package/dist/account/dismissed-tips.js +33 -0
- package/dist/account/dismissed-tips.js.map +7 -0
- package/dist/account/email.js +84 -0
- package/dist/account/email.js.map +7 -0
- package/dist/account/entitlements.js +47 -0
- package/dist/account/entitlements.js.map +7 -0
- package/dist/account/identity.js +270 -0
- package/dist/account/identity.js.map +7 -0
- package/dist/account/index.js +93 -0
- package/dist/account/index.js.map +7 -0
- package/dist/account/notifications.js +59 -0
- package/dist/account/notifications.js.map +7 -0
- package/dist/account/password.js +103 -0
- package/dist/account/password.js.map +7 -0
- package/dist/account/profile.js +116 -0
- package/dist/account/profile.js.map +7 -0
- package/dist/account/recovery.js +13 -0
- package/dist/account/recovery.js.map +7 -0
- package/dist/account/relevance.js +82 -0
- package/dist/account/relevance.js.map +7 -0
- package/dist/account/sessions.js +37 -0
- package/dist/account/sessions.js.map +7 -0
- package/dist/account/settings.js +39 -0
- package/dist/account/settings.js.map +7 -0
- package/dist/account/table-views.js +16 -0
- package/dist/account/table-views.js.map +7 -0
- package/dist/ai/AiAnswer.js +83 -0
- package/dist/ai/AiAnswer.js.map +7 -0
- package/dist/ai/AiMarkdown.js +40 -0
- package/dist/ai/AiMarkdown.js.map +7 -0
- package/dist/ai/ArtifactCanvas.js +193 -0
- package/dist/ai/ArtifactCanvas.js.map +7 -0
- package/dist/ai/CitationRenderer.js +413 -0
- package/dist/ai/CitationRenderer.js.map +7 -0
- package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
- package/dist/ai/MarkdownRenderer.js.map +7 -0
- package/dist/ai/MessageArtifactCard.js +75 -0
- package/dist/ai/MessageArtifactCard.js.map +7 -0
- package/dist/ai/PassageCard.js +79 -0
- package/dist/ai/PassageCard.js.map +7 -0
- package/dist/ai/engine.js +110 -0
- package/dist/ai/engine.js.map +7 -0
- package/dist/ai/index.js +63 -0
- package/dist/ai/index.js.map +7 -0
- package/dist/ai/markdown-base-components.js +37 -0
- package/dist/ai/markdown-base-components.js.map +7 -0
- package/dist/ai/markdown-streaming-context.js +6 -0
- package/dist/ai/markdown-streaming-context.js.map +7 -0
- package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
- package/dist/ai/normalize-citations.js.map +7 -0
- package/dist/ai/redline.js +41 -0
- package/dist/ai/redline.js.map +7 -0
- package/dist/ai/split-markdown-blocks.js +40 -0
- package/dist/ai/split-markdown-blocks.js.map +7 -0
- package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
- package/dist/ai/stored-markdown.js.map +7 -0
- package/dist/annotations/AnnotationPageOverlay.js +807 -0
- package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
- package/dist/annotations/AnnotationToolbar.js +398 -0
- package/dist/annotations/AnnotationToolbar.js.map +7 -0
- package/dist/annotations/FreezeDialog.js +170 -0
- package/dist/annotations/FreezeDialog.js.map +7 -0
- package/dist/annotations/ProductionDialog.js +354 -0
- package/dist/annotations/ProductionDialog.js.map +7 -0
- package/dist/annotations/controller.js +49 -0
- package/dist/annotations/controller.js.map +7 -0
- package/dist/annotations/freeze/browser.js +21 -0
- package/dist/annotations/freeze/browser.js.map +7 -0
- package/dist/annotations/freeze/bundle.js +201 -0
- package/dist/annotations/freeze/bundle.js.map +7 -0
- package/dist/annotations/freeze/coords.js +37 -0
- package/dist/annotations/freeze/coords.js.map +7 -0
- package/dist/annotations/freeze/freeze.js +261 -0
- package/dist/annotations/freeze/freeze.js.map +7 -0
- package/dist/annotations/freeze/hash.js +28 -0
- package/dist/annotations/freeze/hash.js.map +7 -0
- package/dist/annotations/freeze/index-page.js +78 -0
- package/dist/annotations/freeze/index-page.js.map +7 -0
- package/dist/annotations/freeze/index.js +28 -22
- package/dist/annotations/freeze/index.js.map +7 -1
- package/dist/annotations/freeze/raster.js +208 -0
- package/dist/annotations/freeze/raster.js.map +7 -0
- package/dist/annotations/freeze/stamp.js +117 -0
- package/dist/annotations/freeze/stamp.js.map +7 -0
- package/dist/annotations/freeze/types.js +14 -0
- package/dist/annotations/freeze/types.js.map +7 -0
- package/dist/annotations/freeze/vector.js +283 -0
- package/dist/annotations/freeze/vector.js.map +7 -0
- package/dist/annotations/geometry.js +81 -0
- package/dist/annotations/geometry.js.map +7 -0
- package/dist/annotations/index.js +125 -6
- package/dist/annotations/index.js.map +7 -1
- package/dist/annotations/merge.js +53 -0
- package/dist/annotations/merge.js.map +7 -0
- package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
- package/dist/annotations/model.js.map +7 -0
- package/dist/annotations/overlay-geometry.js +41 -0
- package/dist/annotations/overlay-geometry.js.map +7 -0
- package/dist/annotations/redaction-log.js +33 -0
- package/dist/annotations/redaction-log.js.map +7 -0
- package/dist/annotations/selection-marks.js +122 -0
- package/dist/annotations/selection-marks.js.map +7 -0
- package/dist/annotations/state.js +140 -0
- package/dist/annotations/state.js.map +7 -0
- package/dist/annotations/store.js +49 -0
- package/dist/annotations/store.js.map +7 -0
- package/dist/annotations/useAnnotationLayer.js +306 -0
- package/dist/annotations/useAnnotationLayer.js.map +7 -0
- package/dist/annotations/useAnnotationShortcuts.js +31 -0
- package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
- package/dist/annotations/useTextSelectionMarks.js +100 -0
- package/dist/annotations/useTextSelectionMarks.js.map +7 -0
- package/dist/artifacts/artifact-kind.js +19 -0
- package/dist/artifacts/artifact-kind.js.map +7 -0
- package/dist/artifacts/index.js +89 -571
- package/dist/artifacts/index.js.map +7 -1
- package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
- package/dist/artifacts/normalize-markdown.js.map +7 -0
- package/dist/artifacts/redline-core.js +12 -3
- package/dist/artifacts/redline-core.js.map +7 -1
- package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
- package/dist/artifacts/redline-diff.js.map +7 -0
- package/dist/artifacts/redline-engine.js +14 -0
- package/dist/artifacts/redline-engine.js.map +7 -0
- package/dist/artifacts/renderArtifactMarkdown.js +9 -0
- package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
- package/dist/artifacts/useArtifactEditSession.js +183 -0
- package/dist/artifacts/useArtifactEditSession.js.map +7 -0
- package/dist/artifacts/useArtifactSession.js +173 -0
- package/dist/artifacts/useArtifactSession.js.map +7 -0
- package/dist/artifacts/useArtifactSource.js +16 -0
- package/dist/artifacts/useArtifactSource.js.map +7 -0
- package/dist/artifacts/useArtifactText.js +78 -0
- package/dist/artifacts/useArtifactText.js.map +7 -0
- package/dist/artifacts/useRedline.js +65 -0
- package/dist/artifacts/useRedline.js.map +7 -0
- package/dist/artifacts/useStreamedArtifact.js +74 -0
- package/dist/artifacts/useStreamedArtifact.js.map +7 -0
- package/dist/artifacts/versions.js +68 -0
- package/dist/artifacts/versions.js.map +7 -0
- package/dist/billing.js +200 -0
- package/dist/billing.js.map +7 -0
- package/dist/boot-timeout.js +19 -0
- package/dist/boot-timeout.js.map +7 -0
- package/dist/calendar/accounts.js +213 -0
- package/dist/calendar/accounts.js.map +7 -0
- package/dist/calendar/hooks.js +409 -0
- package/dist/calendar/hooks.js.map +7 -0
- package/dist/calendar/index.js +31 -0
- package/dist/calendar/index.js.map +7 -0
- package/dist/calendar/keys.js +5 -0
- package/dist/calendar/keys.js.map +7 -0
- package/dist/calendar/offline/outbox.js +231 -0
- package/dist/calendar/offline/outbox.js.map +7 -0
- package/dist/calendar/offline/runtime.js +109 -0
- package/dist/calendar/offline/runtime.js.map +7 -0
- package/dist/calendar/offline/support.js +41 -0
- package/dist/calendar/offline/support.js.map +7 -0
- package/dist/calendar/support.js +34 -0
- package/dist/calendar/support.js.map +7 -0
- package/dist/calls/actions.js +226 -0
- package/dist/calls/actions.js.map +7 -0
- package/dist/calls/events.js +138 -0
- package/dist/calls/events.js.map +7 -0
- package/dist/calls/gate.js +19 -0
- package/dist/calls/gate.js.map +7 -0
- package/dist/calls/hooks.js +115 -0
- package/dist/calls/hooks.js.map +7 -0
- package/dist/calls/in-call-chat.js +132 -0
- package/dist/calls/in-call-chat.js.map +7 -0
- package/dist/calls/index.js +24 -0
- package/dist/calls/index.js.map +7 -0
- package/dist/calls/keys.js +17 -0
- package/dist/calls/keys.js.map +7 -0
- package/dist/calls/livekit/index.js +6 -958
- package/dist/calls/livekit/index.js.map +7 -1
- package/dist/calls/livekit/room.js +98 -0
- package/dist/calls/livekit/room.js.map +7 -0
- package/dist/calls/livekit/useCallRecorder.js +219 -0
- package/dist/calls/livekit/useCallRecorder.js.map +7 -0
- package/dist/calls/livekit/useCallTranscriber.js +309 -0
- package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
- package/dist/calls/livekit/useHostMuteNotice.js +29 -0
- package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
- package/dist/calls/livekit/useInCallChat.js +161 -0
- package/dist/calls/livekit/useInCallChat.js.map +7 -0
- package/dist/calls/livekit/useWebinar.js +239 -0
- package/dist/calls/livekit/useWebinar.js.map +7 -0
- package/dist/calls/meeting-chat.js +149 -0
- package/dist/calls/meeting-chat.js.map +7 -0
- package/dist/calls/moderation.js +50 -0
- package/dist/calls/moderation.js.map +7 -0
- package/dist/calls/open-meeting-chat.js +29 -0
- package/dist/calls/open-meeting-chat.js.map +7 -0
- package/dist/calls/read-only.js +24 -0
- package/dist/calls/read-only.js.map +7 -0
- package/dist/calls/recording-media.js +218 -0
- package/dist/calls/recording-media.js.map +7 -0
- package/dist/calls/recording-playback.js +260 -0
- package/dist/calls/recording-playback.js.map +7 -0
- package/dist/calls/recording.js +268 -0
- package/dist/calls/recording.js.map +7 -0
- package/dist/calls/save-to-thread.js +80 -0
- package/dist/calls/save-to-thread.js.map +7 -0
- package/dist/calls/session.js +134 -0
- package/dist/calls/session.js.map +7 -0
- package/dist/calls/transcript-format.js +147 -0
- package/dist/calls/transcript-format.js.map +7 -0
- package/dist/calls/transcription.js +101 -0
- package/dist/calls/transcription.js.map +7 -0
- package/dist/calls/webinar.js +71 -0
- package/dist/calls/webinar.js.map +7 -0
- package/dist/charge-watch.js +71 -0
- package/dist/charge-watch.js.map +7 -0
- package/dist/chat/ChatBubble.js +146 -0
- package/dist/chat/ChatBubble.js.map +7 -0
- package/dist/chat/ConversationScope.js +30 -0
- package/dist/chat/ConversationScope.js.map +7 -0
- package/dist/chat/active-config.js +20 -0
- package/dist/chat/active-config.js.map +7 -0
- package/dist/chat/agent-chat-owner.js +25 -0
- package/dist/chat/agent-chat-owner.js.map +7 -0
- package/dist/chat/chat-artifacts.js +64 -0
- package/dist/chat/chat-artifacts.js.map +7 -0
- package/dist/chat/citations.js +32 -0
- package/dist/chat/citations.js.map +7 -0
- package/dist/chat/config-model.js +10 -0
- package/dist/chat/config-model.js.map +7 -0
- package/dist/chat/conversation-cache.js +676 -0
- package/dist/chat/conversation-cache.js.map +7 -0
- package/dist/chat/conversation-events.js +57 -0
- package/dist/chat/conversation-events.js.map +7 -0
- package/dist/chat/conversation-mentions.js +58 -0
- package/dist/chat/conversation-mentions.js.map +7 -0
- package/dist/chat/conversation-workspace.js +58 -0
- package/dist/chat/conversation-workspace.js.map +7 -0
- package/dist/chat/mentions.js +116 -0
- package/dist/chat/mentions.js.map +7 -0
- package/dist/chat/open-document.js +106 -0
- package/dist/chat/open-document.js.map +7 -0
- package/dist/chat/orphaned.js +44 -0
- package/dist/chat/orphaned.js.map +7 -0
- package/dist/chat/pendingFirstTurn.js +30 -0
- package/dist/chat/pendingFirstTurn.js.map +7 -0
- package/dist/chat/reply-target.js +12 -0
- package/dist/chat/reply-target.js.map +7 -0
- package/dist/chat/run-finished.js +28 -0
- package/dist/chat/run-finished.js.map +7 -0
- package/dist/chat/run-state.js +91 -0
- package/dist/chat/run-state.js.map +7 -0
- package/dist/chat/stream-handlers.js +419 -0
- package/dist/chat/stream-handlers.js.map +7 -0
- package/dist/chat/thread-binding.js +76 -0
- package/dist/chat/thread-binding.js.map +7 -0
- package/dist/chat/thread-document.js +53 -0
- package/dist/chat/thread-document.js.map +7 -0
- package/dist/chat/turn-control.js +79 -0
- package/dist/chat/turn-control.js.map +7 -0
- package/dist/chat/useAgentRunControl.js +36 -0
- package/dist/chat/useAgentRunControl.js.map +7 -0
- package/dist/chat/useAnswerAgentQuestion.js +19 -0
- package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
- package/dist/chat/useAskAgain.js +32 -0
- package/dist/chat/useAskAgain.js.map +7 -0
- package/dist/chat/useAutoSendDraft.js +17 -0
- package/dist/chat/useAutoSendDraft.js.map +7 -0
- package/dist/chat/useBranchNavigation.js +97 -0
- package/dist/chat/useBranchNavigation.js.map +7 -0
- package/dist/chat/useConnectRunStream.js +169 -0
- package/dist/chat/useConnectRunStream.js.map +7 -0
- package/dist/chat/useConversation.js +431 -0
- package/dist/chat/useConversation.js.map +7 -0
- package/dist/chat/useConversationActions.js +662 -0
- package/dist/chat/useConversationActions.js.map +7 -0
- package/dist/chat/useConversationData.js +143 -0
- package/dist/chat/useConversationData.js.map +7 -0
- package/dist/chat/useConversationDocuments.js +41 -0
- package/dist/chat/useConversationDocuments.js.map +7 -0
- package/dist/chat/useConversationSettings.js +78 -0
- package/dist/chat/useConversationSettings.js.map +7 -0
- package/dist/chat/useConversationTurn.js +31 -0
- package/dist/chat/useConversationTurn.js.map +7 -0
- package/dist/chat/useConversationWorkspace.js +12 -0
- package/dist/chat/useConversationWorkspace.js.map +7 -0
- package/dist/chat/useDeleteMessage.js +15 -0
- package/dist/chat/useDeleteMessage.js.map +7 -0
- package/dist/chat/useDocumentAutoAdd.js +73 -0
- package/dist/chat/useDocumentAutoAdd.js.map +7 -0
- package/dist/chat/useMessageTimer.js +39 -0
- package/dist/chat/useMessageTimer.js.map +7 -0
- package/dist/chat/useThinkingContent.js +67 -0
- package/dist/chat/useThinkingContent.js.map +7 -0
- package/dist/chat/useThreadDocument.js +61 -0
- package/dist/chat/useThreadDocument.js.map +7 -0
- package/dist/chat/workflow-run-titles.js +50 -0
- package/dist/chat/workflow-run-titles.js.map +7 -0
- package/dist/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
- package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
- package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
- package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
- package/dist/{chunk-DI5KSVKY.cjs → chunk-UDDJIUHJ.cjs} +3 -3
- package/dist/{chunk-DI5KSVKY.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
- package/dist/config/config-hooks.js +209 -0
- package/dist/config/config-hooks.js.map +7 -0
- package/dist/connectivity.js +72 -0
- package/dist/connectivity.js.map +7 -0
- package/dist/connectors/hooks.js +263 -0
- package/dist/connectors/hooks.js.map +7 -0
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +7 -0
- package/dist/contacts.js +100 -0
- package/dist/contacts.js.map +7 -0
- package/dist/conversation-list.js +65 -0
- package/dist/conversation-list.js.map +7 -0
- package/dist/databases.js +195 -0
- package/dist/databases.js.map +7 -0
- package/dist/datasets/aggregate.js +281 -0
- package/dist/datasets/aggregate.js.map +7 -0
- package/dist/datasets/index.js +122 -0
- package/dist/datasets/index.js.map +7 -0
- package/dist/datasets/members.js +27 -0
- package/dist/datasets/members.js.map +7 -0
- package/dist/datasets/panel.js +44 -0
- package/dist/datasets/panel.js.map +7 -0
- package/dist/datasets/registry.js +47 -0
- package/dist/datasets/registry.js.map +7 -0
- package/dist/datasets/rows-source.js +44 -0
- package/dist/datasets/rows-source.js.map +7 -0
- package/dist/datasets/sources/activity.js +83 -0
- package/dist/datasets/sources/activity.js.map +7 -0
- package/dist/datasets/sources/conversations.js +74 -0
- package/dist/datasets/sources/conversations.js.map +7 -0
- package/dist/datasets/sources/database.js +209 -0
- package/dist/datasets/sources/database.js.map +7 -0
- package/dist/datasets/sources/documents.js +93 -0
- package/dist/datasets/sources/documents.js.map +7 -0
- package/dist/datasets/sources/facts.js +56 -0
- package/dist/datasets/sources/facts.js.map +7 -0
- package/dist/datasets/sources/projects.js +117 -0
- package/dist/datasets/sources/projects.js.map +7 -0
- package/dist/datasets/sources/tags.js +67 -0
- package/dist/datasets/sources/tags.js.map +7 -0
- package/dist/datasets/sources/usage.js +268 -0
- package/dist/datasets/sources/usage.js.map +7 -0
- package/dist/datasets/sources/workflows.js +91 -0
- package/dist/datasets/sources/workflows.js.map +7 -0
- package/dist/datasets/sources/workspaces.js +67 -0
- package/dist/datasets/sources/workspaces.js.map +7 -0
- package/dist/datasets/store.js +194 -0
- package/dist/datasets/store.js.map +7 -0
- package/dist/datasets/types.js +14 -0
- package/dist/datasets/types.js.map +7 -0
- package/dist/directmessages/ConversationList.js +148 -0
- package/dist/directmessages/ConversationList.js.map +7 -0
- package/dist/directmessages/DateSeparator.js +8 -0
- package/dist/directmessages/DateSeparator.js.map +7 -0
- package/dist/directmessages/DmAvatar.js +29 -0
- package/dist/directmessages/DmAvatar.js.map +7 -0
- package/dist/directmessages/DmComposer.js +201 -0
- package/dist/directmessages/DmComposer.js.map +7 -0
- package/dist/directmessages/arrivals.js +29 -0
- package/dist/directmessages/arrivals.js.map +7 -0
- package/dist/directmessages/chat-cache.js +192 -0
- package/dist/directmessages/chat-cache.js.map +7 -0
- package/dist/directmessages/grouping.js +26 -0
- package/dist/directmessages/grouping.js.map +7 -0
- package/dist/directmessages/index.js +81 -0
- package/dist/directmessages/index.js.map +7 -0
- package/dist/directmessages/useChats.js +266 -0
- package/dist/directmessages/useChats.js.map +7 -0
- package/dist/directmessages/utils.js +23 -0
- package/dist/directmessages/utils.js.map +7 -0
- package/dist/document-tools/can-annotate.js +7 -0
- package/dist/document-tools/can-annotate.js.map +7 -0
- package/dist/document-tools/core.cjs +80 -80
- package/dist/document-tools/core.js +218 -12
- package/dist/document-tools/core.js.map +7 -1
- package/dist/document-tools/document-pdf.js +76 -0
- package/dist/document-tools/document-pdf.js.map +7 -0
- package/dist/document-tools/environment.js +136 -0
- package/dist/document-tools/environment.js.map +7 -0
- package/dist/document-tools/file-shares.js +112 -0
- package/dist/document-tools/file-shares.js.map +7 -0
- package/dist/document-tools/frozen-copy.js +27 -0
- package/dist/document-tools/frozen-copy.js.map +7 -0
- package/dist/document-tools/index.cjs +80 -80
- package/dist/document-tools/index.js +26 -148
- package/dist/document-tools/index.js.map +7 -1
- package/dist/document-tools/markup-download.js +51 -0
- package/dist/document-tools/markup-download.js.map +7 -0
- package/dist/document-tools/markup-store.js +138 -0
- package/dist/document-tools/markup-store.js.map +7 -0
- package/dist/document-tools/markup-transfer.js +88 -0
- package/dist/document-tools/markup-transfer.js.map +7 -0
- package/dist/document-tools/production.js +147 -0
- package/dist/document-tools/production.js.map +7 -0
- package/dist/document-tools/saved-signature.js +90 -0
- package/dist/document-tools/saved-signature.js.map +7 -0
- package/dist/document-tools/signature-requests.js +310 -0
- package/dist/document-tools/signature-requests.js.map +7 -0
- package/dist/document-tools/signing.js +127 -0
- package/dist/document-tools/signing.js.map +7 -0
- package/dist/document-tools/useDocumentBytes.js +38 -0
- package/dist/document-tools/useDocumentBytes.js.map +7 -0
- package/dist/document-tools/useDocumentMarkup.js +154 -0
- package/dist/document-tools/useDocumentMarkup.js.map +7 -0
- package/dist/document-tools/useIsOnline.js +13 -0
- package/dist/document-tools/useIsOnline.js.map +7 -0
- package/dist/document-tools/verification.js +60 -0
- package/dist/document-tools/verification.js.map +7 -0
- package/dist/documents/DocumentReview.js +220 -0
- package/dist/documents/DocumentReview.js.map +7 -0
- package/dist/documents/DraftTitleControls.js +41 -0
- package/dist/documents/DraftTitleControls.js.map +7 -0
- package/dist/documents/InlineMicButton.js +90 -0
- package/dist/documents/InlineMicButton.js.map +7 -0
- package/dist/documents/MicRecordingOverlay.js +29 -0
- package/dist/documents/MicRecordingOverlay.js.map +7 -0
- package/dist/documents/MicWaveformIndicator.js +68 -0
- package/dist/documents/MicWaveformIndicator.js.map +7 -0
- package/dist/documents/PhotoCapture.js +120 -0
- package/dist/documents/PhotoCapture.js.map +7 -0
- package/dist/documents/VideoCapture.js +129 -0
- package/dist/documents/VideoCapture.js.map +7 -0
- package/dist/documents/VoiceNoteRecorder.js +166 -0
- package/dist/documents/VoiceNoteRecorder.js.map +7 -0
- package/dist/documents/audio-segmenter.js +63 -0
- package/dist/documents/audio-segmenter.js.map +7 -0
- package/dist/documents/capture-frame.js +21 -0
- package/dist/documents/capture-frame.js.map +7 -0
- package/dist/documents/chunked-recorder.js +190 -0
- package/dist/documents/chunked-recorder.js.map +7 -0
- package/dist/documents/document-download.js +53 -0
- package/dist/documents/document-download.js.map +7 -0
- package/dist/documents/document-fields.js +109 -0
- package/dist/documents/document-fields.js.map +7 -0
- package/dist/documents/documents-cache.js +110 -0
- package/dist/documents/documents-cache.js.map +7 -0
- package/dist/documents/documents-data.js +128 -0
- package/dist/documents/documents-data.js.map +7 -0
- package/dist/documents/documents-loader.js +113 -0
- package/dist/documents/documents-loader.js.map +7 -0
- package/dist/documents/documents-writes.js +448 -0
- package/dist/documents/documents-writes.js.map +7 -0
- package/dist/documents/format-elapsed.js +10 -0
- package/dist/documents/format-elapsed.js.map +7 -0
- package/dist/documents/has-video-track.js +26 -0
- package/dist/documents/has-video-track.js.map +7 -0
- package/dist/documents/index.js +266 -0
- package/dist/documents/index.js.map +7 -0
- package/dist/documents/media-error.js +18 -0
- package/dist/documents/media-error.js.map +7 -0
- package/dist/documents/offline-documents.js +160 -0
- package/dist/documents/offline-documents.js.map +7 -0
- package/dist/documents/pending-sync.js +210 -0
- package/dist/documents/pending-sync.js.map +7 -0
- package/dist/documents/processing-live.js +122 -0
- package/dist/documents/processing-live.js.map +7 -0
- package/dist/documents/processing-order.js +59 -0
- package/dist/documents/processing-order.js.map +7 -0
- package/dist/documents/processing-settle.js +21 -0
- package/dist/documents/processing-settle.js.map +7 -0
- package/dist/documents/related-documents.js +133 -0
- package/dist/documents/related-documents.js.map +7 -0
- package/dist/documents/support.js +29 -0
- package/dist/documents/support.js.map +7 -0
- package/dist/documents/upload-files.js +169 -0
- package/dist/documents/upload-files.js.map +7 -0
- package/dist/documents/useAudioRecorder.js +315 -0
- package/dist/documents/useAudioRecorder.js.map +7 -0
- package/dist/documents/useCameraStream.js +35 -0
- package/dist/documents/useCameraStream.js.map +7 -0
- package/dist/documents/useDocumentThumbnails.js +71 -0
- package/dist/documents/useDocumentThumbnails.js.map +7 -0
- package/dist/documents/useDownloadDocuments.js +90 -0
- package/dist/documents/useDownloadDocuments.js.map +7 -0
- package/dist/documents/usePassageQuotes.js +37 -0
- package/dist/documents/usePassageQuotes.js.map +7 -0
- package/dist/documents/useUploadFiles.js +165 -0
- package/dist/documents/useUploadFiles.js.map +7 -0
- package/dist/documents/useUploadFromUrls.js +63 -0
- package/dist/documents/useUploadFromUrls.js.map +7 -0
- package/dist/documents/useVideoRecorder.js +62 -0
- package/dist/documents/useVideoRecorder.js.map +7 -0
- package/dist/entities/AgentMarkers.js +61 -0
- package/dist/entities/AgentMarkers.js.map +7 -0
- package/dist/entities/DocumentEntity.js +125 -0
- package/dist/entities/DocumentEntity.js.map +7 -0
- package/dist/entities/EntityPill.js +250 -0
- package/dist/entities/EntityPill.js.map +7 -0
- package/dist/entities/ProjectEntity.js +61 -0
- package/dist/entities/ProjectEntity.js.map +7 -0
- package/dist/entities/ShieldIcon.js +49 -0
- package/dist/entities/ShieldIcon.js.map +7 -0
- package/dist/entities/TagEntity.js +79 -0
- package/dist/entities/TagEntity.js.map +7 -0
- package/dist/entities/ThreadVisibilityIcon.js +15 -0
- package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
- package/dist/entities/UserEntity.js +211 -0
- package/dist/entities/UserEntity.js.map +7 -0
- package/dist/entities/VerifiedBadge.js +19 -0
- package/dist/entities/VerifiedBadge.js.map +7 -0
- package/dist/entities/agent-avatar-colors.js +26 -0
- package/dist/entities/agent-avatar-colors.js.map +7 -0
- package/dist/entities/colors.js +64 -0
- package/dist/entities/colors.js.map +7 -0
- package/dist/entities/file-type.js +151 -0
- package/dist/entities/file-type.js.map +7 -0
- package/dist/entities/index.js +100 -0
- package/dist/entities/index.js.map +7 -0
- package/dist/entities/media-type.js +61 -0
- package/dist/entities/media-type.js.map +7 -0
- package/dist/entities/registry.js +385 -0
- package/dist/entities/registry.js.map +7 -0
- package/dist/entities/status.js +43 -0
- package/dist/entities/status.js.map +7 -0
- package/dist/entities/tag-kinds.js +23 -0
- package/dist/entities/tag-kinds.js.map +7 -0
- package/dist/entities/tag-types.js +44 -0
- package/dist/entities/tag-types.js.map +7 -0
- package/dist/entities/vocabulary.js +12 -0
- package/dist/entities/vocabulary.js.map +7 -0
- package/dist/entity-extraction.js +25 -0
- package/dist/entity-extraction.js.map +7 -0
- package/dist/facts-search.js +57 -0
- package/dist/facts-search.js.map +7 -0
- package/dist/facts.js +69 -0
- package/dist/facts.js.map +7 -0
- package/dist/hooks.js +320 -0
- package/dist/hooks.js.map +7 -0
- package/dist/host/ArbiHost.js +24 -0
- package/dist/host/ArbiHost.js.map +7 -0
- package/dist/host/assistant-copy.js +54 -0
- package/dist/host/assistant-copy.js.map +7 -0
- package/dist/host/config.js +9 -0
- package/dist/host/config.js.map +7 -0
- package/dist/host/context.js +10 -0
- package/dist/host/context.js.map +7 -0
- package/dist/host/features.js +144 -0
- package/dist/host/features.js.map +7 -0
- package/dist/host/index.js +12 -0
- package/dist/host/index.js.map +7 -0
- package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
- package/dist/host/merge.js.map +7 -0
- package/dist/house-template.js +40 -0
- package/dist/house-template.js.map +7 -0
- package/dist/icons/AppleIcon.js +25 -0
- package/dist/icons/AppleIcon.js.map +7 -0
- package/dist/icons/ArbiBotHeadIcon.js +46 -0
- package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
- package/dist/icons/ArbiIcon.js +24 -0
- package/dist/icons/ArbiIcon.js.map +7 -0
- package/dist/icons/AudIcon.js +56 -0
- package/dist/icons/AudIcon.js.map +7 -0
- package/dist/icons/ClaudeIcon.js +28 -0
- package/dist/icons/ClaudeIcon.js.map +7 -0
- package/dist/icons/DocIcon.js +56 -0
- package/dist/icons/DocIcon.js.map +7 -0
- package/dist/icons/EmlIcon.js +57 -0
- package/dist/icons/EmlIcon.js.map +7 -0
- package/dist/icons/FireworksIcon.js +47 -0
- package/dist/icons/FireworksIcon.js.map +7 -0
- package/dist/icons/GeminiIcon.js +37 -0
- package/dist/icons/GeminiIcon.js.map +7 -0
- package/dist/icons/GitHubIcon.js +32 -0
- package/dist/icons/GitHubIcon.js.map +7 -0
- package/dist/icons/GoogleIcon.js +53 -0
- package/dist/icons/GoogleIcon.js.map +7 -0
- package/dist/icons/HtmlIcon.js +56 -0
- package/dist/icons/HtmlIcon.js.map +7 -0
- package/dist/icons/ImgIcon.js +56 -0
- package/dist/icons/ImgIcon.js.map +7 -0
- package/dist/icons/LinkedInIcon.js +25 -0
- package/dist/icons/LinkedInIcon.js.map +7 -0
- package/dist/icons/OpenAIIcon.js +28 -0
- package/dist/icons/OpenAIIcon.js.map +7 -0
- package/dist/icons/PdfIcon.js +56 -0
- package/dist/icons/PdfIcon.js.map +7 -0
- package/dist/icons/ProviderIcon.js +42 -0
- package/dist/icons/ProviderIcon.js.map +7 -0
- package/dist/icons/TxtIcon.js +56 -0
- package/dist/icons/TxtIcon.js.map +7 -0
- package/dist/icons/VidIcon.js +56 -0
- package/dist/icons/VidIcon.js.map +7 -0
- package/dist/icons/XlsIcon.js +56 -0
- package/dist/icons/XlsIcon.js.map +7 -0
- package/dist/icons/arbi-mark.js +5 -0
- package/dist/icons/arbi-mark.js.map +7 -0
- package/dist/icons/colors.js +31 -0
- package/dist/icons/colors.js.map +7 -0
- package/dist/icons/file-type.js +105 -0
- package/dist/icons/file-type.js.map +7 -0
- package/dist/icons/index.js +55 -0
- package/dist/icons/index.js.map +7 -0
- package/dist/imagecrop/ImageCropModal.js +56 -0
- package/dist/imagecrop/ImageCropModal.js.map +7 -0
- package/dist/imagecrop/ImageCropper.js +100 -0
- package/dist/imagecrop/ImageCropper.js.map +7 -0
- package/dist/imagecrop/cropImage.js +43 -0
- package/dist/imagecrop/cropImage.js.map +7 -0
- package/dist/imagecrop/index.js +13 -0
- package/dist/imagecrop/index.js.map +7 -0
- package/dist/index.cjs +282 -282
- package/dist/index.js +702 -17116
- package/dist/index.js.map +7 -1
- package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
- package/dist/lazy-chunk.js.map +7 -0
- package/dist/lib/collision-padding.js +13 -0
- package/dist/lib/collision-padding.js.map +7 -0
- package/dist/lib/format-friendly-date.js +55 -0
- package/dist/lib/format-friendly-date.js.map +7 -0
- package/dist/lib/format-relative-time.js +52 -0
- package/dist/lib/format-relative-time.js.map +7 -0
- package/dist/lib/markdown-to-text.js +35 -0
- package/dist/lib/markdown-to-text.js.map +7 -0
- package/dist/lib/toast-interaction.js +9 -0
- package/dist/lib/toast-interaction.js.map +7 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +7 -0
- package/dist/mail/client.js +103 -0
- package/dist/mail/client.js.map +7 -0
- package/dist/mail/document-attachment.js +38 -0
- package/dist/mail/document-attachment.js.map +7 -0
- package/dist/mail/filing.js +132 -0
- package/dist/mail/filing.js.map +7 -0
- package/dist/mail/hooks.js +393 -0
- package/dist/mail/hooks.js.map +7 -0
- package/dist/mail/index.js +120 -0
- package/dist/mail/index.js.map +7 -0
- package/dist/mail/offline/changes.js +258 -0
- package/dist/mail/offline/changes.js.map +7 -0
- package/dist/mail/offline/confirm-sign-out.js +37 -0
- package/dist/mail/offline/confirm-sign-out.js.map +7 -0
- package/dist/mail/offline/crypto.js +26 -0
- package/dist/mail/offline/crypto.js.map +7 -0
- package/dist/mail/offline/drafts.js +69 -0
- package/dist/mail/offline/drafts.js.map +7 -0
- package/dist/mail/offline/hooks.js +104 -0
- package/dist/mail/offline/hooks.js.map +7 -0
- package/dist/mail/offline/index.js +48 -0
- package/dist/mail/offline/index.js.map +7 -0
- package/dist/mail/offline/live.js +233 -0
- package/dist/mail/offline/live.js.map +7 -0
- package/dist/mail/offline/mailbox.js +191 -0
- package/dist/mail/offline/mailbox.js.map +7 -0
- package/dist/mail/offline/outbox.js +167 -0
- package/dist/mail/offline/outbox.js.map +7 -0
- package/dist/mail/offline/reads.js +159 -0
- package/dist/mail/offline/reads.js.map +7 -0
- package/dist/mail/offline/runtime.js +100 -0
- package/dist/mail/offline/runtime.js.map +7 -0
- package/dist/mail/offline/settings.js +84 -0
- package/dist/mail/offline/settings.js.map +7 -0
- package/dist/mail/offline/store.js +29 -0
- package/dist/mail/offline/store.js.map +7 -0
- package/dist/mail/offline/sync.js +251 -0
- package/dist/mail/offline/sync.js.map +7 -0
- package/dist/mail/offline/wipe.js +19 -0
- package/dist/mail/offline/wipe.js.map +7 -0
- package/dist/mail/thread-keys.js +53 -0
- package/dist/mail/thread-keys.js.map +7 -0
- package/dist/mail/threads.js +71 -0
- package/dist/mail/threads.js.map +7 -0
- package/dist/mail/useMailClient.js +42 -0
- package/dist/mail/useMailClient.js.map +7 -0
- package/dist/model-connections.js +58 -0
- package/dist/model-connections.js.map +7 -0
- package/dist/notifications/ActivityFeed.js +70 -0
- package/dist/notifications/ActivityFeed.js.map +7 -0
- package/dist/notifications/NotificationBell.js +200 -0
- package/dist/notifications/NotificationBell.js.map +7 -0
- package/dist/notifications/Toaster.js +24 -0
- package/dist/notifications/Toaster.js.map +7 -0
- package/dist/notifications/activity-types.js +65 -0
- package/dist/notifications/activity-types.js.map +7 -0
- package/dist/notifications/bell.js +24 -0
- package/dist/notifications/bell.js.map +7 -0
- package/dist/notifications/calendar-notifications.js +79 -0
- package/dist/notifications/calendar-notifications.js.map +7 -0
- package/dist/notifications/index.js +108 -0
- package/dist/notifications/index.js.map +7 -0
- package/dist/notifications/live.js +28 -0
- package/dist/notifications/live.js.map +7 -0
- package/dist/notifications/notification-types.js +127 -0
- package/dist/notifications/notification-types.js.map +7 -0
- package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
- package/dist/notifications/notify-store.js.map +7 -0
- package/dist/notifications/server-notifications.js +452 -0
- package/dist/notifications/server-notifications.js.map +7 -0
- package/dist/notifications/useNotifications.js +34 -0
- package/dist/notifications/useNotifications.js.map +7 -0
- package/dist/offline-store/network.js +11 -0
- package/dist/offline-store/network.js.map +7 -0
- package/dist/offline-store/store.js +136 -0
- package/dist/offline-store/store.js.map +7 -0
- package/dist/offline-store/wipe.js +8 -0
- package/dist/offline-store/wipe.js.map +7 -0
- package/dist/offline.js +58 -0
- package/dist/offline.js.map +7 -0
- package/dist/people.js +122 -0
- package/dist/people.js.map +7 -0
- package/dist/projects.js +30 -0
- package/dist/projects.js.map +7 -0
- package/dist/query-client.js +63 -0
- package/dist/query-client.js.map +7 -0
- package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
- package/dist/query-keys.js.map +7 -0
- package/dist/query-persist.js +66 -0
- package/dist/query-persist.js.map +7 -0
- package/dist/queued-writes.js +59 -0
- package/dist/queued-writes.js.map +7 -0
- package/dist/remote-control.js +67 -0
- package/dist/remote-control.js.map +7 -0
- package/dist/search/index.js +23 -0
- package/dist/search/index.js.map +7 -0
- package/dist/search/session.js +58 -0
- package/dist/search/session.js.map +7 -0
- package/dist/search/useSemanticSearch.js +82 -0
- package/dist/search/useSemanticSearch.js.map +7 -0
- package/dist/session/chat.js +512 -0
- package/dist/session/chat.js.map +7 -0
- package/dist/session/documents.js +196 -0
- package/dist/session/documents.js.map +7 -0
- package/dist/session/drafts.js +103 -0
- package/dist/session/drafts.js.map +7 -0
- package/dist/session/index.js +123 -0
- package/dist/session/index.js.map +7 -0
- package/dist/session/layout.js +339 -0
- package/dist/session/layout.js.map +7 -0
- package/dist/session/persist.js +106 -0
- package/dist/session/persist.js.map +7 -0
- package/dist/session/session-hooks.js +53 -0
- package/dist/session/session-hooks.js.map +7 -0
- package/dist/session/signed-in.js +36 -0
- package/dist/session/signed-in.js.map +7 -0
- package/dist/session/store.js +166 -0
- package/dist/session/store.js.map +7 -0
- package/dist/session/thread-tabs.js +121 -0
- package/dist/session/thread-tabs.js.map +7 -0
- package/dist/session/ui-state-storage.js +76 -0
- package/dist/session/ui-state-storage.js.map +7 -0
- package/dist/session/workspace.js +77 -0
- package/dist/session/workspace.js.map +7 -0
- package/dist/shell/index.cjs +37 -37
- package/dist/shell/index.js +43 -10
- package/dist/shell/index.js.map +7 -1
- package/dist/skill-pack.js +111 -0
- package/dist/skill-pack.js.map +7 -0
- package/dist/storage.js +186 -0
- package/dist/storage.js.map +7 -0
- package/dist/support/index.js +35 -0
- package/dist/support/index.js.map +7 -0
- package/dist/tags.js +204 -0
- package/dist/tags.js.map +7 -0
- package/dist/ui/DebouncedInput.js +109 -0
- package/dist/ui/DebouncedInput.js.map +7 -0
- package/dist/ui/DictateContext.js +8 -0
- package/dist/ui/DictateContext.js.map +7 -0
- package/dist/ui/IconToggle.js +79 -0
- package/dist/ui/IconToggle.js.map +7 -0
- package/dist/ui/VerifiedToggle.js +38 -0
- package/dist/ui/VerifiedToggle.js.map +7 -0
- package/dist/ui/VisibilityToggle.js +103 -0
- package/dist/ui/VisibilityToggle.js.map +7 -0
- package/dist/ui/avatar.js +40 -0
- package/dist/ui/avatar.js.map +7 -0
- package/dist/ui/badge.js +28 -0
- package/dist/ui/badge.js.map +7 -0
- package/dist/ui/button.js +48 -0
- package/dist/ui/button.js.map +7 -0
- package/dist/ui/card.js +90 -0
- package/dist/ui/card.js.map +7 -0
- package/dist/ui/checkbox.js +22 -0
- package/dist/ui/checkbox.js.map +7 -0
- package/dist/ui/collapsible.js +10 -0
- package/dist/ui/collapsible.js.map +7 -0
- package/dist/ui/command.js +103 -0
- package/dist/ui/command.js.map +7 -0
- package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
- package/dist/ui/dialog.js.map +7 -0
- package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
- package/dist/ui/dropdown-menu.js.map +7 -0
- package/dist/ui/hover-card.js +36 -0
- package/dist/ui/hover-card.js.map +7 -0
- package/dist/ui/index.cjs +154 -154
- package/dist/ui/index.js +290 -10
- package/dist/ui/index.js.map +7 -1
- package/dist/ui/input.js +65 -0
- package/dist/ui/input.js.map +7 -0
- package/dist/ui/label.js +16 -0
- package/dist/ui/label.js.map +7 -0
- package/dist/ui/mark-menu.js +300 -0
- package/dist/ui/mark-menu.js.map +7 -0
- package/dist/ui/popover.js +40 -0
- package/dist/ui/popover.js.map +7 -0
- package/dist/ui/portal-container.js +17 -0
- package/dist/ui/portal-container.js.map +7 -0
- package/dist/ui/progress.js +24 -0
- package/dist/ui/progress.js.map +7 -0
- package/dist/ui/radio-group.js +29 -0
- package/dist/ui/radio-group.js.map +7 -0
- package/dist/ui/scroll-area.js +39 -0
- package/dist/ui/scroll-area.js.map +7 -0
- package/dist/ui/select.js +130 -0
- package/dist/ui/select.js.map +7 -0
- package/dist/ui/separator.js +23 -0
- package/dist/ui/separator.js.map +7 -0
- package/dist/ui/slider.js +23 -0
- package/dist/ui/slider.js.map +7 -0
- package/dist/ui/switch.js +28 -0
- package/dist/ui/switch.js.map +7 -0
- package/dist/ui/table.js +75 -0
- package/dist/ui/table.js.map +7 -0
- package/dist/ui/tabs.js +48 -0
- package/dist/ui/tabs.js.map +7 -0
- package/dist/ui/textarea.js +63 -0
- package/dist/ui/textarea.js.map +7 -0
- package/dist/ui/toggle-group.js +43 -0
- package/dist/ui/toggle-group.js.map +7 -0
- package/dist/ui/toggle.js +40 -0
- package/dist/ui/toggle.js.map +7 -0
- package/dist/ui/tooltip.js +215 -0
- package/dist/ui/tooltip.js.map +7 -0
- package/dist/usage-metered.js +8 -0
- package/dist/usage-metered.js.map +7 -0
- package/dist/useArbi.js +16 -0
- package/dist/useArbi.js.map +7 -0
- package/dist/useInstallSkillPack.js +81 -0
- package/dist/useInstallSkillPack.js.map +7 -0
- package/dist/usermenu/UserMenu.js +188 -0
- package/dist/usermenu/UserMenu.js.map +7 -0
- package/dist/usermenu/index.js +5 -0
- package/dist/usermenu/index.js.map +7 -0
- package/dist/users/index.js +15 -0
- package/dist/users/index.js.map +7 -0
- package/dist/users/user-display.js +60 -0
- package/dist/users/user-display.js.map +7 -0
- package/dist/viewers/AudioViewer.js +23 -0
- package/dist/viewers/AudioViewer.js.map +7 -0
- package/dist/viewers/DocxViewer.js +81 -0
- package/dist/viewers/DocxViewer.js.map +7 -0
- package/dist/viewers/ImageViewer.js +31 -0
- package/dist/viewers/ImageViewer.js.map +7 -0
- package/dist/viewers/PdfViewer.js +19 -3
- package/dist/viewers/PdfViewer.js.map +7 -1
- package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
- package/dist/viewers/PdfViewerImpl.js.map +7 -0
- package/dist/viewers/VideoViewer.js +31 -0
- package/dist/viewers/VideoViewer.js.map +7 -0
- package/dist/viewers/XlsxViewer.js +102 -0
- package/dist/viewers/XlsxViewer.js.map +7 -0
- package/dist/viewers/index.js +61 -271
- package/dist/viewers/index.js.map +7 -1
- package/dist/viewers/page-scroll.js +59 -0
- package/dist/viewers/page-scroll.js.map +7 -0
- package/dist/viewers/pdf-viewer-constants.js +9 -0
- package/dist/viewers/pdf-viewer-constants.js.map +7 -0
- package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
- package/dist/viewers/pdfjs-polyfills.js.map +7 -0
- package/dist/viewers/selection-runs.js +38 -0
- package/dist/viewers/selection-runs.js.map +7 -0
- package/dist/viewers/usePageIntersectionObserver.js +68 -0
- package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
- package/dist/viewers/useProcessedChunks.js +58 -0
- package/dist/viewers/useProcessedChunks.js.map +7 -0
- package/dist/viewers/viewer-zoom.js +163 -0
- package/dist/viewers/viewer-zoom.js.map +7 -0
- package/dist/websocket/ArbiWebSocketProvider.js +207 -0
- package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
- package/dist/websocket/context.js +14 -0
- package/dist/websocket/context.js.map +7 -0
- package/dist/websocket/hooks.js +30 -0
- package/dist/websocket/hooks.js.map +7 -0
- package/dist/websocket/index.js +22 -0
- package/dist/websocket/index.js.map +7 -0
- package/dist/websocket/live-updates.js +38 -0
- package/dist/websocket/live-updates.js.map +7 -0
- package/dist/websocket/reconnect.js +13 -0
- package/dist/websocket/reconnect.js.map +7 -0
- package/dist/websocket/store.js +58 -0
- package/dist/websocket/store.js.map +7 -0
- package/dist/workforce.js +607 -0
- package/dist/workforce.js.map +7 -0
- package/dist/workspaces/access-request.js +35 -0
- package/dist/workspaces/access-request.js.map +7 -0
- package/dist/workspaces/archive.js +59 -0
- package/dist/workspaces/archive.js.map +7 -0
- package/dist/workspaces/current.js +20 -0
- package/dist/workspaces/current.js.map +7 -0
- package/dist/workspaces/delete-workspaces.js +15 -0
- package/dist/workspaces/delete-workspaces.js.map +7 -0
- package/dist/workspaces/export-archive.js +40 -0
- package/dist/workspaces/export-archive.js.map +7 -0
- package/dist/workspaces/index.js +99 -0
- package/dist/workspaces/index.js.map +7 -0
- package/dist/workspaces/settings.js +45 -0
- package/dist/workspaces/settings.js.map +7 -0
- package/dist/workspaces/shell-workspaces.js +49 -0
- package/dist/workspaces/shell-workspaces.js.map +7 -0
- package/dist/workspaces/switch.js +234 -0
- package/dist/workspaces/switch.js.map +7 -0
- package/dist/workspaces/transfer.js +170 -0
- package/dist/workspaces/transfer.js.map +7 -0
- package/dist/workspaces/useShellWorkspaces.js +86 -0
- package/dist/workspaces/useShellWorkspaces.js.map +7 -0
- package/dist/workspaces/workspace-users.js +65 -0
- package/dist/workspaces/workspace-users.js.map +7 -0
- package/package.json +4 -4
- package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
- package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
- package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
- package/dist/annotations/freeze/index.d.cts +0 -205
- package/dist/annotations/index.d.cts +0 -360
- package/dist/artifacts/index.d.cts +0 -476
- package/dist/artifacts/redline-core.d.cts +0 -39
- package/dist/bundle-YNOX7VIL.js +0 -5
- package/dist/bundle-YNOX7VIL.js.map +0 -1
- package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
- package/dist/calls/livekit/index.d.cts +0 -280
- package/dist/chunk-47CCGUWR.js.map +0 -1
- package/dist/chunk-4FL3X3LA.js +0 -2057
- package/dist/chunk-4FL3X3LA.js.map +0 -1
- package/dist/chunk-6QNBSXCE.js +0 -271
- package/dist/chunk-6QNBSXCE.js.map +0 -1
- package/dist/chunk-74N436VK.js.map +0 -1
- package/dist/chunk-APZZQZ6P.js +0 -147
- package/dist/chunk-APZZQZ6P.js.map +0 -1
- package/dist/chunk-BF5KW5ZI.js.map +0 -1
- package/dist/chunk-DPYBZDJB.js.map +0 -1
- package/dist/chunk-DZKRL5H3.js +0 -2766
- package/dist/chunk-DZKRL5H3.js.map +0 -1
- package/dist/chunk-HDCRPPBW.js +0 -75
- package/dist/chunk-HDCRPPBW.js.map +0 -1
- package/dist/chunk-L2IPPTVC.js +0 -20
- package/dist/chunk-L2IPPTVC.js.map +0 -1
- package/dist/chunk-LSU4UPS5.js +0 -1011
- package/dist/chunk-LSU4UPS5.js.map +0 -1
- package/dist/chunk-NIKPG4PW.js +0 -1128
- package/dist/chunk-NIKPG4PW.js.map +0 -1
- package/dist/chunk-NNAJLY6B.js +0 -4974
- package/dist/chunk-NNAJLY6B.js.map +0 -1
- package/dist/chunk-OYPKKHXY.js +0 -559
- package/dist/chunk-OYPKKHXY.js.map +0 -1
- package/dist/chunk-PTOP7OHG.js.map +0 -1
- package/dist/chunk-QMY2JKBI.js +0 -246
- package/dist/chunk-QMY2JKBI.js.map +0 -1
- package/dist/chunk-SN5YV6FF.js +0 -11
- package/dist/chunk-SN5YV6FF.js.map +0 -1
- package/dist/chunk-SSXFVWCT.js.map +0 -1
- package/dist/chunk-T3USOSVN.js.map +0 -1
- package/dist/chunk-T4CLW3DN.js +0 -2560
- package/dist/chunk-T4CLW3DN.js.map +0 -1
- package/dist/chunk-UW2SGTI5.js.map +0 -1
- package/dist/chunk-VSCU7K4V.js.map +0 -1
- package/dist/chunk-WL2Y2T47.js.map +0 -1
- package/dist/chunk-WUTL62MC.js.map +0 -1
- package/dist/chunk-XWPLOFDN.js +0 -644
- package/dist/chunk-XWPLOFDN.js.map +0 -1
- package/dist/chunk-Y3MTRA7D.js +0 -97
- package/dist/chunk-Y3MTRA7D.js.map +0 -1
- package/dist/chunk-YNNAJJ5Z.js.map +0 -1
- package/dist/chunk-ZM6N7YZH.js.map +0 -1
- package/dist/document-tools/core.d.cts +0 -883
- package/dist/document-tools/index.d.cts +0 -90
- package/dist/index.d-LArLnpI8.d.cts +0 -2036
- package/dist/index.d-oR5FKZpJ.d.cts +0 -579
- package/dist/index.d.cts +0 -15923
- package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
- package/dist/model.d-CNtRWKVK.d.cts +0 -110
- package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
- package/dist/shell/index.d.cts +0 -6
- package/dist/store.d-GADDvC7w.d.cts +0 -35
- package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
- package/dist/ui/index.d.cts +0 -26
- package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
- package/dist/viewers/PdfViewer.d.cts +0 -9
- package/dist/viewers/index.d.cts +0 -262
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const UNBOUND = { documentId: null, unavailable: false };
|
|
2
|
+
function bindingOfRow(row) {
|
|
3
|
+
if (!row) return UNBOUND;
|
|
4
|
+
const documentId = row.bound_document_ext_id ?? null;
|
|
5
|
+
return { documentId, unavailable: !documentId && row.bound_document_unavailable === true };
|
|
6
|
+
}
|
|
7
|
+
function latestThreadOfDocument(conversations, documentId) {
|
|
8
|
+
let latest = null;
|
|
9
|
+
for (const row of conversations ?? []) {
|
|
10
|
+
if (row.bound_document_ext_id !== documentId) continue;
|
|
11
|
+
if (!latest || (row.updated_at ?? "") > (latest.updated_at ?? "")) latest = row;
|
|
12
|
+
}
|
|
13
|
+
return latest?.external_id ?? null;
|
|
14
|
+
}
|
|
15
|
+
const LEGACY_THREAD_DOCUMENTS_KEY = "arbi-thread-documents";
|
|
16
|
+
function storage() {
|
|
17
|
+
try {
|
|
18
|
+
return typeof localStorage === "undefined" ? void 0 : localStorage;
|
|
19
|
+
} catch {
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function readLegacyThreadDocuments() {
|
|
24
|
+
const out = {};
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(storage()?.getItem(LEGACY_THREAD_DOCUMENTS_KEY) ?? "null");
|
|
27
|
+
if (parsed && typeof parsed === "object") {
|
|
28
|
+
for (const [conversationId, documentId] of Object.entries(parsed))
|
|
29
|
+
if (typeof documentId === "string") out[conversationId] = documentId;
|
|
30
|
+
}
|
|
31
|
+
} catch {
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function forgetLegacyThreadDocuments(conversationIds) {
|
|
36
|
+
if (conversationIds.length === 0) return;
|
|
37
|
+
const rest = readLegacyThreadDocuments();
|
|
38
|
+
conversationIds.forEach((id) => delete rest[id]);
|
|
39
|
+
try {
|
|
40
|
+
if (Object.keys(rest).length === 0) storage()?.removeItem(LEGACY_THREAD_DOCUMENTS_KEY);
|
|
41
|
+
else storage()?.setItem(LEGACY_THREAD_DOCUMENTS_KEY, JSON.stringify(rest));
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
LEGACY_THREAD_DOCUMENTS_KEY,
|
|
47
|
+
UNBOUND,
|
|
48
|
+
bindingOfRow,
|
|
49
|
+
forgetLegacyThreadDocuments,
|
|
50
|
+
latestThreadOfDocument,
|
|
51
|
+
readLegacyThreadDocuments
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=thread-document.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/thread-document.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * A thread's document: the one document a conversation drafts in, part of the conversation.\n *\n * A thread is bound to a document only when it was started from it (\"Chat about this document\" in\n * the viewer) or the person attached it in that thread. Only that thread names it on its turns\n * (`active_artifact_ext_id`), on every turn and after a reload. A document merely open or docked\n * beside the chat binds nothing: a new chat (the ask bar, the new-chat button, the thread\n * launcher, home) starts unbound, so a question there never becomes an edit of whatever is open.\n *\n * The binding is the server's: the conversation's `bound_document_ext_id`, set by the first turn\n * (`bound_document_ext_id` on the turn that starts it) or by a PATCH, and read under each reader's\n * access (`bound_document_unavailable`: bound to a document this reader cannot open). It follows\n * the person to every device, and a shared thread's members all see it. The query cache holds it\n * (`./thread-binding`); a new chat's binding is the session's `newChatDocumentId` until its first\n * turn creates the conversation.\n *\n * This module is the light half (no query client, no SDK), so the shell entry can carry it.\n */\n\n/** What a conversation row says about its binding. */\nexport interface ThreadBindingRow {\n external_id: string\n bound_document_ext_id?: string | null\n bound_document_unavailable?: boolean | null\n updated_at?: string | null\n}\n\n/** A conversation's binding as this reader sees it. */\nexport interface ThreadBinding {\n /** The bound document, or null (unbound, or bound to one this reader cannot open). */\n documentId: string | null\n /** Bound to a document this reader cannot open (another member's private document, or deleted). */\n unavailable: boolean\n}\n\nexport const UNBOUND: ThreadBinding = { documentId: null, unavailable: false }\n\n/** A row's binding. */\nexport function bindingOfRow(row: ThreadBindingRow | null | undefined): ThreadBinding {\n if (!row) return UNBOUND\n const documentId = row.bound_document_ext_id ?? null\n return { documentId, unavailable: !documentId && row.bound_document_unavailable === true }\n}\n\n/** The most recently active conversation bound to a document, among `conversations`, or null. */\nexport function latestThreadOfDocument(\n conversations: readonly ThreadBindingRow[] | null | undefined,\n documentId: string\n): string | null {\n let latest: ThreadBindingRow | null = null\n for (const row of conversations ?? []) {\n if (row.bound_document_ext_id !== documentId) continue\n if (!latest || (row.updated_at ?? '') > (latest.updated_at ?? '')) latest = row\n }\n return latest?.external_id ?? null\n}\n\n// --------------------------------------------------------------------------------------------- //\n// Bindings this browser kept before the server held them (`localStorage`), moved to the server\n// once (`migrateLegacyThreadDocuments` in `./thread-binding`) and then forgotten.\n// --------------------------------------------------------------------------------------------- //\n\nexport const LEGACY_THREAD_DOCUMENTS_KEY = 'arbi-thread-documents'\n\nfunction storage(): Storage | undefined {\n try {\n return typeof localStorage === 'undefined' ? undefined : localStorage\n } catch {\n return undefined\n }\n}\n\n/** The bindings this browser kept locally (conversation id \u2192 document id); empty when none. */\nexport function readLegacyThreadDocuments(): Record<string, string> {\n const out: Record<string, string> = {}\n try {\n const parsed = JSON.parse(storage()?.getItem(LEGACY_THREAD_DOCUMENTS_KEY) ?? 'null') as unknown\n if (parsed && typeof parsed === 'object')\n for (const [conversationId, documentId] of Object.entries(parsed))\n if (typeof documentId === 'string') out[conversationId] = documentId\n } catch {\n // Damaged or blocked: nothing to move.\n }\n return out\n}\n\n/** Forget locally kept bindings (moved to the server); the key goes with the last of them. */\nexport function forgetLegacyThreadDocuments(conversationIds: readonly string[]): void {\n if (conversationIds.length === 0) return\n const rest = readLegacyThreadDocuments()\n conversationIds.forEach((id) => delete rest[id])\n try {\n if (Object.keys(rest).length === 0) storage()?.removeItem(LEGACY_THREAD_DOCUMENTS_KEY)\n else storage()?.setItem(LEGACY_THREAD_DOCUMENTS_KEY, JSON.stringify(rest))\n } catch {\n // Blocked: nothing more to do.\n }\n}\n"],
|
|
5
|
+
"mappings": "AAmCO,MAAM,UAAyB,EAAE,YAAY,MAAM,aAAa,MAAM;AAGtE,SAAS,aAAa,KAAyD;AACpF,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,aAAa,IAAI,yBAAyB;AAChD,SAAO,EAAE,YAAY,aAAa,CAAC,cAAc,IAAI,+BAA+B,KAAK;AAC3F;AAGO,SAAS,uBACd,eACA,YACe;AACf,MAAI,SAAkC;AACtC,aAAW,OAAO,iBAAiB,CAAC,GAAG;AACrC,QAAI,IAAI,0BAA0B,WAAY;AAC9C,QAAI,CAAC,WAAW,IAAI,cAAc,OAAO,OAAO,cAAc,IAAK,UAAS;AAAA,EAC9E;AACA,SAAO,QAAQ,eAAe;AAChC;AAOO,MAAM,8BAA8B;AAE3C,SAAS,UAA+B;AACtC,MAAI;AACF,WAAO,OAAO,iBAAiB,cAAc,SAAY;AAAA,EAC3D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,4BAAoD;AAClE,QAAM,MAA8B,CAAC;AACrC,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,QAAQ,GAAG,QAAQ,2BAA2B,KAAK,MAAM;AACnF,QAAI,UAAU,OAAO,WAAW;AAC9B,iBAAW,CAAC,gBAAgB,UAAU,KAAK,OAAO,QAAQ,MAAM;AAC9D,YAAI,OAAO,eAAe,SAAU,KAAI,cAAc,IAAI;AAAA;AAAA,EAChE,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAGO,SAAS,4BAA4B,iBAA0C;AACpF,MAAI,gBAAgB,WAAW,EAAG;AAClC,QAAM,OAAO,0BAA0B;AACvC,kBAAgB,QAAQ,CAAC,OAAO,OAAO,KAAK,EAAE,CAAC;AAC/C,MAAI;AACF,QAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG,SAAQ,GAAG,WAAW,2BAA2B;AAAA,QAChF,SAAQ,GAAG,QAAQ,6BAA6B,KAAK,UAAU,IAAI,CAAC;AAAA,EAC3E,QAAQ;AAAA,EAER;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { onlineManager } from "@tanstack/react-query";
|
|
2
|
+
import { STOP_ID_WAIT_MS } from "@arbidocs/sdk/browser";
|
|
3
|
+
import { notify } from "../shell/index.js";
|
|
4
|
+
import { arbiQueryKeys } from "../hooks.js";
|
|
5
|
+
const AGENT_CONTROL_COMMANDS = {
|
|
6
|
+
pause: "/pause",
|
|
7
|
+
resume: "/resume",
|
|
8
|
+
report: "/report"
|
|
9
|
+
};
|
|
10
|
+
function refuseChatWhenOffline() {
|
|
11
|
+
if (onlineManager.isOnline()) return false;
|
|
12
|
+
notify.warning("You're offline \u2014 your message is still in the box. Reconnect to send it.");
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
function findStream(session, controller) {
|
|
16
|
+
const generating = session.getState().generating;
|
|
17
|
+
const keys = Object.keys(generating).filter((k) => generating[k]?.abortController === controller);
|
|
18
|
+
const key = keys.find((k) => generating[k].isGenerating) ?? keys[0];
|
|
19
|
+
return key ? { conversationKey: key, state: generating[key] } : null;
|
|
20
|
+
}
|
|
21
|
+
function waitForResponseId(session, controller, timeoutMs = STOP_ID_WAIT_MS) {
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
let done = false;
|
|
24
|
+
const finish = (result) => {
|
|
25
|
+
if (done) return;
|
|
26
|
+
done = true;
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
unsubscribe();
|
|
29
|
+
resolve(result);
|
|
30
|
+
};
|
|
31
|
+
const check = () => {
|
|
32
|
+
const stream = findStream(session, controller);
|
|
33
|
+
if (stream?.state.streamingAssistantId) {
|
|
34
|
+
finish({
|
|
35
|
+
conversationKey: stream.conversationKey,
|
|
36
|
+
responseId: stream.state.streamingAssistantId
|
|
37
|
+
});
|
|
38
|
+
} else if (!stream || !stream.state.isGenerating || controller.signal.aborted) {
|
|
39
|
+
finish(null);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const timer = setTimeout(() => finish(null), timeoutMs);
|
|
43
|
+
const unsubscribe = session.subscribe(check);
|
|
44
|
+
check();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const attachedRunStops = /* @__PURE__ */ new Map();
|
|
48
|
+
function registerAttachedRun(conversationId, responseId, stop) {
|
|
49
|
+
attachedRunStops.set(conversationId, { responseId, stop });
|
|
50
|
+
return () => {
|
|
51
|
+
if (attachedRunStops.get(conversationId)?.stop === stop) attachedRunStops.delete(conversationId);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function disconnectAttachedRun(conversationId, responseId) {
|
|
55
|
+
const attached = attachedRunStops.get(conversationId);
|
|
56
|
+
if (attached?.responseId === responseId) attached.stop();
|
|
57
|
+
}
|
|
58
|
+
function cachedQuotaUsedUp(queryClient, workspaceId) {
|
|
59
|
+
if (!workspaceId) return null;
|
|
60
|
+
const workspaces = queryClient.getQueryData(arbiQueryKeys.workspaces());
|
|
61
|
+
const projectExtId = workspaces?.find((w) => w.external_id === workspaceId)?.project_ext_id;
|
|
62
|
+
if (!projectExtId) return null;
|
|
63
|
+
const projects = queryClient.getQueryData(arbiQueryKeys.projects());
|
|
64
|
+
const project = projects?.find((p) => p.external_id === projectExtId);
|
|
65
|
+
if (!project) return null;
|
|
66
|
+
const used = project.quotas?.ai_usage?.used ?? 0;
|
|
67
|
+
const limit = project.quotas?.ai_usage?.limit ?? 0;
|
|
68
|
+
if (limit <= 0 || used < limit) return null;
|
|
69
|
+
return { spend: used, budget: limit, projectExtId };
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
AGENT_CONTROL_COMMANDS,
|
|
73
|
+
cachedQuotaUsedUp,
|
|
74
|
+
disconnectAttachedRun,
|
|
75
|
+
refuseChatWhenOffline,
|
|
76
|
+
registerAttachedRun,
|
|
77
|
+
waitForResponseId
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=turn-control.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/turn-control.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * What the chat engine checks and coordinates around a turn: whether a send can go out (online),\n * the run a Stop waits for, the attached runs a Stop closes, the run-control commands, and whether\n * a failed turn ran out of AI usage.\n */\n\nimport { onlineManager, type QueryClient } from '@tanstack/react-query'\nimport { STOP_ID_WAIT_MS, type QuotaExceeded } from '@arbidocs/sdk/browser'\nimport { notify } from '../shell'\nimport { arbiQueryKeys } from '../hooks'\nimport type { ArbiSessionStore } from '../session/store'\n\n/**\n * The slash-command text of each run-control action: the composer (typed) and the agent bar's\n * menu (clicked) send the same text, interjected into the running turn.\n */\nexport const AGENT_CONTROL_COMMANDS = {\n pause: '/pause',\n resume: '/resume',\n report: '/report',\n} as const\n\n/**\n * Chat runs against the server-side AI, so nothing can be sent offline. Call before any chat send:\n * when offline it tells the person the text is still in the box, and returns true so the caller\n * leaves the draft untouched.\n */\nexport function refuseChatWhenOffline(): boolean {\n if (onlineManager.isOnline()) return false\n notify.warning(\"You're offline \u2014 your message is still in the box. Reconnect to send it.\")\n return true\n}\n\nfunction findStream(session: ArbiSessionStore, controller: AbortController) {\n const generating = session.getState().generating\n // The stream keeps its controller where it ended (a stopped `new` entry still holds it), so\n // prefer the entry that is still generating with it.\n const keys = Object.keys(generating).filter((k) => generating[k]?.abortController === controller)\n const key = keys.find((k) => generating[k].isGenerating) ?? keys[0]\n return key ? { conversationKey: key, state: generating[key] } : null\n}\n\n/**\n * Wait for the local stream started with `controller` to report its response id. Resolves with the\n * id and the conversation it now belongs to, or null once that stream ends or `timeoutMs` passes.\n */\nexport function waitForResponseId(\n session: ArbiSessionStore,\n controller: AbortController,\n timeoutMs = STOP_ID_WAIT_MS\n): Promise<{ conversationKey: string; responseId: string } | null> {\n return new Promise((resolve) => {\n let done = false\n const finish = (result: { conversationKey: string; responseId: string } | null) => {\n if (done) return\n done = true\n clearTimeout(timer)\n unsubscribe()\n resolve(result)\n }\n const check = () => {\n const stream = findStream(session, controller)\n if (stream?.state.streamingAssistantId) {\n finish({\n conversationKey: stream.conversationKey,\n responseId: stream.state.streamingAssistantId,\n })\n } else if (!stream || !stream.state.isGenerating || controller.signal.aborted) {\n finish(null)\n }\n }\n const timer = setTimeout(() => finish(null), timeoutMs)\n const unsubscribe = session.subscribe(check)\n check()\n })\n}\n\n// Stop for each conversation's live attach, with the run it follows. An attach has no local\n// AbortController, so Stop reaches it through `disconnectAttachedRun` instead.\nconst attachedRunStops = new Map<string, { responseId: string; stop: () => void }>()\n\n/** Register a conversation's live attach; returns the unregister. */\nexport function registerAttachedRun(\n conversationId: string,\n responseId: string,\n stop: () => void\n): () => void {\n attachedRunStops.set(conversationId, { responseId, stop })\n return () => {\n if (attachedRunStops.get(conversationId)?.stop === stop) attachedRunStops.delete(conversationId)\n }\n}\n\n/**\n * Close the live attach stream of a run in a conversation, if that run is the one attached.\n * Matching the run matters: Stop awaits the cancel, and by then the server may have started the\n * next queued follow-up and attached it. Closing \"whatever is attached\" would cut that one off.\n */\nexport function disconnectAttachedRun(conversationId: string, responseId: string): void {\n const attached = attachedRunStops.get(conversationId)\n if (attached?.responseId === responseId) attached.stop()\n}\n\n/**\n * The workspace's AI usage as the cache knows it, when it is used up (its project's `ai_usage`\n * quota reached): the reason a failed turn failed.\n */\nexport function cachedQuotaUsedUp(\n queryClient: QueryClient,\n workspaceId: string | null | undefined\n): QuotaExceeded | null {\n if (!workspaceId) return null\n const workspaces = queryClient.getQueryData<\n Array<{ external_id: string; project_ext_id?: string | null }>\n >(arbiQueryKeys.workspaces())\n const projectExtId = workspaces?.find((w) => w.external_id === workspaceId)?.project_ext_id\n if (!projectExtId) return null\n const projects = queryClient.getQueryData<\n Array<{ external_id: string; quotas?: { ai_usage?: { used?: number; limit?: number } } }>\n >(arbiQueryKeys.projects())\n const project = projects?.find((p) => p.external_id === projectExtId)\n if (!project) return null\n const used = project.quotas?.ai_usage?.used ?? 0\n const limit = project.quotas?.ai_usage?.limit ?? 0\n if (limit <= 0 || used < limit) return null\n return { spend: used, budget: limit, projectExtId }\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,qBAAuC;AAChD,SAAS,uBAA2C;AACpD,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAOvB,MAAM,yBAAyB;AAAA,EACpC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AACV;AAOO,SAAS,wBAAiC;AAC/C,MAAI,cAAc,SAAS,EAAG,QAAO;AACrC,SAAO,QAAQ,+EAA0E;AACzF,SAAO;AACT;AAEA,SAAS,WAAW,SAA2B,YAA6B;AAC1E,QAAM,aAAa,QAAQ,SAAS,EAAE;AAGtC,QAAM,OAAO,OAAO,KAAK,UAAU,EAAE,OAAO,CAAC,MAAM,WAAW,CAAC,GAAG,oBAAoB,UAAU;AAChG,QAAM,MAAM,KAAK,KAAK,CAAC,MAAM,WAAW,CAAC,EAAE,YAAY,KAAK,KAAK,CAAC;AAClE,SAAO,MAAM,EAAE,iBAAiB,KAAK,OAAO,WAAW,GAAG,EAAE,IAAI;AAClE;AAMO,SAAS,kBACd,SACA,YACA,YAAY,iBACqD;AACjE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,OAAO;AACX,UAAM,SAAS,CAAC,WAAmE;AACjF,UAAI,KAAM;AACV,aAAO;AACP,mBAAa,KAAK;AAClB,kBAAY;AACZ,cAAQ,MAAM;AAAA,IAChB;AACA,UAAM,QAAQ,MAAM;AAClB,YAAM,SAAS,WAAW,SAAS,UAAU;AAC7C,UAAI,QAAQ,MAAM,sBAAsB;AACtC,eAAO;AAAA,UACL,iBAAiB,OAAO;AAAA,UACxB,YAAY,OAAO,MAAM;AAAA,QAC3B,CAAC;AAAA,MACH,WAAW,CAAC,UAAU,CAAC,OAAO,MAAM,gBAAgB,WAAW,OAAO,SAAS;AAC7E,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,MAAM,OAAO,IAAI,GAAG,SAAS;AACtD,UAAM,cAAc,QAAQ,UAAU,KAAK;AAC3C,UAAM;AAAA,EACR,CAAC;AACH;AAIA,MAAM,mBAAmB,oBAAI,IAAsD;AAG5E,SAAS,oBACd,gBACA,YACA,MACY;AACZ,mBAAiB,IAAI,gBAAgB,EAAE,YAAY,KAAK,CAAC;AACzD,SAAO,MAAM;AACX,QAAI,iBAAiB,IAAI,cAAc,GAAG,SAAS,KAAM,kBAAiB,OAAO,cAAc;AAAA,EACjG;AACF;AAOO,SAAS,sBAAsB,gBAAwB,YAA0B;AACtF,QAAM,WAAW,iBAAiB,IAAI,cAAc;AACpD,MAAI,UAAU,eAAe,WAAY,UAAS,KAAK;AACzD;AAMO,SAAS,kBACd,aACA,aACsB;AACtB,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,aAAa,YAAY,aAE7B,cAAc,WAAW,CAAC;AAC5B,QAAM,eAAe,YAAY,KAAK,CAAC,MAAM,EAAE,gBAAgB,WAAW,GAAG;AAC7E,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,WAAW,YAAY,aAE3B,cAAc,SAAS,CAAC;AAC1B,QAAM,UAAU,UAAU,KAAK,CAAC,MAAM,EAAE,gBAAgB,YAAY;AACpE,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,OAAO,QAAQ,QAAQ,UAAU,QAAQ;AAC/C,QAAM,QAAQ,QAAQ,QAAQ,UAAU,SAAS;AACjD,MAAI,SAAS,KAAK,OAAO,MAAO,QAAO;AACvC,SAAO,EAAE,OAAO,MAAM,QAAQ,OAAO,aAAa;AACpD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useArbi } from "../useArbi.js";
|
|
3
|
+
import { useArbiSessionStore } from "../session/index.js";
|
|
4
|
+
import { AGENT_CONTROL_COMMANDS } from "./turn-control.js";
|
|
5
|
+
function useAgentRunControl(assistantMessageExtId) {
|
|
6
|
+
const arbi = useArbi();
|
|
7
|
+
const session = useArbiSessionStore();
|
|
8
|
+
const send = useCallback(
|
|
9
|
+
(command) => {
|
|
10
|
+
if (!assistantMessageExtId) return;
|
|
11
|
+
void arbi.assistant.interject(assistantMessageExtId, command).catch(() => {
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
[assistantMessageExtId, arbi]
|
|
15
|
+
);
|
|
16
|
+
const pause = useCallback(() => {
|
|
17
|
+
if (!assistantMessageExtId) return;
|
|
18
|
+
session.setAgentControlState(assistantMessageExtId, "pausing");
|
|
19
|
+
send(AGENT_CONTROL_COMMANDS.pause);
|
|
20
|
+
}, [assistantMessageExtId, session, send]);
|
|
21
|
+
const resume = useCallback(() => {
|
|
22
|
+
if (!assistantMessageExtId) return;
|
|
23
|
+
session.setAgentControlState(assistantMessageExtId, "resuming");
|
|
24
|
+
send(AGENT_CONTROL_COMMANDS.resume);
|
|
25
|
+
}, [assistantMessageExtId, session, send]);
|
|
26
|
+
const report = useCallback(() => {
|
|
27
|
+
if (!assistantMessageExtId) return;
|
|
28
|
+
session.setAgentProbePending(assistantMessageExtId, true);
|
|
29
|
+
send(AGENT_CONTROL_COMMANDS.report);
|
|
30
|
+
}, [assistantMessageExtId, session, send]);
|
|
31
|
+
return { pause, resume, report };
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
useAgentRunControl
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=useAgentRunControl.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useAgentRunControl.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Run-control commands to a running agent turn. Choosing Pause in the turn bar's menu and typing\n * `/pause` in the composer are the same act: both send the command's text as an interjection\n * (`arbi.assistant.interject`), and the backend dispatches it. There is no dedicated control\n * endpoint; the menu is a shortcut for the slash command.\n *\n * Each action also sets an optimistic state in the session, because the loop only confirms at its\n * next boundary (`paused` / `running`) and a probe answers in the background. The\n * `arbi.agent_control_state` and `arbi.probe_answer` events then confirm or correct it.\n */\n\nimport { useCallback } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useArbiSessionStore } from '../session'\nimport { AGENT_CONTROL_COMMANDS } from './turn-control'\n\nexport function useAgentRunControl(assistantMessageExtId: string | null) {\n const arbi = useArbi()\n const session = useArbiSessionStore()\n\n const send = useCallback(\n (command: string) => {\n if (!assistantMessageExtId) return\n // Fire and forget: the control events confirm or correct the optimistic state.\n void arbi.assistant.interject(assistantMessageExtId, command).catch(() => {})\n },\n [assistantMessageExtId, arbi]\n )\n\n const pause = useCallback(() => {\n if (!assistantMessageExtId) return\n session.setAgentControlState(assistantMessageExtId, 'pausing')\n send(AGENT_CONTROL_COMMANDS.pause)\n }, [assistantMessageExtId, session, send])\n\n const resume = useCallback(() => {\n if (!assistantMessageExtId) return\n session.setAgentControlState(assistantMessageExtId, 'resuming')\n send(AGENT_CONTROL_COMMANDS.resume)\n }, [assistantMessageExtId, session, send])\n\n const report = useCallback(() => {\n if (!assistantMessageExtId) return\n session.setAgentProbePending(assistantMessageExtId, true)\n send(AGENT_CONTROL_COMMANDS.report)\n }, [assistantMessageExtId, session, send])\n\n return { pause, resume, report }\n}\n"],
|
|
5
|
+
"mappings": "AAWA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,2BAA2B;AACpC,SAAS,8BAA8B;AAEhC,SAAS,mBAAmB,uBAAsC;AACvE,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,oBAAoB;AAEpC,QAAM,OAAO;AAAA,IACX,CAAC,YAAoB;AACnB,UAAI,CAAC,sBAAuB;AAE5B,WAAK,KAAK,UAAU,UAAU,uBAAuB,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC9E;AAAA,IACA,CAAC,uBAAuB,IAAI;AAAA,EAC9B;AAEA,QAAM,QAAQ,YAAY,MAAM;AAC9B,QAAI,CAAC,sBAAuB;AAC5B,YAAQ,qBAAqB,uBAAuB,SAAS;AAC7D,SAAK,uBAAuB,KAAK;AAAA,EACnC,GAAG,CAAC,uBAAuB,SAAS,IAAI,CAAC;AAEzC,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,sBAAuB;AAC5B,YAAQ,qBAAqB,uBAAuB,UAAU;AAC9D,SAAK,uBAAuB,MAAM;AAAA,EACpC,GAAG,CAAC,uBAAuB,SAAS,IAAI,CAAC;AAEzC,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,sBAAuB;AAC5B,YAAQ,qBAAqB,uBAAuB,IAAI;AACxD,SAAK,uBAAuB,MAAM;AAAA,EACpC,GAAG,CAAC,uBAAuB,SAAS,IAAI,CAAC;AAEzC,SAAO,EAAE,OAAO,QAAQ,OAAO;AACjC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { useArbi } from "../useArbi.js";
|
|
4
|
+
import { clearUserInputRequest } from "./conversation-cache.js";
|
|
5
|
+
function useAnswerAgentQuestion() {
|
|
6
|
+
const arbi = useArbi();
|
|
7
|
+
const queryClient = useQueryClient();
|
|
8
|
+
return useCallback(
|
|
9
|
+
async (question, answer) => {
|
|
10
|
+
await arbi.assistant.interject(question.assistantMessageExtId, answer);
|
|
11
|
+
clearUserInputRequest(queryClient, question.conversationExtId, question.assistantMessageExtId);
|
|
12
|
+
},
|
|
13
|
+
[arbi, queryClient]
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
useAnswerAgentQuestion
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=useAnswerAgentQuestion.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useAnswerAgentQuestion.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useArbi } from '../useArbi'\nimport { clearUserInputRequest } from './conversation-cache'\n\n/** The agent's question an answer is for: its message, in its conversation. */\nexport interface AgentQuestionRef {\n assistantMessageExtId: string\n conversationExtId: string\n}\n\n/**\n * Answer the question a running turn paused on (ask_user): the answer goes into the turn, and the\n * question leaves the cached message so it is no longer offered. Rejects when the send fails.\n */\nexport function useAnswerAgentQuestion() {\n const arbi = useArbi()\n const queryClient = useQueryClient()\n return useCallback(\n async (question: AgentQuestionRef, answer: string) => {\n await arbi.assistant.interject(question.assistantMessageExtId, answer)\n clearUserInputRequest(queryClient, question.conversationExtId, question.assistantMessageExtId)\n },\n [arbi, queryClient]\n )\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,eAAe;AACxB,SAAS,6BAA6B;AAY/B,SAAS,yBAAyB;AACvC,QAAM,OAAO,QAAQ;AACrB,QAAM,cAAc,eAAe;AACnC,SAAO;AAAA,IACL,OAAO,UAA4B,WAAmB;AACpD,YAAM,KAAK,UAAU,UAAU,SAAS,uBAAuB,MAAM;AACrE,4BAAsB,aAAa,SAAS,mBAAmB,SAAS,qBAAqB;AAAA,IAC/F;AAAA,IACA,CAAC,MAAM,WAAW;AAAA,EACpB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
2
|
+
import { useArbiSessionStore } from "../session/index.js";
|
|
3
|
+
import { refuseChatWhenOffline } from "./turn-control.js";
|
|
4
|
+
function useAskAgain(options) {
|
|
5
|
+
const session = useArbiSessionStore();
|
|
6
|
+
const optionsRef = useRef(options);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
optionsRef.current = options;
|
|
9
|
+
});
|
|
10
|
+
return useCallback(
|
|
11
|
+
(question, stoppedAnswer) => {
|
|
12
|
+
const { isGenerating, handleCreateBranch } = optionsRef.current;
|
|
13
|
+
const content = question.content.trim();
|
|
14
|
+
if (!content) return;
|
|
15
|
+
if (isGenerating) {
|
|
16
|
+
session.setDraft(content);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (refuseChatWhenOffline()) return;
|
|
20
|
+
session.completeEditing();
|
|
21
|
+
void handleCreateBranch(
|
|
22
|
+
question.parent_message_ext_id ?? stoppedAnswer.external_id ?? null,
|
|
23
|
+
content
|
|
24
|
+
);
|
|
25
|
+
},
|
|
26
|
+
[session]
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
useAskAgain
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=useAskAgain.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useAskAgain.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * \"Ask again\" on a stopped answer: run its question again, straight away.\n *\n * - The question is sent again from where it was first asked, so the new answer replaces the\n * stopped one as a branch (as an unchanged edit would). The first question of a conversation\n * has nothing before it, so it is asked again as a follow-up to the stopped answer.\n * - While another turn is running, the question goes in the composer rather than racing it.\n */\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport type { ChatMessage } from '@arbidocs/sdk/browser'\nimport { useArbiSessionStore } from '../session'\nimport { refuseChatWhenOffline } from './turn-control'\n\n/**\n * Re-run the question of a stopped answer.\n *\n * @param question The person's question the stopped answer replied to\n * @param stoppedAnswer The stopped answer itself\n */\nexport type AskAgain = (question: ChatMessage, stoppedAnswer: ChatMessage) => void\n\nexport interface UseAskAgainOptions {\n isGenerating: boolean\n /** Send `content` as ARBI's next turn after `parentMessageExtId`. */\n handleCreateBranch: (parentMessageExtId: string | null, content: string) => Promise<void>\n}\n\nexport function useAskAgain(options: UseAskAgainOptions): AskAgain {\n const session = useArbiSessionStore()\n // A stable callback (it is a context value for every message), reading the latest options.\n const optionsRef = useRef(options)\n useEffect(() => {\n optionsRef.current = options\n })\n return useCallback(\n (question: ChatMessage, stoppedAnswer: ChatMessage) => {\n const { isGenerating, handleCreateBranch } = optionsRef.current\n const content = question.content.trim()\n if (!content) return\n if (isGenerating) {\n session.setDraft(content)\n return\n }\n if (refuseChatWhenOffline()) return\n // Leave any open edit: the new turn must show.\n session.completeEditing()\n void handleCreateBranch(\n question.parent_message_ext_id ?? stoppedAnswer.external_id ?? null,\n content\n )\n },\n [session]\n )\n}\n"],
|
|
5
|
+
"mappings": "AASA,SAAS,aAAa,WAAW,cAAc;AAE/C,SAAS,2BAA2B;AACpC,SAAS,6BAA6B;AAgB/B,SAAS,YAAY,SAAuC;AACjE,QAAM,UAAU,oBAAoB;AAEpC,QAAM,aAAa,OAAO,OAAO;AACjC,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,CAAC;AACD,SAAO;AAAA,IACL,CAAC,UAAuB,kBAA+B;AACrD,YAAM,EAAE,cAAc,mBAAmB,IAAI,WAAW;AACxD,YAAM,UAAU,SAAS,QAAQ,KAAK;AACtC,UAAI,CAAC,QAAS;AACd,UAAI,cAAc;AAChB,gBAAQ,SAAS,OAAO;AACxB;AAAA,MACF;AACA,UAAI,sBAAsB,EAAG;AAE7B,cAAQ,gBAAgB;AACxB,WAAK;AAAA,QACH,SAAS,yBAAyB,cAAc,eAAe;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { selectDraft, useArbiSessionState, useArbiSessionStore } from "../session/index.js";
|
|
3
|
+
function useAutoSendDraft(sendDraft, ready = true) {
|
|
4
|
+
const session = useArbiSessionStore();
|
|
5
|
+
const autoSendDraft = useArbiSessionState((state) => state.autoSendDraft);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!autoSendDraft || !ready) return;
|
|
8
|
+
session.setAutoSendDraft(false);
|
|
9
|
+
if (selectDraft(session.getState()).trim()) {
|
|
10
|
+
sendDraft();
|
|
11
|
+
}
|
|
12
|
+
}, [autoSendDraft, ready, sendDraft, session]);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useAutoSendDraft
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useAutoSendDraft.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useAutoSendDraft.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Fires the composer's send once when a quick-access surface (the workspace\n * home's ask bar) handed over a draft that should send on arrival \u2014 the user\n * already pressed Enter there; asking for a second Enter here would turn one\n * action into two.\n *\n * `ready` defers consumption: the flag stays set (and the effect re-runs when\n * `ready` flips) so the send can wait for the page's context to assemble \u2014\n * concretely, the workspace documents that useDocumentAutoAdd attaches to a\n * new chat. Sending before that seeding posts the question with no documents,\n * which answers from nothing. The CALL SITE must sit after useDocumentAutoAdd\n * in the component: effects run in declaration order, so that placement is\n * what guarantees the seeding effect has run by the time this one fires.\n *\n * One-shot: the flag is cleared before sending, so a failed send never\n * retries itself.\n */\n\nimport { useEffect } from 'react'\nimport { selectDraft, useArbiSessionState, useArbiSessionStore } from '../session'\n\nexport function useAutoSendDraft(sendDraft: () => void, ready: boolean = true) {\n const session = useArbiSessionStore()\n const autoSendDraft = useArbiSessionState((state) => state.autoSendDraft)\n useEffect(() => {\n if (!autoSendDraft || !ready) return\n session.setAutoSendDraft(false)\n if (selectDraft(session.getState()).trim()) {\n sendDraft()\n }\n }, [autoSendDraft, ready, sendDraft, session])\n}\n"],
|
|
5
|
+
"mappings": "AAkBA,SAAS,iBAAiB;AAC1B,SAAS,aAAa,qBAAqB,2BAA2B;AAE/D,SAAS,iBAAiB,WAAuB,QAAiB,MAAM;AAC7E,QAAM,UAAU,oBAAoB;AACpC,QAAM,gBAAgB,oBAAoB,CAAC,UAAU,MAAM,aAAa;AACxE,YAAU,MAAM;AACd,QAAI,CAAC,iBAAiB,CAAC,MAAO;AAC9B,YAAQ,iBAAiB,KAAK;AAC9B,QAAI,YAAY,QAAQ,SAAS,CAAC,EAAE,KAAK,GAAG;AAC1C,gBAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,eAAe,OAAO,WAAW,OAAO,CAAC;AAC/C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import {
|
|
3
|
+
getSubagentBranchRecord
|
|
4
|
+
} from "@arbidocs/sdk/browser";
|
|
5
|
+
function useBranchNavigation(threads, parentMessageId, messageHistory, setParentMessageId) {
|
|
6
|
+
const branchPoints = useMemo(() => {
|
|
7
|
+
const points = /* @__PURE__ */ new Map();
|
|
8
|
+
if (!threads || threads.length <= 1) {
|
|
9
|
+
return points;
|
|
10
|
+
}
|
|
11
|
+
const messageToThreads = /* @__PURE__ */ new Map();
|
|
12
|
+
threads.forEach((thread) => {
|
|
13
|
+
thread.history.forEach((message) => {
|
|
14
|
+
const messageId = message.external_id;
|
|
15
|
+
if (!messageId) return;
|
|
16
|
+
if (!messageToThreads.has(messageId)) {
|
|
17
|
+
messageToThreads.set(messageId, []);
|
|
18
|
+
}
|
|
19
|
+
messageToThreads.get(messageId).push(thread);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
messageToThreads.forEach((containingThreads, messageId) => {
|
|
23
|
+
if (containingThreads.length <= 1) return;
|
|
24
|
+
const message = messageHistory.find((m) => m.external_id === messageId);
|
|
25
|
+
if (!message) return;
|
|
26
|
+
const nextMessages = /* @__PURE__ */ new Map();
|
|
27
|
+
containingThreads.forEach((thread) => {
|
|
28
|
+
const messageIndex = thread.history.findIndex((m) => m.external_id === messageId);
|
|
29
|
+
if (messageIndex >= 0 && messageIndex < thread.history.length - 1) {
|
|
30
|
+
const nextMessage = thread.history[messageIndex + 1];
|
|
31
|
+
if (nextMessage.external_id && !getSubagentBranchRecord(nextMessage)) {
|
|
32
|
+
nextMessages.set(nextMessage.external_id, nextMessage);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (nextMessages.size > 1) {
|
|
37
|
+
const branches = Array.from(nextMessages.values()).map((nextMsg) => ({
|
|
38
|
+
id: nextMsg.external_id,
|
|
39
|
+
content: nextMsg.content,
|
|
40
|
+
author: nextMsg.role,
|
|
41
|
+
threadId: containingThreads.find(
|
|
42
|
+
(thread) => thread.history.some((m) => m.external_id === nextMsg.external_id)
|
|
43
|
+
)?.leaf_message_ext_id || "",
|
|
44
|
+
parentId: messageId
|
|
45
|
+
}));
|
|
46
|
+
let currentBranchIndex = 0;
|
|
47
|
+
if (parentMessageId) {
|
|
48
|
+
let currentBranchIdx = branches.findIndex((branch) => branch.threadId === parentMessageId);
|
|
49
|
+
if (currentBranchIdx === -1) {
|
|
50
|
+
const selectedThread = threads.find((t) => t.leaf_message_ext_id === parentMessageId);
|
|
51
|
+
if (selectedThread) {
|
|
52
|
+
currentBranchIdx = branches.findIndex(
|
|
53
|
+
(branch) => selectedThread.history.some((msg) => msg.external_id === branch.id)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (currentBranchIdx >= 0) {
|
|
58
|
+
currentBranchIndex = currentBranchIdx;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const branchPoint = {
|
|
62
|
+
parentId: messageId,
|
|
63
|
+
parentMessage: message,
|
|
64
|
+
branches,
|
|
65
|
+
currentBranchIndex
|
|
66
|
+
};
|
|
67
|
+
branches.forEach((branch) => {
|
|
68
|
+
points.set(branch.id, branchPoint);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return points;
|
|
73
|
+
}, [threads, parentMessageId, messageHistory]);
|
|
74
|
+
const getBranchControlForMessage = useMemo(() => {
|
|
75
|
+
return (messageId) => {
|
|
76
|
+
return branchPoints.get(messageId) || null;
|
|
77
|
+
};
|
|
78
|
+
}, [branchPoints]);
|
|
79
|
+
const switchBranch = useMemo(() => {
|
|
80
|
+
return (branchPoint, targetIndex) => {
|
|
81
|
+
if (targetIndex < 0 || targetIndex >= branchPoint.branches.length) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const targetBranch = branchPoint.branches[targetIndex];
|
|
85
|
+
setParentMessageId(targetBranch.threadId);
|
|
86
|
+
};
|
|
87
|
+
}, [setParentMessageId]);
|
|
88
|
+
return {
|
|
89
|
+
branchPoints,
|
|
90
|
+
getBranchControlForMessage,
|
|
91
|
+
switchBranch
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
useBranchNavigation
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=useBranchNavigation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useBranchNavigation.ts"],
|
|
4
|
+
"sourcesContent": ["import { useMemo } from 'react'\nimport {\n getSubagentBranchRecord,\n type ChatMessage as Message,\n type Thread,\n} from '@arbidocs/sdk/browser'\n\n/** A message the conversation branches after: the replies it has, and the one viewed. */\nexport interface BranchPoint {\n parentId: string\n parentMessage: Message\n branches: Array<{\n id: string\n content: string\n author: string\n threadId: string\n parentId: string\n }>\n currentBranchIndex: number\n}\n\nexport interface BranchNavigation {\n branchPoints: Map<string, BranchPoint>\n getBranchControlForMessage: (messageId: string) => BranchPoint | null\n switchBranch: (branchPoint: BranchPoint, targetIndex: number) => void\n}\n\n/**\n * Hook to analyze threads and identify branch points for navigation\n */\nexport function useBranchNavigation(\n threads: Thread[] | undefined,\n parentMessageId: string | null,\n messageHistory: Message[],\n setParentMessageId: (threadId: string) => void\n): BranchNavigation {\n const branchPoints = useMemo(() => {\n const points = new Map<string, BranchPoint>()\n\n if (!threads || threads.length <= 1) {\n return points\n }\n\n // Create a map of message ID to the threads that contain it\n const messageToThreads = new Map<string, Thread[]>()\n\n threads.forEach((thread) => {\n thread.history.forEach((message) => {\n const messageId = message.external_id\n if (!messageId) return\n\n if (!messageToThreads.has(messageId)) {\n messageToThreads.set(messageId, [])\n }\n messageToThreads.get(messageId)!.push(thread)\n })\n })\n\n // Find branch points - messages that appear in multiple threads and have different next messages\n messageToThreads.forEach((containingThreads, messageId) => {\n if (containingThreads.length <= 1) return\n\n const message = messageHistory.find((m) => m.external_id === messageId)\n if (!message) return\n\n // Get the next messages for each thread that contains this message\n const nextMessages = new Map<string, Message>()\n\n containingThreads.forEach((thread) => {\n const messageIndex = thread.history.findIndex((m) => m.external_id === messageId)\n if (messageIndex >= 0 && messageIndex < thread.history.length - 1) {\n const nextMessage = thread.history[messageIndex + 1]\n // A sub-agent's task message is a DELEGATION off this point, not a\n // reply variant \u2014 RunningSubagents (attached to the message itself)\n // is how that thread is reached, not this branch-arrow counter.\n // Excluding it here keeps \"Branch N of M\" meaning what it says:\n // alternative attempts at the same reply, never a mix of those and\n // captive sub-agent runs.\n if (nextMessage.external_id && !getSubagentBranchRecord(nextMessage)) {\n nextMessages.set(nextMessage.external_id, nextMessage)\n }\n }\n })\n\n // If there are multiple different next messages, this is a branch point\n if (nextMessages.size > 1) {\n const branches = Array.from(nextMessages.values()).map((nextMsg) => ({\n id: nextMsg.external_id!,\n content: nextMsg.content,\n author: nextMsg.role,\n threadId:\n containingThreads.find((thread) =>\n thread.history.some((m) => m.external_id === nextMsg.external_id)\n )?.leaf_message_ext_id || '',\n parentId: messageId,\n }))\n\n // Find current branch index based on selected thread\n let currentBranchIndex = 0\n if (parentMessageId) {\n // First try exact match with thread leaf ID\n let currentBranchIdx = branches.findIndex((branch) => branch.threadId === parentMessageId)\n\n // If no exact match, check if the selected thread contains any of the branch messages\n if (currentBranchIdx === -1) {\n const selectedThread = threads.find((t) => t.leaf_message_ext_id === parentMessageId)\n if (selectedThread) {\n currentBranchIdx = branches.findIndex((branch) =>\n selectedThread.history.some((msg) => msg.external_id === branch.id)\n )\n }\n }\n\n if (currentBranchIdx >= 0) {\n currentBranchIndex = currentBranchIdx\n }\n }\n\n const branchPoint: BranchPoint = {\n parentId: messageId,\n parentMessage: message,\n branches,\n currentBranchIndex,\n }\n\n // Add branch point for each branch message (the messages that come after the branch point)\n branches.forEach((branch) => {\n points.set(branch.id, branchPoint)\n })\n }\n })\n\n return points\n }, [threads, parentMessageId, messageHistory])\n\n const getBranchControlForMessage = useMemo(() => {\n return (messageId: string): BranchPoint | null => {\n return branchPoints.get(messageId) || null\n }\n }, [branchPoints])\n\n const switchBranch = useMemo(() => {\n return (branchPoint: BranchPoint, targetIndex: number) => {\n if (targetIndex < 0 || targetIndex >= branchPoint.branches.length) {\n return\n }\n\n const targetBranch = branchPoint.branches[targetIndex]\n setParentMessageId(targetBranch.threadId)\n }\n }, [setParentMessageId])\n\n return {\n branchPoints,\n getBranchControlForMessage,\n switchBranch,\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,OAGK;AAyBA,SAAS,oBACd,SACA,iBACA,gBACA,oBACkB;AAClB,QAAM,eAAe,QAAQ,MAAM;AACjC,UAAM,SAAS,oBAAI,IAAyB;AAE5C,QAAI,CAAC,WAAW,QAAQ,UAAU,GAAG;AACnC,aAAO;AAAA,IACT;AAGA,UAAM,mBAAmB,oBAAI,IAAsB;AAEnD,YAAQ,QAAQ,CAAC,WAAW;AAC1B,aAAO,QAAQ,QAAQ,CAAC,YAAY;AAClC,cAAM,YAAY,QAAQ;AAC1B,YAAI,CAAC,UAAW;AAEhB,YAAI,CAAC,iBAAiB,IAAI,SAAS,GAAG;AACpC,2BAAiB,IAAI,WAAW,CAAC,CAAC;AAAA,QACpC;AACA,yBAAiB,IAAI,SAAS,EAAG,KAAK,MAAM;AAAA,MAC9C,CAAC;AAAA,IACH,CAAC;AAGD,qBAAiB,QAAQ,CAAC,mBAAmB,cAAc;AACzD,UAAI,kBAAkB,UAAU,EAAG;AAEnC,YAAM,UAAU,eAAe,KAAK,CAAC,MAAM,EAAE,gBAAgB,SAAS;AACtE,UAAI,CAAC,QAAS;AAGd,YAAM,eAAe,oBAAI,IAAqB;AAE9C,wBAAkB,QAAQ,CAAC,WAAW;AACpC,cAAM,eAAe,OAAO,QAAQ,UAAU,CAAC,MAAM,EAAE,gBAAgB,SAAS;AAChF,YAAI,gBAAgB,KAAK,eAAe,OAAO,QAAQ,SAAS,GAAG;AACjE,gBAAM,cAAc,OAAO,QAAQ,eAAe,CAAC;AAOnD,cAAI,YAAY,eAAe,CAAC,wBAAwB,WAAW,GAAG;AACpE,yBAAa,IAAI,YAAY,aAAa,WAAW;AAAA,UACvD;AAAA,QACF;AAAA,MACF,CAAC;AAGD,UAAI,aAAa,OAAO,GAAG;AACzB,cAAM,WAAW,MAAM,KAAK,aAAa,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa;AAAA,UACnE,IAAI,QAAQ;AAAA,UACZ,SAAS,QAAQ;AAAA,UACjB,QAAQ,QAAQ;AAAA,UAChB,UACE,kBAAkB;AAAA,YAAK,CAAC,WACtB,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,QAAQ,WAAW;AAAA,UAClE,GAAG,uBAAuB;AAAA,UAC5B,UAAU;AAAA,QACZ,EAAE;AAGF,YAAI,qBAAqB;AACzB,YAAI,iBAAiB;AAEnB,cAAI,mBAAmB,SAAS,UAAU,CAAC,WAAW,OAAO,aAAa,eAAe;AAGzF,cAAI,qBAAqB,IAAI;AAC3B,kBAAM,iBAAiB,QAAQ,KAAK,CAAC,MAAM,EAAE,wBAAwB,eAAe;AACpF,gBAAI,gBAAgB;AAClB,iCAAmB,SAAS;AAAA,gBAAU,CAAC,WACrC,eAAe,QAAQ,KAAK,CAAC,QAAQ,IAAI,gBAAgB,OAAO,EAAE;AAAA,cACpE;AAAA,YACF;AAAA,UACF;AAEA,cAAI,oBAAoB,GAAG;AACzB,iCAAqB;AAAA,UACvB;AAAA,QACF;AAEA,cAAM,cAA2B;AAAA,UAC/B,UAAU;AAAA,UACV,eAAe;AAAA,UACf;AAAA,UACA;AAAA,QACF;AAGA,iBAAS,QAAQ,CAAC,WAAW;AAC3B,iBAAO,IAAI,OAAO,IAAI,WAAW;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,SAAS,iBAAiB,cAAc,CAAC;AAE7C,QAAM,6BAA6B,QAAQ,MAAM;AAC/C,WAAO,CAAC,cAA0C;AAChD,aAAO,aAAa,IAAI,SAAS,KAAK;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO,CAAC,aAA0B,gBAAwB;AACxD,UAAI,cAAc,KAAK,eAAe,YAAY,SAAS,QAAQ;AACjE;AAAA,MACF;AAEA,YAAM,eAAe,YAAY,SAAS,WAAW;AACrD,yBAAmB,aAAa,QAAQ;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { getRunToAttach } from "@arbidocs/sdk/browser";
|
|
4
|
+
import { useArbi } from "../useArbi.js";
|
|
5
|
+
import { useArbiSessionState, useArbiSessionStore } from "../session/index.js";
|
|
6
|
+
import {
|
|
7
|
+
applyOutputItemToMessage,
|
|
8
|
+
clearLoadingState,
|
|
9
|
+
completeQueuedUserMessageByContent,
|
|
10
|
+
ensureAssistantMessageLoading,
|
|
11
|
+
flushStreamingTokens,
|
|
12
|
+
getInterjectionText,
|
|
13
|
+
getRunStartedAt,
|
|
14
|
+
getThreadsQueryKey,
|
|
15
|
+
isMessageRunning,
|
|
16
|
+
setMessageContent,
|
|
17
|
+
updateMessageWithMetadata
|
|
18
|
+
} from "./conversation-cache.js";
|
|
19
|
+
import { registerAttachedRun } from "./turn-control.js";
|
|
20
|
+
const RECONNECT_DELAY_MS = 2e3;
|
|
21
|
+
const MAX_RECONNECTS = 5;
|
|
22
|
+
function useConnectRunStream(conversationId, messages) {
|
|
23
|
+
const generation = useArbiSessionState(
|
|
24
|
+
(s) => conversationId ? s.generating[conversationId] : void 0
|
|
25
|
+
);
|
|
26
|
+
const responseId = conversationId ? getRunToAttach(generation, messages) : null;
|
|
27
|
+
useAttachRun(conversationId, responseId);
|
|
28
|
+
}
|
|
29
|
+
function useAttachRun(conversationId, responseId) {
|
|
30
|
+
const queryClient = useQueryClient();
|
|
31
|
+
const session = useArbiSessionStore();
|
|
32
|
+
const arbi = useArbi();
|
|
33
|
+
const arbiRef = useRef(arbi);
|
|
34
|
+
arbiRef.current = arbi;
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (!conversationId || !responseId) return;
|
|
37
|
+
let disposed = false;
|
|
38
|
+
let controller = new AbortController();
|
|
39
|
+
let retryTimer;
|
|
40
|
+
let reconnects = 0;
|
|
41
|
+
const runStartedAt = session.getState().messageTimers[`${conversationId}:${responseId}`]?.startTime;
|
|
42
|
+
session.setConversationGenerating(conversationId, true, null);
|
|
43
|
+
session.setStreamingAssistantId(
|
|
44
|
+
conversationId,
|
|
45
|
+
responseId,
|
|
46
|
+
runStartedAt ?? getRunStartedAt(queryClient, conversationId, responseId) ?? Date.now()
|
|
47
|
+
);
|
|
48
|
+
const settle = (refetch) => {
|
|
49
|
+
session.setConversationGenerating(conversationId, false, null);
|
|
50
|
+
session.clearAgentControl(responseId);
|
|
51
|
+
clearLoadingState(queryClient, conversationId);
|
|
52
|
+
if (refetch) {
|
|
53
|
+
void queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) });
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const markLoading = () => ensureAssistantMessageLoading(queryClient, conversationId, responseId);
|
|
57
|
+
const endedEarly = async () => {
|
|
58
|
+
flushStreamingTokens(queryClient);
|
|
59
|
+
await queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) });
|
|
60
|
+
if (disposed) return;
|
|
61
|
+
if (isMessageRunning(queryClient, conversationId, responseId) && reconnects < MAX_RECONNECTS) {
|
|
62
|
+
reconnects += 1;
|
|
63
|
+
markLoading();
|
|
64
|
+
retryTimer = setTimeout(connect, RECONNECT_DELAY_MS);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
settle(false);
|
|
68
|
+
if (isMessageRunning(queryClient, conversationId, responseId)) {
|
|
69
|
+
window.removeEventListener("online", reconnectWhenOnline);
|
|
70
|
+
window.addEventListener("online", reconnectWhenOnline, { once: true });
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const reconnectWhenOnline = () => {
|
|
74
|
+
if (disposed || session.getState().generating[conversationId]?.isGenerating) return;
|
|
75
|
+
reconnects = 0;
|
|
76
|
+
session.setConversationGenerating(conversationId, true, null);
|
|
77
|
+
connect();
|
|
78
|
+
};
|
|
79
|
+
const connect = () => {
|
|
80
|
+
markLoading();
|
|
81
|
+
controller = new AbortController();
|
|
82
|
+
let ended = false;
|
|
83
|
+
arbiRef.current.assistant.attachRun(responseId, {
|
|
84
|
+
signal: controller.signal,
|
|
85
|
+
// The reconnect learns its conversation from the stream; we already know it, but assert
|
|
86
|
+
// the match so a stray attach on a mismatched cache can't write to the wrong conversation.
|
|
87
|
+
onUserMessage: (userMessage) => {
|
|
88
|
+
if (disposed) return;
|
|
89
|
+
if (userMessage.conversation_ext_id && userMessage.conversation_ext_id !== conversationId) {
|
|
90
|
+
disposed = true;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
onOutputItemDone: (ev) => {
|
|
94
|
+
if (disposed) return;
|
|
95
|
+
reconnects = 0;
|
|
96
|
+
applyOutputItemToMessage(queryClient, conversationId, responseId, ev);
|
|
97
|
+
const interjection = getInterjectionText(ev.item);
|
|
98
|
+
if (interjection) {
|
|
99
|
+
completeQueuedUserMessageByContent(queryClient, conversationId, interjection);
|
|
100
|
+
session.consumeQueuedMessage(responseId, interjection);
|
|
101
|
+
}
|
|
102
|
+
const item = ev.item;
|
|
103
|
+
if (item?.type === "message" && item.arbi?.label === "Answered") {
|
|
104
|
+
const text = Array.isArray(item.content) ? item.content.map((c) => c.text ?? "").join("") : "";
|
|
105
|
+
if (text) setMessageContent(queryClient, conversationId, responseId, text);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
onAgentControlState: (event) => {
|
|
109
|
+
if (disposed) return;
|
|
110
|
+
session.setAgentControlState(responseId, event.state);
|
|
111
|
+
},
|
|
112
|
+
// The authoritative message, and the only frame that carries the answer with its citation
|
|
113
|
+
// markers applied plus the `tools.model_citations` map they resolve through. The
|
|
114
|
+
// "Answered" item above carries the model's raw text, which predates both, so without
|
|
115
|
+
// this an attacher rendered a citation-free answer. Relying on the settle(true) refetch
|
|
116
|
+
// is not enough: the cleanup path settles WITHOUT a refetch, and sets `disposed` first,
|
|
117
|
+
// so a viewer who leaves as the run ends never gets the reconciliation.
|
|
118
|
+
onMetadata: (metadata) => {
|
|
119
|
+
if (disposed) return;
|
|
120
|
+
const { type: _type, ...messageData } = metadata;
|
|
121
|
+
updateMessageWithMetadata(queryClient, conversationId, responseId, messageData);
|
|
122
|
+
},
|
|
123
|
+
// onTextDone intentionally omitted: it fires for EVERY settled message item (narration
|
|
124
|
+
// included) and, being label-blind, would overwrite the streamed body. The terminal
|
|
125
|
+
// answer is applied above from the "Answered" item, then replaced by the authoritative
|
|
126
|
+
// metadata content in onMetadata.
|
|
127
|
+
onComplete: () => {
|
|
128
|
+
if (disposed) return;
|
|
129
|
+
ended = true;
|
|
130
|
+
flushStreamingTokens(queryClient);
|
|
131
|
+
settle(true);
|
|
132
|
+
},
|
|
133
|
+
onError: () => {
|
|
134
|
+
if (disposed) return;
|
|
135
|
+
ended = true;
|
|
136
|
+
void endedEarly();
|
|
137
|
+
}
|
|
138
|
+
}).then(() => {
|
|
139
|
+
if (disposed || ended) return;
|
|
140
|
+
void endedEarly();
|
|
141
|
+
}).catch(() => {
|
|
142
|
+
if (disposed) return;
|
|
143
|
+
void endedEarly();
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
connect();
|
|
147
|
+
const stop = () => {
|
|
148
|
+
if (disposed) return;
|
|
149
|
+
disposed = true;
|
|
150
|
+
clearTimeout(retryTimer);
|
|
151
|
+
window.removeEventListener("online", reconnectWhenOnline);
|
|
152
|
+
controller.abort();
|
|
153
|
+
settle(true);
|
|
154
|
+
};
|
|
155
|
+
const unregister = registerAttachedRun(conversationId, responseId, stop);
|
|
156
|
+
return () => {
|
|
157
|
+
unregister();
|
|
158
|
+
disposed = true;
|
|
159
|
+
clearTimeout(retryTimer);
|
|
160
|
+
window.removeEventListener("online", reconnectWhenOnline);
|
|
161
|
+
controller.abort();
|
|
162
|
+
settle(false);
|
|
163
|
+
};
|
|
164
|
+
}, [conversationId, responseId, queryClient, session]);
|
|
165
|
+
}
|
|
166
|
+
export {
|
|
167
|
+
useConnectRunStream
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=useConnectRunStream.js.map
|