@tangle-network/sandbox-ui 7.0.5 → 7.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import { t as cn$1 } from "./utils-BER_bdgE.js";
2
+ import { Sheet, SheetContent, SheetTitle } from "@tangle-network/ui/primitives";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
4
  import * as React$1 from "react";
4
5
  import { createPortal } from "react-dom";
@@ -6,7 +7,8 @@ import { Bot, Brain, Check, ChevronDown, Lock, Pencil, Plus, Send, Sparkles, Squ
6
7
  import { focusField, focusRing } from "@tangle-network/ui/utils";
7
8
  import { AgentTimeline as AgentTimeline$1, AgentTimelineColumn as AgentTimelineColumn$1, AgentTimelineStep, ChatContainer as ChatContainer$1, ChatMessage, ChatMessage as ChatMessage$1, MessageAuthor, MessageList, SpeakerHeader, TRANSCRIPT_TEXT, ThinkingIndicator, UserMessage, agentTimelineStepKind, foldSummary, isViewerMessage, partitionBySpeaker } from "@tangle-network/ui/chat";
8
9
  import { modelProvider, reasoningLadder, snapHarnessToModel } from "@tangle-network/agent-interface";
9
- import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
10
+ import * as DropdownMenu$1 from "@radix-ui/react-dropdown-menu";
11
+ import { usePhone } from "@tangle-network/ui/hooks";
10
12
  // src/chat/reasoning-level-picker.tsx
11
13
  /** Ordered ascending intensity (excludes "auto"), straight from the canonical ladder. */
12
14
  const REASONING_LADDER = reasoningLadder;
@@ -102,7 +104,7 @@ const HARNESS_REASONING_OPTIONS = { "kimi-code": [
102
104
  function ReasoningLevelPicker({ value, onChange, disabled, className, triggerClassName, options = DEFAULT_REASONING_LEVEL_OPTIONS, available, side, avoidCollisions }) {
103
105
  const shown = available ? options.filter((o) => o.value === "auto" || available.includes(o.value)) : options;
104
106
  const label = shown.find((option) => option.value === value)?.label ?? "Auto";
105
- return /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [/* @__PURE__ */ jsx(DropdownMenu.Trigger, {
107
+ return /* @__PURE__ */ jsxs(DropdownMenu$1.Root, { children: [/* @__PURE__ */ jsx(DropdownMenu$1.Trigger, {
106
108
  asChild: true,
107
109
  children: /* @__PURE__ */ jsxs("button", {
108
110
  type: "button",
@@ -115,14 +117,14 @@ function ReasoningLevelPicker({ value, onChange, disabled, className, triggerCla
115
117
  /* @__PURE__ */ jsx(ChevronDown, { className: "ml-auto h-3.5 w-3.5 shrink-0 text-muted-foreground" })
116
118
  ]
117
119
  })
118
- }), /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu.Content, {
120
+ }), /* @__PURE__ */ jsx(DropdownMenu$1.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu$1.Content, {
119
121
  side,
120
122
  align: "start",
121
123
  avoidCollisions,
122
124
  collisionPadding: 24,
123
125
  sideOffset: 6,
124
126
  className: cn$1("z-50 w-64 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)] bg-surface-container-highest p-1", "shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"),
125
- children: shown.map((option) => /* @__PURE__ */ jsxs(DropdownMenu.Item, {
127
+ children: shown.map((option) => /* @__PURE__ */ jsxs(DropdownMenu$1.Item, {
126
128
  onSelect: () => onChange(option.value),
127
129
  className: cn$1("flex cursor-pointer items-start gap-2.5 rounded-md px-2.5 py-2 outline-none", "transition-colors hover:bg-accent/40 focus:bg-accent/40", option.value === value && "bg-[var(--accent-surface-soft)] text-[var(--accent-text)]"),
128
130
  children: [/* @__PURE__ */ jsx("span", {
@@ -608,9 +610,7 @@ function defaultScopeLabel(scope) {
608
610
  function normalizeRole(role) {
609
611
  return role === "assistant" || role === "system" ? role : "user";
610
612
  }
611
- /** Stable client-side message id. Uses `crypto.randomUUID()` when available,
612
- * else a UUIDv4 from `getRandomValues`. Avoids `Date.now()`, which collides
613
- * when a user+assistant pair are created in the same millisecond. */
613
+ /** Random IDs avoid Date.now collisions; getRandomValues backs up randomUUID. */
614
614
  function createDockMessageId() {
615
615
  const c = typeof globalThis !== "undefined" ? globalThis.crypto : void 0;
616
616
  if (c && typeof c.randomUUID === "function") return c.randomUUID();
@@ -623,24 +623,9 @@ function createDockMessageId() {
623
623
  }
624
624
  throw new Error("crypto.getRandomValues is required for message ids");
625
625
  }
626
- /**
627
- * ArtifactAgentDock — slide-in right-rail chat scoped to a single artifact.
628
- *
629
- * Renders a persistent, per-artifact conversation surface that streams via a
630
- * consumer-supplied transport. Mount alongside any artifact view (file editor,
631
- * sequence editor, asset preview) to give every artifact its own dedicated
632
- * agent conversation without forking the chat UI per app.
633
- *
634
- * Behavior:
635
- * - On open, calls `transport.ensureThread(scope)` to get the canonical thread
636
- * id and `transport.loadMessages(threadId)` to populate prior turns.
637
- * - On submit, calls `transport.sendStream(...)` and concatenates delta events
638
- * into a single streaming assistant message; renders inline.
639
- * - Composer: Enter sends, Shift+Enter newline, Cancel during stream supported.
640
- * - Accessibility: scope `aria-label` on the panel, `aria-pressed` is the
641
- * consumer's job on whatever button toggles `open`.
642
- */
626
+ /** A persistent per-artifact conversation using the consumer's transport. */
643
627
  function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt, onError, className }) {
628
+ const phone = usePhone();
644
629
  const [threadId, setThreadId] = React$1.useState(null);
645
630
  const [messages, setMessages] = React$1.useState([]);
646
631
  const [composer, setComposer] = React$1.useState(defaultPrompt ?? "");
@@ -649,6 +634,7 @@ function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt
649
634
  const [loading, setLoading] = React$1.useState(false);
650
635
  const abortRef = React$1.useRef(null);
651
636
  const scrollRef = React$1.useRef(null);
637
+ const returnFocus = React$1.useRef(null);
652
638
  const scopeTokenRef = React$1.useRef(0);
653
639
  const reportError = React$1.useCallback((message) => {
654
640
  if (onError) onError(message);
@@ -761,8 +747,9 @@ function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt
761
747
  }, [threadId, transport]);
762
748
  if (!open) return null;
763
749
  const heading = defaultScopeLabel(scope);
764
- return /* @__PURE__ */ jsxs("aside", {
765
- className: cn$1("flex h-full w-[420px] min-w-[360px] max-w-[480px] flex-col border-l border-[var(--md3-outline-variant)] bg-surface-container shadow-[var(--shadow-dropdown)]", className),
750
+ const Title = phone ? SheetTitle : "div";
751
+ const panel = /* @__PURE__ */ jsxs("aside", {
752
+ className: cn$1("flex h-full w-[420px] min-w-[360px] max-w-[480px] flex-col border-l border-[var(--md3-outline-variant)] bg-surface-container shadow-[var(--shadow-dropdown)]", phone && "w-full min-w-0 max-w-none", className),
766
753
  "aria-label": `Agent chat about ${heading}`,
767
754
  children: [
768
755
  /* @__PURE__ */ jsxs("header", {
@@ -774,7 +761,7 @@ function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt
774
761
  children: [/* @__PURE__ */ jsx("div", {
775
762
  className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground",
776
763
  children: "Discussing"
777
- }), /* @__PURE__ */ jsx("div", {
764
+ }), /* @__PURE__ */ jsx(Title, {
778
765
  className: "truncate text-sm font-semibold text-foreground",
779
766
  children: heading
780
767
  })]
@@ -843,7 +830,7 @@ function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt
843
830
  placeholder: `Ask about ${heading}…`,
844
831
  rows: 2,
845
832
  disabled: !threadId,
846
- className: `min-h-[44px] flex-1 resize-none rounded-[20px] border bg-surface-dim px-3.5 py-2 text-sm text-foreground placeholder:text-muted-foreground disabled:opacity-50 ${focusField}`
833
+ className: `min-h-[44px] min-w-0 flex-1 resize-none rounded-[20px] border bg-surface-dim px-3.5 py-2 text-sm text-foreground placeholder:text-muted-foreground disabled:opacity-50 ${focusField}`
847
834
  }), sending ? /* @__PURE__ */ jsx("button", {
848
835
  type: "button",
849
836
  onClick: cancel,
@@ -861,5 +848,22 @@ function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt
861
848
  })
862
849
  ]
863
850
  });
851
+ return phone ? /* @__PURE__ */ jsx(Sheet, {
852
+ open,
853
+ onOpenChange,
854
+ children: /* @__PURE__ */ jsx(SheetContent, {
855
+ hideCloseButton: true,
856
+ "aria-describedby": void 0,
857
+ className: "inset-0 h-dvh w-full gap-0 p-0 sm:max-w-none",
858
+ onOpenAutoFocus: () => {
859
+ if (document.activeElement instanceof HTMLElement) returnFocus.current = document.activeElement;
860
+ },
861
+ onCloseAutoFocus: (event) => {
862
+ event.preventDefault();
863
+ if (returnFocus.current?.isConnected) returnFocus.current.focus();
864
+ },
865
+ children: panel
866
+ })
867
+ }) : panel;
864
868
  }
865
869
  export { ReasoningLevelPicker as S, modelProvider as _, ChatMessage$1 as a, DEFAULT_REASONING_LEVEL_OPTIONS as b, SpeakerHeader as c, UserMessage as d, agentTimelineStepKind as f, ArtifactAgentDock as g, partitionBySpeaker as h, ChatContainer$1 as i, TRANSCRIPT_TEXT as l, isViewerMessage as m, AgentTimelineColumn$1 as n, MessageAuthor as o, foldSummary as p, AgentTimelineStep as r, MessageList as s, AgentTimeline$1 as t, ThinkingIndicator as u, snapHarnessToModel as v, HARNESS_REASONING_OPTIONS as x, AgentProfilePicker as y };
package/dist/chat.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as AgentProfilePicker, A as SpeakerSection, B as partitionBySpeaker, C as MessageList, D as SpeakerHeader, E as Speaker, F as UserMessage, G as ArtifactDockStreamEvent, H as ArtifactAgentDockProps, I as UserMessageProps, J as modelProvider, K as ArtifactKind, L as agentTimelineStepKind, M as TRANSCRIPT_TEXT, N as ThinkingIndicator, O as SpeakerHeaderProps, P as ThinkingIndicatorProps, Q as AgentProfileOption, R as foldSummary, S as MessageAuthorProps, T as MessageRole, U as ArtifactAgentDockTransport, V as ArtifactAgentDock, W as ArtifactDockMessage, X as AgentProfileCapability, Y as snapHarnessToModel, Z as AgentProfileDraft, _ as ChatContainer, a as AgentTimelineFoldItem, at as ReasoningLevelPicker, b as ChatMessageProps, c as AgentTimelineProps, d as AgentTimelineStepKind, et as AgentProfilePickerProps, f as AgentTimelineStepProps, g as ChatAuthor, h as AgentTimelineToolItem, i as AgentTimelineCustomItem, it as ReasoningLevelOption, j as SpeakerState, k as SpeakerPart, l as AgentTimelineStatusItem, m as AgentTimelineToolGroupItem, n as AgentTimelineArtifactItem, nt as HARNESS_REASONING_OPTIONS, o as AgentTimelineItem, ot as ReasoningLevelPickerProps, p as AgentTimelineTone, q as ArtifactScope, r as AgentTimelineColumn, rt as ReasoningLevel, s as AgentTimelineMessageItem, t as AgentTimeline, tt as DEFAULT_REASONING_LEVEL_OPTIONS, u as AgentTimelineStep, v as ChatContainerProps, w as MessageListProps, x as MessageAuthor, y as ChatMessage, z as isViewerMessage } from "./index-1Q4Jtlic.js";
1
+ import { $ as AgentProfilePicker, A as SpeakerSection, B as partitionBySpeaker, C as MessageList, D as SpeakerHeader, E as Speaker, F as UserMessage, G as ArtifactDockStreamEvent, H as ArtifactAgentDockProps, I as UserMessageProps, J as modelProvider, K as ArtifactKind, L as agentTimelineStepKind, M as TRANSCRIPT_TEXT, N as ThinkingIndicator, O as SpeakerHeaderProps, P as ThinkingIndicatorProps, Q as AgentProfileOption, R as foldSummary, S as MessageAuthorProps, T as MessageRole, U as ArtifactAgentDockTransport, V as ArtifactAgentDock, W as ArtifactDockMessage, X as AgentProfileCapability, Y as snapHarnessToModel, Z as AgentProfileDraft, _ as ChatContainer, a as AgentTimelineFoldItem, at as ReasoningLevelPicker, b as ChatMessageProps, c as AgentTimelineProps, d as AgentTimelineStepKind, et as AgentProfilePickerProps, f as AgentTimelineStepProps, g as ChatAuthor, h as AgentTimelineToolItem, i as AgentTimelineCustomItem, it as ReasoningLevelOption, j as SpeakerState, k as SpeakerPart, l as AgentTimelineStatusItem, m as AgentTimelineToolGroupItem, n as AgentTimelineArtifactItem, nt as HARNESS_REASONING_OPTIONS, o as AgentTimelineItem, ot as ReasoningLevelPickerProps, p as AgentTimelineTone, q as ArtifactScope, r as AgentTimelineColumn, rt as ReasoningLevel, s as AgentTimelineMessageItem, t as AgentTimeline, tt as DEFAULT_REASONING_LEVEL_OPTIONS, u as AgentTimelineStep, v as ChatContainerProps, w as MessageListProps, x as MessageAuthor, y as ChatMessage, z as isViewerMessage } from "./index-PxmhpV0y.js";
2
2
  export { type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, AgentTimeline, type AgentTimelineArtifactItem, AgentTimelineColumn, type AgentTimelineCustomItem, type AgentTimelineFoldItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, AgentTimelineStep, type AgentTimelineStepKind, type AgentTimelineStepProps, 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, type Speaker, SpeakerHeader, type SpeakerHeaderProps, type SpeakerPart, type SpeakerSection, type SpeakerState, TRANSCRIPT_TEXT, ThinkingIndicator, type ThinkingIndicatorProps, UserMessage, type UserMessageProps, agentTimelineStepKind, foldSummary, isViewerMessage, modelProvider, partitionBySpeaker, snapHarnessToModel };
package/dist/chat.js CHANGED
@@ -1 +1 @@
1
- export { y as AgentProfilePicker, t as AgentTimeline, n as AgentTimelineColumn, r as AgentTimelineStep, g as ArtifactAgentDock, i as ChatContainer, a as ChatMessage, b as DEFAULT_REASONING_LEVEL_OPTIONS, x as HARNESS_REASONING_OPTIONS, o as MessageAuthor, s as MessageList, S as ReasoningLevelPicker, c as SpeakerHeader, l as TRANSCRIPT_TEXT, u as ThinkingIndicator, d as UserMessage, f as agentTimelineStepKind, p as foldSummary, m as isViewerMessage, _ as modelProvider, h as partitionBySpeaker, v as snapHarnessToModel } from "./chat-B_5Lwevm.js";
1
+ export { y as AgentProfilePicker, t as AgentTimeline, n as AgentTimelineColumn, r as AgentTimelineStep, g as ArtifactAgentDock, i as ChatContainer, a as ChatMessage, b as DEFAULT_REASONING_LEVEL_OPTIONS, x as HARNESS_REASONING_OPTIONS, o as MessageAuthor, s as MessageList, S as ReasoningLevelPicker, c as SpeakerHeader, l as TRANSCRIPT_TEXT, u as ThinkingIndicator, d as UserMessage, f as agentTimelineStepKind, p as foldSummary, m as isViewerMessage, _ as modelProvider, h as partitionBySpeaker, v as snapHarnessToModel } from "./chat-DcaqQX2X.js";
@@ -1,4 +1,4 @@
1
- import { D as Button$1, zr as Logo } from "./primitives-znfPK9NP.js";
1
+ import { Br as Logo, D as Button$1 } from "./primitives-l-Qv14bS.js";
2
2
  import { t as cn$1 } from "./utils-BER_bdgE.js";
3
3
  import { r as ShellHeader } from "./shell-header-CwqDzC4I.js";
4
4
  import { n as MOTION_SURFACE, t as MOTION_CONTROL } from "./motion-2Ine0j_s.js";
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-C7QJJw7-.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-C1pNlewR.js";
2
2
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BQlarCIo.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-CuOpvZys.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
@@ -26,8 +26,6 @@
26
26
  --color-violet-400: oklch(70.2% 0.183 293.541);
27
27
  --color-violet-500: oklch(60.6% 0.25 292.717);
28
28
  --color-zinc-400: oklch(70.5% 0.015 286.067);
29
- --color-neutral-400: oklch(70.8% 0 none);
30
- --color-neutral-500: oklch(55.6% 0 none);
31
29
  --color-black: #000;
32
30
  --color-white: #fff;
33
31
  --spacing: 0.25rem;
@@ -81,10 +79,8 @@
81
79
  --animate-spin: spin 1s linear infinite;
82
80
  --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
83
81
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
84
- --animate-bounce: bounce 1s infinite;
85
82
  --blur-sm: 8px;
86
83
  --blur-md: 12px;
87
- --blur-xl: 24px;
88
84
  --default-transition-duration: 150ms;
89
85
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
90
86
  --default-font-family: var(--font-sans);
@@ -859,6 +855,10 @@
859
855
  width: var(--control-height-sm,2rem);
860
856
  height: var(--control-height-sm,2rem);
861
857
  }
858
+ .size-auto {
859
+ width: auto;
860
+ height: auto;
861
+ }
862
862
  .size-full {
863
863
  width: 100%;
864
864
  height: 100%;
@@ -1052,9 +1052,6 @@
1052
1052
  .h-\[650px\] {
1053
1053
  height: 650px;
1054
1054
  }
1055
- .h-\[680px\] {
1056
- height: 680px;
1057
- }
1058
1055
  .h-\[720px\] {
1059
1056
  height: 720px;
1060
1057
  }
@@ -1877,12 +1874,12 @@
1877
1874
  .transform {
1878
1875
  transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
1879
1876
  }
1877
+ .transform-none {
1878
+ transform: none;
1879
+ }
1880
1880
  .animate-\[tangle-breathe_var\(--motion-ambient\)_infinite\] {
1881
1881
  animation: tangle-breathe var(--motion-ambient) infinite;
1882
1882
  }
1883
- .animate-bounce {
1884
- animation: var(--animate-bounce);
1885
- }
1886
1883
  .animate-ping {
1887
1884
  animation: var(--animate-ping);
1888
1885
  }
@@ -2072,12 +2069,6 @@
2072
2069
  .gap-10 {
2073
2070
  gap: calc(var(--spacing) * 10);
2074
2071
  }
2075
- .gap-\[3px\] {
2076
- gap: 3px;
2077
- }
2078
- .gap-\[5px\] {
2079
- gap: 5px;
2080
- }
2081
2072
  .gap-px {
2082
2073
  gap: 1px;
2083
2074
  }
@@ -2283,6 +2274,9 @@
2283
2274
  .rounded-\[var\(--radius-md\)\] {
2284
2275
  border-radius: var(--radius-md);
2285
2276
  }
2277
+ .rounded-\[var\(--radius-panel\)\] {
2278
+ border-radius: var(--radius-panel);
2279
+ }
2286
2280
  .rounded-\[var\(--radius-sm\)\] {
2287
2281
  border-radius: var(--radius-sm);
2288
2282
  }
@@ -2617,9 +2611,6 @@
2617
2611
  border-color: color-mix(in oklab, var(--color-green-500) 30%, transparent);
2618
2612
  }
2619
2613
  }
2620
- .border-muted-foreground {
2621
- border-color: hsl(var(--muted-foreground));
2622
- }
2623
2614
  .border-primary {
2624
2615
  border-color: hsl(var(--primary));
2625
2616
  }
@@ -2845,6 +2836,9 @@
2845
2836
  .bg-\[var\(--surface-info-bg\)\] {
2846
2837
  background-color: var(--surface-info-bg);
2847
2838
  }
2839
+ .bg-\[var\(--surface-info-text\)\] {
2840
+ background-color: var(--surface-info-text);
2841
+ }
2848
2842
  .bg-\[var\(--surface-neutral-bg\)\] {
2849
2843
  background-color: var(--surface-neutral-bg);
2850
2844
  }
@@ -2974,9 +2968,6 @@
2974
2968
  background-color: color-mix(in oklab, var(--color-black) 80%, transparent);
2975
2969
  }
2976
2970
  }
2977
- .bg-blue-500 {
2978
- background-color: var(--color-blue-500);
2979
- }
2980
2971
  .bg-blue-500\/15 {
2981
2972
  background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 15%, transparent);
2982
2973
  @supports (color: color-mix(in lab, red, red)) {
@@ -3049,9 +3040,6 @@
3049
3040
  .bg-green-400 {
3050
3041
  background-color: var(--color-green-400);
3051
3042
  }
3052
- .bg-green-500 {
3053
- background-color: var(--color-green-500);
3054
- }
3055
3043
  .bg-green-600\/20 {
3056
3044
  background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 20%, transparent);
3057
3045
  @supports (color: color-mix(in lab, red, red)) {
@@ -3145,9 +3133,6 @@
3145
3133
  background-color: color-mix(in oklab, hsl(var(--primary)) 4%, transparent);
3146
3134
  }
3147
3135
  }
3148
- .bg-red-500 {
3149
- background-color: var(--color-red-500);
3150
- }
3151
3136
  .bg-red-500\/10 {
3152
3137
  background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent);
3153
3138
  @supports (color: color-mix(in lab, red, red)) {
@@ -3223,9 +3208,6 @@
3223
3208
  background-color: color-mix(in oklab, var(--color-white) 40%, transparent);
3224
3209
  }
3225
3210
  }
3226
- .bg-yellow-500 {
3227
- background-color: var(--color-yellow-500);
3228
- }
3229
3211
  .bg-yellow-600\/20 {
3230
3212
  background-color: color-mix(in srgb, oklch(68.1% 0.162 75.834) 20%, transparent);
3231
3213
  @supports (color: color-mix(in lab, red, red)) {
@@ -3810,14 +3792,6 @@
3810
3792
  --tw-font-weight: var(--font-weight-semibold);
3811
3793
  font-weight: var(--font-weight-semibold);
3812
3794
  }
3813
- .tracking-\[0\.1em\] {
3814
- --tw-tracking: 0.1em;
3815
- letter-spacing: 0.1em;
3816
- }
3817
- .tracking-\[0\.08em\] {
3818
- --tw-tracking: 0.08em;
3819
- letter-spacing: 0.08em;
3820
- }
3821
3795
  .tracking-\[0\.09em\] {
3822
3796
  --tw-tracking: 0.09em;
3823
3797
  letter-spacing: 0.09em;
@@ -3826,10 +3800,6 @@
3826
3800
  --tw-tracking: 0.12em;
3827
3801
  letter-spacing: 0.12em;
3828
3802
  }
3829
- .tracking-\[0\.14em\] {
3830
- --tw-tracking: 0.14em;
3831
- letter-spacing: 0.14em;
3832
- }
3833
3803
  .tracking-\[0\.16em\] {
3834
3804
  --tw-tracking: 0.16em;
3835
3805
  letter-spacing: 0.16em;
@@ -3842,10 +3812,6 @@
3842
3812
  --tw-tracking: var(--tracking-tight,-0.02em);
3843
3813
  letter-spacing: var(--tracking-tight,-0.02em);
3844
3814
  }
3845
- .tracking-\[var\(--tracking-wide\,0\.08em\)\] {
3846
- --tw-tracking: var(--tracking-wide,0.08em);
3847
- letter-spacing: var(--tracking-wide,0.08em);
3848
- }
3849
3815
  .tracking-normal {
3850
3816
  --tw-tracking: var(--tracking-normal);
3851
3817
  letter-spacing: var(--tracking-normal);
@@ -4160,9 +4126,6 @@
4160
4126
  color: color-mix(in oklab, hsl(var(--muted-foreground)) 90%, transparent);
4161
4127
  }
4162
4128
  }
4163
- .text-neutral-400 {
4164
- color: var(--color-neutral-400);
4165
- }
4166
4129
  .text-popover-foreground {
4167
4130
  color: hsl(var(--popover-foreground));
4168
4131
  }
@@ -4465,11 +4428,6 @@
4465
4428
  -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
4466
4429
  backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
4467
4430
  }
4468
- .backdrop-blur-xl {
4469
- --tw-backdrop-blur: blur(var(--blur-xl));
4470
- -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
4471
- backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
4472
- }
4473
4431
  .transition {
4474
4432
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
4475
4433
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4520,6 +4478,11 @@
4520
4478
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4521
4479
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4522
4480
  }
4481
+ .transition-\[transform\,opacity\] {
4482
+ transition-property: transform,opacity;
4483
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4484
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
4485
+ }
4523
4486
  .transition-\[transform\,width\] {
4524
4487
  transition-property: transform,width;
4525
4488
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4628,6 +4591,9 @@
4628
4591
  .group-focus-within\:opacity-100:is(:where(.group):focus-within *) {
4629
4592
  opacity: 100%;
4630
4593
  }
4594
+ .group-focus-within\/expandable\:opacity-100:is(:where(.group\/expandable):focus-within *) {
4595
+ opacity: 100%;
4596
+ }
4631
4597
  @media (hover: hover) {
4632
4598
  .group-hover\:block:is(:where(.group):hover *) {
4633
4599
  display: block;
@@ -4676,6 +4642,9 @@
4676
4642
  .group-hover\/brand\:opacity-100:is(:where(.group\/brand):hover *) {
4677
4643
  opacity: 100%;
4678
4644
  }
4645
+ .group-hover\/expandable\:opacity-100:is(:where(.group\/expandable):hover *) {
4646
+ opacity: 100%;
4647
+ }
4679
4648
  .group-hover\/sub\:opacity-100:is(:where(.group\/sub):hover *) {
4680
4649
  opacity: 100%;
4681
4650
  }
@@ -5987,6 +5956,9 @@
5987
5956
  .sm\:max-w-lg {
5988
5957
  max-width: var(--container-lg);
5989
5958
  }
5959
+ .sm\:max-w-none {
5960
+ max-width: none;
5961
+ }
5990
5962
  .sm\:max-w-sm {
5991
5963
  max-width: var(--container-sm);
5992
5964
  }
@@ -6290,9 +6262,6 @@
6290
6262
  }
6291
6263
  }
6292
6264
  @media (prefers-color-scheme: dark) {
6293
- .dark\:text-neutral-500 {
6294
- color: var(--color-neutral-500);
6295
- }
6296
6265
  .dark\:text-white {
6297
6266
  color: var(--color-white);
6298
6267
  }
@@ -6339,6 +6308,9 @@
6339
6308
  font-size: var(--text-base);
6340
6309
  line-height: var(--tw-leading, var(--text-base--line-height));
6341
6310
  }
6311
+ .pointer-coarse\:opacity-100 {
6312
+ opacity: 100%;
6313
+ }
6342
6314
  .pointer-coarse\:before\:absolute::before {
6343
6315
  content: var(--tw-content);
6344
6316
  position: absolute;
@@ -11729,16 +11701,6 @@
11729
11701
  opacity: 0.5;
11730
11702
  }
11731
11703
  }
11732
- @keyframes bounce {
11733
- 0%, 100% {
11734
- transform: translateY(-25%);
11735
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
11736
- }
11737
- 50% {
11738
- transform: none;
11739
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
11740
- }
11741
- }
11742
11704
  @layer properties {
11743
11705
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
11744
11706
  *, ::before, ::after, ::backdrop {
package/dist/hooks.d.ts CHANGED
@@ -2,7 +2,7 @@ import { n as UsePtySessionReturn, r as usePtySession, t as UsePtySessionOptions
2
2
  import { t as Session } from "./sidecar-CNP4zXop.js";
3
3
  import { a as SendMessageOptions, c as SessionStreamError, d as useSessionStream, i as SESSION_STREAM_RECONNECT_DELAY_MS, l as UseSessionStreamOptions, n as UseSidecarAuthOptions, o as SessionDegradation, r as useSidecarAuth, s as SessionInfo, t as SidecarAuth, u as UseSessionStreamResult } from "./use-sidecar-auth-CPevSSEj.js";
4
4
  import { t as useDocument } from "./use-document-DCXGpk0q.js";
5
- import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, EventStreamHandlers, EventStreamOpener, EventStreamSource, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream } from "@tangle-network/ui/hooks";
5
+ import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, EventStreamHandlers, EventStreamOpener, EventStreamSource, PHONE_MEDIA, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream } from "@tangle-network/ui/hooks";
6
6
  /**
7
7
  * Sandbox-level telemetry collected by the sidecar from cgroup v2
8
8
  * (Docker) or /proc (Firecracker guest). `cpuPercent` is computed
@@ -139,4 +139,4 @@ export declare function useRenameSession(apiUrl: string, token: string | null):
139
139
  sessionId: string;
140
140
  title: string;
141
141
  }, unknown>;
142
- export { type AgentStreamEvent, type AppendUserMessageOptions, type ApplySdkEventOptions, type AuthUser, type AutomationStreamEvent, type BeginAssistantMessageOptions, type BotStreamEvent, type CompleteAssistantMessageOptions, type ConnectionState, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, type RealtimeSessionOptions, RealtimeSessionRegistry, type RealtimeSessionRegistryProps, type RealtimeSessionState, type RealtimeSessionTarget, SESSION_STREAM_RECONNECT_DELAY_MS, type SSEEvent, type SdkSessionAttachment, type SdkSessionEvent, type SdkSessionSeed, SendMessageOptions, SessionDegradation, SessionInfo, SessionStreamError, SidecarAuth, type TaskStreamEvent, type TerminalStreamEvent, type UseAuthOptions, type UseAuthResult, UsePtySessionOptions, UsePtySessionReturn, type UseRunGroupsOptions, type UseSSEStreamOptions, type UseSSEStreamResult, type UseSdkSessionOptions, type UseSdkSessionReturn, UseSessionStreamOptions, UseSessionStreamResult, UseSidecarAuthOptions, type UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDocument, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePtySession, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionStream, useSidecarAuth, useToolCallStream };
142
+ export { type AgentStreamEvent, type AppendUserMessageOptions, type ApplySdkEventOptions, type AuthUser, type AutomationStreamEvent, type BeginAssistantMessageOptions, type BotStreamEvent, type CompleteAssistantMessageOptions, type ConnectionState, type EventStreamHandlers, type EventStreamOpener, type EventStreamSource, PHONE_MEDIA, type RealtimeSessionOptions, RealtimeSessionRegistry, type RealtimeSessionRegistryProps, type RealtimeSessionState, type RealtimeSessionTarget, SESSION_STREAM_RECONNECT_DELAY_MS, type SSEEvent, type SdkSessionAttachment, type SdkSessionEvent, type SdkSessionSeed, SendMessageOptions, SessionDegradation, SessionInfo, SessionStreamError, SidecarAuth, type TaskStreamEvent, type TerminalStreamEvent, type UseAuthOptions, type UseAuthResult, UsePtySessionOptions, UsePtySessionReturn, type UseRunGroupsOptions, type UseSSEStreamOptions, type UseSSEStreamResult, type UseSdkSessionOptions, type UseSdkSessionReturn, UseSessionStreamOptions, UseSessionStreamResult, UseSidecarAuthOptions, type UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDocument, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, usePtySession, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useSessionStream, useSidecarAuth, useToolCallStream };
package/dist/hooks.js CHANGED
@@ -2,7 +2,7 @@ import { t as usePtySession } from "./use-pty-session-BHVQlSs-.js";
2
2
  import { i as useSessionStream, n as SESSION_STREAM_RECONNECT_DELAY_MS, r as SessionStreamError, t as useSidecarAuth } from "./use-sidecar-auth-D9BrWCg1.js";
3
3
  import { useDocument } from "./hooks/use-document.js";
4
4
  import * as React$1 from "react";
5
- import { RealtimeSessionRegistry, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream } from "@tangle-network/ui/hooks";
5
+ import { PHONE_MEDIA, RealtimeSessionRegistry, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, useRealtimeSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSdkSession, useToolCallStream } from "@tangle-network/ui/hooks";
6
6
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
7
7
  // src/hooks/use-sandbox-metrics.ts
8
8
  const METRICS_REQUEST_TIMEOUT_MS = 15e3;
@@ -231,4 +231,4 @@ function useRenameSession(apiUrl, token) {
231
231
  }
232
232
  });
233
233
  }
234
- export { RealtimeSessionRegistry, SESSION_STREAM_RECONNECT_DELAY_MS, SessionStreamError, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDocument, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePtySession, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSandboxMetrics, useSdkSession, useSessionStream, useSessions, useSidecarAuth, useToolCallStream };
234
+ export { PHONE_MEDIA, RealtimeSessionRegistry, SESSION_STREAM_RECONNECT_DELAY_MS, SessionStreamError, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDocument, useDropdownMenu, useEventStream, useFollowTail, useLiveTime, usePhone, usePtySession, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useRunNow, useSSEStream, useSandboxMetrics, useSdkSession, useSessionStream, useSessions, useSidecarAuth, useToolCallStream };
@@ -0,0 +1,26 @@
1
+ import { Alert as Alert$1, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertProps, AlertTitle, AlertTone, ArtifactPane as ArtifactPane$1, ArtifactPaneProps, Avatar as Avatar$1, AvatarFallback as AvatarFallback$1, AvatarImage as AvatarImage$1, AvatarProps, Badge as Badge$1, BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button as Button$1, ButtonProps as ButtonProps$1, CATEGORY_TONES, Calendar, CalendarDate, CalendarProps, Card as Card$1, CardContent as CardContent$1, CardDescription as CardDescription$1, CardFooter, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardTitleProps, CategoryTone, ChartReferenceLine, Checkbox, Chip, ChipProps, CodeBlock, CodeBlockProps, Collapsible, CollapsibleContent, CollapsibleTrigger, ComplianceBadge, ComplianceBadgeProps, ComplianceProduct, ComplianceStatus, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, DatePicker as DatePicker$1, DatePickerProps, Dialog as Dialog$1, DialogClose as DialogClose$1, DialogContent as DialogContent$1, DialogDescription as DialogDescription$1, DialogFooter as DialogFooter$1, DialogHeader as DialogHeader$1, DialogOverlay, DialogPortal, DialogTitle as DialogTitle$1, DialogTrigger as DialogTrigger$1, DropZone, DropZoneProps, DropdownMenu as DropdownMenu$1, DropdownMenuCheckboxItem, DropdownMenuContent as DropdownMenuContent$1, DropdownMenuGroup, DropdownMenuItem as DropdownMenuItem$1, DropdownMenuLabel as DropdownMenuLabel$1, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator as DropdownMenuSeparator$1, DropdownMenuShortcut, DropdownMenuSub as DropdownMenuSub$1, DropdownMenuSubContent as DropdownMenuSubContent$1, DropdownMenuSubTrigger as DropdownMenuSubTrigger$1, DropdownMenuTrigger as DropdownMenuTrigger$1, EmptyState as EmptyState$1, EmptyStateProps, ExpandablePanel, ExpandablePanelProps, Field, FieldProps, FilterField as FilterField$1, FilterFieldProps, Heading, HeadingVariant, HeadingVariant as HeadingVariant$1, HelpText, HelpTextProps, HoverCard as HoverCard$1, HoverCardContent as HoverCardContent$1, HoverCardDescription, HoverCardHeader, HoverCardTitle, HoverCardTrigger as HoverCardTrigger$1, IconTile, IconTileProps, InlineCode, InlineCodeProps, Input as Input$1, InputProps, Label as Label$1, Metric, MetricChart, MetricChartProps, MetricProps, MetricStrip, MetricStripProps, PageHeader as PageHeader$1, PageHeaderProps, PageHeaderProps as PageHeaderProps$1, PageShell as PageShell$1, PageShellProps, Pagination, PaginationProps, PeriodDelta, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, Progress as Progress$1, RadioGroup, RadioGroupItem, SegmentedControl as SegmentedControl$1, SegmentedControlOption, SegmentedControlProps, Select as Select$1, SelectContent as SelectContent$1, SelectGroup, SelectItem as SelectItem$1, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger as SelectTrigger$1, SelectValue as SelectValue$1, Separator, SeriesExtent, SeriesPoint, SeriesPointInput, SeriesScale, SeriesSparkline, SeriesSparklineProps, SettingsList, SettingsListAction, SettingsListColumns, SettingsListItem, SettingsListItemProps, SettingsListMenuItem, SettingsListProps, SettingsNote, SettingsNoteProps, SettingsRow, SettingsRowLayout, SettingsRowProps, SettingsSection, SettingsSectionProps, Sheet as Sheet$1, SheetClose as SheetClose$1, SheetContent as SheetContent$1, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle as SheetTitle$1, SheetTrigger as SheetTrigger$1, SidebarDropZone, SidebarDropZoneProps, Skeleton as Skeleton$1, SkeletonCard as SkeletonCard$1, SkeletonTable, Slider, StatCard as StatCard$1, StatCardProps, StatusPill as StatusPill$1, StatusPillProps as StatusPillProps$1, StatusTone as StatusTone$1, Switch, TONE_CLASSES, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableProps, TableRow, Tabs as Tabs$1, TabsContent as TabsContent$1, TabsList as TabsList$1, TabsTrigger as TabsTrigger$1, Tag, TagProps, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, TextShimmerProps, Textarea as Textarea$1, TextareaProps, ThemeToggle, TimeSelect, TimeSelectProps, Toast, ToastContainer, ToastProvider, Tone, ToneClasses, Toolbar as Toolbar$1, ToolbarProps, Tooltip as Tooltip$1, TooltipContent as TooltipContent$1, TooltipProvider as TooltipProvider$1, TooltipTrigger as TooltipTrigger$1, UploadFile, UploadProgress, UploadProgressProps, Wizard, WizardProps, WizardStep, WizardStepProps, badgeVariants, buttonVariants, fieldMessageId, formatCalendarDate, initialsOf, localToday as localToday$1, normalizeSeries, parseCalendarDate, periodDelta, seriesAreaPath, seriesExtent, seriesLinePath, seriesMean, seriesScale, toneFor, useTheme, useToast } from "@tangle-network/ui/primitives";
2
+ import { TangleKnot as TangleKnot$1 } from "@tangle-network/brand";
3
+ import { ElementType, HTMLAttributes, ReactNode } from "react";
4
+ interface LogoProps {
5
+ variant?: "sandbox";
6
+ size?: "sm" | "md" | "lg" | "xl";
7
+ className?: string;
8
+ iconOnly?: boolean;
9
+ }
10
+ /** Keep the Sandbox wordmark API while Brand owns the mark and layout. */
11
+ declare function Logo$1({ variant, size, className, iconOnly }: LogoProps): import("react").JSX.Element;
12
+ declare namespace Logo$1 {
13
+ var displayName: string;
14
+ }
15
+ /** Preserve the existing public type's required visual role and children.
16
+ * The binding above remains UI's object, without a local render function.
17
+ */
18
+ interface HeadingProps extends Omit<HTMLAttributes<HTMLElement>, "role"> {
19
+ role: HeadingVariant;
20
+ as?: ElementType;
21
+ children: ReactNode;
22
+ }
23
+ type SectionTitleProps = Pick<PageHeaderProps, "title" | "description" | "action" | "className">;
24
+ /** Compatibility name for the canonical nested (h2) page header. */
25
+ declare function SectionTitle(props: SectionTitleProps): import("react").JSX.Element;
26
+ export { CollapsibleContent as $, SectionTitle as $i, SelectTrigger$1 as $n, TableRow as $r, ExpandablePanelProps as $t, BreadcrumbPage as A, UploadProgressProps as Ai, PageShellProps as An, SheetTitle$1 as Ar, DialogPortal as At, CardDescription$1 as B, localToday$1 as Bi, RadioGroup as Bn, StatusPill$1 as Br, DropdownMenuLabel$1 as Bt, Badge$1 as C, ToolbarProps as Ci, MetricChartProps as Cn, SheetClose$1 as Cr, Dialog$1 as Ct, BreadcrumbItem as D, TooltipTrigger$1 as Di, PageHeader$1 as Dn, SheetHeader as Dr, DialogFooter$1 as Dt, BreadcrumbEllipsis as E, TooltipProvider$1 as Ei, MetricStripProps as En, SheetFooter as Er, DialogDescription$1 as Et, Calendar as F, badgeVariants as Fi, PopoverAnchor as Fn, SkeletonCard$1 as Fr, DropdownMenu$1 as Ft, CategoryTone as G, seriesExtent as Gi, Select$1 as Gn, Table as Gr, DropdownMenuShortcut as Gt, CardHeader$1 as H, parseCalendarDate as Hi, SegmentedControl$1 as Hn, StatusTone$1 as Hr, DropdownMenuRadioGroup as Ht, CalendarDate as I, buttonVariants as Ii, PopoverClose as In, SkeletonTable as Ir, DropdownMenuCheckboxItem as It, Chip as J, seriesScale as Ji, SelectItem$1 as Jn, TableCell as Jr, DropdownMenuSubTrigger$1 as Jt, ChartReferenceLine as K, seriesLinePath as Ki, SelectContent$1 as Kn, TableBody as Kr, DropdownMenuSub$1 as Kt, CalendarProps as L, fieldMessageId as Li, PopoverContent as Ln, Slider as Lr, DropdownMenuContent$1 as Lt, Button$1 as M, WizardProps as Mi, PaginationProps as Mn, SidebarDropZone as Mr, DialogTrigger$1 as Mt, ButtonProps$1 as N, WizardStep as Ni, PeriodDelta as Nn, SidebarDropZoneProps as Nr, DropZone as Nt, BreadcrumbLink as O, UploadFile as Oi, PageHeaderProps$1 as On, SheetOverlay as Or, DialogHeader$1 as Ot, CATEGORY_TONES as P, WizardStepProps as Pi, Popover as Pn, Skeleton$1 as Pr, DropZoneProps as Pt, Collapsible as Q, HeadingProps as Qi, SelectSeparator as Qn, TableProps as Qr, ExpandablePanel as Qt, Card$1 as R, formatCalendarDate as Ri, PopoverTrigger as Rn, StatCard$1 as Rr, DropdownMenuGroup as Rt, AvatarProps as S, Toolbar$1 as Si, MetricChart as Sn, Sheet$1 as Sr, DatePickerProps as St, Breadcrumb as T, TooltipContent$1 as Ti, MetricStrip as Tn, SheetDescription as Tr, DialogContent$1 as Tt, CardTitle$1 as U, periodDelta as Ui, SegmentedControlOption as Un, Switch as Ur, DropdownMenuRadioItem as Ut, CardFooter as V, normalizeSeries as Vi, RadioGroupItem as Vn, StatusPillProps$1 as Vr, DropdownMenuPortal as Vt, CardTitleProps as W, seriesAreaPath as Wi, SegmentedControlProps as Wn, TONE_CLASSES as Wr, DropdownMenuSeparator$1 as Wt, CodeBlock as X, useTheme as Xi, SelectScrollDownButton as Xn, TableHead as Xr, EmptyState$1 as Xt, ChipProps as Y, toneFor as Yi, SelectLabel as Yn, TableFooter as Yr, DropdownMenuTrigger$1 as Yt, CodeBlockProps as Z, useToast as Zi, SelectScrollUpButton as Zn, TableHeader as Zr, EmptyStateProps as Zt, ArtifactPane$1 as _, Toast as _i, InlineCodeProps as _n, SettingsRow as _r, ContextMenuSubContent as _t, AlertDialogCancel as a, TagProps as ai, HeadingVariant$1 as an, SeriesScale as ar, ContextMenu as at, AvatarFallback$1 as b, Tone as bi, Label$1 as bn, SettingsSection as br, CopyButton as bt, AlertDialogFooter as c, TerminalInput as ci, HoverCard$1 as cn, SettingsList as cr, ContextMenuGroup as ct, AlertDialogPortal as d, TextShimmerProps as di, HoverCardHeader as dn, SettingsListItem as dr, ContextMenuPortal as dt, SectionTitleProps as ea, Tabs$1 as ei, Field as en, SelectValue$1 as er, CollapsibleTrigger as et, AlertDialogTitle as f, Textarea$1 as fi, HoverCardTitle as fn, SettingsListItemProps as fr, ContextMenuRadioGroup as ft, AlertTone as g, TimeSelectProps as gi, InlineCode as gn, SettingsNoteProps as gr, ContextMenuSub as gt, AlertTitle as h, TimeSelect as hi, IconTileProps as hn, SettingsNote as hr, ContextMenuShortcut as ht, AlertDialogAction as i, Tag as ii, Heading as in, SeriesPointInput as ir, ComplianceStatus as it, BreadcrumbSeparator as j, Wizard as ji, Pagination as jn, SheetTrigger$1 as jr, DialogTitle$1 as jt, BreadcrumbList as k, UploadProgress as ki, PageShell$1 as kn, SheetPortal as kr, DialogOverlay as kt, AlertDialogHeader as l, TerminalLine as li, HoverCardContent$1 as ln, SettingsListAction as lr, ContextMenuItem as lt, AlertProps as m, ThemeToggle as mi, IconTile as mn, SettingsListProps as mr, ContextMenuSeparator as mt, AlertDescription as n, LogoProps as na, TabsList$1 as ni, FilterField$1 as nn, SeriesExtent as nr, ComplianceBadgeProps as nt, AlertDialogContent as o, TerminalCursor as oi, HelpText as on, SeriesSparkline as or, ContextMenuCheckboxItem as ot, AlertDialogTrigger as p, TextareaProps as pi, HoverCardTrigger$1 as pn, SettingsListMenuItem as pr, ContextMenuRadioItem as pt, Checkbox as q, seriesMean as qi, SelectGroup as qn, TableCaption as qr, DropdownMenuSubContent$1 as qt, AlertDialog as r, TangleKnot$1 as ra, TabsTrigger$1 as ri, FilterFieldProps as rn, SeriesPoint as rr, ComplianceProduct as rt, AlertDialogDescription as s, TerminalDisplay as si, HelpTextProps as sn, SeriesSparklineProps as sr, ContextMenuContent as st, Alert$1 as t, Logo$1 as ta, TabsContent$1 as ti, FieldProps as tn, Separator as tr, ComplianceBadge as tt, AlertDialogOverlay as u, TextShimmer as ui, HoverCardDescription as un, SettingsListColumns as ur, ContextMenuLabel as ut, ArtifactPaneProps as v, ToastContainer as vi, Input$1 as vn, SettingsRowLayout as vr, ContextMenuSubTrigger as vt, BadgeProps as w, Tooltip$1 as wi, MetricProps as wn, SheetContent$1 as wr, DialogClose$1 as wt, AvatarImage$1 as x, ToneClasses as xi, Metric as xn, SettingsSectionProps as xr, DatePicker$1 as xt, Avatar$1 as y, ToastProvider as yi, InputProps as yn, SettingsRowProps as yr, ContextMenuTrigger as yt, CardContent$1 as z, initialsOf as zi, Progress$1 as zn, StatCardProps as zr, DropdownMenuItem$1 as zt };
@@ -192,22 +192,6 @@ interface ArtifactAgentDockProps {
192
192
  onError?: (message: string) => void;
193
193
  className?: string;
194
194
  }
195
- /**
196
- * ArtifactAgentDock — slide-in right-rail chat scoped to a single artifact.
197
- *
198
- * Renders a persistent, per-artifact conversation surface that streams via a
199
- * consumer-supplied transport. Mount alongside any artifact view (file editor,
200
- * sequence editor, asset preview) to give every artifact its own dedicated
201
- * agent conversation without forking the chat UI per app.
202
- *
203
- * Behavior:
204
- * - On open, calls `transport.ensureThread(scope)` to get the canonical thread
205
- * id and `transport.loadMessages(threadId)` to populate prior turns.
206
- * - On submit, calls `transport.sendStream(...)` and concatenates delta events
207
- * into a single streaming assistant message; renders inline.
208
- * - Composer: Enter sends, Shift+Enter newline, Cancel during stream supported.
209
- * - Accessibility: scope `aria-label` on the panel, `aria-pressed` is the
210
- * consumer's job on whatever button toggles `open`.
211
- */
195
+ /** A persistent per-artifact conversation using the consumer's transport. */
212
196
  declare function ArtifactAgentDock({ scope, open, onOpenChange, transport, defaultPrompt, onError, className }: ArtifactAgentDockProps): React$1.JSX.Element | null;
213
197
  export { AgentProfilePicker as $, SpeakerSection as A, partitionBySpeaker as B, MessageList as C, SpeakerHeader as D, Speaker as E, UserMessage as F, ArtifactDockStreamEvent as G, ArtifactAgentDockProps as H, UserMessageProps as I, modelProvider as J, ArtifactKind as K, agentTimelineStepKind as L, TRANSCRIPT_TEXT as M, ThinkingIndicator as N, SpeakerHeaderProps as O, ThinkingIndicatorProps as P, AgentProfileOption as Q, foldSummary as R, MessageAuthorProps as S, MessageRole$1 as T, ArtifactAgentDockTransport as U, ArtifactAgentDock as V, ArtifactDockMessage as W, AgentProfileCapability as X, snapHarnessToModel as Y, AgentProfileDraft as Z, ChatContainer$1 as _, AgentTimelineFoldItem as a, ReasoningLevelPicker as at, ChatMessageProps as b, AgentTimelineProps as c, AgentTimelineStepKind as d, AgentProfilePickerProps as et, AgentTimelineStepProps as f, ChatAuthor as g, AgentTimelineToolItem as h, AgentTimelineCustomItem as i, ReasoningLevelOption as it, SpeakerState as j, SpeakerPart as k, AgentTimelineStatusItem as l, AgentTimelineToolGroupItem as m, AgentTimelineArtifactItem as n, HARNESS_REASONING_OPTIONS as nt, AgentTimelineItem as o, ReasoningLevelPickerProps as ot, AgentTimelineTone as p, ArtifactScope as q, AgentTimelineColumn$1 as r, ReasoningLevel as rt, AgentTimelineMessageItem as s, AgentTimeline$1 as t, DEFAULT_REASONING_LEVEL_OPTIONS as tt, AgentTimelineStep as u, ChatContainerProps$1 as v, MessageListProps as w, MessageAuthor as x, ChatMessage$1 as y, isViewerMessage as z };