@arbidocs/react 0.5.108 → 0.5.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { createRecordStore, useUserSettings, patchConversation, invalidateConver
3
3
  export { AUDIENCE_CHOICES, CALL_CAPTION_TOPIC, CALL_CHAT_MAX_CHARS, CALL_CHAT_TOPIC, CALL_MODERATION_TOPIC, CALL_RECORDING_TOPIC, CALL_TRANSCRIPTION_TOPIC, CALL_WEBINAR_TOPIC, CAPTION_MAX_CHARS, COMPOSITE_AUDIO_BITS_PER_SECOND, COMPOSITE_VIDEO_BITS_PER_SECOND, DEFAULT_JOIN_CHOICES, EMPTY_CALL_SESSION, EXPORT_SAMPLE_RATE, HISTORY_LIMIT, LIVE_SEGMENTER, MAX_AVATAR_FILE_BYTES, MUTED_DEDUPE_MS, PLAYBACK_LOOKAHEAD_MS, READ_ONLY_MEETING_TEXT, RECORDING_CHUNK_MS, RECORDING_SEGMENTER, SEGMENT_FRAME_MS, SEGMENT_ID_PATTERN, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SPEAKER_AUDIO_BITS_PER_SECOND, TrackUploader, UPLOAD_ATTEMPTS, UPLOAD_BACKOFF_MS, acceptRing, addConversationToList, appendToThread, applyAgentDmStatus, applyCallEvent, applyChatEvent, applyChatMessage, applyChatRead, applyChatUpdated, arbiAccountClient, buildMeetingChatBody, cachedChat, cachedChats, callLink, callMemberKeys, callSession, chatByExtId, chatHasLiveCall, chatLiveCallId, chatTranscriptRef, clearMeetingChatCache, clearTrackUploaders, clockTime, compositeFiles, compositeTrack, conversationKeyForCall, createLocalFeatureStore, createMutedNotifier, createTrackCutter, cutAtPauses, declineRing, decodeCallChatPacket, decodeCaptionPacket, decodeMono16k, decryptPart, encodeCallChatPacket, encodeCaptionPacket, encodeWav, encryptPart, ensureMeetingChat, entitlementRefusal, extensionFor, fetchPart, fileSafe, findConversation, floatToWav, formatTranscriptMarkdown, getOpenChat, hasRecordingTranscript, invalidateCall, invalidateConversationDetails, invalidateConversationLists, isConversationListKey, isConversationShared, isRecordingOver, isRecordingSegmentId, isRetryable, isWorkspaceGuestOf, joinFromPreJoin, knownMeetingChat, loadMeetingHistory, markRejoining, meetingChatRefFrom, meetingRefForCall, mergeChatLines, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, myChatId, newPacketId, newSegmentId, newTrackKey, nextSeqAfter, onCallEvent, openCall, openQuestion, openRecording, parseWebinarPacket, partKey, partOffsetMs, partsDue, patchConversation, patchConversationList, persistMeetingMessage, persistTranscriptSegment, playheadAt, postRecordingDocsToThread, postTranscriptToThread, readLocalFeature, recordingFiles, recordingWindowsOf, rejoinAsAudience, removeChat, removeConversationFromLists, resetCallSession, resolveMeetingChat, saveRecordingFilesToThread, schedulePart, sealQuestionText, serverCallsExperimental, setOpenChat, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startThreadCall, startsMediaFile, storeTranscriptSegment, stripSpeakerPrefix, supersedeLiveTranscript, supersededTranscriptLines, threadHasLiveCall, threadLiveCallId, threadTranscriptLines, threadTranscriptRef, threadTranscriptText, timelineDurationMs, timelineOf, toProfileView, trackUploaderFor, transcribeRecording, transcriptPersistRole, transcriptSegmentOf, unwrapTrackKey, upsertChat, useAccountClient, useAvatarCrop, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallSession, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCanHostCalls, useEntitlements, useFeature, useFeatureCheck, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wipeOfflineMail, wrapTrackKey, writeSamples } from './chunk-DQALOQPI.js';
4
4
  import { replayableTagMutations, inWorkspace, primeOnClient, patchDocuments, setCachedDocument, adjustTagCounts, patchCachedDocument, FINISHED_DOCUMENT_STATUSES, refreshDocuments, getCachedDocuments, useArbiWsStore, IN_FLIGHT_DOCUMENT_STATUSES, useCapturingWorkspace, QUEUED_WRITE_RETRY, isWorkspaceUnavailable, primeOnArbi, forgetDocuments, useDocument, useSimilarDocuments, SIMILARITY_THRESHOLD, QUEUED_WRITE_BLOCKED_MESSAGE, isBlockedOnWorkspace, useDocuments, finishEntityExtraction } from './chunk-P6WLV5UY.js';
5
5
  export { DISMISSED_TASK_TTL_MS, DOCUMENTS_FIRST_PAGE_MEASURE, DOCUMENTS_FIRST_PAGE_SIZE, DOCUMENTS_PAGE_SIZE, FINISHED_DOCUMENT_STATUSES, IN_FLIGHT_DOCUMENT_STATUSES, SIMILARITY_THRESHOLD, adjustTagCounts, dropTagFromCachedDocuments, finishEntityExtraction, forgetDocuments, getCachedDocuments, invalidateTagData, invalidateTagTables, isDocumentsLoading, isRowNewer, isStaleTaskUpdate, patchCachedDocument, patchDocuments, patchWorkspaceTags, refreshDocuments, resolveDocumentStatus, setCachedDocument, settledByRows, startEntityExtraction, stopDocumentsLoading, subscribeDocumentRows, upsertDocuments, useArbiWsStore, useCreateTag, useDeleteTag, useDocument, useDocuments, useDocumentsLoading, useEntityExtractionDocIds, useExtractEntities, useInvalidateTagData, useIsCreatingTag, useRefreshDocuments, useSetTagValues, useSimilarDocuments, useTagKindSchema, useUpdateTag, useUpdateTagKindSchema } from './chunk-P6WLV5UY.js';
6
- import { useArbiSessionState, useArbiSession, useWorkspaces, useConversations, useConfig, useArbiSessionStore, useAvailableModels, useParsedDocument, useTags, selectDraft, useConversationThreads, createArbiSessionStore, useTransientView, useWorkspaceActivity, useProjects, useCurrentUser, useAgents, useAssistantQuery, useActivity, queuedMessages, MIN_QUEUED_MESSAGE_VISIBILITY_MS } from './chunk-H5M7FXLB.js';
6
+ import { useProjects, useCurrentUser, useArbiSessionState, useArbiSession, useWorkspaces, useConversations, useConfig, useArbiSessionStore, useAvailableModels, useParsedDocument, useTags, selectDraft, useConversationThreads, createArbiSessionStore, useTransientView, useWorkspaceActivity, useAgents, useAssistantQuery, useActivity, queuedMessages, MIN_QUEUED_MESSAGE_VISIBILITY_MS } from './chunk-H5M7FXLB.js';
7
7
  export { DEFAULT_DOCUMENT_VIEWER_STATE, DOCUMENT_VIEWER_PANEL, EMPTY_CHAT_STATE, EMPTY_DOCUMENT_STATE, EMPTY_SESSION_STATE, MAX_THREAD_TABS, MIN_QUEUED_MESSAGE_VISIBILITY_MS, PROJECT_CREATION_DENIED_REASON, WORKSPACE_LAST_OPENED_KEY, WORKSPACE_STORAGE_KEY, agentControl, browserWorkspaceStorage, clearSealedDrafts, closePanelIn, composeArbiSessionStore, conversationKey, createArbiChatStore, createArbiDocumentSessionStore, createArbiLayoutStore, createArbiSessionStore, createArbiWorkspaceStore, createDebouncedWriter, createSealedDraftStorage, createStoragePersist, createUiStateStorage, defaultLayoutState, dmTabId, flushOnPageExit, isPanelOpen, isUsageMetered, layoutActionsOf, nextViewingDocument, openPanelIn, panelPlace, parseSavedChat, parseSavedDocuments, parseSavedLayout, queuedMessages, readWorkspaceLastOpened, restoreLayout, restoreSavedDocuments, savedChatOf, savedDocumentsOf, savedLayoutOf, selectDraft, selectIsGenerating, selectViewingDocumentId, threadTabId, useActivity, useAgents, useArbiSession, useArbiSessionState, useArbiSessionStore, useAssistantQuery, useAvailableModels, useBoxRole, useBuiltinCommands, useCanCreateProjects, useConfig, useConfigs, useConversationThreads, useConversations, useCurrentUser, useDeleteAgents, useDocumentVersionList, useHealth, useMessageDetails, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useSessionPageTab, useSessionView, useSignedInSession, useTags, useThumbnails, useTransientView, useUserUsageToday, useWorkspaceActivity, useWorkspaces } from './chunk-H5M7FXLB.js';
8
8
  import { fetchDocumentFile, downloadBlob, fetchMarkupPdf, fetchDocumentPdf } from './chunk-CPQ3CU4B.js';
9
9
  import { arbiMutationKeys, arbiQueryKeys, useArbi, useArbiHost, mailQueryKeys, isUnderQueryKey, connectorQueryKeys, calendarQueryKeys } from './chunk-6H3O63TQ.js';
@@ -3339,13 +3339,18 @@ function useUploadFiles() {
3339
3339
  }
3340
3340
  const total = input.files.reduce((sum, file) => sum + file.size, 0);
3341
3341
  const loadedByBatch = new Array(batches.length).fill(0);
3342
+ const filesByBatch = new Array(batches.length).fill(0);
3342
3343
  let done = 0;
3344
+ let highest = 0;
3343
3345
  const report = () => {
3344
3346
  const loaded = loadedByBatch.reduce((sum, bytes) => sum + bytes, 0);
3347
+ const sent = filesByBatch.reduce((sum, files) => sum + files, 0);
3348
+ const share = input.files.length > 0 ? sent / input.files.length : 0;
3349
+ highest = Math.max(highest, Math.min(Math.round(share * 100), 100));
3345
3350
  onProgress?.({
3346
3351
  loaded,
3347
3352
  total,
3348
- percentage: total > 0 ? Math.min(Math.round(loaded / total * 100), 100) : 0,
3353
+ percentage: highest,
3349
3354
  batches: batches.length > 1 ? { current: done, total: batches.length } : null
3350
3355
  });
3351
3356
  };
@@ -3359,11 +3364,14 @@ function useUploadFiles() {
3359
3364
  configExtId: input.configExtId ?? void 0,
3360
3365
  // Named even when it is the open one: batches sent after a switch stay in this workspace.
3361
3366
  workspaceExtId: workspaceId,
3367
+ // One request for the batch: its files count by the share of its bytes sent.
3362
3368
  onProgress: (loaded) => {
3363
3369
  loadedByBatch[index] = Math.min(loaded, bytes);
3370
+ filesByBatch[index] = bytes > 0 ? loadedByBatch[index] / bytes * files.length : 0;
3364
3371
  report();
3365
3372
  }
3366
3373
  });
3374
+ const fileShares = new Array(files.length).fill(0);
3367
3375
  const directly = async (key, workspace) => arbi.documents.uploadDirect(
3368
3376
  workspace,
3369
3377
  key,
@@ -3378,9 +3386,15 @@ function useUploadFiles() {
3378
3386
  shared: input.shared,
3379
3387
  folder: folder ?? void 0,
3380
3388
  configExtId: input.configExtId ?? void 0,
3381
- // Ciphertext bytes, scaled back to the files' own so the total stays true.
3382
- onBytesProgress: ({ loaded, total: sent }) => {
3383
- loadedByBatch[index] = sent > 0 ? Math.round(loaded / sent * bytes) : 0;
3389
+ // Per file, in ciphertext bytes: that file's share sent, scaled back to its own
3390
+ // size so the byte total stays true.
3391
+ onBytesProgress: ({ fileIndex, loaded, total: sent }) => {
3392
+ const share = sent > 0 ? Math.min(loaded / sent, 1) : 0;
3393
+ fileShares[fileIndex] = Math.max(fileShares[fileIndex] ?? 0, share);
3394
+ loadedByBatch[index] = Math.round(
3395
+ files.reduce((sum, file, i) => sum + (fileShares[i] ?? 0) * file.size, 0)
3396
+ );
3397
+ filesByBatch[index] = fileShares.reduce((sum, part) => sum + part, 0);
3384
3398
  report();
3385
3399
  }
3386
3400
  }
@@ -3397,6 +3411,7 @@ function useUploadFiles() {
3397
3411
  );
3398
3412
  }
3399
3413
  loadedByBatch[index] = bytes;
3414
+ filesByBatch[index] = files.length;
3400
3415
  done += 1;
3401
3416
  report();
3402
3417
  return result;
@@ -10972,6 +10987,8 @@ var DEFAULT_USAGE_SOURCE_LABELS = {
10972
10987
  description: "AI usage of your projects by day and model: \xA3 (ex VAT), tokens and requests.",
10973
10988
  period: "Period",
10974
10989
  periods: { current: "This period", previous: "Last period" },
10990
+ projectParam: "Project",
10991
+ allProjects: "All your projects",
10975
10992
  day: "Day",
10976
10993
  project: "Project",
10977
10994
  model: "Model",
@@ -10979,9 +10996,32 @@ var DEFAULT_USAGE_SOURCE_LABELS = {
10979
10996
  tokens: "Tokens",
10980
10997
  requests: "Requests"
10981
10998
  };
10999
+ var DEFAULT_USAGE_BREAKDOWN_SOURCE_LABELS = {
11000
+ ...DEFAULT_USAGE_SOURCE_LABELS,
11001
+ source: "AI usage breakdown",
11002
+ description: "AI usage of your projects this period, in total or by user, workspace, model or feature: \xA3 (ex VAT), tokens and requests.",
11003
+ breakdown: "Breakdown",
11004
+ by: { total: "Total", user: "User", workspace: "Workspace", model: "Model", feature: "Feature" }
11005
+ };
10982
11006
  var monthsBackOf = (params) => String(params.period ?? "0") === "1" ? 1 : 0;
10983
- function usageRows(usage, project, modelLabel = (g) => MODEL_GROUP_LABELS[g] ?? g) {
10984
- return (usage.daily ?? []).flatMap(
11007
+ var projectOf = (params) => typeof params.project === "string" && params.project ? params.project : void 0;
11008
+ var BREAKDOWNS = ["total", "user", "workspace", "model", "feature"];
11009
+ var breakdownOf = (params) => BREAKDOWNS.find((b) => b === params.by) ?? "user";
11010
+ var ownedBy = (projects, me) => (projects ?? []).filter((p) => !!me && p.created_by === me);
11011
+ function periodDays(start) {
11012
+ const end = /* @__PURE__ */ new Date(`${start}T00:00:00Z`);
11013
+ end.setUTCMonth(end.getUTCMonth() + 1);
11014
+ end.setUTCDate(end.getUTCDate() - 1);
11015
+ const days = [];
11016
+ for (const d = /* @__PURE__ */ new Date(`${start}T00:00:00Z`); d <= end; d.setUTCDate(d.getUTCDate() + 1)) {
11017
+ days.push(d.toISOString().slice(0, 10));
11018
+ }
11019
+ return days;
11020
+ }
11021
+ var featureLabel = (key) => key.replace(/[_-]+/g, " ").replace(/^\w/, (c) => c.toUpperCase());
11022
+ var modelLabelOf = (group) => MODEL_GROUP_LABELS[group] ?? group;
11023
+ function usageRows(usage, project, modelLabel = modelLabelOf) {
11024
+ const rows = (usage.daily ?? []).flatMap(
10985
11025
  (day2) => Object.entries(day2.model_groups ?? {}).map(([group, mg]) => ({
10986
11026
  day: day2.date,
10987
11027
  project,
@@ -10991,6 +11031,127 @@ function usageRows(usage, project, modelLabel = (g) => MODEL_GROUP_LABELS[g] ??
10991
11031
  requests: (mg.successful_requests ?? 0) + (mg.failed_requests ?? 0)
10992
11032
  }))
10993
11033
  );
11034
+ const model = rows[0]?.model;
11035
+ if (!usage.period_start || model === void 0) return rows;
11036
+ const used = new Set(rows.map((r) => r.day));
11037
+ const gaps = periodDays(usage.period_start).filter((day2) => !used.has(day2)).map((day2) => ({ day: day2, project, model, spend: 0, tokens: 0, requests: 0 }));
11038
+ return [...rows, ...gaps];
11039
+ }
11040
+ function usageNamesOf(workspaces) {
11041
+ const names = {};
11042
+ for (const ws of workspaces) {
11043
+ names[ws.external_id] = ws.name;
11044
+ for (const wu of ws.users ?? []) {
11045
+ const user = wu.user;
11046
+ if (user?.external_id && !names[user.external_id]) {
11047
+ names[user.external_id] = getUserDisplayName(user);
11048
+ }
11049
+ }
11050
+ }
11051
+ return names;
11052
+ }
11053
+ function usageBreakdownRows(usage, project, by, names = {}, totalLabel = "Total") {
11054
+ if (by === "total") {
11055
+ return [
11056
+ {
11057
+ project,
11058
+ name: totalLabel,
11059
+ spend: usage.total_spend ?? 0,
11060
+ tokens: usage.total_tokens ?? 0,
11061
+ requests: usage.total_requests ?? 0
11062
+ }
11063
+ ];
11064
+ }
11065
+ if (by === "model") {
11066
+ return Object.entries(usage.model_groups ?? {}).map(([group, mg]) => ({
11067
+ project,
11068
+ name: names[group] ?? modelLabelOf(group),
11069
+ spend: mg.spend ?? 0,
11070
+ tokens: mg.total_tokens ?? 0,
11071
+ requests: (mg.successful_requests ?? 0) + (mg.failed_requests ?? 0)
11072
+ }));
11073
+ }
11074
+ const totals = by === "workspace" ? usage.by_workspace : by === "feature" ? usage.by_feature : usage.by_user;
11075
+ return Object.entries(totals ?? {}).map(([key, t]) => ({
11076
+ project,
11077
+ name: by === "feature" ? featureLabel(key) : names[key] ?? key,
11078
+ spend: t.spend ?? 0,
11079
+ tokens: t.total_tokens ?? 0,
11080
+ requests: t.requests ?? 0
11081
+ }));
11082
+ }
11083
+ function useUsageResponses(params, enabled) {
11084
+ const arbi = useArbi();
11085
+ const monthsBack = monthsBackOf(params);
11086
+ const only = projectOf(params);
11087
+ const projects = useProjects({ enabled });
11088
+ const user = useCurrentUser({ enabled: enabled && arbi.isLoggedIn && !only });
11089
+ const me = user.data?.external_id;
11090
+ const list = useMemo(() => {
11091
+ const all = projects.data ?? [];
11092
+ if (only) return [all.find((p) => p.external_id === only) ?? { external_id: only, name: only }];
11093
+ return ownedBy(all, me);
11094
+ }, [projects.data, me, only]);
11095
+ const results = useQueries({
11096
+ queries: list.map((p) => ({
11097
+ queryKey: arbiQueryKeys.projectUsage(p.external_id, monthsBack),
11098
+ queryFn: () => arbi.projects.usage(p.external_id, monthsBack),
11099
+ enabled: enabled && arbi.isLoggedIn,
11100
+ retry: false
11101
+ }))
11102
+ });
11103
+ const signature = results.map((r) => `${r.status}:${r.dataUpdatedAt}`).join("|");
11104
+ const usages = useMemo(() => {
11105
+ if (results.some((r) => r.isLoading)) return void 0;
11106
+ if (!only && (!projects.data || !me)) return void 0;
11107
+ return results.map((r, i) => ({
11108
+ project: list[i],
11109
+ usage: r.data
11110
+ }));
11111
+ }, [projects.data, me, only, signature]);
11112
+ const loading = results.some((r) => r.isLoading);
11113
+ return only ? (
11114
+ // One project: its usage is the point, so its error shows (the project's name can wait).
11115
+ { usages, isLoading: loading, error: results[0]?.error ?? null }
11116
+ ) : {
11117
+ usages,
11118
+ isLoading: projects.isLoading || user.isLoading || loading,
11119
+ // One project's usage failing (not its owner after all, a hiccup) leaves it out.
11120
+ error: projects.error ?? user.error ?? null
11121
+ };
11122
+ }
11123
+ function usageParams(l) {
11124
+ const periodOptions = {
11125
+ options: [
11126
+ { value: "0", label: l.periods.current },
11127
+ { value: "1", label: l.periods.previous }
11128
+ ],
11129
+ isLoading: false
11130
+ };
11131
+ return [
11132
+ {
11133
+ id: "period",
11134
+ label: l.period,
11135
+ placeholder: l.periods.current,
11136
+ useOptions: () => periodOptions
11137
+ },
11138
+ {
11139
+ id: "project",
11140
+ label: l.projectParam,
11141
+ placeholder: l.allProjects,
11142
+ useOptions() {
11143
+ const arbi = useArbi();
11144
+ const projects = useProjects();
11145
+ const user = useCurrentUser({ enabled: arbi.isLoggedIn });
11146
+ const me = user.data?.external_id;
11147
+ const options = useMemo(
11148
+ () => ownedBy(projects.data, me).map((p) => ({ value: p.external_id, label: p.name })),
11149
+ [projects.data, me]
11150
+ );
11151
+ return { options, isLoading: projects.isLoading || user.isLoading };
11152
+ }
11153
+ }
11154
+ ];
10994
11155
  }
10995
11156
  function createUsageSource(labels) {
10996
11157
  const l = { ...DEFAULT_USAGE_SOURCE_LABELS, ...labels };
@@ -11002,59 +11163,70 @@ function createUsageSource(labels) {
11002
11163
  { id: "tokens", label: l.tokens, type: "number", unit: "tokens" },
11003
11164
  { id: "requests", label: l.requests, type: "number" }
11004
11165
  ];
11005
- const periodOptions = {
11006
- options: [
11007
- { value: "0", label: l.periods.current },
11008
- { value: "1", label: l.periods.previous }
11009
- ],
11010
- isLoading: false
11011
- };
11012
11166
  return defineRowsSource({
11013
11167
  id: "usage",
11014
11168
  label: l.source,
11015
11169
  description: l.description,
11016
- params: [
11170
+ params: usageParams(l),
11171
+ useFields: staticFields(fields),
11172
+ useRows(params, enabled) {
11173
+ const { usages, isLoading, error } = useUsageResponses(params, enabled);
11174
+ const rows = useMemo(
11175
+ () => usages?.flatMap((u) => u.usage ? usageRows(u.usage, u.project.name) : []),
11176
+ [usages]
11177
+ );
11178
+ return { rows, isLoading, error };
11179
+ }
11180
+ });
11181
+ }
11182
+ function createUsageBreakdownSource(labels) {
11183
+ const l = { ...DEFAULT_USAGE_BREAKDOWN_SOURCE_LABELS, ...labels };
11184
+ const fieldsBy = Object.fromEntries(
11185
+ BREAKDOWNS.map((by) => [
11186
+ by,
11017
11187
  {
11018
- id: "period",
11019
- label: l.period,
11020
- placeholder: l.periods.current,
11021
- useOptions: () => periodOptions
11188
+ fields: [
11189
+ { id: "project", label: l.project, type: "string" },
11190
+ { id: "name", label: l.by[by], type: "string" },
11191
+ { id: "spend", label: l.spend, type: "number", unit: "gbp" },
11192
+ { id: "tokens", label: l.tokens, type: "number", unit: "tokens" },
11193
+ { id: "requests", label: l.requests, type: "number" }
11194
+ ],
11195
+ isLoading: false,
11196
+ error: null
11022
11197
  }
11198
+ ])
11199
+ );
11200
+ const byOptions = {
11201
+ options: BREAKDOWNS.map((by) => ({ value: by, label: l.by[by] })),
11202
+ isLoading: false
11203
+ };
11204
+ return defineRowsSource({
11205
+ id: "usage-breakdown",
11206
+ label: l.source,
11207
+ description: l.description,
11208
+ params: [
11209
+ ...usageParams(l),
11210
+ { id: "by", label: l.breakdown, placeholder: l.by.user, useOptions: () => byOptions }
11023
11211
  ],
11024
- useFields: staticFields(fields),
11212
+ useFields: (params) => fieldsBy[breakdownOf(params)],
11025
11213
  useRows(params, enabled) {
11026
- const arbi = useArbi();
11027
- const monthsBack = monthsBackOf(params);
11028
- const projects = useProjects({ enabled });
11029
- const user = useCurrentUser({ enabled: enabled && arbi.isLoggedIn });
11030
- const me = user.data?.external_id;
11031
- const list = useMemo(
11032
- () => (projects.data ?? []).filter(
11033
- (p) => !!me && p.created_by === me
11214
+ const by = breakdownOf(params);
11215
+ const { usages, isLoading, error } = useUsageResponses(params, enabled);
11216
+ const workspaces = useWorkspaces({
11217
+ enabled: enabled && (by === "user" || by === "workspace")
11218
+ });
11219
+ const names = useMemo(
11220
+ () => usageNamesOf(workspaces.data ?? []),
11221
+ [workspaces.data]
11222
+ );
11223
+ const rows = useMemo(
11224
+ () => usages?.flatMap(
11225
+ (u) => u.usage ? usageBreakdownRows(u.usage, u.project.name, by, names, l.by.total) : []
11034
11226
  ),
11035
- [projects.data, me]
11227
+ [usages, by, names, l.by.total]
11036
11228
  );
11037
- const results = useQueries({
11038
- queries: list.map((p) => ({
11039
- queryKey: arbiQueryKeys.projectUsage(p.external_id, monthsBack),
11040
- queryFn: () => arbi.projects.usage(p.external_id, monthsBack),
11041
- enabled: enabled && arbi.isLoggedIn,
11042
- retry: false
11043
- }))
11044
- });
11045
- const signature = results.map((r) => `${r.status}:${r.dataUpdatedAt}`).join("|");
11046
- const rows = useMemo(() => {
11047
- if (!projects.data || !me || results.some((r) => r.isLoading)) return void 0;
11048
- return results.flatMap(
11049
- (r, i) => r.data ? usageRows(r.data, list[i].name) : []
11050
- );
11051
- }, [projects.data, me, signature]);
11052
- return {
11053
- rows,
11054
- isLoading: projects.isLoading || user.isLoading || results.some((r) => r.isLoading),
11055
- // One project's usage failing (not its owner after all, a hiccup) leaves it out.
11056
- error: projects.error ?? user.error ?? null
11057
- };
11229
+ return { rows, isLoading, error };
11058
11230
  }
11059
11231
  });
11060
11232
  }
@@ -11121,6 +11293,7 @@ function createWorkspacesSource(labels) {
11121
11293
  // src/datasets/registry.ts
11122
11294
  var BUILTIN_DATA_SOURCES = [
11123
11295
  createUsageSource(),
11296
+ createUsageBreakdownSource(),
11124
11297
  createDocumentsSource(),
11125
11298
  createConversationsSource(),
11126
11299
  createProjectsSource(),
@@ -16885,6 +17058,6 @@ function useRateSupportTicket() {
16885
17058
  });
16886
17059
  }
16887
17060
 
16888
- export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUTO_CHAT_MODEL, ActivityFeed, AiAnswer, AppleIcon, ArbiHost2 as ArbiHost, ArbiWebSocketProvider, ArtifactCanvas, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, CONVERSATION_SWITCH_MEASURE, ChatBubble, CitationRenderer, ConversationList, ConversationScope, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ACTIVITY_SOURCE_LABELS, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_FACTS_SOURCE_LABELS, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_TAGS_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKFLOWS_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DateSeparator, DmAvatar, DmComposer, DocumentReview, DraftTitleControls, EMPTY_GROUP_LABEL, FACTS_SEARCH_VIEW, FIRST_TOKEN_MEASURE, GitHubIcon, ImageCropModal, ImageCropper, LIVE_UPDATE_TYPES, LinkedInIcon, MAIL_DRAFT_REPLACED_EVENT, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MIN_NARRATION_DWELL_MS, MODEL_GROUP_LABELS, MailOfflineUnavailableError, MessageArtifactCard, OUTBOX_FOLDER, PENDING_SYNC_PREDICATE, POLL_EVERY_MS, PhotoCapture, REMOTE_CONTROL_VIEW, RUN_WINDOW_MS, SIGNATURE_NOTIFICATION_TYPES, SLOW_AFTER_MS, STILL_WORKING, StorageActionError, TRANSFER_POLL_MS, TaskThreadPendingError, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, VideoCapture, VoiceNoteRecorder, WORK_NOTIFICATION_LABELS, WORK_OFFLINE_VIEW, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiMailClient, archiveName, archivedWorkspaceMessage, assistantLabels, bindThreadDocument, boundDocumentOf, bucketOf2 as bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, calendarOfflineSupport, callNotificationMeta, captureFrameAsBlob, claimOfflineQueue, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, computeOnline, confirmLosingOfflineMail, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, conversationsPath, createActivitySource, createArbiQueryClient, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createFactsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createTagsSource, createUsageSource, createWorkflowsSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, defineSkillPack, deleteLocalDraft, deleteOutboxItem, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, documentMailAttachment, docxMentionMeta, downloadRecoveryFile, enqueueOutbox, ensureAssistantMessageLoading, extractZipFile, fallbackFileName, fileAttachment, filesFromDrop, fillTimeGaps, filterRows, flushStreamingTokens, forgetUploadedDocumentFolder, formatConfigValidationError, formatIdentityPrice, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, groupMailConversations, hasPendingFinalCommit, hasPendingMailChange, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateConversationActivity, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isDeploymentAdmin, isDeploymentUserNotification, isFullConfig, isMessageRunning, isNetworkFailure, isNotificationRow, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkingOffline, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, loadAttachment as loadOfflineMailAttachment, mailConversationKey, mailDraftIdFromContent, mailJson, mailThreadRoot, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nativeThreadKeys, nextAliasSuggestion, notificationUserName, offlineMailReads, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, queueMailChange, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, remoteControlActions, remoteControlStateOf, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, retryOutboxItem, rollbackOptimisticDocumentEdit, safePortalUrl, saveLocalDraft, sendMailFile, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, setWorkOfflineIn, signatureNotificationPhrase, signatureRequestMeta, skillPackPrompt, subscribeDocumentReads, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, threadPath, titleFromQuestion, toChatCitations, toMailConversation, toNotificationPreferences, toRedlineMarkdown, toRemoteControlRequest, toShellWorkspace, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, useActOnStep, useActiveConfigId, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAuthorizeLimits, useAutoSendDraft, useBookingPages, useBootTimeout, useBranchNavigation, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOfflineRuntime, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCameraStream, useCanEditShared, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useConfigSchema, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectedMailFiling, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationSettings, useConversationTurn, useConversationWorkspace, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteWorkflow, useDeleteWorkspaces, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useExportDatabase, useFacts, useFactsSearch, useFetchCalendarEvent, useFileWaitingNativeMail, useFinaliseTranslation, useFindTime, useFlushOutbox, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, useLocalDrafts, useMailAccounts, useMailAttachmentText, useMailCache, useMailClient, useMailConversations, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFiling, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailThread, useMailUnlock, useMailWorkspacePrimer, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNativeMailFiling, useNativeThreadKeys, useNotificationPreferences, useNotifications, useOfflineDocumentIds, useOfflineMailActive, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingMailChanges, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, usePublishCalendar, useRateSupportTicket, useReadMailMessage, useReconnect, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshProject, useRelatedDocuments, useRemoteControl, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendMail, useSessions, useSetDeploymentHouseTemplate, useSetNativeMailFiling, useSetSkillVisibility, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStopMailFilingRule, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSupportTicket, useSupportTickets, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useSyncOfflineMailbox, useTerminateSession, useThinkingContent, useThreadDocument, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useVideoRecorder, useWorkItems, useWorkOffline, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeCalendarOffline, wipeOfflineDocuments, withRelativePath, workflowRunTitle, workflowStepOf, workspaceHouseTemplateId };
17061
+ export { AGENT_CONTROL_COMMANDS, AGGREGATE_FIELDS, ALLOWED_PORTAL_ORIGINS, ARCHIVE_POLL_MS, ASSISTANT_MENTION_LABEL, AUTO_CHAT_MODEL, ActivityFeed, AiAnswer, AppleIcon, ArbiHost2 as ArbiHost, ArbiWebSocketProvider, ArtifactCanvas, BOOT_GATE_TIMEOUT_MS, BOX_SEAT_REFUSED, BOX_SEAT_REFUSED_ACTION, BOX_SEAT_REFUSED_TITLE, BUILTIN_DATA_SOURCES, CONVERSATION_SWITCH_MEASURE, ChatBubble, CitationRenderer, ConversationList, ConversationScope, DATABASE_RELATION_PICK_LIMIT, DATABASE_ROWS_PAGE, DEFAULT_ACTIVITY_SOURCE_LABELS, DEFAULT_ASPECT_OPTIONS, DEFAULT_CONVERSATIONS_SOURCE_LABELS, DEFAULT_DATABASE_SOURCE_LABELS, DEFAULT_DOCUMENTS_SOURCE_LABELS, DEFAULT_FACTS_SOURCE_LABELS, DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, DEFAULT_PROJECTS_SOURCE_LABELS, DEFAULT_TAGS_SOURCE_LABELS, DEFAULT_USAGE_BREAKDOWN_SOURCE_LABELS, DEFAULT_USAGE_SOURCE_LABELS, DEFAULT_WORKFLOWS_SOURCE_LABELS, DEFAULT_WORKSPACES_SOURCE_LABELS, DateSeparator, DmAvatar, DmComposer, DocumentReview, DraftTitleControls, EMPTY_GROUP_LABEL, FACTS_SEARCH_VIEW, FIRST_TOKEN_MEASURE, GitHubIcon, ImageCropModal, ImageCropper, LIVE_UPDATE_TYPES, LinkedInIcon, MAIL_DRAFT_REPLACED_EVENT, MAX_DASHBOARD_SPEC_CHARS, MAX_SERIES, MIN_NARRATION_DWELL_MS, MODEL_GROUP_LABELS, MailOfflineUnavailableError, MessageArtifactCard, OUTBOX_FOLDER, PENDING_SYNC_PREDICATE, POLL_EVERY_MS, PhotoCapture, REMOTE_CONTROL_VIEW, RUN_WINDOW_MS, SIGNATURE_NOTIFICATION_TYPES, SLOW_AFTER_MS, STILL_WORKING, StorageActionError, TRANSFER_POLL_MS, TaskThreadPendingError, TypingIndicator, UPLOAD_ACCEPT, UPLOAD_MAX_FILE_SIZE, VideoCapture, VoiceNoteRecorder, WORK_NOTIFICATION_LABELS, WORK_OFFLINE_VIEW, __resetPendingFinalCommitsForTests, __resetStreamingTokenBufferForTests, accountPath, addAssistantMessageToCache, addUserMessageToCache, adoptNewChatDocument, aggregateDataset, aliasTakenMessage, allConversationThreads, annotateThread, announceMailDraftReplaced, appendTokenToMessage, applyConversationEvent, applyFinalContextToMessage, applyLiveUpdate, applyNotificationRow, applyOptimisticDocumentEdit, applyOutputItemToMessage, applyTaskEvent, arbiMailClient, archiveName, archivedWorkspaceMessage, assistantLabels, bindThreadDocument, boundDocumentOf, bucketOf2 as bucketOf, bucketRange, buildDocumentMetadataRows, buildMentionCandidates, buildPendingFirstTurn, buildPendingSyncItem, buildWorkspaceArchive, cacheThreadBinding, cachedAssistantMode, cachedMentionCandidates, cachedQuotaUsedUp, calendarNotificationMeta, calendarOfflineSupport, callNotificationMeta, captureFrameAsBlob, claimOfflineQueue, clearLoadingState, clearUserInputRequest, commitFinalMessage, completeQueuedUserMessageByContent, computeOnline, confirmLosingOfflineMail, connectOAuthCalendarAccount, connectorErrorStatus, connectorReturnTo, conversationsPath, createActivitySource, createArbiQueryClient, createConversationsSource, createDataSourceRegistry, createDatabaseSource, createDocumentsSource, createFactsSource, createMailClient, createMemoryDashboardStore, createProjectsSource, createSkillPack, createStreamHandlers, createTagsSource, createUsageBreakdownSource, createUsageSource, createWorkflowsSource, createWorkspaceSwitch, createWorkspacesSource, cropImage, dayKey, defaultMailAlias, defineRowsSource, defineSkillPack, deleteLocalDraft, deleteOutboxItem, deploymentUserMeta, describeActivity, describeCalendarNotification, describeServerNotification, discardStreamingTokensForMessage, disconnectAttachedRun, documentActivityMeta, documentActivityPhrase, documentDisplayName, documentMailAttachment, docxMentionMeta, downloadRecoveryFile, enqueueOutbox, ensureAssistantMessageLoading, extractZipFile, fallbackFileName, fileAttachment, filesFromDrop, fillTimeGaps, filterRows, flushStreamingTokens, forgetUploadedDocumentFolder, formatConfigValidationError, formatIdentityPrice, getInterjectionText, getNotificationTypeMeta, getOfflineDocument, getOrphanedLastMessage, getRelatedLabels, getRelatedTotal, getRunStartedAt, getThreadsQueryKey, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, groupMailConversations, hasPendingFinalCommit, hasPendingMailChange, hasVideoTrack, identityStepFor, inputRequestTitle, invalidateCalendarEvents, invalidateCalendars, invalidateConversationActivity, isActivityKey, isAliasTakenError, isArchiveMoving, isCommentToPeople, isDeploymentAdmin, isDeploymentUserNotification, isFullConfig, isMessageRunning, isNetworkFailure, isNotificationRow, isOrphanedUserMessage, isQueuedCalendarWrite, isReplayableArbiMutation, isSignatureNotificationType, isTableViewOf, isTransferFinished, isTransferResumable, isWorkingOffline, isWorkspaceArchivedError, isWorkspaceNotificationType, isZipFile, loadOfflineDocument, loadAttachment as loadOfflineMailAttachment, mailConversationKey, mailDraftIdFromContent, mailJson, mailThreadRoot, markMessageAsFailed, markNarrationSettled, migrateLegacyThreadDocuments, mountDiditVerification, nativeThreadKeys, nextAliasSuggestion, notificationUserName, offlineMailReads, openAccessRequest, parseActivityContent, parseDashboardSpec, parseDeleteAccountBlockers, pendingChatModelSave, peopleDirectory, personOfUser, pickRecentWorkspaces, prepareUploadFiles, queryOfChart, queueMailChange, recordsOf, redlineStats, refuseChatWhenOffline, registerArbiMutationDefaults, registerAttachedRun, remoteControlActions, remoteControlStateOf, removeSettledNarration, requestPersistentStorage, resetCalendarAccountSyncState, resetMessageContent, resolveActiveWorkspace, resolveConfigModel, resolveReplyTarget, retryOutboxItem, rollbackOptimisticDocumentEdit, safePortalUrl, saveLocalDraft, sendMailFile, serializeDashboardSpec, serverNotificationBellEntry, setMessageContent, setUserInputRequest, setWorkOfflineIn, signatureNotificationPhrase, signatureRequestMeta, skillPackPrompt, subscribeDocumentReads, supportsHouseTemplates, textToArtifact, threadBinding, threadEndingAtContains, threadPath, titleFromQuestion, toChatCitations, toMailConversation, toNotificationPreferences, toRedlineMarkdown, toRemoteControlRequest, toShellWorkspace, updateMessageWithMetadata, updateUserMessageInCache, updateUserMessageStateInCache, uploadFolderOf, uploadedDocumentFolder, useActOnStep, useActiveConfigId, useAddChatMembers, useAddDatabaseRows, useAddHolidayCalendar, useAddProjectAddonBlock, useAddWorkspaceMembers, useAddonQuote, useAgentChats, useAgentConfig, useAgentDmStatus, useAgentModels, useAgentRunControl, useAgentSession, useAgentWorkspaces, useAiTask, useAnswerAgentQuestion, useApplyChatModel, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArchiveProgressPolling, useArchiveWorkspace, useAskAgain, useAssignDocTags, useAuthorizeLimits, useAutoSendDraft, useBookingPages, useBootTimeout, useBranchNavigation, useCalDavProfiles, useCalendarAccounts, useCalendarEvent, useCalendarEventByUid, useCalendarEvents, useCalendarInvitations, useCalendarOfflineRuntime, useCalendarOutbox, useCalendarOverlays, useCalendarSettings, useCalendarShares, useCalendarSupport, useCalendars, useCameraStream, useCanEditShared, useCancelDriveSync, useCancelMailboxSync, useCancelManyPendingSync, useCancelProjectSubscription, useCancelWorkspaceTransfer, useChangeProjectPlan, useChargeWatch, useChatArrivals, useChatPost, useChatSummaries, useChatThread, useChatUnreadTotal, useChats, useClaimNativeAlias, useClaimSecureMail, useCloseAgentSession, useConfigSchema, useConfirmEmailChange, useConnectCalDavAccount, useConnectMailAccount, useConnectOAuthAccount, useConnectRunStream, useConnectedMailFiling, useConnectorAutoSync, useConnectorCatalog, useConnectorVendorVisibility, useContacts, useConversation, useConversationActions, useConversationActivity, useConversationData, useConversationDocuments, useConversationIsShared, useConversationItems, useConversationPendingAuth, useConversationSearch, useConversationSettings, useConversationTurn, useConversationWorkspace, useCreateAgent, useCreateCalendar, useCreateContact, useCreateDatabase, useCreateEvent, useCreateFact, useCreateFacts, useCreateGroupChat, useCreateProject, useCreateProjectCheckout, useCreateRoom, useCreateWork, useCreateWorkflow, useCreateWorkspace, useCurrentSessionId, useCurrentWorkspace, useDashboardStore, useDataSources, useDatabase, useDatabaseAggregate, useDatabaseDashboardStore, useDatabaseRows, useDatabases, useDecideCounter, useDeleteAccount, useDeleteAccountFlow, useDeleteBookingPage, useDeleteCalendar, useDeleteChatMessage, useDeleteConfig, useDeleteContact, useDeleteConversation, useDeleteDashboard, useDeleteDatabase, useDeleteDatabaseRows, useDeleteDocuments, useDeleteEvent, useDeleteFact, useDeleteMessage, useDeleteNotifications, useDeleteProject, useDeleteSkill, useDeleteWorkflow, useDeleteWorkspaces, useDirectModelUsage, useDisconnectCalendarAccount, useDisconnectConnector, useDisconnectMailAccount, useDisconnectSlack, useDismissedTips, useDocumentAutoAdd, useDocumentHostActions, useDocumentPendingSync, useDocumentThumbnails, useDocumentsSupport, useDownloadDocuments, useDriveFolderChildren, useDriveFolderDocCount, useDriveFolders, useDriveSyncEstimate, useDriveSyncProgress, useEmailChange, useEnableDriveSync, useEnableMailboxSync, useExportDatabase, useFacts, useFactsSearch, useFetchCalendarEvent, useFileWaitingNativeMail, useFinaliseTranslation, useFindTime, useFlushOutbox, useFollowThread, useFreeBusy, useGenerateAgentAvatar, useGenerateDocTags, useGrantAgentAccess, useHolidayCountries, useHouseTemplateCandidates, useIdentityVerification, useIdentityVerificationFlow, useImportCalendar, useImportContacts, useImportDatabase, useImportDatabaseRows, useInstallSkillPack, useInvalidateAfterTransfer, useInvalidateProjects, useInvalidateStorage, useInviteContacts, useIsSlow, useIsWorkspaceOwner, useKeepDocumentsOffline, useLinkContact, useLinkMentions, useLocalDrafts, useMailAccounts, useMailAttachmentText, useMailCache, useMailClient, useMailConversations, useMailDraftCompose, useMailDraftEditor, useMailDraftReplaced, useMailFiling, useMailFolders, useMailMessage, useMailMessages, useMailOnline, useMailPolicy, useMailProjects, useMailThread, useMailUnlock, useMailWorkspacePrimer, useMailboxFolders, useMailboxSyncProgress, useMarkChatRead, useMarkDocumentShared, useMarkNotificationsRead, useMcpTools, useMessageTimer, useModelConnections, useMoveEvent, useMoveWorkspaceToProject, useMyConnectors, useNativeMailFiling, useNativeThreadKeys, useNotificationPreferences, useNotifications, useOfflineDocumentIds, useOfflineMailActive, useOfflineMailRuntime, useOfflineMailSettings, useOfflineMailStatus, useOpenSelectedWorkspace, useOpenViewerDocumentId, useOutbox, usePanelDataset, usePassageQuotes, usePasswordChange, usePasswordChangeForm, usePendingMailChanges, usePendingSyncCounts, usePendingSyncItems, usePeople, usePeopleSearch, usePlanQuote, usePlanWork, usePlanWorkspaceTransfer, usePreviewProjectPlanChange, useProcessingTask, useProcessingTasks, useProducts, useProjectBillingPortal, useProjectConversationUsage, usePublishCalendar, useRateSupportTicket, useReadMailMessage, useReconnect, useRefreshCalendar, useRefreshConnectorsOnRunEnd, useRefreshProject, useRelatedDocuments, useRemoteControl, useRemoveChatMember, useRemoveDocTags, useRemoveDocumentsOffline, useRemoveModelConnection, useRemoveWorkspaceMembers, useRenameChat, useRenameFolder, useRequestEmailChange, useRequestWorkspaceAccess, useRespondToEvent, useResumeCalendarAccountConnect, useResumeWorkspaceTransfer, useRevokeAgentAccess, useRooms, useRunConversation, useRunWorkflow, useSaveAgentConfig, useSaveBookingPage, useSaveCalendarSettings, useSaveConfig, useSaveConfigField, useSaveDashboard, useSaveMailDraft, useSaveModelConnection, useSaveSkill, useSavedDashboards, useSearchContacts, useSearchDatabaseRows, useSearchFacts, useSemanticSearch, useSendMail, useSessions, useSetDeploymentHouseTemplate, useSetNativeMailFiling, useSetSkillVisibility, useSetWorkspaceHouseTemplate, useSetWorkspaceMemberRoles, useShareCalendar, useShellWorkspaces, useSignOut, useSkillSource, useSkills, useSlackConnection, useStartAgentSession, useStartCalendarAccountOAuth, useStartTaskQuery, useStartWorkspaceTransfer, useStopMailFilingRule, useStorageActions, useStorageItemNames, useStorageItems, useStorageProjects, useStorageSnapshots, useStreamHandlers, useSubscribeCalendar, useSupportTicket, useSupportTickets, useSwitchWorkspace, useSyncAccountsOnOpen, useSyncCalendarAccount, useSyncOfflineMailbox, useTerminateSession, useThinkingContent, useThreadDocument, useTriggerDriveSync, useTriggerMailboxSync, useUnarchiveWorkspace, useUnlockModelConnections, useUnreadByPeer, useUnshareCalendar, useUpdateCalendar, useUpdateCalendarAccount, useUpdateContact, useUpdateConversation, useUpdateDatabase, useUpdateDatabaseRow, useUpdateDocTag, useUpdateDocuments, useUpdateEvent, useUpdateFact, useUpdateProjectAddonSettings, useUpdateProjectFields, useUpdateProjectNextPeriodAddons, useUpdateWorkflow, useUpdateWorkspace, useUploadDocuments, useUploadFiles, useUploadFromUrls, useUploadSkillFiles, useUploadUrls, useVideoRecorder, useWorkItems, useWorkOffline, useWorkflowRuns, useWorkflows, useWorkspaceArchive, useWorkspaceDocs, useWorkspaceExportDownload, useWorkspaceNotificationLevel, useWorkspaceProcessing, useWorkspaceRole, useWorkspaceTransfer, useWorkspaceTransfers, useWorkspaceTrash, useWorkspaceUsers, userDisplayName, userInitials, viewsOfTable, waitForResponseId, wipeCalendarOffline, wipeOfflineDocuments, withRelativePath, workflowRunTitle, workflowStepOf, workspaceHouseTemplateId };
16889
17062
  //# sourceMappingURL=index.js.map
16890
17063
  //# sourceMappingURL=index.js.map