@arbidocs/react 0.5.73 → 0.5.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +85 -66
  2. package/dist/artifacts/index.cjs +9 -9
  3. package/dist/artifacts/index.js +3 -3
  4. package/dist/calls/livekit/index.cjs +48 -48
  5. package/dist/calls/livekit/index.js +3 -3
  6. package/dist/{chunk-M3SB5TZB.js → chunk-2MECTZLS.js} +9 -5
  7. package/dist/chunk-2MECTZLS.js.map +1 -0
  8. package/dist/{chunk-R7YNABZY.js → chunk-2Y6LJNWA.js} +2 -2
  9. package/dist/{chunk-R7YNABZY.js.map → chunk-2Y6LJNWA.js.map} +1 -1
  10. package/dist/{chunk-QGOYIYLI.js → chunk-33PVGKXT.js} +819 -509
  11. package/dist/chunk-33PVGKXT.js.map +1 -0
  12. package/dist/{chunk-Y7S2SQH3.cjs → chunk-5YGUBXXH.cjs} +2 -2
  13. package/dist/{chunk-Y7S2SQH3.cjs.map → chunk-5YGUBXXH.cjs.map} +1 -1
  14. package/dist/{chunk-RS6UUPD2.cjs → chunk-6RSVGLQY.cjs} +853 -536
  15. package/dist/chunk-6RSVGLQY.cjs.map +1 -0
  16. package/dist/{chunk-2LV53J46.js → chunk-JHN4PKWX.js} +3 -3
  17. package/dist/{chunk-2LV53J46.js.map → chunk-JHN4PKWX.js.map} +1 -1
  18. package/dist/{chunk-ZTPJNKF2.js → chunk-LC276BI7.js} +5 -5
  19. package/dist/chunk-LC276BI7.js.map +1 -0
  20. package/dist/{chunk-GOJHU7RZ.cjs → chunk-MWW54PY6.cjs} +25 -25
  21. package/dist/{chunk-GOJHU7RZ.cjs.map → chunk-MWW54PY6.cjs.map} +1 -1
  22. package/dist/{chunk-4DTTEUVY.js → chunk-O2HDONQE.js} +4 -4
  23. package/dist/{chunk-4DTTEUVY.js.map → chunk-O2HDONQE.js.map} +1 -1
  24. package/dist/{chunk-SI7DJWBT.js → chunk-OR6B7IL2.js} +3 -3
  25. package/dist/{chunk-SI7DJWBT.js.map → chunk-OR6B7IL2.js.map} +1 -1
  26. package/dist/{chunk-LMW46NBD.cjs → chunk-OY4PYCJH.cjs} +5 -5
  27. package/dist/chunk-OY4PYCJH.cjs.map +1 -0
  28. package/dist/{chunk-HXITD6DN.cjs → chunk-PMHFLOXY.cjs} +27 -22
  29. package/dist/chunk-PMHFLOXY.cjs.map +1 -0
  30. package/dist/{chunk-TGSEQGM3.cjs → chunk-QEVM3F5X.cjs} +4 -4
  31. package/dist/{chunk-TGSEQGM3.cjs.map → chunk-QEVM3F5X.cjs.map} +1 -1
  32. package/dist/{chunk-ZNQPUPX6.cjs → chunk-RDERZWMO.cjs} +16 -16
  33. package/dist/{chunk-ZNQPUPX6.cjs.map → chunk-RDERZWMO.cjs.map} +1 -1
  34. package/dist/document-tools/core.cjs +99 -99
  35. package/dist/document-tools/core.js +3 -3
  36. package/dist/document-tools/index.cjs +101 -101
  37. package/dist/document-tools/index.js +4 -4
  38. package/dist/index.cjs +1036 -891
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +411 -240
  41. package/dist/index.d.ts +411 -240
  42. package/dist/index.js +143 -32
  43. package/dist/index.js.map +1 -1
  44. package/dist/shell/index.cjs +32 -32
  45. package/dist/shell/index.js +1 -1
  46. package/dist/viewers/index.cjs +2 -2
  47. package/dist/viewers/index.js +1 -1
  48. package/package.json +3 -3
  49. package/dist/chunk-HXITD6DN.cjs.map +0 -1
  50. package/dist/chunk-LMW46NBD.cjs.map +0 -1
  51. package/dist/chunk-M3SB5TZB.js.map +0 -1
  52. package/dist/chunk-QGOYIYLI.js.map +0 -1
  53. package/dist/chunk-RS6UUPD2.cjs.map +0 -1
  54. package/dist/chunk-ZTPJNKF2.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { b as ArbiHostConnection, H as HostConfigRecord, c as ArbiHostProps, T as ThreadBinding, e as MentionCandidate, o as SearchStatus, m as SearchSession, l as NotifyVariant, A as AppNotification } from './index.d-AT7wdTWC.js';
2
- export { C as ChatArtifact, D as DEFAULT_NOTIFY_TONE, L as LEGACY_THREAD_DOCUMENTS_KEY, M as MAX_SESSION_NOTIFICATIONS, d as MENTION_HREF_PREFIX, f as MentionKind, g as MessageMentionRef, N as NotificationBell, h as NotificationBellProps, i as NotificationBellTriggerState, j as NotifyConfig, k as NotifyOptions, O as OpenDocumentRegistration, S as SavedDocumentInput, n as SearchSessionState, p as ThreadBindingRow, q as Toaster, r as TurnDocumentInput, U as UNBOUND, W as WordDocumentKind, s as bindingOfRow, t as clearChatArtifacts, u as clearSearchSession, v as configureNotify, w as createSearchSession, x as extractMentions, y as filterMentionCandidates, z as findMentionQuery, B as forgetLegacyThreadDocuments, E as getChatArtifact, F as getChatArtifacts, G as hasMessageBody, I as insertMention, J as latestThreadOfDocument, K as linkMentions, P as mentionFromHref, Q as notify, R as openDocumentId, V as opensInWord, X as persistNotifyHistory, Y as persistSearchSession, Z as readLegacyThreadDocuments, _ as recordChatArtifact, $ as requestSearch, a0 as savedDocumentIdFor, a1 as seedNotifications, a2 as selectUnread, a3 as sharedSearchSession, a4 as takeDocumentForTurn, a5 as takePendingSearch, a6 as toMessageMentions, a7 as useChatArtifact, a8 as useConversationChatArtifact, a9 as useHostConfigRecord, aa as useMessageChatArtifact, ab as useNotify, ac as useOpenDocumentId, ad as useRegisterOpenDocument, ae as useTurnDocumentId } from './index.d-AT7wdTWC.js';
1
+ import { b as ArbiHostConnection, H as HostConfigRecord, c as ArbiHostProps, T as ThreadBinding, e as MentionCandidate, g as MessageMentionRef, o as SearchStatus, m as SearchSession, l as NotifyVariant, A as AppNotification } from './index.d-AT7wdTWC.js';
2
+ export { C as ChatArtifact, D as DEFAULT_NOTIFY_TONE, L as LEGACY_THREAD_DOCUMENTS_KEY, M as MAX_SESSION_NOTIFICATIONS, d as MENTION_HREF_PREFIX, f as MentionKind, N as NotificationBell, h as NotificationBellProps, i as NotificationBellTriggerState, j as NotifyConfig, k as NotifyOptions, O as OpenDocumentRegistration, S as SavedDocumentInput, n as SearchSessionState, p as ThreadBindingRow, q as Toaster, r as TurnDocumentInput, U as UNBOUND, W as WordDocumentKind, s as bindingOfRow, t as clearChatArtifacts, u as clearSearchSession, v as configureNotify, w as createSearchSession, x as extractMentions, y as filterMentionCandidates, z as findMentionQuery, B as forgetLegacyThreadDocuments, E as getChatArtifact, F as getChatArtifacts, G as hasMessageBody, I as insertMention, J as latestThreadOfDocument, K as linkMentions, P as mentionFromHref, Q as notify, R as openDocumentId, V as opensInWord, X as persistNotifyHistory, Y as persistSearchSession, Z as readLegacyThreadDocuments, _ as recordChatArtifact, $ as requestSearch, a0 as savedDocumentIdFor, a1 as seedNotifications, a2 as selectUnread, a3 as sharedSearchSession, a4 as takeDocumentForTurn, a5 as takePendingSearch, a6 as toMessageMentions, a7 as useChatArtifact, a8 as useConversationChatArtifact, a9 as useHostConfigRecord, aa as useMessageChatArtifact, ab as useNotify, ac as useOpenDocumentId, ad as useRegisterOpenDocument, ae as useTurnDocumentId } from './index.d-AT7wdTWC.js';
3
3
  import * as _arbidocs_sdk_browser from '@arbidocs/sdk/browser';
4
4
  import { LoginProfile, Arbi, EventCreateBody, ScopedTarget, EventPatchBody, RespondParams, ArtifactEvent, MailDraftSSEEvent, QuotaExceeded, ProbeAnswerEvent, AskRequest, AgentStepEvent, ChatMessage, OutputItemDone, UserInputRequestEvent, MessageQueuedEvent, UserMessageEvent, SSEStreamStartData, MessageMetadataPayload, DeferredInterjectionEvent, AgentControlStateEvent, TokenBudgetContext, ConversationResponse, Thread, SSEStreamResult, AskHandlers, TagListQuery, workspaces, ListFactsOptions, UpdateFactRequest, FactSearchResponse, FactSearchRequest, StepActionRequest, UpdateConversationRequest, UpdateWorkflowRequest, DatabaseRow, tags, TagResponse, TagKind, TagKindSchema, TagChange, TagFieldDefinition, ProjectEventKind, ProjectUpdateRequest, ProjectResponse, ProjectCreateOptions, ProjectAddonKind, ProjectPlanChangeRequest, ProjectCheckoutRequest, ProjectQuoteRequest, ProjectAddonSettingsRequest, ProjectNextPeriodAddonsRequest, contacts, PersonalConnectionInput, settings, account, ListEventsParams, CalendarWindow, OverlayLayerName, RoomCreateBody, CalendarEvent, FindTimeParams, RoomQuery, ShareRole, CalendarUpdate, OAuthAccountKind, CalendarAccount, CalDavConnectBody, calls, SearchChunk, chats, UploadDocumentsOptions, UploadResult } from '@arbidocs/sdk/browser';
5
5
  export { ACCOUNT_VENDOR, AccountSyncResult, ActivityKind, ActivityResponse, AgentStepEvent, Arbi, ArbiError, ArbiOptions, ArtifactEvent, AskHandlers, AskRequest, AttendeeRead, AuthMode, BookingConfirmation, BookingPage, BookingPageWriteBody, BookingRequestBody, BridgeTokensOptions, CalDavConnectBody, CalDavProfile, CalendarAccount, CalendarAccountKind, CalendarCreateBody, CalendarEvent, CalendarRead, CalendarSettings, CalendarSettingsBody, CalendarUpdate, CalendarWindow, ConnectionModel, ConnectorCatalogEntry, ConnectorFolder, ConnectorSyncProgress, ConnectorSyncStatus, ConnectorVendorKey, ConnectorVisibilitySettings, ConversationResponse, CreateFactRequest, CreateWorkRequest, CreateWorkflowRequest, DEFAULT_AI_USD_PER_GBP, DRIVE_SYNC_VENDORS, Database, DatabaseColumn, DatabaseColumnWrite, DatabaseImportResult, DatabaseRow, DatabaseRowPage, DateTimeSpec, DirectModelUsage, DriveSyncProgress, DriveSyncSummary, EditScope, EventCreateBody, EventPatchBody, FactResponse, FactSearchRequest, FactSearchResponse, FindTimeParams, FreeBusyEntry, GOOGLE_VENDORS, HolidayCountry, IMANAGE_VENDORS, ImportResult, InvitationRead, ListEventsParams, LoginProfile, MAILBOX_SYNC_VENDORS, MAX_RETRIEVE_DOC_IDS, MICROSOFT_VENDORS, MessageMetadataPayload, ModelConnection, OAuthAccountKind, OutputTokensDetails, OverlayItem, OverlayLayerName, PendingAuthResponse, PersonKey, PersonalConnectionInput, PlanWorkRequest, ProductResponse, ProjectAddonKind, ProjectCheckoutRequest, ProjectInvoicesResponse, ProjectPlanChangeRequest, ProjectQuoteRequest, ProjectResponse, ProjectUsageResponse, PublicBookingError, PublicBookingPage, RespondParams, RespondPartstat, ResponseCompletedEvent, ResponseContentPartAddedEvent, ResponseCreatedEvent, ResponseFailedEvent, ResponseOutputItemAddedEvent, ResponseOutputItemDoneEvent, ResponseOutputTextDeltaEvent, ResponseOutputTextDoneEvent, ResponseUsage, RoomCreateBody, RoomQuery, RoomRead, SHAREPOINT_VENDORS, SSEStreamCallbacks, SSEStreamResult, SSEStreamStartData, ScopedTarget, SearchChunk, ShareRead, ShareRole, SkillSummary, SlackConnectionStatus, SubscribeParams, SyncTriggerResult, TaskPlan, TaxQuoteResponse, TimeSuggestion, UpdateConversationRequest, UpdateWorkflowRequest, UserConnectorEntry, UserDailyUsageResponse, UserInputRequestEvent, UserMessageEvent, WeeklyHoursSpec, WorkStatus, WorkflowAuthMode, WorkflowResponse, WorkflowRunResponse, bookPublicSlot, cancelPublicBooking, connectErrorMessage, formatGbp, formatGbpPerMillionTokens, getPublicBookingPage, isConnectorVendorVisible, isDriveSyncVendor, isMailboxSyncVendor, isSharePointVendor, usdToGbp } from '@arbidocs/sdk/browser';
@@ -21,6 +21,7 @@ import { VerificationResult } from '@didit-protocol/sdk-web';
21
21
  import { LucideIcon } from 'lucide-react';
22
22
  import { Components } from 'react-markdown';
23
23
  export { D as DraftCleanReport, a as DraftCleanStage, c as cleanDraftMarkdown, b as cleanDraftWithReport, p as promoteBoldTitle, r as repairParsedStructure, d as repairParsedTitle, s as stripAgentPreamble, u as unescapeMarkdown, e as unwrapCitationLinks } from './stored-markdown.d-Bp18vrbr.js';
24
+ import { PersistStorage } from 'zustand/middleware';
24
25
  export { ToasterProps, toast } from 'sonner';
25
26
  import 'zustand/vanilla';
26
27
  import 'clsx';
@@ -807,6 +808,67 @@ declare function aliasTakenMessage(alias: string, suggestion: string, domain: st
807
808
  /** The draft a `mail_draft_ready` notification is about (its content is `{"mail_id": …}`). */
808
809
  declare function mailDraftIdFromContent(content: string | null | undefined): string | undefined;
809
810
 
811
+ /**
812
+ * The live state of a running turn that is not in the threads cache: follow-ups waiting in the
813
+ * agent bar's queue box, and the run-control state (pause / resume / report). Both are keyed by the
814
+ * streaming answer's id (the response id) and live in the session (`ArbiSessionState`); these are
815
+ * the pure updates every session store applies.
816
+ */
817
+
818
+ /** A follow-up the person sent while a turn ran, shown in the agent bar until it is its own turn. */
819
+ interface QueuedMessage {
820
+ /** The client's own id, unique across turns. */
821
+ clientId: string;
822
+ content: string;
823
+ /** The stored user message, once the server confirmed the follow-up. */
824
+ serverId: string | null;
825
+ acknowledged: boolean;
826
+ /** When it was queued (epoch ms): a follow-up stays readable for a moment. */
827
+ createdAt: number;
828
+ }
829
+ /** Queued follow-ups per running answer (response id). */
830
+ type QueuedMessages = Readonly<Record<string, readonly QueuedMessage[]>>;
831
+ /**
832
+ * Control state of a running agent turn:
833
+ * - `running` normal streaming.
834
+ * - `pausing` the person sent /pause; awaiting the server's confirmed halt (optimistic).
835
+ * - `paused` the server confirmed the loop halted at a boundary.
836
+ * - `resuming` the person sent /resume; awaiting the stream to flow again (optimistic).
837
+ */
838
+ type AgentRunControlState = 'running' | 'pausing' | 'paused' | 'resuming';
839
+ /** How long a confirmed follow-up stays in the queue box at least, so it can be read. */
840
+ declare const MIN_QUEUED_MESSAGE_VISIBILITY_MS = 800;
841
+ /** The queue updates. Client ids are unique, so the per-entry ones find it under any turn. */
842
+ declare const queuedMessages: {
843
+ add: (q: QueuedMessages, responseId: string, message: QueuedMessage) => QueuedMessages;
844
+ acknowledge: (q: QueuedMessages, clientId: string, serverId: string | null) => QueuedMessages;
845
+ remove: (q: QueuedMessages, clientId: string) => QueuedMessages;
846
+ removeByServerId: (q: QueuedMessages, serverId: string) => QueuedMessages;
847
+ removeByContent: (q: QueuedMessages, responseId: string, content: string) => QueuedMessages;
848
+ /** Take out the prompts a steering interjection delivered into the run. */
849
+ consume: (q: QueuedMessages, responseId: string, combinedContent: string) => QueuedMessages;
850
+ clear: (q: QueuedMessages, responseId: string) => QueuedMessages;
851
+ /** Move the entries still waiting on a finished turn to the turn that is now running. */
852
+ move: (q: QueuedMessages, fromResponseId: string, toResponseId: string) => QueuedMessages;
853
+ /** Find a queued follow-up by its client id, under whichever turn holds it. */
854
+ find: (q: QueuedMessages, clientId: string) => QueuedMessage | undefined;
855
+ };
856
+ /** The transient control state of the running turns, per response id. */
857
+ interface AgentControlMaps {
858
+ agentControlStates: Readonly<Record<string, AgentRunControlState>>;
859
+ agentProbeAnswers: Readonly<Record<string, ProbeAnswerEvent>>;
860
+ agentProbePending: Readonly<Record<string, boolean>>;
861
+ }
862
+ /** The control updates. */
863
+ declare const agentControl: {
864
+ setState: (c: AgentControlMaps, id: string, state: AgentRunControlState) => AgentControlMaps;
865
+ /** A probe answered: the latest answer, and nothing pending any more. */
866
+ setProbeAnswer: (c: AgentControlMaps, id: string, probe: ProbeAnswerEvent) => AgentControlMaps;
867
+ setProbePending: (c: AgentControlMaps, id: string, pending: boolean) => AgentControlMaps;
868
+ /** The turn is over: drop its control state. */
869
+ clear: (c: AgentControlMaps, id: string) => AgentControlMaps;
870
+ };
871
+
810
872
  /**
811
873
  * The composers' drafts kept across reloads: stored locally and encrypted, sealed to the signed-in
812
874
  * person's own key like the other data kept on the device, so nothing typed is readable at rest.
@@ -927,9 +989,10 @@ declare function createStoragePersist<T>({ storage, key, parse, migrate, delayMs
927
989
 
928
990
  /**
929
991
  * The thread tabs: the conversations open in the Threads page (`ConnectedThreadTabs` shows them),
930
- * each with the composer it was left with, so switching back finds its line, its draft, its edit,
931
- * its model and its scroll position. They are part of the layout's `tabs` and kept across reloads
932
- * (without what was typed: a host keeps drafts sealed, {@link ArbiDraftStorage}).
992
+ * each with the composer it was left with, so switching back finds its line, its edit, its model and
993
+ * its scroll position (its draft is the chat state's, kept per conversation: `ArbiChatState.drafts`).
994
+ * They are part of the layout's `tabs` and kept across reloads (without what was typed: a host keeps
995
+ * drafts sealed, `ArbiDraftStorage`).
933
996
  *
934
997
  * The changes here are pure: each takes the tabs and the composer being left, and says what the
935
998
  * composer shows next, so a session store (the in-memory one, or a host's adapter over its own
@@ -939,11 +1002,9 @@ declare function createStoragePersist<T>({ storage, key, parse, migrate, delayMs
939
1002
  interface ArbiThreadTabView {
940
1003
  /** The message the conversation continued from (its line). */
941
1004
  cursor: string | null;
942
- /** What was typed (kept in memory only; never in the saved layout). */
943
- draft: string;
944
1005
  /** The question being edited, or null. */
945
1006
  editingMessageId: string | null;
946
- /** The draft the edit put aside (in memory only, like `draft`). */
1007
+ /** The draft the edit put aside (in memory only; never in the saved layout). */
947
1008
  preEditDraft: string | null;
948
1009
  /** The line the edit put aside. */
949
1010
  preEditCursor: string | null;
@@ -1162,8 +1223,6 @@ interface ArbiThreadTabsController {
1162
1223
  /** The tab of `fromId` is now `toId`'s (a new chat got its id). */
1163
1224
  rename(fromId: string, toId: string): void;
1164
1225
  clear(): void;
1165
- /** Fill in the tabs' drafts kept elsewhere, where none is typed. */
1166
- restoreDrafts(drafts: Readonly<Record<string, string>>): void;
1167
1226
  /** The scroll position the last tab switch brought back (once; null after). */
1168
1227
  consumeScrollRestore(): number | null;
1169
1228
  }
@@ -1187,165 +1246,25 @@ interface ArbiLayoutStoreOptions {
1187
1246
  declare function createArbiLayoutStore({ persist, initial, }?: ArbiLayoutStoreOptions): ArbiLayoutStore;
1188
1247
 
1189
1248
  /**
1190
- * The session's selected workspace (`workspaceId`) and where it stands on the server session
1191
- * (`workspaceStatus`). `useSwitchWorkspace` moves both; a session store reads them from here.
1249
+ * The session's chat state: the open conversation and its composer (line, draft, edit, model), the
1250
+ * turns running in each conversation, the documents and facts in each conversation's context, and
1251
+ * the agent bar's queue and run control. One implementation for every host: the in-memory session
1252
+ * store is built on it, and so is ARBI-frontend's (which keeps it across reloads).
1192
1253
  *
1193
- * The selection is kept per tab (sessionStorage), so a reload stays in the workspace and each tab
1194
- * can be in a different one; a new sign-in starts with none ({@link ArbiWorkspaceStore.reset}).
1195
- * The status is never kept: after a reload the server session is new, and
1196
- * `useOpenSelectedWorkspace` opens the kept selection again.
1197
- */
1198
-
1199
- /** Where the selection is kept across reloads. */
1200
- interface ArbiWorkspaceStorage {
1201
- load(): string | null;
1202
- save(workspaceId: string | null): void;
1203
- }
1204
- /** The selection and its status. */
1205
- interface ArbiWorkspaceState {
1206
- workspaceId: string | null;
1207
- workspaceStatus: ArbiWorkspaceStatus;
1208
- }
1209
- interface ArbiWorkspaceStore {
1210
- getState(): ArbiWorkspaceState;
1211
- subscribe(listener: () => void): () => void;
1212
- setWorkspaceId(workspaceId: string | null): void;
1213
- setWorkspaceStatus(status: ArbiWorkspaceStatus): void;
1214
- /** No workspace, closed (a sign-in or sign-out: the next person starts on the workspace list). */
1215
- reset(): void;
1216
- }
1217
- interface ArbiWorkspaceStoreOptions {
1218
- storage?: ArbiWorkspaceStorage;
1219
- /** The selection to start with instead of the kept one. */
1220
- workspaceId?: string | null;
1221
- }
1222
- declare function createArbiWorkspaceStore({ storage, workspaceId, }?: ArbiWorkspaceStoreOptions): ArbiWorkspaceStore;
1223
- /** The sessionStorage key of the selection (per tab). */
1224
- declare const WORKSPACE_STORAGE_KEY = "arbi_workspace_id";
1225
- /** The localStorage key of when each workspace was last opened (per browser). */
1226
- declare const WORKSPACE_LAST_OPENED_KEY = "arbi_workspace_last_opened";
1227
- interface BrowserWorkspaceStorageOptions {
1228
- /** Default {@link WORKSPACE_STORAGE_KEY}. */
1229
- key?: string;
1230
- /** Default {@link WORKSPACE_LAST_OPENED_KEY}. */
1231
- lastOpenedKey?: string;
1232
- }
1233
- /**
1234
- * The browser's: the selection per tab (sessionStorage), and when each workspace was last opened
1235
- * per browser (localStorage, read with {@link readWorkspaceLastOpened}: "recently opened" is a
1236
- * history that outlives a tab, the selection deliberately does not).
1237
- */
1238
- declare function browserWorkspaceStorage({ key, lastOpenedKey, }?: BrowserWorkspaceStorageOptions): ArbiWorkspaceStorage;
1239
- /** When each workspace was last opened in this browser (`external_id` → epoch ms). */
1240
- declare function readWorkspaceLastOpened(lastOpenedKey?: string): Record<string, number>;
1241
-
1242
- /**
1243
- * The live state of a running turn that is not in the threads cache: follow-ups waiting in the
1244
- * agent bar's queue box, and the run-control state (pause / resume / report). Both are keyed by the
1245
- * streaming answer's id (the response id) and live in the session (`ArbiSessionState`); these are
1246
- * the pure updates every session store applies.
1247
- */
1248
-
1249
- /** A follow-up the person sent while a turn ran, shown in the agent bar until it is its own turn. */
1250
- interface QueuedMessage {
1251
- /** The client's own id, unique across turns. */
1252
- clientId: string;
1253
- content: string;
1254
- /** The stored user message, once the server confirmed the follow-up. */
1255
- serverId: string | null;
1256
- acknowledged: boolean;
1257
- /** When it was queued (epoch ms): a follow-up stays readable for a moment. */
1258
- createdAt: number;
1259
- }
1260
- /** Queued follow-ups per running answer (response id). */
1261
- type QueuedMessages = Readonly<Record<string, readonly QueuedMessage[]>>;
1262
- /**
1263
- * Control state of a running agent turn:
1264
- * - `running` normal streaming.
1265
- * - `pausing` the person sent /pause; awaiting the server's confirmed halt (optimistic).
1266
- * - `paused` the server confirmed the loop halted at a boundary.
1267
- * - `resuming` the person sent /resume; awaiting the stream to flow again (optimistic).
1268
- */
1269
- type AgentRunControlState = 'running' | 'pausing' | 'paused' | 'resuming';
1270
- /** How long a confirmed follow-up stays in the queue box at least, so it can be read. */
1271
- declare const MIN_QUEUED_MESSAGE_VISIBILITY_MS = 800;
1272
- /** The queue updates. Client ids are unique, so the per-entry ones find it under any turn. */
1273
- declare const queuedMessages: {
1274
- add: (q: QueuedMessages, responseId: string, message: QueuedMessage) => QueuedMessages;
1275
- acknowledge: (q: QueuedMessages, clientId: string, serverId: string | null) => QueuedMessages;
1276
- remove: (q: QueuedMessages, clientId: string) => QueuedMessages;
1277
- removeByServerId: (q: QueuedMessages, serverId: string) => QueuedMessages;
1278
- removeByContent: (q: QueuedMessages, responseId: string, content: string) => QueuedMessages;
1279
- /** Take out the prompts a steering interjection delivered into the run. */
1280
- consume: (q: QueuedMessages, responseId: string, combinedContent: string) => QueuedMessages;
1281
- clear: (q: QueuedMessages, responseId: string) => QueuedMessages;
1282
- /** Move the entries still waiting on a finished turn to the turn that is now running. */
1283
- move: (q: QueuedMessages, fromResponseId: string, toResponseId: string) => QueuedMessages;
1284
- /** Find a queued follow-up by its client id, under whichever turn holds it. */
1285
- find: (q: QueuedMessages, clientId: string) => QueuedMessage | undefined;
1286
- };
1287
- /** The transient control state of the running turns, per response id. */
1288
- interface AgentControlMaps {
1289
- agentControlStates: Readonly<Record<string, AgentRunControlState>>;
1290
- agentProbeAnswers: Readonly<Record<string, ProbeAnswerEvent>>;
1291
- agentProbePending: Readonly<Record<string, boolean>>;
1292
- }
1293
- /** The control updates. */
1294
- declare const agentControl: {
1295
- setState: (c: AgentControlMaps, id: string, state: AgentRunControlState) => AgentControlMaps;
1296
- /** A probe answered: the latest answer, and nothing pending any more. */
1297
- setProbeAnswer: (c: AgentControlMaps, id: string, probe: ProbeAnswerEvent) => AgentControlMaps;
1298
- setProbePending: (c: AgentControlMaps, id: string, pending: boolean) => AgentControlMaps;
1299
- /** The turn is over: drop its control state. */
1300
- clear: (c: AgentControlMaps, id: string) => AgentControlMaps;
1301
- };
1302
-
1303
- /**
1304
- * The session state every block reads and writes: the selected workspace, the current conversation,
1305
- * the document being viewed, the document selection, generation per conversation, Personal
1306
- * Assistant mode and the documents in each conversation.
1254
+ * The open composer and the thread tabs move together: a thread tab change (`openThreadTab` and the
1255
+ * like) is the layout's (`layout.threads`) applied here, and readers are told once, after both have
1256
+ * moved ({@link ArbiChatStore.batch}), so none sees a tab over another tab's conversation.
1307
1257
  *
1308
- * An {@link ArbiSessionStore} is the adapter a host gives as its configuration's `session`:
1309
- * a host with its own state (ARBI-frontend's zustand store) maps its fields onto
1310
- * {@link ArbiSessionState} and its actions onto the setters, so there is one source of truth.
1311
- * Other hosts use {@link createArbiSessionStore}, an in-memory store.
1258
+ * Kept across reloads (with a `persist`): the open conversation and its line, the context documents
1259
+ * and facts, each agent chat's agent and the chosen model. The drafts are kept apart, sealed to the
1260
+ * person ({@link ArbiDraftStorage}); everything else lives for the visit.
1312
1261
  */
1313
1262
 
1314
- /** The document being viewed. */
1315
- interface ArbiViewingDocument {
1316
- /** The document (`doc-…`), or a version reference (`doc-…@v2`) while an earlier version shows. */
1317
- id: string;
1318
- /** The page being read, when known. */
1319
- page: number | null;
1320
- /** The passage being read, when one is. */
1321
- passageId: string | null;
1322
- }
1323
- /** A tab of the document viewer. */
1324
- type ArbiViewerTab = 'pdf' | 'edit' | 'html' | 'docx' | 'xlsx' | 'versions' | 'preview';
1325
- /**
1326
- * The document viewer's own state, shared with whatever opens documents (a citation opens the text
1327
- * view, Compare from a documents list opens the redline): the open tab, the document compared with
1328
- * the one viewed, and a tab asked for when a document was opened (applied once it has loaded).
1329
- */
1330
- interface ArbiDocumentViewerState {
1331
- tab: ArbiViewerTab;
1332
- /** The document (or version reference) compared with the viewed one, or null. */
1333
- compareId: string | null;
1334
- /** A tab to show once `documentId` has loaded (a signature request opens on the PDF). */
1335
- tabRequest: {
1336
- documentId: string;
1337
- tab: ArbiViewerTab;
1338
- } | null;
1339
- /** The text view's size, a multiplier of the normal size: a reading preference. */
1340
- textScale: number;
1341
- /** A phone user picked the PDF by hand: documents stop opening on the text view. */
1342
- phonePdfChosen: boolean;
1343
- }
1344
1263
  /** Generation in one conversation. */
1345
1264
  interface ArbiConversationGeneration {
1346
1265
  isGenerating: boolean;
1347
1266
  error: string | null;
1348
- /** When the running turn started (epoch ms). */
1267
+ /** When the running turn started (epoch ms), once the server named its answer. */
1349
1268
  startTime: number | null;
1350
1269
  /** The answer being streamed (its response id), once the server named it. */
1351
1270
  streamingAssistantId?: string | null;
@@ -1361,22 +1280,16 @@ interface ArbiConversationDocument {
1361
1280
  docId: string;
1362
1281
  isPinned: boolean;
1363
1282
  }
1364
- /**
1365
- * Where the selected workspace stands on the server session: `opening` while a switch waits for
1366
- * `/open` (the host may cover the page), `open` once workspace-scoped requests may run.
1367
- */
1368
- type ArbiWorkspaceStatus = 'closed' | 'opening' | 'open';
1369
- interface ArbiSessionState extends AgentControlMaps, ArbiLayoutState {
1370
- /** The selected workspace (`wrk-…`). */
1371
- workspaceId: string | null;
1372
- /** Whether it is open on the server session (`useSwitchWorkspace` moves it). */
1373
- workspaceStatus: ArbiWorkspaceStatus;
1283
+ /** An answer's timer: when its run started (epoch ms) and how long it took (seconds). */
1284
+ interface ArbiMessageTimer {
1285
+ startTime: number;
1286
+ elapsedTime: number;
1287
+ }
1288
+ /** A send's structured tools (`MessageInput.tools`). */
1289
+ type TurnTools = components['schemas']['MessageInput']['tools'];
1290
+ interface ArbiChatState extends AgentControlMaps {
1374
1291
  /** The open conversation, or null for a new one / none. */
1375
1292
  conversationId: string | null;
1376
- viewingDocument: ArbiViewingDocument | null;
1377
- documentViewer: ArbiDocumentViewerState;
1378
- /** The documents selected in document lists. */
1379
- selectedDocumentIds: readonly string[];
1380
1293
  /** Generation state per conversation id. */
1381
1294
  generating: Readonly<Record<string, ArbiConversationGeneration>>;
1382
1295
  /** Personal Assistant mode for new conversations. */
@@ -1385,14 +1298,12 @@ interface ArbiSessionState extends AgentControlMaps, ArbiLayoutState {
1385
1298
  conversationDocuments: Readonly<Record<string, readonly ArbiConversationDocument[]>>;
1386
1299
  /**
1387
1300
  * Per conversation id: true while an empty chat follows the workspace's documents (set by
1388
- * {@link useDocumentAutoAdd}); any other change of its documents is a choice and turns it off.
1301
+ * `useDocumentAutoAdd`); any other change of its documents is a choice and turns it off.
1389
1302
  * Missing for a selection made before this was recorded.
1390
1303
  */
1391
1304
  conversationDocumentAutoAdd: Readonly<Record<string, boolean>>;
1392
1305
  /** The facts in each conversation's context, per conversation id (`new` for a new chat). */
1393
1306
  conversationFacts: Readonly<Record<string, readonly string[]>>;
1394
- /** The document read in full with each turn (one at a time). */
1395
- pinnedDocumentId: string | null;
1396
1307
  /** The message the open conversation continues from: the leaf of the line being viewed. */
1397
1308
  cursor: string | null;
1398
1309
  /** A follow-up the backend suggested for a conversation, offered in its composer. */
@@ -1403,9 +1314,9 @@ interface ArbiSessionState extends AgentControlMaps, ArbiLayoutState {
1403
1314
  /** Follow-ups waiting in a running turn's agent bar, per response id. */
1404
1315
  queuedMessages: QueuedMessages;
1405
1316
  /**
1406
- * What is typed in each conversation's composer, per conversation id (`new` for a new chat).
1407
- * The open conversation's is {@link selectDraft}. A host may keep them across reloads, stored
1408
- * locally and encrypted ({@link ArbiDraftStorage}).
1317
+ * What is typed in each composer, per conversation id (`new` for a new chat): the open one's
1318
+ * (`selectDraft`) and each open thread tab's. A host may keep them across reloads, stored locally
1319
+ * and encrypted ({@link ArbiDraftStorage}).
1409
1320
  */
1410
1321
  drafts: Readonly<Record<string, string>>;
1411
1322
  /** The question being edited in the open conversation (sent as a new branch), or null. */
@@ -1444,62 +1355,26 @@ interface ArbiSessionState extends AgentControlMaps, ArbiLayoutState {
1444
1355
  /** Each answer's timer, saved when it stops showing (`<conversation id>:<message id>`). */
1445
1356
  messageTimers: Readonly<Record<string, ArbiMessageTimer>>;
1446
1357
  }
1447
- /** An answer's timer: when its run started (epoch ms) and how long it took (seconds). */
1448
- interface ArbiMessageTimer {
1449
- startTime: number;
1450
- elapsedTime: number;
1451
- }
1452
- /** A send's structured tools (`MessageInput.tools`). */
1453
- type TurnTools = components['schemas']['MessageInput']['tools'];
1454
- /** What to view: page and passage are left unchanged when omitted. */
1455
- interface ArbiViewingDocumentInput {
1456
- id: string;
1457
- page?: number | null;
1458
- passageId?: string | null;
1459
- }
1460
- interface ArbiSessionStore extends ArbiLayoutActions {
1461
- /** The current state. The same object until something in it changes. */
1462
- getState(): ArbiSessionState;
1463
- /** Resolves once the saved layout has been read (at once when none is kept). */
1464
- layoutHydrated(): Promise<void>;
1465
- /** Whether the saved layout has been read. */
1466
- isLayoutHydrated(): boolean;
1467
- /** Be told when the state may have changed. Returns the unsubscribe. */
1468
- subscribe(listener: () => void): () => void;
1469
- setWorkspaceId(id: string | null): void;
1470
- setWorkspaceStatus(status: ArbiWorkspaceStatus): void;
1471
- /**
1472
- * Drop everything scoped to the workspace being left (the open conversation and its generation,
1473
- * the viewed document, the selection, the context documents and facts), before a switch. A host
1474
- * with workspace-scoped state of its own clears that too.
1475
- */
1476
- leaveWorkspace(): void;
1358
+ /** The chat's changes: every session store has them (`ArbiSessionStore`). */
1359
+ interface ArbiChatActions {
1360
+ /** Open a conversation in its thread tab (null: a new chat), as `openThreadTab`. */
1477
1361
  setConversationId(id: string | null): void;
1478
- /**
1479
- * View a document, or none. Viewing another document resets the page; `page` and `passageId`
1480
- * set them when given.
1481
- */
1482
- setViewingDocument(document: ArbiViewingDocumentInput | null): void;
1483
- /** Change the document viewer's state; fields not given stay. */
1484
- setDocumentViewer(change: Partial<ArbiDocumentViewerState>): void;
1485
- setSelectedDocumentIds(ids: string[]): void;
1486
1362
  /** Start or end a conversation's turn; `abortController` is its local stream, which Stop aborts. */
1487
1363
  setConversationGenerating(conversationId: string, isGenerating: boolean, abortController?: AbortController | null): void;
1488
1364
  setPaMode(enabled: boolean): void;
1489
1365
  /** Set a conversation's documents; `autoAdd` marks an automatic pick (default: the user's). */
1490
1366
  setConversationDocuments(conversationId: string, documents: ArbiConversationDocument[], autoAdd?: boolean): void;
1491
1367
  setConversationFacts(conversationId: string, factIds: string[]): void;
1492
- setPinnedDocumentId(id: string | null): void;
1493
1368
  /** The answer a conversation is streaming; `startTime` defaults to now (a re-attach passes the run's). */
1494
1369
  setStreamingAssistantId(conversationId: string, assistantId: string, startTime?: number): void;
1495
1370
  setBackendElapsed(conversationId: string, seconds: number): void;
1496
1371
  /**
1497
- * A new chat got its server id: its generation, documents and facts move from `fromId` (`new`) to
1498
- * `toId`, and it stays the open conversation.
1372
+ * A new chat got its server id: its generation, documents, facts, draft and tab move from
1373
+ * `fromId` (`new`) to `toId`, and it stays the open conversation.
1499
1374
  */
1500
1375
  moveConversation(fromId: string, toId: string): void;
1501
1376
  setCursor(messageId: string | null): void;
1502
- setSuggestedQuery(suggestion: ArbiSessionState['suggestedQuery']): void;
1377
+ setSuggestedQuery(suggestion: ArbiChatState['suggestedQuery']): void;
1503
1378
  addQueuedMessage(responseId: string, message: QueuedMessage): void;
1504
1379
  acknowledgeQueuedMessage(clientId: string, serverId: string | null): void;
1505
1380
  removeQueuedMessage(clientId: string): void;
@@ -1518,7 +1393,7 @@ interface ArbiSessionStore extends ArbiLayoutActions {
1518
1393
  setChatModelName(model: string | undefined): void;
1519
1394
  /**
1520
1395
  * Show a conversation in its thread tab (null: a new chat) at its latest message, opening the tab
1521
- * when it is not open (`tabs.threads`). Returns the tab's id.
1396
+ * when it is not open (`tabs.threads`); it is also the Threads page's tab. Returns the tab's id.
1522
1397
  */
1523
1398
  openThreadTab(conversationId: string | null): string;
1524
1399
  /** Close a thread tab; closing the one on screen shows the one beside it, else the thread list. */
@@ -1555,21 +1430,272 @@ interface ArbiSessionStore extends ArbiLayoutActions {
1555
1430
  clearConversationError(conversationId: string): void;
1556
1431
  /** Stop the conversation's local stream and end its turn. */
1557
1432
  abortConversationGeneration(conversationId: string): void;
1558
- /** Leave the open conversation for a new one (its conversation was deleted). */
1433
+ /**
1434
+ * Leave the open conversation for a new one (its conversation was deleted): no line, edit, model
1435
+ * or document binding, Personal Assistant mode off.
1436
+ */
1559
1437
  startNewConversation(): void;
1560
1438
  }
1439
+ interface ArbiChatStore extends ArbiChatActions {
1440
+ /** The current state. The same object until something in it changes. */
1441
+ getState(): ArbiChatState;
1442
+ /** Be told after each change (once per batch). Returns the unsubscribe. */
1443
+ subscribe(listener: () => void): () => void;
1444
+ /**
1445
+ * `listener`, told after the batch running when it is called (at once outside one): a session
1446
+ * store subscribes its readers to the layout and the rest through this, so a thread tab change
1447
+ * reaches them once.
1448
+ */
1449
+ settled(listener: () => void): () => void;
1450
+ /** Drop a reader's notification still waiting for a batch to end (it unsubscribed). */
1451
+ forget(listener: () => void): void;
1452
+ /** Run `change`, telling readers once when it is done. */
1453
+ batch<T>(change: () => T): T;
1454
+ /** Resolves once the saved chat state has been read (at once without a `persist`). */
1455
+ hydrated(): Promise<void>;
1456
+ isHydrated(): boolean;
1457
+ /**
1458
+ * Bring back the saved drafts once they can be opened (the person's key is there once signed in
1459
+ * and a workspace is open); a draft typed meanwhile wins over its saved copy. Safe to call often.
1460
+ */
1461
+ restoreDrafts(): void;
1462
+ /**
1463
+ * The workspace is being left: its turns stop (the server finishes them), and its conversation,
1464
+ * composers, thread tabs, facts, timers and the new chat's documents are dropped. Saved
1465
+ * conversations keep their documents.
1466
+ */
1467
+ leave(): void;
1468
+ /**
1469
+ * Start over (sign-in, sign-out): everything is dropped and every running turn stopped, except
1470
+ * the agent chats' agents, which another person's sign-in drops.
1471
+ */
1472
+ reset(): void;
1473
+ }
1474
+ /** What is kept across reloads. */
1475
+ interface ArbiSavedChat {
1476
+ version: 1;
1477
+ /** The pieces an earlier build's own saved state was brought in for (the host's migration). */
1478
+ migrated: string[];
1479
+ conversationId: string | null;
1480
+ cursor: string | null;
1481
+ conversationDocuments: Record<string, ArbiConversationDocument[]>;
1482
+ conversationDocumentAutoAdd: Record<string, boolean>;
1483
+ conversationFacts: Record<string, string[]>;
1484
+ agentChatOwners: Record<string, string>;
1485
+ /** Who the agent chats belong to (null: not known, as in an earlier build's save). */
1486
+ agentChatOwnersUser: string | null;
1487
+ chatModel: string | null;
1488
+ }
1489
+ declare const EMPTY_CHAT_STATE: ArbiChatState;
1490
+ /**
1491
+ * A saved chat state as this build reads it: whatever an earlier or a broken save left is dropped
1492
+ * rather than read. Never throws; null when there is nothing usable.
1493
+ */
1494
+ declare function parseSavedChat(saved: unknown): ArbiSavedChat | null;
1495
+ /** What of a chat state is saved. */
1496
+ declare function savedChatOf(state: ArbiChatState, migrated: string[], agentChatOwnersUser?: string | null): ArbiSavedChat;
1497
+ interface ArbiChatStoreOptions {
1498
+ /** The layout whose thread tabs the composer moves with. */
1499
+ layout: ArbiLayoutStore;
1500
+ /** Keep the open conversation, the context and the model across reloads. */
1501
+ persist?: ArbiSessionPersist<ArbiSavedChat>;
1502
+ /** Keep the composers' drafts across reloads (see `createSealedDraftStorage`). */
1503
+ draftStorage?: ArbiDraftStorage;
1504
+ /** Where the open conversation is scrolled to, saved with its tab when another one shows. */
1505
+ scrollTop?: () => number | null;
1506
+ /**
1507
+ * The signed-in user (default: the draft storage's owner). The agent chats' agents are kept over a
1508
+ * sign-in of the same person and dropped when another person signs in.
1509
+ */
1510
+ user?: () => string | null;
1511
+ /** The state to start from (unit tests, a host's initial state); a saved one fills it in. */
1512
+ initial?: Partial<ArbiChatState>;
1513
+ }
1514
+ declare function createArbiChatStore({ layout, persist, draftStorage, scrollTop, user, initial, }: ArbiChatStoreOptions): ArbiChatStore;
1515
+
1516
+ /**
1517
+ * The session's selected workspace (`workspaceId`) and where it stands on the server session
1518
+ * (`workspaceStatus`). `useSwitchWorkspace` moves both; a session store reads them from here.
1519
+ *
1520
+ * The selection is kept per tab (sessionStorage), so a reload stays in the workspace and each tab
1521
+ * can be in a different one; a new sign-in starts with none ({@link ArbiWorkspaceStore.reset}).
1522
+ * The status is never kept: after a reload the server session is new, and
1523
+ * `useOpenSelectedWorkspace` opens the kept selection again.
1524
+ */
1525
+
1526
+ /** Where the selection is kept across reloads. */
1527
+ interface ArbiWorkspaceStorage {
1528
+ load(): string | null;
1529
+ save(workspaceId: string | null): void;
1530
+ }
1531
+ /** The selection and its status. */
1532
+ interface ArbiWorkspaceState {
1533
+ workspaceId: string | null;
1534
+ workspaceStatus: ArbiWorkspaceStatus;
1535
+ }
1536
+ interface ArbiWorkspaceStore {
1537
+ getState(): ArbiWorkspaceState;
1538
+ subscribe(listener: () => void): () => void;
1539
+ setWorkspaceId(workspaceId: string | null): void;
1540
+ setWorkspaceStatus(status: ArbiWorkspaceStatus): void;
1541
+ /** No workspace, closed (a sign-in or sign-out: the next person starts on the workspace list). */
1542
+ reset(): void;
1543
+ }
1544
+ interface ArbiWorkspaceStoreOptions {
1545
+ storage?: ArbiWorkspaceStorage;
1546
+ /** The selection to start with instead of the kept one. */
1547
+ workspaceId?: string | null;
1548
+ }
1549
+ declare function createArbiWorkspaceStore({ storage, workspaceId, }?: ArbiWorkspaceStoreOptions): ArbiWorkspaceStore;
1550
+ /** The sessionStorage key of the selection (per tab). */
1551
+ declare const WORKSPACE_STORAGE_KEY = "arbi_workspace_id";
1552
+ /** The localStorage key of when each workspace was last opened (per browser). */
1553
+ declare const WORKSPACE_LAST_OPENED_KEY = "arbi_workspace_last_opened";
1554
+ interface BrowserWorkspaceStorageOptions {
1555
+ /** Default {@link WORKSPACE_STORAGE_KEY}. */
1556
+ key?: string;
1557
+ /** Default {@link WORKSPACE_LAST_OPENED_KEY}. */
1558
+ lastOpenedKey?: string;
1559
+ }
1560
+ /**
1561
+ * The browser's: the selection per tab (sessionStorage), and when each workspace was last opened
1562
+ * per browser (localStorage, read with {@link readWorkspaceLastOpened}: "recently opened" is a
1563
+ * history that outlives a tab, the selection deliberately does not).
1564
+ */
1565
+ declare function browserWorkspaceStorage({ key, lastOpenedKey, }?: BrowserWorkspaceStorageOptions): ArbiWorkspaceStorage;
1566
+ /** When each workspace was last opened in this browser (`external_id` → epoch ms). */
1567
+ declare function readWorkspaceLastOpened(lastOpenedKey?: string): Record<string, number>;
1568
+
1569
+ /**
1570
+ * The session state every block reads and writes: the selected workspace, the layout, the chat (the
1571
+ * open conversation and its composer, generation per conversation, the context documents and facts)
1572
+ * and the documents being viewed and selected.
1573
+ *
1574
+ * An {@link ArbiSessionStore} is the adapter a host gives as its configuration's `session`. It is
1575
+ * made of parts ({@link composeArbiSessionStore}): the layout (`createArbiLayoutStore`), the
1576
+ * workspace (`createArbiWorkspaceStore`), the chat (`createArbiChatStore`) and the documents
1577
+ * ({@link createArbiDocumentSessionStore}, or a host's own over its state). Hosts without state of
1578
+ * their own use {@link createArbiSessionStore}, every part in memory.
1579
+ */
1580
+
1581
+ /** The document being viewed. */
1582
+ interface ArbiViewingDocument {
1583
+ /** The document (`doc-…`), or a version reference (`doc-…@v2`) while an earlier version shows. */
1584
+ id: string;
1585
+ /** The page being read, when known. */
1586
+ page: number | null;
1587
+ /** The passage being read, when one is. */
1588
+ passageId: string | null;
1589
+ }
1590
+ /** A tab of the document viewer. */
1591
+ type ArbiViewerTab = 'pdf' | 'edit' | 'html' | 'docx' | 'xlsx' | 'versions' | 'preview';
1592
+ /**
1593
+ * The document viewer's own state, shared with whatever opens documents (a citation opens the text
1594
+ * view, Compare from a documents list opens the redline): the open tab, the document compared with
1595
+ * the one viewed, and a tab asked for when a document was opened (applied once it has loaded).
1596
+ */
1597
+ interface ArbiDocumentViewerState {
1598
+ tab: ArbiViewerTab;
1599
+ /** The document (or version reference) compared with the viewed one, or null. */
1600
+ compareId: string | null;
1601
+ /** A tab to show once `documentId` has loaded (a signature request opens on the PDF). */
1602
+ tabRequest: {
1603
+ documentId: string;
1604
+ tab: ArbiViewerTab;
1605
+ } | null;
1606
+ /** The text view's size, a multiplier of the normal size: a reading preference. */
1607
+ textScale: number;
1608
+ /** A phone user picked the PDF by hand: documents stop opening on the text view. */
1609
+ phonePdfChosen: boolean;
1610
+ }
1611
+ /**
1612
+ * Where the selected workspace stands on the server session: `opening` while a switch waits for
1613
+ * `/open` (the host may cover the page), `open` once workspace-scoped requests may run.
1614
+ */
1615
+ type ArbiWorkspaceStatus = 'closed' | 'opening' | 'open';
1616
+ /** The documents being viewed and selected. */
1617
+ interface ArbiDocumentSessionState {
1618
+ viewingDocument: ArbiViewingDocument | null;
1619
+ documentViewer: ArbiDocumentViewerState;
1620
+ /** The documents selected in document lists. */
1621
+ selectedDocumentIds: readonly string[];
1622
+ /** The document read in full with each turn (one at a time). */
1623
+ pinnedDocumentId: string | null;
1624
+ }
1625
+ interface ArbiSessionState extends ArbiChatState, ArbiDocumentSessionState, ArbiLayoutState, ArbiWorkspaceState {
1626
+ }
1627
+ /** What to view: page and passage are left unchanged when omitted. */
1628
+ interface ArbiViewingDocumentInput {
1629
+ id: string;
1630
+ page?: number | null;
1631
+ passageId?: string | null;
1632
+ }
1633
+ /** The documents' changes. */
1634
+ interface ArbiDocumentSessionActions {
1635
+ /**
1636
+ * View a document, or none. Viewing another document resets the page; `page` and `passageId`
1637
+ * set them when given.
1638
+ */
1639
+ setViewingDocument(document: ArbiViewingDocumentInput | null): void;
1640
+ /** Change the document viewer's state; fields not given stay. */
1641
+ setDocumentViewer(change: Partial<ArbiDocumentViewerState>): void;
1642
+ setSelectedDocumentIds(ids: string[]): void;
1643
+ setPinnedDocumentId(id: string | null): void;
1644
+ }
1645
+ /** The documents part of a session store. */
1646
+ interface ArbiDocumentSessionStore extends ArbiDocumentSessionActions {
1647
+ /** The current state. The same object until something in it changes. */
1648
+ getState(): ArbiDocumentSessionState;
1649
+ subscribe(listener: () => void): () => void;
1650
+ /** The workspace is being left: nothing is viewed, selected or pinned. */
1651
+ leave(): void;
1652
+ }
1653
+ interface ArbiSessionStore extends ArbiLayoutActions, ArbiChatActions, ArbiDocumentSessionActions {
1654
+ /** The current state. The same object until something in it changes. */
1655
+ getState(): ArbiSessionState;
1656
+ /** Resolves once the saved layout has been read (at once when none is kept). */
1657
+ layoutHydrated(): Promise<void>;
1658
+ /** Whether the saved layout has been read. */
1659
+ isLayoutHydrated(): boolean;
1660
+ /** Be told when the state may have changed. Returns the unsubscribe. */
1661
+ subscribe(listener: () => void): () => void;
1662
+ setWorkspaceId(id: string | null): void;
1663
+ setWorkspaceStatus(status: ArbiWorkspaceStatus): void;
1664
+ /**
1665
+ * Drop everything scoped to the workspace being left (the open conversation and its generation,
1666
+ * the thread tabs, the viewed document, the selection, the context documents and facts), before a
1667
+ * switch. A host with workspace-scoped state of its own clears that too.
1668
+ */
1669
+ leaveWorkspace(): void;
1670
+ }
1561
1671
  declare const DEFAULT_DOCUMENT_VIEWER_STATE: ArbiDocumentViewerState;
1562
1672
  declare const EMPTY_SESSION_STATE: ArbiSessionState;
1563
1673
  /** The viewed document itself (`doc-…`), also while one of its earlier versions is on screen. */
1564
1674
  declare const selectViewingDocumentId: (state: ArbiSessionState) => string | null;
1565
1675
  /** The conversation key drafts and context are kept under: its id, or `new` for a new chat. */
1566
- declare const conversationKey: (state: ArbiSessionState) => string;
1676
+ declare const conversationKey: (state: Pick<ArbiChatState, "conversationId">) => string;
1567
1677
  /** What is typed in the open conversation's composer. */
1568
- declare const selectDraft: (state: ArbiSessionState) => string;
1678
+ declare const selectDraft: (state: Pick<ArbiChatState, "conversationId" | "drafts">) => string;
1569
1679
  /** Whether `conversationId` is generating. */
1570
- declare const selectIsGenerating: (conversationId: string | null | undefined) => (state: ArbiSessionState) => boolean;
1680
+ declare const selectIsGenerating: (conversationId: string | null | undefined) => (state: Pick<ArbiChatState, "generating">) => boolean;
1571
1681
  /** The next viewing document, given the current one (shared by every store implementation). */
1572
1682
  declare function nextViewingDocument(current: ArbiViewingDocument | null, input: ArbiViewingDocumentInput | null): ArbiViewingDocument | null;
1683
+ /** The documents part in memory. */
1684
+ declare function createArbiDocumentSessionStore(initial?: Partial<ArbiDocumentSessionState>): ArbiDocumentSessionStore;
1685
+ /** The layout actions of a session store, on its layout store. */
1686
+ declare function layoutActionsOf(layout: ArbiLayoutStore): ArbiLayoutActions;
1687
+ /** The parts a session store is made of. */
1688
+ interface ArbiSessionParts {
1689
+ layout: ArbiLayoutStore;
1690
+ workspace: ArbiWorkspaceStore;
1691
+ chat: ArbiChatStore;
1692
+ documents: ArbiDocumentSessionStore;
1693
+ }
1694
+ /**
1695
+ * A session store made of its parts: its state is theirs, and readers are told once per change (a
1696
+ * thread tab change moves the layout and the chat: once, after both).
1697
+ */
1698
+ declare function composeArbiSessionStore({ layout, workspace, chat, documents, }: ArbiSessionParts): ArbiSessionStore;
1573
1699
  /** Options of {@link createArbiSessionStore}. */
1574
1700
  interface ArbiSessionStoreOptions {
1575
1701
  /** Keep the composers' drafts across reloads (see {@link createSealedDraftStorage}). */
@@ -1583,8 +1709,7 @@ interface ArbiSessionStoreOptions {
1583
1709
  */
1584
1710
  workspace?: ArbiWorkspaceStore;
1585
1711
  }
1586
- /** The layout actions of a session store, on its layout store. */
1587
- declare function layoutActionsOf(layout: ArbiLayoutStore): ArbiLayoutActions;
1712
+ /** An in-memory session store: the default for hosts without state of their own. */
1588
1713
  declare function createArbiSessionStore(initial?: Partial<ArbiSessionState>, { draftStorage, persist, workspace, }?: ArbiSessionStoreOptions): ArbiSessionStore;
1589
1714
 
1590
1715
  /** A PATCH of the user settings: only the fields given change (lists are sent whole). */
@@ -2142,6 +2267,12 @@ interface ArbiHostConfig {
2142
2267
  * `getEntityLabel`. Absent: the registry's ("Project", "Workspace", "Thread", …).
2143
2268
  */
2144
2269
  vocabulary?: EntityVocabulary;
2270
+ /**
2271
+ * What the site calls its assistant where people address it: the `@<name>` offered in a chat's
2272
+ * mention menu, the draft a shared thread starts with, and the name a message is routed to the
2273
+ * assistant on. Absent: "ARBI".
2274
+ */
2275
+ assistantName?: string;
2145
2276
  /**
2146
2277
  * Charts and dashboards: more data sources (an external feed, a source relabelled in the site's
2147
2278
  * words) and where saved dashboards are kept. Absent: the built-in sources, saved in a database.
@@ -2774,16 +2905,26 @@ declare function useThreadDocument(): {
2774
2905
  type WorkspaceUser = components['schemas']['WorkspaceUserResponse'];
2775
2906
  /** When the assistant answers in a conversation: every message, or only when @mentioned. */
2776
2907
  type AssistantMode = components['schemas']['AssistantMode'];
2777
- /** What the assistant is called in the composer. Matches the server's stored mention label. */
2908
+ /**
2909
+ * What the assistant is called in the composer when the host names it nothing else
2910
+ * (`ArbiHostConfig.assistantName`). The server stores this label with every assistant mention.
2911
+ */
2778
2912
  declare const ASSISTANT_MENTION_LABEL = "ARBI";
2913
+ /** The host's name for its assistant, as people @mention it (`ArbiHostConfig.assistantName`). */
2914
+ declare function useAssistantName(): string;
2915
+ /**
2916
+ * `linkMentions` on this site: a mention of the assistant typed with the host's name for it is a
2917
+ * chip as well as one under the server's stored label (earlier `@ARBI` mentions).
2918
+ */
2919
+ declare function useLinkMentions(): (content: string, mentions: ReadonlyArray<MessageMentionRef> | null | undefined) => string;
2779
2920
  /**
2780
- * The mention candidates for a workspace: the assistant first, then every human member except
2781
- * the current user (agents are not mentionable). Labels use the server's display-name rule so the
2782
- * inserted `@<label>` matches what the server stores.
2921
+ * The mention candidates for a workspace: the assistant first (as `assistantName`), then every
2922
+ * human member except the current user (agents are not mentionable). People's labels use the
2923
+ * server's display-name rule so the inserted `@<label>` matches what the server stores.
2783
2924
  */
2784
- declare function buildMentionCandidates(users: ReadonlyArray<WorkspaceUser>, currentUserId: string | null | undefined): MentionCandidate[];
2925
+ declare function buildMentionCandidates(users: ReadonlyArray<WorkspaceUser>, currentUserId: string | null | undefined, assistantName?: string): MentionCandidate[];
2785
2926
  /** A workspace's mention candidates, from the cached member list. */
2786
- declare function cachedMentionCandidates(queryClient: QueryClient, workspaceId: string | null | undefined, currentUserId: string | null | undefined): MentionCandidate[];
2927
+ declare function cachedMentionCandidates(queryClient: QueryClient, workspaceId: string | null | undefined, currentUserId: string | null | undefined, assistantName?: string): MentionCandidate[];
2787
2928
  /**
2788
2929
  * The assistant mode of a conversation from whatever is cached: its threads response (always
2789
2930
  * present once it is open, even when it is not in the cached list, e.g. a thread someone just
@@ -5613,6 +5754,30 @@ declare function useArbiSession(): ArbiSignedInSession;
5613
5754
  /** The same for a session the caller holds (the host building its `Arbi` on it). */
5614
5755
  declare function useSignedInSession(session: SessionManager | null): ArbiSignedInSession;
5615
5756
 
5757
+ /**
5758
+ * Storage for the saved UI state: synchronous reads, debounced writes, never throws.
5759
+ *
5760
+ * Reads are synchronous (localStorage) so the store is fully restored inside `create()`, before
5761
+ * React renders anything. There is no "still restoring" phase for the app to wait on, so boot
5762
+ * cannot stall on storage and nothing has to time out.
5763
+ *
5764
+ * Writes are coalesced: zustand calls setItem on every state change, so the value is held and
5765
+ * serialised once, `debounceMs` after the last change (and immediately when the page is hidden,
5766
+ * so a reload or tab close keeps the last change). Every storage failure (quota, disabled
5767
+ * storage, unreadable JSON) is logged and absorbed; the app keeps working from memory.
5768
+ */
5769
+
5770
+ interface UiStateStorage<S> extends PersistStorage<S> {
5771
+ /** Write every pending value now (page hide, logout). */
5772
+ flush: () => void;
5773
+ }
5774
+ declare function createUiStateStorage<S>(options?: {
5775
+ debounceMs?: number;
5776
+ maxWaitMs?: number;
5777
+ /** The backing store; resolved lazily so environments without localStorage just get none. */
5778
+ backing?: () => Storage | undefined;
5779
+ }): UiStateStorage<S>;
5780
+
5616
5781
  /**
5617
5782
  * The workspace the app is in: the session's selection, as the workspace list has it, and the
5618
5783
  * signed-in person's membership in it.
@@ -8743,15 +8908,16 @@ declare function registerArbiMutationDefaults(queryClient: QueryClient, client:
8743
8908
  * Whether a package query is worth persisting for an offline start (a host's
8744
8909
  * `shouldDehydrateQuery`): the documents lists, documents, their versions and near-duplicate
8745
8910
  * pairs (metadata, never a document's content), the workspace list (its keys stay wrapped), the
8746
- * user settings and the projects.
8911
+ * user settings, the projects and the entitlements.
8747
8912
  */
8748
8913
  declare function isOfflineReadableArbiQuery(queryKey: QueryKey): boolean;
8749
8914
  /**
8750
8915
  * Whether a persisted package query may be restored when the app starts online. Not a documents
8751
8916
  * list (it is never re-read on its own, so a stale copy would be trusted all session: it loads
8752
8917
  * fresh instead), nor a document saved while still processing (its saved freshness would keep it
8753
- * "processing" with no re-read). The other families (the workspace list, the settings) always.
8754
- * Offline, everything persisted is restored.
8918
+ * "processing" with no re-read), nor the entitlements (kept for an offline start only: online they
8919
+ * are read fresh, so a plan bought since shows at once). The other families (the workspace list,
8920
+ * the settings) always. Offline, everything persisted is restored.
8755
8921
  */
8756
8922
  declare function isRestorableArbiQueryOnline(queryKey: QueryKey, data: unknown): boolean;
8757
8923
 
@@ -10906,6 +11072,11 @@ declare function useEntitlements(): _tanstack_react_query.UseQueryResult<NoInfer
10906
11072
  host_calls: boolean;
10907
11073
  reason?: ("pro_required" | "external_user" | "not_entitled") | null;
10908
11074
  }>, Error>;
11075
+ /**
11076
+ * Read the entitlements again: after something that changes them (Pro bought, a plan change), so
11077
+ * the paid pages open at once instead of waiting out the cached copy.
11078
+ */
11079
+ declare function useInvalidateEntitlements(): () => Promise<void>;
10909
11080
  /** Whether the person may use `feature` (false while unknown, so nothing the API would refuse flashes up). */
10910
11081
  declare function useIsEntitled(feature: EntitledFeature): boolean;
10911
11082
  /** Why the paid features are off, in the words a UI shows. */
@@ -16142,4 +16313,4 @@ declare function finishEntityExtraction(docIds: readonly string[]): void;
16142
16313
  /** The documents being extracted now. */
16143
16314
  declare function useEntityExtractionDocIds(): readonly string[];
16144
16315
 
16145
- export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUDIO_MIME_PREFERENCE, AUTO_CHAT_MODEL, type AccessRequestPayload, type AccessRequestRecipient, type AccountClient, type AccountClientContextValue, type AccountHost, type AccountSession, type AccountSignOutOptions, ActiveCall, type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, type AddWorkspaceMembersRequest, type AgentAccessMode, type AgentConfigSections, type AgentControlMaps, AgentDmStatus, type AgentQuestionRef, type AgentRunControlState, type AggregateOp, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, AppNotification, AppleIcon, type ApplyCallEventOptions, ArbiBotHeadIcon, ArbiBotIcon, type ArbiChatCitation, type ArbiChatDocument, type ArbiChatHost, type ArbiChatMessage, type ArbiChatMessageStatus, type ArbiChatPassage, type ArbiChatRole, type ArbiChatThread, type ArbiConversation, type ArbiConversationDocument, type ArbiConversationGeneration, type ArbiDmTab, type ArbiDocumentViewerState, type ArbiDraftStorage, type ArbiFeature, type ArbiFeatures, type ArbiGridLayoutState, ArbiHost, type ArbiHostConfig, ArbiHostConnection, ArbiHostProps, type ArbiKeyValueStorage, type ArbiLayoutActions, type ArbiLayoutState, type ArbiLayoutStore, type ArbiLayoutStoreOptions, type ArbiMessageTimer, type ArbiPanelMode, type ArbiPanelsState, type ArbiSavedLayout, type ArbiSessionPersist, type ArbiSessionState, type ArbiSessionStatus, type ArbiSessionStore, type ArbiSessionStoreOptions, type ArbiShellState, type ArbiSidebarState, type ArbiSignedInSession, type ArbiTabsState, type ArbiThreadComposer, type ArbiThreadTab, type ArbiThreadTabShow, type ArbiThreadTabView, type ArbiThreadTabsController, type ArbiThreadTabsState, type ArbiThreadView, type ArbiViewerTab, type ArbiViewingDocument, type ArbiViewingDocumentInput, type ArbiViewsState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWorkspaceState, type ArbiWorkspaceStatus, type ArbiWorkspaceStorage, type ArbiWorkspaceStore, type ArbiWorkspaceStoreOptions, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AskAgain, type AspectOption, type AssignDocTagsInput, type AssistantMode, AudIcon, type AudioPiece, type AvatarCrop, type AvatarFileProblem, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, type BranchNavigation, type BranchPoint, type BrowserWorkspaceStorageOptions, type BuildArchiveInput, type BuiltArchive, CALL_MODERATION_TOPIC, CONVERSATION_SWITCH_MEASURE, type CalendarConnectorSupport, type CalendarNotificationMeta, type CalendarOfflineSupport, type CalendarPendingWrite, type CalendarSupport, type CalendarWriteOp, type CallInviteContact, type CallMutedNotice, type CallRoomEvents, type CallSlotMode, type CallUserPillProps, type CallsHost, type ChartSpec, type ChartType, type ChatArrival, ChatBubble, type ChatBubbleProps, ChatMemberKey, type ChatPost, ChatResponse, type ChatSummary, ChatThreadMessage, type Chunk, type ChunkActivation, type ChunkedRecorder, type ChunkedRecorderOptions, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, type ConfigUpdate, type ConversationActionsInput, type ConversationEvent, ConversationList, type ConversationListProps, ConversationScope, type ConversationScopeProps, type ConversationsSourceLabels, type CreateProjectVars, type CreateSkillPackOptions, type CreateTagInput, type CreateWorkspaceVars, type CreatedProject, type CropArea, type CropOutput, type CropResult, type CurrentWorkspace, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_DOCUMENT_VIEWER_STATE, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DISMISSED_TASK_TTL_MS, DOCUMENTS_FIRST_PAGE_MEASURE, DOCUMENTS_FIRST_PAGE_SIZE, DOCUMENTS_PAGE_SIZE, type DashboardSpec, type DashboardStore, type DashboardsHost, type DataSource, type DataSourceFieldsState, type DataSourceOption, type DataSourceParam, type DataSourceParams, type DataSourceRef, type DataSourceRegistry, type DatabaseAggregateRequest, type DatabaseAggregateResult, type DatabaseDashboardStoreOptions, type DatabaseSourceLabels, type Dataset, type DatasetField, type DatasetFieldType, type DatasetFilter, type DatasetOrder, type DatasetQuery, type DatasetRow, type DatasetSort, type DatasetState, type DatasetValue, DateSeparator, type DateSeparatorProps, type DebouncedWriter, type DebouncedWriterOptions, type DeleteAccountBlocker, type DeleteAccountFlow, type DeletedDocument, type DeletedDocumentsPage, type DescribeCalendarNotificationOptions, type DescribeServerNotificationOptions, DictateContextValue, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, type DocumentCardMenuProps, type DocumentHostActions, type DocumentPerson, DocumentReview, type DocumentReviewProps, type DocumentRowChange, type DocumentStartItem, type DocumentsSourceLabels, type DocumentsSupport, type DraftKeyValueStore, DraftTitleControls, type DraftTitleControlsProps, EMPTY_GROUP_LABEL, EMPTY_SESSION_STATE, EXPORT_SAMPLE_RATE, type EmailChange, type EmailPreferences, EmlIcon, type EnableDriveSyncVars, type EnableMailboxSyncVars, type EntitledFeature, EntityIconComponent, EntityVocabulary, type ExportDownloadRequest, type ExportFileKind, type ExtractedZip, FACTS_SEARCH_VIEW, FILE_TYPE_COLORS, FINISHED_DOCUMENT_STATUSES, FIRST_TOKEN_MEASURE, type FactListFilter, type FactSearchHit, type FactsSearch, type FactsSearchState, type FeatureEntitlements, type FeatureRefusal, type FeatureSource, type FeatureSwitch, FileIcon, type FilterOp, FireworksIcon, type FollowSaveCallbacks, GeminiIcon, type GenerateDocTagsInput, GitHubIcon, GoogleIcon, type GrantAgentAccessVars, HostConfigRecord, HtmlIcon, IN_FLIGHT_DOCUMENT_STATUSES, IdentityPurchase, IdentityStatus, IdentityStep, type IdentityVerificationApi, IdentityVerificationFlow, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, IncomingCall, InlineMicButton, type InlineMicButtonProps, type InstallSkillPackVariables, JoinChoices, LIVE_UPDATE_TYPES, LinkedInIcon, type LiveTask, type LocalFeatureStore, type LocalFeatureStoreOptions, MAIL_DRAFT_REPLACED_EVENT, MAX_AVATAR_FILE_BYTES, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MAX_THREAD_TABS, MIN_NARRATION_DWELL_MS, MIN_QUEUED_MESSAGE_VISIBILITY_MS, MODEL_GROUP_LABELS, MUTED_DEDUPE_MS, type MailAccount, type MailAddress, type MailAttachment, type MailClient, type MailClientContextValue, type MailCompose, type MailDeliveryRecipient, type MailDeliveryStatus, type MailDeviceFallback, type MailDraftEditorRequest, type MailDraftEditorSession, type MailFetch, type MailFolder, type MailHost, type MailMessage, type MailMessageUpdate, MailOfflineUnavailableError, type MailPage, type MailPolicy, type MailProject, MeetingChatRef, MeetingChatTarget, MentionCandidate, type MessageArtifact, MessageArtifactCard, type MessageTimerResult, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, type ModeratedTrack, type MountDiditOptions, type NameEditor, type NotificationPreferencesModel, type NotificationTarget, type NotificationTypeMeta, NotifyVariant, type OfflineDocumentRecord, OpenAIIcon, type OpenedRecording, type OptimisticDocumentEdit, type OrderResolver, PENDING_SYNC_PREDICATE, PLAYBACK_LOOKAHEAD_MS, POLL_EVERY_MS, PROJECT_CREATION_DENIED_REASON, type PaletteNavItem, type PanelDatasetState, type PanelSpec, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, type PassageResolvers, type PasswordChangeForm, type PasswordChangeFormMessages, type PasswordChangeVars, PdfIcon, type PendingSyncItem, type PeopleDirectory, type Person, PhotoCapture, type PhotoCaptureProps, type ProcessingTask, type ProfileView, type ProjectsSourceLabels, type ProjectsSourceOptions, type ProjectsUsageAggregate, type QueuedCalendarWrite, type QueuedMessage, type QueuedMessages, type QuoteResolver, RECORDING_SEGMENTER, RUN_WINDOW_MS, type RawPending, type RecordedChunk, type RecordingWindow, type RefusedUploadFile, type RelatedDocs, type RelatedDocsMap, type RelevancePatch, type RemoveDocTagsInput, type RenderMarkdown, type RequestAccessOptions, type RowsSourceDefinition, type RowsState, SEGMENT_FRAME_MS, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SIGNATURE_NOTIFICATION_TYPES, SIMILARITY_THRESHOLD, SLOW_AFTER_MS, STILL_WORKING, type SaveAgentConfigVars, type SavedDashboard, type SealedDraftStorageOptions, type SearchMode, SearchSession, SearchStatus, SegmenterConfig, type SemanticSearch, type SemanticSearchOptions, type SendMessageOptions, type SequencedRow, type SequencedTask, type ServerNotificationBellOptions, type ServerNotificationDescription, type ShellRecentWorkspaceItem, type ShellWorkspaceItem, type ShellWorkspaceKind, type ShellWorkspaceMember, type ShellWorkspaceSeed, type ShellWorkspaceSource, type SignatureNotificationType, type SkillPack, type SkillPackEntry, type StartTaskQuery, StorageActionError, type StorageActions, type StorageDeploymentUsage, type StorageItem, type StorageItemKind, type StorageItemState, type StorageItemsQuery, type StorageKindUsage, type StoragePersistOptions, type StorageProjectUsage, type StorageScope, type StorageSnapshot, type StreamHandlerContext, type StreamHandlerParams, type StreamHandlers, type StreamState, type SwitchWorkspaceTarget, TRANSFER_POLL_MS, type TableView, type TableViewTable, TaskThreadPendingError, type ThreadAccessors, ThreadBinding, type ThreadItem, type TimeBucket, type TimelinePart, type ToolResponses, type TrackCutter, type TrackPiece, type TranscriptExportLine, type TranscriptLineRef, type TranscriptSegmentMarker, type TransferConflictPolicy, type TransferKind, type TransferMode, type TransferPlan, type TransferScope, type TransferStatus, type TurnTarget, type TurnTools, TxtIcon, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, type UnarchiveEstimate, type UpdateDocTagInput, type UpdateDocumentsInput, type UpdateProfileVars, type UploadDocumentsInput, type UploadFilesInput, type UploadFilesProgress, type UploadFilesResult, type UploadFromUrlsInput, type UploadFromUrlsResult, type UploadRefusal, type UploadUrlsInput, type UsageSourceLabels, type UsageTotals, type UseArbiShellWorkspacesOptions, type UseAskAgainOptions, type UseAvatarCropOptions, type UseCameraStreamResult, type UseConversationOptions, type UseDeleteAccountFlowOptions, type UseDownloadDocumentsOptions, type UseEmailChangeOptions, type UseFactsSearchOptions, type UseIdentityVerificationFlowOptions, type UseMessageTimerOptions, type UseNameEditorOptions, type UsePasswordChangeFormOptions, type UseShellWorkspacesOptions, type UseShellWorkspacesResult, type UseSwitchWorkspaceResult, type UseVideoRecorderResult, type UserResponse, type UserSettingFlag, type UserSettingsPatch, VIDEO_MIME_PREFERENCE, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VoiceNoteRecorder, type VoiceNoteRecorderProps, WORKSPACE_LAST_OPENED_KEY, WORKSPACE_STORAGE_KEY, WORK_NOTIFICATION_LABELS, type WorkspaceArchive, type WorkspaceArchiveState, type WorkspaceDocument, type WorkspaceExport, type WorkspaceMember, type WorkspaceNotificationLevel, type WorkspaceProcessing, type WorkspaceRole, type WorkspaceSwitchContext, type WorkspaceUpdate, type WorkspacesSourceLabels, XlsIcon, type ZipExtractor, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, acceptRing, accountPath, addAssistantMessageToCache, addConversationToList, addUserMessageToCache, adjustTagCounts, adoptNewChatDocument, agentControl, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyCallEvent, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiAccountClient, arbiMailClient, archiveName, archivedWorkspaceMessage, bindThreadDocument, boundDocumentOf, browserWorkspaceStorage, bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, callLink, callNotificationMeta, captureFrameAsBlob, chatTranscriptRef, classifyMediaError, clearLoadingState, clearSealedDrafts, clearUserInputRequest, clockTime, closePanelIn, commitFinalMessage, completeQueuedUserMessageByContent, compositeFiles, compositeTrack, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, conversationKey, createArbiLayoutStore, createArbiSessionStore, createArbiWorkspaceStore, createChunkedRecorder, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDebouncedWriter, createDocumentsSource, createLocalFeatureStore, createMailClient, createMemoryDashboardStore, createMutedNotifier, createProjectsSource, createSealedDraftStorage, createSkillPack, createStoragePersist, createStreamHandlers, createTrackCutter, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, cutAtPauses, dayKey, declineRing, decodeMono16k, defaultLayoutState, defaultMailAlias, defineRowsSource, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, dmTabId, documentActivityMeta, documentActivityPhrase, documentDisplayName, docxMentionMeta, downloadRecoveryFile, dropTagFromCachedDocuments, encodeWav, ensureAssistantMessageLoading, entitlementRefusal, extensionFor, extractZipFile, fallbackFileName, fetchPart, fileAttachment, fileSafe, filesFromDrop, fillTimeGaps, filterRows, findConversation, finishEntityExtraction, floatToWav, flushOnPageExit, flushStreamingTokens, forgetDocuments, forgetUploadedDocumentFolder, formatConfigValidationError, formatElapsed, formatIdentityPrice, formatTranscriptMarkdown, getCachedDocuments, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasPendingFinalCommit, hasRecordingTranscript, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateCall, invalidateConversationActivity, invalidateConversationDetails, invalidateConversationLists, invalidateTagData, invalidateTagTables, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isConversationListKey, isConversationShared, isDeploymentAdmin, isDeploymentUserNotification, isDocumentsLoading, isFullConfig, isMessageRunning, isNotificationRow, isOfflineReadableArbiQuery, isOrphanedUserMessage, isPanelOpen, isQueuedCalendarWrite, isRecordingSegmentId, isReplayableArbiMutation, isRestorableArbiQueryOnline, isRowNewer, isSignatureNotificationType, isStaleTaskUpdate, isTableViewOf, isTransferFinished, isTransferResumable, isUsageMetered, isWorkspaceArchivedError, isWorkspaceGuestOf, isWorkspaceNotificationType, isZipFile, joinFromPreJoin, layoutActionsOf, loadOfflineDocument, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, mergeHostConfig, migrateLegacyThreadDocuments, mountDiditVerification, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, nextAliasSuggestion, nextViewingDocument, notificationUserName, onCallEvent, openAccessRequest, openCall, openPanelIn, openRecording, panelPlace, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, parseSavedLayout, partKey, partsDue, patchCachedDocument, patchConversation, patchConversationList, patchDocuments, patchWorkspaceTags, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, pickRecorderMimeType, playheadAt, postRecordingDocsToThread, postTranscriptToThread, prepareUploadFiles, queryOfChart, queuedMessages, readLocalFeature, readWorkspaceLastOpened, recordingFiles, recordingWindowsOf, recordsOf, redlineStats, refreshDocuments, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeConversationFromLists, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveDocumentStatus, resolveReplyTarget, restoreLayout, rollbackOptimisticDocumentEdit, safePortalUrl, saveRecordingFilesToThread, savedLayoutOf, schedulePart, selectDraft, selectIsGenerating, selectViewingDocumentId, serializeDashboardSpec, serverCallsExperimental, serverNotificationBellEntry, setCachedDocument, setMessageContent, setUserInputRequest, settledByRows, signatureNotificationPhrase, signatureRequestMeta, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startEntityExtraction, startThreadCall, startsMediaFile, stopDocumentsLoading, stripSpeakerPrefix, subscribeDocumentReads, subscribeDocumentRows, supersedeLiveTranscript, supersededTranscriptLines, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, threadTabId, threadTranscriptLines, threadTranscriptRef, timelineDurationMs, timelineOf, titleFromQuestion, toChatCitations, toNotificationPreferences, toProfileView, toRedlineMarkdown, toShellWorkspace, transcribeRecording, transcriptSegmentOf, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, upsertDocuments, useAccountClient, useActOnStep, useActiveConfigId, useActivity, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAgents, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbi, useArbiConnected, useArbiHost, useArbiSession, useArbiSessionState, useArbiSessionStore, useArbiShellWorkspaces, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAssistantQuery, useAuthorizeLimits, useAutoSendDraft, useAvailableModels, useAvatarCrop, useBookingPages, useBootTimeout, useBoxRole, useBranchNavigation, useBuiltinCommands, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCameraStream, useCanCreateProjects, useCanEditShared, useCanHostCalls, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useCommandPalette, useConfig, useConfigSchema, useConfigs, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationThreads, useConversationTurn, useConversationUsage, useConversations, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateTag, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentUser, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteAgents, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteTag, useDeleteWorkflow, useDeleteWorkspaces, useDeploymentDomain, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocument, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentVersionList, useDocuments, useDocumentsById, useDocumentsLoading, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useEntitlements, useEntityExtractionDocIds, useExportDatabase, useExtractEntities, useFacts, useFactsSearch, useFeature, useFeatureSwitch, useFetchCalendarEvent, useFilteredProjects, useFinaliseTranslation, useFindTime, useFirmPool, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHealth, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInvalidateTagData, useInviteContacts, useIsCreatingTag, useIsEntitled, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useMailAccounts, useMailAttachmentText, useMailCache, useMailClient, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailUnlock, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMeetingReadOnly, useMentionCandidates, useMessageDetails, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNameEditor, useNotificationPreferences, useNotifications, useNotifyConversation, useOfflineDocumentIds, useOpenCallMeetingChat, useOpenSelectedWorkspace, useOpenViewerDocumentId, usePanelDataset, useParsedDocument, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingContacts, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProfile, useProjectBillingPortal, useProjectConversationUsage, useProjectEvents, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, usePublishCalendar, useRecordingActions, useRecordingWindows, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshDocuments, useRefreshProject, useRelatedDocuments, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRevokeCallInviteLink, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSaveToThread, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendBackStep, useSendMail, useServerCallsEnabled, useServerCallsExperimental, useSessionPageTab, useSessionView, useSessions, useSetDeploymentHouseTemplate, useSetSkillVisibility, useSetTagValues, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSignedInSession, useSimilarDocuments, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useTagKindSchema, useTags, useTerminateSession, useThinkingContent, useThreadDocument, useThumbnails, useTopUpFirmPool, useTransientView, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateMailMessage, useUpdateProfile, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateTag, useUpdateTagKindSchema, useUpdateUserSettings, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useUserSettings, useUserUsageToday, useVideoRecorder, useWorkItems, useWorkNotifications, useWorkflowRuns, useWorkflows, useWorkspaceActivity, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, useWorkspaces, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeOfflineDocuments, withRelativePath, workflowStepOf, workspaceHouseTemplateId, writeSamples };
16316
+ export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUDIO_MIME_PREFERENCE, AUTO_CHAT_MODEL, type AccessRequestPayload, type AccessRequestRecipient, type AccountClient, type AccountClientContextValue, type AccountHost, type AccountSession, type AccountSignOutOptions, ActiveCall, type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, type AddWorkspaceMembersRequest, type AgentAccessMode, type AgentConfigSections, type AgentControlMaps, AgentDmStatus, type AgentQuestionRef, type AgentRunControlState, type AggregateOp, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, AppNotification, AppleIcon, type ApplyCallEventOptions, ArbiBotHeadIcon, ArbiBotIcon, type ArbiChatActions, type ArbiChatCitation, type ArbiChatDocument, type ArbiChatHost, type ArbiChatMessage, type ArbiChatMessageStatus, type ArbiChatPassage, type ArbiChatRole, type ArbiChatState, type ArbiChatStore, type ArbiChatStoreOptions, type ArbiChatThread, type ArbiConversation, type ArbiConversationDocument, type ArbiConversationGeneration, type ArbiDmTab, type ArbiDocumentSessionActions, type ArbiDocumentSessionState, type ArbiDocumentSessionStore, type ArbiDocumentViewerState, type ArbiDraftStorage, type ArbiFeature, type ArbiFeatures, type ArbiGridLayoutState, ArbiHost, type ArbiHostConfig, ArbiHostConnection, ArbiHostProps, type ArbiKeyValueStorage, type ArbiLayoutActions, type ArbiLayoutState, type ArbiLayoutStore, type ArbiLayoutStoreOptions, type ArbiMessageTimer, type ArbiPanelMode, type ArbiPanelsState, type ArbiSavedChat, type ArbiSavedLayout, type ArbiSessionParts, type ArbiSessionPersist, type ArbiSessionState, type ArbiSessionStatus, type ArbiSessionStore, type ArbiSessionStoreOptions, type ArbiShellState, type ArbiSidebarState, type ArbiSignedInSession, type ArbiTabsState, type ArbiThreadComposer, type ArbiThreadTab, type ArbiThreadTabShow, type ArbiThreadTabView, type ArbiThreadTabsController, type ArbiThreadTabsState, type ArbiThreadView, type ArbiViewerTab, type ArbiViewingDocument, type ArbiViewingDocumentInput, type ArbiViewsState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWorkspaceState, type ArbiWorkspaceStatus, type ArbiWorkspaceStorage, type ArbiWorkspaceStore, type ArbiWorkspaceStoreOptions, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AskAgain, type AspectOption, type AssignDocTagsInput, type AssistantMode, AudIcon, type AudioPiece, type AvatarCrop, type AvatarFileProblem, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, type BranchNavigation, type BranchPoint, type BrowserWorkspaceStorageOptions, type BuildArchiveInput, type BuiltArchive, CALL_MODERATION_TOPIC, CONVERSATION_SWITCH_MEASURE, type CalendarConnectorSupport, type CalendarNotificationMeta, type CalendarOfflineSupport, type CalendarPendingWrite, type CalendarSupport, type CalendarWriteOp, type CallInviteContact, type CallMutedNotice, type CallRoomEvents, type CallSlotMode, type CallUserPillProps, type CallsHost, type ChartSpec, type ChartType, type ChatArrival, ChatBubble, type ChatBubbleProps, ChatMemberKey, type ChatPost, ChatResponse, type ChatSummary, ChatThreadMessage, type Chunk, type ChunkActivation, type ChunkedRecorder, type ChunkedRecorderOptions, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, type ConfigUpdate, type ConversationActionsInput, type ConversationEvent, ConversationList, type ConversationListProps, ConversationScope, type ConversationScopeProps, type ConversationsSourceLabels, type CreateProjectVars, type CreateSkillPackOptions, type CreateTagInput, type CreateWorkspaceVars, type CreatedProject, type CropArea, type CropOutput, type CropResult, type CurrentWorkspace, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_DOCUMENT_VIEWER_STATE, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DISMISSED_TASK_TTL_MS, DOCUMENTS_FIRST_PAGE_MEASURE, DOCUMENTS_FIRST_PAGE_SIZE, DOCUMENTS_PAGE_SIZE, type DashboardSpec, type DashboardStore, type DashboardsHost, type DataSource, type DataSourceFieldsState, type DataSourceOption, type DataSourceParam, type DataSourceParams, type DataSourceRef, type DataSourceRegistry, type DatabaseAggregateRequest, type DatabaseAggregateResult, type DatabaseDashboardStoreOptions, type DatabaseSourceLabels, type Dataset, type DatasetField, type DatasetFieldType, type DatasetFilter, type DatasetOrder, type DatasetQuery, type DatasetRow, type DatasetSort, type DatasetState, type DatasetValue, DateSeparator, type DateSeparatorProps, type DebouncedWriter, type DebouncedWriterOptions, type DeleteAccountBlocker, type DeleteAccountFlow, type DeletedDocument, type DeletedDocumentsPage, type DescribeCalendarNotificationOptions, type DescribeServerNotificationOptions, DictateContextValue, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, type DocumentCardMenuProps, type DocumentHostActions, type DocumentPerson, DocumentReview, type DocumentReviewProps, type DocumentRowChange, type DocumentStartItem, type DocumentsSourceLabels, type DocumentsSupport, type DraftKeyValueStore, DraftTitleControls, type DraftTitleControlsProps, EMPTY_CHAT_STATE, EMPTY_GROUP_LABEL, EMPTY_SESSION_STATE, EXPORT_SAMPLE_RATE, type EmailChange, type EmailPreferences, EmlIcon, type EnableDriveSyncVars, type EnableMailboxSyncVars, type EntitledFeature, EntityIconComponent, EntityVocabulary, type ExportDownloadRequest, type ExportFileKind, type ExtractedZip, FACTS_SEARCH_VIEW, FILE_TYPE_COLORS, FINISHED_DOCUMENT_STATUSES, FIRST_TOKEN_MEASURE, type FactListFilter, type FactSearchHit, type FactsSearch, type FactsSearchState, type FeatureEntitlements, type FeatureRefusal, type FeatureSource, type FeatureSwitch, FileIcon, type FilterOp, FireworksIcon, type FollowSaveCallbacks, GeminiIcon, type GenerateDocTagsInput, GitHubIcon, GoogleIcon, type GrantAgentAccessVars, HostConfigRecord, HtmlIcon, IN_FLIGHT_DOCUMENT_STATUSES, IdentityPurchase, IdentityStatus, IdentityStep, type IdentityVerificationApi, IdentityVerificationFlow, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, IncomingCall, InlineMicButton, type InlineMicButtonProps, type InstallSkillPackVariables, JoinChoices, LIVE_UPDATE_TYPES, LinkedInIcon, type LiveTask, type LocalFeatureStore, type LocalFeatureStoreOptions, MAIL_DRAFT_REPLACED_EVENT, MAX_AVATAR_FILE_BYTES, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MAX_THREAD_TABS, MIN_NARRATION_DWELL_MS, MIN_QUEUED_MESSAGE_VISIBILITY_MS, MODEL_GROUP_LABELS, MUTED_DEDUPE_MS, type MailAccount, type MailAddress, type MailAttachment, type MailClient, type MailClientContextValue, type MailCompose, type MailDeliveryRecipient, type MailDeliveryStatus, type MailDeviceFallback, type MailDraftEditorRequest, type MailDraftEditorSession, type MailFetch, type MailFolder, type MailHost, type MailMessage, type MailMessageUpdate, MailOfflineUnavailableError, type MailPage, type MailPolicy, type MailProject, MeetingChatRef, MeetingChatTarget, MentionCandidate, type MessageArtifact, MessageArtifactCard, MessageMentionRef, type MessageTimerResult, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, type ModeratedTrack, type MountDiditOptions, type NameEditor, type NotificationPreferencesModel, type NotificationTarget, type NotificationTypeMeta, NotifyVariant, type OfflineDocumentRecord, OpenAIIcon, type OpenedRecording, type OptimisticDocumentEdit, type OrderResolver, PENDING_SYNC_PREDICATE, PLAYBACK_LOOKAHEAD_MS, POLL_EVERY_MS, PROJECT_CREATION_DENIED_REASON, type PaletteNavItem, type PanelDatasetState, type PanelSpec, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, type PassageResolvers, type PasswordChangeForm, type PasswordChangeFormMessages, type PasswordChangeVars, PdfIcon, type PendingSyncItem, type PeopleDirectory, type Person, PhotoCapture, type PhotoCaptureProps, type ProcessingTask, type ProfileView, type ProjectsSourceLabels, type ProjectsSourceOptions, type ProjectsUsageAggregate, type QueuedCalendarWrite, type QueuedMessage, type QueuedMessages, type QuoteResolver, RECORDING_SEGMENTER, RUN_WINDOW_MS, type RawPending, type RecordedChunk, type RecordingWindow, type RefusedUploadFile, type RelatedDocs, type RelatedDocsMap, type RelevancePatch, type RemoveDocTagsInput, type RenderMarkdown, type RequestAccessOptions, type RowsSourceDefinition, type RowsState, SEGMENT_FRAME_MS, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SIGNATURE_NOTIFICATION_TYPES, SIMILARITY_THRESHOLD, SLOW_AFTER_MS, STILL_WORKING, type SaveAgentConfigVars, type SavedDashboard, type SealedDraftStorageOptions, type SearchMode, SearchSession, SearchStatus, SegmenterConfig, type SemanticSearch, type SemanticSearchOptions, type SendMessageOptions, type SequencedRow, type SequencedTask, type ServerNotificationBellOptions, type ServerNotificationDescription, type ShellRecentWorkspaceItem, type ShellWorkspaceItem, type ShellWorkspaceKind, type ShellWorkspaceMember, type ShellWorkspaceSeed, type ShellWorkspaceSource, type SignatureNotificationType, type SkillPack, type SkillPackEntry, type StartTaskQuery, StorageActionError, type StorageActions, type StorageDeploymentUsage, type StorageItem, type StorageItemKind, type StorageItemState, type StorageItemsQuery, type StorageKindUsage, type StoragePersistOptions, type StorageProjectUsage, type StorageScope, type StorageSnapshot, type StreamHandlerContext, type StreamHandlerParams, type StreamHandlers, type StreamState, type SwitchWorkspaceTarget, TRANSFER_POLL_MS, type TableView, type TableViewTable, TaskThreadPendingError, type ThreadAccessors, ThreadBinding, type ThreadItem, type TimeBucket, type TimelinePart, type ToolResponses, type TrackCutter, type TrackPiece, type TranscriptExportLine, type TranscriptLineRef, type TranscriptSegmentMarker, type TransferConflictPolicy, type TransferKind, type TransferMode, type TransferPlan, type TransferScope, type TransferStatus, type TurnTarget, type TurnTools, TxtIcon, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, type UiStateStorage, type UnarchiveEstimate, type UpdateDocTagInput, type UpdateDocumentsInput, type UpdateProfileVars, type UploadDocumentsInput, type UploadFilesInput, type UploadFilesProgress, type UploadFilesResult, type UploadFromUrlsInput, type UploadFromUrlsResult, type UploadRefusal, type UploadUrlsInput, type UsageSourceLabels, type UsageTotals, type UseArbiShellWorkspacesOptions, type UseAskAgainOptions, type UseAvatarCropOptions, type UseCameraStreamResult, type UseConversationOptions, type UseDeleteAccountFlowOptions, type UseDownloadDocumentsOptions, type UseEmailChangeOptions, type UseFactsSearchOptions, type UseIdentityVerificationFlowOptions, type UseMessageTimerOptions, type UseNameEditorOptions, type UsePasswordChangeFormOptions, type UseShellWorkspacesOptions, type UseShellWorkspacesResult, type UseSwitchWorkspaceResult, type UseVideoRecorderResult, type UserResponse, type UserSettingFlag, type UserSettingsPatch, VIDEO_MIME_PREFERENCE, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VoiceNoteRecorder, type VoiceNoteRecorderProps, WORKSPACE_LAST_OPENED_KEY, WORKSPACE_STORAGE_KEY, WORK_NOTIFICATION_LABELS, type WorkspaceArchive, type WorkspaceArchiveState, type WorkspaceDocument, type WorkspaceExport, type WorkspaceMember, type WorkspaceNotificationLevel, type WorkspaceProcessing, type WorkspaceRole, type WorkspaceSwitchContext, type WorkspaceUpdate, type WorkspacesSourceLabels, XlsIcon, type ZipExtractor, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, acceptRing, accountPath, addAssistantMessageToCache, addConversationToList, addUserMessageToCache, adjustTagCounts, adoptNewChatDocument, agentControl, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyCallEvent, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiAccountClient, arbiMailClient, archiveName, archivedWorkspaceMessage, bindThreadDocument, boundDocumentOf, browserWorkspaceStorage, bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, callLink, callNotificationMeta, captureFrameAsBlob, chatTranscriptRef, classifyMediaError, clearLoadingState, clearSealedDrafts, clearUserInputRequest, clockTime, closePanelIn, commitFinalMessage, completeQueuedUserMessageByContent, composeArbiSessionStore, compositeFiles, compositeTrack, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, conversationKey, createArbiChatStore, createArbiDocumentSessionStore, createArbiLayoutStore, createArbiSessionStore, createArbiWorkspaceStore, createChunkedRecorder, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDebouncedWriter, createDocumentsSource, createLocalFeatureStore, createMailClient, createMemoryDashboardStore, createMutedNotifier, createProjectsSource, createSealedDraftStorage, createSkillPack, createStoragePersist, createStreamHandlers, createTrackCutter, createUiStateStorage, createUsageSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, cutAtPauses, dayKey, declineRing, decodeMono16k, defaultLayoutState, defaultMailAlias, defineRowsSource, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, dmTabId, documentActivityMeta, documentActivityPhrase, documentDisplayName, docxMentionMeta, downloadRecoveryFile, dropTagFromCachedDocuments, encodeWav, ensureAssistantMessageLoading, entitlementRefusal, extensionFor, extractZipFile, fallbackFileName, fetchPart, fileAttachment, fileSafe, filesFromDrop, fillTimeGaps, filterRows, findConversation, finishEntityExtraction, floatToWav, flushOnPageExit, flushStreamingTokens, forgetDocuments, forgetUploadedDocumentFolder, formatConfigValidationError, formatElapsed, formatIdentityPrice, formatTranscriptMarkdown, getCachedDocuments, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasPendingFinalCommit, hasRecordingTranscript, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateCall, invalidateConversationActivity, invalidateConversationDetails, invalidateConversationLists, invalidateTagData, invalidateTagTables, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isConversationListKey, isConversationShared, isDeploymentAdmin, isDeploymentUserNotification, isDocumentsLoading, isFullConfig, isMessageRunning, isNotificationRow, isOfflineReadableArbiQuery, isOrphanedUserMessage, isPanelOpen, isQueuedCalendarWrite, isRecordingSegmentId, isReplayableArbiMutation, isRestorableArbiQueryOnline, isRowNewer, isSignatureNotificationType, isStaleTaskUpdate, isTableViewOf, isTransferFinished, isTransferResumable, isUsageMetered, isWorkspaceArchivedError, isWorkspaceGuestOf, isWorkspaceNotificationType, isZipFile, joinFromPreJoin, layoutActionsOf, loadOfflineDocument, mailDraftIdFromContent, mailJson, markMessageAsFailed, markNarrationSettled, mergeHostConfig, migrateLegacyThreadDocuments, mountDiditVerification, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, nextAliasSuggestion, nextViewingDocument, notificationUserName, onCallEvent, openAccessRequest, openCall, openPanelIn, openRecording, panelPlace, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, parseSavedChat, parseSavedLayout, partKey, partsDue, patchCachedDocument, patchConversation, patchConversationList, patchDocuments, patchWorkspaceTags, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, pickRecorderMimeType, playheadAt, postRecordingDocsToThread, postTranscriptToThread, prepareUploadFiles, queryOfChart, queuedMessages, readLocalFeature, readWorkspaceLastOpened, recordingFiles, recordingWindowsOf, recordsOf, redlineStats, refreshDocuments, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, removeConversationFromLists, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveDocumentStatus, resolveReplyTarget, restoreLayout, rollbackOptimisticDocumentEdit, safePortalUrl, saveRecordingFilesToThread, savedChatOf, savedLayoutOf, schedulePart, selectDraft, selectIsGenerating, selectViewingDocumentId, serializeDashboardSpec, serverCallsExperimental, serverNotificationBellEntry, setCachedDocument, setMessageContent, setUserInputRequest, settledByRows, signatureNotificationPhrase, signatureRequestMeta, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startEntityExtraction, startThreadCall, startsMediaFile, stopDocumentsLoading, stripSpeakerPrefix, subscribeDocumentReads, subscribeDocumentRows, supersedeLiveTranscript, supersededTranscriptLines, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, threadTabId, threadTranscriptLines, threadTranscriptRef, timelineDurationMs, timelineOf, titleFromQuestion, toChatCitations, toNotificationPreferences, toProfileView, toRedlineMarkdown, toShellWorkspace, transcribeRecording, transcriptSegmentOf, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, upsertDocuments, useAccountClient, useActOnStep, useActiveConfigId, useActivity, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAgents, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbi, useArbiConnected, useArbiHost, useArbiSession, useArbiSessionState, useArbiSessionStore, useArbiShellWorkspaces, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAssistantName, useAssistantQuery, useAuthorizeLimits, useAutoSendDraft, useAvailableModels, useAvatarCrop, useBookingPages, useBootTimeout, useBoxRole, useBranchNavigation, useBuiltinCommands, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCameraStream, useCanCreateProjects, useCanEditShared, useCanHostCalls, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useCommandPalette, useConfig, useConfigSchema, useConfigs, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationThreads, useConversationTurn, useConversationUsage, useConversations, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateTag, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentUser, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteAgents, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteTag, useDeleteWorkflow, useDeleteWorkspaces, useDeploymentDomain, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocument, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentVersionList, useDocuments, useDocumentsById, useDocumentsLoading, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useEntitlements, useEntityExtractionDocIds, useExportDatabase, useExtractEntities, useFacts, useFactsSearch, useFeature, useFeatureSwitch, useFetchCalendarEvent, useFilteredProjects, useFinaliseTranslation, useFindTime, useFirmPool, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHealth, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateEntitlements, useInvalidateProjects, useInvalidateStorage, useInvalidateTagData, useInviteContacts, useIsCreatingTag, useIsEntitled, 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, useMeetingReadOnly, useMentionCandidates, useMessageDetails, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNameEditor, useNotificationPreferences, useNotifications, useNotifyConversation, useOfflineDocumentIds, useOpenCallMeetingChat, useOpenSelectedWorkspace, useOpenViewerDocumentId, usePanelDataset, useParsedDocument, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingContacts, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProfile, useProjectBillingPortal, useProjectConversationUsage, useProjectEvents, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, usePublishCalendar, useRecordingActions, useRecordingWindows, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshDocuments, useRefreshProject, useRelatedDocuments, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRevokeCallInviteLink, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSaveToThread, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendBackStep, useSendMail, useServerCallsEnabled, useServerCallsExperimental, useSessionPageTab, useSessionView, useSessions, useSetDeploymentHouseTemplate, useSetSkillVisibility, useSetTagValues, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSignedInSession, useSimilarDocuments, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useTagKindSchema, useTags, useTerminateSession, useThinkingContent, useThreadDocument, useThumbnails, useTopUpFirmPool, useTransientView, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateMailMessage, useUpdateProfile, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateTag, useUpdateTagKindSchema, useUpdateUserSettings, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useUserSettings, useUserUsageToday, useVideoRecorder, useWorkItems, useWorkNotifications, useWorkflowRuns, useWorkflows, useWorkspaceActivity, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, useWorkspaces, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeOfflineDocuments, withRelativePath, workflowStepOf, workspaceHouseTemplateId, writeSamples };