@arbidocs/react 0.5.75 → 0.5.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10,15 +10,15 @@ import { arbiMutationKeys, arbiQueryKeys, mailQueryKeys, connectorQueryKeys, cal
10
10
  export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, isUnderQueryKey, mailQueryKeys } from './chunk-AOEJ744V.js';
11
11
  import { useArbi, useArbiHost } from './chunk-2Y6LJNWA.js';
12
12
  export { useArbi, useArbiHost, useDeploymentDomain } from './chunk-2Y6LJNWA.js';
13
- import { ArbiHost, linkMentions, extractMentions, UNBOUND, bindingOfRow, readLegacyThreadDocuments, forgetLegacyThreadDocuments, toMessageMentions, takeDocumentForTurn, hasMessageBody, createSearchSession, clearSearchSession } from './chunk-LC276BI7.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-LC276BI7.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
15
  import { notify, recordChatArtifact } from './chunk-G4Z3IP4J.js';
16
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';
17
17
  export { mergeHostConfig } from './chunk-DPYBZDJB.js';
18
18
  export { cleanDraftMarkdown, cleanDraftWithReport, promoteBoldTitle, repairParsedStructure, repairParsedTitle, stripAgentPreamble, unescapeMarkdown, unwrapCitationLinks } from './chunk-NNWMHMEC.js';
19
19
  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-3NBPMR3X.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-3NBPMR3X.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-LBAGMNGG.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-LBAGMNGG.js';
22
22
  import { getUserDisplayName, isAgent } from './chunk-APZZQZ6P.js';
23
23
  export { Avatar, AvatarFallback, AvatarImage, DEFAULT_SEGMENTER_CONFIG, INITIAL_SEGMENTER_STATE, createUserAvatarIcon, flushSegmenter, getUserAvatarColor, getUserDisplayName, getUserInitials, isAgent, levelFromRms, stepSegmenter } from './chunk-APZZQZ6P.js';
24
24
  import { MarkdownRenderer } from './chunk-C44GO33B.js';
@@ -161,7 +161,7 @@ function useStartTaskQuery() {
161
161
  const arbi = useArbi();
162
162
  const queryClient = useQueryClient();
163
163
  const chatModel = useArbiSessionState((s) => s.chatModel);
164
- const post = useMutation({
164
+ const post2 = useMutation({
165
165
  mutationFn: (query) => {
166
166
  const selectedConfig = chatModel || queryClient.getQueriesData({ queryKey: arbiQueryKeys.userSettings() }).map(([, settings]) => settings?.last_config).find(Boolean);
167
167
  return arbi.assistant.submit(query.input, {
@@ -198,11 +198,11 @@ function useStartTaskQuery() {
198
198
  return { conversationId };
199
199
  };
200
200
  return {
201
- isPending: post.isPending,
201
+ isPending: post2.isPending,
202
202
  /** Look again for the thread of a run whose start threw {@link TaskThreadPendingError}. */
203
203
  findThread: (messageId) => lookUpThread(messageId, 1),
204
204
  start: async (query) => {
205
- const accepted = await post.mutateAsync(query);
205
+ const accepted = await post2.mutateAsync(query);
206
206
  const found = await lookUpThread(
207
207
  accepted.id,
208
208
  THREAD_LOOKUP_ATTEMPTS,
@@ -1346,6 +1346,9 @@ function useSetWorkspaceMemberRoles() {
1346
1346
 
1347
1347
  // src/chat/conversation-mentions.ts
1348
1348
  var ASSISTANT_MENTION_LABEL = "ARBI";
1349
+ function assistantLabels(assistantName = ASSISTANT_MENTION_LABEL) {
1350
+ return assistantName.toLowerCase() === ASSISTANT_MENTION_LABEL.toLowerCase() ? [assistantName] : [assistantName, ASSISTANT_MENTION_LABEL];
1351
+ }
1349
1352
  function useAssistantName() {
1350
1353
  return useArbiHost().assistantName?.trim() || ASSISTANT_MENTION_LABEL;
1351
1354
  }
@@ -1367,7 +1370,8 @@ function buildMentionCandidates(users, currentUserId, assistantName = ASSISTANT_
1367
1370
  }
1368
1371
  function cachedMentionCandidates(queryClient, workspaceId, currentUserId, assistantName = ASSISTANT_MENTION_LABEL) {
1369
1372
  const users = workspaceId && queryClient.getQueryData(arbiQueryKeys.workspaceUsers(workspaceId)) || [];
1370
- return buildMentionCandidates(users, currentUserId, assistantName);
1373
+ const aliases = assistantLabels(assistantName).slice(1).map((label) => ({ id: "assistant", kind: "assistant", label }));
1374
+ return [...buildMentionCandidates(users, currentUserId, assistantName), ...aliases];
1371
1375
  }
1372
1376
  function cachedAssistantMode(queryClient, conversationId, newMode) {
1373
1377
  if (!conversationId) return newMode;
@@ -4128,11 +4132,17 @@ function useRemoveDocumentsOffline() {
4128
4132
 
4129
4133
  // src/chat/sibling-tabs.ts
4130
4134
  var SIBLING_TABS_CHANNEL = "arbi:conversation-messages";
4131
- var channel;
4132
- function tabChannel() {
4133
- if (channel === void 0)
4134
- channel = typeof BroadcastChannel === "undefined" ? null : new BroadcastChannel(SIBLING_TABS_CHANNEL);
4135
- return channel;
4135
+ var channel = null;
4136
+ var listeners = 0;
4137
+ function post(message) {
4138
+ if (typeof BroadcastChannel === "undefined") return;
4139
+ if (channel) {
4140
+ channel.postMessage(message);
4141
+ return;
4142
+ }
4143
+ const once = new BroadcastChannel(SIBLING_TABS_CHANNEL);
4144
+ once.postMessage(message);
4145
+ once.close();
4136
4146
  }
4137
4147
  function announceToSiblingTabs(userId, conversationId, messageId) {
4138
4148
  if (!userId || !messageId || !conversationId || conversationId === "new") return;
@@ -4143,14 +4153,16 @@ function announceToSiblingTabs(userId, conversationId, messageId) {
4143
4153
  user_ext_id: userId
4144
4154
  };
4145
4155
  try {
4146
- tabChannel()?.postMessage(message);
4156
+ post(message);
4147
4157
  } catch {
4148
4158
  }
4149
4159
  }
4150
4160
  function listenToSiblingTabs(me, onMessage) {
4151
- const ch = tabChannel();
4152
- if (!ch) return () => {
4161
+ if (typeof BroadcastChannel === "undefined") return () => {
4153
4162
  };
4163
+ channel ??= new BroadcastChannel(SIBLING_TABS_CHANNEL);
4164
+ const ch = channel;
4165
+ listeners += 1;
4154
4166
  const listener = (event) => {
4155
4167
  const data = event.data;
4156
4168
  if (data?.type !== "conversation.message_posted" || !data.conversation_ext_id || !data.message_ext_id)
@@ -4160,12 +4172,29 @@ function listenToSiblingTabs(me, onMessage) {
4160
4172
  onMessage(data);
4161
4173
  };
4162
4174
  ch.addEventListener("message", listener);
4163
- return () => ch.removeEventListener("message", listener);
4175
+ let listening = true;
4176
+ return () => {
4177
+ if (!listening) return;
4178
+ listening = false;
4179
+ ch.removeEventListener("message", listener);
4180
+ listeners -= 1;
4181
+ if (listeners === 0 && channel === ch) {
4182
+ ch.close();
4183
+ channel = null;
4184
+ }
4185
+ };
4164
4186
  }
4165
4187
 
4166
4188
  // src/chat/stream-handlers.ts
4167
4189
  var MIN_NARRATION_DWELL_MS = 4e3;
4168
4190
  var FIRST_TOKEN_MEASURE = "arbi:send-message:first-token";
4191
+ function announceTurnEnded(userId, streamState) {
4192
+ if (streamState.endAnnounced) return;
4193
+ const messageId = streamState.assistantId ?? streamState.userMessageId;
4194
+ if (!messageId) return;
4195
+ streamState.endAnnounced = true;
4196
+ announceToSiblingTabs(userId, streamState.conversationId, messageId);
4197
+ }
4169
4198
  function createStreamHandlers(ctx, params) {
4170
4199
  const { queryClient, session, host } = ctx;
4171
4200
  const { streamState, parentMessageId, parentId } = params;
@@ -4480,6 +4509,7 @@ function createStreamHandlers(ctx, params) {
4480
4509
  if (streamState.assistantId) {
4481
4510
  markMessageAsFailed(queryClient, streamState.conversationId, streamState.assistantId);
4482
4511
  }
4512
+ announceTurnEnded(ctx.userId(), streamState);
4483
4513
  };
4484
4514
  const handleComplete = () => {
4485
4515
  console.debug("[SSE] Stream complete");
@@ -4490,7 +4520,7 @@ function createStreamHandlers(ctx, params) {
4490
4520
  });
4491
4521
  }
4492
4522
  flushStreamingTokens(queryClient);
4493
- tellOtherTabs(streamState.assistantId);
4523
+ announceTurnEnded(ctx.userId(), streamState);
4494
4524
  if (streamState.assistantId) {
4495
4525
  session.clearAgentControl(streamState.assistantId);
4496
4526
  }
@@ -4918,6 +4948,7 @@ function useConversationActions({
4918
4948
  }
4919
4949
  });
4920
4950
  flushStreamingTokens(queryClient);
4951
+ announceTurnEnded(signedInUserId(arbi) ?? "", streamState);
4921
4952
  if (queuedContinuation && !streamState.hasStreamStarted) {
4922
4953
  if (streamState.queuedFailed) failQueuedContinuation(queryClient, session, streamState);
4923
4954
  return;
@@ -4987,6 +5018,7 @@ function useConversationActions({
4987
5018
  }
4988
5019
  if (streamState.isStopped() || isAbort) {
4989
5020
  console.debug("Message sending was aborted by user");
5021
+ announceTurnEnded(signedInUserId(arbi) ?? "", streamState);
4990
5022
  clearLoadingState(queryClient, streamState.conversationId);
4991
5023
  void queryClient.invalidateQueries({
4992
5024
  queryKey: getThreadsQueryKey(streamState.conversationId)
@@ -5055,7 +5087,8 @@ function useConversationActions({
5055
5087
  const handleSendMessage = useCallback(
5056
5088
  async (options) => {
5057
5089
  const currentMessage = selectDraft(session.getState()).trim();
5058
- if (!selectedWorkspaceId || !hasMessageBody(currentMessage)) return;
5090
+ if (!selectedWorkspaceId || !hasMessageBody(currentMessage, assistantLabels(assistantName)))
5091
+ return;
5059
5092
  session.setSuggestedQuery(null);
5060
5093
  if (refuseChatWhenOffline()) return;
5061
5094
  if (isGenerating) {
@@ -6347,6 +6380,71 @@ function useAnswerAgentQuestion() {
6347
6380
  [arbi, queryClient]
6348
6381
  );
6349
6382
  }
6383
+ var TITLE_MAX = 50;
6384
+ function useConversationSettings() {
6385
+ const session = useArbiSessionStore();
6386
+ const conversationId = useArbiSessionState((s) => s.conversationId);
6387
+ const chatModel = useArbiSessionState((s) => s.chatModel);
6388
+ const parentMessageId = useArbiSessionState((s) => s.cursor);
6389
+ const currentUser = useArbiSession().user;
6390
+ const { messageHistory } = useConversationData();
6391
+ const { conversations } = useConversationItems();
6392
+ const { data: userSettings } = useUserSettings();
6393
+ const parentMessage = messageHistory?.find((m) => m.external_id === parentMessageId);
6394
+ const configToLoad = chatModel || parentMessage?.config_ext_id || userSettings?.last_config || "default";
6395
+ const { data: activeConfig } = useConfig(configToLoad);
6396
+ const { refetch: refetchSystemDefaults } = useConfig("default");
6397
+ const conversation = conversations.find((c) => c.external_id === conversationId);
6398
+ const isOwner = !!conversation && conversation.created_by_ext_id === currentUser?.external_id;
6399
+ const isShared = conversation?.is_shared ?? false;
6400
+ const [title, setTitle] = useState("");
6401
+ useEffect(() => {
6402
+ setTitle(conversation?.title || "");
6403
+ }, [conversation?.title]);
6404
+ useEffect(() => {
6405
+ if (isFullConfig(activeConfig)) session.setChatModelName(resolveConfigModel(activeConfig));
6406
+ }, [activeConfig, configToLoad]);
6407
+ const update = useUpdateConversation();
6408
+ const pending = update.isPending ? update.variables?.patch : void 0;
6409
+ const saveTitle = useCallback(() => {
6410
+ const trimmed = title.trim();
6411
+ if (!conversationId || !isOwner || !trimmed || trimmed.length > TITLE_MAX) return;
6412
+ if (trimmed === conversation?.title) return;
6413
+ update.mutate({ conversationId, patch: { title: trimmed } });
6414
+ }, [conversationId, isOwner, title, conversation?.title, update]);
6415
+ const setShared = useCallback(
6416
+ (shared) => {
6417
+ if (!conversationId || !isOwner || isShared === shared) return;
6418
+ update.mutate({ conversationId, patch: { shared } });
6419
+ },
6420
+ [conversationId, isOwner, isShared, update]
6421
+ );
6422
+ const share = useCallback(() => setShared(true), [setShared]);
6423
+ const unshare = useCallback(() => setShared(false), [setShared]);
6424
+ const resetToDefaults = useCallback(async () => {
6425
+ try {
6426
+ const { data } = await refetchSystemDefaults();
6427
+ session.setChatModel(void 0);
6428
+ if (isFullConfig(data)) session.setChatModelName(resolveConfigModel(data));
6429
+ } catch (error) {
6430
+ console.error("Failed to reset to system defaults:", error);
6431
+ }
6432
+ }, [refetchSystemDefaults, session]);
6433
+ return {
6434
+ /** No message yet: nothing to title or share. */
6435
+ isNewConversation: !parentMessageId,
6436
+ title,
6437
+ setTitle,
6438
+ isOwner,
6439
+ isShared,
6440
+ isSavingTitle: pending !== void 0 && "title" in pending,
6441
+ isSharing: pending !== void 0 && "shared" in pending,
6442
+ saveTitle,
6443
+ share,
6444
+ unshare,
6445
+ resetToDefaults
6446
+ };
6447
+ }
6350
6448
  function useAskAgain(options) {
6351
6449
  const session = useArbiSessionStore();
6352
6450
  const optionsRef = useRef(options);
@@ -6763,22 +6861,8 @@ function createMailClient(fetch2, overrides = {}) {
6763
6861
  };
6764
6862
  }
6765
6863
  function arbiMailClient(arbi) {
6766
- let unlocking = null;
6767
- const unlockNative = () => {
6768
- unlocking ??= arbi.mail.unlockNative().finally(() => {
6769
- unlocking = null;
6770
- });
6771
- return unlocking;
6772
- };
6773
- const fetch2 = async (path, init = {}) => {
6774
- if (path.startsWith("/accounts/native/") && (init.method ?? "GET") !== "POST")
6775
- await unlockNative();
6776
- return arbi.mail.fetch(path, init);
6777
- };
6778
- return createMailClient(fetch2, {
6779
- unlock: async (account) => {
6780
- if (account.provider === "native") await unlockNative();
6781
- }
6864
+ return createMailClient((path, init) => arbi.mail.fetch(path, init), {
6865
+ unlock: (account) => arbi.mail.unlockAccount(account)
6782
6866
  });
6783
6867
  }
6784
6868
  async function fileAttachment(file) {
@@ -7233,6 +7317,9 @@ function useArbiWsContext() {
7233
7317
  }
7234
7318
  return ctx;
7235
7319
  }
7320
+ function signedInId(arbi) {
7321
+ return arbi.isLoggedIn ? arbi.user.identity()?.externalId ?? null : null;
7322
+ }
7236
7323
  var EVICTED_CLOSE_CODE = 1008;
7237
7324
  function ArbiWebSocketProvider({
7238
7325
  enabled = true,
@@ -7273,7 +7360,7 @@ function ArbiWebSocketProvider({
7273
7360
  let conn = null;
7274
7361
  let cancelled = false;
7275
7362
  let evicted = false;
7276
- const me = () => arbiRef.current.isLoggedIn ? arbiRef.current.user.identity()?.externalId ?? null : null;
7363
+ const me = () => signedInId(arbiRef.current);
7277
7364
  const onMessage = (msg) => {
7278
7365
  const type = msg.type;
7279
7366
  if (type === "connection_closed") {
@@ -7384,7 +7471,7 @@ function ArbiWebSocketProvider({
7384
7471
  useEffect(() => {
7385
7472
  if (!enabled) return;
7386
7473
  return listenToSiblingTabs(
7387
- () => arbiRef.current.isLoggedIn ? arbiRef.current.user.identity()?.externalId ?? null : null,
7474
+ () => signedInId(arbiRef.current),
7388
7475
  (message) => void applyConversationEvent(queryClient, message)
7389
7476
  );
7390
7477
  }, [enabled, queryClient]);
@@ -13702,7 +13789,7 @@ function serverNotificationBellEntry(n, { open, workspaceHref, calendarTimeZone,
13702
13789
  title,
13703
13790
  variant,
13704
13791
  href: target?.kind === "workspace" ? workspaceHref?.(target.workspaceId) : void 0,
13705
- ...target && target.kind !== "workspace" && { actionLabel, onSelect: () => open(target) }
13792
+ ...target && { actionLabel: actionLabel ?? "Open", onSelect: () => open(target) }
13706
13793
  };
13707
13794
  }
13708
13795
 
@@ -14182,7 +14269,7 @@ function useChatPost() {
14182
14269
  const arbi = useArbi();
14183
14270
  const queryClient = useQueryClient();
14184
14271
  return useCallback(
14185
- async (target, post) => {
14272
+ async (target, post2) => {
14186
14273
  const me = myChatId(arbi);
14187
14274
  if (!me) throw new Error("No active session");
14188
14275
  let chat = target.chat;
@@ -14195,7 +14282,7 @@ function useChatPost() {
14195
14282
  (old) => old ?? { messages: [], hasMore: false }
14196
14283
  );
14197
14284
  }
14198
- const files = post.files ?? [];
14285
+ const files = post2.files ?? [];
14199
14286
  const optimisticId = `optimistic-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
14200
14287
  const now = (/* @__PURE__ */ new Date()).toISOString();
14201
14288
  const optimistic = {
@@ -14203,11 +14290,11 @@ function useChatPost() {
14203
14290
  chat_ext_id: chat.external_id,
14204
14291
  sender_ext_id: me,
14205
14292
  kind: "text",
14206
- content: post.text,
14293
+ content: post2.text,
14207
14294
  key_version: chat.key_version,
14208
14295
  deleted: false,
14209
- context_only: !!post.contextOnly,
14210
- workspace_ext_id: post.workspaceExtId ?? null,
14296
+ context_only: !!post2.contextOnly,
14297
+ workspace_ext_id: post2.workspaceExtId ?? null,
14211
14298
  created_at: now,
14212
14299
  updated_at: now,
14213
14300
  optimistic: true
@@ -14227,10 +14314,10 @@ function useChatPost() {
14227
14314
  )
14228
14315
  );
14229
14316
  }
14230
- const message = await arbi.chats.send(chat, post.text, {
14317
+ const message = await arbi.chats.send(chat, post2.text, {
14231
14318
  attachments,
14232
- ...post.workspaceExtId ? { workspaceExtId: post.workspaceExtId } : {},
14233
- contextOnly: !!post.contextOnly
14319
+ ...post2.workspaceExtId ? { workspaceExtId: post2.workspaceExtId } : {},
14320
+ contextOnly: !!post2.contextOnly
14234
14321
  });
14235
14322
  appendToThread(queryClient, chat.external_id, message, optimisticId);
14236
14323
  upsertChat(queryClient, {
@@ -14735,17 +14822,12 @@ function useCommandPalette() {
14735
14822
  if (!v) throw new Error("useCommandPalette must be used within a CommandPaletteProvider");
14736
14823
  return v;
14737
14824
  }
14738
- function CommandPaletteProvider({
14739
- children,
14740
- hotkey = true,
14741
- ...paletteProps
14742
- }) {
14825
+ function CommandPaletteProvider({ children, ...paletteProps }) {
14743
14826
  const [isOpen, setIsOpen] = useState(false);
14744
14827
  const open = useCallback(() => setIsOpen(true), []);
14745
14828
  const close = useCallback(() => setIsOpen(false), []);
14746
14829
  const toggle = useCallback(() => setIsOpen((o) => !o), []);
14747
14830
  useEffect(() => {
14748
- if (!hotkey) return;
14749
14831
  const onKey = (e) => {
14750
14832
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
14751
14833
  e.preventDefault();
@@ -14754,7 +14836,7 @@ function CommandPaletteProvider({
14754
14836
  };
14755
14837
  window.addEventListener("keydown", onKey);
14756
14838
  return () => window.removeEventListener("keydown", onKey);
14757
- }, [hotkey, toggle]);
14839
+ }, [toggle]);
14758
14840
  const value = useMemo(() => ({ open, close, toggle, isOpen }), [open, close, toggle, isOpen]);
14759
14841
  return /* @__PURE__ */ jsxs(CommandPaletteCtx.Provider, { value, children: [
14760
14842
  children,
@@ -14762,6 +14844,6 @@ function CommandPaletteProvider({
14762
14844
  ] });
14763
14845
  }
14764
14846
 
14765
- 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, 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, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiMailClient, archiveName, archivedWorkspaceMessage, bindThreadDocument, boundDocumentOf, bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, callNotificationMeta, captureFrameAsBlob, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, docxMentionMeta, downloadRecoveryFile, 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, isNotificationRow, isOfflineReadableArbiQuery, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isRestorableArbiQueryOnline, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nextAliasSuggestion, notificationUserName, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, rollbackOptimisticDocumentEdit, safePortalUrl, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, 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, 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, useConversationTurn, useConversationUsage, 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, useFilteredProjects, useFinaliseTranslation, useFindTime, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, 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, useOpenSelectedWorkspace, useOpenViewerDocumentId, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingContacts, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, useProjectEvents, usePublishCalendar, 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, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, 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, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeOfflineDocuments, withRelativePath, workflowStepOf, workspaceHouseTemplateId };
14847
+ 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, 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, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, announceTurnEnded, 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, callNotificationMeta, captureFrameAsBlob, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, docxMentionMeta, downloadRecoveryFile, 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, isNotificationRow, isOfflineReadableArbiQuery, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isRestorableArbiQueryOnline, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nextAliasSuggestion, notificationUserName, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, rollbackOptimisticDocumentEdit, safePortalUrl, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, 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, 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, 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, useFilteredProjects, useFinaliseTranslation, useFindTime, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, 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, useOpenSelectedWorkspace, useOpenViewerDocumentId, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingContacts, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, useProjectEvents, usePublishCalendar, 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, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, 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, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeOfflineDocuments, withRelativePath, workflowStepOf, workspaceHouseTemplateId };
14766
14848
  //# sourceMappingURL=index.js.map
14767
14849
  //# sourceMappingURL=index.js.map