@arbidocs/blocks 0.5.75 → 0.5.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +23 -0
  2. package/dist/{ConnectedDocumentViewer-U5TQ4LFJ.js → ConnectedDocumentViewer-4LRZ5N3L.js} +6 -6
  3. package/dist/{ConnectedDocumentViewer-U5TQ4LFJ.js.map → ConnectedDocumentViewer-4LRZ5N3L.js.map} +1 -1
  4. package/dist/{ConnectedDocumentViewer-ID2RG5MF.cjs → ConnectedDocumentViewer-FREQM2ES.cjs} +7 -7
  5. package/dist/{ConnectedDocumentViewer-ID2RG5MF.cjs.map → ConnectedDocumentViewer-FREQM2ES.cjs.map} +1 -1
  6. package/dist/{ConnectedNativeDocxComparison-PBMS77ZP.js → ConnectedNativeDocxComparison-P7OJ3UVK.js} +6 -6
  7. package/dist/{ConnectedNativeDocxComparison-PBMS77ZP.js.map → ConnectedNativeDocxComparison-P7OJ3UVK.js.map} +1 -1
  8. package/dist/{ConnectedNativeDocxComparison-R4OFGVHY.cjs → ConnectedNativeDocxComparison-RQIKQM5O.cjs} +7 -7
  9. package/dist/{ConnectedNativeDocxComparison-R4OFGVHY.cjs.map → ConnectedNativeDocxComparison-RQIKQM5O.cjs.map} +1 -1
  10. package/dist/{ConnectedNativeDocxEditor-27JZI2D5.js → ConnectedNativeDocxEditor-HX3FDJ2T.js} +5 -5
  11. package/dist/{ConnectedNativeDocxEditor-27JZI2D5.js.map → ConnectedNativeDocxEditor-HX3FDJ2T.js.map} +1 -1
  12. package/dist/{ConnectedNativeDocxEditor-774XRIP3.cjs → ConnectedNativeDocxEditor-XKQV7A37.cjs} +7 -7
  13. package/dist/{ConnectedNativeDocxEditor-774XRIP3.cjs.map → ConnectedNativeDocxEditor-XKQV7A37.cjs.map} +1 -1
  14. package/dist/{ConnectedStreamedWordArtifact-7TNIQTVE.cjs → ConnectedStreamedWordArtifact-CSRL4SCO.cjs} +7 -7
  15. package/dist/ConnectedStreamedWordArtifact-CSRL4SCO.cjs.map +1 -0
  16. package/dist/{ConnectedStreamedWordArtifact-XEFXYMKS.js → ConnectedStreamedWordArtifact-SSH6M5LN.js} +6 -6
  17. package/dist/ConnectedStreamedWordArtifact-SSH6M5LN.js.map +1 -0
  18. package/dist/{DocumentReviewCard-7OPL6PWG.cjs → DocumentReviewCard-3PZJPVQC.cjs} +14 -14
  19. package/dist/{DocumentReviewCard-7OPL6PWG.cjs.map → DocumentReviewCard-3PZJPVQC.cjs.map} +1 -1
  20. package/dist/{DocumentReviewCard-NDHCFYYT.js → DocumentReviewCard-KHMHG7A5.js} +9 -9
  21. package/dist/{DocumentReviewCard-NDHCFYYT.js.map → DocumentReviewCard-KHMHG7A5.js.map} +1 -1
  22. package/dist/{WorkspaceTableView-4INHJ7QK.js → WorkspaceTableView-4VMCTOFT.js} +5 -5
  23. package/dist/{WorkspaceTableView-4INHJ7QK.js.map → WorkspaceTableView-4VMCTOFT.js.map} +1 -1
  24. package/dist/{WorkspaceTableView-BTUSU3N3.cjs → WorkspaceTableView-Q44KNO3Z.cjs} +7 -7
  25. package/dist/{WorkspaceTableView-BTUSU3N3.cjs.map → WorkspaceTableView-Q44KNO3Z.cjs.map} +1 -1
  26. package/dist/agents/index.cjs +281 -281
  27. package/dist/agents/index.js +4 -4
  28. package/dist/{chunk-E3ILJRG4.cjs → chunk-2HECOUXC.cjs} +4 -3
  29. package/dist/chunk-2HECOUXC.cjs.map +1 -0
  30. package/dist/{chunk-AQPZ4QMV.cjs → chunk-3J2ASIM7.cjs} +3 -3
  31. package/dist/chunk-3J2ASIM7.cjs.map +1 -0
  32. package/dist/{chunk-QCFNPQWS.cjs → chunk-3LJUTIS6.cjs} +44 -44
  33. package/dist/{chunk-QCFNPQWS.cjs.map → chunk-3LJUTIS6.cjs.map} +1 -1
  34. package/dist/chunk-4B6HYQTW.cjs +20 -0
  35. package/dist/chunk-4B6HYQTW.cjs.map +1 -0
  36. package/dist/{chunk-4UMVAJJZ.js → chunk-6NEBHZIF.js} +4 -4
  37. package/dist/{chunk-4UMVAJJZ.js.map → chunk-6NEBHZIF.js.map} +1 -1
  38. package/dist/{chunk-IMIE5NOQ.js → chunk-7E5GV4R7.js} +4 -4
  39. package/dist/{chunk-IMIE5NOQ.js.map → chunk-7E5GV4R7.js.map} +1 -1
  40. package/dist/{chunk-LNXMSIKU.js → chunk-AWFEB4YJ.js} +8 -8
  41. package/dist/{chunk-LNXMSIKU.js.map → chunk-AWFEB4YJ.js.map} +1 -1
  42. package/dist/{chunk-JMQLTMJ7.js → chunk-B3BD5IJR.js} +16 -20
  43. package/dist/chunk-B3BD5IJR.js.map +1 -0
  44. package/dist/{chunk-5Q2U7GLI.cjs → chunk-CDW3W5U5.cjs} +4 -4
  45. package/dist/{chunk-5Q2U7GLI.cjs.map → chunk-CDW3W5U5.cjs.map} +1 -1
  46. package/dist/{chunk-SK5TP4DP.js → chunk-DBPPOJQM.js} +3 -3
  47. package/dist/{chunk-SK5TP4DP.js.map → chunk-DBPPOJQM.js.map} +1 -1
  48. package/dist/{chunk-NJ3YV3VM.cjs → chunk-DMYBHKNQ.cjs} +27 -27
  49. package/dist/{chunk-NJ3YV3VM.cjs.map → chunk-DMYBHKNQ.cjs.map} +1 -1
  50. package/dist/{chunk-563BHHHO.cjs → chunk-E6S6WHXL.cjs} +9 -9
  51. package/dist/{chunk-563BHHHO.cjs.map → chunk-E6S6WHXL.cjs.map} +1 -1
  52. package/dist/{chunk-BV34QPKE.js → chunk-EASXRDYQ.js} +3 -3
  53. package/dist/{chunk-BV34QPKE.js.map → chunk-EASXRDYQ.js.map} +1 -1
  54. package/dist/{chunk-JOFUAQTV.js → chunk-HWNVAQBX.js} +3 -3
  55. package/dist/{chunk-JOFUAQTV.js.map → chunk-HWNVAQBX.js.map} +1 -1
  56. package/dist/{chunk-PNWSEIWS.cjs → chunk-I3HK46DH.cjs} +4 -4
  57. package/dist/{chunk-PNWSEIWS.cjs.map → chunk-I3HK46DH.cjs.map} +1 -1
  58. package/dist/{chunk-GJKXYX47.js → chunk-IJ2CTMA7.js} +3 -3
  59. package/dist/{chunk-GJKXYX47.js.map → chunk-IJ2CTMA7.js.map} +1 -1
  60. package/dist/{chunk-7ZL6OVGO.cjs → chunk-IQFHOKQH.cjs} +23 -46
  61. package/dist/chunk-IQFHOKQH.cjs.map +1 -0
  62. package/dist/{chunk-7ZCM2GR2.js → chunk-IRCGXKLB.js} +3 -3
  63. package/dist/{chunk-7ZCM2GR2.js.map → chunk-IRCGXKLB.js.map} +1 -1
  64. package/dist/{chunk-G4GLDQLY.js → chunk-KG3W76BB.js} +3 -3
  65. package/dist/chunk-KG3W76BB.js.map +1 -0
  66. package/dist/{chunk-B66CICTP.cjs → chunk-KHLPBCRZ.cjs} +52 -52
  67. package/dist/{chunk-B66CICTP.cjs.map → chunk-KHLPBCRZ.cjs.map} +1 -1
  68. package/dist/{chunk-J4SEJSSV.js → chunk-KPIR4MJV.js} +6 -6
  69. package/dist/{chunk-J4SEJSSV.js.map → chunk-KPIR4MJV.js.map} +1 -1
  70. package/dist/{chunk-PA4EGGCI.js → chunk-KSHTODQZ.js} +3 -3
  71. package/dist/{chunk-PA4EGGCI.js.map → chunk-KSHTODQZ.js.map} +1 -1
  72. package/dist/{chunk-PT6D5B6L.cjs → chunk-MAUJVVFJ.cjs} +360 -410
  73. package/dist/chunk-MAUJVVFJ.cjs.map +1 -0
  74. package/dist/{chunk-MP7XCRHV.js → chunk-NRI5DKJE.js} +4 -3
  75. package/dist/chunk-NRI5DKJE.js.map +1 -0
  76. package/dist/{chunk-XXPDAENX.cjs → chunk-PGTDQBMX.cjs} +7 -7
  77. package/dist/{chunk-XXPDAENX.cjs.map → chunk-PGTDQBMX.cjs.map} +1 -1
  78. package/dist/{chunk-4JKK6S7U.cjs → chunk-S7G3A52F.cjs} +5 -5
  79. package/dist/{chunk-4JKK6S7U.cjs.map → chunk-S7G3A52F.cjs.map} +1 -1
  80. package/dist/{chunk-OUCWTKQT.js → chunk-SBFQF3BU.js} +4 -4
  81. package/dist/{chunk-OUCWTKQT.js.map → chunk-SBFQF3BU.js.map} +1 -1
  82. package/dist/{chunk-52VME6ZS.cjs → chunk-SIOBGNRY.cjs} +18 -18
  83. package/dist/{chunk-52VME6ZS.cjs.map → chunk-SIOBGNRY.cjs.map} +1 -1
  84. package/dist/chunk-SK3GBHPJ.js +15 -0
  85. package/dist/chunk-SK3GBHPJ.js.map +1 -0
  86. package/dist/{chunk-RADE22SM.cjs → chunk-T2OG3CPR.cjs} +4 -4
  87. package/dist/{chunk-RADE22SM.cjs.map → chunk-T2OG3CPR.cjs.map} +1 -1
  88. package/dist/{chunk-IGQJ6ET3.js → chunk-TWSOU6SE.js} +421 -501
  89. package/dist/chunk-TWSOU6SE.js.map +1 -0
  90. package/dist/{chunk-QRV4XYFJ.js → chunk-UCD7644N.js} +3 -3
  91. package/dist/{chunk-QRV4XYFJ.js.map → chunk-UCD7644N.js.map} +1 -1
  92. package/dist/{chunk-TQ4VGQHG.js → chunk-ULUCGL24.js} +3 -3
  93. package/dist/{chunk-TQ4VGQHG.js.map → chunk-ULUCGL24.js.map} +1 -1
  94. package/dist/{chunk-IRI6LPDX.cjs → chunk-UR4OSH2Q.cjs} +4 -4
  95. package/dist/{chunk-IRI6LPDX.cjs.map → chunk-UR4OSH2Q.cjs.map} +1 -1
  96. package/dist/{chunk-66QN6ZJR.cjs → chunk-URZAK3A3.cjs} +36 -36
  97. package/dist/{chunk-66QN6ZJR.cjs.map → chunk-URZAK3A3.cjs.map} +1 -1
  98. package/dist/{chunk-57S2PLCM.js → chunk-V2QWATXQ.js} +3 -3
  99. package/dist/{chunk-57S2PLCM.js.map → chunk-V2QWATXQ.js.map} +1 -1
  100. package/dist/{chunk-55JI2IGZ.cjs → chunk-VBLJNOVP.cjs} +4 -4
  101. package/dist/{chunk-55JI2IGZ.cjs.map → chunk-VBLJNOVP.cjs.map} +1 -1
  102. package/dist/{chunk-KFAFWPZK.cjs → chunk-VRMACPJR.cjs} +7 -7
  103. package/dist/{chunk-KFAFWPZK.cjs.map → chunk-VRMACPJR.cjs.map} +1 -1
  104. package/dist/{chunk-5Y6V7F6W.cjs → chunk-VWUNPAR2.cjs} +15 -19
  105. package/dist/chunk-VWUNPAR2.cjs.map +1 -0
  106. package/dist/{chunk-T3GTQXGP.js → chunk-W7CQ5MLR.js} +3 -3
  107. package/dist/{chunk-T3GTQXGP.js.map → chunk-W7CQ5MLR.js.map} +1 -1
  108. package/dist/{chunk-AOBNXZLS.cjs → chunk-Y3VXKSW7.cjs} +594 -674
  109. package/dist/chunk-Y3VXKSW7.cjs.map +1 -0
  110. package/dist/{chunk-RTYU6ZGO.cjs → chunk-YCABQ5W4.cjs} +4 -4
  111. package/dist/{chunk-RTYU6ZGO.cjs.map → chunk-YCABQ5W4.cjs.map} +1 -1
  112. package/dist/{chunk-EWHD3BY5.js → chunk-ZHHUEYSB.js} +25 -48
  113. package/dist/chunk-ZHHUEYSB.js.map +1 -0
  114. package/dist/{chunk-5PKIDR2Q.js → chunk-ZHJVABQ6.js} +361 -406
  115. package/dist/chunk-ZHJVABQ6.js.map +1 -0
  116. package/dist/connect/docx.cjs +11 -11
  117. package/dist/connect/docx.js +7 -7
  118. package/dist/connect/index.cjs +1448 -1367
  119. package/dist/connect/index.cjs.map +1 -1
  120. package/dist/connect/index.d.ts +2 -0
  121. package/dist/connect/index.js +545 -466
  122. package/dist/connect/index.js.map +1 -1
  123. package/dist/connect/viewer.cjs +5 -5
  124. package/dist/connect/viewer.js +4 -4
  125. package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +2 -1
  126. package/dist/connection/facts/useFactFilters.d.ts +46 -0
  127. package/dist/connection/files/fields/ConnectedTagForm.d.ts +1 -1
  128. package/dist/connection/report-problem/ReportProblemDialog.d.ts +10 -8
  129. package/dist/connection/report-problem/useReportProblem.d.ts +2 -6
  130. package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
  131. package/dist/connection/tags/ConnectedTagsPage.d.ts +3 -1
  132. package/dist/connection/tags/TagsPageSections.d.ts +5 -3
  133. package/dist/connection/tags/tagged-content.d.ts +10 -0
  134. package/dist/connection/threads/useThreadTagFilter.d.ts +10 -0
  135. package/dist/connection/tips/ConnectedTipBar.d.ts +2 -1
  136. package/dist/connection/tips/useContextualHints.d.ts +6 -1
  137. package/dist/embed/index.cjs +13 -12
  138. package/dist/embed/index.js +8 -7
  139. package/dist/facts/index.cjs +45 -45
  140. package/dist/facts/index.js +2 -2
  141. package/dist/files/index.cjs +226 -226
  142. package/dist/files/index.js +2 -2
  143. package/dist/index.cjs +423 -367
  144. package/dist/index.cjs.map +1 -1
  145. package/dist/index.js +76 -16
  146. package/dist/index.js.map +1 -1
  147. package/dist/settings/FilterChip.d.ts +2 -1
  148. package/dist/settings/TriStateFilterMenu.d.ts +1 -0
  149. package/dist/settings/index.cjs +158 -158
  150. package/dist/settings/index.js +2 -2
  151. package/dist/shell/index.cjs +14 -14
  152. package/dist/shell/index.js +1 -1
  153. package/dist/styles.css +1 -1
  154. package/dist/tags/TagDetail.d.ts +2 -2
  155. package/dist/tags/TagTable.d.ts +17 -3
  156. package/dist/tags/index.d.ts +1 -1
  157. package/dist/workflow-canvas/index.cjs +29 -29
  158. package/dist/workflow-canvas/index.js +12 -12
  159. package/node_modules/@arbidocs/coedit/package.json +1 -1
  160. package/package.json +5 -5
  161. package/dist/ConnectedStreamedWordArtifact-7TNIQTVE.cjs.map +0 -1
  162. package/dist/ConnectedStreamedWordArtifact-XEFXYMKS.js.map +0 -1
  163. package/dist/chunk-5PKIDR2Q.js.map +0 -1
  164. package/dist/chunk-5Y6V7F6W.cjs.map +0 -1
  165. package/dist/chunk-7ZL6OVGO.cjs.map +0 -1
  166. package/dist/chunk-AOBNXZLS.cjs.map +0 -1
  167. package/dist/chunk-AQPZ4QMV.cjs.map +0 -1
  168. package/dist/chunk-E3ILJRG4.cjs.map +0 -1
  169. package/dist/chunk-EWHD3BY5.js.map +0 -1
  170. package/dist/chunk-G4GLDQLY.js.map +0 -1
  171. package/dist/chunk-IGQJ6ET3.js.map +0 -1
  172. package/dist/chunk-JMQLTMJ7.js.map +0 -1
  173. package/dist/chunk-MP7XCRHV.js.map +0 -1
  174. package/dist/chunk-PT6D5B6L.cjs.map +0 -1
  175. package/dist/connection/tags/TagPlacement.d.ts +0 -16
@@ -1,19 +1,20 @@
1
1
  "use client";
2
- import { useConnectedThreadActivity, useSelectWorkspace } from './chunk-SK5TP4DP.js';
3
- import { DocumentUser } from './chunk-OUCWTKQT.js';
2
+ import { useConnectedThreadActivity, useSelectWorkspace } from './chunk-DBPPOJQM.js';
3
+ import { DocumentUser } from './chunk-SBFQF3BU.js';
4
4
  import { buildFactCitations, citedVersionRef, chronologyFactBodies } from './chunk-KGUSKGZE.js';
5
- import { MessageJsonTree, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews } from './chunk-MP7XCRHV.js';
5
+ import { MessageJsonTree, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, DeleteAccountDialog, toDeleteBlockerViews } from './chunk-NRI5DKJE.js';
6
6
  import { ConnectedMarkdown, InternalDocLink, ExternalLink } from './chunk-QZ5FDIT6.js';
7
7
  import { ModalBreadcrumbHeader, ModalCrumbs } from './chunk-RC6VTY2H.js';
8
8
  import { SettingsSection, SettingsCard, SettingsActionRow, SettingsRow, SettingsDangerZone } from './chunk-PBQNZWSX.js';
9
+ import { TIPS_VISIBILITY_OVERRIDE, setHintsSessionOverride } from './chunk-SK3GBHPJ.js';
9
10
  import { EntityTooltip, EntityTooltipHeader, EntityTooltipSection, EntityTooltipHint } from './chunk-3UIJLUXN.js';
10
11
  import { useLongPaste, useRecipientDraft, SlashMenu, ContextUsageBar, findMessageDocument, getParticipantTints, flashMessage, parseSlashTokenInProgress, buildSlashItems, filterSlashItems, copyMessageToClipboard, BranchControls, ThreadVisualizer, downloadTableAsCsv, ModelAutoIcon, ModelTierIcon, ModelDot, ModelPricingTip, ModelPickerPopover, ModelOption, ModelMenuDivider, ModelTierOption, ModelConfigureButton, ModelMenuMessage, ModelPickerTrigger, ModelTriggerContent, ModelOptionLabel } from './chunk-V2P2EJBA.js';
11
- import { Composer, MessageActionMenu, MessageActionButton, MessageFooter, MessageRoot, MessageContent, MessageAuthor, MessageBubble, MessageByline, MessageSubagentBadge, MessageBody, MessageNarration, useStreamAnnouncement, MessageList, WorkflowStepChip, MessageSources, ComposerContainer } from './chunk-AAGR47JS.js';
12
+ import { Composer, MessageActionMenu, MessageActionButton, MessageFooter, MessageRoot, MessageContent, MessageAuthor, MessageBubble, MessageByline, MessageSubagentBadge, MessageBody, MessageNarration, useStreamAnnouncement, MessageList, WorkflowStepChip, ComposerContainer } from './chunk-AAGR47JS.js';
12
13
  import { ErrorBoundary } from './chunk-3EWS6ECM.js';
13
14
  import { workspaceKindColor, MobileAppBar, prefetchChunk } from './chunk-KYLNAAYI.js';
14
15
  import { Sidebar } from './chunk-YUAPBWLL.js';
15
16
  import { workspaceDocIdFromHref } from './chunk-DDCMLHXF.js';
16
- import { useCompactChat, CompactChatContext } from './chunk-5B74B62N.js';
17
+ import { CompactChatContext } from './chunk-5B74B62N.js';
17
18
  import { StepTraceSummary, StepTrace, getCurrentAgentStepPresentation, AssistantEntity, ThreadActivity, SubAgentLane, getAgentStepPresentation, stepAccent, MODEL_TIER_ICON_MAP, StepRow, StepNarration, StepSummary, StepDetail, StepOutcome, StepParams, GoalCriteria, SubStepGroup, MODEL_TIER_LABELS, fromPlanSteps, getModelIcon, SubagentRoster } from './chunk-3TKRCYFN.js';
18
19
  import { useMentionAutocomplete, stepDocuments, stepKindOf } from './chunk-TX6BIWIH.js';
19
20
  import { stepStatesFromActivity, splitDocRef, stepPhase, mergeSkillWorkflows } from './chunk-3D7SX5ZS.js';
@@ -27,10 +28,10 @@ import { buildDeepLinkPath } from './chunk-7Q5INDUS.js';
27
28
  import { EmptyState } from './chunk-P6GHJSLR.js';
28
29
  import { initials } from './chunk-5VYJP6XD.js';
29
30
  import { useBlocksEnvironment } from './chunk-DMVNEIJ4.js';
30
- import React7, { memo, useMemo, createContext, forwardRef, useCallback, useRef, useLayoutEffect, useEffect, useState, useContext } from 'react';
31
- import { Users, MessageCircleMore, ArrowUpRight, Send, Settings, Edit3, Copy, Link, Share2, Trash2, Check, Milestone, Clock, RotateCcw, FileText, Loader2, Network, ChevronRight, Download, Monitor, UserCircle, KeyRound, Radio, MessageSquare, Square, ArrowDown, Paperclip, Upload, Search, Eye, X, BadgeCheck, LogIn, Plus, LogOut, ArrowLeft } from 'lucide-react';
32
- import { useWorkspaces, ArbiBotHeadIcon, useArbiWsStatus, useArbiWsStore, useUserSettings, useMessageTimer, useDocuments, useAvailableModels, formatGbp, useArbiSessionStore, CitationRenderer, useArbiSessionState, selectDraft, useWorkspaceUsers, useArbiSession, useAssistantName, buildMentionCandidates, useConversations, useLinkMentions, useConversationItems, useDeleteMessage, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useArbiHost, useSkills, useBuiltinCommands, useConversationActivity, useMessageDetails, getWorkspaceKind, resolveConfigModel, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useConversationTurn, useUploadDocuments, useWorkspaceRole, useArbi, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, ArbiWebSocketProvider, useDocument, useDownloadDocuments, DocumentReview } from '@arbidocs/react';
33
- import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, getDocumentTitle, Button, isImageDocument, formatFriendlyDate, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, ProviderIcon, getEntityLabel, EntityIcon, TooltipProvider, Select, SelectTrigger, SelectContent, SelectItem, Popover, PopoverTrigger, PopoverContent, Checkbox, ARBI_MARK_SRC, Input } from '@arbidocs/react/ui';
31
+ import React6, { memo, useMemo, createContext, forwardRef, useRef, useLayoutEffect, useEffect, useCallback, useState, useContext } from 'react';
32
+ import { Users, MessageCircleMore, Settings, Edit3, Copy, Link, Share2, Trash2, Check, Milestone, Clock, RotateCcw, FileText, Loader2, Network, ChevronRight, Download, Monitor, UserCircle, KeyRound, Radio, MessageSquare, Square, ArrowDown, Send, Paperclip, Upload, Search, Eye, X, BadgeCheck, LogIn, Plus, LogOut, ArrowLeft } from 'lucide-react';
33
+ import { useWorkspaces, ArbiBotHeadIcon, useArbiWsStatus, useArbiWsStore, useUserSettings, useArbiSessionStore, useArbiSessionState, selectDraft, useWorkspaceUsers, useArbiSession, useAssistantName, buildMentionCandidates, useConversations, useMessageTimer, useDocuments, useAvailableModels, formatGbp, CitationRenderer, useLinkMentions, useConversationItems, useDeleteMessage, transcriptSegmentOf, useConfig, useThinkingContent, useCreateFact, useCreateFacts, workflowStepOf, stripSpeakerPrefix, MessageArtifactCard, useConversationData, useBranchNavigation, useTransientView, useSkills, useBuiltinCommands, useArbiHost, useConversationActivity, useMessageDetails, getWorkspaceKind, resolveConfigModel, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useApplyChatModel, AUTO_CHAT_MODEL, formatGbpPerMillionTokens, useUpdateUserSettings, useConversationTurn, useUploadDocuments, useWorkspaceRole, useArbi, downloadRecoveryFile, LinkedInIcon, GoogleIcon, AppleIcon, ArbiWebSocketProvider, useDocument, useDownloadDocuments, DocumentReview } from '@arbidocs/react';
34
+ import { isAgent, UserEntity, getUserInitials, getUserDisplayName, getUserAvatarColor, agentAvatarColors, Avatar, AvatarImage, AvatarFallback, cn, ShieldIcon, getWorkspaceColor, Button, getDocumentTitle, isImageDocument, formatFriendlyDate, Tooltip, TooltipTrigger, TooltipContent, Dialog, DialogContent, ProviderIcon, getEntityLabel, EntityIcon, TooltipProvider, Select, SelectTrigger, SelectContent, SelectItem, Popover, PopoverTrigger, PopoverContent, Checkbox, ARBI_MARK_SRC, Input } from '@arbidocs/react/ui';
34
35
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
35
36
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
36
37
  import { mergeAgentSteps, extractSubagentLanes, getCurrentStep, computeRunStats, formatTokens, isNearAiUsageBudget, getSubagentBranchRecord, buildCitationChunkData, topLevelAgentSteps, findMainSiblingLeaf, sliceToSubagentThread, getAgentStepLabel, subagentJobLabel, getStepDisplay, getStepTool, findLeafForTaskMessage, Arbi } from '@arbidocs/sdk/browser';
@@ -960,6 +961,308 @@ function ConnectedModelSelector({
960
961
  tooltip && /* @__PURE__ */ jsx(TooltipContent, { side: "top", children: tooltip })
961
962
  ] }) });
962
963
  }
964
+ function useHintsVisibility() {
965
+ const { data: userSettings } = useUserSettings();
966
+ const [sessionOverride] = useTransientView(TIPS_VISIBILITY_OVERRIDE, null);
967
+ return {
968
+ showHints: sessionOverride ?? userSettings?.show_hints ?? true,
969
+ settingsLoaded: userSettings !== void 0,
970
+ isDeveloper: userSettings?.developer === true
971
+ };
972
+ }
973
+ function useContextualHints() {
974
+ const visibility = useHintsVisibility();
975
+ const session = useArbiSessionStore();
976
+ const updateUserSettings = useUpdateUserSettings();
977
+ const setShowHints = (value) => setHintsSessionOverride(session, value);
978
+ const setShowHintsPersisted = (value) => {
979
+ setHintsSessionOverride(session, null);
980
+ updateUserSettings.mutate({ show_hints: value });
981
+ };
982
+ return {
983
+ ...visibility,
984
+ setShowHints,
985
+ setShowHintsPersisted,
986
+ dismissHints: () => setShowHints(false)
987
+ };
988
+ }
989
+ function useSlashItems(text, builtinSkills = []) {
990
+ const { data: listings } = useSkills();
991
+ const skillsEnabled = useUserSettings().data?.show_skills ?? false;
992
+ const { commands } = useBuiltinCommands();
993
+ const slashToken = parseSlashTokenInProgress(text);
994
+ const slashItems = useMemo(
995
+ () => buildSlashItems(
996
+ commands.map((c) => ({
997
+ name: c.name,
998
+ description: c.description,
999
+ argHint: c.arg_hint,
1000
+ kind: "command"
1001
+ })),
1002
+ skillsEnabled ? skillItems(builtinSkills, listings ?? []) : []
1003
+ ),
1004
+ [commands, listings, skillsEnabled, builtinSkills]
1005
+ );
1006
+ const filteredItems = useMemo(
1007
+ () => slashToken !== null ? filterSlashItems(slashItems, slashToken) : [],
1008
+ [slashItems, slashToken]
1009
+ );
1010
+ return {
1011
+ slashToken,
1012
+ filteredItems,
1013
+ isOpen: slashToken !== null && filteredItems.length > 0,
1014
+ /** The menu's "Browse all" footer opens the Skills browser: only for skills users. */
1015
+ canBrowseSkills: skillsEnabled
1016
+ };
1017
+ }
1018
+ function skillItems(builtinSkills, listings) {
1019
+ const { host, skills } = mergeSkillWorkflows([...builtinSkills], listings);
1020
+ const listing = new Map(listings.map((s) => [s.slug, s]));
1021
+ return [
1022
+ ...host.map((w) => ({
1023
+ name: w.id,
1024
+ description: w.description,
1025
+ argHint: w.inputs[0]?.label ?? "",
1026
+ visibility: "global",
1027
+ kind: "skill"
1028
+ })),
1029
+ ...skills.map((w) => {
1030
+ const s = listing.get(w.id);
1031
+ return {
1032
+ name: w.id,
1033
+ description: s?.description || (w.title !== w.id ? w.title : ""),
1034
+ argHint: s?.arg_hint ?? "",
1035
+ visibility: s?.visibility === "global" ? "global" : "mine",
1036
+ kind: "skill"
1037
+ };
1038
+ })
1039
+ ];
1040
+ }
1041
+ var ConversationComposerComponent = function ConversationComposer({
1042
+ value,
1043
+ onValueChange,
1044
+ handleSendMessage,
1045
+ isGenerating = false,
1046
+ compact = false,
1047
+ inputRef,
1048
+ isBranching = false,
1049
+ onCancelBranching,
1050
+ placeholder,
1051
+ onOpenSettings,
1052
+ leftButton,
1053
+ rightButton,
1054
+ modelSelector,
1055
+ skills,
1056
+ onBrowseSkills,
1057
+ contextUsage,
1058
+ isConversationEmpty = false,
1059
+ shouldOfferFollowUp = true
1060
+ }) {
1061
+ const session = useArbiSessionStore();
1062
+ const sessionDraft = useArbiSessionState(selectDraft);
1063
+ const newMessage = value ?? sessionDraft;
1064
+ const setNewMessage = onValueChange ?? session.setDraft;
1065
+ const { showHints } = useHintsVisibility();
1066
+ const suggestedQuery = useArbiSessionState((s) => s.suggestedQuery);
1067
+ const currentConversationId = useArbiSessionState((s) => s.conversationId);
1068
+ const workspaceId = useArbiSessionState((s) => s.workspaceId);
1069
+ const longPaste = useLongPaste(newMessage);
1070
+ const textareaRef = useRef(null);
1071
+ const formRef = useRef(null);
1072
+ useLayoutEffect(() => {
1073
+ const el = formRef.current;
1074
+ if (!el) return;
1075
+ const apply = () => {
1076
+ document.documentElement.style.setProperty("--chat-input-width", `${el.offsetWidth}px`);
1077
+ const rect = el.getBoundingClientRect();
1078
+ document.documentElement.style.setProperty("--chat-input-left", `${rect.left}px`);
1079
+ document.documentElement.style.setProperty("--chat-input-top", `${rect.top}px`);
1080
+ };
1081
+ apply();
1082
+ const ro = new ResizeObserver(apply);
1083
+ ro.observe(el);
1084
+ return () => ro.disconnect();
1085
+ }, []);
1086
+ useLayoutEffect(() => {
1087
+ if (textareaRef.current && inputRef && "current" in inputRef) {
1088
+ inputRef.current = textareaRef.current;
1089
+ }
1090
+ }, [inputRef]);
1091
+ const {
1092
+ slashToken,
1093
+ filteredItems,
1094
+ isOpen: isSlashMenuOpen,
1095
+ canBrowseSkills
1096
+ } = useSlashItems(newMessage, skills?.builtin);
1097
+ const insertSlashItem = (item) => {
1098
+ if (skills?.openFor(item)) {
1099
+ setNewMessage("");
1100
+ return;
1101
+ }
1102
+ setNewMessage(`/${item.name} `);
1103
+ requestAnimationFrame(() => {
1104
+ const ta = textareaRef.current;
1105
+ if (!ta) return;
1106
+ ta.focus();
1107
+ const end = `/${item.name} `.length;
1108
+ ta.setSelectionRange(end, end);
1109
+ });
1110
+ };
1111
+ const { data: users } = useWorkspaceUsers();
1112
+ const currentUserId = useArbiSession().user?.external_id;
1113
+ const assistantName = useAssistantName();
1114
+ const mentionCandidates = useMemo(
1115
+ () => buildMentionCandidates(users ?? [], currentUserId, assistantName),
1116
+ [users, currentUserId, assistantName]
1117
+ );
1118
+ const mention = useMentionAutocomplete({
1119
+ value: newMessage,
1120
+ onValueChange: setNewMessage,
1121
+ candidates: mentionCandidates,
1122
+ textareaRef
1123
+ });
1124
+ const { data: conversations } = useConversations(workspaceId ?? void 0);
1125
+ const isThread = conversations?.find((conversation) => conversation.external_id === currentConversationId)?.is_shared ?? false;
1126
+ const prefillsAssistant = isThread && !isBranching;
1127
+ const recipient = useRecipientDraft({
1128
+ value: newMessage,
1129
+ onValueChange: setNewMessage,
1130
+ contextKey: currentConversationId,
1131
+ defaultLabel: prefillsAssistant ? assistantName : null
1132
+ });
1133
+ const slashNav = useListKeyNav({
1134
+ open: isSlashMenuOpen,
1135
+ items: filteredItems,
1136
+ onPick: insertSlashItem,
1137
+ // Clear the leading slash to fully dismiss; otherwise the menu reopens on the next letter.
1138
+ onDismiss: () => setNewMessage(""),
1139
+ resetKey: slashToken
1140
+ });
1141
+ const isComposerMenuOpen = isSlashMenuOpen || mention.isOpen;
1142
+ useEffect(() => {
1143
+ if (isComposerMenuOpen) session.setActiveCitationKey(null);
1144
+ }, [isComposerMenuOpen, session]);
1145
+ const followUp = !newMessage && !isBranching && !isGenerating && shouldOfferFollowUp && showHints && suggestedQuery && suggestedQuery.conversationExtId === currentConversationId ? suggestedQuery.text : null;
1146
+ const sendDraft = () => {
1147
+ handleSendMessage();
1148
+ textareaRef.current?.focus();
1149
+ if (isBranching && onCancelBranching) onCancelBranching();
1150
+ };
1151
+ const onKeyDown = (event) => {
1152
+ if (recipient.handleKeyDown(event)) return;
1153
+ if (slashNav.handleKeyDown(event)) return;
1154
+ if (mention.nav.handleKeyDown(event)) return;
1155
+ if (followUp && event.key === "Tab" && !event.shiftKey) {
1156
+ event.preventDefault();
1157
+ setNewMessage(followUp);
1158
+ return;
1159
+ }
1160
+ if (event.key === "Escape" && isBranching && onCancelBranching) {
1161
+ event.preventDefault();
1162
+ onCancelBranching();
1163
+ }
1164
+ };
1165
+ const handleSubmit = (e) => {
1166
+ e.preventDefault();
1167
+ if (recipient.hasBody) sendDraft();
1168
+ };
1169
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
1170
+ Composer.Root,
1171
+ {
1172
+ onSubmit: handleSubmit,
1173
+ formRef,
1174
+ isBranching,
1175
+ notice: isBranching ? /* @__PURE__ */ jsx(Composer.Notice, { onCancel: onCancelBranching }) : void 0,
1176
+ children: /* @__PURE__ */ jsxs(
1177
+ Composer.Frame,
1178
+ {
1179
+ className: compact ? "rounded-none border-0 px-0 py-0 shadow-none focus-within:shadow-none" : void 0,
1180
+ children: [
1181
+ /* @__PURE__ */ jsx(
1182
+ SlashMenu,
1183
+ {
1184
+ open: isSlashMenuOpen,
1185
+ items: filteredItems,
1186
+ selectedIndex: slashNav.selectedIndex,
1187
+ setSelectedIndex: slashNav.setSelectedIndex,
1188
+ listboxId: slashNav.listboxId,
1189
+ onSelect: insertSlashItem,
1190
+ onBrowse: canBrowseSkills ? onBrowseSkills : void 0
1191
+ }
1192
+ ),
1193
+ /* @__PURE__ */ jsx(
1194
+ MentionMenu,
1195
+ {
1196
+ open: mention.isOpen,
1197
+ items: mention.items,
1198
+ selectedIndex: mention.nav.selectedIndex,
1199
+ setSelectedIndex: mention.nav.setSelectedIndex,
1200
+ listboxId: mention.nav.listboxId,
1201
+ onSelect: mention.pick
1202
+ }
1203
+ ),
1204
+ /* @__PURE__ */ jsx(
1205
+ Composer.Input,
1206
+ {
1207
+ value: newMessage,
1208
+ onValueChange: (next) => {
1209
+ mention.onValueChange(next);
1210
+ longPaste.onValueChange(next);
1211
+ },
1212
+ onPaste: (event) => longPaste.onPaste(event, newMessage),
1213
+ onKeyDown,
1214
+ textareaProps: {
1215
+ ...mention.isOpen ? mention.nav.comboboxProps : slashNav.comboboxProps,
1216
+ ...mention.textareaProps
1217
+ },
1218
+ textareaRef,
1219
+ isPasteCollapsed: longPaste.isCollapsed,
1220
+ onExpandPaste: () => {
1221
+ longPaste.expand();
1222
+ requestAnimationFrame(() => textareaRef.current?.focus());
1223
+ },
1224
+ isRoomy: isConversationEmpty,
1225
+ isSuggestion: !!followUp,
1226
+ compact,
1227
+ placeholder: followUp || placeholder || (isBranching ? "Edit message to create a branch..." : isThread ? "Message the thread\u2026 @mention someone to notify them" : isGenerating ? "Type your next prompt..." : "Ask ARBI anything\u2026")
1228
+ }
1229
+ ),
1230
+ /* @__PURE__ */ jsx(
1231
+ Composer.Toolbar,
1232
+ {
1233
+ className: compact ? "flex-nowrap" : void 0,
1234
+ leading: /* @__PURE__ */ jsxs(Fragment, { children: [
1235
+ leftButton,
1236
+ compact && modelSelector,
1237
+ onOpenSettings && /* @__PURE__ */ jsx(
1238
+ Button,
1239
+ {
1240
+ type: "button",
1241
+ variant: "ghost",
1242
+ size: "sm",
1243
+ onClick: onOpenSettings,
1244
+ className: "h-8 w-8 p-0 pointer-coarse:h-11 pointer-coarse:w-11",
1245
+ "aria-label": "Chat settings",
1246
+ title: "Chat settings",
1247
+ "data-testid": "message-input-settings-button",
1248
+ children: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4 text-muted-foreground" })
1249
+ }
1250
+ )
1251
+ ] }),
1252
+ trailing: /* @__PURE__ */ jsxs(Fragment, { children: [
1253
+ !compact && modelSelector,
1254
+ rightButton
1255
+ ] })
1256
+ }
1257
+ ),
1258
+ /* @__PURE__ */ jsx(ContextUsageBar, { contextUsage, draftLength: newMessage.length })
1259
+ ]
1260
+ }
1261
+ )
1262
+ }
1263
+ ) });
1264
+ };
1265
+ var ConversationComposer2 = memo(ConversationComposerComponent);
963
1266
  function MessageLiveSecondsComponent({
964
1267
  conversationId,
965
1268
  messageId,
@@ -979,7 +1282,7 @@ function MessageLiveSecondsComponent({
979
1282
  suffix
980
1283
  ] });
981
1284
  }
982
- var MessageLiveSeconds = React7.memo(MessageLiveSecondsComponent);
1285
+ var MessageLiveSeconds = React6.memo(MessageLiveSecondsComponent);
983
1286
  var DISPLAY_FIELDS = /* @__PURE__ */ new Set(["tool", "label", "icon", "summary"]);
984
1287
  function getToolParams(detail) {
985
1288
  const params = [];
@@ -1297,7 +1600,7 @@ function subStepNoun(tool) {
1297
1600
  function pluralise(noun) {
1298
1601
  return noun.endsWith("h") ? `${noun}es` : `${noun}s`;
1299
1602
  }
1300
- var AgentSteps = React7.memo(AgentStepsComponent, (prev, next) => {
1603
+ var AgentSteps = React6.memo(AgentStepsComponent, (prev, next) => {
1301
1604
  return prev.isStreaming === next.isStreaming && prev.className === next.className && prev.totalElapsedTime === next.totalElapsedTime && prev.steps === next.steps && prev.liveTimer === next.liveTimer && prev.hideLive === next.hideLive;
1302
1605
  });
1303
1606
  function groupStepsByHandle(steps) {
@@ -1511,490 +1814,115 @@ function LinkInAnswer({ href, children, ...props }) {
1511
1814
  }
1512
1815
  return /* @__PURE__ */ jsx(ExternalLink, { href, ...props, children });
1513
1816
  }
1514
- var ConnectedCitationRendererComponent = ({
1515
- alwaysInteractive,
1516
- ...props
1517
- }) => {
1518
- const session = useArbiSessionStore();
1519
- const openChunk = useOpenChunk();
1520
- const docTitles = useWorkspaceDocTitles();
1521
- const onOpenCitation = useCallback(
1522
- (citationKey) => session.setActiveCitationKey(citationKey),
1523
- [session]
1524
- );
1525
- const onActivateChunk = useCallback(
1526
- ({ messageId, citationNum, chunk }) => {
1527
- session.setActiveCitationKey(`${messageId}-${citationNum}`);
1528
- if (chunk.metadata.chunk_ext_id) openChunk(chunk);
1529
- },
1530
- [session, openChunk]
1531
- );
1532
- const onCloseCitation = useCallback(() => {
1533
- session.setActiveCitationKey(null);
1534
- const viewing = session.getState().viewingDocument;
1535
- if (viewing?.passageId) session.setViewingDocument({ id: viewing.id, passageId: null });
1536
- }, [session]);
1537
- const onDismissCitation = useCallback(() => session.setActiveCitationKey(null), [session]);
1538
- return /* @__PURE__ */ jsx(
1539
- CitationRenderer,
1540
- {
1541
- ...props,
1542
- renderMarkdown,
1543
- ExternalLink: LinkInAnswer,
1544
- onOpenCitation,
1545
- onActivateChunk,
1546
- useCitationState: alwaysInteractive ? useCitationStateAlwaysInteractive : useCitationState,
1547
- onCloseCitation,
1548
- onDismissCitation,
1549
- notify: notifyCitation,
1550
- docTitles
1551
- }
1552
- );
1553
- };
1554
- var ConnectedCitationRenderer = React7.memo(ConnectedCitationRendererComponent);
1555
- function sourceTitle(chunk, docTitles) {
1556
- const displayTitle = chunk.metadata.doc_ext_id ? docTitles.get(chunk.metadata.doc_ext_id) : void 0;
1557
- return displayTitle ?? chunk.metadata.doc_title ?? chunk.metadata.doc_ext_id ?? "Source";
1558
- }
1559
- function retrievedSources(citationData, docTitles) {
1560
- const seen = /* @__PURE__ */ new Map();
1561
- Object.values(citationData || {}).forEach((docChunks) => {
1562
- if (!Array.isArray(docChunks)) return;
1563
- docChunks.forEach((chunk) => {
1564
- const chunkId = chunk?.metadata?.chunk_ext_id;
1565
- if (!chunkId) return;
1566
- const key = `${chunk.metadata.doc_ext_id ?? ""}:${chunk.metadata.page_number ?? ""}`;
1567
- if (seen.has(key)) return;
1568
- seen.set(key, {
1569
- num: String(seen.size + 1),
1570
- chunkIds: [chunkId],
1571
- chunk,
1572
- title: sourceTitle(chunk, docTitles),
1573
- page: chunk.metadata.page_number
1574
- });
1575
- });
1576
- });
1577
- return [...seen.values()];
1578
- }
1579
- var SourceChips = ({ messageId, citations, citationData }) => {
1580
- const compact = useCompactChat();
1581
- const session = useArbiSessionStore();
1582
- const openChunk = useOpenChunk();
1583
- const docTitles = useWorkspaceDocTitles();
1584
- const sources = useMemo(() => {
1585
- if (!citations) return retrievedSources(citationData, docTitles);
1586
- const chunkMap = /* @__PURE__ */ new Map();
1587
- Object.values(citationData || {}).forEach((docChunks) => {
1588
- if (Array.isArray(docChunks)) {
1589
- docChunks.forEach((chunk) => {
1590
- if (chunk?.metadata?.chunk_ext_id) chunkMap.set(chunk.metadata.chunk_ext_id, chunk);
1591
- });
1592
- }
1593
- });
1594
- return Object.entries(citations).sort(([a], [b]) => Number(a) - Number(b)).map(([num, chunkIds]) => {
1595
- const chunk = chunkIds.map((id) => chunkMap.get(id)).find((c) => !!c);
1596
- if (!chunk) return null;
1597
- return {
1598
- num,
1599
- chunkIds,
1600
- chunk,
1601
- title: sourceTitle(chunk, docTitles),
1602
- page: chunk.metadata.page_number
1603
- };
1604
- }).filter((c) => c !== null);
1605
- }, [citations, citationData, docTitles]);
1606
- const open = (num) => {
1607
- const source = sources.find((s) => s.num === num);
1608
- if (!source) return;
1609
- if (!citations) {
1610
- openChunk(source.chunk);
1611
- return;
1612
- }
1613
- session.setActiveCitationKey(`${messageId}-${num}`);
1614
- if (source.chunk.metadata.chunk_ext_id) openChunk(source.chunk);
1615
- };
1616
- if (compact && sources.length)
1617
- return /* @__PURE__ */ jsxs("details", { className: "mt-2 text-xs text-muted-foreground", children: [
1618
- /* @__PURE__ */ jsx("summary", { className: "cursor-pointer py-1", children: "Sources" }),
1619
- /* @__PURE__ */ jsx(MessageSources, { messageId, sources, onOpenSource: open })
1620
- ] });
1621
- return /* @__PURE__ */ jsx(MessageSources, { messageId, sources, onOpenSource: open });
1622
- };
1623
- function MessageDetailsModal({
1624
- open,
1625
- onOpenChange,
1626
- messageExtId,
1627
- workspace
1628
- }) {
1629
- const {
1630
- data: messageDetails,
1631
- isLoading,
1632
- error
1633
- } = useMessageDetails(messageExtId, { enabled: open && !!messageExtId });
1634
- const currentConversationId = useArbiSessionState((s) => s.conversationId);
1635
- const conversationTitle = messageDetails?.conversation_ext_id === currentConversationId ? "Current Conversation" : "Message";
1636
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
1637
- DialogContent,
1638
- {
1639
- presentation: "sheet",
1640
- className: "max-w-4xl max-h-[calc(100dvh-2rem)] overflow-hidden flex flex-col",
1641
- "data-testid": "message-details-modal",
1642
- children: [
1643
- /* @__PURE__ */ jsx(
1644
- ModalBreadcrumbHeader,
1645
- {
1646
- icon: /* @__PURE__ */ jsx(FileText, { size: 20 }),
1647
- title: "Message Details",
1648
- subtitle: workspace || currentConversationId ? /* @__PURE__ */ jsx(
1649
- ModalCrumbs,
1650
- {
1651
- items: [
1652
- ...workspace ? [
1653
- {
1654
- icon: workspace.icon,
1655
- label: workspace.name
1656
- }
1657
- ] : [],
1658
- ...currentConversationId ? [{ label: conversationTitle }] : []
1659
- ]
1660
- }
1661
- ) : void 0,
1662
- description: "Full message data including execution trace and metadata"
1663
- }
1664
- ),
1665
- /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto p-4 bg-muted/20 rounded-md", children: [
1666
- isLoading && /* @__PURE__ */ jsx(
1667
- "div",
1668
- {
1669
- className: "flex items-center justify-center h-64",
1670
- "data-testid": "message-details-loading",
1671
- children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" })
1672
- }
1673
- ),
1674
- error && /* @__PURE__ */ jsxs(
1675
- "div",
1676
- {
1677
- className: "text-destructive p-4 border border-destructive/20 rounded-md",
1678
- "data-testid": "message-details-error",
1679
- children: [
1680
- "Error loading message details: ",
1681
- String(error)
1682
- ]
1683
- }
1684
- ),
1685
- messageDetails && /* @__PURE__ */ jsx("div", { "data-testid": "message-details-content", children: /* @__PURE__ */ jsx(MessageJsonTree, { data: messageDetails, name: "message", defaultExpanded: true }) })
1686
- ] })
1687
- ]
1688
- }
1689
- ) });
1690
- }
1691
- function useSlashItems(text, builtinSkills = []) {
1692
- const { data: listings } = useSkills();
1693
- const skillsEnabled = useUserSettings().data?.show_skills ?? false;
1694
- const { commands } = useBuiltinCommands();
1695
- const slashToken = parseSlashTokenInProgress(text);
1696
- const slashItems = useMemo(
1697
- () => buildSlashItems(
1698
- commands.map((c) => ({
1699
- name: c.name,
1700
- description: c.description,
1701
- argHint: c.arg_hint,
1702
- kind: "command"
1703
- })),
1704
- skillsEnabled ? skillItems(builtinSkills, listings ?? []) : []
1705
- ),
1706
- [commands, listings, skillsEnabled, builtinSkills]
1707
- );
1708
- const filteredItems = useMemo(
1709
- () => slashToken !== null ? filterSlashItems(slashItems, slashToken) : [],
1710
- [slashItems, slashToken]
1711
- );
1712
- return {
1713
- slashToken,
1714
- filteredItems,
1715
- isOpen: slashToken !== null && filteredItems.length > 0,
1716
- /** The menu's "Browse all" footer opens the Skills browser: only for skills users. */
1717
- canBrowseSkills: skillsEnabled
1718
- };
1719
- }
1720
- function skillItems(builtinSkills, listings) {
1721
- const { host, skills } = mergeSkillWorkflows([...builtinSkills], listings);
1722
- const listing = new Map(listings.map((s) => [s.slug, s]));
1723
- return [
1724
- ...host.map((w) => ({
1725
- name: w.id,
1726
- description: w.description,
1727
- argHint: w.inputs[0]?.label ?? "",
1728
- visibility: "global",
1729
- kind: "skill"
1730
- })),
1731
- ...skills.map((w) => {
1732
- const s = listing.get(w.id);
1733
- return {
1734
- name: w.id,
1735
- description: s?.description || (w.title !== w.id ? w.title : ""),
1736
- argHint: s?.arg_hint ?? "",
1737
- visibility: s?.visibility === "global" ? "global" : "mine",
1738
- kind: "skill"
1739
- };
1740
- })
1741
- ];
1742
- }
1743
- var ConversationComposerComponent = function ConversationComposer({
1744
- value,
1745
- onValueChange,
1746
- handleSendMessage,
1747
- isGenerating = false,
1748
- compact = false,
1749
- inputRef,
1750
- isBranching = false,
1751
- onCancelBranching,
1752
- placeholder,
1753
- onOpenSettings,
1754
- leftButton,
1755
- rightButton,
1756
- modelSelector,
1757
- skills,
1758
- onBrowseSkills,
1759
- contextUsage,
1760
- isConversationEmpty = false,
1761
- shouldOfferFollowUp = true
1762
- }) {
1763
- const session = useArbiSessionStore();
1764
- const sessionDraft = useArbiSessionState(selectDraft);
1765
- const newMessage = value ?? sessionDraft;
1766
- const setNewMessage = onValueChange ?? session.setDraft;
1767
- const suggestedQuery = useArbiSessionState((s) => s.suggestedQuery);
1768
- const currentConversationId = useArbiSessionState((s) => s.conversationId);
1769
- const workspaceId = useArbiSessionState((s) => s.workspaceId);
1770
- const longPaste = useLongPaste(newMessage);
1771
- const textareaRef = useRef(null);
1772
- const formRef = useRef(null);
1773
- useLayoutEffect(() => {
1774
- const el = formRef.current;
1775
- if (!el) return;
1776
- const apply = () => {
1777
- document.documentElement.style.setProperty("--chat-input-width", `${el.offsetWidth}px`);
1778
- const rect = el.getBoundingClientRect();
1779
- document.documentElement.style.setProperty("--chat-input-left", `${rect.left}px`);
1780
- document.documentElement.style.setProperty("--chat-input-top", `${rect.top}px`);
1781
- };
1782
- apply();
1783
- const ro = new ResizeObserver(apply);
1784
- ro.observe(el);
1785
- return () => ro.disconnect();
1786
- }, []);
1787
- useLayoutEffect(() => {
1788
- if (textareaRef.current && inputRef && "current" in inputRef) {
1789
- inputRef.current = textareaRef.current;
1790
- }
1791
- }, [inputRef]);
1792
- const {
1793
- slashToken,
1794
- filteredItems,
1795
- isOpen: isSlashMenuOpen,
1796
- canBrowseSkills
1797
- } = useSlashItems(newMessage, skills?.builtin);
1798
- const insertSlashItem = (item) => {
1799
- if (skills?.openFor(item)) {
1800
- setNewMessage("");
1801
- return;
1802
- }
1803
- setNewMessage(`/${item.name} `);
1804
- requestAnimationFrame(() => {
1805
- const ta = textareaRef.current;
1806
- if (!ta) return;
1807
- ta.focus();
1808
- const end = `/${item.name} `.length;
1809
- ta.setSelectionRange(end, end);
1810
- });
1811
- };
1812
- const { data: users } = useWorkspaceUsers();
1813
- const currentUserId = useArbiSession().user?.external_id;
1814
- const assistantName = useAssistantName();
1815
- const mentionCandidates = useMemo(
1816
- () => buildMentionCandidates(users ?? [], currentUserId, assistantName),
1817
- [users, currentUserId, assistantName]
1817
+ var ConnectedCitationRendererComponent = ({
1818
+ alwaysInteractive,
1819
+ ...props
1820
+ }) => {
1821
+ const session = useArbiSessionStore();
1822
+ const openChunk = useOpenChunk();
1823
+ const docTitles = useWorkspaceDocTitles();
1824
+ const onOpenCitation = useCallback(
1825
+ (citationKey) => session.setActiveCitationKey(citationKey),
1826
+ [session]
1818
1827
  );
1819
- const mention = useMentionAutocomplete({
1820
- value: newMessage,
1821
- onValueChange: setNewMessage,
1822
- candidates: mentionCandidates,
1823
- textareaRef
1824
- });
1825
- const { data: conversations } = useConversations(workspaceId ?? void 0);
1826
- const isThread = conversations?.find((conversation) => conversation.external_id === currentConversationId)?.is_shared ?? false;
1827
- const prefillsAssistant = isThread && !isBranching;
1828
- const recipient = useRecipientDraft({
1829
- value: newMessage,
1830
- onValueChange: setNewMessage,
1831
- contextKey: currentConversationId,
1832
- defaultLabel: prefillsAssistant ? assistantName : null
1833
- });
1834
- const slashNav = useListKeyNav({
1835
- open: isSlashMenuOpen,
1836
- items: filteredItems,
1837
- onPick: insertSlashItem,
1838
- // Clear the leading slash to fully dismiss; otherwise the menu reopens on the next letter.
1839
- onDismiss: () => setNewMessage(""),
1840
- resetKey: slashToken
1841
- });
1842
- const isComposerMenuOpen = isSlashMenuOpen || mention.isOpen;
1843
- useEffect(() => {
1844
- if (isComposerMenuOpen) session.setActiveCitationKey(null);
1845
- }, [isComposerMenuOpen, session]);
1846
- const followUp = !newMessage && !isBranching && !isGenerating && shouldOfferFollowUp && suggestedQuery && suggestedQuery.conversationExtId === currentConversationId ? suggestedQuery.text : null;
1847
- const sendDraft = () => {
1848
- handleSendMessage();
1849
- textareaRef.current?.focus();
1850
- if (isBranching && onCancelBranching) onCancelBranching();
1851
- };
1852
- const onKeyDown = (event) => {
1853
- if (recipient.handleKeyDown(event)) return;
1854
- if (slashNav.handleKeyDown(event)) return;
1855
- if (mention.nav.handleKeyDown(event)) return;
1856
- if (event.key === "Escape" && isBranching && onCancelBranching) {
1857
- event.preventDefault();
1858
- onCancelBranching();
1828
+ const onActivateChunk = useCallback(
1829
+ ({ messageId, citationNum, chunk }) => {
1830
+ session.setActiveCitationKey(`${messageId}-${citationNum}`);
1831
+ if (chunk.metadata.chunk_ext_id) openChunk(chunk);
1832
+ },
1833
+ [session, openChunk]
1834
+ );
1835
+ const onCloseCitation = useCallback(() => {
1836
+ session.setActiveCitationKey(null);
1837
+ const viewing = session.getState().viewingDocument;
1838
+ if (viewing?.passageId) session.setViewingDocument({ id: viewing.id, passageId: null });
1839
+ }, [session]);
1840
+ const onDismissCitation = useCallback(() => session.setActiveCitationKey(null), [session]);
1841
+ return /* @__PURE__ */ jsx(
1842
+ CitationRenderer,
1843
+ {
1844
+ ...props,
1845
+ renderMarkdown,
1846
+ ExternalLink: LinkInAnswer,
1847
+ onOpenCitation,
1848
+ onActivateChunk,
1849
+ useCitationState: alwaysInteractive ? useCitationStateAlwaysInteractive : useCitationState,
1850
+ onCloseCitation,
1851
+ onDismissCitation,
1852
+ notify: notifyCitation,
1853
+ docTitles
1859
1854
  }
1860
- };
1861
- const handleSubmit = (e) => {
1862
- e.preventDefault();
1863
- if (recipient.hasBody) sendDraft();
1864
- };
1865
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
1866
- Composer.Root,
1855
+ );
1856
+ };
1857
+ var ConnectedCitationRenderer = React6.memo(ConnectedCitationRendererComponent);
1858
+ function MessageDetailsModal({
1859
+ open,
1860
+ onOpenChange,
1861
+ messageExtId,
1862
+ workspace
1863
+ }) {
1864
+ const {
1865
+ data: messageDetails,
1866
+ isLoading,
1867
+ error
1868
+ } = useMessageDetails(messageExtId, { enabled: open && !!messageExtId });
1869
+ const currentConversationId = useArbiSessionState((s) => s.conversationId);
1870
+ const conversationTitle = messageDetails?.conversation_ext_id === currentConversationId ? "Current Conversation" : "Message";
1871
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
1872
+ DialogContent,
1867
1873
  {
1868
- onSubmit: handleSubmit,
1869
- formRef,
1870
- isBranching,
1871
- notice: isBranching ? /* @__PURE__ */ jsx(Composer.Notice, { onCancel: onCancelBranching }) : void 0,
1872
- children: /* @__PURE__ */ jsxs(
1873
- Composer.Frame,
1874
- {
1875
- className: compact ? "rounded-none border-0 px-0 py-0 shadow-none focus-within:shadow-none" : void 0,
1876
- children: [
1877
- /* @__PURE__ */ jsx(
1878
- SlashMenu,
1879
- {
1880
- open: isSlashMenuOpen,
1881
- items: filteredItems,
1882
- selectedIndex: slashNav.selectedIndex,
1883
- setSelectedIndex: slashNav.setSelectedIndex,
1884
- listboxId: slashNav.listboxId,
1885
- onSelect: insertSlashItem,
1886
- onBrowse: canBrowseSkills ? onBrowseSkills : void 0
1887
- }
1888
- ),
1889
- /* @__PURE__ */ jsx(
1890
- MentionMenu,
1891
- {
1892
- open: mention.isOpen,
1893
- items: mention.items,
1894
- selectedIndex: mention.nav.selectedIndex,
1895
- setSelectedIndex: mention.nav.setSelectedIndex,
1896
- listboxId: mention.nav.listboxId,
1897
- onSelect: mention.pick
1898
- }
1899
- ),
1900
- followUp && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 px-3 pt-2", "data-testid": "follow-up-suggestion", children: [
1901
- /* @__PURE__ */ jsxs(
1902
- Button,
1903
- {
1904
- type: "button",
1905
- variant: "outline",
1906
- size: "sm",
1907
- className: "h-auto min-w-0 max-w-full rounded-full py-1 font-normal",
1908
- onClick: () => {
1909
- setNewMessage(followUp);
1910
- requestAnimationFrame(() => textareaRef.current?.focus());
1911
- },
1912
- "data-testid": "follow-up-suggestion-button",
1913
- children: [
1914
- /* @__PURE__ */ jsx(ArrowUpRight, { className: "h-3.5 w-3.5 shrink-0" }),
1915
- /* @__PURE__ */ jsx("span", { className: "truncate", children: followUp })
1916
- ]
1917
- }
1918
- ),
1919
- /* @__PURE__ */ jsx(
1920
- Button,
1921
- {
1922
- type: "button",
1923
- variant: "outline",
1924
- size: "icon",
1925
- className: "h-7 w-7 shrink-0 rounded-full pointer-coarse:h-11 pointer-coarse:w-11",
1926
- onClick: () => {
1927
- setNewMessage(followUp);
1928
- sendDraft();
1929
- },
1930
- "aria-label": "Send this question",
1931
- title: "Send this question",
1932
- "data-testid": "follow-up-suggestion-send",
1933
- children: /* @__PURE__ */ jsx(Send, { className: "h-3.5 w-3.5" })
1934
- }
1935
- )
1936
- ] }),
1937
- /* @__PURE__ */ jsx(
1938
- Composer.Input,
1939
- {
1940
- value: newMessage,
1941
- onValueChange: (next) => {
1942
- mention.onValueChange(next);
1943
- longPaste.onValueChange(next);
1944
- },
1945
- onPaste: (event) => longPaste.onPaste(event, newMessage),
1946
- onKeyDown,
1947
- textareaProps: {
1948
- ...mention.isOpen ? mention.nav.comboboxProps : slashNav.comboboxProps,
1949
- ...mention.textareaProps
1950
- },
1951
- textareaRef,
1952
- isPasteCollapsed: longPaste.isCollapsed,
1953
- onExpandPaste: () => {
1954
- longPaste.expand();
1955
- requestAnimationFrame(() => textareaRef.current?.focus());
1956
- },
1957
- isRoomy: isConversationEmpty,
1958
- compact,
1959
- placeholder: placeholder || (isBranching ? "Edit message to create a branch..." : isThread ? "Message the thread\u2026 @mention someone to notify them" : isGenerating ? "Type your next prompt..." : "Ask ARBI anything\u2026")
1960
- }
1961
- ),
1962
- /* @__PURE__ */ jsx(
1963
- Composer.Toolbar,
1874
+ presentation: "sheet",
1875
+ className: "max-w-4xl max-h-[calc(100dvh-2rem)] overflow-hidden flex flex-col",
1876
+ "data-testid": "message-details-modal",
1877
+ children: [
1878
+ /* @__PURE__ */ jsx(
1879
+ ModalBreadcrumbHeader,
1880
+ {
1881
+ icon: /* @__PURE__ */ jsx(FileText, { size: 20 }),
1882
+ title: "Message Details",
1883
+ subtitle: workspace || currentConversationId ? /* @__PURE__ */ jsx(
1884
+ ModalCrumbs,
1964
1885
  {
1965
- className: compact ? "flex-nowrap" : void 0,
1966
- leading: /* @__PURE__ */ jsxs(Fragment, { children: [
1967
- leftButton,
1968
- compact && modelSelector,
1969
- onOpenSettings && /* @__PURE__ */ jsx(
1970
- Button,
1886
+ items: [
1887
+ ...workspace ? [
1971
1888
  {
1972
- type: "button",
1973
- variant: "ghost",
1974
- size: "sm",
1975
- onClick: onOpenSettings,
1976
- className: "h-8 w-8 p-0 pointer-coarse:h-11 pointer-coarse:w-11",
1977
- "aria-label": "Chat settings",
1978
- title: "Chat settings",
1979
- "data-testid": "message-input-settings-button",
1980
- children: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4 text-muted-foreground" })
1889
+ icon: workspace.icon,
1890
+ label: workspace.name
1981
1891
  }
1982
- )
1983
- ] }),
1984
- trailing: /* @__PURE__ */ jsxs(Fragment, { children: [
1985
- !compact && modelSelector,
1986
- rightButton
1987
- ] })
1892
+ ] : [],
1893
+ ...currentConversationId ? [{ label: conversationTitle }] : []
1894
+ ]
1988
1895
  }
1989
- ),
1990
- /* @__PURE__ */ jsx(ContextUsageBar, { contextUsage, draftLength: newMessage.length })
1991
- ]
1992
- }
1993
- )
1896
+ ) : void 0,
1897
+ description: "Full message data including execution trace and metadata"
1898
+ }
1899
+ ),
1900
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto p-4 bg-muted/20 rounded-md", children: [
1901
+ isLoading && /* @__PURE__ */ jsx(
1902
+ "div",
1903
+ {
1904
+ className: "flex items-center justify-center h-64",
1905
+ "data-testid": "message-details-loading",
1906
+ children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" })
1907
+ }
1908
+ ),
1909
+ error && /* @__PURE__ */ jsxs(
1910
+ "div",
1911
+ {
1912
+ className: "text-destructive p-4 border border-destructive/20 rounded-md",
1913
+ "data-testid": "message-details-error",
1914
+ children: [
1915
+ "Error loading message details: ",
1916
+ String(error)
1917
+ ]
1918
+ }
1919
+ ),
1920
+ messageDetails && /* @__PURE__ */ jsx("div", { "data-testid": "message-details-content", children: /* @__PURE__ */ jsx(MessageJsonTree, { data: messageDetails, name: "message", defaultExpanded: true }) })
1921
+ ] })
1922
+ ]
1994
1923
  }
1995
1924
  ) });
1996
- };
1997
- var ConversationComposer2 = memo(ConversationComposerComponent);
1925
+ }
1998
1926
  function useOpenWorkspaceIcon() {
1999
1927
  const workspaceId = useArbiSessionState((s) => s.workspaceId);
2000
1928
  const { data: workspaces } = useWorkspaces();
@@ -2245,10 +2173,10 @@ var MessageComponent = ({
2245
2173
  const fullUrl = domain ? `https://${domain}${path}` : `${window.location.origin}${path}`;
2246
2174
  navigator.clipboard.writeText(fullUrl).then(
2247
2175
  () => notify3(
2248
- React7.createElement(
2176
+ React6.createElement(
2249
2177
  "span",
2250
2178
  {},
2251
- React7.createElement(
2179
+ React6.createElement(
2252
2180
  "a",
2253
2181
  {
2254
2182
  href: fullUrl,
@@ -2731,15 +2659,7 @@ var MessageComponent = ({
2731
2659
  }
2732
2660
  ),
2733
2661
  !isUser && linkedArtifact && /* @__PURE__ */ jsx(MessageArtifactCard, { artifact: linkedArtifact, onOpen: handleOpenArtifact }),
2734
- !isUser && subagentLinks,
2735
- !isUser && !isGenerating && /* @__PURE__ */ jsx(
2736
- SourceChips,
2737
- {
2738
- messageId: message.external_id || "unknown",
2739
- citations: activeCitations,
2740
- citationData
2741
- }
2742
- )
2662
+ !isUser && subagentLinks
2743
2663
  ]
2744
2664
  }
2745
2665
  ),
@@ -2787,7 +2707,7 @@ function areMessagesEqual(prevProps, nextProps) {
2787
2707
  if (prevProps.subagentLinks !== nextProps.subagentLinks) return false;
2788
2708
  return true;
2789
2709
  }
2790
- var ConnectedMessage = React7.memo(MessageComponent, areMessagesEqual);
2710
+ var ConnectedMessage = React6.memo(MessageComponent, areMessagesEqual);
2791
2711
  var VERSION_LABELS = {
2792
2712
  branchOf: (current, total) => `Version ${current} of ${total}`,
2793
2713
  previousBranch: "Previous version",
@@ -5308,6 +5228,6 @@ function ArbiChat({ apiUrl, deploymentDomain, className, ...props }) {
5308
5228
  return /* @__PURE__ */ jsx(ArbiHost, { config: host, children: /* @__PURE__ */ jsx(ConnectedEmbeddedChat, { ...props, className }) }, `${apiUrl}|${deploymentDomain ?? ""}`);
5309
5229
  }
5310
5230
 
5311
- export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer2 as ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, SessionStatusIcon, SourceChips, WorkflowStepMessage, backUpOnSignup, completeSsoSignIn, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, ssoAccountStatus, useAuthPages, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles };
5312
- //# sourceMappingURL=chunk-IGQJ6ET3.js.map
5313
- //# sourceMappingURL=chunk-IGQJ6ET3.js.map
5231
+ export { AgentSteps, AnswerTable, ArbiChat, AskAgainContext, ConnectedBranchControls, ConnectedCitationRenderer, ConnectedCompactConversation, ConnectedConversationDocumentPicker, ConnectedDangerZone, ConnectedEmbeddedChat, ConnectedForgotPassword, ConnectedIdentityVerification, ConnectedLoginPage, ConnectedLogoutDialog, ConnectedMessage, ConnectedMessageArea, ConnectedMessageList, ConnectedModelSelector, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedThreadsPreview, ConnectedUserEntity, ConversationComposer2 as ConversationComposer, EmbeddedChatPanel, MessageDetailsModal, MessageLiveSeconds, PENDING_RECOVERY_KEY, PREMIUM_TIER_TAG, RunningSubagents, STANDARD_TIER_TAG, SessionStatusIcon, WorkflowStepMessage, backUpOnSignup, completeSsoSignIn, defaultHost, renderConnectedUser, renderSessionStatusIcon, resolveSsoName, ssoAccountStatus, useAuthPages, useContextualHints, useModelPicker, useOpenChunk, useOpenWorkspaceIcon, useSlashItems, useSsoSignIn, useWorkspaceDocTitles };
5232
+ //# sourceMappingURL=chunk-TWSOU6SE.js.map
5233
+ //# sourceMappingURL=chunk-TWSOU6SE.js.map