@arbidocs/react 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/dist/artifacts/index.cjs +458 -0
- package/dist/artifacts/index.cjs.map +1 -0
- package/dist/artifacts/index.d.cts +276 -0
- package/dist/artifacts/index.d.ts +276 -0
- package/dist/artifacts/index.js +434 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/artifacts/redline-core.cjs +20 -0
- package/dist/artifacts/redline-core.cjs.map +1 -0
- package/dist/artifacts/redline-core.d.cts +36 -0
- package/dist/artifacts/redline-core.d.ts +36 -0
- package/dist/artifacts/redline-core.js +3 -0
- package/dist/artifacts/redline-core.js.map +1 -0
- package/dist/chunk-2DXS7L7M.cjs +302 -0
- package/dist/chunk-2DXS7L7M.cjs.map +1 -0
- package/dist/{chunk-ORKGCXG3.cjs → chunk-7BDGLRQX.cjs} +123 -427
- package/dist/chunk-7BDGLRQX.cjs.map +1 -0
- package/dist/chunk-7V7B7OEM.cjs +318 -0
- package/dist/chunk-7V7B7OEM.cjs.map +1 -0
- package/dist/{chunk-MIJRORQL.js → chunk-DVRJFLE7.js} +8 -302
- package/dist/chunk-DVRJFLE7.js.map +1 -0
- package/dist/{chunk-EJ2BMHYK.js → chunk-FSMIN5VX.js} +4 -3
- package/dist/chunk-FSMIN5VX.js.map +1 -0
- package/dist/chunk-H7ZZQ4ZV.js +305 -0
- package/dist/chunk-H7ZZQ4ZV.js.map +1 -0
- package/dist/{chunk-JKO3NR5L.js → chunk-HDCRPPBW.js} +5 -23
- package/dist/chunk-HDCRPPBW.js.map +1 -0
- package/dist/chunk-J4MX2W4H.js +26 -0
- package/dist/chunk-J4MX2W4H.js.map +1 -0
- package/dist/{chunk-6ALMBER7.js → chunk-N5SVBDLC.js} +4 -9
- package/dist/chunk-N5SVBDLC.js.map +1 -0
- package/dist/{chunk-RZQACYNQ.cjs → chunk-OBNTJEEO.cjs} +14 -20
- package/dist/chunk-OBNTJEEO.cjs.map +1 -0
- package/dist/{chunk-BXP6S34V.cjs → chunk-PGLV23SB.cjs} +13 -12
- package/dist/chunk-PGLV23SB.cjs.map +1 -0
- package/dist/chunk-RKWNX32A.js +299 -0
- package/dist/chunk-RKWNX32A.js.map +1 -0
- package/dist/chunk-S6A6FSG7.cjs +13 -0
- package/dist/chunk-S6A6FSG7.cjs.map +1 -0
- package/dist/chunk-SN5YV6FF.js +11 -0
- package/dist/chunk-SN5YV6FF.js.map +1 -0
- package/dist/{chunk-7IOCMCC5.cjs → chunk-TMPDW7J5.cjs} +3 -23
- package/dist/chunk-TMPDW7J5.cjs.map +1 -0
- package/dist/chunk-VJWAP2HJ.cjs +303 -0
- package/dist/chunk-VJWAP2HJ.cjs.map +1 -0
- package/dist/chunk-ZMTLGO3K.cjs +29 -0
- package/dist/chunk-ZMTLGO3K.cjs.map +1 -0
- package/dist/chunk-ZY53R6I4.js +276 -0
- package/dist/chunk-ZY53R6I4.js.map +1 -0
- package/dist/index.cjs +784 -612
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1522 -82
- package/dist/index.d.ts +1522 -82
- package/dist/index.js +327 -250
- package/dist/index.js.map +1 -1
- package/dist/shell/index.cjs +8 -7
- package/dist/shell/index.js +3 -2
- package/dist/ui/index.cjs +156 -154
- package/dist/ui/index.js +4 -2
- package/dist/viewers/index.cjs +9 -8
- package/dist/viewers/index.cjs.map +1 -1
- package/dist/viewers/index.js +3 -2
- package/dist/viewers/index.js.map +1 -1
- package/package.json +19 -3
- package/dist/chunk-6ALMBER7.js.map +0 -1
- package/dist/chunk-7IOCMCC5.cjs.map +0 -1
- package/dist/chunk-BXP6S34V.cjs.map +0 -1
- package/dist/chunk-EJ2BMHYK.js.map +0 -1
- package/dist/chunk-JKO3NR5L.js.map +0 -1
- package/dist/chunk-MIJRORQL.js.map +0 -1
- package/dist/chunk-ORKGCXG3.cjs.map +0 -1
- package/dist/chunk-RZQACYNQ.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
5
|
-
import {
|
|
6
|
-
export {
|
|
7
|
-
import {
|
|
8
|
-
export {
|
|
1
|
+
import { useDocuments, useAssistantQuery, arbiQueryKeys, useWorkspaces, useParsedDocument, useTags, useActivity, useThumbnails } from './chunk-ZY53R6I4.js';
|
|
2
|
+
export { DEFAULT_USD_PER_CREDIT, arbiQueryKeys, creditsToUsd, formatCredits, isUsageMetered, useActivity, useAgents, useAssistantQuery, useConfigs, useConversations, useDeleteAgents, useDocuments, useFacts, useHealth, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useWorkspaces } from './chunk-ZY53R6I4.js';
|
|
3
|
+
import { formatRelativeTime } from './chunk-FSMIN5VX.js';
|
|
4
|
+
export { DEFAULT_NOTIFY_TONE, NotificationBell, Toaster, formatRelativeTime, notify, seedNotifications, selectUnread, toast, useNotify } from './chunk-FSMIN5VX.js';
|
|
5
|
+
import { MarkMenu, AiMarkdown, Card, Button, Badge, TagEntity, Input, FILE_TYPE_COLORS, getEntityIcon, UserEntity, getEntityColorStyles, AgentBadge, Textarea, Label, Slider, Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DocumentEntity, DocumentCard, useAudioRecorder, MicWaveformIndicator, IconToggle, classifyMediaError, formatElapsed, PassageCard } from './chunk-DVRJFLE7.js';
|
|
6
|
+
export { AgentBadge, AiMarkdown, ArbiBotHeadIcon, AudIcon, Avatar, AvatarFallback, AvatarImage, BASE_COLORS, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DictateProvider, DocumentCard, DocumentEntity, ENTITY_MAPPINGS, EmlIcon, EntityIcon, EntityPill, FILE_TYPE_COLORS, HoverCard, HoverCardContent, HoverCardTrigger, IconToggle, ImgIcon, InlineMicButton, Input, Label, MarkMenu, MicRecordingOverlay, MicWaveformIndicator, NEUTRAL_GRAY, PLACEHOLDER_COLOR, PassageCard, PdfIcon, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PresenceLabel, Progress, ProjectEntity, RadioGroup, RadioGroupItem, RagDot, RelevanceDot, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Slider, StatusPill, Switch, TAG_TYPE_ICONS, TAG_TYPE_LABELS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagEntity, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserEntity, UserMenu, VISIBILITY_ICONS, VidIcon, VisibilityIcon, badgeVariants, buttonVariants, cardVariants, configureEntityRegistry, configureRagLabels, configureStatusRegistry, formatElapsed, getDocIcon, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceColor, toggleVariants, useAudioRecorder } from './chunk-DVRJFLE7.js';
|
|
7
|
+
import { normalizeCitationMarkup, MarkdownRenderer } from './chunk-H7ZZQ4ZV.js';
|
|
8
|
+
export { MarkdownRenderer, MarkdownStreamingContext, markdownBaseComponents, normalizeCitationMarkup, splitMarkdownBlocks } from './chunk-H7ZZQ4ZV.js';
|
|
9
|
+
import { ScrollArea, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator } from './chunk-N5SVBDLC.js';
|
|
10
|
+
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ScrollArea, ScrollBar } from './chunk-N5SVBDLC.js';
|
|
11
|
+
import { cn } from './chunk-SN5YV6FF.js';
|
|
12
|
+
export { cn } from './chunk-SN5YV6FF.js';
|
|
13
|
+
import { AudioViewer, ImageViewer, VideoViewer } from './chunk-HDCRPPBW.js';
|
|
14
|
+
import { useArbi } from './chunk-J4MX2W4H.js';
|
|
15
|
+
export { ArbiProvider, useArbi } from './chunk-J4MX2W4H.js';
|
|
9
16
|
import React, { memo, useState, createContext, useMemo, useCallback, useEffect, useRef, useLayoutEffect, useContext, useId, Fragment as Fragment$1 } from 'react';
|
|
10
|
-
import { useQuery, useMutation, useQueries, useQueryClient } from '@tanstack/react-query';
|
|
11
17
|
import { Link, Trash2, CheckCheck, Check, Loader2, AlertTriangle, ShieldCheck, Copy, Sparkles, FileText, GitCompareArrows, Download, Image as Image$1, Search, CornerDownLeft, X, ArrowLeft, Send, Tags, Crown, Info, Activity, Gauge, Gift, PartyPopper, UserCheck, MessageCircleMore, FileX2, FileCheck2, Pencil, FolderPlus, SquareArrowOutUpRight, MessagesSquare, ArrowRight, MoreHorizontal, SquarePen, Mic, Pause, Play, Square, RotateCcw, Camera, Circle } from 'lucide-react';
|
|
12
18
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
13
19
|
import { connectWithReconnect } from '@arbidocs/sdk/browser';
|
|
@@ -15,6 +21,7 @@ export { Arbi, ArbiError } from '@arbidocs/sdk/browser';
|
|
|
15
21
|
import { isMessageType } from '@arbidocs/client';
|
|
16
22
|
export { isMessageType } from '@arbidocs/client';
|
|
17
23
|
import { create } from 'zustand';
|
|
24
|
+
import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query';
|
|
18
25
|
import { diffWords } from 'diff';
|
|
19
26
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
20
27
|
import { createPortal } from 'react-dom';
|
|
@@ -23,241 +30,6 @@ import Cropper from 'react-easy-crop';
|
|
|
23
30
|
import { AgGridReact } from 'ag-grid-react';
|
|
24
31
|
import { ModuleRegistry, AllCommunityModule } from 'ag-grid-community';
|
|
25
32
|
|
|
26
|
-
var arbiQueryKeys = {
|
|
27
|
-
workspaces: () => ["arbi", "workspaces"],
|
|
28
|
-
documents: (workspaceId) => ["arbi", "documents", workspaceId],
|
|
29
|
-
conversations: (workspaceId) => ["arbi", "conversations", workspaceId],
|
|
30
|
-
tags: (workspaceId) => ["arbi", "tags", workspaceId],
|
|
31
|
-
thumbnails: (docIds) => ["arbi", "thumbnails", [...docIds].sort().join(",")],
|
|
32
|
-
parsedDoc: (docId, stage) => ["arbi", "parsedDoc", docId, stage],
|
|
33
|
-
agents: () => ["arbi", "agents"],
|
|
34
|
-
sessions: () => ["arbi", "sessions"],
|
|
35
|
-
health: () => ["arbi", "health"],
|
|
36
|
-
tasks: () => ["arbi", "tasks"],
|
|
37
|
-
facts: (workspaceId) => ["arbi", "facts", workspaceId],
|
|
38
|
-
configs: () => ["arbi", "configs"],
|
|
39
|
-
activity: () => ["arbi", "activity"],
|
|
40
|
-
projects: () => ["arbi", "projects"],
|
|
41
|
-
projectUsage: (projectExtId, monthsBack) => ["arbi", "projectUsage", projectExtId, monthsBack],
|
|
42
|
-
projectInvoices: (projectExtId) => ["arbi", "projectInvoices", projectExtId],
|
|
43
|
-
userUsageToday: () => ["arbi", "userUsageToday"]
|
|
44
|
-
};
|
|
45
|
-
function useWorkspaces(options) {
|
|
46
|
-
const arbi = useArbi();
|
|
47
|
-
return useQuery({
|
|
48
|
-
queryKey: arbiQueryKeys.workspaces(),
|
|
49
|
-
queryFn: () => arbi.workspaces.list(),
|
|
50
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
function useDocuments(workspaceId, options) {
|
|
54
|
-
const arbi = useArbi();
|
|
55
|
-
return useQuery({
|
|
56
|
-
queryKey: arbiQueryKeys.documents(workspaceId ?? ""),
|
|
57
|
-
queryFn: () => arbi.documents.list(),
|
|
58
|
-
enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function useConversations(workspaceId, options) {
|
|
62
|
-
const arbi = useArbi();
|
|
63
|
-
return useQuery({
|
|
64
|
-
queryKey: arbiQueryKeys.conversations(workspaceId ?? ""),
|
|
65
|
-
queryFn: () => arbi.conversations.list(),
|
|
66
|
-
enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
function useTags(workspaceId, options) {
|
|
70
|
-
const arbi = useArbi();
|
|
71
|
-
return useQuery({
|
|
72
|
-
queryKey: arbiQueryKeys.tags(workspaceId ?? ""),
|
|
73
|
-
queryFn: () => arbi.tags.list(),
|
|
74
|
-
enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
function useThumbnails(docIds, options) {
|
|
78
|
-
const arbi = useArbi();
|
|
79
|
-
return useQuery({
|
|
80
|
-
queryKey: arbiQueryKeys.thumbnails(docIds),
|
|
81
|
-
queryFn: () => arbi.documents.getThumbnails(docIds),
|
|
82
|
-
enabled: (options?.enabled ?? true) && docIds.length > 0 && arbi.hasWorkspace,
|
|
83
|
-
staleTime: 5 * 6e4
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
function useParsedDocument(docId, stage = "final", options) {
|
|
87
|
-
const arbi = useArbi();
|
|
88
|
-
return useQuery({
|
|
89
|
-
queryKey: arbiQueryKeys.parsedDoc(docId ?? "", stage),
|
|
90
|
-
queryFn: () => arbi.documents.getParsedContent(docId, stage),
|
|
91
|
-
enabled: (options?.enabled ?? true) && !!docId && arbi.hasWorkspace
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
function useAssistantQuery() {
|
|
95
|
-
const arbi = useArbi();
|
|
96
|
-
return useMutation({
|
|
97
|
-
mutationFn: ({ question, ...options }) => arbi.assistant.query(question, options)
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
function useAgents(options) {
|
|
101
|
-
const arbi = useArbi();
|
|
102
|
-
return useQuery({
|
|
103
|
-
queryKey: arbiQueryKeys.agents(),
|
|
104
|
-
queryFn: () => arbi.agents.list(),
|
|
105
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
function useDeleteAgents() {
|
|
109
|
-
const arbi = useArbi();
|
|
110
|
-
return useMutation({
|
|
111
|
-
mutationFn: ({ agentExtIds }) => arbi.agents.delete(agentExtIds)
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
function useSessions(options) {
|
|
115
|
-
const arbi = useArbi();
|
|
116
|
-
return useQuery({
|
|
117
|
-
queryKey: arbiQueryKeys.sessions(),
|
|
118
|
-
queryFn: () => arbi.sessions.list(),
|
|
119
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
function useHealth(options) {
|
|
123
|
-
const arbi = useArbi();
|
|
124
|
-
return useQuery({
|
|
125
|
-
queryKey: arbiQueryKeys.health(),
|
|
126
|
-
queryFn: () => arbi.health.check(),
|
|
127
|
-
enabled: options?.enabled
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
function useTasks(options) {
|
|
131
|
-
const arbi = useArbi();
|
|
132
|
-
return useQuery({
|
|
133
|
-
queryKey: arbiQueryKeys.tasks(),
|
|
134
|
-
queryFn: () => arbi.tasks.list(),
|
|
135
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
function useFacts(workspaceId, options) {
|
|
139
|
-
const arbi = useArbi();
|
|
140
|
-
return useQuery({
|
|
141
|
-
queryKey: arbiQueryKeys.facts(workspaceId ?? ""),
|
|
142
|
-
queryFn: () => arbi.facts.list({ pinnedOnly: options?.pinnedOnly }),
|
|
143
|
-
enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
function useConfigs(options) {
|
|
147
|
-
const arbi = useArbi();
|
|
148
|
-
return useQuery({
|
|
149
|
-
queryKey: arbiQueryKeys.configs(),
|
|
150
|
-
queryFn: () => arbi.agentConfig.list(),
|
|
151
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
function useActivity(options) {
|
|
155
|
-
const arbi = useArbi();
|
|
156
|
-
return useQuery({
|
|
157
|
-
queryKey: arbiQueryKeys.activity(),
|
|
158
|
-
queryFn: () => arbi.dm.listActivity({ limit: options?.limit, offset: options?.offset }),
|
|
159
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
function useProjects(options) {
|
|
163
|
-
const arbi = useArbi();
|
|
164
|
-
return useQuery({
|
|
165
|
-
queryKey: arbiQueryKeys.projects(),
|
|
166
|
-
queryFn: () => arbi.projects.list(),
|
|
167
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
function useProjectUsage(projectExtId, monthsBack = 0, options) {
|
|
171
|
-
const arbi = useArbi();
|
|
172
|
-
return useQuery({
|
|
173
|
-
queryKey: arbiQueryKeys.projectUsage(projectExtId ?? "", monthsBack),
|
|
174
|
-
queryFn: () => arbi.projects.usage(projectExtId, monthsBack),
|
|
175
|
-
enabled: (options?.enabled ?? true) && !!projectExtId && arbi.isLoggedIn
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
function useProjectsUsage(projectExtIds, monthsBack = 0, options) {
|
|
179
|
-
const arbi = useArbi();
|
|
180
|
-
const enabled = (options?.enabled ?? true) && arbi.isLoggedIn;
|
|
181
|
-
const results = useQueries({
|
|
182
|
-
queries: projectExtIds.map((id) => ({
|
|
183
|
-
queryKey: arbiQueryKeys.projectUsage(id, monthsBack),
|
|
184
|
-
queryFn: () => arbi.projects.usage(id, monthsBack),
|
|
185
|
-
enabled: enabled && !!id
|
|
186
|
-
}))
|
|
187
|
-
});
|
|
188
|
-
const signature = results.map((r) => `${r.status}:${r.dataUpdatedAt ?? 0}`).join("|");
|
|
189
|
-
return useMemo(() => {
|
|
190
|
-
const dailyMap = /* @__PURE__ */ new Map();
|
|
191
|
-
const modelMap = /* @__PURE__ */ new Map();
|
|
192
|
-
let totalSpend = 0;
|
|
193
|
-
let totalTokens = 0;
|
|
194
|
-
let totalRequests = 0;
|
|
195
|
-
for (const r of results) {
|
|
196
|
-
const d = r.data;
|
|
197
|
-
if (!d) continue;
|
|
198
|
-
totalSpend += d.total_spend ?? 0;
|
|
199
|
-
totalTokens += d.total_tokens ?? 0;
|
|
200
|
-
totalRequests += d.total_requests ?? 0;
|
|
201
|
-
for (const day of d.daily ?? []) {
|
|
202
|
-
const cur = dailyMap.get(day.date) ?? {
|
|
203
|
-
date: day.date,
|
|
204
|
-
spend: 0,
|
|
205
|
-
totalTokens: 0,
|
|
206
|
-
apiRequests: 0
|
|
207
|
-
};
|
|
208
|
-
cur.spend += day.spend ?? 0;
|
|
209
|
-
cur.totalTokens += day.total_tokens ?? 0;
|
|
210
|
-
cur.apiRequests += day.api_requests ?? 0;
|
|
211
|
-
dailyMap.set(day.date, cur);
|
|
212
|
-
}
|
|
213
|
-
for (const [model, mg] of Object.entries(d.model_groups ?? {})) {
|
|
214
|
-
const cur = modelMap.get(model) ?? {
|
|
215
|
-
model,
|
|
216
|
-
spend: 0,
|
|
217
|
-
totalTokens: 0,
|
|
218
|
-
promptTokens: 0,
|
|
219
|
-
completionTokens: 0,
|
|
220
|
-
successfulRequests: 0
|
|
221
|
-
};
|
|
222
|
-
cur.spend += mg.spend ?? 0;
|
|
223
|
-
cur.totalTokens += mg.total_tokens ?? 0;
|
|
224
|
-
cur.promptTokens += mg.prompt_tokens ?? 0;
|
|
225
|
-
cur.completionTokens += mg.completion_tokens ?? 0;
|
|
226
|
-
cur.successfulRequests += mg.successful_requests ?? 0;
|
|
227
|
-
modelMap.set(model, cur);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
return {
|
|
231
|
-
totalSpend,
|
|
232
|
-
totalTokens,
|
|
233
|
-
totalRequests,
|
|
234
|
-
daily: [...dailyMap.values()].sort((a, b) => a.date.localeCompare(b.date)),
|
|
235
|
-
modelGroups: [...modelMap.values()].sort(
|
|
236
|
-
(a, b) => b.spend - a.spend || b.totalTokens - a.totalTokens
|
|
237
|
-
),
|
|
238
|
-
isLoading: results.some((r) => r.isLoading),
|
|
239
|
-
isError: results.some((r) => r.isError)
|
|
240
|
-
};
|
|
241
|
-
}, [signature]);
|
|
242
|
-
}
|
|
243
|
-
function useProjectInvoices(projectExtId, options) {
|
|
244
|
-
const arbi = useArbi();
|
|
245
|
-
return useQuery({
|
|
246
|
-
queryKey: arbiQueryKeys.projectInvoices(projectExtId ?? ""),
|
|
247
|
-
queryFn: () => arbi.projects.invoices(projectExtId),
|
|
248
|
-
enabled: (options?.enabled ?? true) && !!projectExtId && arbi.isLoggedIn
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
function useUserUsageToday(options) {
|
|
252
|
-
const arbi = useArbi();
|
|
253
|
-
return useQuery({
|
|
254
|
-
queryKey: arbiQueryKeys.userUsageToday(),
|
|
255
|
-
queryFn: () => arbi.user.usageToday(),
|
|
256
|
-
enabled: options?.enabled ?? arbi.isLoggedIn
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// src/chat/useArbiChat.ts
|
|
261
33
|
var counter = 0;
|
|
262
34
|
var nextId = (prefix) => `${prefix}-${Date.now().toString(36)}-${(counter++).toString(36)}`;
|
|
263
35
|
var emptyThread = () => ({
|
|
@@ -890,6 +662,186 @@ function useArbiShellWorkspaces(options = {}) {
|
|
|
890
662
|
select: select ?? defaultSelect
|
|
891
663
|
});
|
|
892
664
|
}
|
|
665
|
+
function useCreateTask() {
|
|
666
|
+
const arbi = useArbi();
|
|
667
|
+
const qc = useQueryClient();
|
|
668
|
+
return useMutation({
|
|
669
|
+
mutationFn: (body) => arbi.tasks.create(body),
|
|
670
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.tasks() })
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
function useUpdateTask() {
|
|
674
|
+
const arbi = useArbi();
|
|
675
|
+
const qc = useQueryClient();
|
|
676
|
+
return useMutation({
|
|
677
|
+
mutationFn: ({ taskId, patch }) => arbi.tasks.update(taskId, patch),
|
|
678
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.tasks() })
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
function useRunTask() {
|
|
682
|
+
const arbi = useArbi();
|
|
683
|
+
const qc = useQueryClient();
|
|
684
|
+
return useMutation({
|
|
685
|
+
mutationFn: (taskId) => arbi.tasks.runWithAuth(taskId),
|
|
686
|
+
onSuccess: (_task, taskId) => Promise.all([
|
|
687
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.tasks() }),
|
|
688
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.taskRuns(taskId) })
|
|
689
|
+
])
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
function useDeleteTask() {
|
|
693
|
+
const arbi = useArbi();
|
|
694
|
+
const qc = useQueryClient();
|
|
695
|
+
return useMutation({
|
|
696
|
+
mutationFn: (taskId) => arbi.tasks.delete(taskId),
|
|
697
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.tasks() })
|
|
698
|
+
});
|
|
699
|
+
}
|
|
700
|
+
function useTaskRuns(taskId, options) {
|
|
701
|
+
const arbi = useArbi();
|
|
702
|
+
return useQuery({
|
|
703
|
+
queryKey: arbiQueryKeys.taskRuns(taskId ?? ""),
|
|
704
|
+
queryFn: () => arbi.tasks.listRuns(taskId),
|
|
705
|
+
enabled: (options?.enabled ?? true) && !!taskId && arbi.isLoggedIn,
|
|
706
|
+
refetchInterval: (q) => q.state.data?.some((r) => r.status === "running") ? 3e3 : false
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
function useCreateAgent() {
|
|
710
|
+
const arbi = useArbi();
|
|
711
|
+
const qc = useQueryClient();
|
|
712
|
+
return useMutation({
|
|
713
|
+
mutationFn: (name) => arbi.agents.create(name),
|
|
714
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.agents() })
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
function useAgentConfig(agentExtId, options) {
|
|
718
|
+
const arbi = useArbi();
|
|
719
|
+
return useQuery({
|
|
720
|
+
queryKey: arbiQueryKeys.agentConfig(agentExtId),
|
|
721
|
+
queryFn: async () => agentExtId ? await arbi.agents.getConfig(agentExtId) : await arbi.agentConfig.get("default"),
|
|
722
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn
|
|
723
|
+
});
|
|
724
|
+
}
|
|
725
|
+
function useAgentModels(options) {
|
|
726
|
+
const arbi = useArbi();
|
|
727
|
+
return useQuery({
|
|
728
|
+
queryKey: arbiQueryKeys.models(),
|
|
729
|
+
queryFn: async () => (await arbi.agentConfig.getModels()).models.map((m) => m.model_name),
|
|
730
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
function useSaveAgentConfig() {
|
|
734
|
+
const arbi = useArbi();
|
|
735
|
+
const qc = useQueryClient();
|
|
736
|
+
return useMutation({
|
|
737
|
+
mutationFn: async ({ agentExtId, title, sections }) => {
|
|
738
|
+
const pinned = await arbi.agents.getConfig(agentExtId);
|
|
739
|
+
const base = pinned ?? await arbi.agentConfig.get("default");
|
|
740
|
+
const merged = structuredClone(base);
|
|
741
|
+
for (const [section, params] of Object.entries(sections)) {
|
|
742
|
+
merged[section] = { ...merged[section] ?? {}, ...params };
|
|
743
|
+
}
|
|
744
|
+
return arbi.agentConfig.save({
|
|
745
|
+
...merged,
|
|
746
|
+
agent_ext_id: agentExtId,
|
|
747
|
+
title: title ?? `agent-${agentExtId}`
|
|
748
|
+
});
|
|
749
|
+
},
|
|
750
|
+
onSuccess: (_saved, { agentExtId }) => Promise.all([
|
|
751
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.configs() }),
|
|
752
|
+
qc.invalidateQueries({ queryKey: arbiQueryKeys.agentConfig(agentExtId) })
|
|
753
|
+
])
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
function useAgentWorkspaces(agentExtId, options) {
|
|
757
|
+
const arbi = useArbi();
|
|
758
|
+
return useQuery({
|
|
759
|
+
queryKey: arbiQueryKeys.agentWorkspaces(agentExtId ?? ""),
|
|
760
|
+
queryFn: () => arbi.agents.listWorkspaces(agentExtId),
|
|
761
|
+
enabled: (options?.enabled ?? true) && !!agentExtId && arbi.isLoggedIn
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
function useGrantAgentAccess() {
|
|
765
|
+
const arbi = useArbi();
|
|
766
|
+
const qc = useQueryClient();
|
|
767
|
+
return useMutation({
|
|
768
|
+
mutationFn: async ({
|
|
769
|
+
agentExtId,
|
|
770
|
+
workspaceId,
|
|
771
|
+
mode = { kind: "standing" }
|
|
772
|
+
}) => {
|
|
773
|
+
if (mode.kind === "temporary") {
|
|
774
|
+
return arbi.agents.grantTemporaryAccess(agentExtId, workspaceId, mode.ttlSeconds);
|
|
775
|
+
}
|
|
776
|
+
const agent = (await arbi.agents.list()).find((a) => a.external_id === agentExtId);
|
|
777
|
+
if (!agent?.email) throw new Error("The agent's address is unknown.");
|
|
778
|
+
return arbi.workspaces.grantAccess({ workspaceId, emails: [agent.email] });
|
|
779
|
+
},
|
|
780
|
+
onSuccess: (_res, { agentExtId }) => qc.invalidateQueries({ queryKey: arbiQueryKeys.agentWorkspaces(agentExtId) })
|
|
781
|
+
});
|
|
782
|
+
}
|
|
783
|
+
function useRevokeAgentAccess() {
|
|
784
|
+
const arbi = useArbi();
|
|
785
|
+
const qc = useQueryClient();
|
|
786
|
+
return useMutation({
|
|
787
|
+
mutationFn: async ({
|
|
788
|
+
agentExtId,
|
|
789
|
+
workspaceId
|
|
790
|
+
}) => {
|
|
791
|
+
const previous = arbi.hasWorkspace ? arbi.getWorkspaceId() : null;
|
|
792
|
+
await arbi.selectWorkspace(workspaceId);
|
|
793
|
+
try {
|
|
794
|
+
await arbi.workspaces.removeUsers([agentExtId]);
|
|
795
|
+
} finally {
|
|
796
|
+
if (previous && previous !== workspaceId) await arbi.selectWorkspace(previous);
|
|
797
|
+
}
|
|
798
|
+
},
|
|
799
|
+
onSuccess: (_res, { agentExtId }) => qc.invalidateQueries({ queryKey: arbiQueryKeys.agentWorkspaces(agentExtId) })
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
function useSkills(options) {
|
|
803
|
+
const arbi = useArbi();
|
|
804
|
+
return useQuery({
|
|
805
|
+
queryKey: [...arbiQueryKeys.skills(), options?.includeHidden ?? false],
|
|
806
|
+
queryFn: () => arbi.assistant.listSkills({ includeHidden: options?.includeHidden }),
|
|
807
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn,
|
|
808
|
+
staleTime: 3e4
|
|
809
|
+
});
|
|
810
|
+
}
|
|
811
|
+
function useContacts(options) {
|
|
812
|
+
const arbi = useArbi();
|
|
813
|
+
return useQuery({
|
|
814
|
+
queryKey: arbiQueryKeys.contacts(),
|
|
815
|
+
queryFn: () => arbi.contacts.list(),
|
|
816
|
+
enabled: (options?.enabled ?? true) && arbi.isLoggedIn
|
|
817
|
+
});
|
|
818
|
+
}
|
|
819
|
+
function usePendingContacts(options) {
|
|
820
|
+
const contacts = useContacts(options);
|
|
821
|
+
const pending = useMemo(
|
|
822
|
+
() => (contacts.data ?? []).filter(
|
|
823
|
+
(c) => c.status === "invitation_pending" || c.status === "invitation_expired"
|
|
824
|
+
),
|
|
825
|
+
[contacts.data]
|
|
826
|
+
);
|
|
827
|
+
return { ...contacts, pending };
|
|
828
|
+
}
|
|
829
|
+
function useAddContacts() {
|
|
830
|
+
const arbi = useArbi();
|
|
831
|
+
const qc = useQueryClient();
|
|
832
|
+
return useMutation({
|
|
833
|
+
mutationFn: (emails) => arbi.contacts.add(emails),
|
|
834
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() })
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
function useRemoveContacts() {
|
|
838
|
+
const arbi = useArbi();
|
|
839
|
+
const qc = useQueryClient();
|
|
840
|
+
return useMutation({
|
|
841
|
+
mutationFn: (contactIds) => arbi.contacts.remove(contactIds),
|
|
842
|
+
onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.contacts() })
|
|
843
|
+
});
|
|
844
|
+
}
|
|
893
845
|
function useWorkspaceDocs(workspaceId) {
|
|
894
846
|
const { data: docs = [], isLoading, isError } = useDocuments(workspaceId);
|
|
895
847
|
const docIds = useMemo(
|
|
@@ -3065,7 +3017,6 @@ function isAgentUser(user) {
|
|
|
3065
3017
|
return user.external_id.startsWith("agt-");
|
|
3066
3018
|
}
|
|
3067
3019
|
var DM_QUERY_KEY = ["arbi", "directMessages"];
|
|
3068
|
-
var CONTACTS_QUERY_KEY = ["arbi", "contacts"];
|
|
3069
3020
|
function mergeContacts(threads, contacts) {
|
|
3070
3021
|
const byPeer = /* @__PURE__ */ new Map();
|
|
3071
3022
|
for (const t of threads) byPeer.set(t.peer.external_id, t);
|
|
@@ -3131,7 +3082,7 @@ function useDirectMessages(options) {
|
|
|
3131
3082
|
enabled
|
|
3132
3083
|
});
|
|
3133
3084
|
const contactsQuery = useQuery({
|
|
3134
|
-
queryKey:
|
|
3085
|
+
queryKey: arbiQueryKeys.contacts(),
|
|
3135
3086
|
queryFn: () => arbi.contacts.list(),
|
|
3136
3087
|
enabled
|
|
3137
3088
|
});
|
|
@@ -3216,6 +3167,7 @@ function ConversationList({
|
|
|
3216
3167
|
classNames,
|
|
3217
3168
|
emptyState,
|
|
3218
3169
|
header,
|
|
3170
|
+
lead,
|
|
3219
3171
|
className
|
|
3220
3172
|
}) {
|
|
3221
3173
|
return /* @__PURE__ */ jsxs(
|
|
@@ -3235,6 +3187,7 @@ function ConversationList({
|
|
|
3235
3187
|
conversations.length === 1 ? "colleague" : "colleagues"
|
|
3236
3188
|
] })
|
|
3237
3189
|
] }) : header,
|
|
3190
|
+
lead,
|
|
3238
3191
|
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: conversations.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-4 py-6 text-xs text-muted-foreground", children: emptyState ?? "No conversations yet." }) : /* @__PURE__ */ jsx("ul", { className: "w-full", children: conversations.map((c, i) => {
|
|
3239
3192
|
const { peer, lastMessage, unreadCount } = c;
|
|
3240
3193
|
const newSection = c.sectionLabel && c.sectionLabel !== conversations[i - 1]?.sectionLabel;
|
|
@@ -3521,14 +3474,117 @@ function DmComposer({
|
|
|
3521
3474
|
error && /* @__PURE__ */ jsx("p", { className: "mt-2 text-xs text-destructive", "data-testid": "arbi-dm-error", children: error })
|
|
3522
3475
|
] });
|
|
3523
3476
|
}
|
|
3477
|
+
var DEFAULT_START_BY_EMAIL_LABELS = {
|
|
3478
|
+
email: "Email address",
|
|
3479
|
+
emailPlaceholder: "name@example.com",
|
|
3480
|
+
message: "Message",
|
|
3481
|
+
messagePlaceholder: "Write the first message\u2026",
|
|
3482
|
+
send: "Send",
|
|
3483
|
+
sending: "Sending\u2026",
|
|
3484
|
+
invalidEmail: "Enter a valid email address."
|
|
3485
|
+
};
|
|
3486
|
+
var EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
3487
|
+
function StartByEmail({
|
|
3488
|
+
onStart,
|
|
3489
|
+
onStarted,
|
|
3490
|
+
classNames,
|
|
3491
|
+
labels,
|
|
3492
|
+
className
|
|
3493
|
+
}) {
|
|
3494
|
+
const l = { ...DEFAULT_START_BY_EMAIL_LABELS, ...labels };
|
|
3495
|
+
const uid = useId();
|
|
3496
|
+
const [email, setEmail] = useState("");
|
|
3497
|
+
const [text, setText] = useState("");
|
|
3498
|
+
const [busy, setBusy] = useState(false);
|
|
3499
|
+
const [error, setError] = useState(null);
|
|
3500
|
+
const address = email.trim().toLowerCase();
|
|
3501
|
+
const valid = EMAIL.test(address);
|
|
3502
|
+
const submit = async () => {
|
|
3503
|
+
if (!valid || !text.trim() || busy) return;
|
|
3504
|
+
setBusy(true);
|
|
3505
|
+
setError(null);
|
|
3506
|
+
try {
|
|
3507
|
+
const result = await onStart(address, text.trim());
|
|
3508
|
+
setEmail("");
|
|
3509
|
+
setText("");
|
|
3510
|
+
onStarted?.(result);
|
|
3511
|
+
} catch (e) {
|
|
3512
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
3513
|
+
} finally {
|
|
3514
|
+
setBusy(false);
|
|
3515
|
+
}
|
|
3516
|
+
};
|
|
3517
|
+
return /* @__PURE__ */ jsxs(
|
|
3518
|
+
"form",
|
|
3519
|
+
{
|
|
3520
|
+
"data-testid": "arbi-dm-start",
|
|
3521
|
+
className: cn("flex flex-col gap-2 border-b border-border px-4 py-3", className),
|
|
3522
|
+
onSubmit: (e) => {
|
|
3523
|
+
e.preventDefault();
|
|
3524
|
+
void submit();
|
|
3525
|
+
},
|
|
3526
|
+
children: [
|
|
3527
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${uid}-email`, children: l.email }),
|
|
3528
|
+
/* @__PURE__ */ jsx(
|
|
3529
|
+
Input,
|
|
3530
|
+
{
|
|
3531
|
+
id: `${uid}-email`,
|
|
3532
|
+
type: "email",
|
|
3533
|
+
value: email,
|
|
3534
|
+
onChange: (e) => setEmail(e.target.value),
|
|
3535
|
+
placeholder: l.emailPlaceholder,
|
|
3536
|
+
"aria-invalid": email !== "" && !valid,
|
|
3537
|
+
"aria-describedby": email !== "" && !valid ? `${uid}-bad` : void 0,
|
|
3538
|
+
disabled: busy,
|
|
3539
|
+
"data-testid": "arbi-dm-start-email"
|
|
3540
|
+
}
|
|
3541
|
+
),
|
|
3542
|
+
email !== "" && !valid && /* @__PURE__ */ jsx("p", { id: `${uid}-bad`, className: "text-xs text-destructive", children: l.invalidEmail }),
|
|
3543
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${uid}-text`, children: l.message }),
|
|
3544
|
+
/* @__PURE__ */ jsx(
|
|
3545
|
+
Textarea,
|
|
3546
|
+
{
|
|
3547
|
+
id: `${uid}-text`,
|
|
3548
|
+
value: text,
|
|
3549
|
+
onChange: (e) => setText(e.target.value),
|
|
3550
|
+
placeholder: l.messagePlaceholder,
|
|
3551
|
+
rows: 2,
|
|
3552
|
+
disabled: busy,
|
|
3553
|
+
"data-testid": "arbi-dm-start-message"
|
|
3554
|
+
}
|
|
3555
|
+
),
|
|
3556
|
+
error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-xs text-destructive", "data-testid": "arbi-dm-start-error", children: error }),
|
|
3557
|
+
/* @__PURE__ */ jsxs(
|
|
3558
|
+
Button,
|
|
3559
|
+
{
|
|
3560
|
+
type: "submit",
|
|
3561
|
+
size: "sm",
|
|
3562
|
+
disabled: !valid || !text.trim() || busy,
|
|
3563
|
+
className: cn("self-end", classNames?.sendButton),
|
|
3564
|
+
"data-testid": "arbi-dm-start-send",
|
|
3565
|
+
children: [
|
|
3566
|
+
busy ? /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": true }) : /* @__PURE__ */ jsx(Send, { className: "size-4", "aria-hidden": true }),
|
|
3567
|
+
busy ? l.sending : l.send
|
|
3568
|
+
]
|
|
3569
|
+
}
|
|
3570
|
+
)
|
|
3571
|
+
]
|
|
3572
|
+
}
|
|
3573
|
+
);
|
|
3574
|
+
}
|
|
3524
3575
|
function DirectMessages({
|
|
3525
3576
|
className,
|
|
3526
3577
|
classNames,
|
|
3527
3578
|
emptyThread: emptyThread2,
|
|
3528
|
-
emptyList
|
|
3579
|
+
emptyList,
|
|
3580
|
+
listHeader,
|
|
3581
|
+
listLead,
|
|
3582
|
+
startByEmail,
|
|
3583
|
+
hideOwnContact
|
|
3529
3584
|
}) {
|
|
3530
3585
|
const {
|
|
3531
|
-
conversations,
|
|
3586
|
+
conversations: allConversations,
|
|
3587
|
+
myExtId,
|
|
3532
3588
|
isLoading,
|
|
3533
3589
|
isError,
|
|
3534
3590
|
error,
|
|
@@ -3538,6 +3594,14 @@ function DirectMessages({
|
|
|
3538
3594
|
markRead
|
|
3539
3595
|
} = useDirectMessages();
|
|
3540
3596
|
const [selectedPeerId, setSelectedPeerId] = useState(null);
|
|
3597
|
+
const conversations = useMemo(
|
|
3598
|
+
() => hideOwnContact && myExtId ? allConversations.filter((c) => c.peer.external_id !== myExtId) : allConversations,
|
|
3599
|
+
[allConversations, hideOwnContact, myExtId]
|
|
3600
|
+
);
|
|
3601
|
+
const openStarted = (created) => {
|
|
3602
|
+
const peer = Array.isArray(created) ? created[0]?.recipient?.external_id : void 0;
|
|
3603
|
+
if (peer) setSelectedPeerId(peer);
|
|
3604
|
+
};
|
|
3541
3605
|
const loadError = isError ? error instanceof Error ? error.message : "Couldn\u2019t load messages." : null;
|
|
3542
3606
|
const selected = useMemo(
|
|
3543
3607
|
() => conversations.find((c) => c.peer.external_id === selectedPeerId) ?? null,
|
|
@@ -3581,7 +3645,20 @@ function DirectMessages({
|
|
|
3581
3645
|
selectedPeerId: selected?.peer.external_id ?? null,
|
|
3582
3646
|
onSelect: setSelectedPeerId,
|
|
3583
3647
|
classNames,
|
|
3584
|
-
emptyState: isLoading ? "Loading messages\u2026" : emptyList
|
|
3648
|
+
emptyState: isLoading ? "Loading messages\u2026" : emptyList,
|
|
3649
|
+
header: listHeader,
|
|
3650
|
+
lead: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3651
|
+
listLead,
|
|
3652
|
+
startByEmail && /* @__PURE__ */ jsx(
|
|
3653
|
+
StartByEmail,
|
|
3654
|
+
{
|
|
3655
|
+
onStart: sendMessageTo,
|
|
3656
|
+
onStarted: openStarted,
|
|
3657
|
+
classNames,
|
|
3658
|
+
labels: typeof startByEmail === "object" ? startByEmail.labels : void 0
|
|
3659
|
+
}
|
|
3660
|
+
)
|
|
3661
|
+
] })
|
|
3585
3662
|
}
|
|
3586
3663
|
),
|
|
3587
3664
|
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col", children: [
|
|
@@ -4990,6 +5067,6 @@ function hasVideoTrack(blob) {
|
|
|
4990
5067
|
});
|
|
4991
5068
|
}
|
|
4992
5069
|
|
|
4993
|
-
export { ActivityFeed, AiActionCard, AiAnswer, AppleIcon, ArbiBotIcon, ArbiIcon, ArbiWebSocketProvider, ArtifactCanvas, ChatBubble, CitationRenderer, ClaudeIcon, CommandPalette, CommandPaletteProvider, ConversationList, DEFAULT_ASPECT_OPTIONS, DateSeparator, DirectMessages, DmAvatar, DmComposer, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, DocumentGallery, DocumentReview, DocumentTable, DraftTitleControls, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, ImageCropper, LinkedInIcon, MessageArtifactCard, MessageBubble, MessageThread, OpenAIIcon, PhotoCapture, ProviderIcon, RUN_WINDOW_MS, SemanticSearch, TxtIcon, TypingIndicator, VideoCapture, VoiceNoteRecorder, XlsIcon, annotateThread,
|
|
5070
|
+
export { ActivityFeed, AiActionCard, AiAnswer, AppleIcon, ArbiBotIcon, ArbiIcon, ArbiWebSocketProvider, ArtifactCanvas, ChatBubble, CitationRenderer, ClaudeIcon, CommandPalette, CommandPaletteProvider, ConversationList, DEFAULT_ASPECT_OPTIONS, DEFAULT_START_BY_EMAIL_LABELS, DateSeparator, DirectMessages, DmAvatar, DmComposer, DocIcon, DocQaPanel, DocSearch, DocumentCardMenu, DocumentGallery, DocumentReview, DocumentTable, DraftTitleControls, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, ImageCropper, LinkedInIcon, MessageArtifactCard, MessageBubble, MessageThread, OpenAIIcon, PhotoCapture, ProviderIcon, RUN_WINDOW_MS, SemanticSearch, StartByEmail, TxtIcon, TypingIndicator, VideoCapture, VoiceNoteRecorder, XlsIcon, annotateThread, captureFrameAsBlob, cropImage, dayKey, describeActivity, getNotificationTypeMeta, getWorkspaceActionText, getWorkspaceKind, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, parseActivityContent, pickRecentWorkspaces, redlineStats, resolveActiveWorkspace, textToArtifact, titleFromQuestion, toRedlineMarkdown, toShellWorkspace, useAddContacts, useAgentConfig, useAgentModels, useAgentWorkspaces, useAiTask, useArbiChat, useArbiConnected, useArbiDocumentSync, useArbiShellWorkspaces, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useCameraStream, useCommandPalette, useContacts, useCreateAgent, useCreateTask, useDeleteTask, useDirectMessages, useGrantAgentAccess, usePendingContacts, useRemoveContacts, useRevokeAgentAccess, useRunTask, useSaveAgentConfig, useSemanticSearch, useShellWorkspaces, useSkills, useTaskRuns, useUpdateTask, useVideoRecorder, useWorkspaceDocs, userDisplayName, userInitials };
|
|
4994
5071
|
//# sourceMappingURL=index.js.map
|
|
4995
5072
|
//# sourceMappingURL=index.js.map
|