@tangle-network/sandbox-ui 0.134.5 → 0.134.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,7 +18,12 @@ React component library for [Tangle Sandbox](https://sandbox.tangle.tools) — a
18
18
  npm install @tangle-network/sandbox-ui
19
19
  ```
20
20
 
21
- **Required peers:** `react` and `react-dom` 18 or 19, `@tangle-network/agent-interface ^1.0.0 || ^2.0.0`, `@tangle-network/brand ^1.6.0`, and `@tangle-network/ui ^11.10.0`.
21
+ **Required peers:** `react` and `react-dom` 18 or 19, `@tangle-network/agent-interface ^1.0.0 || ^2.0.0 || ^3.0.0 || ^5.2.0`, `@tangle-network/brand ^1.23.0`, and `@tangle-network/ui ^11.33.0`.
22
+
23
+ The Interface compatibility check exercises the exact supported floors 1.0.0,
24
+ 2.0.0, 3.0.0, and 5.2.0, including source checks and a packed consumer's public
25
+ declarations. Interface 4.x, 5.0.x, and 5.1.x are not admitted. New majors require
26
+ qualification before the peer range is extended.
22
27
  Optional peers are required only by the subpaths that use them; see [package.json](./package.json). `/editor` needs its tiptap, `yjs` and `@hocuspocus/provider` peers only when it renders an editor, and the `@tangle-network/ui` README holds the table of which surface needs which. `/files` needs `pdfjs-dist` only for `PdfViewer`, which `FilePreview` uses for PDFs; without it the viewer says so and falls back to the browser's own PDF viewer. The `ui` README covers its worker and asset setup through `configurePdfViewer`.
23
28
 
24
29
  ## Usage
@@ -315,7 +315,7 @@ function profileSubtitle(profile) {
315
315
  * because the inline form needs its own focus and typing without the menu
316
316
  * stealing keystrokes.
317
317
  */
318
- function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side = "top" }) {
318
+ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, onEdit, onNew, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side = "top" }) {
319
319
  const [open, setOpen] = React$1.useState(false);
320
320
  const [composing, setComposingState] = React$1.useState(null);
321
321
  const [saving, setSaving] = React$1.useState(false);
@@ -338,7 +338,11 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
338
338
  setOpen(false);
339
339
  setComposing(null);
340
340
  }, [popoverRef]);
341
- const canAuthor = Boolean(capabilities && onCreate);
341
+ const canAuthor = Boolean(onNew || capabilities && onCreate);
342
+ const editIn = (profile) => onEdit ? () => {
343
+ setOpen(false);
344
+ onEdit(profile.id);
345
+ } : onUpdate ? () => setComposing(profile) : void 0;
342
346
  const builtins = profiles.filter((profile) => profile.builtin);
343
347
  const custom = profiles.filter((profile) => !profile.builtin);
344
348
  const selectedName = profiles.find((profile) => profile.id === value)?.name ?? value;
@@ -440,7 +444,8 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
440
444
  active: profile.id === value,
441
445
  title: profile.name,
442
446
  subtitle: profileSubtitle(profile),
443
- onSelect: () => select(profile.id)
447
+ onSelect: () => select(profile.id),
448
+ onEdit: onEdit ? editIn(profile) : void 0
444
449
  }, profile.id)),
445
450
  custom.length > 0 && /* @__PURE__ */ jsx(SectionHeader, { children: "Your agents" }),
446
451
  custom.map((profile) => /* @__PURE__ */ jsx(ProfileRow, {
@@ -448,12 +453,17 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
448
453
  title: profile.name,
449
454
  subtitle: profileSubtitle(profile),
450
455
  onSelect: () => select(profile.id),
451
- onEdit: onUpdate ? () => setComposing(profile) : void 0,
456
+ onEdit: editIn(profile),
452
457
  onDelete: onDelete ? () => void onDelete(profile.id) : void 0
453
458
  }, profile.id)),
454
459
  canAuthor && /* @__PURE__ */ jsxs("button", {
455
460
  type: "button",
456
- onClick: () => setComposing("new"),
461
+ onClick: () => {
462
+ if (onNew) {
463
+ setOpen(false);
464
+ onNew();
465
+ } else setComposing("new");
466
+ },
457
467
  className: "mt-1 flex w-full items-center gap-2 rounded-md px-2.5 py-2 text-left text-sm text-[var(--accent-text)] transition-colors hover:bg-accent/40",
458
468
  children: [/* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" }), " New agent…"]
459
469
  })
@@ -489,7 +499,7 @@ function ProfileRow({ active, title, subtitle, onSelect, onEdit, onDelete }) {
489
499
  })]
490
500
  })]
491
501
  }), (onEdit || onDelete) && /* @__PURE__ */ jsxs("span", {
492
- className: "flex shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",
502
+ className: "flex shrink-0 items-center gap-1 opacity-100 transition-opacity [@media(hover:hover)]:opacity-0 group-hover:opacity-100 group-focus-within:opacity-100",
493
503
  children: [onEdit && /* @__PURE__ */ jsx("button", {
494
504
  type: "button",
495
505
  onClick: onEdit,
package/dist/chat.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-D-U-1U0i.js";
1
+ import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-QBCEflyf.js";
2
2
  export { type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, AgentTimeline, type AgentTimelineArtifactItem, type AgentTimelineCustomItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, type ArtifactScope, type ChatAuthor, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, TRANSCRIPT_TEXT, ThinkingIndicator, type ThinkingIndicatorProps, UserMessage, type UserMessageProps, isViewerMessage, modelProvider, snapHarnessToModel };
package/dist/chat.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-przZ1xCc.js";
1
+ import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-_aHUfqtH.js";
2
2
  export { AgentProfilePicker, AgentTimeline, ArtifactAgentDock, ChatContainer, ChatMessage, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, MessageAuthor, MessageList, ReasoningLevelPicker, TRANSCRIPT_TEXT, ThinkingIndicator, UserMessage, isViewerMessage, modelProvider, snapHarnessToModel };
@@ -155,10 +155,21 @@ function useSidebar() {
155
155
  * the whole nav would re-stagger on a collapse that moved nothing off screen.
156
156
  * One element type, both states.
157
157
  */
158
- function RailTooltip({ label, children, disabled, className }) {
158
+ function RailTooltip({ label, description, children, disabled, className }) {
159
159
  const ref = React$1.useRef(null);
160
+ const tooltipRef = React$1.useRef(null);
160
161
  const timer = React$1.useRef(null);
161
162
  const [coords, setCoords] = React$1.useState(null);
163
+ React$1.useLayoutEffect(() => {
164
+ if (!description || !coords || !tooltipRef.current) return;
165
+ const { offsetWidth: width, offsetHeight: height } = tooltipRef.current;
166
+ const left = Math.max(8, Math.min(coords.left, window.innerWidth - width - 8));
167
+ const top = Math.max(height / 2 + 8, Math.min(coords.top, window.innerHeight - height / 2 - 8));
168
+ if (left !== coords.left || top !== coords.top) setCoords({
169
+ left,
170
+ top
171
+ });
172
+ }, [coords, description]);
162
173
  React$1.useEffect(() => () => {
163
174
  if (timer.current) clearTimeout(timer.current);
164
175
  }, []);
@@ -202,11 +213,18 @@ function RailTooltip({ label, children, disabled, className }) {
202
213
  transform: "translateY(-50%)"
203
214
  },
204
215
  className: "pointer-events-none z-[70]",
205
- children: /* @__PURE__ */ jsx("span", {
216
+ children: /* @__PURE__ */ jsxs("span", {
217
+ ref: tooltipRef,
206
218
  role: "tooltip",
207
219
  "aria-hidden": "true",
208
- className: cn$1("agent-pop-in block whitespace-nowrap px-2 py-1 text-xs font-medium text-popover-foreground", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
209
- children: label
220
+ className: cn$1("agent-pop-in block px-2 py-1 text-xs font-medium text-popover-foreground", description ? "w-max max-w-[min(16rem,calc(100vw-1rem))]" : "whitespace-nowrap", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
221
+ children: [/* @__PURE__ */ jsx("span", {
222
+ className: description ? "block break-words" : "block whitespace-nowrap",
223
+ children: label
224
+ }), description ? /* @__PURE__ */ jsx("span", {
225
+ className: "mt-0.5 block font-normal leading-snug text-muted-foreground",
226
+ children: description
227
+ }) : null]
210
228
  })
211
229
  }), document.body)]
212
230
  });
@@ -430,12 +448,14 @@ function RailSeparator({ className }) {
430
448
  return /* @__PURE__ */ jsx("div", { className: cn$1("my-2 h-px w-10 bg-[var(--md3-outline-variant)]", className) });
431
449
  }
432
450
  const defaultBadgeLabel = (count) => `${count} new`;
433
- function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBadgeLabel, onClick, className, showLabel, asChild, children, variant = "normal", style }) {
451
+ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBadgeLabel, onClick, className, showLabel, description, asChild, children, variant = "normal", style }) {
434
452
  const classes = cn$1("relative flex shrink-0 items-center justify-center rounded-md transition-colors", MOTION_CONTROL, showLabel ? "w-full justify-start px-2.5 h-9 gap-2.5" : "w-9 h-9 justify-center", focusRing, variant === "primary" || isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground", className);
435
453
  const hasBadge = badge !== void 0 && badge > 0;
436
454
  const badgeDot = hasBadge && !showLabel && badge > 9;
437
455
  const badgeDescription = hasBadge ? badgeLabel(badge) : void 0;
438
456
  const tooltipLabel = hasBadge ? `${label} · ${badgeDescription}` : label;
457
+ const accessibleDescription = [badgeDescription, description].filter(Boolean).join(". ") || void 0;
458
+ const tooltipDisabled = showLabel && !description;
439
459
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("span", {
440
460
  className: "relative flex shrink-0 items-center justify-center",
441
461
  children: [/* @__PURE__ */ jsx(Icon, { className: "h-[17px] w-[17px] shrink-0" }), badgeDot ? /* @__PURE__ */ jsx("span", {
@@ -457,7 +477,7 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
457
477
  const merged = React$1.cloneElement(child, {
458
478
  className: cn$1(classes, child.props.className),
459
479
  "aria-label": child.props["aria-label"] ?? label,
460
- "aria-description": child.props["aria-description"] ?? badgeDescription,
480
+ "aria-description": child.props["aria-description"] ?? accessibleDescription,
461
481
  "aria-current": child.props["aria-current"] ?? (isActive ? "page" : void 0),
462
482
  style: {
463
483
  ...child.props.style,
@@ -466,20 +486,22 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
466
486
  }, content);
467
487
  return /* @__PURE__ */ jsx(RailTooltip, {
468
488
  label: tooltipLabel,
469
- disabled: showLabel,
489
+ description,
490
+ disabled: tooltipDisabled,
470
491
  className: showLabel ? "w-full" : void 0,
471
492
  children: merged
472
493
  });
473
494
  }
474
495
  return /* @__PURE__ */ jsx(RailTooltip, {
475
496
  label: tooltipLabel,
476
- disabled: showLabel,
497
+ description,
498
+ disabled: tooltipDisabled,
477
499
  className: showLabel ? "w-full" : void 0,
478
500
  children: /* @__PURE__ */ jsx("button", {
479
501
  type: "button",
480
502
  onClick,
481
503
  "aria-label": label,
482
- "aria-description": badgeDescription,
504
+ "aria-description": accessibleDescription,
483
505
  className: classes,
484
506
  style,
485
507
  children: content
@@ -493,7 +515,7 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
493
515
  * item inside it. Use for a single "door" (e.g. Studio) that fronts several
494
516
  * related destinations without permanently spending rail height on them.
495
517
  */
496
- function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, className, style }) {
518
+ function RailFlyout({ icon: Icon, label, description, isActive, showLabel, title, children, className, style }) {
497
519
  const [open, setOpen] = React$1.useState(false);
498
520
  const ref = React$1.useRef(null);
499
521
  React$1.useEffect(() => {
@@ -518,11 +540,13 @@ function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, c
518
540
  style,
519
541
  children: [/* @__PURE__ */ jsx(RailTooltip, {
520
542
  label,
521
- disabled: showLabel || open,
543
+ description,
544
+ disabled: open || showLabel && !description,
522
545
  className: showLabel ? "w-full" : void 0,
523
546
  children: /* @__PURE__ */ jsxs("button", {
524
547
  type: "button",
525
548
  "aria-label": label,
549
+ "aria-description": description,
526
550
  "aria-haspopup": "menu",
527
551
  "aria-expanded": open,
528
552
  onClick: () => setOpen((v) => !v),
@@ -542,10 +566,17 @@ function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, c
542
566
  if (e.target.closest("a,button")) setOpen(false);
543
567
  },
544
568
  className: cn$1("absolute left-full top-0 z-50 ml-2 min-w-[12rem] p-1.5", "agent-pop-in", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
545
- children: [/* @__PURE__ */ jsx("p", {
546
- className: "px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
547
- children: title ?? label
548
- }), children]
569
+ children: [
570
+ /* @__PURE__ */ jsx("p", {
571
+ className: "px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
572
+ children: title ?? label
573
+ }),
574
+ description && /* @__PURE__ */ jsx("p", {
575
+ className: "px-2 pb-2 text-xs text-muted-foreground",
576
+ children: description
577
+ }),
578
+ children
579
+ ]
549
580
  })]
550
581
  });
551
582
  }
@@ -609,7 +640,7 @@ function SubItemsSkeleton() {
609
640
  * Sub-items can be fixed (`subItems`) or lazy (`loadSubItems`, with a loading
610
641
  * skeleton). Used for e.g. a "History" entry fronting recent sessions.
611
642
  */
612
- function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel = "Nothing here yet", defaultOpen, onNavigate, LinkComponent, className, style }) {
643
+ function RailExpandable({ icon: Icon, label, description, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel = "Nothing here yet", defaultOpen, onNavigate, LinkComponent, className, style }) {
613
644
  const Link = LinkComponent ?? DefaultLink$2;
614
645
  const [open, setOpen] = React$1.useState(defaultOpen ?? false);
615
646
  const { items, loading, ensureLoaded } = useExpandableItems(subItems, loadSubItems);
@@ -738,12 +769,14 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
738
769
  to: href,
739
770
  onClick: onNavigate,
740
771
  "aria-label": label,
772
+ "aria-description": description,
741
773
  "aria-current": rowCurrent,
742
774
  className: triggerClasses,
743
775
  children: /* @__PURE__ */ jsx(Icon, { className: "h-[17px] w-[17px] shrink-0" })
744
776
  }) : /* @__PURE__ */ jsx("button", {
745
777
  type: "button",
746
778
  "aria-label": label,
779
+ "aria-description": description,
747
780
  "aria-haspopup": "menu",
748
781
  "aria-expanded": open,
749
782
  className: triggerClasses,
@@ -763,13 +796,20 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
763
796
  if (e.target.closest("a")) setOpen(false);
764
797
  },
765
798
  className: cn$1("agent-pop-in z-[70] flex w-60 flex-col overflow-hidden p-1.5", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
766
- children: [/* @__PURE__ */ jsx("p", {
767
- className: "shrink-0 px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
768
- children: label
769
- }), /* @__PURE__ */ jsx("div", {
770
- className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
771
- children: list
772
- })]
799
+ children: [
800
+ /* @__PURE__ */ jsx("p", {
801
+ className: "shrink-0 px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
802
+ children: label
803
+ }),
804
+ description && /* @__PURE__ */ jsx("p", {
805
+ className: "shrink-0 px-2 pb-2 text-xs text-muted-foreground",
806
+ children: description
807
+ }),
808
+ /* @__PURE__ */ jsx("div", {
809
+ className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
810
+ children: list
811
+ })
812
+ ]
773
813
  }), document.body)]
774
814
  });
775
815
  }
@@ -786,41 +826,50 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
786
826
  return /* @__PURE__ */ jsxs("div", {
787
827
  className: cn$1("w-full", className),
788
828
  style,
789
- children: [/* @__PURE__ */ jsxs("div", {
790
- className: cn$1("group/exp relative flex h-9 w-full items-center rounded-md transition-colors", MOTION_CONTROL, isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground"),
791
- children: [/* @__PURE__ */ jsxs("button", {
792
- type: "button",
793
- onClick: toggle,
794
- "aria-expanded": open,
795
- "aria-controls": discloseId,
796
- "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
797
- className: `flex h-9 w-12 shrink-0 items-center gap-1 rounded-md pl-2 pr-1 ${focusRing}`,
798
- children: [/* @__PURE__ */ jsx(Icon, {
799
- className: "h-[17px] w-[17px] shrink-0",
800
- "aria-hidden": true
801
- }), /* @__PURE__ */ jsx(ChevronRightIcon, {
802
- className: cn$1("h-3.5 w-3.5 shrink-0 transition-transform", MOTION_CONTROL, open && "rotate-90"),
803
- "aria-hidden": true
829
+ children: [/* @__PURE__ */ jsx(RailTooltip, {
830
+ label,
831
+ description,
832
+ disabled: !description,
833
+ className: "w-full",
834
+ children: /* @__PURE__ */ jsxs("div", {
835
+ className: cn$1("group/exp relative flex h-9 w-full items-center rounded-md transition-colors", MOTION_CONTROL, isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground"),
836
+ children: [/* @__PURE__ */ jsxs("button", {
837
+ type: "button",
838
+ onClick: toggle,
839
+ "aria-expanded": open,
840
+ "aria-controls": discloseId,
841
+ "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
842
+ "aria-description": description,
843
+ className: `flex h-9 w-12 shrink-0 items-center gap-1 rounded-md pl-2 pr-1 ${focusRing}`,
844
+ children: [/* @__PURE__ */ jsx(Icon, {
845
+ className: "h-[17px] w-[17px] shrink-0",
846
+ "aria-hidden": true
847
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, {
848
+ className: cn$1("h-3.5 w-3.5 shrink-0 transition-transform", MOTION_CONTROL, open && "rotate-90"),
849
+ "aria-hidden": true
850
+ })]
851
+ }), href ? /* @__PURE__ */ jsx(Link, {
852
+ href,
853
+ to: href,
854
+ onClick: onNavigate,
855
+ "aria-current": rowCurrent,
856
+ "aria-description": description,
857
+ className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-sm font-medium",
858
+ children: /* @__PURE__ */ jsx("span", {
859
+ className: "truncate",
860
+ children: label
861
+ })
862
+ }) : /* @__PURE__ */ jsx("button", {
863
+ type: "button",
864
+ onClick: toggle,
865
+ "aria-description": description,
866
+ className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-left text-sm font-medium",
867
+ children: /* @__PURE__ */ jsx("span", {
868
+ className: "truncate",
869
+ children: label
870
+ })
804
871
  })]
805
- }), href ? /* @__PURE__ */ jsx(Link, {
806
- href,
807
- to: href,
808
- onClick: onNavigate,
809
- "aria-current": rowCurrent,
810
- className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-sm font-medium",
811
- children: /* @__PURE__ */ jsx("span", {
812
- className: "truncate",
813
- children: label
814
- })
815
- }) : /* @__PURE__ */ jsx("button", {
816
- type: "button",
817
- onClick: toggle,
818
- className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-left text-sm font-medium",
819
- children: /* @__PURE__ */ jsx("span", {
820
- className: "truncate",
821
- children: label
822
- })
823
- })]
872
+ })
824
873
  }), /* @__PURE__ */ jsx("div", {
825
874
  ref: discloseRef,
826
875
  id: discloseId,
@@ -2877,6 +2926,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2877
2926
  if (item.expandable) return /* @__PURE__ */ jsx(RailExpandable, {
2878
2927
  icon: item.icon,
2879
2928
  label: item.label,
2929
+ description: item.description,
2880
2930
  href: item.href,
2881
2931
  isActive: activeId === item.id,
2882
2932
  showLabel: showLabels,
@@ -2894,6 +2944,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2894
2944
  return /* @__PURE__ */ jsx(RailFlyout, {
2895
2945
  icon: item.icon,
2896
2946
  label: item.label,
2947
+ description: item.description,
2897
2948
  title: item.label,
2898
2949
  showLabel: showLabels,
2899
2950
  isActive: activeId === item.id || item.flyoutItems.some((f) => activeSet.has(f.id)),
@@ -2921,6 +2972,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2921
2972
  label: item.label,
2922
2973
  badge: item.badge,
2923
2974
  badgeLabel: item.badgeLabel,
2975
+ description: item.description,
2924
2976
  isActive: panelOpen,
2925
2977
  onClick: () => {
2926
2978
  togglePanel();
@@ -2933,6 +2985,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2933
2985
  label: item.label,
2934
2986
  badge: item.badge,
2935
2987
  badgeLabel: item.badgeLabel,
2988
+ description: item.description,
2936
2989
  isActive: activeId === item.id,
2937
2990
  showLabel: showLabels,
2938
2991
  variant: item.variant,
@@ -1,4 +1,4 @@
1
- import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-DQzli0pf.js";
1
+ import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-AVDzT8Jw.js";
2
2
  import { a as canonicalModelId, i as ProviderMark, n as ModelBrandStack, o as modelBrandFor, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B57CV8Lg.js";
3
3
  import { a as PricingPageProps, c as BillingBalance, d as BillingSubscription, f as BillingUsage, i as PricingPage, l as BillingDashboard, n as UsageChartProps, o as PricingTier, r as UsageDataPoint, s as formatPrice, t as UsageChart, u as BillingDashboardProps } from "./usage-chart-BjM8ShvX.js";
4
4
  export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type AppearanceController, type Backend, BackendSelector, type BackendSelectorProps, type BillingBalance, BillingDashboard, type BillingDashboardProps, type BillingSubscription, type BillingUsage, DashboardLayout, type DashboardLayoutProps, DashboardPageHeader, type DashboardPageHeaderProps, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type ExposedPort, type GitCommitData, GitPanel, type GitPanelProps, type GitStatusData, HARNESS_BRAND, HARNESS_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, type HarnessType, INSUFFICIENT_BALANCE_CODE, type InsufficientBalance, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type ModelBrandIdentity, ModelBrandStack, type ModelInfo, type NavItem, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, PortsList, type PortsListProps, PricingPage, type PricingPageProps, type PricingTier, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, PromoBanner, type PromoBannerProps, ProviderMark, RailButton, type RailButtonProps, RailExpandable, type RailExpandableProps, type RailExpandableSubItem, RailFlyout, type RailFlyoutProps, RailHeader, type RailHeaderProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailTooltip, type RailTooltipProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SANDBOX_STATUS, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, SandboxPageShell, type SandboxPageShellProps, type SandboxStatus, SandboxStatusPill, type SandboxStatusPillProps, SandboxTable, type SandboxTableProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarLayout, type SidebarLayoutFlyoutItem, type SidebarLayoutNavItem, type SidebarLayoutProps, SidebarPanel, SidebarPanelContent, type SidebarPanelContentProps, SidebarPanelHeader, type SidebarPanelHeaderProps, type SidebarPanelProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarRail, SidebarRailFooter, type SidebarRailFooterProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, TemplateCard, type TemplateCardData, type TemplateCardProps, type ThemeMode, UsageChart, type UsageChartProps, type UsageDataPoint, UsageSummary, type UsageSummaryData, type UsageSummaryProps, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, sandboxStatus, useSidebar };
package/dist/dashboard.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-A-7sV4Na.js";
1
+ import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-Ba7DlJHW.js";
2
2
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BSr9on8C.js";
3
3
  import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
4
4
  export { ActivityFeed, BackendSelector, BillingDashboard, DashboardLayout, DashboardPageHeader, GitPanel, HARNESS_BRAND, HARNESS_OPTIONS, HarnessLogo, HarnessPicker, INSUFFICIENT_BALANCE_CODE, MetricAreaChart, ModelBrandStack, NewSandboxCard, OutOfCreditsModal, PortsList, PricingPage, ProcessList, ProfileAvatar, PromoBanner, ProviderMark, RailButton, RailExpandable, RailFlyout, RailHeader, RailModeButton, RailSeparator, RailTooltip, ResourceMeter, ResourceSnapshot, SANDBOX_STATUS, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxPageShell, SandboxStatusPill, SandboxTable, Sidebar, SidebarContent, SidebarLayout, SidebarPanel, SidebarPanelContent, SidebarPanelHeader, SidebarProvider, SidebarRail, SidebarRailFooter, SidebarRailNav, SnapshotList, SystemLogsViewer, TemplateCard, UsageChart, UsageSummary, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, sandboxStatus, useSidebar };
package/dist/globals.css CHANGED
@@ -1548,6 +1548,9 @@
1548
1548
  .max-w-\[calc\(100vw-24px\)\] {
1549
1549
  max-width: calc(100vw - 24px);
1550
1550
  }
1551
+ .max-w-\[min\(16rem\,calc\(100vw-1rem\)\)\] {
1552
+ max-width: min(16rem, calc(100vw - 1rem));
1553
+ }
1551
1554
  .max-w-\[min\(640px\,calc\(100vw-2rem\)\)\] {
1552
1555
  max-width: min(640px, calc(100vw - 2rem));
1553
1556
  }
@@ -6102,6 +6105,11 @@
6102
6105
  .tangle-prose .\[\.tangle-prose_\&\]\:no-underline\! {
6103
6106
  text-decoration-line: none !important;
6104
6107
  }
6108
+ @media (hover:hover) {
6109
+ .\[\@media\(hover\:hover\)\]\:opacity-0 {
6110
+ opacity: 0%;
6111
+ }
6112
+ }
6105
6113
  @media (pointer:coarse) {
6106
6114
  .\[\@media\(pointer\:coarse\)\]\:min-h-10 {
6107
6115
  min-height: calc(var(--spacing) * 10);
@@ -106,6 +106,13 @@ interface RailButtonProps {
106
106
  className?: string;
107
107
  /** Show label text next to icon (for mobile drawer) */
108
108
  showLabel?: boolean;
109
+ /**
110
+ * One line saying what the destination is for, e.g. "Every past agent run".
111
+ * Shown in the hover tooltip under the label (the labeled rail shows the
112
+ * tooltip only when a description exists) and announced as the link's
113
+ * accessible description, so an unfamiliar nav item explains itself.
114
+ */
115
+ description?: string;
109
116
  /**
110
117
  * Render the rail-button styling onto a single child element (e.g. a router
111
118
  * `<Link>`) instead of an inner `<button>`. The child receives the button
@@ -128,12 +135,14 @@ interface RailButtonProps {
128
135
  */
129
136
  style?: React$1.CSSProperties;
130
137
  }
131
- declare function RailButton({ icon: Icon, label, isActive, badge, badgeLabel, onClick, className, showLabel, asChild, children, variant, style }: RailButtonProps): React$1.JSX.Element;
138
+ declare function RailButton({ icon: Icon, label, isActive, badge, badgeLabel, onClick, className, showLabel, description, asChild, children, variant, style }: RailButtonProps): React$1.JSX.Element;
132
139
  interface RailFlyoutProps {
133
140
  icon: React$1.ComponentType<{
134
141
  className?: string;
135
142
  }>;
136
143
  label: string;
144
+ /** Explains this destination in accessible text and its tooltip or open flyout. */
145
+ description?: string;
137
146
  /** Highlight the trigger (e.g. when a child route is active). */
138
147
  isActive?: boolean;
139
148
  /** Show the label text beside the icon (labeled rail) vs. icon-only. */
@@ -153,7 +162,7 @@ interface RailFlyoutProps {
153
162
  * item inside it. Use for a single "door" (e.g. Studio) that fronts several
154
163
  * related destinations without permanently spending rail height on them.
155
164
  */
156
- declare function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, className, style }: RailFlyoutProps): React$1.JSX.Element;
165
+ declare function RailFlyout({ icon: Icon, label, description, isActive, showLabel, title, children, className, style }: RailFlyoutProps): React$1.JSX.Element;
157
166
  /** A single entry in a sub-item's hover actions menu (kebab). */
158
167
  interface RailSubItemAction {
159
168
  id: string;
@@ -191,6 +200,8 @@ interface RailExpandableProps {
191
200
  className?: string;
192
201
  }>;
193
202
  label: string;
203
+ /** Explains this destination in accessible text and its tooltip or open flyout. */
204
+ description?: string;
194
205
  /** Destination for the row itself. Clicking the label navigates here. */
195
206
  href?: string;
196
207
  /** Highlight the row (e.g. its own route or a child route is active). */
@@ -222,7 +233,7 @@ interface RailExpandableProps {
222
233
  * Sub-items can be fixed (`subItems`) or lazy (`loadSubItems`, with a loading
223
234
  * skeleton). Used for e.g. a "History" entry fronting recent sessions.
224
235
  */
225
- declare function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel, defaultOpen, onNavigate, LinkComponent, className, style }: RailExpandableProps): React$1.JSX.Element;
236
+ declare function RailExpandable({ icon: Icon, label, description, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel, defaultOpen, onNavigate, LinkComponent, className, style }: RailExpandableProps): React$1.JSX.Element;
226
237
  interface RailModeButtonProps {
227
238
  mode: string;
228
239
  icon: React$1.ComponentType<{
@@ -294,6 +305,8 @@ interface McpServer {
294
305
  interface RailTooltipProps {
295
306
  /** Tooltip text shown to the right of the trigger. */
296
307
  label: string;
308
+ /** A second, quieter line under the label that may wrap, e.g. what a nav item is for. */
309
+ description?: string;
297
310
  /** The trigger element (icon button / link). */
298
311
  children: React$1.ReactNode;
299
312
  /** Disable the tooltip (e.g. when the rail is expanded and the label is inline). */
@@ -317,7 +330,7 @@ interface RailTooltipProps {
317
330
  * the whole nav would re-stagger on a collapse that moved nothing off screen.
318
331
  * One element type, both states.
319
332
  */
320
- declare function RailTooltip({ label, children, disabled, className }: RailTooltipProps): React$1.JSX.Element;
333
+ declare function RailTooltip({ label, description, children, disabled, className }: RailTooltipProps): React$1.JSX.Element;
321
334
  //#endregion
322
335
  //#region src/dashboard/sidebar-context.d.ts
323
336
  /** Width constants (px) — Tangle Quiet density (ChatGPT-minimal) */
@@ -906,6 +919,8 @@ interface SidebarLayoutNavItem {
906
919
  icon: React$1.ComponentType<{
907
920
  className?: string;
908
921
  }>;
922
+ /** @see {@link RailButtonProps.description} — one line saying what this destination is for. */
923
+ description?: string;
909
924
  /** Destination for link items. Omit when `togglesPanel` or `flyoutItems` is set. */
910
925
  href?: string;
911
926
  /** Render this item as the panel toggle instead of a link. */
@@ -1,4 +1,4 @@
1
- import { g as ExposedPort } from "./index-DQzli0pf.js";
1
+ import { g as ExposedPort } from "./index-AVDzT8Jw.js";
2
2
  import { D as RichFileTreeGitStatus, E as RichFileTreeGitEntry } from "./index-BoHOpP2_.js";
3
3
  import { a as PreviewReadiness, i as PreviewAccess } from "./embedded-app-view-B_vMTtJn.js";
4
4
  import * as React$1 from "react";
@@ -105,6 +105,15 @@ interface AgentProfilePickerProps {
105
105
  /** Same commit/rejection contract as onCreate. */
106
106
  onUpdate?: (id: string, draft: AgentProfileDraft) => void | Promise<void>;
107
107
  onDelete?: (id: string) => void | Promise<void>;
108
+ /**
109
+ * Open the host's full profile editor for this profile instead of the inline
110
+ * name-and-persona form. When set, every row (built-in modes included) gets
111
+ * an edit action that closes the menu and calls this; `onUpdate` is then
112
+ * unused by the menu.
113
+ */
114
+ onEdit?: (id: string) => void;
115
+ /** Open the host's editor for a new profile instead of the inline form. */
116
+ onNew?: () => void;
108
117
  disabled?: boolean;
109
118
  /** Keep the pinned profile visible while preventing profile selection. */
110
119
  locked?: boolean;
@@ -129,7 +138,7 @@ interface AgentProfilePickerProps {
129
138
  * because the inline form needs its own focus and typing without the menu
130
139
  * stealing keystrokes.
131
140
  */
132
- declare function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side }: AgentProfilePickerProps): React$1.JSX.Element;
141
+ declare function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, onEdit, onNew, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side }: AgentProfilePickerProps): React$1.JSX.Element;
133
142
  //#endregion
134
143
  //#region src/chat/artifact-agent-dock.d.ts
135
144
  type ArtifactKind = string;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as LoginLayout, c as UserMenu, d as TangleLoginButtonProps, i as GitHubLoginButtonProps, l as UserMenuProps, n as AuthHeaderProps, o as LoginLayoutProps, r as GitHubLoginButton, s as SessionUser, t as AuthHeader, u as TangleLoginButton } from "./index-DvmZLMT1.js";
2
- import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-D-U-1U0i.js";
2
+ import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-QBCEflyf.js";
3
3
  import { a as SharedMessagingRouteViewState, i as AgentTargetSummary, n as AgentMessagingConnection, r as AgentMessagingConnectionProps, t as AgentEnrollmentViewState } from "./index-ClRHbsoX.js";
4
- import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-DQzli0pf.js";
4
+ import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-AVDzT8Jw.js";
5
5
  import { a as canonicalModelId, i as ProviderMark, n as ModelBrandStack, o as modelBrandFor, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B57CV8Lg.js";
6
6
  import { a as PricingPageProps, c as BillingBalance, d as BillingSubscription, f as BillingUsage, i as PricingPage, l as BillingDashboard, n as UsageChartProps, o as PricingTier, r as UsageDataPoint, s as formatPrice, t as UsageChart, u as BillingDashboardProps } from "./usage-chart-BjM8ShvX.js";
7
7
  import { A as configurePdfViewer, C as PdfViewerConfig, D as RichFileTreeGitStatus, E as RichFileTreeGitEntry, F as getFormatLabel, I as getSyntaxLanguage, L as parseCsv, M as fileExtension, N as filterFileTree, O as RichFileTreeProps, P as getCodeLanguage, R as resolveFilePreviewKind, S as PdfViewer, T as RichFileTree, _ as FileTabsProps, a as FileCardProps, b as FileTreeVisibilityOptions, c as FileList, d as FileNode, f as FilePreview, g as FileTabs, h as FileTabData, i as FileCard, j as detectFileFormat, k as RichFileTreeThemeVars, l as FileListItem, m as FilePreviewProps, n as FileArtifactPane, o as FileDetails, p as FilePreviewKind, r as FileArtifactPaneProps, s as FileFormat, t as CSV_PREVIEW_ROW_LIMIT, u as FileListProps, v as FileTree, w as PdfViewerProps, x as FileUploader, y as FileTreeProps } from "./index-BoHOpP2_.js";
@@ -11,7 +11,7 @@ import { d as useSessionStream, l as UseSessionStreamOptions, n as UseSidecarAut
11
11
  import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SandboxMetrics, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SidecarMetricsPayload, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSandboxMetricsOptions, UseSandboxMetricsResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useLiveTime, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessions, useToolCallStream } from "./hooks.js";
12
12
  import { $ as ContextMenuRadioGroup, $n as Table, $r as TangleKnot, $t as MetricProps, A as Card, An as Sheet, Ar as Toolbar, At as DropdownMenuRadioItem, B as ChipProps, Bn as SidebarDropZone, Br as buttonVariants, Bt as FilterFieldProps, C as BadgeProps, Cn as SelectLabel, Cr as TimeSelect, Ct as DropdownMenuCheckboxItem, D as Calendar, Dn as SelectTrigger, Dr as ToastProvider, Dt as DropdownMenuLabel, E as CATEGORY_TONES, En as SelectSeparator, Er as ToastContainer, Et as DropdownMenuItem, F as CardTitle, Fn as SheetHeader, Fr as TooltipTrigger, Ft as DropdownMenuSubTrigger, G as CollapsibleTrigger, Gn as Slider, Gr as toneFor, Gt as IconTile, H as CodeBlockProps, Hn as Skeleton, Hr as initialsOf, Ht as HeadingVariant, I as CardTitleProps, In as SheetOverlay, Ir as UploadFile, It as DropdownMenuTrigger, J as ContextMenuContent, Jn as StatusPill, Jr as HeadingProps, Jt as InlineCodeProps, K as ContextMenu, Kn as StatCard, Kr as useTheme, Kt as IconTileProps, L as CategoryTone, Ln as SheetPortal, Lr as UploadProgress, Lt as EmptyState, M as CardDescription, Mn as SheetContent, Mr as Tooltip, Mt as DropdownMenuShortcut, N as CardFooter, Nn as SheetDescription, Nr as TooltipContent, Nt as DropdownMenuSub, O as CalendarDate, On as SelectValue, Or as Tone, Ot as DropdownMenuPortal, P as CardHeader, Pn as SheetFooter, Pr as TooltipProvider, Pt as DropdownMenuSubContent, Q as ContextMenuPortal, Qn as TONE_CLASSES, Qr as LogoProps, Qt as Metric, R as Checkbox, Rn as SheetTitle, Rr as UploadProgressProps, Rt as EmptyStateProps, S as Badge, Sn as SelectItem, Sr as ThemeToggle, St as DropdownMenu, T as ButtonProps, Tn as SelectScrollUpButton, Tr as Toast, Tt as DropdownMenuGroup, U as Collapsible, Un as SkeletonCard, Ur as localToday, Ut as HelpText, V as CodeBlock, Vn as SidebarDropZoneProps, Vr as formatCalendarDate, Vt as Heading, W as CollapsibleContent, Wn as SkeletonTable, Wr as parseCalendarDate, Wt as HelpTextProps, X as ContextMenuItem, Xn as StatusTone, Xr as SectionTitleProps, Xt as InputProps, Y as ContextMenuGroup, Yn as StatusPillProps, Yr as SectionTitle, Yt as Input, Z as ContextMenuLabel, Zn as Switch, Zr as Logo, Zt as Label, _n as SegmentedControlOption, _t as DialogPortal, a as AlertDialogCancel, an as PageShellProps, ar as TableHeader, at as ContextMenuSubTrigger, b as AvatarFallback, bn as SelectContent, br as Textarea, bt as DropZone, c as AlertDialogFooter, cn as Popover, cr as Tabs, ct as DatePicker, d as AlertDialogPortal, dn as PopoverContent, dr as TabsTrigger, dt as DialogClose, en as MetricStrip, er as TableBody, et as ContextMenuRadioItem, f as AlertDialogTitle, fn as PopoverTrigger, fr as Tag, ft as DialogContent, g as AlertTone, gn as SegmentedControl, gt as DialogOverlay, h as AlertTitle, hn as RadioGroupItem, hr as TerminalDisplay, ht as DialogHeader, i as AlertDialogAction, in as PageShell, ir as TableHead, it as ContextMenuSubContent, j as CardContent, jn as SheetClose, jr as ToolbarProps, jt as DropdownMenuSeparator, k as CalendarProps, kn as Separator, kr as ToneClasses, kt as DropdownMenuRadioGroup, l as AlertDialogHeader, ln as PopoverAnchor, lr as TabsContent, lt as DatePickerProps, m as AlertProps, mn as RadioGroup, mt as DialogFooter, n as AlertDescription, nn as PageHeader, nr as TableCell, nt as ContextMenuShortcut, o as AlertDialogContent, on as Pagination, or as TableProps, ot as ContextMenuTrigger, p as AlertDialogTrigger, pn as Progress, pr as TagProps, pt as DialogDescription, q as ContextMenuCheckboxItem, qn as StatCardProps, qr as useToast, qt as InlineCode, r as AlertDialog, rn as PageHeaderProps, rr as TableFooter, rt as ContextMenuSub, s as AlertDialogDescription, sn as PaginationProps, sr as TableRow, st as CopyButton, t as Alert, tn as MetricStripProps, tr as TableCaption, tt as ContextMenuSeparator, u as AlertDialogOverlay, un as PopoverClose, ur as TabsList, ut as Dialog, vn as SegmentedControlProps, vr as TextShimmer, vt as DialogTitle, w as Button, wn as SelectScrollDownButton, wr as TimeSelectProps, wt as DropdownMenuContent, x as AvatarImage, xn as SelectGroup, xr as TextareaProps, xt as DropZoneProps, y as Avatar, yn as Select, yr as TextShimmerProps, yt as DialogTrigger, z as Chip, zn as SheetTrigger, zr as badgeVariants, zt as FilterField } from "./index-BqRlajlc.js";
13
13
  import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-C61CTrhx.js";
14
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-CzSwq_cU.js";
14
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-ByzdHyte.js";
15
15
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
16
16
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISchemaIssue, OpenUISchemaValidation, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
17
17
  import { ApprovalCard, ApprovalCardProps, ApprovalDiffFile, ApprovalDiffSummary, ApprovalPlanStep, ExpandedToolDetail, ExpandedToolDetailProps, FeedSegment, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps, RunPhase, RunPhaseList, RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot, TaskList, TaskListItem, TaskListProps, TaskStatus, ToolCallData, ToolCallFeed, ToolCallFeedProps, ToolCallStatus, ToolCallType, parseToolEvent, showsTaskPriority, taskProgress, taskStatus } from "./run.js";
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-D3IKFGHo.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-Ai6g85oA.js";
2
2
  import { $ as DialogClose, $n as formatCalendarDate, $t as SelectSeparator, A as Chip, An as Tabs, At as Input, B as ContextMenuLabel, Bn as Textarea, Bt as PopoverContent, C as Card, Cn as TableBody, Ct as DropdownMenuTrigger, D as CardHeader, Dn as TableHead, Dt as HelpText, E as CardFooter, En as TableFooter, Et as Heading, F as ContextMenu, Ft as PageShell, G as ContextMenuShortcut, Gn as Toolbar, Gt as SegmentedControl, H as ContextMenuRadioGroup, Hn as TimeSelect, Ht as Progress, I as ContextMenuCheckboxItem, In as TerminalDisplay, It as Pagination, J as ContextMenuSubTrigger, Jn as TooltipProvider, Jt as SelectGroup, K as ContextMenuSub, Kn as Tooltip, Kt as Select, L as ContextMenuContent, Lt as Popover, M as Collapsible, Mn as TabsList, Mt as Metric, N as CollapsibleContent, Nn as TabsTrigger, Nt as MetricStrip, O as CardTitle, On as TableHeader, Ot as IconTile, P as CollapsibleTrigger, Pn as Tag, Pt as PageHeader, Q as Dialog, Qn as buttonVariants, Qt as SelectScrollUpButton, R as ContextMenuGroup, Rt as PopoverAnchor, S as Calendar, Sn as Table, St as DropdownMenuSubTrigger, T as CardDescription, Tn as TableCell, Tt as FilterField, U as ContextMenuRadioItem, Un as ToastContainer, Ut as RadioGroup, V as ContextMenuPortal, Vn as ThemeToggle, Vt as PopoverTrigger, W as ContextMenuSeparator, Wn as ToastProvider, Wt as RadioGroupItem, X as CopyButton, Xn as UploadProgress, Xt as SelectLabel, Y as ContextMenuTrigger, Yn as TooltipTrigger, Yt as SelectItem, Z as DatePicker, Zn as badgeVariants, Zt as SelectScrollDownButton, _ as AvatarFallback, _n as Slider, _t as DropdownMenuRadioItem, a as AlertDialogCancel, an as SheetContent, ar as useToast, at as DialogPortal, b as Button, bn as Switch, bt as DropdownMenuSub, c as AlertDialogFooter, cn as SheetHeader, cr as TangleKnot, ct as DropZone, d as AlertDialogPortal, dn as SheetTitle, dt as DropdownMenuContent, en as SelectTrigger, er as initialsOf, et as DialogContent, f as AlertDialogTitle, fn as SheetTrigger, ft as DropdownMenuGroup, g as Avatar, gn as SkeletonTable, gt as DropdownMenuRadioGroup, hn as SkeletonCard, ht as DropdownMenuPortal, i as AlertDialogAction, in as SheetClose, ir as useTheme, it as DialogOverlay, j as CodeBlock, jn as TabsContent, jt as Label, k as Checkbox, kn as TableRow, kt as InlineCode, l as AlertDialogHeader, ln as SheetOverlay, lt as DropdownMenu, m as AlertTitle, mn as Skeleton, mt as DropdownMenuLabel, n as AlertDescription, nn as Separator, nr as parseCalendarDate, nt as DialogFooter, o as AlertDialogContent, on as SheetDescription, or as SectionTitle, ot as DialogTitle, p as AlertDialogTrigger, pn as SidebarDropZone, pt as DropdownMenuItem, q as ContextMenuSubContent, qn as TooltipContent, qt as SelectContent, r as AlertDialog, rn as Sheet, rr as toneFor, rt as DialogHeader, s as AlertDialogDescription, sn as SheetFooter, sr as Logo, st as DialogTrigger, t as Alert, tn as SelectValue, tr as localToday, tt as DialogDescription, u as AlertDialogOverlay, un as SheetPortal, ut as DropdownMenuCheckboxItem, v as AvatarImage, vn as StatCard, vt as DropdownMenuSeparator, w as CardContent, wn as TableCaption, wt as EmptyState, x as CATEGORY_TONES, xn as TONE_CLASSES, xt as DropdownMenuSubContent, y as Badge, yn as StatusPill, yt as DropdownMenuShortcut, z as ContextMenuItem, zn as TextShimmer, zt as PopoverClose } from "./primitives-DSpl1Thf.js";
3
3
  import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CTh3oV_e.js";
4
4
  import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-ElQALzwV.js";
5
5
  import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./tree-data-DtoCNNBJ.js";
6
- import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-A-7sV4Na.js";
6
+ import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-Ba7DlJHW.js";
7
7
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BSr9on8C.js";
8
8
  import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
9
9
  import { t as usePtySession } from "./use-pty-session-Bf4hBLXJ.js";
10
10
  import { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, FileCard, FileList, FilePreview, FileTabs, FileTree, PdfViewer, RichFileTree, configurePdfViewer, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind } from "./files.js";
11
11
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CYb9hevq.js";
12
12
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
13
- import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-przZ1xCc.js";
13
+ import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-_aHUfqtH.js";
14
14
  import { ApprovalCard, ApprovalDiffSummary, ExpandedToolDetail, InlineThinkingItem, InlineToolItem, LiveDuration, RunGroup, RunPhaseList, RunRowShell, RunRowStatusDot, TaskList, ToolCallFeed, parseToolEvent, showsTaskPriority, taskProgress, taskStatus } from "./run.js";
15
15
  import "./vault-tree.js";
16
16
  import { a as TangleLoginButton, i as UserMenu, n as GitHubLoginButton, r as LoginLayout, t as AuthHeader } from "./auth-CWe17Hly.js";
package/dist/styles.css CHANGED
@@ -1548,6 +1548,9 @@
1548
1548
  .max-w-\[calc\(100vw-24px\)\] {
1549
1549
  max-width: calc(100vw - 24px);
1550
1550
  }
1551
+ .max-w-\[min\(16rem\,calc\(100vw-1rem\)\)\] {
1552
+ max-width: min(16rem, calc(100vw - 1rem));
1553
+ }
1551
1554
  .max-w-\[min\(640px\,calc\(100vw-2rem\)\)\] {
1552
1555
  max-width: min(640px, calc(100vw - 2rem));
1553
1556
  }
@@ -6102,6 +6105,11 @@
6102
6105
  .tangle-prose .\[\.tangle-prose_\&\]\:no-underline\! {
6103
6106
  text-decoration-line: none !important;
6104
6107
  }
6108
+ @media (hover:hover) {
6109
+ .\[\@media\(hover\:hover\)\]\:opacity-0 {
6110
+ opacity: 0%;
6111
+ }
6112
+ }
6105
6113
  @media (pointer:coarse) {
6106
6114
  .\[\@media\(pointer\:coarse\)\]\:min-h-10 {
6107
6115
  min-height: calc(var(--spacing) * 10);
@@ -1,5 +1,5 @@
1
1
  import { t as cn$1 } from "./utils-DzWbktWG.js";
2
- import { a as PortsList } from "./dashboard-A-7sV4Na.js";
2
+ import { a as PortsList } from "./dashboard-Ba7DlJHW.js";
3
3
  import { n as TerminalView } from "./terminal-DmSUfGha.js";
4
4
  import { RichFileTree } from "./files.js";
5
5
  import { n as PreviewView } from "./embedded-app-view-CYb9hevq.js";
@@ -1,3 +1,3 @@
1
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-CzSwq_cU.js";
1
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-ByzdHyte.js";
2
2
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
3
3
  export { type ArtifactView, BRAND_PRISM_THEME, type ChangedFile, ChangesPane, type ChangesPaneProps, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, FileBreadcrumb, type FileBreadcrumbProps, GitStatusBadge, PanelHeader, type PanelHeaderProps, type PillTabItem, PillTabs, type PillTabsProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/dist/workbench.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-D3IKFGHo.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-Ai6g85oA.js";
2
2
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CYb9hevq.js";
3
3
  export { BRAND_PRISM_THEME, ChangesPane, CodeSurface, CodeView, DiffStatsBadge, DiffView, EmbeddedAppView, FileBreadcrumb, GitStatusBadge, PanelHeader, PillTabs, PreviewView, SandboxArtifactPane, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.134.5",
3
+ "version": "0.134.7",
4
4
  "license": "MIT",
5
5
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
6
6
  "repository": {
@@ -132,7 +132,7 @@
132
132
  "peerDependencies": {
133
133
  "@hocuspocus/provider": ">=2.15.0 <5.0.0",
134
134
  "@nanostores/react": ">=0.8.4 <2.0.0",
135
- "@tangle-network/agent-interface": "^1.0.0 || ^2.0.0 || ^3.0.0",
135
+ "@tangle-network/agent-interface": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^5.2.0",
136
136
  "@tangle-network/brand": "^1.23.0",
137
137
  "@tangle-network/ui": "^11.33.0",
138
138
  "@tanstack/react-query": "^5.0.0",
@@ -222,7 +222,7 @@
222
222
  "@storybook/react": "^10.6.0",
223
223
  "@storybook/react-vite": "^10.6.0",
224
224
  "@tailwindcss/postcss": "^4.3.3",
225
- "@tangle-network/agent-interface": "3.0.0",
225
+ "@tangle-network/agent-interface": "5.2.0",
226
226
  "@tangle-network/brand": "1.23.0",
227
227
  "@tangle-network/ui": "11.33.0",
228
228
  "@tanstack/react-query": "^5.104.0",