@arbidocs/react 0.5.86 → 0.5.88

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.
Files changed (117) hide show
  1. package/README.md +2 -3
  2. package/dist/artifacts/index.cjs +46 -48
  3. package/dist/artifacts/index.cjs.map +1 -1
  4. package/dist/artifacts/index.js +7 -9
  5. package/dist/artifacts/index.js.map +1 -1
  6. package/dist/calls/livekit/index.cjs +60 -62
  7. package/dist/calls/livekit/index.cjs.map +1 -1
  8. package/dist/calls/livekit/index.js +6 -8
  9. package/dist/calls/livekit/index.js.map +1 -1
  10. package/dist/{chunk-Z3LLUO32.cjs → chunk-5NOZDH3F.cjs} +12 -2
  11. package/dist/chunk-5NOZDH3F.cjs.map +1 -0
  12. package/dist/{chunk-WQY3RQ6G.js → chunk-73ENECAT.js} +5 -6
  13. package/dist/{chunk-LUDIYWT7.cjs.map → chunk-73ENECAT.js.map} +1 -1
  14. package/dist/{chunk-2Y2WOIHH.cjs → chunk-AOPGD23L.cjs} +60 -148
  15. package/dist/chunk-AOPGD23L.cjs.map +1 -0
  16. package/dist/{chunk-G4Z3IP4J.js → chunk-BF5KW5ZI.js} +3 -17
  17. package/dist/chunk-BF5KW5ZI.js.map +1 -0
  18. package/dist/{chunk-TK7ERJPE.js → chunk-BFNY3RZG.js} +22 -12
  19. package/dist/chunk-BFNY3RZG.js.map +1 -0
  20. package/dist/{chunk-U4PWVSCT.cjs → chunk-C4WODQGO.cjs} +24 -11
  21. package/dist/chunk-C4WODQGO.cjs.map +1 -0
  22. package/dist/{chunk-E7VD5WNY.cjs → chunk-DS7NTSKH.cjs} +41 -74
  23. package/dist/chunk-DS7NTSKH.cjs.map +1 -0
  24. package/dist/{chunk-JT7PN7JH.js → chunk-DU2P354H.js} +6 -37
  25. package/dist/chunk-DU2P354H.js.map +1 -0
  26. package/dist/{chunk-TAVS54EN.cjs → chunk-GKWMT64A.cjs} +6 -6
  27. package/dist/{chunk-TAVS54EN.cjs.map → chunk-GKWMT64A.cjs.map} +1 -1
  28. package/dist/{chunk-AXKHDLBB.cjs → chunk-HEVPIVF2.cjs} +15 -15
  29. package/dist/{chunk-AXKHDLBB.cjs.map → chunk-HEVPIVF2.cjs.map} +1 -1
  30. package/dist/{chunk-XPLD4LFC.js → chunk-KTXZ222T.js} +6 -91
  31. package/dist/chunk-KTXZ222T.js.map +1 -0
  32. package/dist/{chunk-PXWKJI4K.cjs → chunk-LBAG7KL7.cjs} +35 -261
  33. package/dist/chunk-LBAG7KL7.cjs.map +1 -0
  34. package/dist/{chunk-CSPAEVZS.js → chunk-MS43RNXM.js} +5 -5
  35. package/dist/{chunk-CSPAEVZS.js.map → chunk-MS43RNXM.js.map} +1 -1
  36. package/dist/{chunk-OC7F5SNA.cjs → chunk-MXP4O4DI.cjs} +5 -5
  37. package/dist/{chunk-OC7F5SNA.cjs.map → chunk-MXP4O4DI.cjs.map} +1 -1
  38. package/dist/{chunk-ZWFMFOGP.cjs → chunk-NDIKMOBJ.cjs} +4 -4
  39. package/dist/{chunk-ZWFMFOGP.cjs.map → chunk-NDIKMOBJ.cjs.map} +1 -1
  40. package/dist/{chunk-XAEVT7ZM.js → chunk-NNAJLY6B.js} +34 -257
  41. package/dist/chunk-NNAJLY6B.js.map +1 -0
  42. package/dist/{chunk-LUDIYWT7.cjs → chunk-QLRDHLWR.cjs} +72 -73
  43. package/dist/chunk-QLRDHLWR.cjs.map +1 -0
  44. package/dist/{chunk-DZUBZ45Y.cjs → chunk-RLSBRZ6Z.cjs} +2 -17
  45. package/dist/chunk-RLSBRZ6Z.cjs.map +1 -0
  46. package/dist/{chunk-VGAA7AFS.js → chunk-S3OGDLDC.js} +4 -13
  47. package/dist/chunk-S3OGDLDC.js.map +1 -0
  48. package/dist/{chunk-NNWMHMEC.js → chunk-UW2SGTI5.js} +3 -3
  49. package/dist/{chunk-NNWMHMEC.js.map → chunk-UW2SGTI5.js.map} +1 -1
  50. package/dist/{chunk-QRCMKEE6.js → chunk-VSCU7K4V.js} +11 -3
  51. package/dist/chunk-VSCU7K4V.js.map +1 -0
  52. package/dist/{chunk-C44GO33B.js → chunk-WL2Y2T47.js} +3 -3
  53. package/dist/{chunk-C44GO33B.js.map → chunk-WL2Y2T47.js.map} +1 -1
  54. package/dist/{chunk-47YVW3J4.js → chunk-YQBDEOVE.js} +4 -4
  55. package/dist/{chunk-47YVW3J4.js.map → chunk-YQBDEOVE.js.map} +1 -1
  56. package/dist/{chunk-Q6U7ALNV.cjs → chunk-ZHXYFJIA.cjs} +44 -54
  57. package/dist/chunk-ZHXYFJIA.cjs.map +1 -0
  58. package/dist/document-tools/core.cjs +100 -110
  59. package/dist/document-tools/core.d.cts +3 -78
  60. package/dist/document-tools/core.d.ts +3 -78
  61. package/dist/document-tools/core.js +5 -7
  62. package/dist/document-tools/index.cjs +102 -112
  63. package/dist/document-tools/index.cjs.map +1 -1
  64. package/dist/document-tools/index.d.cts +2 -2
  65. package/dist/document-tools/index.d.ts +2 -2
  66. package/dist/document-tools/index.js +6 -8
  67. package/dist/document-tools/index.js.map +1 -1
  68. package/dist/index.cjs +1740 -2305
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/{index.d-BDcwpFVa.d.cts → index.d-1_bJB-Yl.d.cts} +1 -58
  71. package/dist/{index.d-BDcwpFVa.d.ts → index.d-1_bJB-Yl.d.ts} +1 -58
  72. package/dist/{index.d-Deqz5-pF.d.ts → index.d-ChaR6kMc.d.cts} +1 -6
  73. package/dist/{index.d-Deqz5-pF.d.cts → index.d-ChaR6kMc.d.ts} +1 -6
  74. package/dist/index.d.cts +184 -1423
  75. package/dist/index.d.ts +184 -1423
  76. package/dist/index.js +281 -799
  77. package/dist/index.js.map +1 -1
  78. package/dist/{query-keys.d-Dm0NL9nr.d.cts → query-keys.d-D6SAUl7S.d.cts} +0 -9
  79. package/dist/{query-keys.d-Dm0NL9nr.d.ts → query-keys.d-D6SAUl7S.d.ts} +0 -9
  80. package/dist/shell/index.cjs +48 -53
  81. package/dist/shell/index.d.cts +1 -1
  82. package/dist/shell/index.d.ts +1 -1
  83. package/dist/shell/index.js +4 -5
  84. package/dist/ui/index.cjs +156 -169
  85. package/dist/ui/index.d.cts +1 -1
  86. package/dist/ui/index.d.ts +1 -1
  87. package/dist/ui/index.js +3 -4
  88. package/dist/viewers/index.cjs +0 -120
  89. package/dist/viewers/index.cjs.map +1 -1
  90. package/dist/viewers/index.d.cts +3 -40
  91. package/dist/viewers/index.d.ts +3 -40
  92. package/dist/viewers/index.js +1 -120
  93. package/dist/viewers/index.js.map +1 -1
  94. package/package.json +3 -3
  95. package/dist/chunk-2Y2WOIHH.cjs.map +0 -1
  96. package/dist/chunk-CPZ36AQS.js +0 -11
  97. package/dist/chunk-CPZ36AQS.js.map +0 -1
  98. package/dist/chunk-DZUBZ45Y.cjs.map +0 -1
  99. package/dist/chunk-E7VD5WNY.cjs.map +0 -1
  100. package/dist/chunk-G4Z3IP4J.js.map +0 -1
  101. package/dist/chunk-JT7PN7JH.js.map +0 -1
  102. package/dist/chunk-PXWKJI4K.cjs.map +0 -1
  103. package/dist/chunk-Q6U7ALNV.cjs.map +0 -1
  104. package/dist/chunk-QRCMKEE6.js.map +0 -1
  105. package/dist/chunk-RCKA7BEF.cjs +0 -14
  106. package/dist/chunk-RCKA7BEF.cjs.map +0 -1
  107. package/dist/chunk-TK7ERJPE.js.map +0 -1
  108. package/dist/chunk-U4PWVSCT.cjs.map +0 -1
  109. package/dist/chunk-VGAA7AFS.js.map +0 -1
  110. package/dist/chunk-VGMMK5OM.cjs +0 -26
  111. package/dist/chunk-VGMMK5OM.cjs.map +0 -1
  112. package/dist/chunk-VGO77X5U.js +0 -22
  113. package/dist/chunk-VGO77X5U.js.map +0 -1
  114. package/dist/chunk-WQY3RQ6G.js.map +0 -1
  115. package/dist/chunk-XAEVT7ZM.js.map +0 -1
  116. package/dist/chunk-XPLD4LFC.js.map +0 -1
  117. package/dist/chunk-Z3LLUO32.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,44 +1,40 @@
1
1
  import { AudioViewer, ImageViewer, VideoViewer } from './chunk-HDCRPPBW.js';
2
- import { useUserSettings, invalidateConversationLists, patchConversation, invalidateConversationDetails, removeConversationFromLists, addConversationToList, findConversation, isConversationShared, patchConversationList, useFeature, useAccountClient, useUpdateUserSettings, useIsEntitled, myChatId, upsertChat, appendToThread, dropFromThread, deleteChatMessage, removeChat, getOpenChat, cachedChat, applyChatEvent, applyCallEvent } from './chunk-WQY3RQ6G.js';
3
- export { AUDIENCE_CHOICES, CALL_CAPTION_TOPIC, CALL_CHAT_MAX_CHARS, CALL_CHAT_TOPIC, CALL_MODERATION_TOPIC, CALL_RECORDING_TOPIC, CALL_TRANSCRIPTION_TOPIC, CALL_WEBINAR_TOPIC, CAPTION_MAX_CHARS, COMPOSITE_AUDIO_BITS_PER_SECOND, COMPOSITE_VIDEO_BITS_PER_SECOND, DEFAULT_JOIN_CHOICES, EMPTY_CALL_SESSION, EXPORT_SAMPLE_RATE, HISTORY_LIMIT, LIVE_SEGMENTER, MAX_AVATAR_FILE_BYTES, MUTED_DEDUPE_MS, PLAYBACK_LOOKAHEAD_MS, READ_ONLY_MEETING_TEXT, RECORDING_CHUNK_MS, RECORDING_SEGMENTER, SEGMENT_FRAME_MS, SEGMENT_ID_PATTERN, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SPEAKER_AUDIO_BITS_PER_SECOND, TrackUploader, UPLOAD_ATTEMPTS, UPLOAD_BACKOFF_MS, acceptRing, addConversationToList, appendToThread, applyAgentDmStatus, applyCallEvent, applyChatEvent, applyChatMessage, applyChatRead, applyChatUpdated, arbiAccountClient, buildMeetingChatBody, cachedChat, cachedChats, callLink, callMemberKeys, callSession, chatByExtId, chatHasLiveCall, chatLiveCallId, chatTranscriptRef, clearMeetingChatCache, clearTrackUploaders, clockTime, compositeFiles, compositeTrack, conversationKeyForCall, createLocalFeatureStore, createMutedNotifier, createTrackCutter, cutAtPauses, declineRing, decodeCallChatPacket, decodeCaptionPacket, decodeMono16k, decryptPart, encodeCallChatPacket, encodeCaptionPacket, encodeWav, encryptPart, ensureMeetingChat, entitlementRefusal, extensionFor, fetchPart, fileSafe, findConversation, floatToWav, formatTranscriptMarkdown, getOpenChat, hasRecordingTranscript, invalidateCall, invalidateConversationDetails, invalidateConversationLists, isConversationListKey, isConversationShared, isRecordingOver, isRecordingSegmentId, isRetryable, isWorkspaceGuestOf, joinFromPreJoin, knownMeetingChat, loadMeetingHistory, markRejoining, meetingChatRefFrom, meetingRefForCall, mergeChatLines, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, myChatId, newPacketId, newSegmentId, newTrackKey, nextSeqAfter, onCallEvent, openCall, openQuestion, openRecording, parseWebinarPacket, partKey, partOffsetMs, partsDue, patchConversation, patchConversationList, persistMeetingMessage, persistTranscriptSegment, playheadAt, postRecordingDocsToThread, postTranscriptToThread, readLocalFeature, recordingFiles, recordingWindowsOf, rejoinAsAudience, removeChat, removeConversationFromLists, resetCallSession, resolveMeetingChat, saveRecordingFilesToThread, schedulePart, sealQuestionText, serverCallsExperimental, setOpenChat, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startThreadCall, startsMediaFile, storeTranscriptSegment, stripSpeakerPrefix, supersedeLiveTranscript, supersededTranscriptLines, threadHasLiveCall, threadLiveCallId, threadTranscriptLines, threadTranscriptRef, threadTranscriptText, timelineDurationMs, timelineOf, toProfileView, trackUploaderFor, transcribeRecording, transcriptPersistRole, transcriptSegmentOf, unwrapTrackKey, upsertChat, useAccountClient, useAvatarCrop, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallSession, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCanHostCalls, useEntitlements, useFeature, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wrapTrackKey, writeSamples } from './chunk-WQY3RQ6G.js';
4
- import { replayableTagMutations, inWorkspace, primeOnClient, patchDocuments, setCachedDocument, adjustTagCounts, patchCachedDocument, FINISHED_DOCUMENT_STATUSES, refreshDocuments, getCachedDocuments, useArbiWsStore, IN_FLIGHT_DOCUMENT_STATUSES, useCapturingWorkspace, QUEUED_WRITE_RETRY, isWorkspaceUnavailable, primeOnArbi, forgetDocuments, useDocument, useSimilarDocuments, SIMILARITY_THRESHOLD, QUEUED_WRITE_BLOCKED_MESSAGE, isBlockedOnWorkspace, useDocuments, finishEntityExtraction } from './chunk-VGAA7AFS.js';
5
- export { DISMISSED_TASK_TTL_MS, DOCUMENTS_FIRST_PAGE_MEASURE, DOCUMENTS_FIRST_PAGE_SIZE, DOCUMENTS_PAGE_SIZE, FINISHED_DOCUMENT_STATUSES, IN_FLIGHT_DOCUMENT_STATUSES, SIMILARITY_THRESHOLD, adjustTagCounts, dropTagFromCachedDocuments, finishEntityExtraction, forgetDocuments, getCachedDocuments, invalidateTagData, invalidateTagTables, isDocumentsLoading, isRowNewer, isStaleTaskUpdate, patchCachedDocument, patchDocuments, patchWorkspaceTags, refreshDocuments, resolveDocumentStatus, setCachedDocument, settledByRows, startEntityExtraction, stopDocumentsLoading, subscribeDocumentRows, upsertDocuments, useArbiWsStore, useCreateTag, useDeleteTag, useDocument, useDocuments, useDocumentsById, useDocumentsLoading, useEntityExtractionDocIds, useExtractEntities, useInvalidateTagData, useIsCreatingTag, useRefreshDocuments, useSetTagValues, useSimilarDocuments, useTagKindSchema, useUpdateTag, useUpdateTagKindSchema } from './chunk-VGAA7AFS.js';
6
- import { useArbiSessionState, useArbiSession, useWorkspaces, useConversations, useConfig, useArbiSessionStore, useAvailableModels, useParsedDocument, useTags, selectDraft, useConversationThreads, createArbiSessionStore, useTransientView, useProjects, useAgents, useAssistantQuery, useActivity, queuedMessages, MIN_QUEUED_MESSAGE_VISIBILITY_MS } from './chunk-XPLD4LFC.js';
7
- export { DEFAULT_DOCUMENT_VIEWER_STATE, DOCUMENT_VIEWER_PANEL, EMPTY_CHAT_STATE, EMPTY_DOCUMENT_STATE, EMPTY_SESSION_STATE, MAX_THREAD_TABS, MIN_QUEUED_MESSAGE_VISIBILITY_MS, PROJECT_CREATION_DENIED_REASON, WORKSPACE_LAST_OPENED_KEY, WORKSPACE_STORAGE_KEY, agentControl, browserWorkspaceStorage, clearSealedDrafts, closePanelIn, composeArbiSessionStore, conversationKey, createArbiChatStore, createArbiDocumentSessionStore, createArbiLayoutStore, createArbiSessionStore, createArbiWorkspaceStore, createDebouncedWriter, createSealedDraftStorage, createStoragePersist, createUiStateStorage, defaultLayoutState, dmTabId, flushOnPageExit, isPanelOpen, isUsageMetered, layoutActionsOf, nextViewingDocument, openPanelIn, panelPlace, parseSavedChat, parseSavedDocuments, parseSavedLayout, queuedMessages, readWorkspaceLastOpened, restoreLayout, restoreSavedDocuments, savedChatOf, savedDocumentsOf, savedLayoutOf, selectDraft, selectIsGenerating, selectViewingDocumentId, threadTabId, useActivity, useAgents, useArbiSession, useArbiSessionState, useArbiSessionStore, useAssistantQuery, useAvailableModels, useBoxRole, useBuiltinCommands, useCanCreateProjects, useConfig, useConfigs, useConversationThreads, useConversations, useCurrentUser, useDeleteAgents, useDocumentVersionList, useFirmPool, useHealth, useMessageDetails, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSessionPageTab, useSessionView, useSignedInSession, useTags, useThumbnails, useTopUpFirmPool, useTransientView, useUserUsageToday, useWorkspaceActivity, useWorkspaces } from './chunk-XPLD4LFC.js';
8
- import { fetchDocumentFile, downloadBlob, fetchMarkupPdf, fetchDocumentPdf } from './chunk-47YVW3J4.js';
9
- import { arbiMutationKeys, arbiQueryKeys, mailQueryKeys, isUnderQueryKey, connectorQueryKeys, calendarQueryKeys } from './chunk-TK7ERJPE.js';
10
- export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, isUnderQueryKey, mailQueryKeys } from './chunk-TK7ERJPE.js';
11
- import { useArbi, useArbiHost } from './chunk-VGO77X5U.js';
12
- export { useArbi, useArbiHost, useDeploymentDomain } from './chunk-VGO77X5U.js';
13
- import { ArbiHost, linkMentions, extractMentions, UNBOUND, bindingOfRow, readLegacyThreadDocuments, forgetLegacyThreadDocuments, toMessageMentions, takeDocumentForTurn, hasMessageBody, createSearchSession, clearSearchSession } from './chunk-CSPAEVZS.js';
14
- export { LEGACY_THREAD_DOCUMENTS_KEY, MENTION_HREF_PREFIX, NotificationBell, Toaster, UNBOUND, bindingOfRow, clearSearchSession, createSearchSession, extractMentions, filterMentionCandidates, findMentionQuery, forgetLegacyThreadDocuments, hasMessageBody, insertMention, latestThreadOfDocument, linkMentions, mentionFromHref, openDocumentId, opensInWord, persistSearchSession, readLegacyThreadDocuments, requestSearch, savedDocumentIdFor, sharedSearchSession, takeDocumentForTurn, takePendingSearch, toMessageMentions, useOpenDocumentId, useRegisterOpenDocument, useTurnDocumentId } from './chunk-CSPAEVZS.js';
15
- import { notify, recordChatArtifact } from './chunk-G4Z3IP4J.js';
16
- export { DEFAULT_NOTIFY_TONE, MAX_SESSION_NOTIFICATIONS, clearChatArtifacts, configureNotify, getChatArtifact, getChatArtifacts, notify, persistNotifyHistory, recordChatArtifact, seedNotifications, selectUnread, toast, useChatArtifact, useConversationChatArtifact, useMessageChatArtifact, useNotify } from './chunk-G4Z3IP4J.js';
2
+ import { useUserSettings, patchConversation, invalidateConversationDetails, removeConversationFromLists, addConversationToList, findConversation, isConversationShared, patchConversationList, invalidateConversationLists, useFeature, useAccountClient, useUpdateUserSettings, useIsEntitled, myChatId, upsertChat, appendToThread, dropFromThread, deleteChatMessage, removeChat, getOpenChat, cachedChat, applyChatEvent, applyCallEvent } from './chunk-73ENECAT.js';
3
+ export { AUDIENCE_CHOICES, CALL_CAPTION_TOPIC, CALL_CHAT_MAX_CHARS, CALL_CHAT_TOPIC, CALL_MODERATION_TOPIC, CALL_RECORDING_TOPIC, CALL_TRANSCRIPTION_TOPIC, CALL_WEBINAR_TOPIC, CAPTION_MAX_CHARS, COMPOSITE_AUDIO_BITS_PER_SECOND, COMPOSITE_VIDEO_BITS_PER_SECOND, DEFAULT_JOIN_CHOICES, EMPTY_CALL_SESSION, EXPORT_SAMPLE_RATE, HISTORY_LIMIT, LIVE_SEGMENTER, MAX_AVATAR_FILE_BYTES, MUTED_DEDUPE_MS, PLAYBACK_LOOKAHEAD_MS, READ_ONLY_MEETING_TEXT, RECORDING_CHUNK_MS, RECORDING_SEGMENTER, SEGMENT_FRAME_MS, SEGMENT_ID_PATTERN, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SPEAKER_AUDIO_BITS_PER_SECOND, TrackUploader, UPLOAD_ATTEMPTS, UPLOAD_BACKOFF_MS, acceptRing, addConversationToList, appendToThread, applyAgentDmStatus, applyCallEvent, applyChatEvent, applyChatMessage, applyChatRead, applyChatUpdated, arbiAccountClient, buildMeetingChatBody, cachedChat, cachedChats, callLink, callMemberKeys, callSession, chatByExtId, chatHasLiveCall, chatLiveCallId, chatTranscriptRef, clearMeetingChatCache, clearTrackUploaders, clockTime, compositeFiles, compositeTrack, conversationKeyForCall, createLocalFeatureStore, createMutedNotifier, createTrackCutter, cutAtPauses, declineRing, decodeCallChatPacket, decodeCaptionPacket, decodeMono16k, decryptPart, encodeCallChatPacket, encodeCaptionPacket, encodeWav, encryptPart, ensureMeetingChat, entitlementRefusal, extensionFor, fetchPart, fileSafe, findConversation, floatToWav, formatTranscriptMarkdown, getOpenChat, hasRecordingTranscript, invalidateCall, invalidateConversationDetails, invalidateConversationLists, isConversationListKey, isConversationShared, isRecordingOver, isRecordingSegmentId, isRetryable, isWorkspaceGuestOf, joinFromPreJoin, knownMeetingChat, loadMeetingHistory, markRejoining, meetingChatRefFrom, meetingRefForCall, mergeChatLines, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, myChatId, newPacketId, newSegmentId, newTrackKey, nextSeqAfter, onCallEvent, openCall, openQuestion, openRecording, parseWebinarPacket, partKey, partOffsetMs, partsDue, patchConversation, patchConversationList, persistMeetingMessage, persistTranscriptSegment, playheadAt, postRecordingDocsToThread, postTranscriptToThread, readLocalFeature, recordingFiles, recordingWindowsOf, rejoinAsAudience, removeChat, removeConversationFromLists, resetCallSession, resolveMeetingChat, saveRecordingFilesToThread, schedulePart, sealQuestionText, serverCallsExperimental, setOpenChat, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startThreadCall, startsMediaFile, storeTranscriptSegment, stripSpeakerPrefix, supersedeLiveTranscript, supersededTranscriptLines, threadHasLiveCall, threadLiveCallId, threadTranscriptLines, threadTranscriptRef, threadTranscriptText, timelineDurationMs, timelineOf, toProfileView, trackUploaderFor, transcribeRecording, transcriptPersistRole, transcriptSegmentOf, unwrapTrackKey, upsertChat, useAccountClient, useAvatarCrop, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallSession, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCanHostCalls, useEntitlements, useFeature, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wrapTrackKey, writeSamples } from './chunk-73ENECAT.js';
4
+ import { replayableTagMutations, inWorkspace, primeOnClient, patchDocuments, setCachedDocument, adjustTagCounts, patchCachedDocument, FINISHED_DOCUMENT_STATUSES, refreshDocuments, getCachedDocuments, useArbiWsStore, IN_FLIGHT_DOCUMENT_STATUSES, useCapturingWorkspace, QUEUED_WRITE_RETRY, isWorkspaceUnavailable, primeOnArbi, forgetDocuments, useDocument, useSimilarDocuments, SIMILARITY_THRESHOLD, QUEUED_WRITE_BLOCKED_MESSAGE, isBlockedOnWorkspace, useDocuments, finishEntityExtraction } from './chunk-S3OGDLDC.js';
5
+ export { DISMISSED_TASK_TTL_MS, DOCUMENTS_FIRST_PAGE_MEASURE, DOCUMENTS_FIRST_PAGE_SIZE, DOCUMENTS_PAGE_SIZE, FINISHED_DOCUMENT_STATUSES, IN_FLIGHT_DOCUMENT_STATUSES, SIMILARITY_THRESHOLD, adjustTagCounts, dropTagFromCachedDocuments, finishEntityExtraction, forgetDocuments, getCachedDocuments, invalidateTagData, invalidateTagTables, isDocumentsLoading, isRowNewer, isStaleTaskUpdate, patchCachedDocument, patchDocuments, patchWorkspaceTags, refreshDocuments, resolveDocumentStatus, setCachedDocument, settledByRows, startEntityExtraction, stopDocumentsLoading, subscribeDocumentRows, upsertDocuments, useArbiWsStore, useCreateTag, useDeleteTag, useDocument, useDocuments, useDocumentsLoading, useEntityExtractionDocIds, useExtractEntities, useInvalidateTagData, useIsCreatingTag, useRefreshDocuments, useSetTagValues, useSimilarDocuments, useTagKindSchema, useUpdateTag, useUpdateTagKindSchema } from './chunk-S3OGDLDC.js';
6
+ import { useArbiSessionState, useArbiSession, useWorkspaces, useConversations, useConfig, useArbiSessionStore, useAvailableModels, useParsedDocument, useTags, selectDraft, useConversationThreads, createArbiSessionStore, useTransientView, useProjects, useAgents, useAssistantQuery, useActivity, queuedMessages, MIN_QUEUED_MESSAGE_VISIBILITY_MS } from './chunk-KTXZ222T.js';
7
+ export { DEFAULT_DOCUMENT_VIEWER_STATE, DOCUMENT_VIEWER_PANEL, EMPTY_CHAT_STATE, EMPTY_DOCUMENT_STATE, EMPTY_SESSION_STATE, MAX_THREAD_TABS, MIN_QUEUED_MESSAGE_VISIBILITY_MS, PROJECT_CREATION_DENIED_REASON, WORKSPACE_LAST_OPENED_KEY, WORKSPACE_STORAGE_KEY, agentControl, browserWorkspaceStorage, clearSealedDrafts, closePanelIn, composeArbiSessionStore, conversationKey, createArbiChatStore, createArbiDocumentSessionStore, createArbiLayoutStore, createArbiSessionStore, createArbiWorkspaceStore, createDebouncedWriter, createSealedDraftStorage, createStoragePersist, createUiStateStorage, defaultLayoutState, dmTabId, flushOnPageExit, isPanelOpen, isUsageMetered, layoutActionsOf, nextViewingDocument, openPanelIn, panelPlace, parseSavedChat, parseSavedDocuments, parseSavedLayout, queuedMessages, readWorkspaceLastOpened, restoreLayout, restoreSavedDocuments, savedChatOf, savedDocumentsOf, savedLayoutOf, selectDraft, selectIsGenerating, selectViewingDocumentId, threadTabId, useActivity, useAgents, useArbiSession, useArbiSessionState, useArbiSessionStore, useAssistantQuery, useAvailableModels, useBoxRole, useBuiltinCommands, useCanCreateProjects, useConfig, useConfigs, useConversationThreads, useConversations, useCurrentUser, useDeleteAgents, useDocumentVersionList, useHealth, useMessageDetails, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useSessionPageTab, useSessionView, useSignedInSession, useTags, useThumbnails, useTransientView, useUserUsageToday, useWorkspaceActivity, useWorkspaces } from './chunk-KTXZ222T.js';
8
+ import { fetchDocumentFile, downloadBlob, fetchMarkupPdf, fetchDocumentPdf } from './chunk-YQBDEOVE.js';
9
+ import { arbiMutationKeys, arbiQueryKeys, useArbi, useArbiHost, mailQueryKeys, isUnderQueryKey, connectorQueryKeys, calendarQueryKeys } from './chunk-BFNY3RZG.js';
10
+ export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, isUnderQueryKey, mailQueryKeys, useArbi, useArbiHost, useDeploymentDomain } from './chunk-BFNY3RZG.js';
11
+ import { ArbiHost, linkMentions, extractMentions, UNBOUND, bindingOfRow, readLegacyThreadDocuments, forgetLegacyThreadDocuments, toMessageMentions, takeDocumentForTurn, hasMessageBody, createSearchSession, clearSearchSession } from './chunk-MS43RNXM.js';
12
+ export { LEGACY_THREAD_DOCUMENTS_KEY, MENTION_HREF_PREFIX, NotificationBell, Toaster, UNBOUND, bindingOfRow, clearSearchSession, createSearchSession, extractMentions, filterMentionCandidates, findMentionQuery, forgetLegacyThreadDocuments, hasMessageBody, insertMention, latestThreadOfDocument, linkMentions, mentionFromHref, openDocumentId, opensInWord, persistSearchSession, readLegacyThreadDocuments, requestSearch, savedDocumentIdFor, sharedSearchSession, takeDocumentForTurn, takePendingSearch, toMessageMentions, useOpenDocumentId, useRegisterOpenDocument, useTurnDocumentId } from './chunk-MS43RNXM.js';
13
+ import { notify, recordChatArtifact } from './chunk-BF5KW5ZI.js';
14
+ export { DEFAULT_NOTIFY_TONE, MAX_SESSION_NOTIFICATIONS, clearChatArtifacts, configureNotify, getChatArtifact, getChatArtifacts, notify, persistNotifyHistory, recordChatArtifact, seedNotifications, selectUnread, toast, useChatArtifact, useMessageChatArtifact, useNotify } from './chunk-BF5KW5ZI.js';
17
15
  export { mergeHostConfig } from './chunk-DPYBZDJB.js';
18
- export { cleanDraftMarkdown, cleanDraftWithReport, promoteBoldTitle, repairParsedStructure, repairParsedTitle, stripAgentPreamble, unescapeMarkdown, unwrapCitationLinks } from './chunk-NNWMHMEC.js';
16
+ export { cleanDraftMarkdown, cleanDraftWithReport, promoteBoldTitle, repairParsedStructure, repairParsedTitle, stripAgentPreamble, unescapeMarkdown, unwrapCitationLinks } from './chunk-UW2SGTI5.js';
19
17
  import './chunk-WUTL62MC.js';
20
- import { returnFocusToMark, MarkMenu, getDocumentTitle, Badge, TagEntity, useAudioRecorder, MicWaveformIndicator, IconToggle, classifyMediaError, formatElapsed, friendlyFileType, AiMarkdown, Card, Input, FILE_TYPE_COLORS, getEntityIcon, UserEntity, getEntityColorStyles, AgentBadge, Textarea, Slider, getEntityLabel, getDocumentDate, usesOriginalBytesForViewer } from './chunk-XAEVT7ZM.js';
21
- export { ARBI_MARK_SRC, AUDIO_MIME_PREFERENCE, AgentBadge, AiMarkdown, ArbiBotHeadIcon, ArbiIcon, AudIcon, BASE_COLORS, Badge, COLUMN_LABEL_FALLBACKS, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ClaudeIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DEFAULT_METADATA_TAGS, DebouncedInput, DocIcon, DocumentCard, DocumentEntity, ENTITY_MAPPINGS, EmlIcon, EntityIcon, EntityPill, FILE_TYPE_COLORS, FireworksIcon, GeminiIcon, GoogleIcon, HoverCard, HoverCardContent, HoverCardTrigger, HtmlIcon, IconToggle, ImgIcon, InlineMicButton, Input, Label, MarkMenu, MicRecordingOverlay, MicWaveformIndicator, NEUTRAL_GRAY, OpenAIIcon, PLACEHOLDER_COLOR, PassageCard, PdfIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, PresenceLabel, Progress, ProjectEntity, ProviderIcon, RadioGroup, RadioGroupItem, RagDot, RelevanceDot, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShieldIcon, Slider, StatusPill, Switch, TAG_TYPE_ICONS, TAG_TYPE_LABELS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagEntity, Textarea, ThreadVisibilityIcon, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TxtIcon, UserEntity, UserMenu, VIDEO_MIME_PREFERENCE, VISIBILITY_ICONS, VerifiedBadge, VerifiedToggle, VidIcon, VisibilityIcon, VisibilityToggle, XlsIcon, agentAvatarColors, badgeVariants, buildFolderTree, canonicalFolderPath, cardVariants, classifyMediaError, configureEntityRegistry, configureRagLabels, configureStatusRegistry, createChunkedRecorder, entityNoun, extensionFromMime, formatCompactLastSeen, formatDocDate, formatElapsed, formatFolderLabel, formatFriendlyDate, friendlyFileType, getDocIcon, getDocumentAuthor, getDocumentDate, getDocumentNature, getDocumentSubject, getDocumentTitle, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getFileExtension, getFileTypeIcon, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceColor, isAudioFile, isDocumentAddableToConversation, isDownloadOnlyFile, isImageDocument, isImageFile, isMediaFile, isVideoFile, markdownToPlainText, markdownToPlainTextBlocks, pickRecorderMimeType, tagKindNouns, tagKindTitle, toggleVariants, useAudioRecorder, useDictateContext, usesOriginalBytesForViewer } from './chunk-XAEVT7ZM.js';
18
+ import { returnFocusToMark, MarkMenu, getDocumentTitle, Badge, TagEntity, useAudioRecorder, MicWaveformIndicator, IconToggle, classifyMediaError, formatElapsed, friendlyFileType, AiMarkdown, Card, getEntityIcon, UserEntity, getEntityColorStyles, AgentBadge, Textarea, Slider, getEntityLabel, getDocumentDate, usesOriginalBytesForViewer } from './chunk-NNAJLY6B.js';
19
+ export { ARBI_MARK_SRC, AUDIO_MIME_PREFERENCE, AgentBadge, AiMarkdown, ArbiBotHeadIcon, ArbiIcon, AudIcon, BASE_COLORS, Badge, COLUMN_LABEL_FALLBACKS, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ClaudeIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DEFAULT_METADATA_TAGS, DebouncedInput, DocIcon, DocumentEntity, ENTITY_MAPPINGS, EmlIcon, EntityIcon, EntityPill, FILE_TYPE_COLORS, FireworksIcon, GeminiIcon, GoogleIcon, HoverCard, HoverCardContent, HoverCardTrigger, HtmlIcon, IconToggle, ImgIcon, InlineMicButton, Input, Label, MarkMenu, MicRecordingOverlay, MicWaveformIndicator, NEUTRAL_GRAY, OpenAIIcon, PLACEHOLDER_COLOR, PassageCard, PdfIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, PresenceLabel, Progress, ProjectEntity, ProviderIcon, RadioGroup, RadioGroupItem, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, ShieldIcon, Slider, StatusPill, Switch, TAG_TYPE_ICONS, TAG_TYPE_LABELS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagEntity, Textarea, ThreadVisibilityIcon, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TxtIcon, UserEntity, UserMenu, VIDEO_MIME_PREFERENCE, VISIBILITY_ICONS, VerifiedBadge, VerifiedToggle, VidIcon, VisibilityIcon, VisibilityToggle, XlsIcon, agentAvatarColors, badgeVariants, buildFolderTree, canonicalFolderPath, cardVariants, classifyMediaError, configureEntityRegistry, configureRagLabels, configureStatusRegistry, createChunkedRecorder, entityNoun, extensionFromMime, formatCompactLastSeen, formatDocDate, formatElapsed, formatFolderLabel, formatFriendlyDate, friendlyFileType, getDocIcon, getDocumentAuthor, getDocumentDate, getDocumentNature, getDocumentSubject, getDocumentTitle, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getFileExtension, getFileTypeIcon, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceColor, isAudioFile, isDocumentAddableToConversation, isDownloadOnlyFile, isImageDocument, isImageFile, isMediaFile, isVideoFile, markdownToPlainText, markdownToPlainTextBlocks, pickRecorderMimeType, tagKindNouns, tagKindTitle, toggleVariants, useAudioRecorder, useDictateContext, usesOriginalBytesForViewer } from './chunk-NNAJLY6B.js';
22
20
  import { getUserDisplayName, isAgent } from './chunk-APZZQZ6P.js';
23
21
  export { Avatar, AvatarFallback, AvatarImage, DEFAULT_SEGMENTER_CONFIG, INITIAL_SEGMENTER_STATE, createUserAvatarIcon, flushSegmenter, getUserAvatarColor, getUserDisplayName, getUserInitials, isAgent, levelFromRms, stepSegmenter } from './chunk-APZZQZ6P.js';
24
- import { MarkdownRenderer } from './chunk-C44GO33B.js';
25
- export { MarkdownCode, MarkdownLink, MarkdownRenderer, MarkdownStreamingContext, markdownBaseComponents, markdownSanitizeSchema, splitMarkdownBlocks } from './chunk-C44GO33B.js';
22
+ import { MarkdownRenderer } from './chunk-WL2Y2T47.js';
23
+ export { MarkdownCode, MarkdownLink, MarkdownRenderer, MarkdownStreamingContext, markdownBaseComponents, markdownSanitizeSchema, splitMarkdownBlocks } from './chunk-WL2Y2T47.js';
26
24
  import { Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from './chunk-YNNAJJ5Z.js';
27
25
  export { Button, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, buttonVariants } from './chunk-YNNAJJ5Z.js';
28
26
  import { formatRelativeTime } from './chunk-Y3MTRA7D.js';
29
27
  export { ScrollArea, ScrollBar, configureEntityVocabulary, formatRelativeTime } from './chunk-Y3MTRA7D.js';
30
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator } from './chunk-47CCGUWR.js';
31
28
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, PortalContainerProvider, usePortalContainer } from './chunk-47CCGUWR.js';
32
- import { normalizeCitationMarkup } from './chunk-QRCMKEE6.js';
33
- export { closeOpenEmphasis, normalizeCitationMarkup, trimOpenCitation } from './chunk-QRCMKEE6.js';
34
- export { useHostConfigRecord } from './chunk-CPZ36AQS.js';
29
+ import { normalizeCitationMarkup } from './chunk-VSCU7K4V.js';
30
+ export { closeOpenEmphasis, normalizeCitationMarkup, trimOpenCitation, useHostConfigRecord } from './chunk-VSCU7K4V.js';
35
31
  import { cn } from './chunk-SN5YV6FF.js';
36
32
  export { cn } from './chunk-SN5YV6FF.js';
37
33
  import React, { memo, useState, createContext, useMemo, useCallback, useEffect, useRef, useLayoutEffect, useSyncExternalStore, useContext, useId } from 'react';
38
34
  import { useQuery, useQueryClient, useMutation, onlineManager, partialMatchKey, useMutationState, useQueries, QueryClient, MutationCache } from '@tanstack/react-query';
39
35
  import { documents, houseTemplates, doctags, STOP_ID_WAIT_MS, resolveCitations, summarizeCitations, createIndexAssigner, reduceOutputItem, findReplyTarget, ArbiApiError, quotaFromStreamError, STOP_REPEAT_WINDOW_MS, getRunToCancel, pickMainThread, extractDocumentIdsFromMessages, extractFactIdsFromMessages, hydrateAgentSteps, getSubagentBranchRecord, getRunToAttach, settings, isConnectorVendorVisible, ACCOUNT_VENDOR, searchChunks, formatFileSize, chats, connectWithReconnect, ArbiWorkspaceSupersededError, identityErrorCode } from '@arbidocs/sdk/browser';
40
36
  export { ACCOUNT_VENDOR, Arbi, ArbiError, DEFAULT_AI_USD_PER_GBP, DRIVE_SYNC_VENDORS, GOOGLE_VENDORS, IMANAGE_VENDORS, MAILBOX_SYNC_VENDORS, MAX_RETRIEVE_DOC_IDS, MICROSOFT_VENDORS, PublicBookingError, SHAREPOINT_VENDORS, bookPublicSlot, cancelPublicBooking, connectErrorMessage, formatGbp, formatGbpPerMillionTokens, getPublicBookingPage, isConnectorVendorVisible, isDriveSyncVendor, isMailboxSyncVendor, isSharePointVendor, usdToGbp } from '@arbidocs/sdk/browser';
41
- import { Link, Trash2, CheckCheck, Check, MoreHorizontal, SquarePen, Pencil, Download, X, Mic, Pause, Play, Square, Loader2, RotateCcw, Sparkles, Camera, Circle, AlertTriangle, ShieldCheck, Copy, FileText, GitCompareArrows, Search, CornerDownLeft, Send, Tags, Info, Activity, HardDrive, Gauge, Gift, PartyPopper, UserPlus, UserCheck, Reply, PenLine, AtSign, MessageCircleMore, FileX2, FileCheck2, FolderPlus, SquareArrowOutUpRight, Paperclip, ArrowRight, Image as Image$1, AppWindow } from 'lucide-react';
37
+ import { Link, Trash2, CheckCheck, Check, X, Mic, Pause, Play, Square, Loader2, RotateCcw, Sparkles, Camera, Circle, AlertTriangle, ShieldCheck, Copy, FileText, GitCompareArrows, Download, Info, Activity, HardDrive, Gauge, Gift, PartyPopper, UserPlus, UserCheck, Reply, PenLine, AtSign, MessageCircleMore, FileX2, FileCheck2, Pencil, FolderPlus, SquareArrowOutUpRight, Paperclip, Send, CornerDownLeft, ArrowRight, Image as Image$1, AppWindow } from 'lucide-react';
42
38
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
43
39
  import { create } from 'zustand';
44
40
  import { createOfflineSealer, getUserEncryptionKeypair, sealedBoxDecrypt, bytesToBase64, isMessageType, decryptMessage, SETTINGS_WRITE_BREAKER_CODE, passwordChangeErrorMessage, createRecoveryFile, logger, isAbortError, base64ToBytes, sealedBoxEncrypt } from '@arbidocs/client';
@@ -137,17 +133,6 @@ function useCanEditShared() {
137
133
  function useIsWorkspaceOwner() {
138
134
  return useWorkspaceRole() === "owner";
139
135
  }
140
- function useNotifyConversation() {
141
- const arbi = useArbi();
142
- const qc = useQueryClient();
143
- return useMutation({
144
- mutationFn: ({ conversationId, userIds }) => arbi.conversations.notify(conversationId, userIds),
145
- onSuccess: (_data, { conversationId }) => {
146
- invalidateConversationActivity(qc, conversationId);
147
- void invalidateConversationLists(qc);
148
- }
149
- });
150
- }
151
136
  var TaskThreadPendingError = class extends Error {
152
137
  constructor(messageId) {
153
138
  super("The task has started, but its thread isn't ready yet.");
@@ -290,19 +275,6 @@ function useActOnStep() {
290
275
  }
291
276
  });
292
277
  }
293
- function useSendBackStep() {
294
- const arbi = useArbi();
295
- const qc = useQueryClient();
296
- return useMutation({
297
- mutationFn: ({
298
- conversationId,
299
- step,
300
- to,
301
- note
302
- }) => arbi.conversations.sendBackStep(conversationId, step, { to, note }),
303
- onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.allConversations() })
304
- });
305
- }
306
278
  function usePlanWork(workspaceId) {
307
279
  const arbi = useArbi();
308
280
  return useMutation({
@@ -1299,63 +1271,6 @@ function clearUserInputRequest(queryClient, conversationId, messageId) {
1299
1271
  }
1300
1272
  );
1301
1273
  }
1302
- var MEMBERS_STALE_MS = 15 * 60 * 1e3;
1303
- function useWorkspaceUsers(workspaceId, options) {
1304
- const arbi = useArbi();
1305
- const workspace = workspaceId ?? (arbi.hasWorkspace ? arbi.getWorkspaceId() : "");
1306
- return useQuery({
1307
- queryKey: arbiQueryKeys.workspaceUsers(workspace),
1308
- enabled: !!workspace && (options?.enabled ?? arbi.hasWorkspace),
1309
- queryFn: async () => {
1310
- await options?.beforeFetch?.();
1311
- return arbi.readInWorkspace(workspace, () => arbi.workspaces.listUsers());
1312
- },
1313
- staleTime: MEMBERS_STALE_MS
1314
- });
1315
- }
1316
- function settleMembership(qc) {
1317
- return Promise.all([
1318
- qc.invalidateQueries({ queryKey: arbiQueryKeys.allWorkspaceUsers() }),
1319
- qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() }),
1320
- // A project's collaborator quota counts workspace members.
1321
- qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })
1322
- ]);
1323
- }
1324
- function useAddWorkspaceMembers() {
1325
- const arbi = useArbi();
1326
- const qc = useQueryClient();
1327
- return useMutation({
1328
- mutationKey: arbiMutationKeys.workspaceMembership(),
1329
- mutationFn: (request) => arbi.workspaces.addMembers(request),
1330
- onSuccess: () => Promise.all([
1331
- settleMembership(qc),
1332
- qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() })
1333
- ])
1334
- });
1335
- }
1336
- function useRemoveWorkspaceMembers(workspaceId) {
1337
- const arbi = useArbi();
1338
- const qc = useQueryClient();
1339
- return useMutation({
1340
- mutationKey: arbiMutationKeys.workspaceMembership(),
1341
- mutationFn: (userIds) => workspaceId ? arbi.workspaces.removeUsers(userIds, { workspaceId }) : arbi.workspaces.removeUsers(userIds),
1342
- onSuccess: () => settleMembership(qc)
1343
- });
1344
- }
1345
- function useSetWorkspaceMemberRoles() {
1346
- const arbi = useArbi();
1347
- const qc = useQueryClient();
1348
- return useMutation({
1349
- mutationKey: arbiMutationKeys.setWorkspaceMemberRoles(),
1350
- mutationFn: ({ userIds, role }) => arbi.workspaces.setUserRole(userIds, role),
1351
- onSuccess: () => Promise.all([
1352
- qc.invalidateQueries({ queryKey: arbiQueryKeys.allWorkspaceUsers() }),
1353
- qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })
1354
- ])
1355
- });
1356
- }
1357
-
1358
- // src/chat/conversation-mentions.ts
1359
1274
  var ASSISTANT_MENTION_LABEL = "ARBI";
1360
1275
  function assistantLabels(assistantName = ASSISTANT_MENTION_LABEL) {
1361
1276
  return assistantName.toLowerCase() === ASSISTANT_MENTION_LABEL.toLowerCase() ? [assistantName] : [assistantName, ASSISTANT_MENTION_LABEL];
@@ -1397,15 +1312,6 @@ function isCommentToPeople(queryClient, conversationId, content, candidates) {
1397
1312
  if (mentioned.some((c) => c.kind === "user")) return true;
1398
1313
  return !!conversationId && cachedAssistantMode(queryClient, conversationId, "always") === "mentioned";
1399
1314
  }
1400
- function useMentionCandidates() {
1401
- const { data: users = [] } = useWorkspaceUsers();
1402
- const currentUserId = useArbiSession().user?.external_id;
1403
- const assistantName = useAssistantName();
1404
- return useMemo(
1405
- () => buildMentionCandidates(users, currentUserId, assistantName),
1406
- [users, currentUserId, assistantName]
1407
- );
1408
- }
1409
1315
  function isFullConfig(config) {
1410
1316
  return config != null && "QueryLLM" in config;
1411
1317
  }
@@ -2477,83 +2383,6 @@ function useDocumentThumbnails(visibleIds) {
2477
2383
  }, [tasks, idsKey, fetchMissing]);
2478
2384
  return thumbnails;
2479
2385
  }
2480
- function DocumentCardMenu({
2481
- docId,
2482
- fileName,
2483
- onOpen,
2484
- onRename,
2485
- canDelete = true,
2486
- testId = "document-card-menu"
2487
- }) {
2488
- const arbi = useArbi();
2489
- const download = useMutation({
2490
- mutationFn: async () => {
2491
- const response = await arbi.documents.download(docId);
2492
- if (!response.ok) throw new Error(`Failed to download ${fileName}`);
2493
- return response.blob();
2494
- },
2495
- onSuccess: (blob) => {
2496
- const url = URL.createObjectURL(blob);
2497
- const anchor = document.createElement("a");
2498
- anchor.href = url;
2499
- anchor.download = fileName;
2500
- anchor.click();
2501
- URL.revokeObjectURL(url);
2502
- }
2503
- });
2504
- const remove = useDeleteDocuments();
2505
- return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
2506
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
2507
- "button",
2508
- {
2509
- type: "button",
2510
- "aria-label": "More actions",
2511
- "data-testid": testId,
2512
- onClick: (e) => e.stopPropagation(),
2513
- className: "flex size-6 items-center justify-center rounded-md bg-background/90 text-muted-foreground shadow-sm backdrop-blur-sm transition hover:bg-background hover:text-foreground data-[state=open]:bg-background data-[state=open]:text-foreground",
2514
- children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" })
2515
- }
2516
- ) }),
2517
- /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "start", onClick: (e) => e.stopPropagation(), className: "w-44", children: [
2518
- onOpen && /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: onOpen, "data-testid": `${testId}-open`, children: [
2519
- /* @__PURE__ */ jsx(SquarePen, { className: "mr-2 size-4" }),
2520
- "Open"
2521
- ] }),
2522
- onRename && /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: onRename, "data-testid": `${testId}-rename`, children: [
2523
- /* @__PURE__ */ jsx(Pencil, { className: "mr-2 size-4" }),
2524
- "Rename"
2525
- ] }),
2526
- /* @__PURE__ */ jsxs(
2527
- DropdownMenuItem,
2528
- {
2529
- onSelect: () => download.mutate(),
2530
- disabled: download.isPending,
2531
- "data-testid": `${testId}-download`,
2532
- children: [
2533
- /* @__PURE__ */ jsx(Download, { className: "mr-2 size-4" }),
2534
- "Download"
2535
- ]
2536
- }
2537
- ),
2538
- canDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
2539
- /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
2540
- /* @__PURE__ */ jsxs(
2541
- DropdownMenuItem,
2542
- {
2543
- onSelect: () => remove.mutate([docId]),
2544
- disabled: remove.isPending,
2545
- className: "text-destructive focus:text-destructive",
2546
- "data-testid": `${testId}-delete`,
2547
- children: [
2548
- /* @__PURE__ */ jsx(Trash2, { className: "mr-2 size-4" }),
2549
- "Delete"
2550
- ]
2551
- }
2552
- )
2553
- ] })
2554
- ] })
2555
- ] });
2556
- }
2557
2386
  var PARSED_STATUSES = /* @__PURE__ */ new Set(["completed", "low-content"]);
2558
2387
  function noTextMessage(status) {
2559
2388
  if (status === "failed")
@@ -7104,23 +6933,6 @@ function useMailCache() {
7104
6933
  };
7105
6934
  }, [queryClient]);
7106
6935
  }
7107
- function useUpdateMailMessage() {
7108
- const { client } = useMailClient();
7109
- return useMutation({
7110
- mutationFn: ({
7111
- accountId,
7112
- messageId,
7113
- update: update2
7114
- }) => mailJson(
7115
- client.fetch,
7116
- `${accountPath(accountId)}/messages/${encodeURIComponent(messageId)}`,
7117
- {
7118
- method: "PATCH",
7119
- body: JSON.stringify(update2)
7120
- }
7121
- )
7122
- });
7123
- }
7124
6936
  async function withFallback(compose, fallback, online) {
7125
6937
  if (fallback && !onlineManager.isOnline()) {
7126
6938
  await fallback.keep(compose);
@@ -7536,8 +7348,127 @@ function useArbiWsMessage(type, handler) {
7536
7348
  function useArbiWsStatus() {
7537
7349
  return useArbiWsStore((s) => s.status);
7538
7350
  }
7539
- function useArbiConnected() {
7540
- return useArbiWsStore((s) => s.status === "connected");
7351
+
7352
+ // src/workspaces/shell-workspaces.ts
7353
+ function getWorkspaceKind(workspace) {
7354
+ if (workspace.is_public) return "common";
7355
+ if ((workspace.users?.length ?? 0) > 1) return "shared";
7356
+ return "private";
7357
+ }
7358
+ function memberName(user) {
7359
+ const full = [user?.given_name, user?.family_name].filter(Boolean).join(" ").trim();
7360
+ return full || user?.email || "";
7361
+ }
7362
+ function toShellWorkspace(workspace) {
7363
+ const people = (workspace.users ?? []).filter((u) => !u.agent_ext_id);
7364
+ return {
7365
+ id: workspace.external_id,
7366
+ name: workspace.name,
7367
+ kind: getWorkspaceKind(workspace),
7368
+ description: workspace.description,
7369
+ projectName: workspace.project_name,
7370
+ docCount: (workspace.shared_document_count ?? 0) + (workspace.private_document_count ?? 0),
7371
+ memberCount: people.length,
7372
+ members: people.map((u) => ({ name: memberName(u.user), picture: u.user?.picture })),
7373
+ updatedAt: workspace.updated_at
7374
+ };
7375
+ }
7376
+ function recency(workspace, lastOpened) {
7377
+ const opened = lastOpened?.[workspace.id];
7378
+ if (opened !== void 0) return opened;
7379
+ const updated = Date.parse(workspace.updatedAt ?? "");
7380
+ return Number.isNaN(updated) ? 0 : updated;
7381
+ }
7382
+ function resolveActiveWorkspace(items, selectedId, options = {}) {
7383
+ const selected = selectedId ? items.find((w) => w.id === selectedId) : void 0;
7384
+ if (selected) return selected;
7385
+ if (options.isSeed && options.seedActiveId) {
7386
+ const seeded = items.find((w) => w.id === options.seedActiveId);
7387
+ if (seeded) return seeded;
7388
+ }
7389
+ return items[0];
7390
+ }
7391
+ function pickRecentWorkspaces(items, activeId, options = {}) {
7392
+ const { limit = 4, lastOpened, formatLastSeen } = options;
7393
+ return items.filter((w) => w.id !== activeId).map((w) => ({ w, at: recency(w, lastOpened) })).sort((a, b) => b.at - a.at).slice(0, limit).map(({ w, at }) => formatLastSeen ? { ...w, lastSeen: formatLastSeen(at) } : w);
7394
+ }
7395
+
7396
+ // src/workspaces/useShellWorkspaces.ts
7397
+ function useShellWorkspaces(options) {
7398
+ const {
7399
+ workspaces,
7400
+ isLoading = false,
7401
+ loadError,
7402
+ selectedId,
7403
+ seed,
7404
+ decorate,
7405
+ recentLimit,
7406
+ lastOpened,
7407
+ formatLastSeen
7408
+ } = options;
7409
+ const live = useMemo(
7410
+ () => (workspaces ?? []).map((source) => {
7411
+ const item = toShellWorkspace(source);
7412
+ return decorate ? { ...item, ...decorate(item, source) } : item;
7413
+ }),
7414
+ [workspaces, decorate]
7415
+ );
7416
+ const isLive = live.length > 0;
7417
+ const isSeed = !isLive && !isLoading && !!seed;
7418
+ const items = useMemo(
7419
+ () => isLive ? live : isSeed ? [...seed.workspaces] : [],
7420
+ [isLive, live, isSeed, seed]
7421
+ );
7422
+ const active = useMemo(
7423
+ () => resolveActiveWorkspace(items, selectedId, { isSeed, seedActiveId: seed?.activeId }),
7424
+ [items, selectedId, isSeed, seed?.activeId]
7425
+ );
7426
+ const recent = useMemo(
7427
+ () => pickRecentWorkspaces(items, active?.id, { limit: recentLimit, lastOpened, formatLastSeen }),
7428
+ [items, active?.id, recentLimit, lastOpened, formatLastSeen]
7429
+ );
7430
+ const [openingId, setOpeningId] = useState(null);
7431
+ const [openError, setOpenError] = useState(void 0);
7432
+ const callbacks = useRef({
7433
+ select: options.select,
7434
+ onOpened: options.onOpened,
7435
+ onOpenError: options.onOpenError
7436
+ });
7437
+ callbacks.current = {
7438
+ select: options.select,
7439
+ onOpened: options.onOpened,
7440
+ onOpenError: options.onOpenError
7441
+ };
7442
+ const itemsRef = useRef(items);
7443
+ itemsRef.current = items;
7444
+ const open = useCallback(async (target) => {
7445
+ const id = typeof target === "string" ? target : target.id;
7446
+ const workspace = itemsRef.current.find((w) => w.id === id);
7447
+ if (!workspace) return false;
7448
+ setOpenError(void 0);
7449
+ setOpeningId(id);
7450
+ try {
7451
+ await callbacks.current.select(workspace);
7452
+ } catch (err) {
7453
+ setOpenError(err);
7454
+ setOpeningId(null);
7455
+ callbacks.current.onOpenError?.(err, workspace);
7456
+ return false;
7457
+ }
7458
+ setOpeningId(null);
7459
+ callbacks.current.onOpened?.(workspace);
7460
+ return true;
7461
+ }, []);
7462
+ return {
7463
+ items,
7464
+ active,
7465
+ recent,
7466
+ isLive,
7467
+ isLoading,
7468
+ error: openError ?? loadError ?? null,
7469
+ openingId,
7470
+ open
7471
+ };
7541
7472
  }
7542
7473
  var WORKSPACE_SCOPED_PACKAGE_KEYS = [
7543
7474
  arbiQueryKeys.allDocuments(),
@@ -7749,183 +7680,95 @@ function useOpenSelectedWorkspace() {
7749
7680
  signedIn2
7750
7681
  ]);
7751
7682
  }
7752
-
7753
- // src/workspaces/shell-workspaces.ts
7754
- function getWorkspaceKind(workspace) {
7755
- if (workspace.is_public) return "common";
7756
- if ((workspace.users?.length ?? 0) > 1) return "shared";
7757
- return "private";
7683
+ function useCreateWorkspace() {
7684
+ const arbi = useArbi();
7685
+ const qc = useQueryClient();
7686
+ return useMutation({
7687
+ mutationFn: ({ name, projectId, description, isPublic }) => arbi.workspaces.create(name, projectId, description, isPublic),
7688
+ onSuccess: (created) => {
7689
+ if (qc.getQueryCache().find({ queryKey: arbiQueryKeys.workspaces(), exact: true })) {
7690
+ qc.setQueryData(
7691
+ arbiQueryKeys.workspaces(),
7692
+ (list = []) => list.some((w) => w.external_id === created.external_id) ? list : [...list, created]
7693
+ );
7694
+ }
7695
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
7696
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
7697
+ }
7698
+ });
7758
7699
  }
7759
- function memberName(user) {
7760
- const full = [user?.given_name, user?.family_name].filter(Boolean).join(" ").trim();
7761
- return full || user?.email || "";
7762
- }
7763
- function toShellWorkspace(workspace) {
7764
- const people = (workspace.users ?? []).filter((u) => !u.agent_ext_id);
7765
- return {
7766
- id: workspace.external_id,
7767
- name: workspace.name,
7768
- kind: getWorkspaceKind(workspace),
7769
- description: workspace.description,
7770
- projectName: workspace.project_name,
7771
- docCount: (workspace.shared_document_count ?? 0) + (workspace.private_document_count ?? 0),
7772
- memberCount: people.length,
7773
- members: people.map((u) => ({ name: memberName(u.user), picture: u.user?.picture })),
7774
- updatedAt: workspace.updated_at
7775
- };
7776
- }
7777
- function recency(workspace, lastOpened) {
7778
- const opened = lastOpened?.[workspace.id];
7779
- if (opened !== void 0) return opened;
7780
- const updated = Date.parse(workspace.updatedAt ?? "");
7781
- return Number.isNaN(updated) ? 0 : updated;
7782
- }
7783
- function resolveActiveWorkspace(items, selectedId, options = {}) {
7784
- const selected = selectedId ? items.find((w) => w.id === selectedId) : void 0;
7785
- if (selected) return selected;
7786
- if (options.isSeed && options.seedActiveId) {
7787
- const seeded = items.find((w) => w.id === options.seedActiveId);
7788
- if (seeded) return seeded;
7789
- }
7790
- return items[0];
7791
- }
7792
- function pickRecentWorkspaces(items, activeId, options = {}) {
7793
- const { limit = 4, lastOpened, formatLastSeen } = options;
7794
- return items.filter((w) => w.id !== activeId).map((w) => ({ w, at: recency(w, lastOpened) })).sort((a, b) => b.at - a.at).slice(0, limit).map(({ w, at }) => formatLastSeen ? { ...w, lastSeen: formatLastSeen(at) } : w);
7700
+ function useMoveWorkspaceToProject() {
7701
+ const arbi = useArbi();
7702
+ const qc = useQueryClient();
7703
+ return useMutation({
7704
+ mutationFn: ({ workspaceId, projectId }) => arbi.workspaces.moveToProject(workspaceId, projectId),
7705
+ onSuccess: () => {
7706
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
7707
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
7708
+ }
7709
+ });
7795
7710
  }
7796
-
7797
- // src/workspaces/useShellWorkspaces.ts
7798
- function useShellWorkspaces(options) {
7799
- const {
7800
- workspaces,
7801
- isLoading = false,
7802
- loadError,
7803
- selectedId,
7804
- seed,
7805
- decorate,
7806
- recentLimit,
7807
- lastOpened,
7808
- formatLastSeen
7809
- } = options;
7810
- const live = useMemo(
7811
- () => (workspaces ?? []).map((source) => {
7812
- const item = toShellWorkspace(source);
7813
- return decorate ? { ...item, ...decorate(item, source) } : item;
7814
- }),
7815
- [workspaces, decorate]
7816
- );
7817
- const isLive = live.length > 0;
7818
- const isSeed = !isLive && !isLoading && !!seed;
7819
- const items = useMemo(
7820
- () => isLive ? live : isSeed ? [...seed.workspaces] : [],
7821
- [isLive, live, isSeed, seed]
7822
- );
7823
- const active = useMemo(
7824
- () => resolveActiveWorkspace(items, selectedId, { isSeed, seedActiveId: seed?.activeId }),
7825
- [items, selectedId, isSeed, seed?.activeId]
7826
- );
7827
- const recent = useMemo(
7828
- () => pickRecentWorkspaces(items, active?.id, { limit: recentLimit, lastOpened, formatLastSeen }),
7829
- [items, active?.id, recentLimit, lastOpened, formatLastSeen]
7830
- );
7831
- const [openingId, setOpeningId] = useState(null);
7832
- const [openError, setOpenError] = useState(void 0);
7833
- const callbacks = useRef({
7834
- select: options.select,
7835
- onOpened: options.onOpened,
7836
- onOpenError: options.onOpenError
7711
+ function useUpdateWorkspace() {
7712
+ const arbi = useArbi();
7713
+ const qc = useQueryClient();
7714
+ return useMutation({
7715
+ mutationFn: (body) => arbi.workspaces.update(body),
7716
+ onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })
7837
7717
  });
7838
- callbacks.current = {
7839
- select: options.select,
7840
- onOpened: options.onOpened,
7841
- onOpenError: options.onOpenError
7842
- };
7843
- const itemsRef = useRef(items);
7844
- itemsRef.current = items;
7845
- const open = useCallback(async (target) => {
7846
- const id = typeof target === "string" ? target : target.id;
7847
- const workspace = itemsRef.current.find((w) => w.id === id);
7848
- if (!workspace) return false;
7849
- setOpenError(void 0);
7850
- setOpeningId(id);
7851
- try {
7852
- await callbacks.current.select(workspace);
7853
- } catch (err) {
7854
- setOpenError(err);
7855
- setOpeningId(null);
7856
- callbacks.current.onOpenError?.(err, workspace);
7857
- return false;
7858
- }
7859
- setOpeningId(null);
7860
- callbacks.current.onOpened?.(workspace);
7861
- return true;
7862
- }, []);
7863
- return {
7864
- items,
7865
- active,
7866
- recent,
7867
- isLive,
7868
- isLoading,
7869
- error: openError ?? loadError ?? null,
7870
- openingId,
7871
- open
7872
- };
7873
7718
  }
7874
- function useArbiShellWorkspaces(options = {}) {
7875
- const sessionWorkspaceId = useArbiSessionState((s) => s.workspaceId);
7876
- const query = useWorkspaces();
7877
- const { switchWorkspace } = useSwitchWorkspace();
7878
- const { select, ...rest } = options;
7879
- const defaultSelect = useCallback(
7880
- async (workspace) => {
7881
- if (!await switchWorkspace({ id: workspace.id, name: workspace.name }))
7882
- throw new Error(`Could not open ${workspace.name}`);
7719
+ var MEMBERS_STALE_MS = 15 * 60 * 1e3;
7720
+ function useWorkspaceUsers(workspaceId, options) {
7721
+ const arbi = useArbi();
7722
+ const workspace = workspaceId ?? (arbi.hasWorkspace ? arbi.getWorkspaceId() : "");
7723
+ return useQuery({
7724
+ queryKey: arbiQueryKeys.workspaceUsers(workspace),
7725
+ enabled: !!workspace && (options?.enabled ?? arbi.hasWorkspace),
7726
+ queryFn: async () => {
7727
+ await options?.beforeFetch?.();
7728
+ return arbi.readInWorkspace(workspace, () => arbi.workspaces.listUsers());
7883
7729
  },
7884
- [switchWorkspace]
7885
- );
7886
- return useShellWorkspaces({
7887
- ...rest,
7888
- selectedId: rest.selectedId !== void 0 ? rest.selectedId : sessionWorkspaceId,
7889
- workspaces: Array.isArray(query.data) ? query.data : void 0,
7890
- isLoading: query.isLoading,
7891
- loadError: query.error,
7892
- select: select ?? defaultSelect
7730
+ staleTime: MEMBERS_STALE_MS
7893
7731
  });
7894
7732
  }
7895
- function useCreateWorkspace() {
7733
+ function settleMembership(qc) {
7734
+ return Promise.all([
7735
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.allWorkspaceUsers() }),
7736
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() }),
7737
+ // A project's collaborator quota counts workspace members.
7738
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })
7739
+ ]);
7740
+ }
7741
+ function useAddWorkspaceMembers() {
7896
7742
  const arbi = useArbi();
7897
7743
  const qc = useQueryClient();
7898
7744
  return useMutation({
7899
- mutationFn: ({ name, projectId, description, isPublic }) => arbi.workspaces.create(name, projectId, description, isPublic),
7900
- onSuccess: (created) => {
7901
- if (qc.getQueryCache().find({ queryKey: arbiQueryKeys.workspaces(), exact: true })) {
7902
- qc.setQueryData(
7903
- arbiQueryKeys.workspaces(),
7904
- (list = []) => list.some((w) => w.external_id === created.external_id) ? list : [...list, created]
7905
- );
7906
- }
7907
- void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
7908
- void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
7909
- }
7745
+ mutationKey: arbiMutationKeys.workspaceMembership(),
7746
+ mutationFn: (request) => arbi.workspaces.addMembers(request),
7747
+ onSuccess: () => Promise.all([
7748
+ settleMembership(qc),
7749
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() })
7750
+ ])
7910
7751
  });
7911
7752
  }
7912
- function useMoveWorkspaceToProject() {
7753
+ function useRemoveWorkspaceMembers(workspaceId) {
7913
7754
  const arbi = useArbi();
7914
7755
  const qc = useQueryClient();
7915
7756
  return useMutation({
7916
- mutationFn: ({ workspaceId, projectId }) => arbi.workspaces.moveToProject(workspaceId, projectId),
7917
- onSuccess: () => {
7918
- void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
7919
- void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
7920
- }
7757
+ mutationKey: arbiMutationKeys.workspaceMembership(),
7758
+ mutationFn: (userIds) => workspaceId ? arbi.workspaces.removeUsers(userIds, { workspaceId }) : arbi.workspaces.removeUsers(userIds),
7759
+ onSuccess: () => settleMembership(qc)
7921
7760
  });
7922
7761
  }
7923
- function useUpdateWorkspace() {
7762
+ function useSetWorkspaceMemberRoles() {
7924
7763
  const arbi = useArbi();
7925
7764
  const qc = useQueryClient();
7926
7765
  return useMutation({
7927
- mutationFn: (body) => arbi.workspaces.update(body),
7928
- onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })
7766
+ mutationKey: arbiMutationKeys.setWorkspaceMemberRoles(),
7767
+ mutationFn: ({ userIds, role }) => arbi.workspaces.setUserRole(userIds, role),
7768
+ onSuccess: () => Promise.all([
7769
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.allWorkspaceUsers() }),
7770
+ qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })
7771
+ ])
7929
7772
  });
7930
7773
  }
7931
7774
  function useDeleteWorkspaces() {
@@ -9715,14 +9558,6 @@ function isNetworkFailure(error) {
9715
9558
  function isBrowserOffline() {
9716
9559
  return typeof navigator !== "undefined" && navigator.onLine === false;
9717
9560
  }
9718
- function useFilteredProjects(filters, options) {
9719
- const arbi = useArbi();
9720
- return useQuery({
9721
- queryKey: arbiQueryKeys.projectsFiltered(filters.stage, filters.leadUser),
9722
- queryFn: () => arbi.projects.list(filters),
9723
- enabled: options?.enabled ?? arbi.isLoggedIn
9724
- });
9725
- }
9726
9561
  function useUpdateProjectFields() {
9727
9562
  const arbi = useArbi();
9728
9563
  const qc = useQueryClient();
@@ -9737,27 +9572,6 @@ function useUpdateProjectFields() {
9737
9572
  }
9738
9573
  });
9739
9574
  }
9740
- function useProjectEvents(projectExtId, options) {
9741
- const arbi = useArbi();
9742
- return useQuery({
9743
- queryKey: [
9744
- ...arbiQueryKeys.projectEvents(projectExtId ?? ""),
9745
- options?.kind ?? "all",
9746
- options?.limit ?? "default"
9747
- ],
9748
- queryFn: () => arbi.projects.events(projectExtId, { kind: options?.kind, limit: options?.limit }),
9749
- enabled: (options?.enabled ?? true) && !!projectExtId && arbi.isLoggedIn
9750
- });
9751
- }
9752
- function useConversationUsage(conversationId, options) {
9753
- const arbi = useArbi();
9754
- return useQuery({
9755
- queryKey: arbiQueryKeys.conversationUsage(conversationId ?? ""),
9756
- queryFn: () => arbi.conversations.usage(conversationId),
9757
- enabled: (options?.enabled ?? true) && !!conversationId && arbi.isLoggedIn,
9758
- refetchInterval: options?.live ? 1e4 : false
9759
- });
9760
- }
9761
9575
  function useProjectConversationUsage(projectExtId, monthsBack = 0, options) {
9762
9576
  const arbi = useArbi();
9763
9577
  return useQuery({
@@ -13695,59 +13509,6 @@ function AiAnswer({
13695
13509
  ] })
13696
13510
  ] });
13697
13511
  }
13698
- function AiActionCard({
13699
- icon: Icon = Sparkles,
13700
- title,
13701
- description,
13702
- prompt,
13703
- docIds,
13704
- runLabel = "Run",
13705
- noDocsHint = "Connect to the workspace to run this.",
13706
- disabled,
13707
- testId
13708
- }) {
13709
- const task = useAiTask();
13710
- const noDocs = docIds.length === 0;
13711
- const onRun = () => {
13712
- const p = typeof prompt === "function" ? prompt() : prompt;
13713
- void task.run(p, docIds);
13714
- };
13715
- return /* @__PURE__ */ jsxs(Card, { variant: "elevated", className: "rounded-xl p-5", "data-testid": testId, children: [
13716
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
13717
- /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
13718
- /* @__PURE__ */ jsx("div", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-ai-accent-soft text-ai-accent", children: /* @__PURE__ */ jsx(Icon, { className: "size-4" }) }),
13719
- /* @__PURE__ */ jsxs("div", { children: [
13720
- /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-foreground", children: title }),
13721
- /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs leading-relaxed text-muted-foreground", children: description })
13722
- ] })
13723
- ] }),
13724
- /* @__PURE__ */ jsxs(
13725
- Button,
13726
- {
13727
- variant: task.isDone ? "outline" : "accent",
13728
- size: "sm",
13729
- onClick: onRun,
13730
- disabled: disabled || noDocs || task.isRunning,
13731
- "data-testid": testId && `${testId}-run`,
13732
- children: [
13733
- /* @__PURE__ */ jsx(Sparkles, { className: "size-3.5" }),
13734
- task.isRunning ? "Running\u2026" : task.isDone ? "Re-run" : runLabel
13735
- ]
13736
- }
13737
- )
13738
- ] }),
13739
- (task.status !== "idle" || noDocs) && /* @__PURE__ */ jsx("div", { className: "mt-4", children: noDocs ? /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: noDocsHint }) : /* @__PURE__ */ jsx(
13740
- AiAnswer,
13741
- {
13742
- status: task.status,
13743
- text: task.text,
13744
- stepCount: task.stepCount,
13745
- error: task.error,
13746
- testId: testId && `${testId}-answer`
13747
- }
13748
- ) })
13749
- ] });
13750
- }
13751
13512
  function ArtifactCanvas({
13752
13513
  artifacts,
13753
13514
  className,
@@ -13990,222 +13751,6 @@ function MessageArtifactCard({
13990
13751
  }
13991
13752
  );
13992
13753
  }
13993
- var IDLE = {
13994
- query: "",
13995
- results: [],
13996
- searched: false,
13997
- status: "idle",
13998
- error: null
13999
- };
14000
- function useSemanticSearch(docIds = [], options = {}) {
14001
- const arbi = useArbi();
14002
- const [ownSession] = useState(createSearchSession);
14003
- const session = options.session ?? ownSession;
14004
- const { model, workspaceId } = options;
14005
- const state = useSyncExternalStore(session.subscribe, session.getState, session.getState);
14006
- const foreign = !!workspaceId && !!state.workspaceId && state.workspaceId !== workspaceId;
14007
- useEffect(() => {
14008
- if (!workspaceId) return;
14009
- const current = session.getState().workspaceId;
14010
- if (current !== workspaceId) {
14011
- if (current) clearSearchSession(workspaceId, session);
14012
- else session.setState({ workspaceId });
14013
- }
14014
- }, [session, workspaceId]);
14015
- const search = useCallback(
14016
- async (query, mode = "hybrid") => {
14017
- const trimmed = query.trim();
14018
- if (!trimmed) {
14019
- clearSearchSession(void 0, session);
14020
- return;
14021
- }
14022
- const run2 = session.getState().run + 1;
14023
- const searched = workspaceId ?? session.getState().workspaceId ?? void 0;
14024
- session.setState((s) => ({
14025
- query: trimmed,
14026
- status: "running",
14027
- error: null,
14028
- run: run2,
14029
- workspaceId: workspaceId ?? s.workspaceId
14030
- }));
14031
- try {
14032
- const result = await arbi.assistant.retrieve(trimmed, docIds, {
14033
- searchMode: mode,
14034
- store: false,
14035
- ...model ? { model } : {},
14036
- ...searched ? { workspaceId: searched } : {}
14037
- });
14038
- if (session.getState().run !== run2) return;
14039
- session.setState({ results: searchChunks(result), searched: true, status: "done" });
14040
- } catch (error) {
14041
- if (session.getState().run !== run2) return;
14042
- session.setState({
14043
- status: "error",
14044
- error: error instanceof Error ? error.message : "Search failed"
14045
- });
14046
- }
14047
- },
14048
- [arbi, docIds, model, session, workspaceId]
14049
- );
14050
- const clear = useCallback(() => clearSearchSession(void 0, session), [session]);
14051
- const shown = foreign ? IDLE : state;
14052
- return {
14053
- query: shown.query,
14054
- results: shown.results,
14055
- searched: shown.searched,
14056
- status: shown.status,
14057
- error: shown.error,
14058
- isRunning: shown.status === "running",
14059
- search,
14060
- clear,
14061
- session
14062
- };
14063
- }
14064
- function DocSearch({
14065
- docIds,
14066
- onOpenDoc,
14067
- placeholder = "Semantic search across your documents\u2026",
14068
- className
14069
- }) {
14070
- const { results, status, error, search, isRunning, query } = useSemanticSearch(docIds);
14071
- const [value, setValue] = useState("");
14072
- const submit = () => {
14073
- if (value.trim()) void search(value, "hybrid");
14074
- };
14075
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-3", className), "data-testid": "doc-search", children: [
14076
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
14077
- /* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
14078
- isRunning && /* @__PURE__ */ jsx(Loader2, { className: "absolute right-3 top-1/2 size-4 -translate-y-1/2 animate-spin text-ai-accent" }),
14079
- /* @__PURE__ */ jsx(
14080
- "input",
14081
- {
14082
- value,
14083
- onChange: (e) => setValue(e.target.value),
14084
- onKeyDown: (e) => e.key === "Enter" && (e.preventDefault(), submit()),
14085
- placeholder,
14086
- className: "h-11 w-full rounded-lg border border-input bg-background pl-9 pr-24 text-sm outline-none focus:border-ai-accent/50 focus:ring-2 focus:ring-ai-accent/15",
14087
- "data-testid": "doc-search-input"
14088
- }
14089
- ),
14090
- /* @__PURE__ */ jsxs(
14091
- "button",
14092
- {
14093
- type: "button",
14094
- onClick: submit,
14095
- className: "absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1 rounded-md bg-ai-accent px-2.5 py-1 text-xs font-medium text-ai-accent-foreground",
14096
- "data-testid": "doc-search-submit",
14097
- children: [
14098
- "Search ",
14099
- /* @__PURE__ */ jsx(CornerDownLeft, { className: "size-3" })
14100
- ]
14101
- }
14102
- )
14103
- ] }),
14104
- status === "error" && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", "data-testid": "doc-search-error", children: error }),
14105
- status === "done" && /* @__PURE__ */ jsxs("div", { className: "space-y-2", "data-testid": "doc-search-results", children: [
14106
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: results.length === 0 ? `No passages matched \u201C${query}\u201D.` : `${results.length} passage${results.length === 1 ? "" : "s"} for \u201C${query}\u201D` }),
14107
- results.slice(0, 8).map((r, i) => /* @__PURE__ */ jsxs(
14108
- Card,
14109
- {
14110
- variant: "elevated",
14111
- className: cn(
14112
- "rounded-xl p-3",
14113
- onOpenDoc && r.docId && "cursor-pointer transition-colors hover:border-ai-accent/40"
14114
- ),
14115
- onClick: () => r.docId && onOpenDoc?.(r.docId),
14116
- "data-testid": `doc-search-hit-${i}`,
14117
- children: [
14118
- /* @__PURE__ */ jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
14119
- /* @__PURE__ */ jsx(FileText, { className: "size-3.5 text-ai-accent" }),
14120
- /* @__PURE__ */ jsx("span", { className: "truncate text-xs font-medium text-foreground", children: r.docTitle || "Document" }),
14121
- r.page != null && /* @__PURE__ */ jsxs(Badge, { variant: "secondary", children: [
14122
- "p.",
14123
- r.page
14124
- ] }),
14125
- r.score > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-auto text-xs text-muted-foreground", children: [
14126
- "score ",
14127
- r.score.toFixed(2)
14128
- ] })
14129
- ] }),
14130
- /* @__PURE__ */ jsx("p", { className: "line-clamp-3 text-xs leading-relaxed text-muted-foreground", children: r.content })
14131
- ]
14132
- },
14133
- `${r.docId}-${r.page}-${i}`
14134
- ))
14135
- ] })
14136
- ] });
14137
- }
14138
- function DocQaPanel({ docId, docName }) {
14139
- const task = useAiTask();
14140
- const [q, setQ] = useState("");
14141
- const ask = () => {
14142
- const question = q.trim();
14143
- if (!question || task.isRunning) return;
14144
- void task.run(
14145
- `You are answering strictly from the single document "${docName ?? docId}". Cite the page/section for each point and say if the document does not address the question.
14146
-
14147
- Question: ${question}`,
14148
- [docId]
14149
- );
14150
- };
14151
- const suggestTags = () => void task.run(
14152
- `Suggest 3-6 concise, reusable labels for the document "${docName ?? docId}" \u2014 covering document type, the key issues it touches, and any key parties. Return them as a short comma-separated list with a one-line rationale for each.`,
14153
- [docId]
14154
- );
14155
- return /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-3", "data-testid": "doc-qa", children: [
14156
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
14157
- /* @__PURE__ */ jsx(
14158
- Input,
14159
- {
14160
- value: q,
14161
- onChange: (e) => setQ(e.target.value),
14162
- onKeyDown: (e) => e.key === "Enter" && (e.preventDefault(), ask()),
14163
- placeholder: "Ask about this document\u2026",
14164
- className: "min-w-0 flex-1 bg-card text-sm placeholder:text-muted-foreground/70 focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring/50",
14165
- "data-testid": "doc-qa-input"
14166
- }
14167
- ),
14168
- /* @__PURE__ */ jsx(
14169
- Button,
14170
- {
14171
- variant: "accent",
14172
- size: "icon",
14173
- onClick: ask,
14174
- disabled: task.isRunning || !q.trim(),
14175
- className: "shrink-0",
14176
- "data-testid": "doc-qa-send",
14177
- children: /* @__PURE__ */ jsx(Send, { className: "size-4" })
14178
- }
14179
- ),
14180
- /* @__PURE__ */ jsxs(
14181
- Button,
14182
- {
14183
- variant: "outline",
14184
- size: "sm",
14185
- onClick: suggestTags,
14186
- disabled: task.isRunning,
14187
- className: "shrink-0",
14188
- "data-testid": "doc-qa-tags",
14189
- children: [
14190
- /* @__PURE__ */ jsx(Tags, { className: "size-4" }),
14191
- " Tags"
14192
- ]
14193
- }
14194
- )
14195
- ] }),
14196
- /* @__PURE__ */ jsx(
14197
- AiAnswer,
14198
- {
14199
- status: task.status,
14200
- text: task.text,
14201
- stepCount: task.stepCount,
14202
- error: task.error,
14203
- emptyHint: "Ask a question, or suggest tags \u2014 answered from this document only.",
14204
- testId: "doc-qa-answer"
14205
- }
14206
- )
14207
- ] });
14208
- }
14209
13754
  var INLINE_MD_COMPONENTS = {
14210
13755
  p: ({ children }) => /* @__PURE__ */ jsx(Fragment, { children }),
14211
13756
  strong: ({ children }) => /* @__PURE__ */ jsx("strong", { className: "font-semibold", children }),
@@ -14607,56 +14152,77 @@ var CitationLink = ({
14607
14152
  }
14608
14153
  );
14609
14154
  var CitationRenderer = React.memo(CitationRendererComponent);
14610
- var FileIcon = ({ size = 16, className = "" }) => {
14611
- return /* @__PURE__ */ jsxs(
14612
- "svg",
14613
- {
14614
- width: size,
14615
- height: size,
14616
- viewBox: "0 0 24 24",
14617
- fill: "none",
14618
- xmlns: "http://www.w3.org/2000/svg",
14619
- className,
14620
- children: [
14621
- /* @__PURE__ */ jsx(
14622
- "path",
14623
- {
14624
- d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
14625
- fill: FILE_TYPE_COLORS.generic,
14626
- stroke: FILE_TYPE_COLORS.generic,
14627
- strokeWidth: "1",
14628
- strokeLinecap: "round",
14629
- strokeLinejoin: "round"
14630
- }
14631
- ),
14632
- /* @__PURE__ */ jsx(
14633
- "path",
14634
- {
14635
- d: "M14 2v6h6",
14636
- fill: "none",
14637
- stroke: FILE_TYPE_COLORS.white,
14638
- strokeWidth: "1",
14639
- strokeLinecap: "round",
14640
- strokeLinejoin: "round"
14641
- }
14642
- ),
14643
- /* @__PURE__ */ jsx(
14644
- "text",
14645
- {
14646
- x: "12",
14647
- y: "17",
14648
- fontSize: "10",
14649
- fill: "white",
14650
- textAnchor: "middle",
14651
- fontWeight: "bold",
14652
- fontFamily: "Arial, sans-serif",
14653
- children: "?"
14654
- }
14655
- )
14656
- ]
14155
+ var IDLE = {
14156
+ query: "",
14157
+ results: [],
14158
+ searched: false,
14159
+ status: "idle",
14160
+ error: null
14161
+ };
14162
+ function useSemanticSearch(docIds = [], options = {}) {
14163
+ const arbi = useArbi();
14164
+ const [ownSession] = useState(createSearchSession);
14165
+ const session = options.session ?? ownSession;
14166
+ const { model, workspaceId } = options;
14167
+ const state = useSyncExternalStore(session.subscribe, session.getState, session.getState);
14168
+ const foreign = !!workspaceId && !!state.workspaceId && state.workspaceId !== workspaceId;
14169
+ useEffect(() => {
14170
+ if (!workspaceId) return;
14171
+ const current = session.getState().workspaceId;
14172
+ if (current !== workspaceId) {
14173
+ if (current) clearSearchSession(workspaceId, session);
14174
+ else session.setState({ workspaceId });
14657
14175
  }
14176
+ }, [session, workspaceId]);
14177
+ const search = useCallback(
14178
+ async (query, mode = "hybrid") => {
14179
+ const trimmed = query.trim();
14180
+ if (!trimmed) {
14181
+ clearSearchSession(void 0, session);
14182
+ return;
14183
+ }
14184
+ const run2 = session.getState().run + 1;
14185
+ const searched = workspaceId ?? session.getState().workspaceId ?? void 0;
14186
+ session.setState((s) => ({
14187
+ query: trimmed,
14188
+ status: "running",
14189
+ error: null,
14190
+ run: run2,
14191
+ workspaceId: workspaceId ?? s.workspaceId
14192
+ }));
14193
+ try {
14194
+ const result = await arbi.assistant.retrieve(trimmed, docIds, {
14195
+ searchMode: mode,
14196
+ store: false,
14197
+ ...model ? { model } : {},
14198
+ ...searched ? { workspaceId: searched } : {}
14199
+ });
14200
+ if (session.getState().run !== run2) return;
14201
+ session.setState({ results: searchChunks(result), searched: true, status: "done" });
14202
+ } catch (error) {
14203
+ if (session.getState().run !== run2) return;
14204
+ session.setState({
14205
+ status: "error",
14206
+ error: error instanceof Error ? error.message : "Search failed"
14207
+ });
14208
+ }
14209
+ },
14210
+ [arbi, docIds, model, session, workspaceId]
14658
14211
  );
14659
- };
14212
+ const clear = useCallback(() => clearSearchSession(void 0, session), [session]);
14213
+ const shown = foreign ? IDLE : state;
14214
+ return {
14215
+ query: shown.query,
14216
+ results: shown.results,
14217
+ searched: shown.searched,
14218
+ status: shown.status,
14219
+ error: shown.error,
14220
+ isRunning: shown.status === "running",
14221
+ search,
14222
+ clear,
14223
+ session
14224
+ };
14225
+ }
14660
14226
  var AppleIcon = ({
14661
14227
  size = 20,
14662
14228
  className = "",
@@ -14724,54 +14290,6 @@ var LinkedInIcon = ({
14724
14290
  }
14725
14291
  );
14726
14292
  };
14727
- var ArbiBotIcon = ({ size = 24, className = "" }) => {
14728
- const maskId = useId();
14729
- return /* @__PURE__ */ jsxs(
14730
- "svg",
14731
- {
14732
- xmlns: "http://www.w3.org/2000/svg",
14733
- width: size,
14734
- height: size,
14735
- viewBox: "0 0 250 250",
14736
- preserveAspectRatio: "xMidYMid meet",
14737
- className,
14738
- children: [
14739
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", children: [
14740
- /* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "2500", height: "2500", fill: "white" }),
14741
- /* @__PURE__ */ jsx("circle", { cx: "855", cy: "1715", r: "190", fill: "black" }),
14742
- /* @__PURE__ */ jsx("circle", { cx: "855", cy: "1715", r: "50", fill: "white" }),
14743
- /* @__PURE__ */ jsx("circle", { cx: "1665", cy: "1700", r: "190", fill: "black" }),
14744
- /* @__PURE__ */ jsx("circle", { cx: "1665", cy: "1700", r: "50", fill: "white" })
14745
- ] }) }) }),
14746
- /* @__PURE__ */ jsxs("g", { mask: `url(#${maskId})`, children: [
14747
- /* @__PURE__ */ jsx(
14748
- "g",
14749
- {
14750
- transform: "translate(0,250) scale(0.1,-0.1)",
14751
- fill: "currentColor",
14752
- stroke: "currentColor",
14753
- strokeWidth: "100",
14754
- children: /* @__PURE__ */ jsx("path", { d: "M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z" })
14755
- }
14756
- ),
14757
- /* @__PURE__ */ jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", fill: "currentColor", stroke: "none", children: [
14758
- /* @__PURE__ */ jsx("path", { d: "M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z" }),
14759
- /* @__PURE__ */ jsx("path", { d: "M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z" }),
14760
- /* @__PURE__ */ jsx("path", { d: "M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z" }),
14761
- /* @__PURE__ */ jsx("g", { transform: "translate(564,0)", children: /* @__PURE__ */ jsx(
14762
- "path",
14763
- {
14764
- d: "M515 353 c-49 -136 -91 -253 -93 -261 -3 -10 11 -12 60 -10 l63 3 19 53 19 52 91 0 92 0 18 -55 17 -56 62 3 c76 4 79 -24 -30 275 l-88 243 -70 0 -70 0 -90 -247z m215 -55 c0 -4 -27 -8 -59 -8 l-60 0 31 92 31 93 29 -85 c15 -46 28 -88 28 -92z",
14765
- stroke: "currentColor",
14766
- strokeWidth: "30"
14767
- }
14768
- ) })
14769
- ] })
14770
- ] })
14771
- ]
14772
- }
14773
- );
14774
- };
14775
14293
  function getNotificationTypeMeta(type) {
14776
14294
  const WorkspaceIcon = getEntityIcon("WORKSPACE");
14777
14295
  switch (type) {
@@ -14981,34 +14499,6 @@ function ActivityFeed({
14981
14499
  );
14982
14500
  }) });
14983
14501
  }
14984
- var workTypes = [
14985
- "mention",
14986
- "workspace_access_request",
14987
- "conversation_ready",
14988
- "conversation_done",
14989
- "workflow_failed",
14990
- "mail_draft_ready"
14991
- ];
14992
- function useWorkNotifications(options) {
14993
- const arbi = useArbi();
14994
- const queries = useQueryClient();
14995
- const queryKey = arbiQueryKeys.typedNotifications("work", options.apiUrl, options.userId);
14996
- const query = useQuery({
14997
- queryKey,
14998
- queryFn: async () => (await Promise.all(workTypes.map((type) => arbi.notifications.list({ type })))).flat(),
14999
- enabled: options.enabled && Boolean(options.userId),
15000
- refetchInterval: 3e4
15001
- });
15002
- useArbiWebSocket((message) => {
15003
- if (workTypes.some((type) => type === message.type))
15004
- void queries.invalidateQueries({ queryKey });
15005
- });
15006
- const receipt = useMutation({
15007
- mutationFn: (ids) => arbi.notifications.markRead(ids),
15008
- onSuccess: () => queries.invalidateQueries({ queryKey })
15009
- });
15010
- return { ...query, markRead: receipt.mutateAsync };
15011
- }
15012
14502
  function useNotifications(options = {}) {
15013
14503
  const arbi = useArbi();
15014
14504
  const limit = options.limit ?? 100;
@@ -16581,14 +16071,6 @@ function useSupportTicket(ticketId, options = {}) {
16581
16071
  refetchInterval: 15e3
16582
16072
  });
16583
16073
  }
16584
- function useCreateSupportTicket() {
16585
- const arbi = useArbi();
16586
- const queries = useQueryClient();
16587
- return useMutation({
16588
- mutationFn: (input) => arbi.support.create(input),
16589
- onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allSupportTickets() })
16590
- });
16591
- }
16592
16074
  function useRateSupportTicket() {
16593
16075
  const arbi = useArbi();
16594
16076
  const queries = useQueryClient();
@@ -16598,6 +16080,6 @@ function useRateSupportTicket() {
16598
16080
  });
16599
16081
  }
16600
16082
 
16601
- export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUTO_CHAT_MODEL, ActivityFeed, AiActionCard, AiAnswer, AppleIcon, ArbiBotIcon, ArbiHost2 as ArbiHost, ArbiWebSocketProvider, ArtifactCanvas, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, CONVERSATION_SWITCH_MEASURE, ChatBubble, CitationRenderer, CommandPalette, CommandPaletteProvider, ConversationList, ConversationScope, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DateSeparator, DmAvatar, DmComposer, DocQaPanel, DocSearch, DocumentCardMenu, DocumentReview, DraftTitleControls, EMPTY_GROUP_LABEL, FACTS_SEARCH_VIEW, FIRST_TOKEN_MEASURE, FileIcon, GitHubIcon, ImageCropModal, ImageCropper, LIVE_UPDATE_TYPES, LinkedInIcon, MAIL_DRAFT_REPLACED_EVENT, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MIN_NARRATION_DWELL_MS, MODEL_GROUP_LABELS, MailOfflineUnavailableError, MessageArtifactCard, OUTBOX_FOLDER, PENDING_SYNC_PREDICATE, POLL_EVERY_MS, PhotoCapture, RUN_WINDOW_MS, SIGNATURE_NOTIFICATION_TYPES, SLOW_AFTER_MS, STILL_WORKING, StorageActionError, TRANSFER_POLL_MS, TaskThreadPendingError, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, VideoCapture, VoiceNoteRecorder, WORK_NOTIFICATION_LABELS, WORK_OFFLINE_VIEW, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiMailClient, archiveName, archivedWorkspaceMessage, assistantLabels, bindThreadDocument, boundDocumentOf, bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, calendarOfflineSupport, callNotificationMeta, captureFrameAsBlob, claimOfflineQueue, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, computeOnline, confirmLosingOfflineMail, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, createArbiQueryClient, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, deleteLocalDraft, deleteOutboxItem, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, documentMailAttachment, docxMentionMeta, downloadRecoveryFile, enqueueOutbox, ensureAssistantMessageLoading, extractZipFile, fallbackFileName, fileAttachment, filesFromDrop, fillTimeGaps, filterRows, flushStreamingTokens, forgetUploadedDocumentFolder, formatConfigValidationError, formatIdentityPrice, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasPendingFinalCommit, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateConversationActivity, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isDeploymentAdmin, isDeploymentUserNotification, isFullConfig, isMessageRunning, isNetworkFailure, isNotificationRow, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkingOffline, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, loadAttachment as loadOfflineMailAttachment, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nextAliasSuggestion, notificationUserName, offlineMailReads, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, retryOutboxItem, rollbackOptimisticDocumentEdit, safePortalUrl, saveLocalDraft, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, setWorkOfflineIn, signatureNotificationPhrase, signatureRequestMeta, subscribeDocumentReads, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, titleFromQuestion, toChatCitations, toNotificationPreferences, toRedlineMarkdown, toShellWorkspace, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, useActOnStep, useActiveConfigId, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbiConnected, useArbiShellWorkspaces, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAssistantName, useAuthorizeLimits, useAutoSendDraft, useBookingPages, useBootTimeout, useBranchNavigation, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOfflineRuntime, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCameraStream, useCanEditShared, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useCommandPalette, useConfigSchema, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationSettings, useConversationTurn, useConversationUsage, useConversationWorkspace, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateSupportTicket, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteWorkflow, useDeleteWorkspaces, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useExportDatabase, useFacts, useFactsSearch, useFetchCalendarEvent, useFilteredProjects, useFinaliseTranslation, useFindTime, useFlushOutbox, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, useLocalDrafts, useMailAccounts, useMailAttachmentText, useMailCache, useMailClient, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailUnlock, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMentionCandidates, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNotificationPreferences, useNotifications, useNotifyConversation, useOfflineDocumentIds, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, useProjectEvents, usePublishCalendar, useRateSupportTicket, useReconnect, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshProject, useRelatedDocuments, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendBackStep, useSendMail, useSessions, useSetDeploymentHouseTemplate, useSetSkillVisibility, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSupportTicket, useSupportTickets, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useSyncOfflineMailbox, useTerminateSession, useThinkingContent, useThreadDocument, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateMailMessage, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useVideoRecorder, useWorkItems, useWorkNotifications, useWorkOffline, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeCalendarOffline, wipeOfflineDocuments, wipeOfflineMail, withRelativePath, workflowStepOf, workspaceHouseTemplateId };
16083
+ export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUTO_CHAT_MODEL, ActivityFeed, AiAnswer, AppleIcon, ArbiHost2 as ArbiHost, ArbiWebSocketProvider, ArtifactCanvas, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, CONVERSATION_SWITCH_MEASURE, ChatBubble, CitationRenderer, CommandPalette, CommandPaletteProvider, ConversationList, ConversationScope, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DateSeparator, DmAvatar, DmComposer, DocumentReview, DraftTitleControls, EMPTY_GROUP_LABEL, FACTS_SEARCH_VIEW, FIRST_TOKEN_MEASURE, GitHubIcon, ImageCropModal, ImageCropper, LIVE_UPDATE_TYPES, LinkedInIcon, MAIL_DRAFT_REPLACED_EVENT, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MIN_NARRATION_DWELL_MS, MODEL_GROUP_LABELS, MailOfflineUnavailableError, MessageArtifactCard, OUTBOX_FOLDER, PENDING_SYNC_PREDICATE, POLL_EVERY_MS, PhotoCapture, RUN_WINDOW_MS, SIGNATURE_NOTIFICATION_TYPES, SLOW_AFTER_MS, STILL_WORKING, StorageActionError, TRANSFER_POLL_MS, TaskThreadPendingError, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, VideoCapture, VoiceNoteRecorder, WORK_NOTIFICATION_LABELS, WORK_OFFLINE_VIEW, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiMailClient, archiveName, archivedWorkspaceMessage, assistantLabels, bindThreadDocument, boundDocumentOf, bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, calendarOfflineSupport, callNotificationMeta, captureFrameAsBlob, claimOfflineQueue, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, computeOnline, confirmLosingOfflineMail, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, createArbiQueryClient, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, deleteLocalDraft, deleteOutboxItem, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, documentMailAttachment, docxMentionMeta, downloadRecoveryFile, enqueueOutbox, ensureAssistantMessageLoading, extractZipFile, fallbackFileName, fileAttachment, filesFromDrop, fillTimeGaps, filterRows, flushStreamingTokens, forgetUploadedDocumentFolder, formatConfigValidationError, formatIdentityPrice, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasPendingFinalCommit, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateConversationActivity, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isDeploymentAdmin, isDeploymentUserNotification, isFullConfig, isMessageRunning, isNetworkFailure, isNotificationRow, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkingOffline, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, loadAttachment as loadOfflineMailAttachment, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nextAliasSuggestion, notificationUserName, offlineMailReads, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, retryOutboxItem, rollbackOptimisticDocumentEdit, safePortalUrl, saveLocalDraft, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, setWorkOfflineIn, signatureNotificationPhrase, signatureRequestMeta, subscribeDocumentReads, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, titleFromQuestion, toChatCitations, toNotificationPreferences, toRedlineMarkdown, toShellWorkspace, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, useActOnStep, useActiveConfigId, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAssistantName, useAuthorizeLimits, useAutoSendDraft, useBookingPages, useBootTimeout, useBranchNavigation, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOfflineRuntime, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCameraStream, useCanEditShared, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useCommandPalette, useConfigSchema, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationSettings, useConversationTurn, useConversationWorkspace, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteWorkflow, useDeleteWorkspaces, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useExportDatabase, useFacts, useFactsSearch, useFetchCalendarEvent, useFinaliseTranslation, useFindTime, useFlushOutbox, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, useLocalDrafts, useMailAccounts, useMailAttachmentText, useMailCache, useMailClient, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailUnlock, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNotificationPreferences, useNotifications, useOfflineDocumentIds, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, usePublishCalendar, useRateSupportTicket, useReconnect, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshProject, useRelatedDocuments, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendMail, useSessions, useSetDeploymentHouseTemplate, useSetSkillVisibility, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSupportTicket, useSupportTickets, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useSyncOfflineMailbox, useTerminateSession, useThinkingContent, useThreadDocument, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useVideoRecorder, useWorkItems, useWorkOffline, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeCalendarOffline, wipeOfflineDocuments, wipeOfflineMail, withRelativePath, workflowStepOf, workspaceHouseTemplateId };
16602
16084
  //# sourceMappingURL=index.js.map
16603
16085
  //# sourceMappingURL=index.js.map