@frontera-sdk/chat-ui 1.52.39 → 1.52.41

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.
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { AgentPicker, useChatAgents } from './chunk-FLOAEPRU.js';
2
+ export { AgentPicker, useChatAgents } from './chunk-O6CVTMZJ.js';
3
3
  import './chunk-C3HW5S2Z.js';
4
- import './chunk-PUMRNN3R.js';
4
+ import './chunk-RVJEI4ZY.js';
5
5
  import './chunk-TUDJ35AB.js';
6
6
  import './chunk-LGVMMBL3.js';
7
7
  import './chunk-6JLWE7M3.js';
package/dist/chat.js CHANGED
@@ -2,27 +2,27 @@
2
2
  import { offset, flip, autoUpdate, computePosition } from './chunk-I7SXWUAN.js';
3
3
  import { isFullscreenHotkey, DeckNotesCard, deckOwnsArrowKeys } from './chunk-4FRTPVJT.js';
4
4
  import { ArtifactSkeleton, resolveStageWidth, zoomPercent, DECK_ZOOM_LEVELS, LazyThumb } from './chunk-L53QV2NP.js';
5
- import { NewSessionPrompt, keepCaretOnTap } from './chunk-FZHOLMMX.js';
6
- import { PendingCards } from './chunk-UZ6RDWCT.js';
5
+ import { NewSessionPrompt, keepCaretOnTap } from './chunk-PBCI2XZ5.js';
6
+ import { PendingCards } from './chunk-N3I3MZTY.js';
7
7
  import { themeToStyle } from './chunk-6HYPVNVA.js';
8
- import { useChatAgents } from './chunk-FLOAEPRU.js';
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-3QTPT4SP.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-6554NLI4.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-Z7CMGAC3.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-X3BXBZ2O.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-LXXLV5GS.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-NGS7RDD3.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
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';
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';
24
24
  import { DropdownMenu as DropdownMenu$1, DropdownMenuTrigger as DropdownMenuTrigger$1, DropdownMenuContent, DropdownMenuItem, ChevronRightIcon, DropdownMenuSeparator, DropdownMenuLabel } from './chunk-C3HW5S2Z.js';
25
- import { AgentAvatar } from './chunk-PUMRNN3R.js';
25
+ import { AgentAvatar } from './chunk-RVJEI4ZY.js';
26
26
  import { ArrowDownIcon, FileTextIcon as FileTextIcon$1, Checkmark1Icon as Checkmark1Icon$1 } from './chunk-TUDJ35AB.js';
27
27
  import { cn, PortalContainerContext, Checkmark1Icon } from './chunk-LGVMMBL3.js';
28
28
  import { ChatClientContext } from './chunk-6JLWE7M3.js';
@@ -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(() => {
@@ -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: [
@@ -64233,6 +64234,10 @@ function NotesIcon(props) {
64233
64234
  }
64234
64235
 
64235
64236
  // ../chat/src/ui/chat/chat-input-bar/composer-output-modes.tsx
64237
+ function agentInApp(agent2, appFeatures) {
64238
+ if (appFeatures?.fileUpload !== false) return agent2;
64239
+ return { ...agent2, features: { ...agent2.features ?? {}, fileUpload: false } };
64240
+ }
64236
64241
  var hasArtifacts = (a) => a.plugins?.includes("artifacts") ?? false;
64237
64242
  var COMPOSER_OUTPUT_MODES = [
64238
64243
  {
@@ -64286,6 +64291,7 @@ var COMPOSER_OUTPUT_MODES = [
64286
64291
  // ../chat/src/ui/chat/chat-input-bar/hooks/use-composer-output-modes.ts
64287
64292
  function useComposerOutputModes(agentId) {
64288
64293
  const appAgents = useChatAppAgents();
64294
+ const appFeatures = useOptionalChatApp()?.runtime.features;
64289
64295
  const manifestQuery = useManifest(useContext(ComposerManifestSurface));
64290
64296
  const raw = appAgents ?? manifestQuery.data?.data?.agents;
64291
64297
  const agents = Array.isArray(raw) ? raw : [];
@@ -64295,8 +64301,9 @@ function useComposerOutputModes(agentId) {
64295
64301
  (a) => a.id === agentId || a.slug === agentId || a.name === agentId
64296
64302
  );
64297
64303
  if (!entry) return [];
64298
- return COMPOSER_OUTPUT_MODES.filter((m) => m.gate(entry));
64299
- }, [agents, agentId]);
64304
+ const asRun = agentInApp(entry, appFeatures);
64305
+ return COMPOSER_OUTPUT_MODES.filter((m) => m.gate(asRun));
64306
+ }, [agents, agentId, appFeatures]);
64300
64307
  }
64301
64308
 
64302
64309
  // ../chat/src/ui/chat/chat-input-bar/components/composer-editor/mention-ranking.ts
@@ -65319,6 +65326,22 @@ var MOBILE_LIST_FRACTION = 0.5;
65319
65326
  var PLACEHOLDER_CHAR_MS = 20;
65320
65327
  var AT_PLUGIN_KEY = new PluginKey("composerMentionAt");
65321
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
+ }
65322
65345
  var ComposerEditor = forwardRef(function ComposerEditor2({
65323
65346
  placeholder,
65324
65347
  typePlaceholder,
@@ -65368,22 +65391,7 @@ var ComposerEditor = forwardRef(function ComposerEditor2({
65368
65391
  onCutAtStartRef.current = onCutAtStart;
65369
65392
  const onBackspaceAtStartRef = useRef(onBackspaceAtStart);
65370
65393
  onBackspaceAtStartRef.current = onBackspaceAtStart;
65371
- const submitKeymap = useRef(
65372
- Extension.create({
65373
- name: "composerKeymap",
65374
- priority: 50,
65375
- addKeyboardShortcuts() {
65376
- return {
65377
- "Shift-Enter": () => this.editor.commands.setHardBreak(),
65378
- Backspace: () => {
65379
- const { selection } = this.editor.state;
65380
- if (!selection.empty || selection.$anchor.pos > 1) return false;
65381
- return onBackspaceAtStartRef.current?.() ?? false;
65382
- }
65383
- };
65384
- }
65385
- })
65386
- ).current;
65394
+ const submitKeymap = useRef(composerKeymap(onBackspaceAtStartRef)).current;
65387
65395
  const editor = useEditor({
65388
65396
  immediatelyRender: false,
65389
65397
  extensions: [
@@ -69318,7 +69326,7 @@ function ComposerTemplateStrip({
69318
69326
  className: "hidden",
69319
69327
  onChange: (e) => {
69320
69328
  const f = e.target.files?.[0];
69321
- if (f) onImport(f);
69329
+ if (f) void onImport(f);
69322
69330
  e.target.value = "";
69323
69331
  }
69324
69332
  }
@@ -69785,7 +69793,8 @@ function ApprovalGrantsList({
69785
69793
  return /* @__PURE__ */ jsxs("div", { "data-slot": "approval-grants-list", className: cn("border-t border-border px-1 pt-2", className), children: [
69786
69794
  /* @__PURE__ */ jsx("p", { className: "px-2 pb-1 text-xs text-muted-foreground", children: "Not asking in this chat" }),
69787
69795
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5", children: grants.map((grant) => {
69788
- const label = getToolMeta(grant.toolName).label;
69796
+ const tool = getToolMeta(grant.toolName).label;
69797
+ const label = grant.target ? `${tool}: ${grant.target}` : tool;
69789
69798
  return /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 rounded-lg px-2 py-1", children: [
69790
69799
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
69791
69800
  /* @__PURE__ */ jsx("span", { className: "block truncate text-xs font-medium text-foreground", children: label }),
@@ -70807,7 +70816,7 @@ function ChatInputBar({
70807
70816
  }, [steerable, sessionKey, dequeueMessage, onSend]);
70808
70817
  const handleSteerQueued = useCallback(
70809
70818
  (id, text2, fileRefs) => {
70810
- onSteer?.(text2, fileRefs);
70819
+ void onSteer?.(text2, fileRefs);
70811
70820
  removeQueuedMessage(sessionKey, id);
70812
70821
  },
70813
70822
  [onSteer, removeQueuedMessage, sessionKey]
@@ -70869,7 +70878,7 @@ function ChatInputBar({
70869
70878
  setFileError(t2("chat.input.fileLimit", { count: remaining }));
70870
70879
  return;
70871
70880
  }
70872
- const results = await Promise.all(files.map(handleUploadFile));
70881
+ const results = await Promise.all(files.map((file) => handleUploadFile(file)));
70873
70882
  const uploaded = results.filter(
70874
70883
  (r) => r !== null
70875
70884
  );
@@ -70961,10 +70970,10 @@ function ChatInputBar({
70961
70970
  const fileItems = items.filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter((f) => f !== null);
70962
70971
  if (fileItems.length > 0) {
70963
70972
  e.preventDefault();
70964
- handleFiles(fileItems);
70973
+ if (enableFileUpload) handleFiles(fileItems);
70965
70974
  }
70966
70975
  },
70967
- [handleFiles]
70976
+ [handleFiles, enableFileUpload]
70968
70977
  );
70969
70978
  const approvalOptions = modeOptions ?? capabilities.approvalModes?.options ?? DEFAULT_APPROVAL_MODE_OPTIONS;
70970
70979
  const approvalValue = capabilities.approvalModes?.value ?? approvalMode;
@@ -72051,8 +72060,7 @@ function PortalRootProvider({
72051
72060
  root.removeAttribute("style");
72052
72061
  for (const [key2, value] of Object.entries(style2 ?? {})) {
72053
72062
  if (typeof value !== "string") continue;
72054
- if (key2.startsWith("--")) root.style.setProperty(key2, value);
72055
- else root.style.setProperty(key2, value);
72063
+ root.style.setProperty(key2, value);
72056
72064
  }
72057
72065
  }, [root, dark, style2]);
72058
72066
  return /* @__PURE__ */ jsx(PortalContainerContext.Provider, { value: root, children });
@@ -1,13 +1,13 @@
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-X3BXBZ2O.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-NGS7RDD3.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent, Sheet, SheetContent, SheetHeader, SheetTitle } from './chunk-T5SANYSX.js';
5
5
  import { useTranslation, useIsMobile } from './chunk-77OYEA4D.js';
6
- import { Collapsible, CollapsibleTrigger, CollapsibleContent, Shimmer, HoverCard, HoverCardTrigger, HoverCardContent } from './chunk-PKNEC4LJ.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';
10
- import { AgentAvatar } from './chunk-PUMRNN3R.js';
10
+ import { AgentAvatar } from './chunk-RVJEI4ZY.js';
11
11
  import { BulletListIcon, FilesIcon } from './chunk-TUDJ35AB.js';
12
12
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
13
13
  import { __require } from './chunk-PR4QN5HX.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,12 +1,12 @@
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-X3BXBZ2O.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-NGS7RDD3.js';
3
3
  import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
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';
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';
9
- import { HISTORY_CITATION_PREFIX, historyCitationReference, AgentAvatar } from './chunk-PUMRNN3R.js';
9
+ import { HISTORY_CITATION_PREFIX, canonicalCitationUrl, encodeKnowledgeCitationLinks, historyCitationReference, AgentAvatar } from './chunk-RVJEI4ZY.js';
10
10
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
11
11
  import { useChatClientOptional } from './chunk-6JLWE7M3.js';
12
12
  import { createContext, memo, useMemo, isValidElement, cloneElement, useState, useCallback, useRef, useEffect, useId, useLayoutEffect, lazy, Suspense, useContext } from 'react';
@@ -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: [
@@ -2624,7 +2625,8 @@ var MessageTextBlock = memo(function MessageTextBlock2({
2624
2625
  }
2625
2626
  if (typeof href === "string" && href.startsWith("/cite/")) {
2626
2627
  const label = typeof children === "string" ? children : String(children ?? "");
2627
- const matchedCitation = citations?.find((c) => c.url === href);
2628
+ const cited = canonicalCitationUrl(href);
2629
+ const matchedCitation = citations?.find((c) => canonicalCitationUrl(c.url) === cited);
2628
2630
  const title = matchedCitation?.title || href;
2629
2631
  const snippet = matchedCitation?.snippet;
2630
2632
  return /* @__PURE__ */ jsx(
@@ -2759,6 +2761,7 @@ var MessageTextBlock = memo(function MessageTextBlock2({
2759
2761
  [components]
2760
2762
  );
2761
2763
  const activeComponents = richTextEnabled ? components : plainTextComponents;
2764
+ const linkedText = useMemo(() => encodeKnowledgeCitationLinks(text), [text]);
2762
2765
  const hasCitations = citations && citations.length > 0;
2763
2766
  const [showForkDialog, setShowForkDialog] = useState(false);
2764
2767
  const [actionsOpen, setActionsOpen] = useState(false);
@@ -3074,7 +3077,7 @@ var MessageTextBlock = memo(function MessageTextBlock2({
3074
3077
  {
3075
3078
  className: "chat-answer space-y-2 leading-relaxed prose prose-sm dark:prose-invert text-sm w-full max-w-none text-foreground streamdown-prose group-[.is-bubble]:w-fit",
3076
3079
  components: activeComponents,
3077
- children: text
3080
+ children: linkedText
3078
3081
  },
3079
3082
  `${messageId}-txt-${partIndex}-response`
3080
3083
  )
@@ -4658,7 +4661,8 @@ var DocumentStreamCard = memo(function DocumentStreamCard2({
4658
4661
  } : void 0;
4659
4662
  const copyContent = () => {
4660
4663
  if (!displayContent) return;
4661
- navigator.clipboard.writeText(displayContent);
4664
+ void navigator.clipboard.writeText(displayContent).catch(() => {
4665
+ });
4662
4666
  setCopied(true);
4663
4667
  window.setTimeout(() => setCopied(false), 1200);
4664
4668
  };
@@ -5438,6 +5442,7 @@ var AssistantMessage = memo(function AssistantMessage2({
5438
5442
  { isCancelled: () => cancelled }
5439
5443
  ).then((suggestions) => {
5440
5444
  if (!cancelled && suggestions) setPolledFollowUps(suggestions);
5445
+ }).catch(() => {
5441
5446
  });
5442
5447
  return () => {
5443
5448
  cancelled = true;
@@ -5468,7 +5473,7 @@ var AssistantMessage = memo(function AssistantMessage2({
5468
5473
  await new Promise((r) => setTimeout(r, 1e3));
5469
5474
  }
5470
5475
  };
5471
- fetchMetadata();
5476
+ void fetchMetadata();
5472
5477
  return () => {
5473
5478
  cancelled = true;
5474
5479
  };
@@ -6097,6 +6102,7 @@ var UserMessageActions = memo(function UserMessageActions2({
6097
6102
  navigator.clipboard.writeText(messageText).then(() => {
6098
6103
  setCopied(true);
6099
6104
  setTimeout(() => setCopied(false), 2e3);
6105
+ }).catch(() => {
6100
6106
  });
6101
6107
  }, [messageText]);
6102
6108
  if (isStreaming) return null;
@@ -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';
@@ -2,13 +2,13 @@
2
2
  import { ChevronLeftIcon } from './chunk-CWAOLMFS.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './chunk-T5SANYSX.js';
4
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';
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';
10
10
  import { ChevronRightIcon, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from './chunk-C3HW5S2Z.js';
11
- import { AgentAvatar, FORMAT_EXT } from './chunk-PUMRNN3R.js';
11
+ import { AgentAvatar, FORMAT_EXT } from './chunk-RVJEI4ZY.js';
12
12
  import { Images1Icon, SlidesWideIcon, FilePdfIcon, TableIcon, FileTextIcon as FileTextIcon$1, SquareArrowTopRightIcon as SquareArrowTopRightIcon$1, FileDownloadIcon } from './chunk-TUDJ35AB.js';
13
13
  import { cn, Checkmark1Icon, usePortalContainer } from './chunk-LGVMMBL3.js';
14
14
  import { useChatClientOptional } from './chunk-6JLWE7M3.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") {
@@ -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,6 +1,6 @@
1
1
  'use client';
2
2
  import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './chunk-C3HW5S2Z.js';
3
- import { AgentAvatar } from './chunk-PUMRNN3R.js';
3
+ import { AgentAvatar } from './chunk-RVJEI4ZY.js';
4
4
  import { ChevronDownMediumIcon } from './chunk-TUDJ35AB.js';
5
5
  import { useChatClientOptional } from './chunk-6JLWE7M3.js';
6
6
  import { useState, useEffect } from 'react';
@@ -3,7 +3,7 @@ import { MagnifyingGlassIcon } from './chunk-X3QVICX7.js';
3
3
  import { Sheet, SheetContent, SheetHeader, SheetTitle, Popover, PopoverTrigger, PopoverContent } from './chunk-T5SANYSX.js';
4
4
  import { useIsMobile, useTranslation } from './chunk-77OYEA4D.js';
5
5
  import { CrossMediumIcon } from './chunk-2P4IEVOQ.js';
6
- import { AgentAvatar } from './chunk-PUMRNN3R.js';
6
+ import { AgentAvatar } from './chunk-RVJEI4ZY.js';
7
7
  import { cn, Checkmark1Icon } from './chunk-LGVMMBL3.js';
8
8
  import * as t from 'react';
9
9
  import { memo, useState } from 'react';
@@ -2131,6 +2131,33 @@ function historyCitationReference(href) {
2131
2131
  return reference.length <= 16e3 && /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(reference) ? reference : null;
2132
2132
  }
2133
2133
 
2134
+ // src/adapters/service/knowledge-citation-contract.ts
2135
+ var KNOWLEDGE_CITATION_PREFIX = "/cite/knowledge/";
2136
+ function encodedSegment(value) {
2137
+ return encodeURIComponent(value).replace(/[()!'*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
2138
+ }
2139
+ function decodedSegment(value) {
2140
+ try {
2141
+ return decodeURIComponent(value);
2142
+ } catch {
2143
+ return value;
2144
+ }
2145
+ }
2146
+ function knowledgeCitationUrl(knowledgeName, sourceId) {
2147
+ return `${KNOWLEDGE_CITATION_PREFIX}${encodedSegment(knowledgeName)}/${encodedSegment(sourceId)}`;
2148
+ }
2149
+ var KNOWLEDGE_CITATION = /^\/cite\/knowledge\/(.+)\/([A-Za-z0-9_-]+)$/;
2150
+ function canonicalCitationUrl(url) {
2151
+ const match = KNOWLEDGE_CITATION.exec(url);
2152
+ if (!match) return url;
2153
+ return knowledgeCitationUrl(decodedSegment(match[1]), match[2]);
2154
+ }
2155
+ var KNOWLEDGE_CITATION_LINK = /\]\(\/cite\/knowledge\/([^\n]+?)\/([A-Za-z0-9_-]+)\)/g;
2156
+ function encodeKnowledgeCitationLinks(markdown) {
2157
+ if (!markdown.includes("](/cite/knowledge/")) return markdown;
2158
+ return markdown.replace(KNOWLEDGE_CITATION_LINK, (_m, name, id) => `](${knowledgeCitationUrl(decodedSegment(name), id)})`);
2159
+ }
2160
+
2134
2161
  // src/adapters/service-types.ts
2135
2162
  var FORMAT_EXT = {
2136
2163
  markdown: "md",
@@ -2214,4 +2241,4 @@ var AgentAvatarView = memo(function AgentAvatarView2({
2214
2241
  });
2215
2242
  var AgentAvatar = AgentAvatarView;
2216
2243
 
2217
- export { AgentAvatar, FORMAT_EXT, HISTORY_CITATION_PREFIX, historyCitationReference };
2244
+ export { AgentAvatar, FORMAT_EXT, HISTORY_CITATION_PREFIX, canonicalCitationUrl, encodeKnowledgeCitationLinks, historyCitationReference };
package/dist/header.js CHANGED
@@ -1,17 +1,17 @@
1
1
  'use client';
2
- export { ChatHeader, ChatHeaderActions } from './chunk-3QTPT4SP.js';
2
+ export { ChatHeader, ChatHeaderActions } from './chunk-6554NLI4.js';
3
3
  import './chunk-X3QVICX7.js';
4
- import './chunk-X3BXBZ2O.js';
4
+ import './chunk-NGS7RDD3.js';
5
5
  import './chunk-CWAOLMFS.js';
6
6
  import './chunk-T5SANYSX.js';
7
7
  import './chunk-77OYEA4D.js';
8
- import './chunk-QBV7MAFV.js';
9
- import './chunk-PKNEC4LJ.js';
8
+ import './chunk-BRCS2NHC.js';
9
+ import './chunk-X33KXNO3.js';
10
10
  import './chunk-UWKO24VT.js';
11
11
  import './chunk-2P4IEVOQ.js';
12
12
  import './chunk-CDTES65T.js';
13
13
  import './chunk-C3HW5S2Z.js';
14
- import './chunk-PUMRNN3R.js';
14
+ import './chunk-RVJEI4ZY.js';
15
15
  import './chunk-TUDJ35AB.js';
16
16
  import './chunk-LGVMMBL3.js';
17
17
  import './chunk-6JLWE7M3.js';
package/dist/message.js CHANGED
@@ -1,16 +1,16 @@
1
1
  'use client';
2
- export { Message, Thinking } from './chunk-Z7CMGAC3.js';
3
- import './chunk-X3BXBZ2O.js';
2
+ export { Message, Thinking } from './chunk-LXXLV5GS.js';
3
+ import './chunk-NGS7RDD3.js';
4
4
  import './chunk-CWAOLMFS.js';
5
5
  import './chunk-T5SANYSX.js';
6
6
  import './chunk-77OYEA4D.js';
7
- import './chunk-QBV7MAFV.js';
8
- import './chunk-PKNEC4LJ.js';
7
+ import './chunk-BRCS2NHC.js';
8
+ import './chunk-X33KXNO3.js';
9
9
  import './chunk-UWKO24VT.js';
10
10
  import './chunk-2P4IEVOQ.js';
11
11
  import './chunk-CDTES65T.js';
12
12
  import './chunk-C3HW5S2Z.js';
13
- import './chunk-PUMRNN3R.js';
13
+ import './chunk-RVJEI4ZY.js';
14
14
  import './chunk-TUDJ35AB.js';
15
15
  import './chunk-LGVMMBL3.js';
16
16
  import './chunk-6JLWE7M3.js';
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-FZHOLMMX.js';
2
+ export { DEFAULT_SHORTCUTS, NewSessionPrompt, buildDefaultShortcuts } from './chunk-PBCI2XZ5.js';
3
3
  import './chunk-X3QVICX7.js';
4
4
  import './chunk-T5SANYSX.js';
5
5
  import './chunk-77OYEA4D.js';
6
6
  import './chunk-2P4IEVOQ.js';
7
- import './chunk-PUMRNN3R.js';
7
+ import './chunk-RVJEI4ZY.js';
8
8
  import './chunk-LGVMMBL3.js';
9
9
  import './chunk-PR4QN5HX.js';
package/dist/parts.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { ToolCallItem } from './chunk-QBV7MAFV.js';
3
- import './chunk-PKNEC4LJ.js';
2
+ import { ToolCallItem } from './chunk-BRCS2NHC.js';
3
+ import './chunk-X33KXNO3.js';
4
4
  import './chunk-UWKO24VT.js';
5
5
  import './chunk-2P4IEVOQ.js';
6
6
  import './chunk-TUDJ35AB.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { PendingCards } from './chunk-UZ6RDWCT.js';
3
- import './chunk-PKNEC4LJ.js';
2
+ export { PendingCards } from './chunk-N3I3MZTY.js';
3
+ import './chunk-X33KXNO3.js';
4
4
  import './chunk-UWKO24VT.js';
5
5
  import './chunk-2P4IEVOQ.js';
6
6
  import './chunk-TUDJ35AB.js';