@arbidocs/react 0.5.96 → 0.5.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/dist/artifacts/index.cjs +13 -13
- package/dist/artifacts/index.js +3 -3
- package/dist/calls/livekit/index.cjs +48 -48
- package/dist/calls/livekit/index.js +3 -3
- package/dist/{chunk-IIOOXKOB.js → chunk-4SH5INC3.js} +4 -4
- package/dist/{chunk-IIOOXKOB.js.map → chunk-4SH5INC3.js.map} +1 -1
- package/dist/{chunk-NJDVQIJR.cjs → chunk-5EELSW26.cjs} +4 -4
- package/dist/{chunk-NJDVQIJR.cjs.map → chunk-5EELSW26.cjs.map} +1 -1
- package/dist/{chunk-HGLS3IC6.js → chunk-5X3JANHT.js} +3 -3
- package/dist/{chunk-HGLS3IC6.js.map → chunk-5X3JANHT.js.map} +1 -1
- package/dist/{chunk-7PMNITKA.js → chunk-6SG2OGDR.js} +11 -2
- package/dist/chunk-6SG2OGDR.js.map +1 -0
- package/dist/{chunk-5RRWRTY3.js → chunk-ALT6ETIE.js} +39 -6
- package/dist/chunk-ALT6ETIE.js.map +1 -0
- package/dist/{chunk-BRFRQWAY.cjs → chunk-HAGC67GL.cjs} +11 -2
- package/dist/chunk-HAGC67GL.cjs.map +1 -0
- package/dist/{chunk-6BXRZYL2.cjs → chunk-ORBUPHMV.cjs} +38 -38
- package/dist/{chunk-6BXRZYL2.cjs.map → chunk-ORBUPHMV.cjs.map} +1 -1
- package/dist/{chunk-7RUVJZZG.cjs → chunk-Q65QCWNI.cjs} +57 -57
- package/dist/{chunk-7RUVJZZG.cjs.map → chunk-Q65QCWNI.cjs.map} +1 -1
- package/dist/{chunk-NR6PUE5O.cjs → chunk-VIOW22Q4.cjs} +44 -44
- package/dist/{chunk-NR6PUE5O.cjs.map → chunk-VIOW22Q4.cjs.map} +1 -1
- package/dist/{chunk-CSYZ3YI4.cjs → chunk-WJME7DI4.cjs} +99 -65
- package/dist/chunk-WJME7DI4.cjs.map +1 -0
- package/dist/{chunk-KZBYWXPS.js → chunk-YIZH5RVW.js} +3 -3
- package/dist/{chunk-KZBYWXPS.js.map → chunk-YIZH5RVW.js.map} +1 -1
- package/dist/{chunk-N3SFVZ7H.js → chunk-ZEGCZATR.js} +3 -3
- package/dist/{chunk-N3SFVZ7H.js.map → chunk-ZEGCZATR.js.map} +1 -1
- package/dist/document-tools/core.cjs +98 -98
- package/dist/document-tools/core.d.cts +2 -2
- package/dist/document-tools/core.d.ts +2 -2
- package/dist/document-tools/core.js +3 -3
- package/dist/document-tools/index.cjs +100 -100
- package/dist/document-tools/index.d.cts +1 -1
- package/dist/document-tools/index.d.ts +1 -1
- package/dist/document-tools/index.js +4 -4
- package/dist/index.cjs +1740 -1320
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +230 -9
- package/dist/index.d.ts +230 -9
- package/dist/index.js +454 -52
- package/dist/index.js.map +1 -1
- package/dist/{query-keys.d-D6SAUl7S.d.ts → query-keys.d-O3lHn6rp.d.cts} +9 -0
- package/dist/{query-keys.d-D6SAUl7S.d.cts → query-keys.d-O3lHn6rp.d.ts} +9 -0
- package/package.json +3 -3
- package/dist/chunk-5RRWRTY3.js.map +0 -1
- package/dist/chunk-7PMNITKA.js.map +0 -1
- package/dist/chunk-BRFRQWAY.cjs.map +0 -1
- package/dist/chunk-CSYZ3YI4.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { AudioViewer, ImageViewer, VideoViewer } from './chunk-HDCRPPBW.js';
|
|
2
|
-
import { createRecordStore, useUserSettings, patchConversation, invalidateConversationDetails, removeConversationFromLists, addConversationToList, findConversation, isConversationShared, patchConversationList, invalidateConversationLists, getRecord, openBytes, touchRecord, notifyOfflineMailChange, putRecord, sealJson, blind, deleteRecords, useFeature, useAccountClient, useUpdateUserSettings, useIsEntitled, claimOfflineMail, onOfflineMailChange, getOfflineMailSettings, setOfflineMailSettings, myChatId, upsertChat, appendToThread, dropFromThread, deleteChatMessage, removeChat, getOpenChat, cachedChat, inOfflineWindow, recordsInBucket, openJson, offlineWindowStart, recordsOfKind, SCOPE_DAYS, allRecordSizes, setMeta, OFFLINE_MAIL_DB, applyChatEvent, applyCallEvent, getMeta, hasRecord, sealBytes } from './chunk-
|
|
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, wipeOfflineMail, wrapTrackKey, writeSamples } from './chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
8
|
-
import { fetchDocumentFile, downloadBlob, fetchMarkupPdf, fetchDocumentPdf } from './chunk-
|
|
9
|
-
import { arbiMutationKeys, arbiQueryKeys, useArbi, useArbiHost, mailQueryKeys, isUnderQueryKey, connectorQueryKeys, calendarQueryKeys } from './chunk-
|
|
10
|
-
export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, isUnderQueryKey, mailQueryKeys, useArbi, useArbiHost, useDeploymentDomain } from './chunk-
|
|
2
|
+
import { createRecordStore, useUserSettings, patchConversation, invalidateConversationDetails, removeConversationFromLists, addConversationToList, findConversation, isConversationShared, patchConversationList, invalidateConversationLists, getRecord, openBytes, touchRecord, notifyOfflineMailChange, putRecord, sealJson, blind, deleteRecords, useFeature, useAccountClient, useUpdateUserSettings, useIsEntitled, claimOfflineMail, onOfflineMailChange, getOfflineMailSettings, setOfflineMailSettings, myChatId, upsertChat, appendToThread, dropFromThread, deleteChatMessage, removeChat, getOpenChat, cachedChat, inOfflineWindow, recordsInBucket, openJson, offlineWindowStart, recordsOfKind, SCOPE_DAYS, allRecordSizes, setMeta, OFFLINE_MAIL_DB, applyChatEvent, applyCallEvent, getMeta, hasRecord, sealBytes } from './chunk-ALT6ETIE.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, useFeatureCheck, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wipeOfflineMail, wrapTrackKey, writeSamples } from './chunk-ALT6ETIE.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-YIZH5RVW.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-YIZH5RVW.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-ZEGCZATR.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-ZEGCZATR.js';
|
|
8
|
+
import { fetchDocumentFile, downloadBlob, fetchMarkupPdf, fetchDocumentPdf } from './chunk-5X3JANHT.js';
|
|
9
|
+
import { arbiMutationKeys, arbiQueryKeys, useArbi, useArbiHost, mailQueryKeys, isUnderQueryKey, connectorQueryKeys, calendarQueryKeys } from './chunk-6SG2OGDR.js';
|
|
10
|
+
export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, isUnderQueryKey, mailQueryKeys, useArbi, useArbiHost, useDeploymentDomain } from './chunk-6SG2OGDR.js';
|
|
11
11
|
import { ArbiHost, linkMentions, extractMentions, UNBOUND, bindingOfRow, readLegacyThreadDocuments, forgetLegacyThreadDocuments, toMessageMentions, takeDocumentForTurn, hasMessageBody, createSearchSession, clearSearchSession } from './chunk-MS43RNXM.js';
|
|
12
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
13
|
import { notify, recordChatArtifact } from './chunk-BF5KW5ZI.js';
|
|
@@ -32,7 +32,7 @@ import { cn } from './chunk-SN5YV6FF.js';
|
|
|
32
32
|
export { cn } from './chunk-SN5YV6FF.js';
|
|
33
33
|
import React, { memo, useState, createContext, useMemo, useCallback, useEffect, useRef, useLayoutEffect, useSyncExternalStore, useContext, useId } from 'react';
|
|
34
34
|
import { useQuery, useQueryClient, useMutation, onlineManager, partialMatchKey, useMutationState, useQueries, QueryClient, MutationCache } from '@tanstack/react-query';
|
|
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';
|
|
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, mail, isConnectorVendorVisible, ACCOUNT_VENDOR, searchChunks, formatFileSize, chats, connectWithReconnect, ArbiWorkspaceSupersededError, identityErrorCode } from '@arbidocs/sdk/browser';
|
|
36
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';
|
|
37
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';
|
|
38
38
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -1419,7 +1419,7 @@ function useSaveConfigField(baseConfigId) {
|
|
|
1419
1419
|
});
|
|
1420
1420
|
const saveOnBase = (base, changes, title) => {
|
|
1421
1421
|
const current = chain2.current?.ids.has(base) ? chain2.current : null;
|
|
1422
|
-
const
|
|
1422
|
+
const ids2 = current?.ids ?? /* @__PURE__ */ new Set([base]);
|
|
1423
1423
|
const from = current?.latest ?? Promise.resolve(base);
|
|
1424
1424
|
const saved = from.then(async (configId) => {
|
|
1425
1425
|
const [defaults, active] = await Promise.all([
|
|
@@ -1436,17 +1436,17 @@ function useSaveConfigField(baseConfigId) {
|
|
|
1436
1436
|
title
|
|
1437
1437
|
});
|
|
1438
1438
|
if (response?.external_id) {
|
|
1439
|
-
|
|
1439
|
+
ids2.add(response.external_id);
|
|
1440
1440
|
const { chatModel: chatModel2 } = session.getState();
|
|
1441
1441
|
const followsSettings = !chatModel2 && base === userSettings?.last_config;
|
|
1442
|
-
if (chain2.current?.ids ===
|
|
1442
|
+
if (chain2.current?.ids === ids2 && !followsSettings) {
|
|
1443
1443
|
session.setChatModel(response.external_id);
|
|
1444
1444
|
}
|
|
1445
1445
|
}
|
|
1446
1446
|
return { response, configId: response?.external_id ?? configId };
|
|
1447
1447
|
});
|
|
1448
1448
|
chain2.current = {
|
|
1449
|
-
ids,
|
|
1449
|
+
ids: ids2,
|
|
1450
1450
|
latest: Promise.all([from, saved]).then(
|
|
1451
1451
|
([, done]) => done.configId,
|
|
1452
1452
|
() => from
|
|
@@ -1734,10 +1734,10 @@ function useWorkspaceProcessing(workspaceId) {
|
|
|
1734
1734
|
(rows) => useArbiWsStore.getState().settleTasks(rows)
|
|
1735
1735
|
);
|
|
1736
1736
|
const recheck = async () => {
|
|
1737
|
-
const
|
|
1737
|
+
const ids2 = Object.values(useArbiWsStore.getState().tasks).filter(
|
|
1738
1738
|
(t) => t.workspace_ext_id === workspaceId && IN_FLIGHT_DOCUMENT_STATUSES.has(t.status)
|
|
1739
1739
|
).map((t) => t.doc_ext_id);
|
|
1740
|
-
if (
|
|
1740
|
+
if (ids2.length) await refreshDocuments(queryClient, arbi, ids2);
|
|
1741
1741
|
};
|
|
1742
1742
|
let wasConnected = useArbiWsStore.getState().status === "connected";
|
|
1743
1743
|
const unsubscribeStatus = useArbiWsStore.subscribe((state) => {
|
|
@@ -1813,12 +1813,12 @@ function settleUpdatedDocuments(qc, updated) {
|
|
|
1813
1813
|
for (const doc of updated) setCachedDocument(qc, doc);
|
|
1814
1814
|
}
|
|
1815
1815
|
function patchEachDocument(qc, docIds, reducer) {
|
|
1816
|
-
const
|
|
1816
|
+
const ids2 = new Set(docIds);
|
|
1817
1817
|
patchDocuments(
|
|
1818
1818
|
qc,
|
|
1819
|
-
(old) => old.some((doc) =>
|
|
1819
|
+
(old) => old.some((doc) => ids2.has(doc.external_id)) ? old.map((doc) => ids2.has(doc.external_id) ? reducer(doc) : doc) : old
|
|
1820
1820
|
);
|
|
1821
|
-
for (const id of
|
|
1821
|
+
for (const id of ids2) patchCachedDocument(qc, id, reducer);
|
|
1822
1822
|
}
|
|
1823
1823
|
function workspaceOf(qc, docId) {
|
|
1824
1824
|
for (const [, docs] of qc.getQueriesData({
|
|
@@ -1848,13 +1848,13 @@ function settleAssignedDocTags(qc, created) {
|
|
|
1848
1848
|
for (const [workspaceId, delta] of workspaces) adjustTagCounts(qc, workspaceId, delta);
|
|
1849
1849
|
}
|
|
1850
1850
|
function settleRemovedDocTags(qc, { tagId, docIds }) {
|
|
1851
|
-
const
|
|
1851
|
+
const ids2 = new Set(docIds);
|
|
1852
1852
|
const removedByWorkspace = /* @__PURE__ */ new Map();
|
|
1853
1853
|
for (const [, docs] of qc.getQueriesData({
|
|
1854
1854
|
queryKey: arbiQueryKeys.allDocuments()
|
|
1855
1855
|
})) {
|
|
1856
1856
|
for (const doc of Array.isArray(docs) ? docs : []) {
|
|
1857
|
-
if (!
|
|
1857
|
+
if (!ids2.has(doc.external_id)) continue;
|
|
1858
1858
|
if (!doc.doctags?.some((dt) => dt.tag_ext_id === tagId)) continue;
|
|
1859
1859
|
removedByWorkspace.set(
|
|
1860
1860
|
doc.workspace_ext_id,
|
|
@@ -1862,7 +1862,7 @@ function settleRemovedDocTags(qc, { tagId, docIds }) {
|
|
|
1862
1862
|
);
|
|
1863
1863
|
}
|
|
1864
1864
|
}
|
|
1865
|
-
patchEachDocument(qc,
|
|
1865
|
+
patchEachDocument(qc, ids2, (doc) => ({
|
|
1866
1866
|
...doc,
|
|
1867
1867
|
doctags: (doc.doctags ?? []).filter((dt) => dt.tag_ext_id !== tagId)
|
|
1868
1868
|
}));
|
|
@@ -2338,9 +2338,9 @@ function useDocumentThumbnails(visibleIds) {
|
|
|
2338
2338
|
setThumbnails(/* @__PURE__ */ new Map());
|
|
2339
2339
|
}, [workspaceId]);
|
|
2340
2340
|
const fetchMissing = useCallback(
|
|
2341
|
-
async (
|
|
2341
|
+
async (ids2) => {
|
|
2342
2342
|
if (!workspaceId) return;
|
|
2343
|
-
const need =
|
|
2343
|
+
const need = ids2.filter((id) => !resolvedRef.current.has(id) && !inflightRef.current.has(id));
|
|
2344
2344
|
if (need.length === 0) return;
|
|
2345
2345
|
need.forEach((id) => inflightRef.current.add(id));
|
|
2346
2346
|
try {
|
|
@@ -3822,10 +3822,10 @@ function watchPendingDocIds(queryClient) {
|
|
|
3822
3822
|
watched.add(queryClient);
|
|
3823
3823
|
const cache = queryClient.getMutationCache();
|
|
3824
3824
|
const update2 = () => {
|
|
3825
|
-
const
|
|
3825
|
+
const ids2 = new Set(
|
|
3826
3826
|
cache.findAll({ predicate: PENDING_SYNC_PREDICATE }).flatMap((m) => docIdsFromVariables(kindOf(m.options.mutationKey), m.state.variables))
|
|
3827
3827
|
);
|
|
3828
|
-
if (!sameSet(usePendingDocIds.getState().ids,
|
|
3828
|
+
if (!sameSet(usePendingDocIds.getState().ids, ids2)) usePendingDocIds.setState({ ids: ids2 });
|
|
3829
3829
|
};
|
|
3830
3830
|
update2();
|
|
3831
3831
|
cache.subscribe(update2);
|
|
@@ -4341,7 +4341,7 @@ function useStreamHandlers() {
|
|
|
4341
4341
|
return "";
|
|
4342
4342
|
}
|
|
4343
4343
|
},
|
|
4344
|
-
refreshDocuments: (
|
|
4344
|
+
refreshDocuments: (ids2) => refreshDocuments(queryClient, arbi, ids2)
|
|
4345
4345
|
},
|
|
4346
4346
|
params
|
|
4347
4347
|
),
|
|
@@ -5385,6 +5385,46 @@ function useAttachRun(conversationId, responseId) {
|
|
|
5385
5385
|
};
|
|
5386
5386
|
}, [conversationId, responseId, queryClient, session]);
|
|
5387
5387
|
}
|
|
5388
|
+
function workflowRunTitle(workflowName, createdAt) {
|
|
5389
|
+
const day2 = new Date(createdAt).toLocaleDateString(void 0, { day: "numeric", month: "short" });
|
|
5390
|
+
return `${workflowName} \u2014 ${day2}`;
|
|
5391
|
+
}
|
|
5392
|
+
function useWorkflowRunTitles(conversations, openId, workspaceId) {
|
|
5393
|
+
const hasUntitledRun = conversations.some((c) => !c.title && c.workflow_ext_id && c.created_at);
|
|
5394
|
+
const { data: workflows } = useWorkflows({ enabled: hasUntitledRun });
|
|
5395
|
+
const titles = useMemo(() => {
|
|
5396
|
+
const names = new Map((workflows ?? []).map((w) => [w.external_id, w.name]));
|
|
5397
|
+
const out = {};
|
|
5398
|
+
for (const c of conversations) {
|
|
5399
|
+
const name = !c.title && c.workflow_ext_id ? names.get(c.workflow_ext_id) : void 0;
|
|
5400
|
+
if (name && c.created_at) out[c.external_id] = workflowRunTitle(name, c.created_at);
|
|
5401
|
+
}
|
|
5402
|
+
return out;
|
|
5403
|
+
}, [workflows, conversations]);
|
|
5404
|
+
const arbi = useArbi();
|
|
5405
|
+
const queryClient = useQueryClient();
|
|
5406
|
+
const canEditShared = useCanEditShared();
|
|
5407
|
+
const { mutateAsync: rename } = useUpdateConversation();
|
|
5408
|
+
const titled = useRef(/* @__PURE__ */ new Set());
|
|
5409
|
+
const open = openId ? conversations.find((c) => c.external_id === openId) : void 0;
|
|
5410
|
+
const openTitle = openId ? titles[openId] : void 0;
|
|
5411
|
+
const mayEdit = !!open && (open.is_owner === true || open.is_shared === true && canEditShared);
|
|
5412
|
+
useEffect(() => {
|
|
5413
|
+
if (!openId || !openTitle || !mayEdit || !workspaceId || titled.current.has(openId)) return;
|
|
5414
|
+
titled.current.add(openId);
|
|
5415
|
+
void (async () => {
|
|
5416
|
+
const fresh = await queryClient.fetchQuery({
|
|
5417
|
+
queryKey: arbiQueryKeys.conversations(workspaceId),
|
|
5418
|
+
queryFn: () => arbi.conversations.list({ workspaceId }),
|
|
5419
|
+
staleTime: 0
|
|
5420
|
+
});
|
|
5421
|
+
if (fresh.find((c) => c.external_id === openId)?.title) return;
|
|
5422
|
+
await rename({ conversationId: openId, patch: { title: openTitle } });
|
|
5423
|
+
})().catch(() => {
|
|
5424
|
+
});
|
|
5425
|
+
}, [openId, openTitle, mayEdit, workspaceId, arbi, queryClient, rename]);
|
|
5426
|
+
return titles;
|
|
5427
|
+
}
|
|
5388
5428
|
|
|
5389
5429
|
// src/chat/useConversation.ts
|
|
5390
5430
|
function workflowStepOf(tools) {
|
|
@@ -5402,6 +5442,7 @@ function titleFromQuestion(question, maxLength = 48) {
|
|
|
5402
5442
|
var FAILED_MESSAGE = "The assistant request failed.";
|
|
5403
5443
|
var UNFINISHED_MESSAGE = "The answer did not finish. Try again.";
|
|
5404
5444
|
var NEW = "new";
|
|
5445
|
+
var NO_ROWS = [];
|
|
5405
5446
|
var messageOf = (e, fallback) => e instanceof Error ? e.message : fallback;
|
|
5406
5447
|
function signedInUserId2(arbi) {
|
|
5407
5448
|
try {
|
|
@@ -5483,6 +5524,11 @@ function useConversation(options = {}) {
|
|
|
5483
5524
|
[agentId, agentHistory.data, ordinaryHistory.data, workspaceId]
|
|
5484
5525
|
);
|
|
5485
5526
|
const isLoadingThreads = agentId ? agentHistory.isLoading : ordinaryHistory.isLoading;
|
|
5527
|
+
const runTitles = useWorkflowRunTitles(
|
|
5528
|
+
agentId ? NO_ROWS : ordinaryHistory.data ?? NO_ROWS,
|
|
5529
|
+
conversationId,
|
|
5530
|
+
workspaceId
|
|
5531
|
+
);
|
|
5486
5532
|
const data = useConversationData();
|
|
5487
5533
|
const {
|
|
5488
5534
|
messageHistory,
|
|
@@ -5542,14 +5588,14 @@ function useConversation(options = {}) {
|
|
|
5542
5588
|
const localTitle = firstQuestion ? titleFromQuestion(firstQuestion, titleLength) : "";
|
|
5543
5589
|
const persisted = [...stored].filter((c) => c.status != null || c.message_count > 0 || c.external_id === conversationId).sort((a, b) => b.updated_at.localeCompare(a.updated_at)).map((c) => ({
|
|
5544
5590
|
id: c.external_id,
|
|
5545
|
-
title: c.title || (c.external_id === conversationId ? localTitle : "")
|
|
5591
|
+
title: c.title || runTitles[c.external_id] || (c.external_id === conversationId ? localTitle : "")
|
|
5546
5592
|
}));
|
|
5547
5593
|
const isListed = persisted.some((t) => t.id === conversationId);
|
|
5548
5594
|
return [
|
|
5549
5595
|
...conversationId === null ? [{ id: NEW, title: localTitle }] : isListed ? [] : [{ id: conversationId, title: localTitle }],
|
|
5550
5596
|
...persisted
|
|
5551
5597
|
];
|
|
5552
|
-
}, [stored, conversationId, messages, titleLength]);
|
|
5598
|
+
}, [stored, conversationId, messages, titleLength, runTitles]);
|
|
5553
5599
|
const selectedIds = useMemo(
|
|
5554
5600
|
() => (agentId ? [] : docs).map((d) => d.external_id).filter((id) => !!id && !deselected.has(id)),
|
|
5555
5601
|
[docs, deselected, agentId]
|
|
@@ -6592,6 +6638,113 @@ function useInstallSkillPack(pack) {
|
|
|
6592
6638
|
}
|
|
6593
6639
|
});
|
|
6594
6640
|
}
|
|
6641
|
+
|
|
6642
|
+
// src/skill-pack.ts
|
|
6643
|
+
var FRONTMATTER = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
6644
|
+
var SLUG = /^[a-z0-9][a-z0-9-]*$/;
|
|
6645
|
+
function readFrontmatter(block) {
|
|
6646
|
+
const meta = {};
|
|
6647
|
+
for (const line of block.split(/\r?\n/)) {
|
|
6648
|
+
const i = line.indexOf(":");
|
|
6649
|
+
if (i > 0) meta[line.slice(0, i).trim().toLowerCase()] = line.slice(i + 1).trim();
|
|
6650
|
+
}
|
|
6651
|
+
return meta;
|
|
6652
|
+
}
|
|
6653
|
+
function withPreamble(preamble, body) {
|
|
6654
|
+
return [preamble?.trim(), body.trim()].filter(Boolean).join("\n\n");
|
|
6655
|
+
}
|
|
6656
|
+
function checkSlug(slug, where) {
|
|
6657
|
+
if (!SLUG.test(slug)) throw new Error(`${where}: "${slug}" is not a skill slug`);
|
|
6658
|
+
}
|
|
6659
|
+
function fromFile(path, text2, preamble) {
|
|
6660
|
+
const match = FRONTMATTER.exec(text2);
|
|
6661
|
+
if (!match) throw new Error(`${path}: a skill needs frontmatter`);
|
|
6662
|
+
const meta = readFrontmatter(match[1]);
|
|
6663
|
+
const slug = meta.name ?? "";
|
|
6664
|
+
checkSlug(slug, path);
|
|
6665
|
+
if (path.includes("/") && !path.includes(`/${slug}/`))
|
|
6666
|
+
throw new Error(`${path}: name must be the folder's slug`);
|
|
6667
|
+
let inputs = [];
|
|
6668
|
+
if (meta.inputs) {
|
|
6669
|
+
try {
|
|
6670
|
+
inputs = JSON.parse(meta.inputs);
|
|
6671
|
+
} catch {
|
|
6672
|
+
throw new Error(`${path}: inputs must be one line of JSON`);
|
|
6673
|
+
}
|
|
6674
|
+
}
|
|
6675
|
+
const instructions = withPreamble(preamble, match[2]);
|
|
6676
|
+
return {
|
|
6677
|
+
slug,
|
|
6678
|
+
title: meta.title || slug,
|
|
6679
|
+
description: meta.description ?? "",
|
|
6680
|
+
icon: meta.icon || void 0,
|
|
6681
|
+
category: meta.category || void 0,
|
|
6682
|
+
inputs,
|
|
6683
|
+
instructions,
|
|
6684
|
+
markdown: `---
|
|
6685
|
+
${match[1]}
|
|
6686
|
+
---
|
|
6687
|
+
|
|
6688
|
+
${instructions}
|
|
6689
|
+
`
|
|
6690
|
+
};
|
|
6691
|
+
}
|
|
6692
|
+
var oneLine = (text2) => text2.replace(/\s*\n\s*/g, " ").trim();
|
|
6693
|
+
function fromDefinition(skill, preamble) {
|
|
6694
|
+
checkSlug(skill.name, "defineSkillPack");
|
|
6695
|
+
const inputs = skill.inputs ?? [];
|
|
6696
|
+
const instructions = withPreamble(preamble, skill.prompt);
|
|
6697
|
+
const meta = [
|
|
6698
|
+
`name: ${skill.name}`,
|
|
6699
|
+
`description: ${oneLine(skill.description)}`,
|
|
6700
|
+
skill.title && `title: ${oneLine(skill.title)}`,
|
|
6701
|
+
skill.icon && `icon: ${skill.icon}`,
|
|
6702
|
+
skill.category && `category: ${oneLine(skill.category)}`,
|
|
6703
|
+
inputs.length > 0 && `inputs: ${JSON.stringify(inputs)}`
|
|
6704
|
+
].filter(Boolean);
|
|
6705
|
+
return {
|
|
6706
|
+
slug: skill.name,
|
|
6707
|
+
title: skill.title || skill.name,
|
|
6708
|
+
description: skill.description,
|
|
6709
|
+
icon: skill.icon,
|
|
6710
|
+
category: skill.category,
|
|
6711
|
+
inputs,
|
|
6712
|
+
instructions,
|
|
6713
|
+
markdown: `---
|
|
6714
|
+
${meta.join("\n")}
|
|
6715
|
+
---
|
|
6716
|
+
|
|
6717
|
+
${instructions}
|
|
6718
|
+
`
|
|
6719
|
+
};
|
|
6720
|
+
}
|
|
6721
|
+
function defineSkillPack({
|
|
6722
|
+
id,
|
|
6723
|
+
label,
|
|
6724
|
+
preamble,
|
|
6725
|
+
files = {},
|
|
6726
|
+
skills = [],
|
|
6727
|
+
marker
|
|
6728
|
+
}) {
|
|
6729
|
+
const all = [
|
|
6730
|
+
...Object.entries(files).map(([path, text2]) => fromFile(path, text2, preamble)),
|
|
6731
|
+
...skills.map((skill) => fromDefinition(skill, preamble))
|
|
6732
|
+
].sort((a, b) => a.slug.localeCompare(b.slug));
|
|
6733
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6734
|
+
for (const skill of all) {
|
|
6735
|
+
if (seen.has(skill.slug)) throw new Error(`defineSkillPack: two skills are "${skill.slug}"`);
|
|
6736
|
+
seen.add(skill.slug);
|
|
6737
|
+
}
|
|
6738
|
+
return { ...createSkillPack({ id, skills: all, marker }), label, skills: all };
|
|
6739
|
+
}
|
|
6740
|
+
function skillPackPrompt(pack, slug, request = "") {
|
|
6741
|
+
const skill = pack.skills.find((s) => s.slug === slug);
|
|
6742
|
+
if (!skill) throw new Error(`No skill "${slug}" in the ${pack.id} pack`);
|
|
6743
|
+
return request.trim() ? `${skill.instructions}
|
|
6744
|
+
|
|
6745
|
+
## Request
|
|
6746
|
+
${request.trim()}` : skill.instructions;
|
|
6747
|
+
}
|
|
6595
6748
|
var WORK_OFFLINE_VIEW = "app.workOffline";
|
|
6596
6749
|
var isWorkingOffline = (session) => session.getState().views.transient[WORK_OFFLINE_VIEW] === true;
|
|
6597
6750
|
var setWorkOfflineIn = (session, on) => session.setTransientView(WORK_OFFLINE_VIEW, on || void 0);
|
|
@@ -6670,6 +6823,17 @@ var MailOfflineUnavailableError = class extends Error {
|
|
|
6670
6823
|
function accountPath(id) {
|
|
6671
6824
|
return `/accounts/${encodeURIComponent(id)}`;
|
|
6672
6825
|
}
|
|
6826
|
+
function conversationsPath(accountId, folderId, query, cursor) {
|
|
6827
|
+
const params = new URLSearchParams({
|
|
6828
|
+
folder_id: folderId,
|
|
6829
|
+
q: query,
|
|
6830
|
+
...cursor ? { cursor } : {}
|
|
6831
|
+
});
|
|
6832
|
+
return `${accountPath(accountId)}/conversations?${params}`;
|
|
6833
|
+
}
|
|
6834
|
+
function threadPath(accountId, threadId, folderId) {
|
|
6835
|
+
return `${accountPath(accountId)}/thread?${new URLSearchParams({ thread_id: threadId, folder_id: folderId })}`;
|
|
6836
|
+
}
|
|
6673
6837
|
async function mailJson(fetch2, path, init) {
|
|
6674
6838
|
const response = await fetch2(path, init);
|
|
6675
6839
|
return response.status === 204 ? void 0 : response.json();
|
|
@@ -6684,6 +6848,8 @@ function createMailClient(fetch2, overrides = {}) {
|
|
|
6684
6848
|
fetch2,
|
|
6685
6849
|
`${accountPath(account.id)}/messages?${new URLSearchParams({ folder_id: folderId, q: query, ...cursor ? { cursor } : {} })}`
|
|
6686
6850
|
),
|
|
6851
|
+
listConversations: (account, folderId, query, cursor) => mailJson(fetch2, conversationsPath(account.id, folderId, query, cursor)),
|
|
6852
|
+
getThread: (account, threadId, folderId) => mailJson(fetch2, threadPath(account.id, threadId, folderId)),
|
|
6687
6853
|
getMessage: (account, messageId) => mailJson(fetch2, `${accountPath(account.id)}/messages/${encodeURIComponent(messageId)}`),
|
|
6688
6854
|
unlock: async () => {
|
|
6689
6855
|
},
|
|
@@ -6736,6 +6902,71 @@ function mailDraftIdFromContent(content) {
|
|
|
6736
6902
|
}
|
|
6737
6903
|
}
|
|
6738
6904
|
|
|
6905
|
+
// src/mail/threads.ts
|
|
6906
|
+
function mailConversationKey(message) {
|
|
6907
|
+
return message.thread_id || message.id;
|
|
6908
|
+
}
|
|
6909
|
+
function toMailConversation(threadId, members) {
|
|
6910
|
+
const newest = members[0];
|
|
6911
|
+
const senders = /* @__PURE__ */ new Map();
|
|
6912
|
+
for (const message of [...members].reverse())
|
|
6913
|
+
for (const address of message.sender)
|
|
6914
|
+
if (!senders.has(address.email.toLowerCase()))
|
|
6915
|
+
senders.set(address.email.toLowerCase(), address);
|
|
6916
|
+
return {
|
|
6917
|
+
thread_id: threadId,
|
|
6918
|
+
subject: [...members].reverse().find((m) => m.subject)?.subject ?? "",
|
|
6919
|
+
preview: newest.preview,
|
|
6920
|
+
senders: [...senders.values()],
|
|
6921
|
+
received_at: newest.received_at ?? null,
|
|
6922
|
+
message_count: members.length,
|
|
6923
|
+
unread_count: members.filter((m) => m.unread).length,
|
|
6924
|
+
flagged: members.some((m) => m.flagged),
|
|
6925
|
+
messages: members
|
|
6926
|
+
};
|
|
6927
|
+
}
|
|
6928
|
+
function groupMailConversations(messages) {
|
|
6929
|
+
const groups = /* @__PURE__ */ new Map();
|
|
6930
|
+
for (const message of messages) {
|
|
6931
|
+
const key = mailConversationKey(message);
|
|
6932
|
+
const members = groups.get(key);
|
|
6933
|
+
if (members) members.push(message);
|
|
6934
|
+
else groups.set(key, [message]);
|
|
6935
|
+
}
|
|
6936
|
+
return [...groups].map(([key, members]) => toMailConversation(key, members));
|
|
6937
|
+
}
|
|
6938
|
+
var MESSAGE_ID = /<[^<>\s]+>/g;
|
|
6939
|
+
function ids(header) {
|
|
6940
|
+
if (!header || header.length === 0) return [];
|
|
6941
|
+
const text2 = Array.isArray(header) ? header.join(" ") : header;
|
|
6942
|
+
return text2.match(MESSAGE_ID) ?? text2.split(/\s+/).filter(Boolean);
|
|
6943
|
+
}
|
|
6944
|
+
function mailThreadRoot(message) {
|
|
6945
|
+
return ids(message.references)[0] ?? ids(message.in_reply_to)[0] ?? ids(message.message_id)[0];
|
|
6946
|
+
}
|
|
6947
|
+
async function hmacKey(secret, value) {
|
|
6948
|
+
const key = await crypto.subtle.importKey(
|
|
6949
|
+
"raw",
|
|
6950
|
+
secret,
|
|
6951
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
6952
|
+
false,
|
|
6953
|
+
["sign"]
|
|
6954
|
+
);
|
|
6955
|
+
const mac = new Uint8Array(
|
|
6956
|
+
await crypto.subtle.sign("HMAC", key, new TextEncoder().encode(`message:${value.trim()}`))
|
|
6957
|
+
);
|
|
6958
|
+
return Array.from(mac.slice(0, 16), (b) => b.toString(16).padStart(2, "0")).join("");
|
|
6959
|
+
}
|
|
6960
|
+
async function nativeThreadKeys(secret, message) {
|
|
6961
|
+
const root = mailThreadRoot(message);
|
|
6962
|
+
if (!root) return void 0;
|
|
6963
|
+
const own = ids(message.message_id)[0];
|
|
6964
|
+
return {
|
|
6965
|
+
thread_hmac: await hmacKey(secret, root),
|
|
6966
|
+
...own && { message_id_hmac: await hmacKey(secret, own) }
|
|
6967
|
+
};
|
|
6968
|
+
}
|
|
6969
|
+
|
|
6739
6970
|
// src/mail/offline/mailbox.ts
|
|
6740
6971
|
var keyOf = {
|
|
6741
6972
|
accounts: () => blind("accounts"),
|
|
@@ -6884,6 +7115,16 @@ async function searchFolder(accountId, folderId, query) {
|
|
|
6884
7115
|
}
|
|
6885
7116
|
return out;
|
|
6886
7117
|
}
|
|
7118
|
+
var isVirtualFolder = (folder) => folder?.role === "flagged";
|
|
7119
|
+
async function loadAccountMessages(accountId, include, query = "") {
|
|
7120
|
+
const seen = /* @__PURE__ */ new Map();
|
|
7121
|
+
for (const folder of await loadFolders(accountId) ?? []) {
|
|
7122
|
+
if (isVirtualFolder(folder) || !include(folder)) continue;
|
|
7123
|
+
for (const message of await searchFolder(accountId, folder.id, query))
|
|
7124
|
+
if (!seen.has(message.id)) seen.set(message.id, message);
|
|
7125
|
+
}
|
|
7126
|
+
return [...seen.values()].sort((a, b) => receivedAt(b) - receivedAt(a));
|
|
7127
|
+
}
|
|
6887
7128
|
|
|
6888
7129
|
// src/offline-store/network.ts
|
|
6889
7130
|
function isNetworkFailure(error) {
|
|
@@ -6920,9 +7161,24 @@ async function readHeader(accountId, folderId, messageId) {
|
|
|
6920
7161
|
return void 0;
|
|
6921
7162
|
}
|
|
6922
7163
|
}
|
|
7164
|
+
async function deviceCopies(accountId, messageId) {
|
|
7165
|
+
const copies = [];
|
|
7166
|
+
for (const folder of await loadFolders(accountId) ?? []) {
|
|
7167
|
+
const header = await readHeader(accountId, folder.id, messageId);
|
|
7168
|
+
if (header) copies.push({ folderId: folder.id, header });
|
|
7169
|
+
}
|
|
7170
|
+
return copies;
|
|
7171
|
+
}
|
|
6923
7172
|
async function applyToDevice({ account, messageId, folderId, change }) {
|
|
6924
7173
|
let header = await readHeader(account.id, folderId, messageId);
|
|
6925
|
-
|
|
7174
|
+
let headerKey = await keyOf.header(account.id, folderId, messageId);
|
|
7175
|
+
if (!header) {
|
|
7176
|
+
const [copy] = await deviceCopies(account.id, messageId);
|
|
7177
|
+
if (copy) {
|
|
7178
|
+
header = copy.header;
|
|
7179
|
+
headerKey = await keyOf.header(account.id, copy.folderId, messageId);
|
|
7180
|
+
}
|
|
7181
|
+
}
|
|
6926
7182
|
if (change.kind === "delete") {
|
|
6927
7183
|
const attachments = header?.attachments ?? [];
|
|
6928
7184
|
await removeKeys([
|
|
@@ -6932,14 +7188,17 @@ async function applyToDevice({ account, messageId, folderId, change }) {
|
|
|
6932
7188
|
]);
|
|
6933
7189
|
return;
|
|
6934
7190
|
}
|
|
6935
|
-
const { unread, folder_id: moveTo, action } = change.update;
|
|
6936
|
-
if (unread !== void 0) {
|
|
6937
|
-
|
|
6938
|
-
|
|
6939
|
-
|
|
6940
|
-
}
|
|
7191
|
+
const { unread, flagged, folder_id: moveTo, action } = change.update;
|
|
7192
|
+
if (unread !== void 0 || flagged !== void 0) {
|
|
7193
|
+
const state = {
|
|
7194
|
+
...unread !== void 0 && { unread },
|
|
7195
|
+
...flagged !== void 0 && { flagged }
|
|
7196
|
+
};
|
|
7197
|
+
if (header) header = { ...header, ...state };
|
|
7198
|
+
for (const copy of await deviceCopies(account.id, messageId))
|
|
7199
|
+
await saveHeader(account.id, copy.folderId, { ...copy.header, ...state });
|
|
6941
7200
|
const body = await loadBody(account.id, messageId);
|
|
6942
|
-
if (body) await saveBody(account.id, { ...body,
|
|
7201
|
+
if (body) await saveBody(account.id, { ...body, ...state });
|
|
6943
7202
|
}
|
|
6944
7203
|
if (!moveTo && !action) return;
|
|
6945
7204
|
if (header) await removeKeys([headerKey]);
|
|
@@ -6954,6 +7213,7 @@ function combine(pending, next) {
|
|
|
6954
7213
|
const update2 = { ...pending.change.update };
|
|
6955
7214
|
let restoreTo = pending.restoreTo;
|
|
6956
7215
|
if (next.update.unread !== void 0) update2.unread = next.update.unread;
|
|
7216
|
+
if (next.update.flagged !== void 0) update2.flagged = next.update.flagged;
|
|
6957
7217
|
if (next.update.folder_id !== void 0 || next.update.action !== void 0) {
|
|
6958
7218
|
const before = { folder_id: update2.folder_id, action: update2.action };
|
|
6959
7219
|
delete update2.folder_id;
|
|
@@ -7001,6 +7261,7 @@ async function queue(input) {
|
|
|
7001
7261
|
kind: "update",
|
|
7002
7262
|
update: {
|
|
7003
7263
|
unread: input.change.update.unread,
|
|
7264
|
+
flagged: input.change.update.flagged,
|
|
7004
7265
|
folder_id: existing.restoreTo ?? existing.folderId
|
|
7005
7266
|
}
|
|
7006
7267
|
}
|
|
@@ -7514,7 +7775,7 @@ async function syncMailbox(transport, settings, options = {}) {
|
|
|
7514
7775
|
const records = await recordsInBucket(await bucketOf.folder(account.id, gone.id));
|
|
7515
7776
|
await removeKeys(records.map((r) => r.key));
|
|
7516
7777
|
}
|
|
7517
|
-
for (const folder of folders)
|
|
7778
|
+
for (const folder of folders.filter((f) => !isVirtualFolder(f)))
|
|
7518
7779
|
await syncFolder(transport, account, folder, settings, windowStart, full, budget);
|
|
7519
7780
|
notifyOfflineMailChange("mailbox");
|
|
7520
7781
|
} catch (accountError) {
|
|
@@ -7766,6 +8027,16 @@ async function onlineFirst(online, offline, unavailable) {
|
|
|
7766
8027
|
if (saved !== void 0) return saved;
|
|
7767
8028
|
throw new MailOfflineUnavailableError(unavailable);
|
|
7768
8029
|
}
|
|
8030
|
+
async function deviceMessages(account, folderId, query) {
|
|
8031
|
+
if (!isVirtualFolder(await savedFolder(account.id, folderId)))
|
|
8032
|
+
return searchFolder(account.id, folderId, query);
|
|
8033
|
+
const inView = (f) => account.provider === "imap" ? f.role === "inbox" : f.role !== "trash";
|
|
8034
|
+
const all = await loadAccountMessages(account.id, inView, query);
|
|
8035
|
+
return all.filter((m) => m.flagged);
|
|
8036
|
+
}
|
|
8037
|
+
async function savedFolder(accountId, folderId) {
|
|
8038
|
+
return (await loadFolders(accountId) ?? []).find((f) => f.id === folderId);
|
|
8039
|
+
}
|
|
7769
8040
|
function offlineMailReads(getArbi, { keepsMail = () => true } = {}) {
|
|
7770
8041
|
const call = (path) => mailJson((p, i) => getArbi().mail.fetch(p, i), path);
|
|
7771
8042
|
const settings = () => getOfflineMailSettings(sessionUser(getArbi()));
|
|
@@ -7810,6 +8081,7 @@ function offlineMailReads(getArbi, { keepsMail = () => true } = {}) {
|
|
|
7810
8081
|
);
|
|
7811
8082
|
if (storeEnabled() && !query)
|
|
7812
8083
|
remember(async () => {
|
|
8084
|
+
if (isVirtualFolder(await savedFolder(account.id, folderId))) return;
|
|
7813
8085
|
for (const message of page.messages)
|
|
7814
8086
|
if (keeps(message)) await saveHeader(account.id, folderId, message);
|
|
7815
8087
|
await overlayPendingMailChanges();
|
|
@@ -7818,10 +8090,43 @@ function offlineMailReads(getArbi, { keepsMail = () => true } = {}) {
|
|
|
7818
8090
|
},
|
|
7819
8091
|
async () => {
|
|
7820
8092
|
if (!await hasFolder(account.id)) return void 0;
|
|
7821
|
-
return { messages: await
|
|
8093
|
+
return { messages: await deviceMessages(account, folderId, query), fromDevice: true };
|
|
7822
8094
|
},
|
|
7823
8095
|
`You're offline and this folder isn't saved on this device. ${NOT_SAVED_HINT}`
|
|
7824
8096
|
),
|
|
8097
|
+
listConversations: (account, folderId, query, cursor) => onlineFirst(
|
|
8098
|
+
async () => {
|
|
8099
|
+
const page = await call(
|
|
8100
|
+
conversationsPath(account.id, folderId, query, cursor)
|
|
8101
|
+
);
|
|
8102
|
+
if (storeEnabled() && !query)
|
|
8103
|
+
remember(async () => {
|
|
8104
|
+
if (isVirtualFolder(await savedFolder(account.id, folderId))) return;
|
|
8105
|
+
for (const conversation of page.conversations)
|
|
8106
|
+
for (const message of conversation.messages)
|
|
8107
|
+
if (keeps(message)) await saveHeader(account.id, folderId, message);
|
|
8108
|
+
await overlayPendingMailChanges();
|
|
8109
|
+
});
|
|
8110
|
+
return page;
|
|
8111
|
+
},
|
|
8112
|
+
async () => {
|
|
8113
|
+
if (!await hasFolder(account.id)) return void 0;
|
|
8114
|
+
const messages = await deviceMessages(account, folderId, query);
|
|
8115
|
+
return { conversations: groupMailConversations(messages), fromDevice: true };
|
|
8116
|
+
},
|
|
8117
|
+
`You're offline and this folder isn't saved on this device. ${NOT_SAVED_HINT}`
|
|
8118
|
+
),
|
|
8119
|
+
getThread: (account, threadId, folderId) => onlineFirst(
|
|
8120
|
+
() => call(threadPath(account.id, threadId, folderId)),
|
|
8121
|
+
async () => {
|
|
8122
|
+
if (!await hasFolder(account.id)) return void 0;
|
|
8123
|
+
const trash = (await savedFolder(account.id, folderId))?.role === "trash";
|
|
8124
|
+
const messages = (await loadAccountMessages(account.id, (f) => f.role === "trash" === trash)).filter((m) => mailConversationKey(m) === threadId);
|
|
8125
|
+
if (!messages.length) return void 0;
|
|
8126
|
+
return { thread_id: threadId, messages: messages.reverse(), fromDevice: true };
|
|
8127
|
+
},
|
|
8128
|
+
"You're offline and this conversation isn't saved on this device."
|
|
8129
|
+
),
|
|
7825
8130
|
getMessage: (account, messageId) => onlineFirst(
|
|
7826
8131
|
async () => {
|
|
7827
8132
|
const message = await call(
|
|
@@ -7937,6 +8242,27 @@ function useMailMessages(account, folderId, query, cursor, options = {}) {
|
|
|
7937
8242
|
refetchInterval: options.refetchInterval
|
|
7938
8243
|
});
|
|
7939
8244
|
}
|
|
8245
|
+
function useMailConversations(account, folderId, query, cursor, options = {}) {
|
|
8246
|
+
const { client } = useMailClient();
|
|
8247
|
+
return useQuery({
|
|
8248
|
+
queryKey: mailQueryKeys.conversations(account?.id, folderId, query, cursor),
|
|
8249
|
+
queryFn: () => client.listConversations(account, folderId, query, cursor),
|
|
8250
|
+
networkMode: "always",
|
|
8251
|
+
enabled: !!account && !!folderId && (options.enabled ?? true),
|
|
8252
|
+
retry: false,
|
|
8253
|
+
refetchInterval: options.refetchInterval
|
|
8254
|
+
});
|
|
8255
|
+
}
|
|
8256
|
+
function useMailThread(account, threadId, folderId, options = {}) {
|
|
8257
|
+
const { client } = useMailClient();
|
|
8258
|
+
return useQuery({
|
|
8259
|
+
queryKey: mailQueryKeys.thread(account?.id, threadId, folderId),
|
|
8260
|
+
queryFn: () => client.getThread(account, threadId, folderId ?? ""),
|
|
8261
|
+
networkMode: "always",
|
|
8262
|
+
enabled: !!account && !!threadId && (options.enabled ?? true),
|
|
8263
|
+
retry: false
|
|
8264
|
+
});
|
|
8265
|
+
}
|
|
7940
8266
|
function useMailMessage(account, messageId, options = {}) {
|
|
7941
8267
|
const { client } = useMailClient();
|
|
7942
8268
|
return useQuery({
|
|
@@ -7947,6 +8273,18 @@ function useMailMessage(account, messageId, options = {}) {
|
|
|
7947
8273
|
retry: false
|
|
7948
8274
|
});
|
|
7949
8275
|
}
|
|
8276
|
+
function useReadMailMessage() {
|
|
8277
|
+
const { client } = useMailClient();
|
|
8278
|
+
const queryClient = useQueryClient();
|
|
8279
|
+
return useCallback(
|
|
8280
|
+
(account, messageId) => queryClient.ensureQueryData({
|
|
8281
|
+
queryKey: mailQueryKeys.message(account.id, messageId),
|
|
8282
|
+
queryFn: () => client.getMessage(account, messageId),
|
|
8283
|
+
networkMode: "always"
|
|
8284
|
+
}),
|
|
8285
|
+
[client, queryClient]
|
|
8286
|
+
);
|
|
8287
|
+
}
|
|
7950
8288
|
function decodeBase64Text(b64) {
|
|
7951
8289
|
const bytes = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
|
|
7952
8290
|
return new TextDecoder().decode(bytes);
|
|
@@ -8034,10 +8372,33 @@ function useMailCache() {
|
|
|
8034
8372
|
return {
|
|
8035
8373
|
refreshAll,
|
|
8036
8374
|
refreshFolders: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFolders() }),
|
|
8037
|
-
/**
|
|
8038
|
-
|
|
8039
|
-
|
|
8040
|
-
|
|
8375
|
+
/**
|
|
8376
|
+
* Show a flag change at once in every conversation list and thread read (the server's state
|
|
8377
|
+
* follows on the next refresh).
|
|
8378
|
+
*/
|
|
8379
|
+
showFlag: (accountId, messageIds, flagged, threadId) => {
|
|
8380
|
+
const ids2 = new Set(messageIds);
|
|
8381
|
+
const patch = (message) => ids2.has(message.id) ? { ...message, flagged } : message;
|
|
8382
|
+
queryClient.setQueriesData(
|
|
8383
|
+
{ queryKey: mailQueryKeys.allConversations() },
|
|
8384
|
+
(page) => page && {
|
|
8385
|
+
...page,
|
|
8386
|
+
conversations: page.conversations.map((c) => {
|
|
8387
|
+
const whole = threadId !== void 0 && c.thread_id === threadId;
|
|
8388
|
+
if (!whole && !c.messages.some((m) => ids2.has(m.id))) return c;
|
|
8389
|
+
const messages = c.messages.map(patch);
|
|
8390
|
+
return {
|
|
8391
|
+
...c,
|
|
8392
|
+
messages,
|
|
8393
|
+
flagged: whole ? flagged : messages.some((m) => m.flagged)
|
|
8394
|
+
};
|
|
8395
|
+
})
|
|
8396
|
+
}
|
|
8397
|
+
);
|
|
8398
|
+
queryClient.setQueriesData(
|
|
8399
|
+
{ queryKey: mailQueryKeys.accountThreads(accountId) },
|
|
8400
|
+
(thread) => thread && { ...thread, messages: thread.messages.map(patch) }
|
|
8401
|
+
);
|
|
8041
8402
|
}
|
|
8042
8403
|
};
|
|
8043
8404
|
}, [queryClient]);
|
|
@@ -9390,7 +9751,7 @@ function useDeleteDatabaseRows() {
|
|
|
9390
9751
|
const arbi = useArbi();
|
|
9391
9752
|
const invalidate = useInvalidate();
|
|
9392
9753
|
return useMutation({
|
|
9393
|
-
mutationFn: ({ databaseId, ids }) => arbi.databases.deleteRows(databaseId,
|
|
9754
|
+
mutationFn: ({ databaseId, ids: ids2 }) => arbi.databases.deleteRows(databaseId, ids2),
|
|
9394
9755
|
onSuccess: () => Promise.all([invalidate.rows(), invalidate.list()])
|
|
9395
9756
|
});
|
|
9396
9757
|
}
|
|
@@ -11167,20 +11528,20 @@ function useDebounced(value, ms) {
|
|
|
11167
11528
|
return debounced;
|
|
11168
11529
|
}
|
|
11169
11530
|
function peopleDirectory(people, meId) {
|
|
11170
|
-
const
|
|
11531
|
+
const ids2 = /* @__PURE__ */ new Map();
|
|
11171
11532
|
const emails = /* @__PURE__ */ new Map();
|
|
11172
11533
|
for (const p of people) {
|
|
11173
|
-
if (p.user && p.user.external_id !== meId && !
|
|
11174
|
-
|
|
11534
|
+
if (p.user && p.user.external_id !== meId && !ids2.has(p.user.external_id))
|
|
11535
|
+
ids2.set(p.user.external_id, p.user);
|
|
11175
11536
|
const key = p.email.toLowerCase();
|
|
11176
11537
|
if (key && !emails.has(key)) emails.set(key, p);
|
|
11177
11538
|
}
|
|
11178
|
-
const users = [...
|
|
11539
|
+
const users = [...ids2.values()].sort(
|
|
11179
11540
|
(a, b) => getUserDisplayName(a).localeCompare(getUserDisplayName(b))
|
|
11180
11541
|
);
|
|
11181
11542
|
return {
|
|
11182
11543
|
users,
|
|
11183
|
-
byId: (id) => id ?
|
|
11544
|
+
byId: (id) => id ? ids2.get(id) : void 0,
|
|
11184
11545
|
byEmail: (email) => email ? emails.get(email.toLowerCase()) : void 0
|
|
11185
11546
|
};
|
|
11186
11547
|
}
|
|
@@ -12077,6 +12438,47 @@ async function offlineDocumentAttachment(doc, maxBytes) {
|
|
|
12077
12438
|
new File([blob], doc.file_name || getDocumentTitle(doc, "document"), { type: blob.type })
|
|
12078
12439
|
);
|
|
12079
12440
|
}
|
|
12441
|
+
var BATCH = 50;
|
|
12442
|
+
var SECRET_FRESH_MS = 6e4;
|
|
12443
|
+
var tried = /* @__PURE__ */ new Set();
|
|
12444
|
+
function useNativeThreadKeys(account, messages) {
|
|
12445
|
+
const { client, enabled } = useMailClient();
|
|
12446
|
+
const isOnline = useMailOnline();
|
|
12447
|
+
const queryClient = useQueryClient();
|
|
12448
|
+
const readMessage = useReadMailMessage();
|
|
12449
|
+
useEffect(() => {
|
|
12450
|
+
if (!enabled || !isOnline || account?.provider !== "native" || !messages) return;
|
|
12451
|
+
const unkeyed = messages.filter((m) => !m.thread_id && m.id.startsWith("eml-") && !tried.has(m.id)).slice(0, BATCH);
|
|
12452
|
+
if (!unkeyed.length) return;
|
|
12453
|
+
for (const m of unkeyed) tried.add(m.id);
|
|
12454
|
+
const keyable = unkeyed.filter((m) => m.message_id);
|
|
12455
|
+
if (!keyable.length) return;
|
|
12456
|
+
void (async () => {
|
|
12457
|
+
try {
|
|
12458
|
+
const secret = await queryClient.fetchQuery({
|
|
12459
|
+
queryKey: mailQueryKeys.threadSecret(),
|
|
12460
|
+
queryFn: () => mail.getNativeThreadSecret(client.fetch),
|
|
12461
|
+
staleTime: SECRET_FRESH_MS
|
|
12462
|
+
});
|
|
12463
|
+
const keys = {};
|
|
12464
|
+
for (const listed of keyable) {
|
|
12465
|
+
const source = listed.references.length ? listed : await readMessage(account, listed.id).catch(() => void 0);
|
|
12466
|
+
const key = source && await nativeThreadKeys(secret, source);
|
|
12467
|
+
if (key) keys[listed.id] = key;
|
|
12468
|
+
}
|
|
12469
|
+
if (!Object.keys(keys).length) return;
|
|
12470
|
+
if (await mail.submitNativeThreadKeys(client.fetch, keys) > 0) {
|
|
12471
|
+
await queryClient.invalidateQueries({ queryKey: mailQueryKeys.allConversations() });
|
|
12472
|
+
await queryClient.invalidateQueries({ queryKey: mailQueryKeys.allMessages() });
|
|
12473
|
+
}
|
|
12474
|
+
} catch (error) {
|
|
12475
|
+
queryClient.removeQueries({ queryKey: mailQueryKeys.threadSecret() });
|
|
12476
|
+
for (const m of keyable) tried.delete(m.id);
|
|
12477
|
+
logger.warn("[mail] could not key older mail into conversations", error);
|
|
12478
|
+
}
|
|
12479
|
+
})();
|
|
12480
|
+
}, [account, messages, enabled, isOnline, client, queryClient, readMessage]);
|
|
12481
|
+
}
|
|
12080
12482
|
var SYNC_INTERVAL_MS = 5 * 60 * 1e3;
|
|
12081
12483
|
var NEW_MAIL_DEBOUNCE_MS = 5e3;
|
|
12082
12484
|
function useOfflineMailActive() {
|
|
@@ -14617,7 +15019,7 @@ function useDeleteNotifications() {
|
|
|
14617
15019
|
const arbi = useArbi();
|
|
14618
15020
|
const queries = useQueryClient();
|
|
14619
15021
|
return useMutation({
|
|
14620
|
-
mutationFn: (
|
|
15022
|
+
mutationFn: (ids2) => arbi.notifications.delete(ids2),
|
|
14621
15023
|
onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() })
|
|
14622
15024
|
});
|
|
14623
15025
|
}
|
|
@@ -14625,7 +15027,7 @@ function useMarkNotificationsRead() {
|
|
|
14625
15027
|
const arbi = useArbi();
|
|
14626
15028
|
const queries = useQueryClient();
|
|
14627
15029
|
return useMutation({
|
|
14628
|
-
mutationFn: (
|
|
15030
|
+
mutationFn: (ids2) => arbi.notifications.markRead(ids2),
|
|
14629
15031
|
onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() })
|
|
14630
15032
|
});
|
|
14631
15033
|
}
|
|
@@ -16189,6 +16591,6 @@ function useRateSupportTicket() {
|
|
|
16189
16591
|
});
|
|
16190
16592
|
}
|
|
16191
16593
|
|
|
16192
|
-
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, bucketOf2 as 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, hasPendingMailChange, 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, queueMailChange, 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, useOfflineMailActive, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingMailChanges, 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, withRelativePath, workflowStepOf, workspaceHouseTemplateId };
|
|
16594
|
+
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, bucketOf2 as 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, conversationsPath, createArbiQueryClient, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, defineSkillPack, 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, groupMailConversations, hasPendingFinalCommit, hasPendingMailChange, 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, mailConversationKey, mailDraftIdFromContent, mailJson, mailThreadRoot, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nativeThreadKeys, nextAliasSuggestion, notificationUserName, offlineMailReads, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, queueMailChange, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, retryOutboxItem, rollbackOptimisticDocumentEdit, safePortalUrl, saveLocalDraft, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, setWorkOfflineIn, signatureNotificationPhrase, signatureRequestMeta, skillPackPrompt, subscribeDocumentReads, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, threadPath, titleFromQuestion, toChatCitations, toMailConversation, 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, useMailConversations, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailThread, useMailUnlock, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNativeThreadKeys, useNotificationPreferences, useNotifications, useOfflineDocumentIds, useOfflineMailActive, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingMailChanges, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, usePublishCalendar, useRateSupportTicket, useReadMailMessage, 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, withRelativePath, workflowRunTitle, workflowStepOf, workspaceHouseTemplateId };
|
|
16193
16595
|
//# sourceMappingURL=index.js.map
|
|
16194
16596
|
//# sourceMappingURL=index.js.map
|