@iloveagents/foundry-web-ui 0.33.2 → 0.33.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -480,6 +480,13 @@ export const FOUNDRY_VIOLET_THEME = {
480
480
  border: "oklch(92% 0.008 290)",
481
481
  input: "oklch(92% 0.008 290)",
482
482
  ring: "oklch(43% 0.24 286)",
483
+ heading: "var(--primary)",
484
+ contentHeading1: "var(--primary)",
485
+ contentHeading2: "var(--foreground)",
486
+ contentHeading3: "var(--foreground)",
487
+ contentHeading4: "var(--foreground)",
488
+ contentHeading5: "var(--foreground)",
489
+ contentHeading6: "var(--foreground)",
483
490
  },
484
491
  sidebar: {
485
492
  light: {
@@ -489,8 +496,8 @@ export const FOUNDRY_VIOLET_THEME = {
489
496
  sidebarPrimaryForeground: "oklch(100% 0 0)",
490
497
  sidebarAccent: "color-mix(in srgb, var(--primary) 4%, var(--background) 96%)",
491
498
  sidebarAccentForeground: "color-mix(in srgb, var(--foreground) 92%, var(--primary) 8%)",
492
- sidebarSelected: "var(--muted)",
493
- sidebarSelectedForeground: "var(--foreground)",
499
+ sidebarSelected: "var(--sidebar)",
500
+ sidebarSelectedForeground: "var(--sidebar-primary)",
494
501
  sidebarIcon: "color-mix(in srgb, var(--sidebar-foreground) 60%, transparent)",
495
502
  sidebarBorder: "color-mix(in srgb, var(--border) 96%, var(--foreground) 4%)",
496
503
  sidebarRing: "oklch(43% 0.24 286)",
@@ -502,8 +509,8 @@ export const FOUNDRY_VIOLET_THEME = {
502
509
  sidebarPrimaryForeground: "oklch(0.98 0 0)",
503
510
  sidebarAccent: "color-mix(in srgb, var(--primary) 8%, var(--background) 92%)",
504
511
  sidebarAccentForeground: "color-mix(in srgb, var(--foreground) 90%, white 10%)",
505
- sidebarSelected: "color-mix(in srgb, var(--muted) 78%, var(--background) 22%)",
506
- sidebarSelectedForeground: "var(--foreground)",
512
+ sidebarSelected: "var(--sidebar)",
513
+ sidebarSelectedForeground: "var(--sidebar-primary)",
507
514
  sidebarIcon: "color-mix(in srgb, var(--sidebar-foreground) 60%, transparent)",
508
515
  sidebarBorder: "color-mix(in srgb, var(--border) 90%, white 10%)",
509
516
  sidebarRing: "oklch(0.72 0.18 286)",
@@ -529,6 +536,13 @@ export const FOUNDRY_VIOLET_THEME = {
529
536
  border: "oklch(1 0.01 286 / 12%)",
530
537
  input: "oklch(1 0.01 286 / 15%)",
531
538
  ring: "oklch(0.72 0.18 286)",
539
+ heading: "var(--primary)",
540
+ contentHeading1: "var(--primary)",
541
+ contentHeading2: "var(--foreground)",
542
+ contentHeading3: "var(--foreground)",
543
+ contentHeading4: "var(--foreground)",
544
+ contentHeading5: "var(--foreground)",
545
+ contentHeading6: "var(--foreground)",
532
546
  },
533
547
  typography: {
534
548
  bodyFont: '"Segoe UI", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif',
@@ -7,7 +7,7 @@ export declare function ConversationHistory({ groups, workspaceId, onClose, show
7
7
  showBack?: boolean;
8
8
  welcome?: boolean;
9
9
  compact?: boolean;
10
- /** The global start page shows the three newest chats below the composer. */
10
+ /** The global start page shows recent and pinned chats below the composer. */
11
11
  home?: boolean;
12
12
  onViewAll?: () => void;
13
13
  /** Current content entity. Compact homes show only an exact match unless this is the workspace root. */
@@ -5,6 +5,7 @@ import { Fragment, useEffect, useState } from "react";
5
5
  import { Link } from "react-router";
6
6
  import { ArrowLeft, MessageSquare, MoreHorizontal, Pin, Loader2, ChevronDown, Check, MessagesSquare, PauseCircle, Copy, } from "lucide-react";
7
7
  import { useChatRuns, isChatRunActive } from "../lib/chat-runs-store.js";
8
+ const HOME_SECTION_LIMIT = 5;
8
9
  /** History is a view of existing navigation targets, never a second chat runtime. */
9
10
  export function ConversationHistory({ groups, workspaceId, onClose, showBack = true, welcome = false, compact = false, home = false, onViewAll, entityId, rootContext = false, }) {
10
11
  const [loadingTo, setLoadingTo] = useState(null);
@@ -76,8 +77,12 @@ export function ConversationHistory({ groups, workspaceId, onClose, showBack = t
76
77
  }
77
78
  return (active(b) - active(a) || Number(Boolean(b.meta?.pinned)) - Number(Boolean(a.meta?.pinned)));
78
79
  });
79
- const homeRecentItems = home ? items.filter((item) => !item.meta?.pinned).slice(0, 3) : [];
80
- const homePinnedItems = home ? items.filter((item) => item.meta?.pinned).slice(0, 3) : [];
80
+ const homeRecentItems = home
81
+ ? items.filter((item) => !item.meta?.pinned).slice(0, HOME_SECTION_LIMIT)
82
+ : [];
83
+ const homePinnedItems = home
84
+ ? items.filter((item) => item.meta?.pinned).slice(0, HOME_SECTION_LIMIT)
85
+ : [];
81
86
  const homeHasItems = homeRecentItems.length > 0 || homePinnedItems.length > 0;
82
87
  const visibleItems = compact ? items.slice(0, 3) : items;
83
88
  const activeItems = visibleItems.filter((item) => {
@@ -105,9 +110,9 @@ export function ConversationHistory({ groups, workspaceId, onClose, showBack = t
105
110
  ? "w-full"
106
111
  : compact
107
112
  ? "w-full"
108
- : "mx-auto flex min-h-0 w-full max-w-3xl flex-1 flex-col px-4 pb-4", children: [welcome && (_jsxs("div", { className: "pb-6 pt-8", children: [_jsx("h1", { className: "text-xl font-semibold", children: "How can I help?" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Start something new or continue a recent chat." })] })), showBack && (_jsxs("button", { onClick: onClose, className: "mb-4 flex items-center gap-2 py-2 text-xs text-muted-foreground hover:text-foreground", children: [_jsx(ArrowLeft, { size: 14 }), " Back to chat"] })), (!compact || items.length > 0) && (_jsxs("div", { className: home
109
- ? "mb-2 mt-5 flex items-center justify-between px-1"
110
- : "mb-2 mt-2 flex items-center justify-between", children: [_jsx("h2", { className: compact ? "text-xs font-medium text-muted-foreground" : "text-base font-semibold", children: home ? "Your chats" : compact ? "Recent chats" : "Chat history" }), home && onViewAll && (_jsx("button", { type: "button", onClick: onViewAll, className: "rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-2 focus-visible:outline-primary [@media(pointer:coarse)]:min-h-11", children: "View all" }))] })), Boolean(workspaceId) && !compact && (_jsx("div", { className: "mb-3", children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", "aria-label": "History filter", className: "w-full justify-between font-normal shadow-none", children: [_jsx("span", { className: "truncate", children: all ? "All chats" : "Last used in this workspace" }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" })] }) }), _jsx(DropdownMenuContent, { align: "start", className: "w-[var(--radix-dropdown-menu-trigger-width)]", children: [
113
+ : "mx-auto flex min-h-0 w-full max-w-3xl flex-1 flex-col px-4 pb-4", children: [welcome && (_jsxs("div", { className: "pb-6 pt-8", children: [_jsx("h1", { className: "text-xl font-semibold", children: "How can I help?" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Start something new or continue a recent chat." })] })), showBack && (_jsxs("button", { onClick: onClose, className: "mb-4 flex items-center gap-2 py-2 text-xs text-muted-foreground hover:text-foreground", children: [_jsx(ArrowLeft, { size: 14 }), " Back to chat"] })), (!compact || items.length > 0) && (_jsx("div", { className: home
114
+ ? "mb-2 mt-5 flex items-center justify-center px-1 text-center"
115
+ : "mb-2 mt-2 flex items-center justify-between", children: _jsx("h2", { className: compact ? "text-xs font-medium text-muted-foreground" : "text-base font-semibold", children: home ? "Your chats" : compact ? "Recent chats" : "Chat history" }) })), Boolean(workspaceId) && !compact && (_jsx("div", { className: "mb-3", children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", "aria-label": "History filter", className: "w-full justify-between font-normal shadow-none", children: [_jsx("span", { className: "truncate", children: all ? "All chats" : "Last used in this workspace" }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" })] }) }), _jsx(DropdownMenuContent, { align: "start", className: "w-[var(--radix-dropdown-menu-trigger-width)]", children: [
111
116
  { value: false, label: "Last used in this workspace" },
112
117
  { value: true, label: "All chats" },
113
118
  ].map((option) => (_jsxs(DropdownMenuItem, { role: "menuitemradio", "aria-checked": all === option.value, onSelect: () => setAll(option.value), children: [_jsx("span", { className: "flex-1", children: option.label }), all === option.value && _jsx(Check, { className: "size-4", "aria-hidden": "true" })] }, option.label))) })] }) })), !compact && (_jsx(Input, { "aria-label": "Search chats", placeholder: "Search chats", value: search, onChange: (event) => setSearch(event.target.value), className: "mb-3" })), _jsx("span", { className: "sr-only", role: "status", children: copiedId ? "Chat ID copied" : "" }), loadError && (_jsx("p", { role: "alert", className: "mb-2 text-xs text-destructive", children: loadError })), _jsxs("div", { className: home
@@ -154,7 +159,7 @@ export function ConversationHistory({ groups, workspaceId, onClose, showBack = t
154
159
  onClose();
155
160
  }, "data-conversation-row": true, className: home
156
161
  ? "flex min-w-0 flex-1 items-center gap-3 rounded-lg px-2 py-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-primary"
157
- : "flex min-w-0 flex-1 items-center gap-2 rounded-lg px-2 py-1.5 text-sm hover:bg-muted focus-visible:outline-2 focus-visible:outline-primary", children: [loadingTo === item.to ? (_jsx(Loader2, { className: "size-4 shrink-0 animate-spin text-muted-foreground", "aria-label": "Opening chat" })) : runFor(item)?.status === "running" ? (_jsx(Loader2, { className: "size-4 shrink-0 animate-spin text-primary motion-reduce:animate-none", "aria-hidden": true })) : runFor(item)?.status === "waiting" ? (_jsx(PauseCircle, { className: "size-4 shrink-0 text-primary", "aria-hidden": true })) : item.meta?.pinned ? (_jsx(Pin, { className: "size-4 shrink-0 text-muted-foreground", "aria-label": "Pinned chat" })) : (_jsx(MessageSquare, { className: "size-4 shrink-0 text-muted-foreground" })), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate", children: item.label }), " ", runFor(item) && isChatRunActive(runFor(item)) ? (_jsx("span", { className: "block text-xs text-primary", children: runFor(item)?.status === "waiting" ? "Waiting for you" : "Running" })) : ((!compact || rootContext) && (_jsx("span", { className: "block truncate text-xs text-muted-foreground", children: !all &&
162
+ : "flex min-w-0 flex-1 items-center gap-2 rounded-lg px-2 py-1.5 text-sm hover:bg-muted focus-visible:outline-2 focus-visible:outline-primary", children: [loadingTo === item.to ? (_jsx(Loader2, { className: "size-4 shrink-0 animate-spin text-muted-foreground", "aria-label": "Opening chat" })) : runFor(item)?.status === "running" ? (_jsx(Loader2, { className: "size-4 shrink-0 animate-spin text-primary motion-reduce:animate-none", "aria-hidden": true })) : runFor(item)?.status === "waiting" ? (_jsx(PauseCircle, { className: "size-4 shrink-0 text-primary", "aria-hidden": true })) : item.meta?.pinned ? (_jsx(Pin, { className: "size-4 shrink-0 text-muted-foreground", "aria-label": "Pinned chat" })) : (_jsx(MessageSquare, { className: "size-4 shrink-0 text-muted-foreground" })), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate", children: item.label }), " ", runFor(item) && isChatRunActive(runFor(item)) ? (_jsx("span", { className: "block text-xs text-primary", children: runFor(item)?.status === "waiting" ? "Waiting for you" : "Running" })) : ((home || !compact || rootContext) && (_jsx("span", { className: "block truncate text-xs text-muted-foreground", children: !all &&
158
163
  typeof item.meta?.previewEntityName === "string" &&
159
164
  item.meta.previewEntityName
160
165
  ? `Last at ${item.meta.previewEntityName}`
@@ -181,5 +186,5 @@ export function ConversationHistory({ groups, workspaceId, onClose, showBack = t
181
186
  .catch(() => setLoadError(`Could not copy. Chat ID: ${decodeURIComponent(id)}`));
182
187
  }, children: [_jsx(Copy, { className: "size-4" }), "Copy chat ID"] }), Boolean(item.actions?.length) && _jsx(DropdownMenuSeparator, {}), item.actions?.map((action) => (_jsxs(Fragment, { children: [action.separator && _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onSelect: () => {
183
188
  void action.handler();
184
- }, className: action.destructive ? "text-destructive" : undefined, children: [_jsx(action.icon, { className: "mr-2 size-4" }), action.label] })] }, action.label)))] })] })] }, item.to)))] }, section.label))), items.length === 0 && !compact && (_jsx("p", { className: "py-3 text-sm text-muted-foreground", children: search ? "No matching chats" : "No chats yet" }))] }), compact && onViewAll && !home && (_jsxs(Button, { variant: "ghost", size: "sm", onClick: onViewAll, className: "mt-1 h-9 w-fit gap-2 px-2 text-sm font-normal text-muted-foreground [@media(pointer:coarse)]:min-h-11", children: [_jsx(MessagesSquare, { className: "size-4", "aria-hidden": true }), "Chat history"] }))] }));
189
+ }, className: action.destructive ? "text-destructive" : undefined, children: [_jsx(action.icon, { className: "mr-2 size-4" }), action.label] })] }, action.label)))] })] })] }, item.to)))] }, section.label))), items.length === 0 && !compact && (_jsx("p", { className: "py-3 text-sm text-muted-foreground", children: search ? "No matching chats" : "No chats yet" }))] }), home && onViewAll && (_jsx("div", { className: "mt-2 flex justify-center", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: onViewAll, className: "h-9 w-fit gap-2 px-2 text-sm font-normal text-muted-foreground [@media(pointer:coarse)]:min-h-11", children: [_jsx(MessagesSquare, { className: "size-4", "aria-hidden": true }), "View all conversations"] }) })), compact && onViewAll && !home && (_jsxs(Button, { variant: "ghost", size: "sm", onClick: onViewAll, className: "mt-1 h-9 w-fit gap-2 px-2 text-sm font-normal text-muted-foreground [@media(pointer:coarse)]:min-h-11", children: [_jsx(MessagesSquare, { className: "size-4", "aria-hidden": true }), "Chat history"] }))] }));
185
190
  }
@@ -25,10 +25,10 @@ export function SelectionBridge({ children }) {
25
25
  top: rect.top - bounds.top,
26
26
  height: rect.height,
27
27
  left: rect.left - bounds.left + 0.5,
28
- rowRight: rect.right - bounds.left - 1,
29
28
  width: bounds.width,
30
29
  navHeight: bounds.height,
31
30
  surfaceWidth: node.nextElementSibling?.getBoundingClientRect().width ?? 0,
31
+ radius: Math.min(16, rect.height / 2, Number.parseFloat(getComputedStyle(row).borderTopLeftRadius) || 0),
32
32
  }
33
33
  : null);
34
34
  });
@@ -46,6 +46,10 @@ export function SelectionBridge({ children }) {
46
46
  attributes: true,
47
47
  attributeFilter: ["class", "style", "data-active-nav-row"],
48
48
  });
49
+ mutation?.observe(document.documentElement, {
50
+ attributes: true,
51
+ attributeFilter: ["class", "style"],
52
+ });
49
53
  node.addEventListener("scroll", measure, true);
50
54
  measure();
51
55
  return () => {
@@ -55,27 +59,55 @@ export function SelectionBridge({ children }) {
55
59
  node.removeEventListener("scroll", measure, true);
56
60
  };
57
61
  }, []);
58
- return (_jsxs("div", { ref: root, "data-connected-navigation": anchor ? "true" : undefined, className: "relative flex shrink-0", children: [_jsx("style", { children: `
62
+ return (_jsxs("div", { ref: root, "data-connected-navigation": anchor ? "true" : undefined, className: "relative flex shrink-0", style: {
63
+ "--connected-row-radius": anchor ? `${anchor.radius}px` : undefined,
64
+ }, children: [_jsx("style", { children: `
59
65
  [data-connected-navigation="true"] + [data-workbench-surface]::after { display: none; }
60
66
  .workbench-preview [data-sidebar-surface="desktop"] nav { padding-right: 16px; }
61
67
  .workbench-preview [data-sidebar-surface="desktop"] { border-right-color: transparent; }
62
68
  [data-connected-navigation="true"] [data-sidebar-surface="desktop"] [data-active-nav-row="true"] {
63
- border-color: transparent; border-top-right-radius: 0; border-bottom-right-radius: 0;
69
+ background: var(--background);
70
+ border-color: transparent;
71
+ border-top-right-radius: 0;
72
+ border-bottom-right-radius: 0;
73
+ }
74
+ [data-connected-navigation="true"] [data-sidebar-surface="desktop"] [data-active-nav-row="true"]::after {
75
+ content: "";
76
+ position: absolute;
77
+ z-index: 0;
78
+ inset-block: 0;
79
+ left: 100%;
80
+ width: 16px;
81
+ background: var(--background);
82
+ }
83
+ [data-connected-navigation="true"] [data-sidebar-surface="desktop"] [data-active-nav-row="true"]::before {
84
+ content: "";
85
+ position: absolute;
86
+ z-index: 1;
87
+ inset-block: 5px;
88
+ left: 5px;
89
+ right: -10px;
90
+ border-radius: max(0px, calc(var(--connected-row-radius) - 5px));
91
+ background: var(--sidebar-selected);
92
+ pointer-events: none;
93
+ }
94
+ [data-connected-navigation="true"] [data-sidebar-surface="desktop"] [data-active-nav-row="true"] > * {
95
+ z-index: 2;
64
96
  }
65
- ` }), children, anchor && (_jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute z-20", style: { inset: 0, width: anchor.width + anchor.surfaceWidth, height: anchor.navHeight }, viewBox: `0 0 ${anchor.width + anchor.surfaceWidth} ${anchor.navHeight}`, children: _jsx("path", { fill: "none", stroke: "var(--sidebar-ring)", strokeOpacity: 0.6, strokeWidth: 1, d: `M ${anchor.width + 12},0.5
66
- H ${anchor.width + anchor.surfaceWidth - 12}
67
- Q ${anchor.width + anchor.surfaceWidth - 0.5},0.5 ${anchor.width + anchor.surfaceWidth - 0.5},12
68
- V ${anchor.navHeight - 12}
69
- Q ${anchor.width + anchor.surfaceWidth - 0.5},${anchor.navHeight - 0.5} ${anchor.width + anchor.surfaceWidth - 12},${anchor.navHeight - 0.5}
70
- H ${anchor.width + 12}
71
- Q ${anchor.width - 0.5},${anchor.navHeight - 0.5} ${anchor.width - 0.5},${anchor.navHeight - 12}
72
- V ${anchor.top + anchor.height + 7}
73
- Q ${anchor.width - 0.5},${anchor.top + anchor.height - 0.5} ${anchor.width - 8},${anchor.top + anchor.height - 0.5}
74
- H ${anchor.left + 12}
75
- Q ${anchor.left},${anchor.top + anchor.height - 0.5} ${anchor.left},${anchor.top + anchor.height - 12}
76
- V ${anchor.top + 12}
77
- Q ${anchor.left},${anchor.top + 0.5} ${anchor.left + 12},${anchor.top + 0.5}
78
- H ${anchor.width - 8}
79
- Q ${anchor.width - 0.5},${anchor.top + 0.5} ${anchor.width - 0.5},${anchor.top - 7}
80
- V 12 Q ${anchor.width - 0.5},0.5 ${anchor.width + 12},0.5 Z` }) }))] }));
97
+ ` }), children, anchor && (_jsx("svg", { "aria-hidden": "true", className: "pointer-events-none absolute z-20", style: { inset: 0, width: anchor.width + anchor.surfaceWidth, height: anchor.navHeight }, viewBox: `0 0 ${anchor.width + anchor.surfaceWidth} ${anchor.navHeight}`, children: _jsx("path", { fill: "none", stroke: "var(--sidebar-ring)", strokeOpacity: 0.6, strokeWidth: 1, d: `M ${anchor.width + anchor.radius},0.5
98
+ H ${anchor.width + anchor.surfaceWidth - anchor.radius}
99
+ Q ${anchor.width + anchor.surfaceWidth - 0.5},0.5 ${anchor.width + anchor.surfaceWidth - 0.5},${anchor.radius}
100
+ V ${anchor.navHeight - anchor.radius}
101
+ Q ${anchor.width + anchor.surfaceWidth - 0.5},${anchor.navHeight - 0.5} ${anchor.width + anchor.surfaceWidth - anchor.radius},${anchor.navHeight - 0.5}
102
+ H ${anchor.width + anchor.radius}
103
+ Q ${anchor.width - 0.5},${anchor.navHeight - 0.5} ${anchor.width - 0.5},${anchor.navHeight - anchor.radius}
104
+ V ${anchor.top + anchor.height + anchor.radius}
105
+ Q ${anchor.width - 0.5},${anchor.top + anchor.height - 0.5} ${anchor.width - anchor.radius},${anchor.top + anchor.height - 0.5}
106
+ H ${anchor.left + anchor.radius}
107
+ Q ${anchor.left},${anchor.top + anchor.height - 0.5} ${anchor.left},${anchor.top + anchor.height - anchor.radius}
108
+ V ${anchor.top + anchor.radius}
109
+ Q ${anchor.left},${anchor.top + 0.5} ${anchor.left + anchor.radius},${anchor.top + 0.5}
110
+ H ${anchor.width - anchor.radius}
111
+ Q ${anchor.width - 0.5},${anchor.top + 0.5} ${anchor.width - 0.5},${anchor.top - anchor.radius}
112
+ V ${anchor.radius} Q ${anchor.width - 0.5},0.5 ${anchor.width + anchor.radius},0.5 Z` }) }))] }));
81
113
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iloveagents/foundry-web-ui",
3
- "version": "0.33.2",
3
+ "version": "0.33.3",
4
4
  "license": "MIT",
5
5
  "description": "React agent UI core for Foundry UI — chat, composer, AG-UI adapter for assistant-ui, tool cards, panels, sidebar, theme runtime, and UI stores.",
6
6
  "keywords": [
@@ -80,8 +80,8 @@
80
80
  "recharts": "^3.10.1",
81
81
  "remark-gfm": "^4.0.0",
82
82
  "tailwind-merge": "^3.5.0",
83
- "@iloveagents/foundry-agent": "^0.33.2",
84
- "@iloveagents/foundry-web-primitives": "^0.33.2"
83
+ "@iloveagents/foundry-agent": "^0.33.3",
84
+ "@iloveagents/foundry-web-primitives": "^0.33.3"
85
85
  },
86
86
  "devDependencies": {
87
87
  "@ag-ui/client": "^0.0.52",