@arbidocs/react 0.4.2 → 0.4.3

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.d.cts CHANGED
@@ -40,149 +40,62 @@ interface ArbiProviderProps extends ArbiOptions {
40
40
  }
41
41
  declare function ArbiProvider({ children, ...options }: ArbiProviderProps): React$1.JSX.Element;
42
42
 
43
- interface ArbiChatTheme {
44
- /** Primary action color — buttons, links (default: '#00adef' ARBI cyan) */
45
- primaryColor: string;
46
- /** Widget background (default: '#ffffff') */
47
- backgroundColor: string;
48
- /** Surface / muted background (default: '#f9fafb') */
49
- surfaceColor: string;
50
- /** Primary text color (default: '#111827') */
51
- textColor: string;
52
- /** Secondary / muted text (default: '#6b7280') */
53
- mutedColor: string;
54
- /** Border color (default: '#e5e7eb') */
55
- borderColor: string;
56
- /** User message bubble background (default: '#f3f4f6') */
57
- userBubbleColor: string;
58
- /** User message text color (default: '#111827') */
59
- userBubbleTextColor: string;
60
- /** Assistant message bubble background (default: 'rgba(0, 173, 239, 0.08)') */
61
- assistantBubbleColor: string;
62
- /** Assistant message text color (default: '#111827') */
63
- assistantBubbleTextColor: string;
64
- /** Border radius for the outer container (default: '8px') */
65
- borderRadius: string;
66
- /** Font family stack (default: system fonts) */
67
- fontFamily: string;
68
- }
69
- interface ArbiChatLabels {
70
- /** Header title (default: 'Chat') */
71
- title?: string;
72
- /** Email field label (default: 'Email') */
73
- email?: string;
74
- /** Password field label (default: 'Password') */
75
- password?: string;
76
- /** Login button text (default: 'Log in') */
77
- loginButton?: string;
78
- /** Logging in button text (default: 'Logging in...') */
79
- loginButtonLoading?: string;
80
- /** Register button text (default: 'Create account') */
81
- registerButton?: string;
82
- /** Send verification code button text (default: 'Email me a code') */
83
- sendCodeButton?: string;
84
- /** Already have a code button text (default: 'I have an invitation code') */
85
- haveCodeButton?: string;
86
- /** Verification code field label (default: 'Verification code') */
87
- verificationCode?: string;
88
- /** Confirm password field label (default: 'Confirm password') */
89
- confirmPassword?: string;
90
- /** First name field label (default: 'First name') */
91
- firstName?: string;
92
- /** Last name field label (default: 'Last name') */
93
- lastName?: string;
94
- /** Link to switch to register view (default: 'Create account') */
95
- switchToRegister?: string;
96
- /** Link to switch back to login view (default: 'Back to login') */
97
- switchToLogin?: string;
98
- /** Workspace selector label (default: 'Select a workspace') */
99
- selectWorkspace?: string;
100
- /** Workspace selector placeholder (default: 'Choose...') */
101
- workspacePlaceholder?: string;
102
- /** Continue button after workspace select (default: 'Continue') */
103
- continueButton?: string;
104
- /** Create workspace button label (default: 'Create new workspace') */
105
- createWorkspace?: string;
106
- /** Workspace name field label (default: 'Workspace name') */
107
- workspaceName?: string;
108
- /** Generic create button text (default: 'Create') */
109
- createButton?: string;
110
- /** Change workspace link text (default: 'Change workspace') */
111
- changeWorkspace?: string;
112
- /** Documents section label (default: 'Documents') */
113
- documents?: string;
114
- /** Send button text (default: 'Send') */
115
- sendButton?: string;
116
- /** Input placeholder (default: 'Ask a question...') */
117
- placeholder?: string;
118
- /** Upload button text (default: 'Upload') */
119
- uploadButton?: string;
120
- /** Uploading state text (default: 'Uploading...') */
121
- uploading?: string;
122
- /** Empty state when no documents (default: 'No documents found in this workspace.') */
123
- emptyNoDocs?: string;
124
- /** Empty state when no docs selected (default: 'Select at least one document to start chatting.') */
125
- emptyNoSelection?: string;
126
- /** Empty state ready to chat (default: 'Ask a question about your documents.') */
127
- emptyReady?: string;
128
- }
129
- interface ArbiChatProps {
130
- /** Backend URL (required) */
131
- url: string;
132
- /** Skip workspace selection — go straight to chat */
133
- workspaceId?: string;
134
- /** Customize colors and appearance */
135
- theme?: Partial<ArbiChatTheme>;
136
- /** Customize text labels */
137
- labels?: ArbiChatLabels;
138
- /** Widget width (default: '400px') */
139
- width?: string | number;
140
- /** Widget height (default: '600px') */
141
- height?: string | number;
142
- }
143
-
144
- /** Props for {@link ArbiChatPanel} — the provider-less embeddable panel. */
145
- interface ArbiChatPanelProps {
146
- /** Skip workspace selection — go straight to chat */
147
- workspaceId?: string;
148
- /** Customize colors and appearance */
149
- theme?: Partial<ArbiChatTheme>;
150
- /** Customize text labels */
151
- labels?: ArbiChatLabels;
152
- /** Widget width (default: '100%') */
153
- width?: string | number;
154
- /** Widget height (default: '100%') */
155
- height?: string | number;
43
+ type ArbiChatRole = 'user' | 'assistant';
44
+ type ArbiChatMessageStatus = 'streaming' | 'complete' | 'error';
45
+ interface ArbiChatMessage {
46
+ id: string;
47
+ role: ArbiChatRole;
48
+ /** Markdown for an assistant message, plain text for a user message. */
49
+ content: string;
50
+ status: ArbiChatMessageStatus;
51
+ /** Why an assistant message failed. */
52
+ error?: string;
53
+ /** Agent steps (tool calls, reasoning) the answer took. */
54
+ stepCount?: number;
156
55
  }
157
- /**
158
- * The ARBI chat panel **without** its own providers.
159
- *
160
- * Drop it inside an app that already renders `<ArbiProvider>` and a
161
- * `<QueryClientProvider>` to reuse the host's authenticated session — no second
162
- * login. When the ambient session is already signed in, the panel skips the
163
- * login screen and opens straight into chat.
164
- *
165
- * ```tsx
166
- * // inside your authenticated app tree
167
- * <ArbiChatPanel workspaceId="wrk-…" theme={myTheme} />
168
- * ```
169
- *
170
- * For a fully self-contained widget (its own providers + login), use {@link ArbiChat}.
171
- */
172
- declare function ArbiChatPanel({ workspaceId, theme: themeOverrides, labels: labelOverrides, width, height, }: ArbiChatPanelProps): React$1.JSX.Element;
173
- /**
174
- * Self-contained ARBI chat widget.
175
- *
176
- * Wraps its own QueryClientProvider and ArbiProvider so it works
177
- * anywhere — no setup required from the host app.
178
- *
179
- * ```tsx
180
- * import { ArbiChat } from '@arbidocs/react'
181
- *
182
- * <ArbiChat url="https://www.arbidocs.com" />
183
- * ```
184
- */
185
- declare function ArbiChat({ url, workspaceId, theme: themeOverrides, labels: labelOverrides, width, height, }: ArbiChatProps): React$1.JSX.Element;
56
+ interface ArbiChatThread {
57
+ id: string;
58
+ /** Auto-titled from the first question; empty until there is one. */
59
+ title: string;
60
+ }
61
+ interface ArbiChatDocument {
62
+ id: string;
63
+ name: string;
64
+ isSelected: boolean;
65
+ }
66
+ interface UseArbiChatOptions {
67
+ /** The workspace to chat in. Threads and the document selection reset when it changes. */
68
+ workspaceId?: string;
69
+ /** Assistant configuration or model id passed to every query. */
70
+ model?: string;
71
+ /** Longest auto-title in characters. Default 48. */
72
+ titleLength?: number;
73
+ }
74
+ interface ArbiChat {
75
+ threads: ArbiChatThread[];
76
+ activeThreadId: string;
77
+ messages: ArbiChatMessage[];
78
+ /** An answer is streaming. */
79
+ isRunning: boolean;
80
+ /** The last turn failed (the message list also carries the failed message). */
81
+ error: string | null;
82
+ documents: ArbiChatDocument[];
83
+ isLoadingDocuments: boolean;
84
+ isUploading: boolean;
85
+ uploadError: string | null;
86
+ send: (text: string) => Promise<void>;
87
+ /** Re-ask the question whose answer failed. */
88
+ retry: () => Promise<void>;
89
+ selectThread: (id: string) => void;
90
+ newThread: () => void;
91
+ deleteThread: (id: string) => void;
92
+ toggleDocument: (id: string) => void;
93
+ selectAllDocuments: () => void;
94
+ upload: (files: File[]) => Promise<void>;
95
+ }
96
+ /** First words of a question as a title: whole words, no trailing punctuation, ellipsis when cut. */
97
+ declare function titleFromQuestion(question: string, maxLength?: number): string;
98
+ declare function useArbiChat(options?: UseArbiChatOptions): ArbiChat;
186
99
 
187
100
  /** Animated typing indicator (three bouncing dots) */
188
101
  declare const TypingIndicator: React$1.NamedExoticComponent<object>;
@@ -336,6 +249,161 @@ declare function useArbiWsTask(docId: string): {
336
249
  */
337
250
  declare function useArbiDocumentSync(workspaceId: string | undefined): void;
338
251
 
252
+ /**
253
+ * Pure workspace adapters: an SDK `WorkspaceResponse` (or the host's own copy of it) to the view
254
+ * models the shell and the workspaces gallery show. No React state, no SDK calls, so a host that
255
+ * does not mount an `<ArbiProvider>` can use them too.
256
+ */
257
+
258
+ /** Workspace visibility: public = common, several members = shared, else private. */
259
+ type ShellWorkspaceKind = 'private' | 'shared' | 'common';
260
+ /** One face on a workspace card. */
261
+ interface ShellWorkspaceMember {
262
+ name: string;
263
+ picture?: string | null;
264
+ }
265
+ /**
266
+ * The fields of an SDK workspace the adapters read. Every field but the id and the name is
267
+ * optional, so the SDK's `WorkspaceResponse` and a host's own copy of it are both assignable.
268
+ */
269
+ interface ShellWorkspaceSource {
270
+ external_id: string;
271
+ name: string;
272
+ description?: string | null;
273
+ is_public?: boolean;
274
+ project_name?: string | null;
275
+ updated_at?: string;
276
+ shared_document_count?: number;
277
+ private_document_count?: number;
278
+ users?: ReadonlyArray<{
279
+ user?: {
280
+ given_name?: string | null;
281
+ family_name?: string | null;
282
+ email?: string | null;
283
+ picture?: string | null;
284
+ };
285
+ /** Set when the member is an agent: agents are not people and are left off the faces. */
286
+ agent_ext_id?: string | null;
287
+ }>;
288
+ }
289
+ /**
290
+ * A workspace as the shell and the gallery see it. Structurally a superset of blocks'
291
+ * `ShellWorkspace` and `WorkspaceSummary`, so it is passed to both unchanged.
292
+ */
293
+ interface ShellWorkspaceItem {
294
+ id: string;
295
+ name: string;
296
+ kind: ShellWorkspaceKind;
297
+ description?: string | null;
298
+ projectName?: string | null;
299
+ /** A rendered project pill; the host supplies it (see `decorate`). */
300
+ projectLine?: ReactNode;
301
+ /** Shared plus private documents. */
302
+ docCount: number;
303
+ /** People in the workspace (agents excluded). */
304
+ memberCount: number;
305
+ members: ShellWorkspaceMember[];
306
+ /** ISO timestamp. */
307
+ updatedAt?: string;
308
+ }
309
+ /** A workspace offered in the switcher menu. */
310
+ interface ShellRecentWorkspaceItem extends ShellWorkspaceItem {
311
+ /** Pre-formatted "last seen" text, when the host supplies `formatLastSeen`. */
312
+ lastSeen?: string;
313
+ }
314
+ /** Public, several members: shared. Otherwise private. */
315
+ declare function getWorkspaceKind(workspace: Pick<ShellWorkspaceSource, 'is_public' | 'users'>): ShellWorkspaceKind;
316
+ /** Adapt one SDK workspace to the shell and gallery view model. */
317
+ declare function toShellWorkspace(workspace: ShellWorkspaceSource): ShellWorkspaceItem;
318
+ /**
319
+ * The workspace the app is in. Order: the host's selection if it is in the list; else the first
320
+ * workspace of a live list; else the seed's active one; else the first workspace.
321
+ */
322
+ declare function resolveActiveWorkspace(items: readonly ShellWorkspaceItem[], selectedId: string | null | undefined, options?: {
323
+ isSeed?: boolean;
324
+ seedActiveId?: string;
325
+ }): ShellWorkspaceItem | undefined;
326
+ /** The other workspaces for the quick-switch menu, most recently opened first, capped. */
327
+ declare function pickRecentWorkspaces(items: readonly ShellWorkspaceItem[], activeId: string | undefined, options?: {
328
+ limit?: number;
329
+ lastOpened?: Readonly<Record<string, number>>;
330
+ formatLastSeen?: (timestamp: number) => string;
331
+ }): ShellRecentWorkspaceItem[];
332
+
333
+ /**
334
+ * `useShellWorkspaces`: the user's workspaces as the shell's switcher and the workspaces gallery
335
+ * show them, the one the app is in, and `open(workspace)`.
336
+ *
337
+ * Source-agnostic on purpose: the host hands in the list and the selection mechanism it already
338
+ * has (ARBI-frontend its React Query hook and workspace store, a connected app `useWorkspaces`
339
+ * plus the connection's `setWorkspace`). `useArbiShellWorkspaces` is the same hook wired to an
340
+ * `<ArbiProvider>`.
341
+ */
342
+
343
+ /** Workspaces to show while the account has none (a demo); the host owns the data. */
344
+ interface ShellWorkspaceSeed {
345
+ workspaces: readonly ShellWorkspaceItem[];
346
+ /** The seed workspace that counts as the current one when nothing is selected. */
347
+ activeId?: string;
348
+ }
349
+ interface UseShellWorkspacesOptions<S extends ShellWorkspaceSource = ShellWorkspaceSource> {
350
+ /** The account's workspaces (SDK shape). `undefined` while loading. */
351
+ workspaces: readonly S[] | undefined;
352
+ isLoading?: boolean;
353
+ /** The list query's error, passed through as `error`. */
354
+ loadError?: unknown;
355
+ /** The workspace the host says the app is in (the connection's selection). */
356
+ selectedId?: string | null;
357
+ /**
358
+ * Make the workspace the app's current one: open it on the server and record the selection.
359
+ * Throw (reject) to report failure. Called for EVERY open, including the current workspace, so
360
+ * a click on the current card still re-opens it and then navigates.
361
+ */
362
+ select: (workspace: ShellWorkspaceItem) => Promise<unknown> | unknown;
363
+ /** After a successful select: navigate, toast, close a menu. The "switch, then navigate" hook. */
364
+ onOpened?: (workspace: ShellWorkspaceItem) => void;
365
+ /** When select rejects. The active workspace is unchanged. Without it the error is in `error`. */
366
+ onOpenError?: (error: unknown, workspace: ShellWorkspaceItem) => void;
367
+ /** Demo list for an account that has no workspaces (never while loading). */
368
+ seed?: ShellWorkspaceSeed;
369
+ /** Host decoration per workspace, e.g. a rendered project pill. Merged over the adapter. */
370
+ decorate?: (item: ShellWorkspaceItem, source: S) => Partial<ShellWorkspaceItem>;
371
+ /** How many recent workspaces the switcher offers. Default 4. */
372
+ recentLimit?: number;
373
+ /** `workspace id -> epoch ms` last opened here; orders `recent`, falling back to `updatedAt`. */
374
+ lastOpened?: Readonly<Record<string, number>>;
375
+ /** Format a recency timestamp into `recent[].lastSeen`. */
376
+ formatLastSeen?: (timestamp: number) => string;
377
+ }
378
+ interface UseShellWorkspacesResult {
379
+ /** All workspaces: the account's, or the seed when it has none. */
380
+ items: ShellWorkspaceItem[];
381
+ /** The single current workspace; undefined only when there are no workspaces at all. */
382
+ active: ShellWorkspaceItem | undefined;
383
+ /** The other workspaces, most recently opened first, for the quick-switch menu. */
384
+ recent: ShellRecentWorkspaceItem[];
385
+ /** The account's own workspaces: false while `items` is the seed. */
386
+ isLive: boolean;
387
+ isLoading: boolean;
388
+ /** The list query's error or the last failed open; cleared by the next open. */
389
+ error: unknown;
390
+ /** Id of the workspace being opened, else null (for a spinner on its card). */
391
+ openingId: string | null;
392
+ /** Select the workspace (always, even the current one), then `onOpened`. False if select threw. */
393
+ open: (workspace: Pick<ShellWorkspaceItem, 'id'> | string) => Promise<boolean>;
394
+ }
395
+ declare function useShellWorkspaces<S extends ShellWorkspaceSource = ShellWorkspaceSource>(options: UseShellWorkspacesOptions<S>): UseShellWorkspacesResult;
396
+ interface UseArbiShellWorkspacesOptions extends Omit<UseShellWorkspacesOptions, 'workspaces' | 'isLoading' | 'loadError' | 'select'> {
397
+ /**
398
+ * Override how a workspace is made current. Default: `arbi.selectWorkspace(id)`, which opens it
399
+ * on the server for the session. A host with its own selection state (the connection layer's
400
+ * `setWorkspace`) passes it here.
401
+ */
402
+ select?: UseShellWorkspacesOptions['select'];
403
+ }
404
+ /** `useShellWorkspaces` over the `<ArbiProvider>`'s workspace list and `selectWorkspace`. */
405
+ declare function useArbiShellWorkspaces(options?: UseArbiShellWorkspacesOptions): UseShellWorkspacesResult;
406
+
339
407
  /**
340
408
  * Types for a document's parsed content (`GET /v1/document/{id}/parsed-{stage}`).
341
409
  *
@@ -998,6 +1066,27 @@ declare function textToArtifact(title: string, content: string, opts?: {
998
1066
  id?: string;
999
1067
  }): ArtifactEvent;
1000
1068
 
1069
+ /**
1070
+ * Citation markup normaliser.
1071
+ *
1072
+ * The backend marks a cited statement as a markdown link, `[statement](#cite-N)`, and the
1073
+ * statement can include the markdown that surrounds it: a list marker, a heading marker or the
1074
+ * opener of a bold/italic span whose closer sits after the link. Inside link text those tokens
1075
+ * are not parsed as block or inline syntax, so they show literally and break lists and bold:
1076
+ *
1077
+ * [- **Claimed quantum (by Claimant)](#cite-1):** **USD 47 million**
1078
+ *
1079
+ * `normalizeCitationMarkup` hoists the leading tokens out of the link text (and a trailing
1080
+ * emphasis closer after it), so the link only wraps the words:
1081
+ *
1082
+ * - **[Claimed quantum (by Claimant)](#cite-1):** **USD 47 million**
1083
+ *
1084
+ * It is conservative: emphasis that opens and closes inside the link text is valid markdown and
1085
+ * is left alone, an opener is only hoisted when its closer follows on the same line, and fenced
1086
+ * code blocks are never touched. The result is idempotent.
1087
+ */
1088
+ declare function normalizeCitationMarkup(markdown: string): string;
1089
+
1001
1090
  /**
1002
1091
  * Renders the live state of a single agentic task: streaming tokens, a "thinking"
1003
1092
  * indicator with the running step count, errors, and a grounded/cited footer with
@@ -2447,4 +2536,4 @@ interface ArbiUiState {
2447
2536
  }
2448
2537
  declare const useArbiUiStore: zustand.UseBoundStore<zustand.StoreApi<ArbiUiState>>;
2449
2538
 
2450
- export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, ArbiChat, type ArbiChatLabels, ArbiChatPanel, type ArbiChatPanelProps, type ArbiChatProps, type ArbiChatTheme, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, type DocumentCardMenuProps, DocumentGallery, type DocumentGalleryProps, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, EmlIcon, EntityIconComponent, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, type NotificationTypeMeta, OpenAIIcon, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PdfIcon, PhotoCapture, type PhotoCaptureProps, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type ThreadAccessors, type ThreadItem, type ToolResponses, TxtIcon, TypingIndicator, type UseAudioRecorderResult, type UseCameraStreamResult, type UseDirectMessagesResult, type UseVideoRecorderResult, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, captureFrameAsBlob, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getNotificationTypeMeta, getWorkspaceActionText, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, parseActivityContent, redlineStats, textToArtifact, toRedlineMarkdown, useActivity, useAgents, useAiTask, useArbi, useArbiConnected, useArbiDocumentSync, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCameraStream, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useVideoRecorder, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };
2539
+ export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, type ArbiChat, type ArbiChatDocument, type ArbiChatMessage, type ArbiChatMessageStatus, type ArbiChatRole, type ArbiChatThread, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, type DocumentCardMenuProps, DocumentGallery, type DocumentGalleryProps, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, EmlIcon, EntityIconComponent, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, type NotificationTypeMeta, OpenAIIcon, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PdfIcon, PhotoCapture, type PhotoCaptureProps, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type ShellRecentWorkspaceItem, type ShellWorkspaceItem, type ShellWorkspaceKind, type ShellWorkspaceMember, type ShellWorkspaceSeed, type ShellWorkspaceSource, type ThreadAccessors, type ThreadItem, type ToolResponses, TxtIcon, TypingIndicator, type UseArbiChatOptions, type UseArbiShellWorkspacesOptions, type UseAudioRecorderResult, type UseCameraStreamResult, type UseDirectMessagesResult, type UseShellWorkspacesOptions, type UseShellWorkspacesResult, type UseVideoRecorderResult, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, captureFrameAsBlob, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getNotificationTypeMeta, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, normalizeCitationMarkup, parseActivityContent, pickRecentWorkspaces, redlineStats, resolveActiveWorkspace, textToArtifact, titleFromQuestion, toRedlineMarkdown, toShellWorkspace, useActivity, useAgents, useAiTask, useArbi, useArbiChat, useArbiConnected, useArbiDocumentSync, useArbiShellWorkspaces, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCameraStream, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useShellWorkspaces, useTags, useTasks, useThumbnails, useUserUsageToday, useVideoRecorder, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };