@arbidocs/react 0.5.111 → 0.5.113
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/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.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.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.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.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.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,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useConnectRunStream.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * useConnectRunStream: connect a conversation view to the live stream of the run its conversation\n * shows as still running, when this client is not the one streaming it.\n *\n * There is no \"background run\" vs \"foreground run\": a run's output is one durable, reconnectable\n * event stream keyed by the response id, and the run exists independent of any viewer. This hook\n * attaches whenever an assistant message in the conversation is still `in_progress` (or `queued`)\n * but THIS client holds no local stream for it (a scheduled run, or the same account on another\n * device; see `getRunToAttach`). It replays what happened so far, then tails live frames, feeding\n * every one into the SAME state a local turn uses (the conversation cache and the session's\n * generation and control state), so it renders in the ordinary message timeline: steps, goal\n * banner, answer.\n *\n * Connect / disconnect freely: the run keeps going regardless. When the message flips to\n * `completed`, `settle` re-reads the authoritative row and this stream disconnects. Control (pause /\n * resume / message) is the reverse direction, keyed by the same response id via `interject`.\n *\n * The one thing this stream does NOT carry is token-by-token deltas (too heavy to buffer for\n * reconnect): the client that STARTED the turn keeps its inline stream for live typing; every other\n * viewer gets steps, goal and the final answer text.\n */\n\nimport { useEffect, useRef } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { getRunToAttach } from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { useArbiSessionState, useArbiSessionStore } from '../session'\nimport {\n applyOutputItemToMessage,\n clearLoadingState,\n completeQueuedUserMessageByContent,\n ensureAssistantMessageLoading,\n flushStreamingTokens,\n getInterjectionText,\n getRunStartedAt,\n getThreadsQueryKey,\n isMessageRunning,\n setMessageContent,\n updateMessageWithMetadata,\n} from './conversation-cache'\nimport { registerAttachedRun } from './turn-control'\n\n/** Wait this long before attaching again to a run whose stream ended while it still runs. */\nconst RECONNECT_DELAY_MS = 2000\n/** Attaches in a row, with no frame received in between, before the view stops trying. */\nconst MAX_RECONNECTS = 5\n\n/** The fields of a conversation's messages the attach reads. */\ninterface AttachMessage {\n external_id: string\n role: string\n status?: string | null\n}\n\n/**\n * Attach the conversation view to its running run, if it has one this client is not streaming.\n *\n * @param conversationId The open conversation, or null for none.\n * @param messages The messages on screen (the line being viewed).\n */\nexport function useConnectRunStream(\n conversationId: string | null,\n messages: readonly AttachMessage[]\n): void {\n const generation = useArbiSessionState((s) =>\n conversationId ? s.generating[conversationId] : undefined\n )\n const responseId = conversationId ? getRunToAttach(generation, messages) : null\n useAttachRun(conversationId, responseId)\n}\n\nfunction useAttachRun(conversationId: string | null, responseId: string | null): void {\n const queryClient = useQueryClient()\n const session = useArbiSessionStore()\n // Read when attaching: a renewed session (a new `arbi`) must not cut and re-open a live attach.\n const arbi = useArbi()\n const arbiRef = useRef(arbi)\n arbiRef.current = arbi\n\n useEffect(() => {\n if (!conversationId || !responseId) return\n\n // A `disposed` flag ignores a stale effect's callbacks; the AbortController actually closes its\n // connection. That matters: each open run stream holds one of the browser's few HTTP/1.1\n // connections to the origin, so a stream left running after its view went away starves every\n // later request (the page stalls on load). The StrictMode double-invoke aborts the first stream\n // and opens the second, which is the normal fetch lifecycle.\n let disposed = false\n // The current attach's connection (a re-attach after an early end opens a new one).\n let controller = new AbortController()\n let retryTimer: ReturnType<typeof setTimeout> | undefined\n let reconnects = 0\n\n // Leaving the view saves this run's start on its message timer. Reuse it: a re-attach after\n // navigating away must keep counting from the real start, not restart.\n const runStartedAt =\n session.getState().messageTimers[`${conversationId}:${responseId}`]?.startTime\n // Mark the conversation as generating (no abort controller: this client didn't start the run,\n // so there's nothing local to abort) and point the control bar at the run's answer.\n session.setConversationGenerating(conversationId, true, null)\n // Anchor the live timer at the run's own start: a reattach (e.g. after a reload) must not\n // restart \"Thinking 0s\" while the run has been going for minutes. Prefer the start this client\n // saved when it left; after a reload only the message's created_at is left.\n session.setStreamingAssistantId(\n conversationId,\n responseId,\n runStartedAt ?? getRunStartedAt(queryClient, conversationId, responseId) ?? Date.now()\n )\n\n // Settle the streaming state: stop showing the message as generating and drop the loading\n // flags so it renders normally. When `refetch`, also re-read the thread so the settled message\n // matches the server exactly: final content, status `completed` (which disconnects this\n // stream), and the persisted `stream_events`/`trace` hydrated into steps and goal banner (robust\n // even if the live replay window had already expired).\n const settle = (refetch: boolean) => {\n session.setConversationGenerating(conversationId, false, null)\n session.clearAgentControl(responseId)\n clearLoadingState(queryClient, conversationId)\n if (refetch) {\n void queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) })\n }\n }\n\n // Give the live steps / answer a row to land on (idempotent: reuses the history row if the\n // run's answer is already loaded). A refetch drops the flag, so re-add it.\n const markLoading = () => ensureAssistantMessageLoading(queryClient, conversationId, responseId)\n\n // The stream ended without a final frame. That can be a stopped run, or a connection that\n // dropped while the run goes on. Re-read the thread: a message the server still reports as\n // running is attached again, not shown as finished with no answer. Otherwise it settles.\n const endedEarly = async () => {\n // Commit the streamed text still waiting for a frame before the re-read replaces the message:\n // painted afterwards, it would be appended to the content the server stored.\n flushStreamingTokens(queryClient)\n await queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) })\n if (disposed) return\n if (\n isMessageRunning(queryClient, conversationId, responseId) &&\n reconnects < MAX_RECONNECTS\n ) {\n reconnects += 1\n markLoading()\n retryTimer = setTimeout(connect, RECONNECT_DELAY_MS)\n return\n }\n settle(false)\n // Gave up while the run still shows as running, most often because the connection is down (a\n // dropped connection leaves a local turn to this attach too). Try again once it is back: the\n // view does not attach the same run a second time on its own.\n if (isMessageRunning(queryClient, conversationId, responseId)) {\n window.removeEventListener('online', reconnectWhenOnline)\n window.addEventListener('online', reconnectWhenOnline, { once: true })\n }\n }\n\n const reconnectWhenOnline = () => {\n // A turn this client started meanwhile owns the conversation's stream: leave it be.\n if (disposed || session.getState().generating[conversationId]?.isGenerating) return\n reconnects = 0\n session.setConversationGenerating(conversationId, true, null)\n connect()\n }\n\n const connect = () => {\n markLoading()\n controller = new AbortController()\n // Whether this attach itself saw a final frame or an error (each ends the attach once).\n let ended = false\n arbiRef.current.assistant\n .attachRun(responseId, {\n signal: controller.signal,\n // The reconnect learns its conversation from the stream; we already know it, but assert\n // the match so a stray attach on a mismatched cache can't write to the wrong conversation.\n onUserMessage: (userMessage) => {\n if (disposed) return\n if (\n userMessage.conversation_ext_id &&\n userMessage.conversation_ext_id !== conversationId\n ) {\n disposed = true\n }\n },\n onOutputItemDone: (ev) => {\n if (disposed) return\n reconnects = 0\n applyOutputItemToMessage(queryClient, conversationId, responseId, ev)\n // A prompt queued on this run was steered into it: it is no longer waiting.\n const interjection = getInterjectionText(ev.item)\n if (interjection) {\n completeQueuedUserMessageByContent(queryClient, conversationId, interjection)\n session.consumeQueuedMessage(responseId, interjection)\n }\n // NON-DESTRUCTIVE reconnect. This path runs when a viewer (re)attaches to a run,\n // including a REMOUNT of the conversation mid-stream (navigate away and back). The\n // live token stream (the local ask) already wrote the streamed-so-far answer into the\n // cache, and that cache SURVIVES the remount. So on reconnect only ADD the final\n // answer, never clobber what's there: set the body ONLY from the terminal \"Answered\"\n // item, and never overwrite or clear on narration/steps.\n const item = ev.item as {\n type?: string\n arbi?: { label?: string }\n content?: Array<{ text?: string }>\n }\n if (item?.type === 'message' && item.arbi?.label === 'Answered') {\n const text = Array.isArray(item.content)\n ? item.content.map((c) => c.text ?? '').join('')\n : ''\n if (text) setMessageContent(queryClient, conversationId, responseId, text)\n }\n },\n onAgentControlState: (event) => {\n if (disposed) return\n // Server-confirmed pause/resume: overrides the optimistic click state.\n session.setAgentControlState(responseId, event.state)\n },\n // The authoritative message, and the only frame that carries the answer with its citation\n // markers applied plus the `tools.model_citations` map they resolve through. The\n // \"Answered\" item above carries the model's raw text, which predates both, so without\n // this an attacher rendered a citation-free answer. Relying on the settle(true) refetch\n // is not enough: the cleanup path settles WITHOUT a refetch, and sets `disposed` first,\n // so a viewer who leaves as the run ends never gets the reconciliation.\n onMetadata: (metadata) => {\n if (disposed) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _type, ...messageData } = metadata\n updateMessageWithMetadata(queryClient, conversationId, responseId, messageData)\n },\n // onTextDone intentionally omitted: it fires for EVERY settled message item (narration\n // included) and, being label-blind, would overwrite the streamed body. The terminal\n // answer is applied above from the \"Answered\" item, then replaced by the authoritative\n // metadata content in onMetadata.\n onComplete: () => {\n if (disposed) return\n ended = true\n flushStreamingTokens(queryClient)\n settle(true)\n },\n onError: () => {\n if (disposed) return\n ended = true\n // A 404 = the run is no longer active here. Read the thread again to see whether it has\n // finished or is still running elsewhere.\n void endedEarly()\n },\n })\n .then(() => {\n // The stream can also just end, with no final frame: a stopped (cancelled) run's replay\n // stops without `response.completed`. Re-read the thread so the message shows its real\n // status, and attach again if the server still runs it.\n if (disposed || ended) return\n void endedEarly()\n })\n .catch(() => {\n if (disposed) return\n void endedEarly()\n })\n }\n\n connect()\n\n // Stop: close the stream for good (no re-attach, even if the server has not caught up with the\n // cancel yet), and re-read the thread so the message shows how it ended.\n const stop = () => {\n if (disposed) return\n disposed = true\n clearTimeout(retryTimer)\n window.removeEventListener('online', reconnectWhenOnline)\n controller.abort()\n settle(true)\n }\n const unregister = registerAttachedRun(conversationId, responseId, stop)\n\n return () => {\n unregister()\n // Disconnecting (run finished, or navigated away) must settle the streaming flags, not just\n // stop listening: otherwise the message is stuck as an empty streaming target. Clear without\n // a refetch here (a completing run already refetched via onComplete; a nav-away needs none).\n disposed = true\n clearTimeout(retryTimer)\n window.removeEventListener('online', reconnectWhenOnline)\n controller.abort()\n settle(false)\n }\n }, [conversationId, responseId, queryClient, session])\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { useArbi } from "../useArbi.js";
|
|
4
|
+
import { useAgentChats } from "../workforce.js";
|
|
5
|
+
import { useConversations } from "../hooks.js";
|
|
6
|
+
import { refreshDocuments, useDocuments } from "../documents/documents-data.js";
|
|
7
|
+
import { removeConversationFromLists } from "../conversation-list.js";
|
|
8
|
+
import { useArbiSessionState, useArbiSessionStore } from "../session/index.js";
|
|
9
|
+
import { toChatCitations } from "./citations.js";
|
|
10
|
+
import { getThreadsQueryKey } from "./conversation-cache.js";
|
|
11
|
+
import {
|
|
12
|
+
cachedAssistantMode,
|
|
13
|
+
cachedMentionCandidates,
|
|
14
|
+
isCommentToPeople
|
|
15
|
+
} from "./conversation-mentions.js";
|
|
16
|
+
import { useAssistantName } from "../host/assistant-copy.js";
|
|
17
|
+
import { useConversationActions } from "./useConversationActions.js";
|
|
18
|
+
import { useConversationData } from "./useConversationData.js";
|
|
19
|
+
import { useBranchNavigation } from "./useBranchNavigation.js";
|
|
20
|
+
import { useConnectRunStream } from "./useConnectRunStream.js";
|
|
21
|
+
import { useWorkflowRunTitles } from "./workflow-run-titles.js";
|
|
22
|
+
function workflowStepOf(tools) {
|
|
23
|
+
const marker = tools?.workflow_step;
|
|
24
|
+
return typeof marker?.workflow_step === "string" ? marker.workflow_step : void 0;
|
|
25
|
+
}
|
|
26
|
+
function titleFromQuestion(question, maxLength = 48) {
|
|
27
|
+
const flat = question.replace(/\s+/g, " ").trim();
|
|
28
|
+
if (flat.length <= maxLength) return flat;
|
|
29
|
+
const cut = flat.slice(0, maxLength);
|
|
30
|
+
const lastSpace = cut.lastIndexOf(" ");
|
|
31
|
+
const words = lastSpace > maxLength / 2 ? cut.slice(0, lastSpace) : cut;
|
|
32
|
+
return `${words.replace(/[\s,;:.\-–—]+$/, "")}\u2026`;
|
|
33
|
+
}
|
|
34
|
+
const FAILED_MESSAGE = "The assistant request failed.";
|
|
35
|
+
const UNFINISHED_MESSAGE = "The answer did not finish. Try again.";
|
|
36
|
+
const NEW = "new";
|
|
37
|
+
const NO_ROWS = [];
|
|
38
|
+
const messageOf = (e, fallback) => e instanceof Error ? e.message : fallback;
|
|
39
|
+
function signedInUserId(arbi) {
|
|
40
|
+
try {
|
|
41
|
+
return arbi.user.identity()?.externalId ?? null;
|
|
42
|
+
} catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function toChatMessage(m, branch) {
|
|
47
|
+
if (m.role === "system") return null;
|
|
48
|
+
const running = m.isLoading === true || m.status === "in_progress" || m.status === "queued";
|
|
49
|
+
if (m.role === "user") {
|
|
50
|
+
if (!m.content.trim()) return null;
|
|
51
|
+
const workflowStep = workflowStepOf(m.tools);
|
|
52
|
+
return {
|
|
53
|
+
id: m.external_id,
|
|
54
|
+
role: "user",
|
|
55
|
+
content: m.content,
|
|
56
|
+
status: "complete",
|
|
57
|
+
...workflowStep ? { workflowStep } : {},
|
|
58
|
+
...m.created_by_ext_id ? { authorId: m.created_by_ext_id } : {},
|
|
59
|
+
...m.mentions?.length ? { mentions: m.mentions } : {},
|
|
60
|
+
...branch ? { branch } : {}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const failed = m.status === "failed" || m.isError === true;
|
|
64
|
+
const stopped = m.status === "cancelled";
|
|
65
|
+
if (!m.content.trim() && !running && !failed && !stopped) return null;
|
|
66
|
+
const citations = toChatCitations({ tools: m.tools });
|
|
67
|
+
const steps = m.agentSteps ?? [];
|
|
68
|
+
return {
|
|
69
|
+
id: m.external_id,
|
|
70
|
+
role: "assistant",
|
|
71
|
+
content: m.content,
|
|
72
|
+
status: running ? "streaming" : failed ? "error" : "complete",
|
|
73
|
+
...stopped ? { stopped: true } : {},
|
|
74
|
+
...failed ? { error: m.status === "failed" ? FAILED_MESSAGE : UNFINISHED_MESSAGE } : {},
|
|
75
|
+
...running || failed ? {} : { responseId: m.external_id },
|
|
76
|
+
...steps.length > 0 ? { steps, stepCount: steps.length } : {},
|
|
77
|
+
...citations.length > 0 ? { citations } : {},
|
|
78
|
+
...branch ? { branch } : {}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function useConversation(options = {}) {
|
|
82
|
+
const { agentId, model, titleLength = 48 } = options;
|
|
83
|
+
const arbi = useArbi();
|
|
84
|
+
const queryClient = useQueryClient();
|
|
85
|
+
const session = useArbiSessionStore();
|
|
86
|
+
const sessionWorkspaceId = useArbiSessionState((s) => s.workspaceId);
|
|
87
|
+
const workspaceId = options.workspaceId ?? sessionWorkspaceId ?? void 0;
|
|
88
|
+
const conversationId = useArbiSessionState((s) => s.conversationId);
|
|
89
|
+
const conversationKey = conversationId ?? NEW;
|
|
90
|
+
const generation = useArbiSessionState((s) => s.generating[conversationKey]);
|
|
91
|
+
const newConversationMode = useArbiSessionState((s) => s.newConversationAssistantMode);
|
|
92
|
+
const queuedMessages = useArbiSessionState((s) => s.queuedMessages);
|
|
93
|
+
const isRunning = !!generation?.isGenerating;
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (workspaceId && session.getState().workspaceId !== workspaceId)
|
|
96
|
+
session.setWorkspaceId(workspaceId);
|
|
97
|
+
}, [session, workspaceId]);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (model !== void 0) session.setChatModel(model);
|
|
100
|
+
}, [session, model]);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (agentId && workspaceId && !conversationId) session.setNewAgentChat({ agentId, workspaceId });
|
|
103
|
+
}, [session, agentId, workspaceId, conversationId]);
|
|
104
|
+
const { data: docs = [], isLoading: isLoadingDocuments } = useDocuments(workspaceId);
|
|
105
|
+
const ordinaryHistory = useConversations(workspaceId, { enabled: !agentId, live: true });
|
|
106
|
+
const agentHistory = useAgentChats(agentId);
|
|
107
|
+
const stored = useMemo(
|
|
108
|
+
() => agentId ? (agentHistory.data ?? []).filter((chat) => chat.workspace_ext_id === workspaceId).map((chat) => ({
|
|
109
|
+
external_id: chat.conversation_ext_id,
|
|
110
|
+
title: chat.title,
|
|
111
|
+
updated_at: chat.updated_at,
|
|
112
|
+
message_count: 1,
|
|
113
|
+
status: null,
|
|
114
|
+
assistant_mode: "always"
|
|
115
|
+
})) : ordinaryHistory.data ?? [],
|
|
116
|
+
[agentId, agentHistory.data, ordinaryHistory.data, workspaceId]
|
|
117
|
+
);
|
|
118
|
+
const isLoadingThreads = agentId ? agentHistory.isLoading : ordinaryHistory.isLoading;
|
|
119
|
+
const runTitles = useWorkflowRunTitles(
|
|
120
|
+
agentId ? NO_ROWS : ordinaryHistory.data ?? NO_ROWS,
|
|
121
|
+
conversationId,
|
|
122
|
+
workspaceId
|
|
123
|
+
);
|
|
124
|
+
const data = useConversationData();
|
|
125
|
+
const {
|
|
126
|
+
messageHistory,
|
|
127
|
+
threads: lines,
|
|
128
|
+
threadsLoading,
|
|
129
|
+
threadsError,
|
|
130
|
+
parentMessageId,
|
|
131
|
+
setParentMessageId
|
|
132
|
+
} = data;
|
|
133
|
+
useConnectRunStream(conversationId, messageHistory);
|
|
134
|
+
const { getBranchControlForMessage, switchBranch: showBranch } = useBranchNavigation(
|
|
135
|
+
lines,
|
|
136
|
+
parentMessageId,
|
|
137
|
+
messageHistory,
|
|
138
|
+
setParentMessageId
|
|
139
|
+
);
|
|
140
|
+
const actions = useConversationActions({
|
|
141
|
+
selectedWorkspaceId: workspaceId ?? null,
|
|
142
|
+
parentMessageId,
|
|
143
|
+
conversationKey,
|
|
144
|
+
isGenerating: isRunning,
|
|
145
|
+
lastFailedMessage: generation?.lastFailedMessage ?? null
|
|
146
|
+
});
|
|
147
|
+
const [deselected, setDeselected] = useState(/* @__PURE__ */ new Set());
|
|
148
|
+
const [stagedFiles, setStagedFiles] = useState([]);
|
|
149
|
+
const [isPostingComment, setIsPostingComment] = useState(false);
|
|
150
|
+
const [isUpdatingAssistantMode, setIsUpdatingAssistantMode] = useState(false);
|
|
151
|
+
const [isUploading, setIsUploading] = useState(false);
|
|
152
|
+
const [uploadError, setUploadError] = useState(null);
|
|
153
|
+
const [historyError, setHistoryError] = useState(null);
|
|
154
|
+
const scope = `${workspaceId ?? ""}:${agentId ?? ""}`;
|
|
155
|
+
const [currentScope, setCurrentScope] = useState(scope);
|
|
156
|
+
if (currentScope !== scope) {
|
|
157
|
+
setCurrentScope(scope);
|
|
158
|
+
setDeselected(/* @__PURE__ */ new Set());
|
|
159
|
+
setStagedFiles([]);
|
|
160
|
+
setUploadError(null);
|
|
161
|
+
setHistoryError(null);
|
|
162
|
+
}
|
|
163
|
+
const [chatScope, setChatScope] = useState(scope);
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
if (chatScope === scope) return;
|
|
166
|
+
setChatScope(scope);
|
|
167
|
+
session.startNewConversation();
|
|
168
|
+
}, [chatScope, scope, session]);
|
|
169
|
+
const assistantMode = conversationId ? cachedAssistantMode(queryClient, conversationId, "always") : newConversationMode;
|
|
170
|
+
const messages = useMemo(
|
|
171
|
+
() => messageHistory.map((m) => {
|
|
172
|
+
const point = getBranchControlForMessage(m.external_id);
|
|
173
|
+
const branch2 = point && point.branches.length > 1 ? { index: point.currentBranchIndex, count: point.branches.length } : void 0;
|
|
174
|
+
return toChatMessage(m, branch2);
|
|
175
|
+
}).filter((m) => m !== null),
|
|
176
|
+
[messageHistory, getBranchControlForMessage]
|
|
177
|
+
);
|
|
178
|
+
const threads = useMemo(() => {
|
|
179
|
+
const firstQuestion = messages.find((m) => m.role === "user")?.content ?? "";
|
|
180
|
+
const localTitle = firstQuestion ? titleFromQuestion(firstQuestion, titleLength) : "";
|
|
181
|
+
const persisted = [...stored].filter((c) => c.status != null || c.message_count > 0 || c.external_id === conversationId).sort((a, b) => b.updated_at.localeCompare(a.updated_at)).map((c) => ({
|
|
182
|
+
id: c.external_id,
|
|
183
|
+
title: c.title || runTitles[c.external_id] || (c.external_id === conversationId ? localTitle : "")
|
|
184
|
+
}));
|
|
185
|
+
const isListed = persisted.some((t) => t.id === conversationId);
|
|
186
|
+
return [
|
|
187
|
+
...conversationId === null ? [{ id: NEW, title: localTitle }] : isListed ? [] : [{ id: conversationId, title: localTitle }],
|
|
188
|
+
...persisted
|
|
189
|
+
];
|
|
190
|
+
}, [stored, conversationId, messages, titleLength, runTitles]);
|
|
191
|
+
const selectedIds = useMemo(
|
|
192
|
+
() => (agentId ? [] : docs).map((d) => d.external_id).filter((id) => !!id && !deselected.has(id)),
|
|
193
|
+
[docs, deselected, agentId]
|
|
194
|
+
);
|
|
195
|
+
const documents = useMemo(
|
|
196
|
+
() => agentId ? stagedFiles.map((file) => ({ ...file, isSelected: !deselected.has(file.id) })) : docs.filter((d) => !!d.external_id).map((d) => ({
|
|
197
|
+
id: d.external_id,
|
|
198
|
+
name: d.file_name ?? d.external_id,
|
|
199
|
+
isSelected: !deselected.has(d.external_id)
|
|
200
|
+
})),
|
|
201
|
+
[docs, deselected, agentId, stagedFiles]
|
|
202
|
+
);
|
|
203
|
+
const withStagedFiles = useCallback(
|
|
204
|
+
(text) => {
|
|
205
|
+
const staged = stagedFiles.filter((file) => !deselected.has(file.id));
|
|
206
|
+
if (!agentId || staged.length === 0) return text;
|
|
207
|
+
return text + "\n\nSource files staged in your sandbox:\n" + staged.map((file) => `${file.name}: ${file.id}`).join("\n");
|
|
208
|
+
},
|
|
209
|
+
[agentId, stagedFiles, deselected]
|
|
210
|
+
);
|
|
211
|
+
const { handleSendMessage, handleCreateBranch } = actions;
|
|
212
|
+
const assistantName = useAssistantName();
|
|
213
|
+
const send = useCallback(
|
|
214
|
+
async (text) => {
|
|
215
|
+
const trimmed = text.trim();
|
|
216
|
+
if (!trimmed || isUpdatingAssistantMode) return;
|
|
217
|
+
setHistoryError(null);
|
|
218
|
+
session.setConversationDocuments(
|
|
219
|
+
conversationKey,
|
|
220
|
+
selectedIds.map((docId) => ({ docId, isPinned: false }))
|
|
221
|
+
);
|
|
222
|
+
const candidates = cachedMentionCandidates(
|
|
223
|
+
queryClient,
|
|
224
|
+
workspaceId,
|
|
225
|
+
signedInUserId(arbi),
|
|
226
|
+
assistantName
|
|
227
|
+
);
|
|
228
|
+
const isComment = isCommentToPeople(queryClient, conversationId, trimmed, candidates);
|
|
229
|
+
session.setDraft(isComment ? trimmed : withStagedFiles(trimmed));
|
|
230
|
+
if (isComment) setIsPostingComment(true);
|
|
231
|
+
try {
|
|
232
|
+
await handleSendMessage();
|
|
233
|
+
} finally {
|
|
234
|
+
if (isComment) setIsPostingComment(false);
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
[
|
|
238
|
+
isUpdatingAssistantMode,
|
|
239
|
+
session,
|
|
240
|
+
conversationKey,
|
|
241
|
+
selectedIds,
|
|
242
|
+
queryClient,
|
|
243
|
+
workspaceId,
|
|
244
|
+
arbi,
|
|
245
|
+
conversationId,
|
|
246
|
+
withStagedFiles,
|
|
247
|
+
handleSendMessage,
|
|
248
|
+
assistantName
|
|
249
|
+
]
|
|
250
|
+
);
|
|
251
|
+
const branch = useCallback(
|
|
252
|
+
(parentId, text) => handleCreateBranch(parentId, withStagedFiles(text)),
|
|
253
|
+
[handleCreateBranch, withStagedFiles]
|
|
254
|
+
);
|
|
255
|
+
const switchBranch = useCallback(
|
|
256
|
+
(messageId, index) => {
|
|
257
|
+
const point = getBranchControlForMessage(messageId);
|
|
258
|
+
if (point) showBranch(point, index);
|
|
259
|
+
},
|
|
260
|
+
[getBranchControlForMessage, showBranch]
|
|
261
|
+
);
|
|
262
|
+
const retry = useCallback(async () => {
|
|
263
|
+
if (isRunning) return;
|
|
264
|
+
if (generation?.lastFailedMessage) {
|
|
265
|
+
await actions.handleRetrySend();
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const failedIndex = messageHistory.findLastIndex(
|
|
269
|
+
(m) => m.role === "assistant" && (m.status === "failed" || m.isError)
|
|
270
|
+
);
|
|
271
|
+
const failed = messageHistory[failedIndex];
|
|
272
|
+
const question = failed ? messageHistory.find((m) => m.external_id === failed.parent_message_ext_id) ?? messageHistory[failedIndex - 1] : void 0;
|
|
273
|
+
if (!question || question.role !== "user") return;
|
|
274
|
+
await actions.handleRetryOrphanedMessage(
|
|
275
|
+
question.content,
|
|
276
|
+
question.parent_message_ext_id ?? null,
|
|
277
|
+
question.external_id
|
|
278
|
+
);
|
|
279
|
+
}, [isRunning, generation?.lastFailedMessage, actions, messageHistory]);
|
|
280
|
+
const { handleAbortGeneration } = actions;
|
|
281
|
+
const stop = useCallback(() => void handleAbortGeneration(), [handleAbortGeneration]);
|
|
282
|
+
const setAssistantMode = useCallback(
|
|
283
|
+
async (mode) => {
|
|
284
|
+
if (isRunning || isPostingComment || isUpdatingAssistantMode) return;
|
|
285
|
+
if (!conversationId) {
|
|
286
|
+
session.setNewConversationAssistantMode(mode);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
setIsUpdatingAssistantMode(true);
|
|
290
|
+
setHistoryError(null);
|
|
291
|
+
try {
|
|
292
|
+
await arbi.conversations.setAssistantMode(conversationId, mode);
|
|
293
|
+
queryClient.setQueryData(
|
|
294
|
+
getThreadsQueryKey(conversationId),
|
|
295
|
+
(old) => old ? { ...old, assistant_mode: mode } : old
|
|
296
|
+
);
|
|
297
|
+
void queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) });
|
|
298
|
+
void (agentId ? agentHistory.refetch() : ordinaryHistory.refetch());
|
|
299
|
+
} catch (e) {
|
|
300
|
+
setHistoryError(messageOf(e, "The assistant mode could not be changed."));
|
|
301
|
+
} finally {
|
|
302
|
+
setIsUpdatingAssistantMode(false);
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
[
|
|
306
|
+
isRunning,
|
|
307
|
+
isPostingComment,
|
|
308
|
+
isUpdatingAssistantMode,
|
|
309
|
+
conversationId,
|
|
310
|
+
session,
|
|
311
|
+
arbi,
|
|
312
|
+
queryClient,
|
|
313
|
+
agentId,
|
|
314
|
+
agentHistory,
|
|
315
|
+
ordinaryHistory
|
|
316
|
+
]
|
|
317
|
+
);
|
|
318
|
+
const newThread = useCallback(() => {
|
|
319
|
+
setHistoryError(null);
|
|
320
|
+
session.startNewConversation();
|
|
321
|
+
}, [session]);
|
|
322
|
+
const selectThread = useCallback(
|
|
323
|
+
(id) => {
|
|
324
|
+
setHistoryError(null);
|
|
325
|
+
if (id === NEW) {
|
|
326
|
+
session.startNewConversation();
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (agentId) session.setAgentChatOwner(id, agentId);
|
|
330
|
+
session.setConversationId(id);
|
|
331
|
+
},
|
|
332
|
+
[session, agentId]
|
|
333
|
+
);
|
|
334
|
+
const deleteThread = useCallback(
|
|
335
|
+
(id) => {
|
|
336
|
+
if (id === NEW) {
|
|
337
|
+
session.startNewConversation();
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
void (async () => {
|
|
341
|
+
try {
|
|
342
|
+
await arbi.conversations.delete(id);
|
|
343
|
+
removeConversationFromLists(queryClient, id);
|
|
344
|
+
if (session.getState().conversationId === id) session.startNewConversation();
|
|
345
|
+
} catch (e) {
|
|
346
|
+
setHistoryError(messageOf(e, "The conversation could not be deleted."));
|
|
347
|
+
}
|
|
348
|
+
})();
|
|
349
|
+
},
|
|
350
|
+
[arbi, queryClient, session]
|
|
351
|
+
);
|
|
352
|
+
const toggleDocument = useCallback((id) => {
|
|
353
|
+
setDeselected((prev) => {
|
|
354
|
+
const next = new Set(prev);
|
|
355
|
+
if (next.has(id)) next.delete(id);
|
|
356
|
+
else next.add(id);
|
|
357
|
+
return next;
|
|
358
|
+
});
|
|
359
|
+
}, []);
|
|
360
|
+
const selectAllDocuments = useCallback(() => setDeselected(/* @__PURE__ */ new Set()), []);
|
|
361
|
+
const upload = useCallback(
|
|
362
|
+
async (files) => {
|
|
363
|
+
if (files.length === 0) return;
|
|
364
|
+
setIsUploading(true);
|
|
365
|
+
setUploadError(null);
|
|
366
|
+
try {
|
|
367
|
+
const uploaded = [];
|
|
368
|
+
for (const file of files) {
|
|
369
|
+
if (agentId) {
|
|
370
|
+
const staged = await arbi.agents.stageFile(agentId, file, file.name);
|
|
371
|
+
setStagedFiles((all) => [
|
|
372
|
+
...all.filter((existing) => existing.id !== staged.path),
|
|
373
|
+
{ id: staged.path, name: staged.name }
|
|
374
|
+
]);
|
|
375
|
+
} else {
|
|
376
|
+
const result = await arbi.documents.upload([file], {
|
|
377
|
+
...workspaceId ? { workspaceExtId: workspaceId } : {}
|
|
378
|
+
});
|
|
379
|
+
uploaded.push(...result.doc_ext_ids ?? []);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (uploaded.length) await refreshDocuments(queryClient, arbi, uploaded);
|
|
383
|
+
} catch (e) {
|
|
384
|
+
setUploadError(messageOf(e, "The upload failed."));
|
|
385
|
+
} finally {
|
|
386
|
+
setIsUploading(false);
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
[arbi, queryClient, agentId, workspaceId]
|
|
390
|
+
);
|
|
391
|
+
const runningAnswer = generation?.streamingAssistantId;
|
|
392
|
+
const queue = runningAnswer && queuedMessages[runningAnswer] || [];
|
|
393
|
+
const last = messages[messages.length - 1];
|
|
394
|
+
return {
|
|
395
|
+
assistantMode,
|
|
396
|
+
isUpdatingAssistantMode,
|
|
397
|
+
isPostingComment,
|
|
398
|
+
setAssistantMode,
|
|
399
|
+
threads,
|
|
400
|
+
activeThreadId: conversationKey,
|
|
401
|
+
messages,
|
|
402
|
+
isRunning,
|
|
403
|
+
error: generation?.error ?? (last?.status === "error" ? last.error ?? null : null),
|
|
404
|
+
isLoadingThread: !!conversationId && threadsLoading && !threadsError,
|
|
405
|
+
isLoadingThreads,
|
|
406
|
+
historyError: historyError ?? (threadsError ? messageOf(threadsError, "The conversation could not be loaded.") : null),
|
|
407
|
+
documents,
|
|
408
|
+
isLoadingDocuments,
|
|
409
|
+
isUploading,
|
|
410
|
+
uploadError,
|
|
411
|
+
send,
|
|
412
|
+
interject: send,
|
|
413
|
+
queue,
|
|
414
|
+
branch,
|
|
415
|
+
switchBranch,
|
|
416
|
+
retry,
|
|
417
|
+
stop,
|
|
418
|
+
selectThread,
|
|
419
|
+
newThread,
|
|
420
|
+
deleteThread,
|
|
421
|
+
toggleDocument,
|
|
422
|
+
selectAllDocuments,
|
|
423
|
+
upload
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
export {
|
|
427
|
+
titleFromQuestion,
|
|
428
|
+
useConversation,
|
|
429
|
+
workflowStepOf
|
|
430
|
+
};
|
|
431
|
+
//# sourceMappingURL=useConversation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/chat/useConversation.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * `useConversation`: the chat engine as one hook, the controller behind a full-page (or docked)\n * assistant. It returns what a chat surface needs and no markup; `@arbidocs/blocks/chat`'s\n * `ChatPage` takes it as its `chat` prop:\n *\n * ```tsx\n * const chat = useConversation({ workspaceId })\n * <ChatPage chat={chat} aside={<WorkflowLauncher \u2026 />} />\n * ```\n *\n * It is the same engine the ARBI app runs: the open conversation is the session's\n * (`ArbiSessionState.conversationId`, its viewed line `cursor`), the messages are the conversation\n * cache's, a turn goes through `useConversationActions` (send, branch, retry, stop, follow-ups\n * queued or steered into a running turn, comments to the people in a shared thread), and a run\n * started elsewhere is attached live (`useConnectRunStream`). So every surface gets the agent's\n * steps, the branches of an edited question, and interjections.\n *\n * A surface that must keep its own open conversation, beside another chat on the same page, mounts\n * inside its own session scope (`<ConversationScope>`).\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport type { AgentStepEvent, AskRequest, ChatMessage } from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { useAgentChats } from '../workforce'\nimport { useConversations } from '../hooks'\nimport { refreshDocuments, useDocuments } from '../documents/documents-data'\nimport { removeConversationFromLists } from '../conversation-list'\nimport { useArbiSessionState, useArbiSessionStore } from '../session'\nimport { toChatCitations, type ArbiChatCitation } from './citations'\nimport { getThreadsQueryKey } from './conversation-cache'\nimport {\n cachedAssistantMode,\n cachedMentionCandidates,\n isCommentToPeople,\n} from './conversation-mentions'\nimport { useAssistantName } from '../host/assistant-copy'\nimport { useConversationActions } from './useConversationActions'\nimport { useConversationData } from './useConversationData'\nimport { useBranchNavigation } from './useBranchNavigation'\nimport { useConnectRunStream } from './useConnectRunStream'\nimport type { QueuedMessage } from './run-state'\nimport { useWorkflowRunTitles, type WorkflowRunRow } from './workflow-run-titles'\n\nexport type { ArbiChatCitation, ArbiChatPassage } from './citations'\n\nexport type ArbiChatRole = 'user' | 'assistant'\nexport type ArbiChatMessageStatus = 'streaming' | 'complete' | 'error'\n\nexport interface ArbiChatMessage {\n mentions?: AskRequest['mentions']\n authorId?: string\n id: string\n role: ArbiChatRole\n /** Markdown for an assistant message, plain text for a user message. */\n content: string\n status: ArbiChatMessageStatus\n /** Why an assistant message failed. */\n error?: string\n /** Agent steps (tool calls, reasoning) the answer took. */\n stepCount?: number\n /** The answer's agent steps, live while it runs. */\n steps?: AgentStepEvent[]\n /** The sources behind `[statement](#cite-N)` marks in `content`. */\n citations?: ArbiChatCitation[]\n /** The reader stopped the answer; `content` is what had streamed. */\n stopped?: boolean\n /** The backend id of a finished assistant answer: what a follow-up chains from. */\n responseId?: string\n /**\n * A user message the server sent to start a workflow's step (its `tools.workflow_step`): the\n * step's id. A chat shows it as that step, not as the raw instruction.\n */\n workflowStep?: string\n /**\n * One of several versions of this message (an edited question, an answer asked again): which\n * one is shown (0-based) and how many there are. `switchBranch` shows another.\n */\n branch?: { index: number; count: number }\n}\n\n/** The workflow step a stored message starts (its `tools.workflow_step` marker), if any. */\nexport function workflowStepOf(tools: object | null | undefined): string | undefined {\n const marker = (tools as Record<string, unknown> | null | undefined)?.workflow_step as\n { workflow_step?: unknown } | undefined\n return typeof marker?.workflow_step === 'string' ? marker.workflow_step : undefined\n}\n\nexport interface ArbiChatThread {\n id: string\n /** The backend title, else the first question; empty until there is one. */\n title: string\n}\n\nexport interface ArbiChatDocument {\n id: string\n name: string\n isSelected: boolean\n}\n\nexport interface UseConversationOptions {\n /** Use an owned agent's independent session, history and sandbox files. */\n agentId?: string\n /** The workspace to chat in (default: the session's). */\n workspaceId?: string\n /** Assistant configuration or model id every turn uses (default: the person's last one). */\n model?: string\n /** Longest auto-title in characters (used until the backend has titled the conversation). Default 48. */\n titleLength?: number\n}\n\nexport interface ArbiConversation {\n assistantMode: 'always' | 'mentioned'\n isUpdatingAssistantMode: boolean\n isPostingComment: boolean\n setAssistantMode: (mode: 'always' | 'mentioned') => Promise<void>\n threads: ArbiChatThread[]\n /** The open conversation's id, or `new` for a chat not sent yet. */\n activeThreadId: string\n /** The viewed line of the open conversation. */\n messages: ArbiChatMessage[]\n /** An answer is running in the open conversation. */\n isRunning: boolean\n /** The last turn failed (the message list also carries the failed message). */\n error: string | null\n /** A stored conversation's messages are loading. */\n isLoadingThread: boolean\n /** The conversation list is loading. */\n isLoadingThreads: boolean\n /** Deleting a conversation or changing its mode failed. */\n historyError: string | null\n documents: ArbiChatDocument[]\n isLoadingDocuments: boolean\n isUploading: boolean\n uploadError: string | null\n /**\n * Send a question, or a comment to the people in a shared thread. While an answer runs, the\n * question waits in the running turn's queue (`queue`) or steers it.\n */\n send: (text: string, options?: { mentions?: AskRequest['mentions'] }) => Promise<void>\n /** Send `text` while the answer runs: the agent takes it into the running turn or queues it. */\n interject: (text: string) => Promise<void>\n /** Follow-ups waiting for the running answer. */\n queue: readonly QueuedMessage[]\n /** Ask `text` again in place of the message after `parentId` (an edit): a new branch. */\n branch: (parentId: string | null, text: string) => Promise<void>\n /** Show another version of a branched message (`ArbiChatMessage.branch`). */\n switchBranch: (messageId: string, index: number) => void\n /** Re-ask the question whose answer failed. */\n retry: () => Promise<void>\n /** Stop the running answer; what streamed so far stays, marked stopped. */\n stop: () => void\n selectThread: (id: string) => void\n newThread: () => void\n /** Deletes the conversation on the backend too. */\n deleteThread: (id: string) => void\n toggleDocument: (id: string) => void\n selectAllDocuments: () => void\n upload: (files: File[]) => Promise<void>\n}\n\n/** First words of a question as a title: whole words, no trailing punctuation, ellipsis when cut. */\nexport function titleFromQuestion(question: string, maxLength = 48): string {\n const flat = question.replace(/\\s+/g, ' ').trim()\n if (flat.length <= maxLength) return flat\n const cut = flat.slice(0, maxLength)\n const lastSpace = cut.lastIndexOf(' ')\n const words = lastSpace > maxLength / 2 ? cut.slice(0, lastSpace) : cut\n return `${words.replace(/[\\s,;:.\\-\u2013\u2014]+$/, '')}\u2026`\n}\n\nconst FAILED_MESSAGE = 'The assistant request failed.'\nconst UNFINISHED_MESSAGE = 'The answer did not finish. Try again.'\nconst NEW = 'new'\n/** No conversation rows (a stable empty list). */\nconst NO_ROWS: readonly WorkflowRunRow[] = []\n\nconst messageOf = (e: unknown, fallback: string) => (e instanceof Error ? e.message : fallback)\n\n/** The signed-in user's id, or null before the session is known. */\nfunction signedInUserId(arbi: { user: { identity: () => { externalId: string } | null } }) {\n try {\n return arbi.user.identity()?.externalId ?? null\n } catch {\n return null\n }\n}\n\n/** A message of the conversation cache as the chat surface shows it. */\nfunction toChatMessage(m: ChatMessage, branch: ArbiChatMessage['branch']): ArbiChatMessage | null {\n if (m.role === 'system') return null\n const running = m.isLoading === true || m.status === 'in_progress' || m.status === 'queued'\n if (m.role === 'user') {\n if (!m.content.trim()) return null\n const workflowStep = workflowStepOf(m.tools)\n return {\n id: m.external_id,\n role: 'user',\n content: m.content,\n status: 'complete',\n ...(workflowStep ? { workflowStep } : {}),\n ...(m.created_by_ext_id ? { authorId: m.created_by_ext_id } : {}),\n ...(m.mentions?.length ? { mentions: m.mentions as AskRequest['mentions'] } : {}),\n ...(branch ? { branch } : {}),\n }\n }\n const failed = m.status === 'failed' || m.isError === true\n const stopped = m.status === 'cancelled'\n if (!m.content.trim() && !running && !failed && !stopped) return null\n const citations = toChatCitations({ tools: m.tools })\n const steps = m.agentSteps ?? []\n return {\n id: m.external_id,\n role: 'assistant',\n content: m.content,\n status: running ? 'streaming' : failed ? 'error' : 'complete',\n ...(stopped ? { stopped: true } : {}),\n ...(failed ? { error: m.status === 'failed' ? FAILED_MESSAGE : UNFINISHED_MESSAGE } : {}),\n ...(running || failed ? {} : { responseId: m.external_id }),\n ...(steps.length > 0 ? { steps, stepCount: steps.length } : {}),\n ...(citations.length > 0 ? { citations } : {}),\n ...(branch ? { branch } : {}),\n }\n}\n\nexport function useConversation(options: UseConversationOptions = {}): ArbiConversation {\n const { agentId, model, titleLength = 48 } = options\n const arbi = useArbi()\n const queryClient = useQueryClient()\n const session = useArbiSessionStore()\n const sessionWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const workspaceId = options.workspaceId ?? sessionWorkspaceId ?? undefined\n const conversationId = useArbiSessionState((s) => s.conversationId)\n const conversationKey = conversationId ?? NEW\n const generation = useArbiSessionState((s) => s.generating[conversationKey])\n const newConversationMode = useArbiSessionState((s) => s.newConversationAssistantMode)\n const queuedMessages = useArbiSessionState((s) => s.queuedMessages)\n const isRunning = !!generation?.isGenerating\n\n // The surface's workspace and model are the session's while it is mounted.\n useEffect(() => {\n if (workspaceId && session.getState().workspaceId !== workspaceId)\n session.setWorkspaceId(workspaceId)\n }, [session, workspaceId])\n useEffect(() => {\n if (model !== undefined) session.setChatModel(model)\n }, [session, model])\n // An agent chat not sent yet runs through the agent.\n useEffect(() => {\n if (agentId && workspaceId && !conversationId) session.setNewAgentChat({ agentId, workspaceId })\n }, [session, agentId, workspaceId, conversationId])\n\n const { data: docs = [], isLoading: isLoadingDocuments } = useDocuments(workspaceId)\n const ordinaryHistory = useConversations(workspaceId, { enabled: !agentId, live: true })\n const agentHistory = useAgentChats(agentId)\n const stored = useMemo(\n () =>\n agentId\n ? (agentHistory.data ?? [])\n .filter((chat) => chat.workspace_ext_id === workspaceId)\n .map((chat) => ({\n external_id: chat.conversation_ext_id,\n title: chat.title,\n updated_at: chat.updated_at,\n message_count: 1,\n status: null as string | null,\n assistant_mode: 'always' as 'always' | 'mentioned',\n }))\n : (ordinaryHistory.data ?? []),\n [agentId, agentHistory.data, ordinaryHistory.data, workspaceId]\n )\n const isLoadingThreads = agentId ? agentHistory.isLoading : ordinaryHistory.isLoading\n // A saved workflow's untitled run is named after its workflow (and titled so once opened).\n const runTitles = useWorkflowRunTitles(\n agentId ? NO_ROWS : (ordinaryHistory.data ?? NO_ROWS),\n conversationId,\n workspaceId\n )\n\n const data = useConversationData()\n const {\n messageHistory,\n threads: lines,\n threadsLoading,\n threadsError,\n parentMessageId,\n setParentMessageId,\n } = data\n useConnectRunStream(conversationId, messageHistory)\n const { getBranchControlForMessage, switchBranch: showBranch } = useBranchNavigation(\n lines,\n parentMessageId,\n messageHistory,\n setParentMessageId\n )\n\n const actions = useConversationActions({\n selectedWorkspaceId: workspaceId ?? null,\n parentMessageId,\n conversationKey,\n isGenerating: isRunning,\n lastFailedMessage: generation?.lastFailedMessage ?? null,\n })\n\n const [deselected, setDeselected] = useState<ReadonlySet<string>>(new Set())\n const [stagedFiles, setStagedFiles] = useState<Array<{ id: string; name: string }>>([])\n const [isPostingComment, setIsPostingComment] = useState(false)\n const [isUpdatingAssistantMode, setIsUpdatingAssistantMode] = useState(false)\n const [isUploading, setIsUploading] = useState(false)\n const [uploadError, setUploadError] = useState<string | null>(null)\n const [historyError, setHistoryError] = useState<string | null>(null)\n\n // The document selection and staged files belong to one workspace and agent.\n const scope = `${workspaceId ?? ''}:${agentId ?? ''}`\n const [currentScope, setCurrentScope] = useState(scope)\n if (currentScope !== scope) {\n setCurrentScope(scope)\n setDeselected(new Set())\n setStagedFiles([])\n setUploadError(null)\n setHistoryError(null)\n }\n // Another workspace or agent starts on a new chat.\n const [chatScope, setChatScope] = useState(scope)\n useEffect(() => {\n if (chatScope === scope) return\n setChatScope(scope)\n session.startNewConversation()\n }, [chatScope, scope, session])\n\n const assistantMode: 'always' | 'mentioned' = conversationId\n ? cachedAssistantMode(queryClient, conversationId, 'always')\n : newConversationMode\n\n const messages = useMemo(\n () =>\n messageHistory\n .map((m) => {\n const point = getBranchControlForMessage(m.external_id)\n const branch =\n point && point.branches.length > 1\n ? { index: point.currentBranchIndex, count: point.branches.length }\n : undefined\n return toChatMessage(m, branch)\n })\n .filter((m): m is ArbiChatMessage => m !== null),\n [messageHistory, getBranchControlForMessage]\n )\n\n // The list: the chat being written, then the stored conversations, newest first.\n const threads = useMemo(() => {\n const firstQuestion = messages.find((m) => m.role === 'user')?.content ?? ''\n const localTitle = firstQuestion ? titleFromQuestion(firstQuestion, titleLength) : ''\n const persisted = [...stored]\n .filter((c) => c.status != null || c.message_count > 0 || c.external_id === conversationId)\n .sort((a, b) => b.updated_at.localeCompare(a.updated_at))\n .map((c) => ({\n id: c.external_id,\n title:\n c.title ||\n runTitles[c.external_id] ||\n (c.external_id === conversationId ? localTitle : ''),\n }))\n const isListed = persisted.some((t) => t.id === conversationId)\n return [\n ...(conversationId === null\n ? [{ id: NEW, title: localTitle }]\n : isListed\n ? []\n : [{ id: conversationId, title: localTitle }]),\n ...persisted,\n ]\n }, [stored, conversationId, messages, titleLength, runTitles])\n\n const selectedIds = useMemo(\n () =>\n (agentId ? [] : docs)\n .map((d) => d.external_id)\n .filter((id): id is string => !!id && !deselected.has(id)),\n [docs, deselected, agentId]\n )\n const documents = useMemo<ArbiChatDocument[]>(\n () =>\n agentId\n ? stagedFiles.map((file) => ({ ...file, isSelected: !deselected.has(file.id) }))\n : docs\n .filter((d): d is typeof d & { external_id: string } => !!d.external_id)\n .map((d) => ({\n id: d.external_id,\n name: d.file_name ?? d.external_id,\n isSelected: !deselected.has(d.external_id),\n })),\n [docs, deselected, agentId, stagedFiles]\n )\n\n /** The question as the agent gets it: the files staged in its sandbox are named. */\n const withStagedFiles = useCallback(\n (text: string) => {\n const staged = stagedFiles.filter((file) => !deselected.has(file.id))\n if (!agentId || staged.length === 0) return text\n return (\n text +\n '\\n\\nSource files staged in your sandbox:\\n' +\n staged.map((file) => `${file.name}: ${file.id}`).join('\\n')\n )\n },\n [agentId, stagedFiles, deselected]\n )\n\n const { handleSendMessage, handleCreateBranch } = actions\n const assistantName = useAssistantName()\n const send = useCallback(\n async (text: string) => {\n const trimmed = text.trim()\n if (!trimmed || isUpdatingAssistantMode) return\n setHistoryError(null)\n // The turn is grounded on the documents selected here.\n session.setConversationDocuments(\n conversationKey,\n selectedIds.map((docId) => ({ docId, isPinned: false }))\n )\n const candidates = cachedMentionCandidates(\n queryClient,\n workspaceId,\n signedInUserId(arbi),\n assistantName\n )\n const isComment = isCommentToPeople(queryClient, conversationId, trimmed, candidates)\n session.setDraft(isComment ? trimmed : withStagedFiles(trimmed))\n if (isComment) setIsPostingComment(true)\n try {\n await handleSendMessage()\n } finally {\n if (isComment) setIsPostingComment(false)\n }\n },\n [\n isUpdatingAssistantMode,\n session,\n conversationKey,\n selectedIds,\n queryClient,\n workspaceId,\n arbi,\n conversationId,\n withStagedFiles,\n handleSendMessage,\n assistantName,\n ]\n )\n\n const branch = useCallback(\n (parentId: string | null, text: string) => handleCreateBranch(parentId, withStagedFiles(text)),\n [handleCreateBranch, withStagedFiles]\n )\n\n const switchBranch = useCallback(\n (messageId: string, index: number) => {\n const point = getBranchControlForMessage(messageId)\n if (point) showBranch(point, index)\n },\n [getBranchControlForMessage, showBranch]\n )\n\n const retry = useCallback(async () => {\n if (isRunning) return\n if (generation?.lastFailedMessage) {\n await actions.handleRetrySend()\n return\n }\n // A stored answer that failed: ask its question again in its place.\n const failedIndex = messageHistory.findLastIndex(\n (m) => m.role === 'assistant' && (m.status === 'failed' || m.isError)\n )\n const failed = messageHistory[failedIndex]\n const question = failed\n ? (messageHistory.find((m) => m.external_id === failed.parent_message_ext_id) ??\n messageHistory[failedIndex - 1])\n : undefined\n if (!question || question.role !== 'user') return\n await actions.handleRetryOrphanedMessage(\n question.content,\n question.parent_message_ext_id ?? null,\n question.external_id\n )\n }, [isRunning, generation?.lastFailedMessage, actions, messageHistory])\n\n const { handleAbortGeneration } = actions\n const stop = useCallback(() => void handleAbortGeneration(), [handleAbortGeneration])\n\n const setAssistantMode = useCallback(\n async (mode: 'always' | 'mentioned') => {\n if (isRunning || isPostingComment || isUpdatingAssistantMode) return\n if (!conversationId) {\n session.setNewConversationAssistantMode(mode)\n return\n }\n setIsUpdatingAssistantMode(true)\n setHistoryError(null)\n try {\n await arbi.conversations.setAssistantMode(conversationId, mode)\n queryClient.setQueryData<{ assistant_mode?: string }>(\n getThreadsQueryKey(conversationId),\n (old) => (old ? { ...old, assistant_mode: mode } : old)\n )\n void queryClient.invalidateQueries({ queryKey: getThreadsQueryKey(conversationId) })\n void (agentId ? agentHistory.refetch() : ordinaryHistory.refetch())\n } catch (e) {\n setHistoryError(messageOf(e, 'The assistant mode could not be changed.'))\n } finally {\n setIsUpdatingAssistantMode(false)\n }\n },\n [\n isRunning,\n isPostingComment,\n isUpdatingAssistantMode,\n conversationId,\n session,\n arbi,\n queryClient,\n agentId,\n agentHistory,\n ordinaryHistory,\n ]\n )\n\n const newThread = useCallback(() => {\n setHistoryError(null)\n session.startNewConversation()\n }, [session])\n\n const selectThread = useCallback(\n (id: string) => {\n setHistoryError(null)\n if (id === NEW) {\n session.startNewConversation()\n return\n }\n if (agentId) session.setAgentChatOwner(id, agentId)\n session.setConversationId(id)\n },\n [session, agentId]\n )\n\n const deleteThread = useCallback(\n (id: string) => {\n if (id === NEW) {\n session.startNewConversation()\n return\n }\n void (async () => {\n try {\n await arbi.conversations.delete(id)\n removeConversationFromLists(queryClient, id)\n if (session.getState().conversationId === id) session.startNewConversation()\n } catch (e) {\n setHistoryError(messageOf(e, 'The conversation could not be deleted.'))\n }\n })()\n },\n [arbi, queryClient, session]\n )\n\n const toggleDocument = useCallback((id: string) => {\n setDeselected((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }, [])\n const selectAllDocuments = useCallback(() => setDeselected(new Set()), [])\n\n const upload = useCallback(\n async (files: File[]) => {\n if (files.length === 0) return\n setIsUploading(true)\n setUploadError(null)\n try {\n const uploaded: string[] = []\n for (const file of files) {\n if (agentId) {\n const staged = await arbi.agents.stageFile(agentId, file, file.name)\n setStagedFiles((all) => [\n ...all.filter((existing) => existing.id !== staged.path),\n { id: staged.path, name: staged.name },\n ])\n } else {\n // Into the chat's own workspace, named on the request: a scoped or docked chat's\n // workspace need not be the one open, and a switch meanwhile must not move the file.\n const result = await arbi.documents.upload([file], {\n ...(workspaceId ? { workspaceExtId: workspaceId } : {}),\n })\n uploaded.push(...(result.doc_ext_ids ?? []))\n }\n }\n // New documents are not deselected, so they join the selection by default.\n if (uploaded.length) await refreshDocuments(queryClient, arbi, uploaded)\n } catch (e) {\n setUploadError(messageOf(e, 'The upload failed.'))\n } finally {\n setIsUploading(false)\n }\n },\n [arbi, queryClient, agentId, workspaceId]\n )\n\n const runningAnswer = generation?.streamingAssistantId\n const queue = (runningAnswer && queuedMessages[runningAnswer]) || []\n const last = messages[messages.length - 1]\n\n return {\n assistantMode,\n isUpdatingAssistantMode,\n isPostingComment,\n setAssistantMode,\n threads,\n activeThreadId: conversationKey,\n messages,\n isRunning,\n error: generation?.error ?? (last?.status === 'error' ? (last.error ?? null) : null),\n isLoadingThread: !!conversationId && threadsLoading && !threadsError,\n isLoadingThreads,\n historyError:\n historyError ??\n (threadsError ? messageOf(threadsError, 'The conversation could not be loaded.') : null),\n documents,\n isLoadingDocuments,\n isUploading,\n uploadError,\n send,\n interject: send,\n queue,\n branch,\n switchBranch,\n retry,\n stop,\n selectThread,\n newThread,\n deleteThread,\n toggleDocument,\n selectAllDocuments,\n upload,\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["branch"]
|
|
7
|
+
}
|