@frontera-sdk/chat-ui 1.52.40 → 1.52.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/chat.js CHANGED
@@ -1,23 +1,23 @@
1
1
  'use client';
2
2
  import { offset, flip, autoUpdate, computePosition } from './chunk-I7SXWUAN.js';
3
3
  import { isFullscreenHotkey, DeckNotesCard, deckOwnsArrowKeys } from './chunk-4FRTPVJT.js';
4
- import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-L53QV2NP.js';
5
- import { NewSessionPrompt, keepCaretOnTap } from './chunk-PBCI2XZ5.js';
6
- import { PendingCards } from './chunk-UZ6RDWCT.js';
4
+ import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-4DDOGZVM.js';
5
+ import { NewSessionPrompt, keepCaretOnTap } from './chunk-5FR2R2Q5.js';
6
+ import { PendingCards } from './chunk-N3I3MZTY.js';
7
7
  import { themeToStyle } from './chunk-6HYPVNVA.js';
8
8
  import { useChatAgents } from './chunk-O6CVTMZJ.js';
9
9
  import { subjectOfChatToken, capabilitiesOfChatToken } from './chunk-CCVPZVFK.js';
10
10
  import { useChatCredential } from './chunk-37G6MHWS.js';
11
11
  import './chunk-WDYCLC4F.js';
12
- import { chatSidePanelSessionKey, Chart1Icon, useTemplatePreviewStore, useHasTemplatePreviewHost, useChatSidePanelStore, ChatHeader, ChatHeaderActions, useRightPane, getChatOverviewAgentStatus, useChatOverviewVisible, useConversationArtifacts, PENDING_CHART_TAB_PREFIX, CHART_TAB_PREFIX, AGENT_WORK_TAB_ID, AGENT_ROUTINES_TAB_ID, SOURCES_TAB_ID, TEMPLATE_TAB_ID, OutputsSection, ChainLink1Icon, ChatOverviewContent, COMPUTER_TAB_PREFIX, SourceRow, motion, MAX_CHAT_SIDE_PANEL_SESSIONS, DEFAULT_CHAT_SIDE_PANEL_SIZE, TableIcon } from './chunk-L2SBA2T6.js';
12
+ import { chatSidePanelSessionKey, Chart1Icon, useTemplatePreviewStore, useHasTemplatePreviewHost, useChatSidePanelStore, ChatHeader, ChatHeaderActions, useRightPane, getChatOverviewAgentStatus, useChatOverviewVisible, useConversationArtifacts, PENDING_CHART_TAB_PREFIX, CHART_TAB_PREFIX, AGENT_WORK_TAB_ID, AGENT_ROUTINES_TAB_ID, SOURCES_TAB_ID, TEMPLATE_TAB_ID, OutputsSection, ChainLink1Icon, ChatOverviewContent, COMPUTER_TAB_PREFIX, SourceRow, motion, MAX_CHAT_SIDE_PANEL_SESSIONS, DEFAULT_CHAT_SIDE_PANEL_SIZE, TableIcon } from './chunk-3J7EDXMY.js';
13
13
  import './chunk-X3QVICX7.js';
14
- import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, usePersonConfirmations, unshownPendingConfirmations, ConversationConfirmationCard, useLivePreviewUrl, ArrowRotateClockwiseIcon, useComputerFiles, useUploadComputerFile, CanvasWidget, isPlainTextLanguage, useUploadFile, COMPOSER_ID_MAIN, useContextWindowInfo, useIsCompacting, useQueuedMessages, VolumeFullIcon, WarningSignIcon, useComputer, csvTextToWorkbookJson, CSV_PREVIEW_MAX_ROWS, CopyButton, COMPOSER_ID_COPILOT, ModelIcon, modeToBrandRow, useBackDismiss, PdfViewer, brandLabel, Spinner } from './chunk-ZPFZYY6T.js';
15
- import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, getPersonConfirmation, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, usePaneFocusStore, useAgentPanelStore, Tooltip, TooltipTrigger, TooltipContent, StudioDisplayIcon, WorldIcon, SlidesWideIcon, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, ArrowsShowIcon, useKeyboardInset, ExclamationCircleIcon, getToolOutput, useArtifact, useUpdateArtifact, useArtifactFileObjectUrl, resolveArtifactIconFormat, useSourcesEnrichment, LoaderIcon, FileDownloadIcon, Label, Input, renderPluginBlock, useArtifactVersion, useChatCapabilities, useChatCapabilityEnabled, useChatOptInEnabled, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, errorText, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useSession, useWorkspaceContext, useConversationDesktopStatus, isRequestHumanTool, appsKeys, unwrapDataDeep, useRouter, Images1Icon, ArrowUpIcon, VideoIcon, AudioIcon, useBrand, resolveBearerHeaders, subscribeSdkDarkMode, getSdkDarkMode, unwrap, useConnectRunner, useStartUserConnect, useUpsertGrant, useRevokeGrant, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, LayoutGrid1Icon, useCatalog, useInstalls, useWorkspaceSlug, buildTenantUrlAbsolute } from './chunk-HX5M56P5.js';
14
+ import { dynamic, useChatStreamStore, useComposerStore, Message, Thinking, setPendingFiles, usePersonConfirmations, unshownPendingConfirmations, ConversationConfirmationCard, useLivePreviewUrl, ArrowRotateClockwiseIcon, useComputerFiles, useUploadComputerFile, CanvasWidget, isPlainTextLanguage, useUploadFile, COMPOSER_ID_MAIN, useContextWindowInfo, useIsCompacting, useQueuedMessages, VolumeFullIcon, WarningSignIcon, useComputer, csvTextToWorkbookJson, CSV_PREVIEW_MAX_ROWS, CopyButton, COMPOSER_ID_COPILOT, ModelIcon, modeToBrandRow, useBackDismiss, PdfViewer, brandLabel, Spinner } from './chunk-WO2UNC2J.js';
15
+ import { Textarea, artifactFormatIcon, BookIcon, useAgentRoster, ShieldCheckIcon, useArtifactStore, useCanvasStore, useChatOverviewStore, setSdkConversationPath, setSdkDarkMode, AgentsProvider, PluginProvider, WorkspaceProvider, TooltipProvider, getPersonConfirmation, isToolPart, getToolState, getToolName, getToolInput, sourceKind, extractDomain, CitationViewerContext, MarkdownRenderer, ConnectRunnerContext, usePathname, usePaneFocusStore, useAgentPanelStore, Tooltip, TooltipTrigger, TooltipContent, StudioDisplayIcon, WorldIcon, SlidesWideIcon, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, ArrowsShowIcon, useKeyboardInset, ExclamationCircleIcon, getToolOutput, useArtifact, useUpdateArtifact, useArtifactFileObjectUrl, resolveArtifactIconFormat, useSourcesEnrichment, LoaderIcon, FileDownloadIcon, Label, Input, renderPluginBlock, useArtifactVersion, useChatCapabilities, useChatCapabilityEnabled, useChatOptInEnabled, useSessionPendingApprovals, tableToCsv, tableToXlsx, tableToMarkdown, DropdownMenu, DropdownMenuTrigger, StyledDropdownMenuContent, StyledDropdownMenuItem, useArtifactVersions, useClient, unwrapData, authFetch, getBearerHeadersForApi, EyeOpenIcon, EyeSlashIcon, useRestoreArtifactVersion, ZoomableImage, ChatImageLightbox, useDownloadArtifact, useArtifactFileBytes, useArtifactPreviewFileObjectUrl, useArtifactVersionPreviewFileObjectUrl, errorText, SpreadsheetIcon, FilePdfIcon, useOptionalWorkspaceContext, useAgentConnectionStatus, useArtifacts, useSession, useWorkspaceContext, useConversationDesktopStatus, isRequestHumanTool, appsKeys, unwrapDataDeep, useRouter, Images1Icon, ArrowUpIcon, VideoIcon, AudioIcon, useBrand, resolveBearerHeaders, subscribeSdkDarkMode, getSdkDarkMode, unwrap, useConnectRunner, useStartUserConnect, useUpsertGrant, useRevokeGrant, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, LayoutGrid1Icon, useCatalog, useInstalls, useWorkspaceSlug, buildTenantUrlAbsolute } from './chunk-4DWSQQQE.js';
16
16
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
17
17
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from './chunk-T5SANYSX.js';
18
- import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-77OYEA4D.js';
19
- import './chunk-QBV7MAFV.js';
20
- import { AppIcon, frontera_icon_default, PhotoIcon, Folder1Icon, FileTextIcon, describeToolRow, SquareArrowTopRightIcon, ClipboardIcon, getToolMeta, useStreamdownPlugins, AppIconFrame, MessageResponse } from './chunk-PKNEC4LJ.js';
18
+ import { MOBILE_BREAKPOINT, useIsMobile, I18nProvider, useTranslation } from './chunk-3ED4DPTV.js';
19
+ import './chunk-BRCS2NHC.js';
20
+ import { AppIcon, frontera_icon_default, PhotoIcon, Folder1Icon, FileTextIcon, describeToolRow, SquareArrowTopRightIcon, ClipboardIcon, getToolMeta, useStreamdownPlugins, AppIconFrame, MessageResponse } from './chunk-X33KXNO3.js';
21
21
  import { Skeleton, Button, ScrollArea, ChevronDownMediumIcon, buttonVariants } from './chunk-UWKO24VT.js';
22
22
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, CrossMediumIcon, DialogFooter } from './chunk-2P4IEVOQ.js';
23
23
  import './chunk-CDTES65T.js';
@@ -42449,7 +42449,7 @@ function SheetEditor({ content, onSave, readOnly = false }) {
42449
42449
  );
42450
42450
  }
42451
42451
  var PdfDocumentViewInner = dynamic(
42452
- () => import('./pdf-document-view-inner-V52OOVMQ.js'),
42452
+ () => import('./pdf-document-view-inner-V7FGCXYR.js'),
42453
42453
  {
42454
42454
  ssr: false,
42455
42455
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "pdf" })
@@ -43001,11 +43001,11 @@ function DeckPresenter({ slides, start, mode, onClose }) {
43001
43001
  };
43002
43002
  window.addEventListener("keydown", onKey);
43003
43003
  let entered = false;
43004
- try {
43005
- document.documentElement.requestFullscreen?.();
43004
+ const fullscreen = document.documentElement.requestFullscreen?.();
43005
+ void fullscreen?.then(() => {
43006
43006
  entered = true;
43007
- } catch {
43008
- }
43007
+ }).catch(() => {
43008
+ });
43009
43009
  const fmt = () => (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
43010
43010
  setNow(fmt());
43011
43011
  const t2 = setInterval(() => {
@@ -43266,7 +43266,7 @@ function HtmlDeckView({ content, inChat = false, versionSlot }) {
43266
43266
  !present && inChat && /* @__PURE__ */ jsx(DeckEditPanel, { currentIndex: sel, currentHtml: slides[sel]?.html ?? "" })
43267
43267
  ] });
43268
43268
  }
43269
- var Inner = dynamic(() => import('./pdf-deck-view-inner-MDUCJH2U.js'), {
43269
+ var Inner = dynamic(() => import('./pdf-deck-view-inner-ZE7DECMZ.js'), {
43270
43270
  ssr: false,
43271
43271
  loading: () => /* @__PURE__ */ jsx(ArtifactSkeleton, { format: "htmldeck" })
43272
43272
  });
@@ -45325,6 +45325,7 @@ function CopyAction({ text: text2 }) {
45325
45325
  navigator.clipboard.writeText(text2).then(() => {
45326
45326
  setCopied(true);
45327
45327
  setTimeout(() => setCopied(false), 2e3);
45328
+ }).catch(() => {
45328
45329
  });
45329
45330
  }, [text2]);
45330
45331
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
@@ -65325,6 +65326,22 @@ var MOBILE_LIST_FRACTION = 0.5;
65325
65326
  var PLACEHOLDER_CHAR_MS = 20;
65326
65327
  var AT_PLUGIN_KEY = new PluginKey("composerMentionAt");
65327
65328
  var SLASH_PLUGIN_KEY = new PluginKey("composerMentionSlash");
65329
+ function composerKeymap(onBackspaceAtStart) {
65330
+ return Extension.create({
65331
+ name: "composerKeymap",
65332
+ priority: 50,
65333
+ addKeyboardShortcuts() {
65334
+ return {
65335
+ "Shift-Enter": () => this.editor.commands.setHardBreak(),
65336
+ Backspace: () => {
65337
+ const { selection } = this.editor.state;
65338
+ if (!selection.empty || selection.$anchor.pos > 1) return false;
65339
+ return onBackspaceAtStart.current?.() ?? false;
65340
+ }
65341
+ };
65342
+ }
65343
+ });
65344
+ }
65328
65345
  var ComposerEditor = forwardRef(function ComposerEditor2({
65329
65346
  placeholder,
65330
65347
  typePlaceholder,
@@ -65374,22 +65391,7 @@ var ComposerEditor = forwardRef(function ComposerEditor2({
65374
65391
  onCutAtStartRef.current = onCutAtStart;
65375
65392
  const onBackspaceAtStartRef = useRef(onBackspaceAtStart);
65376
65393
  onBackspaceAtStartRef.current = onBackspaceAtStart;
65377
- const submitKeymap = useRef(
65378
- Extension.create({
65379
- name: "composerKeymap",
65380
- priority: 50,
65381
- addKeyboardShortcuts() {
65382
- return {
65383
- "Shift-Enter": () => this.editor.commands.setHardBreak(),
65384
- Backspace: () => {
65385
- const { selection } = this.editor.state;
65386
- if (!selection.empty || selection.$anchor.pos > 1) return false;
65387
- return onBackspaceAtStartRef.current?.() ?? false;
65388
- }
65389
- };
65390
- }
65391
- })
65392
- ).current;
65394
+ const submitKeymap = useRef(composerKeymap(onBackspaceAtStartRef)).current;
65393
65395
  const editor = useEditor({
65394
65396
  immediatelyRender: false,
65395
65397
  extensions: [
@@ -67333,6 +67335,12 @@ function useVoiceDictation(onTranscript, onError) {
67333
67335
  }, []);
67334
67336
  return { phase, error: error2, supported, start, stop, cancel, getLevel };
67335
67337
  }
67338
+
67339
+ // ../chat/src/ui/voice/voice-offer.ts
67340
+ function voiceOffer(voice) {
67341
+ const readAloud = !!voice?.hasVoice && !!voice.canSpeak;
67342
+ return { readAloud, microphone: readAloud && !!voice?.providerConfigured };
67343
+ }
67336
67344
  var useVoiceModeStore = create()(
67337
67345
  persist(
67338
67346
  (set2, get2) => ({
@@ -69324,7 +69332,7 @@ function ComposerTemplateStrip({
69324
69332
  className: "hidden",
69325
69333
  onChange: (e) => {
69326
69334
  const f = e.target.files?.[0];
69327
- if (f) onImport(f);
69335
+ if (f) void onImport(f);
69328
69336
  e.target.value = "";
69329
69337
  }
69330
69338
  }
@@ -69792,10 +69800,12 @@ function ApprovalGrantsList({
69792
69800
  /* @__PURE__ */ jsx("p", { className: "px-2 pb-1 text-xs text-muted-foreground", children: "Not asking in this chat" }),
69793
69801
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5", children: grants.map((grant) => {
69794
69802
  const tool = getToolMeta(grant.toolName).label;
69795
- const label = grant.target ? `${tool}: ${grant.target}` : tool;
69803
+ const label = grant.label ?? (grant.target ? `${tool}: ${grant.target}` : tool);
69804
+ const detail = grant.label ? grant.target ?? tool : null;
69796
69805
  return /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 rounded-lg px-2 py-1", children: [
69797
69806
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
69798
69807
  /* @__PURE__ */ jsx("span", { className: "block truncate text-xs font-medium text-foreground", children: label }),
69808
+ detail && /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-muted-foreground", children: detail }),
69799
69809
  /* @__PURE__ */ jsxs("span", { className: "block text-xs text-muted-foreground", children: [
69800
69810
  "Allowed ",
69801
69811
  new Date(grant.createdAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })
@@ -69809,7 +69819,7 @@ function ApprovalGrantsList({
69809
69819
  variant: "outline",
69810
69820
  className: "h-7 rounded-full px-2.5 text-xs",
69811
69821
  disabled: revoke.isPending,
69812
- "aria-label": `Stop allowing ${label}`,
69822
+ "aria-label": `Stop allowing ${label}${detail ? ` (${detail})` : ""}`,
69813
69823
  onClick: () => revoke.mutate(grant.id),
69814
69824
  children: "Stop allowing"
69815
69825
  }
@@ -69872,7 +69882,7 @@ function approvalEffect(approval) {
69872
69882
  case "external":
69873
69883
  return { label: "Reaches outside this workspace", tone: "external" };
69874
69884
  case "live":
69875
- return { label: "Makes a live change", tone: "neutral" };
69885
+ return approval.readsOnly ? { label: "Only reads data", tone: "neutral" } : { label: "Makes a live change", tone: "neutral" };
69876
69886
  default:
69877
69887
  return null;
69878
69888
  }
@@ -70037,10 +70047,10 @@ function ApprovalPromptDetails({
70037
70047
  approval.policyReason
70038
70048
  ] }),
70039
70049
  plan && !summaryShown && /* @__PURE__ */ jsx(ApprovalPlanDetails, { plan }),
70040
- !plan && preview.length > 0 && /* @__PURE__ */ jsx("dl", { className: "grid grid-cols-[minmax(4.5rem,max-content)_1fr] gap-x-3 gap-y-1", children: preview.map((item) => /* @__PURE__ */ jsxs("div", { className: "contents", children: [
70050
+ !plan && preview.length > 0 && /* @__PURE__ */ jsx("dl", { className: "grid grid-cols-[minmax(4.5rem,max-content)_1fr] gap-x-3 gap-y-1", children: preview.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "contents", children: [
70041
70051
  /* @__PURE__ */ jsx("dt", { className: "break-all text-muted-foreground", children: item.label }),
70042
70052
  /* @__PURE__ */ jsx("dd", { className: "min-w-0 break-words text-foreground", children: item.value })
70043
- ] }, item.label)) }),
70053
+ ] }, index)) }),
70044
70054
  /* @__PURE__ */ jsx("p", { className: "flex flex-wrap gap-x-2.5 gap-y-0.5 text-muted-foreground", children: meta.map((part) => /* @__PURE__ */ jsx("span", { className: "break-all", children: part }, part)) })
70045
70055
  ] });
70046
70056
  }
@@ -70128,7 +70138,11 @@ function ComposerApprovalPrompt({ state }) {
70128
70138
  { verdict: "approve", label: irreversible ? "Approve\u2026" : "Approve" },
70129
70139
  // Offered only when the server says this request can be allowed for the
70130
70140
  // chat: never for deletes, workspace-wide changes or sensitive actions.
70131
- ...approval.canAllowForChat ? [{ verdict: "allow", label: "Approve, and don\u2019t ask again in this chat", hint: `for ${kindLabel}` }] : [],
70141
+ ...approval.canAllowForChat ? [{
70142
+ verdict: "allow",
70143
+ label: "Approve, and don\u2019t ask again in this chat",
70144
+ hint: `for ${approval.actionSummary?.grantLabel ?? kindLabel}`
70145
+ }] : [],
70132
70146
  { verdict: "deny", label: "Deny" }
70133
70147
  ];
70134
70148
  const choose = (verdict) => {
@@ -70603,7 +70617,7 @@ function ChatInputBar({
70603
70617
  console.debug("[voice] composer mounted", { agentId: agentId ?? null });
70604
70618
  }, [voiceAvailable, agentId]);
70605
70619
  const { data: agentVoice } = useAgentVoice(voiceAvailable ? agentId : null);
70606
- const voiceReady = voiceAvailable && !!agentVoice?.providerConfigured && !!agentVoice?.hasVoice;
70620
+ const voiceReady = voiceAvailable && voiceOffer(agentVoice).microphone;
70607
70621
  const canConverse = voiceReady;
70608
70622
  const startVoiceSession = useVoiceSessionStore((s) => s.start);
70609
70623
  const endVoiceSession = useVoiceSessionStore((s) => s.end);
@@ -70814,7 +70828,7 @@ function ChatInputBar({
70814
70828
  }, [steerable, sessionKey, dequeueMessage, onSend]);
70815
70829
  const handleSteerQueued = useCallback(
70816
70830
  (id, text2, fileRefs) => {
70817
- onSteer?.(text2, fileRefs);
70831
+ void onSteer?.(text2, fileRefs);
70818
70832
  removeQueuedMessage(sessionKey, id);
70819
70833
  },
70820
70834
  [onSteer, removeQueuedMessage, sessionKey]
@@ -70876,7 +70890,7 @@ function ChatInputBar({
70876
70890
  setFileError(t2("chat.input.fileLimit", { count: remaining }));
70877
70891
  return;
70878
70892
  }
70879
- const results = await Promise.all(files.map(handleUploadFile));
70893
+ const results = await Promise.all(files.map((file) => handleUploadFile(file)));
70880
70894
  const uploaded = results.filter(
70881
70895
  (r) => r !== null
70882
70896
  );
@@ -72058,8 +72072,7 @@ function PortalRootProvider({
72058
72072
  root.removeAttribute("style");
72059
72073
  for (const [key2, value] of Object.entries(style2 ?? {})) {
72060
72074
  if (typeof value !== "string") continue;
72061
- if (key2.startsWith("--")) root.style.setProperty(key2, value);
72062
- else root.style.setProperty(key2, value);
72075
+ root.style.setProperty(key2, value);
72063
72076
  }
72064
72077
  }, [root, dark, style2]);
72065
72078
  return /* @__PURE__ */ jsx(PortalContainerContext.Provider, { value: root, children });
@@ -189,6 +189,7 @@ var en_default = {
189
189
  "appSwitcher.organization": "Organization Home",
190
190
  "appSwitcher.homeSubtitle": "Your workspace at a glance",
191
191
  "appSwitcher.chat": "Chat",
192
+ "appSwitcher.voice": "Voice",
192
193
  "appSwitcher.chatSubtitle": "Chat with agents",
193
194
  "appSwitcher.omnichannel": "Omnichannel",
194
195
  "appSwitcher.apps": "Apps",
@@ -1838,6 +1839,7 @@ var en_default = {
1838
1839
  "admin.voices.keyRemovedTitle": "Agents can\u2019t speak until ElevenLabs is added again",
1839
1840
  "admin.voices.keyRemovedBody": "The organization\u2019s ElevenLabs key was removed, so every voice below is silent.",
1840
1841
  "admin.voices.addElevenLabs": "Add ElevenLabs",
1842
+ "admin.voices.addOpenRouter": "Add OpenRouter",
1841
1843
  "admin.voices.emptyTitle": "No voices yet",
1842
1844
  "admin.voices.emptyBody": "Register an ElevenLabs voice by name, then choose it in an agent\u2019s settings.",
1843
1845
  "admin.voices.unused": "Not used by any agent",
@@ -1861,6 +1863,12 @@ var en_default = {
1861
1863
  "admin.voices.voiceIdPlaceholder": "Pg9csYyww2U9PYHJWRGS",
1862
1864
  "admin.voices.voiceIdHint": "In ElevenLabs, open the voice and copy its ID.",
1863
1865
  "admin.voices.findVoice": "Find a voice",
1866
+ "admin.voices.provider.elevenlabs": "ElevenLabs voice",
1867
+ "admin.voices.openRouterVoiceId": "Voice",
1868
+ "admin.voices.openRouterVoiceIdPlaceholder": "george",
1869
+ "admin.voices.openRouterVoiceIdHint": "One of the model\u2019s voices. Preview plays a sentence in it before you add it.",
1870
+ "admin.voices.preview": "Preview",
1871
+ "admin.voices.previewing": "Speaking\u2026",
1864
1872
  "admin.voices.required": "Enter this value.",
1865
1873
  "admin.voices.speed": "Speaking speed",
1866
1874
  "admin.voices.speedHint": "How fast every agent reads its replies. Takes effect on the next reply.",
@@ -1872,6 +1880,33 @@ var en_default = {
1872
1880
  "admin.voices.speedDefault": "Default",
1873
1881
  "admin.voices.speedOption": "{label} ({value}\xD7)",
1874
1882
  "admin.voices.speedValue": "{value}\xD7",
1883
+ "admin.speech.heading": "Speech",
1884
+ "admin.speech.subtitle": "How Agents listen and speak, in voice calls and when Chat reads replies aloud. Each Agent picks a transcription model and a voice on its Voice page.",
1885
+ "admin.speech.listening.heading": "Listening (speech to text)",
1886
+ "admin.speech.listening.subtitle": "Voice calls use one of these to turn what callers say into text.",
1887
+ "admin.speech.listening.dialogTitle": "Add transcription model",
1888
+ "admin.speech.listening.emptyTitle": "No transcription models yet",
1889
+ "admin.speech.listening.emptyBody": "Add one so voice calls can turn what callers say into text.",
1890
+ "admin.speech.listening.removeTitle": "Remove {name}?",
1891
+ "admin.speech.listening.removeBody": "Agents that use it can\u2019t take voice calls until they choose another transcription model on their Voice page.",
1892
+ "admin.speech.speaking.heading": "Speaking voices (text to speech)",
1893
+ "admin.speech.speaking.subtitle": "Voices Agents speak with. An Agent with none chosen doesn\u2019t speak.",
1894
+ "admin.speech.speaking.dialogDescription": "Choose a speech model, then one of its voices, and give the voice a name.",
1895
+ "admin.speech.speaking.needKeyTitle": "Voices need a speech provider",
1896
+ "admin.speech.speaking.needKeyBody": "Agents speak through ElevenLabs or OpenRouter. Add either API key, then register the voices agents can use.",
1897
+ "admin.speech.speaking.keyRemovedTitle": "Agents can\u2019t speak until a speech provider is added again",
1898
+ "admin.speech.speaking.keyRemovedBody": "The organization has no ElevenLabs or OpenRouter key, so every voice below is silent.",
1899
+ "admin.speech.speaking.emptyBody": "Register a voice by name, then choose it in an agent\u2019s settings.",
1900
+ "admin.speech.speaking.inUseBody": "These agents speak with {name}. Choose another voice for them on their Voice page and publish, then remove it.",
1901
+ "admin.speech.provider.openrouter": "OpenRouter",
1902
+ "admin.speech.provider.elevenlabs": "ElevenLabs",
1903
+ "admin.speech.voiceCount": "{count} voices",
1904
+ "admin.speech.speechTag": "Speech",
1905
+ "admin.speech.elevenLabsHint": "A voice from your ElevenLabs library, by its voice ID.",
1906
+ "admin.speech.elevenLabsNeedsKey": "Needs an ElevenLabs API key. Choose this to add one, then add voices from your ElevenLabs library.",
1907
+ "admin.speech.elevenLabsNeedsKeyAsk": "Needs an ElevenLabs API key. Ask an organization admin to add one.",
1908
+ "admin.speech.searchSpeechModels": "Search speech models by name or ID",
1909
+ "admin.speech.noMatch": "Try another name, or clear the search.",
1875
1910
  "admin.imageModel.heading": "Image generation",
1876
1911
  "admin.imageModel.subtitle": "The model used to generate images and slide-template decks for this organization.",
1877
1912
  "admin.imageModel.label": "Image model",
@@ -2994,6 +3029,7 @@ var en_default = {
2994
3029
  "admin.datasets.managed.title": "Rows are not available yet",
2995
3030
  "admin.datasets.managed.body": "Managed Datasets store their own rows. That storage is not built yet, so there is nothing to preview here.",
2996
3031
  "admin.models.form.kindEmbeddingDetected": "Detected as an embedding model \u2014 it powers knowledge, memory, and semantic search, and won't appear in chat model pickers.",
3032
+ "admin.models.form.kindTranscriptionDetected": "Detected as a transcription model \u2014 Voice calls use it to turn what callers say into text, and it won't appear in chat model pickers.",
2997
3033
  "admin.nav.apiKeys": "API Keys",
2998
3034
  "admin.applicationLibrary.status.included": "Included",
2999
3035
  "admin.applicationLibrary.status.not_in_licence": "Not in licence",
@@ -3088,6 +3124,21 @@ var en_default = {
3088
3124
  "admin.applicationLibrary.dialog.candidate.approveAndUse": "Approve access and use version {version}",
3089
3125
  "admin.applicationLibrary.dialog.candidate.goBack": "Go back to version {version}",
3090
3126
  "admin.applicationLibrary.dialog.note.candidateChanged": "The newer version changed while you were reviewing it. Review it again.",
3127
+ "admin.applicationLibrary.dialog.voiceRecording.title": "Call recording",
3128
+ "admin.applicationLibrary.dialog.voiceRecording.help": "Whether Agents may record their voice calls, and how long recordings are kept. Each Agent turns recording on for its own calls.",
3129
+ "admin.applicationLibrary.dialog.voiceRecording.allow": "Allow Agents to record calls",
3130
+ "admin.applicationLibrary.dialog.voiceRecording.allowHint": "Callers hear that the call is recorded before the Agent speaks.",
3131
+ "admin.applicationLibrary.dialog.voiceRecording.defaultDays": "Keep recordings for",
3132
+ "admin.applicationLibrary.dialog.voiceRecording.defaultDaysHint": "Days, for Agents that do not set their own period.",
3133
+ "admin.applicationLibrary.dialog.voiceRecording.maxDays": "Longest keep period",
3134
+ "admin.applicationLibrary.dialog.voiceRecording.maxDaysHint": "Days. No Agent keeps recordings longer. A shorter period deletes older recordings at the next cleanup.",
3135
+ "admin.applicationLibrary.dialog.voiceRecording.save": "Save call recording",
3136
+ "admin.applicationLibrary.dialog.voiceRecording.saved": "Call recording saved.",
3137
+ "admin.applicationLibrary.dialog.voiceRecording.invalid": "Use 1 to 3650 days, and a default no longer than the longest period.",
3138
+ "admin.applicationLibrary.dialog.voiceRecording.noStorage": "Call recording needs storage that this deployment has not set up. Ask your platform administrator to set it up.",
3139
+ "admin.applicationLibrary.dialog.voiceRecording.loadFailed": "Call recording settings could not load.",
3140
+ "admin.applicationLibrary.dialog.voiceRecording.saveFailed": "Call recording could not be saved.",
3141
+ "admin.applicationLibrary.dialog.voiceRecording.retry": "Try again",
3091
3142
  "admin.applicationLibrary.toast.usingCandidate": "{name} now uses version {version} in this organization",
3092
3143
  "admin.applicationLibrary.toast.usingCurrent": "{name} is back on version {version}",
3093
3144
  "admin.applicationLibrary.error.candidateChanged": "The newer version changed while you were reviewing it. Review it again.",
@@ -4195,6 +4246,7 @@ var en_default = {
4195
4246
  "admin.models.form.catalog.priceTitle": "List price per 1M tokens \u2014 input / output",
4196
4247
  "admin.models.form.catalog.image": "Image",
4197
4248
  "admin.models.form.catalog.embedding": "Embedding",
4249
+ "admin.models.form.catalog.transcription": "Transcription",
4198
4250
  "admin.models.form.catalog.azureHint": "Enter a deployment name",
4199
4251
  "admin.models.form.catalog.customHint": "Enter a model ID",
4200
4252
  "admin.models.form.catalog.azureTyped": "Azure deployment \u201C{id}\u201D",
@@ -4284,6 +4336,7 @@ var en_default = {
4284
4336
  "platformNav.skip": "Skip to content",
4285
4337
  "platformNav.description.chat": "Work with agents in conversation.",
4286
4338
  "platformNav.description.omnichannel": "Answer customers' WhatsApp chats with your team.",
4339
+ "platformNav.description.voice": "Calls with your Agents, which Agents answer calls, and what calls use.",
4287
4340
  "platformNav.description.agents": "Configure, equip, and manage agents.",
4288
4341
  "platformNav.description.workflows": "Design processes and follow their runs.",
4289
4342
  "platformNav.description.functions": "Build and run reusable functions.",
@@ -5739,6 +5792,7 @@ var id_default = {
5739
5792
  "appSwitcher.organization": "Beranda Organisasi",
5740
5793
  "appSwitcher.homeSubtitle": "Sekilas ruang kerja Anda",
5741
5794
  "appSwitcher.chat": "Obrolan",
5795
+ "appSwitcher.voice": "Voice",
5742
5796
  "appSwitcher.chatSubtitle": "Percakapan, perpustakaan, dan otomatisasi",
5743
5797
  "appSwitcher.omnichannel": "Omnichannel",
5744
5798
  "appSwitcher.apps": "Apps",
@@ -7366,6 +7420,7 @@ var id_default = {
7366
7420
  "admin.voices.keyRemovedTitle": "Agen tidak bisa berbicara sampai ElevenLabs ditambahkan lagi",
7367
7421
  "admin.voices.keyRemovedBody": "Kunci ElevenLabs organisasi telah dihapus, jadi semua suara di bawah tidak bersuara.",
7368
7422
  "admin.voices.addElevenLabs": "Tambah ElevenLabs",
7423
+ "admin.voices.addOpenRouter": "Tambah OpenRouter",
7369
7424
  "admin.voices.emptyTitle": "Belum ada suara",
7370
7425
  "admin.voices.emptyBody": "Daftarkan suara ElevenLabs dengan sebuah nama, lalu pilih di pengaturan agen.",
7371
7426
  "admin.voices.unused": "Tidak dipakai agen mana pun",
@@ -7389,6 +7444,12 @@ var id_default = {
7389
7444
  "admin.voices.voiceIdPlaceholder": "Pg9csYyww2U9PYHJWRGS",
7390
7445
  "admin.voices.voiceIdHint": "Di ElevenLabs, buka suaranya lalu salin ID-nya.",
7391
7446
  "admin.voices.findVoice": "Cari suara",
7447
+ "admin.voices.provider.elevenlabs": "Suara ElevenLabs",
7448
+ "admin.voices.openRouterVoiceId": "Suara",
7449
+ "admin.voices.openRouterVoiceIdPlaceholder": "george",
7450
+ "admin.voices.openRouterVoiceIdHint": "Salah satu suara model ini. Pratinjau memutar satu kalimat dengan suara itu sebelum Anda menambahkannya.",
7451
+ "admin.voices.preview": "Pratinjau",
7452
+ "admin.voices.previewing": "Berbicara\u2026",
7392
7453
  "admin.voices.required": "Isi nilai ini.",
7393
7454
  "admin.voices.speed": "Kecepatan bicara",
7394
7455
  "admin.voices.speedHint": "Seberapa cepat setiap agen membacakan balasannya. Berlaku pada balasan berikutnya.",
@@ -7400,6 +7461,33 @@ var id_default = {
7400
7461
  "admin.voices.speedDefault": "Bawaan",
7401
7462
  "admin.voices.speedOption": "{label} ({value}\xD7)",
7402
7463
  "admin.voices.speedValue": "{value}\xD7",
7464
+ "admin.speech.heading": "Ucapan",
7465
+ "admin.speech.subtitle": "Cara Agen mendengar dan berbicara, dalam panggilan suara dan saat Chat membacakan balasan. Setiap Agen memilih satu model transkripsi dan satu suara di halaman Suara-nya.",
7466
+ "admin.speech.listening.heading": "Mendengar (ucapan ke teks)",
7467
+ "admin.speech.listening.subtitle": "Panggilan suara memakai salah satunya untuk mengubah ucapan penelepon menjadi teks.",
7468
+ "admin.speech.listening.dialogTitle": "Tambah model transkripsi",
7469
+ "admin.speech.listening.emptyTitle": "Belum ada model transkripsi",
7470
+ "admin.speech.listening.emptyBody": "Tambahkan satu agar panggilan suara bisa mengubah ucapan penelepon menjadi teks.",
7471
+ "admin.speech.listening.removeTitle": "Hapus {name}?",
7472
+ "admin.speech.listening.removeBody": "Agen yang memakainya tidak bisa menerima panggilan suara sampai memilih model transkripsi lain di halaman Suara-nya.",
7473
+ "admin.speech.speaking.heading": "Suara bicara (teks ke ucapan)",
7474
+ "admin.speech.speaking.subtitle": "Suara yang dipakai Agen untuk berbicara. Agen tanpa pilihan tidak berbicara.",
7475
+ "admin.speech.speaking.dialogDescription": "Pilih model ucapan, lalu salah satu suaranya, dan beri nama suara itu.",
7476
+ "admin.speech.speaking.needKeyTitle": "Suara memerlukan penyedia suara",
7477
+ "admin.speech.speaking.needKeyBody": "Agen berbicara melalui ElevenLabs atau OpenRouter. Tambahkan salah satu API key-nya, lalu daftarkan suara yang bisa dipakai agen.",
7478
+ "admin.speech.speaking.keyRemovedTitle": "Agen tidak bisa berbicara sampai penyedia suara ditambahkan lagi",
7479
+ "admin.speech.speaking.keyRemovedBody": "Organisasi tidak memiliki kunci ElevenLabs maupun OpenRouter, jadi semua suara di bawah tidak bersuara.",
7480
+ "admin.speech.speaking.emptyBody": "Daftarkan suara dengan sebuah nama, lalu pilih di pengaturan agen.",
7481
+ "admin.speech.speaking.inUseBody": "Agen-agen ini berbicara dengan {name}. Pilih suara lain untuk mereka di halaman Suara lalu publikasikan, kemudian hapus suara ini.",
7482
+ "admin.speech.provider.openrouter": "OpenRouter",
7483
+ "admin.speech.provider.elevenlabs": "ElevenLabs",
7484
+ "admin.speech.voiceCount": "{count} suara",
7485
+ "admin.speech.speechTag": "Ucapan",
7486
+ "admin.speech.elevenLabsHint": "Suara dari pustaka ElevenLabs Anda, berdasarkan ID suaranya.",
7487
+ "admin.speech.elevenLabsNeedsKey": "Memerlukan kunci API ElevenLabs. Pilih ini untuk menambahkannya, lalu tambahkan suara dari pustaka ElevenLabs Anda.",
7488
+ "admin.speech.elevenLabsNeedsKeyAsk": "Memerlukan kunci API ElevenLabs. Minta admin organisasi untuk menambahkannya.",
7489
+ "admin.speech.searchSpeechModels": "Cari model ucapan berdasarkan nama atau ID",
7490
+ "admin.speech.noMatch": "Coba nama lain, atau hapus pencarian.",
7403
7491
  "admin.imageModel.heading": "Pembuatan gambar",
7404
7492
  "admin.imageModel.subtitle": "Model yang dipakai untuk membuat gambar dan dek templat slide untuk organisasi ini.",
7405
7493
  "admin.imageModel.label": "Model gambar",
@@ -8499,6 +8587,7 @@ var id_default = {
8499
8587
  "admin.datasets.managed.title": "Baris belum tersedia",
8500
8588
  "admin.datasets.managed.body": "Dataset terkelola menyimpan barisnya sendiri. Penyimpanan tersebut belum dibangun, sehingga belum ada yang dapat dipratinjau di sini.",
8501
8589
  "admin.models.form.kindEmbeddingDetected": "Terdeteksi sebagai model embedding \u2014 dipakai untuk pencarian knowledge, memori, dan semantik; tidak muncul di pilihan model chat.",
8590
+ "admin.models.form.kindTranscriptionDetected": "Terdeteksi sebagai model transkripsi \u2014 dipakai panggilan suara untuk mengubah ucapan penelepon menjadi teks; tidak muncul di pilihan model chat.",
8502
8591
  "admin.nav.apiKeys": "Kunci API",
8503
8592
  "admin.applicationLibrary.status.included": "Termasuk",
8504
8593
  "admin.applicationLibrary.status.not_in_licence": "Tidak termasuk lisensi",
@@ -8593,6 +8682,21 @@ var id_default = {
8593
8682
  "admin.applicationLibrary.dialog.candidate.approveAndUse": "Setujui akses dan gunakan versi {version}",
8594
8683
  "admin.applicationLibrary.dialog.candidate.goBack": "Kembali ke versi {version}",
8595
8684
  "admin.applicationLibrary.dialog.note.candidateChanged": "Versi yang lebih baru berubah saat Anda meninjaunya. Tinjau lagi.",
8685
+ "admin.applicationLibrary.dialog.voiceRecording.title": "Perekaman panggilan",
8686
+ "admin.applicationLibrary.dialog.voiceRecording.help": "Apakah Agent boleh merekam panggilan suaranya, dan berapa lama rekaman disimpan. Setiap Agent menyalakan perekaman untuk panggilannya sendiri.",
8687
+ "admin.applicationLibrary.dialog.voiceRecording.allow": "Izinkan Agent merekam panggilan",
8688
+ "admin.applicationLibrary.dialog.voiceRecording.allowHint": "Penelepon mendengar bahwa panggilan direkam sebelum Agent berbicara.",
8689
+ "admin.applicationLibrary.dialog.voiceRecording.defaultDays": "Simpan rekaman selama",
8690
+ "admin.applicationLibrary.dialog.voiceRecording.defaultDaysHint": "Hari, untuk Agent yang tidak mengatur masanya sendiri.",
8691
+ "admin.applicationLibrary.dialog.voiceRecording.maxDays": "Masa simpan terlama",
8692
+ "admin.applicationLibrary.dialog.voiceRecording.maxDaysHint": "Hari. Tidak ada Agent yang menyimpan rekaman lebih lama. Masa yang lebih pendek menghapus rekaman lama pada pembersihan berikutnya.",
8693
+ "admin.applicationLibrary.dialog.voiceRecording.save": "Simpan perekaman panggilan",
8694
+ "admin.applicationLibrary.dialog.voiceRecording.saved": "Perekaman panggilan disimpan.",
8695
+ "admin.applicationLibrary.dialog.voiceRecording.invalid": "Gunakan 1 sampai 3650 hari, dan masa bawaan yang tidak lebih lama dari masa terlama.",
8696
+ "admin.applicationLibrary.dialog.voiceRecording.noStorage": "Perekaman panggilan memerlukan penyimpanan yang belum disiapkan di deployment ini. Minta administrator platform Anda untuk menyiapkannya.",
8697
+ "admin.applicationLibrary.dialog.voiceRecording.loadFailed": "Pengaturan perekaman panggilan tidak dapat dimuat.",
8698
+ "admin.applicationLibrary.dialog.voiceRecording.saveFailed": "Perekaman panggilan tidak dapat disimpan.",
8699
+ "admin.applicationLibrary.dialog.voiceRecording.retry": "Coba lagi",
8596
8700
  "admin.applicationLibrary.toast.usingCandidate": "{name} sekarang menggunakan versi {version} di organisasi ini",
8597
8701
  "admin.applicationLibrary.toast.usingCurrent": "{name} kembali ke versi {version}",
8598
8702
  "admin.applicationLibrary.error.candidateChanged": "Versi yang lebih baru berubah saat Anda meninjaunya. Tinjau lagi.",
@@ -9704,6 +9808,7 @@ var id_default = {
9704
9808
  "admin.models.form.catalog.priceTitle": "Harga daftar per 1 juta token \u2014 input / output",
9705
9809
  "admin.models.form.catalog.image": "Gambar",
9706
9810
  "admin.models.form.catalog.embedding": "Embedding",
9811
+ "admin.models.form.catalog.transcription": "Transkripsi",
9707
9812
  "admin.models.form.catalog.azureHint": "Masukkan nama deployment",
9708
9813
  "admin.models.form.catalog.customHint": "Masukkan ID model",
9709
9814
  "admin.models.form.catalog.azureTyped": "Deployment Azure \u201C{id}\u201D",
@@ -9793,6 +9898,7 @@ var id_default = {
9793
9898
  "platformNav.skip": "Langsung ke konten",
9794
9899
  "platformNav.description.chat": "Bekerja bersama agen melalui percakapan.",
9795
9900
  "platformNav.description.omnichannel": "Jawab chat WhatsApp pelanggan bersama tim Anda.",
9901
+ "platformNav.description.voice": "Panggilan dengan Agen Anda, Agen yang menjawab panggilan, dan pemakaian panggilan.",
9796
9902
  "platformNav.description.agents": "Konfigurasi, lengkapi, dan kelola agen.",
9797
9903
  "platformNav.description.workflows": "Rancang proses dan pantau eksekusinya.",
9798
9904
  "platformNav.description.functions": "Buat dan jalankan fungsi yang dapat digunakan kembali.",
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { MagnifyingGlassIcon } from './chunk-X3QVICX7.js';
3
- import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, canvasId, StudioDisplayIcon, LayoutDashboardIcon, useAgentPanelStore, SourceFavicon, dedup, useArtifactFileObjectUrl, resolveArtifactIconFormat, artifactFormatIcon, avatarMotionForStream, AGENT_AVATAR_SIZE, getFileCategory, FileThumbnail, formatFileSize, usePathname, artifactFormatSubtitle, artifactCategory, Input, MobileScreenSheet, TooltipTrigger, Tooltip, useChatCapabilities, TooltipContent, processMessageParts, GridSpinner, PanelEdgeRing, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, extractCitationsFromSteps, resolvePluginLanguage, getMessageDisplayTimestampValue } from './chunk-HX5M56P5.js';
3
+ import { requestPaneFocus, useArtifacts, usePlugins, useCanvasStore, useArtifactStore, useChatOverviewStore, useSourcesEnrichment, sourceKind, useCitationViewer, resolveSourceDisplay, extractDomain, canvasId, StudioDisplayIcon, LayoutDashboardIcon, useAgentPanelStore, SourceFavicon, dedup, useArtifactFileObjectUrl, resolveArtifactIconFormat, artifactFormatIcon, avatarMotionForStream, AGENT_AVATAR_SIZE, getFileCategory, FileThumbnail, formatFileSize, usePathname, artifactFormatSubtitle, artifactCategory, Input, MobileScreenSheet, TooltipTrigger, Tooltip, useChatCapabilities, TooltipContent, processMessageParts, GridSpinner, PanelEdgeRing, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, extractCitationsFromSteps, resolvePluginLanguage, getMessageDisplayTimestampValue } from './chunk-4DWSQQQE.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-T5SANYSX.js';
5
- import { useTranslation, useIsMobile } from './chunk-77OYEA4D.js';
6
- import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-PKNEC4LJ.js';
5
+ import { useTranslation, useIsMobile } from './chunk-3ED4DPTV.js';
6
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-X33KXNO3.js';
7
7
  import { ChevronDownMediumIcon, ScrollArea, Skeleton, Button } from './chunk-UWKO24VT.js';
8
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle, CrossMediumIcon } from './chunk-2P4IEVOQ.js';
9
9
  import { ChevronRightIcon } from './chunk-C3HW5S2Z.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { useTranslation } from './chunk-77OYEA4D.js';
2
+ import { useTranslation } from './chunk-3ED4DPTV.js';
3
3
  import { Skeleton } from './chunk-UWKO24VT.js';
4
4
  import { useRef, useState, useEffect } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-77OYEA4D.js';
5
- import { ToolCallItem, ProcessorIcon } from './chunk-QBV7MAFV.js';
6
- import { toolKindVerb, getToolMeta, Shimmer, Collapse, ToolGroupReasoningItem, SkillToolItem, DeviceDesktopIcon, WorldSearchIcon, FileTextIcon, useStreamdownPlugins, CircleXIcon, STREAMDOWN_LINK_SAFETY, Folder1Icon, AppIconFrame, AppIcon, Collapsible, CollapsibleTrigger, CollapsibleContent, SquareArrowTopRightIcon, Icon } from './chunk-PKNEC4LJ.js';
4
+ import { useIsMobile, useTranslation } from './chunk-3ED4DPTV.js';
5
+ import { ToolCallItem, ProcessorIcon } from './chunk-BRCS2NHC.js';
6
+ import { toolKindVerb, getToolMeta, Shimmer, Collapse, ToolGroupReasoningItem, SkillToolItem, DeviceDesktopIcon, WorldSearchIcon, FileTextIcon, useStreamdownPlugins, CircleXIcon, STREAMDOWN_LINK_SAFETY, Folder1Icon, AppIconFrame, AppIcon, Collapsible, CollapsibleTrigger, CollapsibleContent, SquareArrowTopRightIcon, Icon } from './chunk-X33KXNO3.js';
7
7
  import { ChevronDownMediumIcon, Button, Skeleton, buttonVariants } from './chunk-UWKO24VT.js';
8
8
  import { Dialog, DialogContent, DialogTitle, DialogDescription, DialogClose, CrossMediumIcon, DialogHeader, DialogFooter } from './chunk-2P4IEVOQ.js';
9
9
  import { zipSync } from './chunk-CDTES65T.js';
@@ -10517,6 +10517,7 @@ function useSourcesEnrichment(citations) {
10517
10517
  if (pending.length === 0) return;
10518
10518
  Promise.all(pending).then(() => {
10519
10519
  if (!cancelled2) syncFromCache(urls, setEnriched);
10520
+ }).catch(() => {
10520
10521
  });
10521
10522
  return () => {
10522
10523
  cancelled2 = true;
@@ -11531,7 +11532,7 @@ function SourceFavicon({
11531
11532
  size = "sm",
11532
11533
  kind = "web"
11533
11534
  }) {
11534
- const sizeClass = size === "sm" ? "size-4" : "size-4";
11535
+ const sizeClass = "size-4";
11535
11536
  const iconSize = size === "sm" ? "size-2.5" : "size-4";
11536
11537
  const [idx, setIdx] = useState(0);
11537
11538
  if (kind === "knowledge") {
@@ -13496,7 +13497,7 @@ function connectVerb(opts) {
13496
13497
 
13497
13498
  // ../platform-kit/src/lib/platform-scope-path.ts
13498
13499
  var SLUG = /^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?$/;
13499
- var WORKSPACE_APPS = /* @__PURE__ */ new Set(["home", "chat", "omnichannel", "apps", "applications", "blueprint", "forge"]);
13500
+ var WORKSPACE_APPS = /* @__PURE__ */ new Set(["home", "chat", "omnichannel", "voice", "apps", "applications", "blueprint", "forge"]);
13500
13501
  var CONSOLE_APPS = /* @__PURE__ */ new Set(["agents", "workflows", "functions"]);
13501
13502
  var CONSOLE_UNSCOPED = /* @__PURE__ */ new Set(["workspaces", "connections"]);
13502
13503
  var ORG_APPS = /* @__PURE__ */ new Set(["blueprint", "settings", "admin"]);
@@ -17723,7 +17724,7 @@ function DelegationToolItem({
17723
17724
  useEffect(() => {
17724
17725
  if (!discoveredRunId || state !== "running" || !apiBasePath) return;
17725
17726
  const controller = new AbortController();
17726
- (async () => {
17727
+ void (async () => {
17727
17728
  try {
17728
17729
  const res = await fetch(
17729
17730
  `${apiBasePath}/v1/chat/${encodeURIComponent(discoveredRunId)}/stream`,
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { MagnifyingGlassIcon } from './chunk-X3QVICX7.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-77OYEA4D.js';
4
+ import { useIsMobile, useTranslation } from './chunk-3ED4DPTV.js';
5
5
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
6
6
  import { AgentAvatar } from './chunk-RVJEI4ZY.js';
7
7
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { describeToolRow, Code2Icon, getToolMeta, Shimmer, Collapse } from './chunk-PKNEC4LJ.js';
2
+ import { describeToolRow, Code2Icon, getToolMeta, Shimmer, Collapse } from './chunk-X33KXNO3.js';
3
3
  import { ChevronDownMediumIcon } from './chunk-UWKO24VT.js';
4
4
  import { cn } from './chunk-LGVMMBL3.js';
5
5
  import { memo, useState, useMemo } from 'react';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { getToolMeta } from './chunk-PKNEC4LJ.js';
2
+ import { getToolMeta } from './chunk-X33KXNO3.js';
3
3
  import { Button } from './chunk-UWKO24VT.js';
4
4
  import { ChevronDownMediumIcon, CrossMediumIcon } from './chunk-TUDJ35AB.js';
5
5
  import { useChatClientOptional } from './chunk-6JLWE7M3.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { usePlugins, useChatCapabilityEnabled, resolvePluginLanguage, renderPluginBlock, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ActionMenu, useArtifactStore, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, useArtifact, resolveArtifactIconFormat, artifactFormatIcon, useArtifactFileObjectUrl, artifactFormatSubtitle, ChatImageLightbox, ArrowsShowIcon, FileDownloadIcon, useClient, processMessageParts, getMessageDisplayTimestampValue, getMessageCreatedAtMs, isApprovalRequested, extractCitationsFromSteps, useSourcesEnrichment, extractImagesFromSteps, dedupeImageResults, getDocumentStreamArtifacts, getToolOutput, useCanvasStore, ImageResultsGallery, MessageDecisionCards, useChatCapabilities, useOptionalWorkspaceContext, useCitationViewer, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, attachmentFileOf, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData, unwrapDataDeep, formatDecisionTime, DecisionCard, LoaderIcon, formatRelativeTime, CircleCheckIcon, agentRoutineKeys, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-HX5M56P5.js';
2
+ import { usePlugins, useChatCapabilityEnabled, resolvePluginLanguage, renderPluginBlock, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ActionMenu, useArtifactStore, ArtifactActionsMenu, DotGrid1x3HorizontalTightIcon, useArtifact, resolveArtifactIconFormat, artifactFormatIcon, useArtifactFileObjectUrl, artifactFormatSubtitle, ChatImageLightbox, ArrowsShowIcon, FileDownloadIcon, useClient, processMessageParts, getMessageDisplayTimestampValue, getMessageCreatedAtMs, isApprovalRequested, extractCitationsFromSteps, useSourcesEnrichment, extractImagesFromSteps, dedupeImageResults, getDocumentStreamArtifacts, getToolOutput, useCanvasStore, ImageResultsGallery, MessageDecisionCards, useChatCapabilities, useOptionalWorkspaceContext, useCitationViewer, useChatOverviewStore, dedup, extractDomain, sourceKind, SourceFavicon, Input, exportDocumentPdf, FilePdfIcon, StudioDisplayIcon, WorldIcon, MessageStepsGroup, getToolState, getToolInput, getToolErrorText, useChatOptInEnabled, ArrowRightIcon, formatFileSize, FileThumbnail, attachmentFileOf, MobileScreenSheet, useAgentHistorySource, treatyErrorMessage, useRouter, useBasePath, useAgentPanelStore, AgentRoutineForm, getFileCategory, unwrap, unwrapData, unwrapDataDeep, formatDecisionTime, DecisionCard, LoaderIcon, formatRelativeTime, CircleCheckIcon, agentRoutineKeys, useOptionalAgentsContext, avatarMotionForStream, AGENT_AVATAR_SIZE } from './chunk-4DWSQQQE.js';
3
3
  import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
- import { useIsMobile, useTranslation } from './chunk-77OYEA4D.js';
5
- import { MessageToolbar, MessageResponse, SquareArrowTopRightIcon, FileTextIcon, Shimmer, ClipboardIcon, Message, MessageContent, PencilIcon, deferDuringLayoutMotion, HoverCard, HoverCardTrigger, HoverCardContent, Collapse, Icon, CircleXIcon, ClockIcon } from './chunk-PKNEC4LJ.js';
4
+ import { useIsMobile, useTranslation } from './chunk-3ED4DPTV.js';
5
+ import { MessageToolbar, MessageResponse, SquareArrowTopRightIcon, FileTextIcon, Shimmer, ClipboardIcon, Message, MessageContent, PencilIcon, deferDuringLayoutMotion, HoverCard, HoverCardTrigger, HoverCardContent, Collapse, Icon, CircleXIcon, ClockIcon } from './chunk-X33KXNO3.js';
6
6
  import { ChevronDownMediumIcon, Button, ScrollArea, Skeleton } from './chunk-UWKO24VT.js';
7
7
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
8
8
  import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from './chunk-C3HW5S2Z.js';
@@ -858,6 +858,7 @@ function CopyButton({ text, className }) {
858
858
  navigator.clipboard.writeText(text).then(() => {
859
859
  setCopied(true);
860
860
  setTimeout(() => setCopied(false), 2e3);
861
+ }).catch(() => {
861
862
  });
862
863
  };
863
864
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
@@ -4660,7 +4661,8 @@ var DocumentStreamCard = memo(function DocumentStreamCard2({
4660
4661
  } : void 0;
4661
4662
  const copyContent = () => {
4662
4663
  if (!displayContent) return;
4663
- navigator.clipboard.writeText(displayContent);
4664
+ void navigator.clipboard.writeText(displayContent).catch(() => {
4665
+ });
4664
4666
  setCopied(true);
4665
4667
  window.setTimeout(() => setCopied(false), 1200);
4666
4668
  };
@@ -5440,6 +5442,7 @@ var AssistantMessage = memo(function AssistantMessage2({
5440
5442
  { isCancelled: () => cancelled }
5441
5443
  ).then((suggestions) => {
5442
5444
  if (!cancelled && suggestions) setPolledFollowUps(suggestions);
5445
+ }).catch(() => {
5443
5446
  });
5444
5447
  return () => {
5445
5448
  cancelled = true;
@@ -5470,7 +5473,7 @@ var AssistantMessage = memo(function AssistantMessage2({
5470
5473
  await new Promise((r) => setTimeout(r, 1e3));
5471
5474
  }
5472
5475
  };
5473
- fetchMetadata();
5476
+ void fetchMetadata();
5474
5477
  return () => {
5475
5478
  cancelled = true;
5476
5479
  };
@@ -6099,6 +6102,7 @@ var UserMessageActions = memo(function UserMessageActions2({
6099
6102
  navigator.clipboard.writeText(messageText).then(() => {
6100
6103
  setCopied(true);
6101
6104
  setTimeout(() => setCopied(false), 2e3);
6105
+ }).catch(() => {
6102
6106
  });
6103
6107
  }, [messageText]);
6104
6108
  if (isStreaming) return null;