@tangle-network/sandbox-ui 0.31.0 → 0.33.0

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,6 +1,6 @@
1
1
  import {
2
2
  moonshot_default
3
- } from "./chunk-6NQBODYV.js";
3
+ } from "./chunk-NMR2CTGP.js";
4
4
  import {
5
5
  cn
6
6
  } from "./chunk-EI44GEQ5.js";
@@ -123,7 +123,7 @@ var HARNESS_BRAND = {
123
123
  "cli-base": { label: "CLI base", icon: Terminal }
124
124
  };
125
125
  function HarnessLogo({ type, size = 16, className }) {
126
- const brand = HARNESS_BRAND[type];
126
+ const brand = HARNESS_BRAND[type] ?? { label: type, icon: Bot };
127
127
  const Icon2 = brand.icon;
128
128
  return /* @__PURE__ */ jsx2(
129
129
  "span",
@@ -331,9 +331,9 @@ function ModelPicker({
331
331
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-border bg-card",
332
332
  "px-2.5 text-xs font-medium text-foreground shadow-sm",
333
333
  "transition-colors duration-[var(--transition-fast)]",
334
- "hover:border-primary/30 hover:bg-accent/30",
335
- "focus:outline-none focus:border-primary/40",
336
- "data-[state=open]:border-primary/40 data-[state=open]:bg-accent/30",
334
+ "hover:border-border hover:bg-muted/40",
335
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
336
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
337
337
  "disabled:opacity-50 disabled:cursor-not-allowed",
338
338
  className,
339
339
  triggerClassName
@@ -354,9 +354,9 @@ function ModelPicker({
354
354
  "flex w-full items-center justify-between gap-2 rounded-[var(--radius-md)]",
355
355
  "border border-border bg-card px-3 py-2.5 text-sm text-left",
356
356
  "transition-colors duration-[var(--transition-fast)]",
357
- "hover:border-primary/20 hover:bg-accent/30",
358
- "focus:outline-none focus:border-primary/30",
359
- "data-[state=open]:border-primary/30 data-[state=open]:bg-accent/30",
357
+ "hover:border-border hover:bg-muted/40",
358
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
359
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
360
360
  "disabled:opacity-50 disabled:cursor-not-allowed",
361
361
  className,
362
362
  triggerClassName
@@ -1,10 +1,62 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { e as HarnessType } from './harness-picker-lyeEncN4.js';
4
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, H as HARNESS_OPTIONS, c as HarnessPicker, d as HarnessPickerProps, f as chatCapableHarnesses } from './harness-picker-lyeEncN4.js';
3
+ import { ReactNode } from 'react';
4
+ import { HarnessType } from '@tangle-network/agent-interface';
5
+ export { HarnessType } from '@tangle-network/agent-interface';
5
6
  export { D as DEFAULT_FEATURED_MODEL_IDS, M as ModelInfo, a as ModelPicker, b as ModelPickerProps, c as ModelPickerVariant, d as canonicalModelId, e as dedupeModels, f as formatContext, g as formatPricing, m as modelDedupKey } from './model-picker-Cmisf9Y8.js';
6
7
  export { B as BillingBalance, a as BillingDashboard, b as BillingDashboardProps, c as BillingSubscription, d as BillingUsage, P as PricingPage, e as PricingPageProps, f as PricingTier, T as TemplateCard, g as TemplateCardData, h as TemplateCardProps, U as UsageChart, i as UsageChartProps, j as UsageDataPoint, k as formatPrice } from './template-card-UhV3pmRC.js';
7
8
 
9
+ interface Backend {
10
+ type: string;
11
+ label: string;
12
+ description?: string;
13
+ /** Optional leading brand glyph (e.g. a HarnessLogo) shown in the trigger and rows. */
14
+ icon?: ReactNode;
15
+ }
16
+ interface BackendSelectorProps {
17
+ backends: Backend[];
18
+ selected: string;
19
+ onChange: (selected: string) => void;
20
+ label?: string;
21
+ placeholder?: string;
22
+ className?: string;
23
+ }
24
+ declare function BackendSelector({ backends, selected, onChange, label, placeholder, className, }: BackendSelectorProps): react_jsx_runtime.JSX.Element;
25
+
26
+ interface HarnessOption extends Backend {
27
+ type: HarnessType;
28
+ /**
29
+ * Whether this harness can drive an interactive chat session. `false` for
30
+ * shell-only backends (`cli-base`) that have no conversational agent — the
31
+ * chat composer filters these out (see {@link chatCapableHarnesses}) while
32
+ * scheduled/non-chat surfaces keep them.
33
+ */
34
+ chatCapable: boolean;
35
+ }
36
+ /**
37
+ * Default option list with human-readable copy. Order is curated so the
38
+ * recommended choice (`opencode`) appears first; `cli-base` (no agent) last.
39
+ */
40
+ declare const HARNESS_OPTIONS: readonly HarnessOption[];
41
+ /** Harness types that can drive an interactive chat session. */
42
+ declare const chatCapableHarnesses: ReadonlyArray<HarnessType>;
43
+ interface HarnessPickerProps extends Omit<BackendSelectorProps, "backends" | "selected" | "onChange"> {
44
+ value: HarnessType;
45
+ onChange: (next: HarnessType) => void;
46
+ /** Filter the available harnesses (e.g. by plan tier). Defaults to all. */
47
+ available?: ReadonlyArray<HarnessType>;
48
+ /** Override or extend the option metadata. Keys are HarnessType. */
49
+ optionsOverride?: Partial<Record<HarnessType, Partial<Omit<HarnessOption, "type">>>>;
50
+ }
51
+ /**
52
+ * Type-safe harness/backend selector for sandbox-backed agent products.
53
+ *
54
+ * Wraps the generic {@link BackendSelector} with the canonical harness list
55
+ * baked in, so consumers don't have to re-declare it (or risk drifting from
56
+ * the SDK enum).
57
+ */
58
+ declare function HarnessPicker({ value, onChange, available, optionsOverride, label, ...rest }: HarnessPickerProps): react_jsx_runtime.JSX.Element;
59
+
8
60
  interface SidebarUser {
9
61
  email: string;
10
62
  name?: string;
@@ -152,6 +204,28 @@ interface ProfileAvatarProps {
152
204
  }
153
205
  declare function ProfileAvatar({ user, isLoading, onLogout, onSettingsClick, settingsHref, children, className, showDetails, LinkComponent, }: ProfileAvatarProps): react_jsx_runtime.JSX.Element;
154
206
 
207
+ interface RailTooltipProps {
208
+ /** Tooltip text shown to the right of the trigger. */
209
+ label: string;
210
+ /** The trigger element (icon button / link). */
211
+ children: React.ReactNode;
212
+ /** Disable the tooltip (e.g. when the rail is expanded and the label is inline). */
213
+ disabled?: boolean;
214
+ className?: string;
215
+ }
216
+ /**
217
+ * Quiet, instant-ish styled tooltip for the icon-only rail. CSS-only (no
218
+ * portal, no extra deps): the trigger wraps in a `group` and the label is an
219
+ * absolutely-positioned sibling to the RIGHT, revealed on `group-hover` /
220
+ * `group-focus-within` after a short delay. Matches the `--popover` / border
221
+ * tokens so it reads as Tangle Quiet chrome rather than a native `title`.
222
+ *
223
+ * Replaces reliance on the native `title` attribute for the collapsed rail
224
+ * (no ~1.5s delay, themeable, keyboard-focus reachable). Hidden via
225
+ * `aria-hidden` since the trigger already carries an accessible name.
226
+ */
227
+ declare function RailTooltip({ label, children, disabled, className }: RailTooltipProps): react_jsx_runtime.JSX.Element;
228
+
155
229
  /** Width constants (px) — Tangle Quiet density (ChatGPT-minimal) */
156
230
  declare const SIDEBAR_RAIL_WIDTH = 56;
157
231
  declare const SIDEBAR_PANEL_WIDTH = 268;
@@ -518,7 +592,7 @@ interface HarnessBrand {
518
592
  className?: string;
519
593
  }>;
520
594
  }
521
- declare const HARNESS_BRAND: Record<HarnessType, HarnessBrand>;
595
+ declare const HARNESS_BRAND: Partial<Record<HarnessType, HarnessBrand>>;
522
596
  interface HarnessLogoProps {
523
597
  type: HarnessType;
524
598
  /** Chip edge length in px. Default 16 (matches the model pill glyph). */
@@ -961,4 +1035,4 @@ interface InfoPanelProps {
961
1035
  }
962
1036
  declare function InfoPanel({ label, title, description, className }: InfoPanelProps): react_jsx_runtime.JSX.Element;
963
1037
 
964
- export { ActivityFeed, type ActivityFeedProps, type ActivityItem, BackendConfig, type BackendConfigProps, type BackendStatusData, ClusterStatusBar, type ClusterStatusBarProps, type ClusterStatusItem, CreditBalance, type CreditBalanceProps, DashboardLayout, type DashboardLayoutProps, type Profile as DashboardProfile, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type ExposedPort, type GitCommitData, GitPanel, type GitPanelProps, type GitStatusData, HARNESS_BRAND, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessType, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, PortsList, type PortsListProps, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, ProfileComparison, type ProfileComparisonProps, ProfileSelector, type ProfileSelectorProps, PromoBanner, type PromoBannerProps, RailButton, type RailButtonProps, RailCollapseToggle, type RailCollapseToggleProps, RailFlyout, type RailFlyoutProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailThemeToggle, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxStatus, 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, SidebarRailHeader, type SidebarRailHeaderProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar };
1038
+ export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type Backend, BackendConfig, type BackendConfigProps, BackendSelector, type BackendSelectorProps, type BackendStatusData, ClusterStatusBar, type ClusterStatusBarProps, type ClusterStatusItem, CreditBalance, type CreditBalanceProps, DashboardLayout, type DashboardLayoutProps, type Profile as DashboardProfile, 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, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, PortsList, type PortsListProps, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, ProfileComparison, type ProfileComparisonProps, ProfileSelector, type ProfileSelectorProps, PromoBanner, type PromoBannerProps, RailButton, type RailButtonProps, RailCollapseToggle, type RailCollapseToggleProps, RailFlyout, type RailFlyoutProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailThemeToggle, RailTooltip, type RailTooltipProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxStatus, 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, SidebarRailHeader, type SidebarRailHeaderProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, chatCapableHarnesses, parseInsufficientBalance, useSidebar };
package/dist/dashboard.js CHANGED
@@ -24,6 +24,7 @@ import {
24
24
  RailModeButton,
25
25
  RailSeparator,
26
26
  RailThemeToggle,
27
+ RailTooltip,
27
28
  ResourceMeter,
28
29
  ResourceSnapshot,
29
30
  SIDEBAR_MOBILE_WIDTH,
@@ -51,7 +52,7 @@ import {
51
52
  canAdminSandbox,
52
53
  parseInsufficientBalance,
53
54
  useSidebar
54
- } from "./chunk-SXAMR3TV.js";
55
+ } from "./chunk-CI6RWXWY.js";
55
56
  import {
56
57
  BillingDashboard,
57
58
  InfoPanel,
@@ -59,7 +60,7 @@ import {
59
60
  TemplateCard,
60
61
  UsageChart,
61
62
  formatPrice
62
- } from "./chunk-DNZ4DTNA.js";
63
+ } from "./chunk-2XNT74ZX.js";
63
64
  import "./chunk-7ZA5SEK3.js";
64
65
  import {
65
66
  BackendSelector,
@@ -68,7 +69,7 @@ import {
68
69
  HarnessLogo,
69
70
  HarnessPicker,
70
71
  chatCapableHarnesses
71
- } from "./chunk-ELGN7DPS.js";
72
+ } from "./chunk-I64YISXS.js";
72
73
  import {
73
74
  DEFAULT_FEATURED_MODEL_IDS,
74
75
  ModelPicker,
@@ -77,7 +78,7 @@ import {
77
78
  formatContext,
78
79
  formatPricing,
79
80
  modelDedupKey
80
- } from "./chunk-6NQBODYV.js";
81
+ } from "./chunk-NMR2CTGP.js";
81
82
  import "./chunk-EI44GEQ5.js";
82
83
  export {
83
84
  ActivityFeed,
@@ -115,6 +116,7 @@ export {
115
116
  RailModeButton,
116
117
  RailSeparator,
117
118
  RailThemeToggle,
119
+ RailTooltip,
118
120
  ResourceMeter,
119
121
  ResourceSnapshot,
120
122
  SIDEBAR_MOBILE_WIDTH,
package/dist/globals.css CHANGED
@@ -301,9 +301,6 @@
301
301
  .end {
302
302
  inset-inline-end: var(--spacing);
303
303
  }
304
- .-top-1 {
305
- top: calc(var(--spacing) * -1);
306
- }
307
304
  .-top-1\.5 {
308
305
  top: calc(var(--spacing) * -1.5);
309
306
  }
@@ -346,9 +343,6 @@
346
343
  .top-full {
347
344
  top: 100%;
348
345
  }
349
- .-right-1 {
350
- right: calc(var(--spacing) * -1);
351
- }
352
346
  .-right-1\.5 {
353
347
  right: calc(var(--spacing) * -1.5);
354
348
  }
@@ -2268,6 +2262,9 @@
2268
2262
  .py-8 {
2269
2263
  padding-block: calc(var(--spacing) * 8);
2270
2264
  }
2265
+ .py-10 {
2266
+ padding-block: calc(var(--spacing) * 10);
2267
+ }
2271
2268
  .py-12 {
2272
2269
  padding-block: calc(var(--spacing) * 12);
2273
2270
  }
@@ -2904,10 +2901,6 @@
2904
2901
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
2905
2902
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2906
2903
  }
2907
- .shadow-xl {
2908
- --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
2909
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2910
- }
2911
2904
  .ring {
2912
2905
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2913
2906
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -2977,6 +2970,11 @@
2977
2970
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2978
2971
  transition-duration: var(--tw-duration, var(--default-transition-duration));
2979
2972
  }
2973
+ .transition-\[opacity\,transform\] {
2974
+ transition-property: opacity,transform;
2975
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2976
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2977
+ }
2980
2978
  .transition-\[opacity\] {
2981
2979
  transition-property: opacity;
2982
2980
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -3064,6 +3062,17 @@
3064
3062
  rotate: 180deg;
3065
3063
  }
3066
3064
  }
3065
+ .group-focus-within\/tip\:translate-x-0 {
3066
+ &:is(:where(.group\/tip):focus-within *) {
3067
+ --tw-translate-x: calc(var(--spacing) * 0);
3068
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3069
+ }
3070
+ }
3071
+ .group-focus-within\/tip\:opacity-100 {
3072
+ &:is(:where(.group\/tip):focus-within *) {
3073
+ opacity: 100%;
3074
+ }
3075
+ }
3067
3076
  .group-hover\:translate-x-0\.5 {
3068
3077
  &:is(:where(.group):hover *) {
3069
3078
  @media (hover: hover) {
@@ -3079,6 +3088,28 @@
3079
3088
  }
3080
3089
  }
3081
3090
  }
3091
+ .group-hover\/tip\:translate-x-0 {
3092
+ &:is(:where(.group\/tip):hover *) {
3093
+ @media (hover: hover) {
3094
+ --tw-translate-x: calc(var(--spacing) * 0);
3095
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3096
+ }
3097
+ }
3098
+ }
3099
+ .group-hover\/tip\:opacity-100 {
3100
+ &:is(:where(.group\/tip):hover *) {
3101
+ @media (hover: hover) {
3102
+ opacity: 100%;
3103
+ }
3104
+ }
3105
+ }
3106
+ .group-hover\/tip\:delay-300 {
3107
+ &:is(:where(.group\/tip):hover *) {
3108
+ @media (hover: hover) {
3109
+ transition-delay: 300ms;
3110
+ }
3111
+ }
3112
+ }
3082
3113
  .peer-disabled\:cursor-not-allowed {
3083
3114
  &:is(:where(.peer):disabled ~ *) {
3084
3115
  cursor: not-allowed;
@@ -3402,14 +3433,6 @@
3402
3433
  }
3403
3434
  }
3404
3435
  }
3405
- .hover\:shadow-md {
3406
- &:hover {
3407
- @media (hover: hover) {
3408
- --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3409
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3410
- }
3411
- }
3412
- }
3413
3436
  .hover\:shadow-sm {
3414
3437
  &:hover {
3415
3438
  @media (hover: hover) {
@@ -3433,6 +3456,11 @@
3433
3456
  }
3434
3457
  }
3435
3458
  }
3459
+ .focus\:border-\[var\(--border-accent\)\] {
3460
+ &:focus {
3461
+ border-color: var(--border-accent);
3462
+ }
3463
+ }
3436
3464
  .focus\:border-\[var\(--border-accent-hover\)\] {
3437
3465
  &:focus {
3438
3466
  border-color: var(--border-accent-hover);
@@ -3494,6 +3522,16 @@
3494
3522
  outline-style: none;
3495
3523
  }
3496
3524
  }
3525
+ .focus-visible\:border-\[var\(--border-accent\)\] {
3526
+ &:focus-visible {
3527
+ border-color: var(--border-accent);
3528
+ }
3529
+ }
3530
+ .focus-visible\:bg-transparent {
3531
+ &:focus-visible {
3532
+ background-color: transparent;
3533
+ }
3534
+ }
3497
3535
  .focus-visible\:opacity-100 {
3498
3536
  &:focus-visible {
3499
3537
  opacity: 100%;
@@ -4455,7 +4493,7 @@
4455
4493
  "ss01" 1;
4456
4494
  }
4457
4495
  ::selection {
4458
- background: rgba(56, 178, 172, 0.22);
4496
+ background: var(--bg-selection);
4459
4497
  color: hsl(var(--hsl-foreground));
4460
4498
  }
4461
4499
  ::-webkit-scrollbar {
@@ -4466,12 +4504,16 @@
4466
4504
  background: transparent;
4467
4505
  }
4468
4506
  ::-webkit-scrollbar-thumb {
4469
- background: hsl(var(--border) / 0.7);
4470
- border-radius: 3px;
4507
+ background: hsl(var(--border) / 0.6);
4508
+ border-radius: 9999px;
4471
4509
  }
4472
4510
  ::-webkit-scrollbar-thumb:hover {
4473
4511
  background: hsl(var(--muted-foreground) / 0.4);
4474
4512
  }
4513
+ * {
4514
+ scrollbar-width: thin;
4515
+ scrollbar-color: hsl(var(--border) / 0.6) transparent;
4516
+ }
4475
4517
  }
4476
4518
  @layer utilities {
4477
4519
  .text-gradient-sandbox {
@@ -4481,7 +4523,7 @@
4481
4523
  color: transparent;
4482
4524
  }
4483
4525
  .glow-sandbox {
4484
- box-shadow: 0 0 48px -10px hsl(var(--sandbox) / 0.45);
4526
+ box-shadow: none;
4485
4527
  }
4486
4528
  .glass-card {
4487
4529
  background: hsl(var(--card));
@@ -4496,31 +4538,26 @@
4496
4538
  border: 1px solid hsl(var(--border));
4497
4539
  }
4498
4540
  .glass-panel {
4499
- background: hsl(var(--card) / 0.4);
4500
- backdrop-filter: blur(20px);
4501
- -webkit-backdrop-filter: blur(20px);
4502
- border: 1px solid hsl(var(--primary) / 0.1);
4503
- box-shadow: 0 4px 30px hsl(var(--background) / 0.3);
4541
+ background: hsl(var(--card));
4542
+ border: 1px solid hsl(var(--border));
4543
+ box-shadow: var(--shadow-card);
4504
4544
  }
4505
4545
  .glass-panel-heavy {
4506
- background: hsl(var(--card) / 0.7);
4507
- backdrop-filter: blur(24px);
4508
- -webkit-backdrop-filter: blur(24px);
4509
- border: 1px solid hsl(var(--primary) / 0.12);
4510
- box-shadow: 0 8px 32px hsl(var(--background) / 0.5);
4546
+ background: hsl(var(--card));
4547
+ border: 1px solid hsl(var(--border));
4548
+ box-shadow: var(--shadow-card);
4511
4549
  }
4512
4550
  .glass-panel:hover {
4513
- border-color: hsl(var(--primary) / 0.25);
4551
+ border-color: hsl(var(--border));
4514
4552
  }
4515
4553
  .glow-primary {
4516
- box-shadow: 0 0 40px hsl(var(--primary) / 0.25);
4517
- transition: box-shadow 0.4s ease-in-out;
4554
+ box-shadow: none;
4518
4555
  }
4519
4556
  .glow-primary:hover {
4520
- box-shadow: 0 0 60px hsl(var(--primary) / 0.4);
4557
+ box-shadow: none;
4521
4558
  }
4522
4559
  .text-glow {
4523
- text-shadow: 0 0 16px hsl(var(--primary) / 0.6);
4560
+ text-shadow: none;
4524
4561
  }
4525
4562
  .gradient-text {
4526
4563
  background: linear-gradient(135deg, hsl(var(--primary) / 0.7) 0%, hsl(var(--primary)) 100%);
@@ -4532,12 +4569,7 @@
4532
4569
  background: linear-gradient(135deg, hsl(var(--primary) / 0.1) 0%, hsl(var(--primary) / 0.05) 100%);
4533
4570
  }
4534
4571
  .neural-mesh {
4535
- background-image: radial-gradient(
4536
- circle at 2px 2px,
4537
- hsl(var(--primary) / 0.07) 1px,
4538
- transparent 0
4539
- );
4540
- background-size: 32px 32px;
4572
+ background-image: none;
4541
4573
  }
4542
4574
  .nav-active-indicator {
4543
4575
  position: relative;
@@ -4552,7 +4584,6 @@
4552
4584
  width: 3px;
4553
4585
  background-color: hsl(var(--primary));
4554
4586
  border-radius: 0 4px 4px 0;
4555
- box-shadow: 0 0 10px hsl(var(--primary));
4556
4587
  }
4557
4588
  .glass {
4558
4589
  background-color: var(--depth-2);
@@ -4562,17 +4593,10 @@
4562
4593
  position: relative;
4563
4594
  }
4564
4595
  .bg-mesh::before {
4565
- content: '';
4566
- position: absolute;
4567
- inset: 0;
4568
- background: radial-gradient(ellipse 80% 50% at 20% 40%, var(--mesh-teal), transparent),
4569
- radial-gradient(ellipse 60% 40% at 80% 20%, var(--mesh-violet), transparent),
4570
- radial-gradient(ellipse 50% 60% at 50% 80%, var(--mesh-blue), transparent);
4571
- pointer-events: none;
4572
- z-index: 0;
4596
+ content: none;
4573
4597
  }
4574
4598
  .noise {
4575
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.025'/%3E%3C/svg%3E");
4599
+ background-image: none;
4576
4600
  pointer-events: none;
4577
4601
  }
4578
4602
  .status-dot {
@@ -4584,7 +4608,6 @@
4584
4608
  }
4585
4609
  .status-dot-running {
4586
4610
  background: var(--status-running);
4587
- box-shadow: var(--shadow-status-running);
4588
4611
  }
4589
4612
  .status-dot-creating {
4590
4613
  background: var(--status-creating);
@@ -4601,7 +4624,6 @@
4601
4624
  }
4602
4625
  .status-dot-error {
4603
4626
  background: var(--status-error);
4604
- box-shadow: var(--shadow-status-error);
4605
4627
  }
4606
4628
  .status-dot-deleted {
4607
4629
  background: var(--status-deleted);
@@ -4627,6 +4649,19 @@
4627
4649
  .animate-in {
4628
4650
  animation: fade-in 0.25s ease-out;
4629
4651
  }
4652
+ .animate-row-in {
4653
+ animation: row-in 0.18s ease-out;
4654
+ }
4655
+ @keyframes row-in {
4656
+ from {
4657
+ opacity: 0;
4658
+ transform: translateY(-4px);
4659
+ }
4660
+ to {
4661
+ opacity: 1;
4662
+ transform: translateY(0);
4663
+ }
4664
+ }
4630
4665
  .pulse-ring {
4631
4666
  position: relative;
4632
4667
  }
package/dist/hooks.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream } from '@tangle-network/ui/hooks';
2
2
  import * as _tanstack_react_query from '@tanstack/react-query';
3
3
  import { Session } from './types.js';
4
- export { e as SendMessageOptions, S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-jUbIngSV.js';
4
+ export { e as SendMessageOptions, S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-VtiMwKa6.js';
5
5
  import '@tangle-network/ui/types';
6
6
  import '@tangle-network/ui/stores';
7
7
  import '@tangle-network/ui/sdk-hooks';
8
+ import '@tangle-network/agent-interface';
8
9
 
9
10
  interface UsePtySessionOptions {
10
11
  /** Base URL of the sidecar (e.g. "http://localhost:9100"). */
package/dist/index.d.ts CHANGED
@@ -8,20 +8,20 @@ export { AgentSessionControls, AgentSessionControlsProps, AgentSessionHarnessCon
8
8
  export { ExpandedToolDetail, ExpandedToolDetailProps, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps } from '@tangle-network/ui/run';
9
9
  export { CommandPreview, DiffPreview, GlobResultsPreview, GrepResultsPreview, QuestionPreview, WebSearchPreview, WriteFilePreview } from '@tangle-network/ui/tool-previews';
10
10
  export { FileArtifactPane, FileArtifactPaneProps, FileNode, FilePreview, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, filterFileTree } from '@tangle-network/ui/files';
11
- export { ActivityFeed, ActivityFeedProps, ActivityItem, BackendConfig, BackendConfigProps, BackendStatusData, ClusterStatusBar, ClusterStatusBarProps, ClusterStatusItem, CreditBalance, CreditBalanceProps, DashboardLayout, DashboardLayoutProps, DashboardProfile, DashboardSnapshotInfo, DashboardUser, ExposedPort, GitCommitData, GitPanel, GitPanelProps, GitStatusData, HARNESS_BRAND, HarnessBrand, HarnessLogo, HarnessLogoProps, INSUFFICIENT_BALANCE_CODE, InfoPanel, InfoPanelProps, InsufficientBalance, Invoice, InvoiceTable, InvoiceTableProps, McpServer, MetricAreaChart, MetricAreaChartProps, MetricChartPoint, MetricChartTone, NavItem, NetworkConfig, NetworkConfigData, NetworkConfigProps, NewSandboxCard, NewSandboxCardProps, OutOfCreditsModal, OutOfCreditsModalProps, PlanCardData, PlanCards, PlanCardsProps, PlanFeature, PortsList, PortsListProps, ProcessInfo, ProcessList, ProcessListProps, ProductVariant, ProfileAvatar, ProfileAvatarProps, ProfileComparison, ProfileComparisonProps, ProfileSelector, ProfileSelectorProps, PromoBanner, PromoBannerProps, RailButton, RailButtonProps, RailCollapseToggle, RailCollapseToggleProps, RailFlyout, RailFlyoutProps, RailModeButton, RailModeButtonProps, RailSeparator, RailSeparatorProps, RailThemeToggle, ResourceMeter, ResourceMeterProps, ResourceSnapshot, ResourceSnapshotItem, ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxCardData, SandboxCardProps, SandboxStatus, SandboxTable, SandboxTableProps, Sidebar, SidebarContent, SidebarContentProps, SidebarLayout, SidebarLayoutFlyoutItem, SidebarLayoutNavItem, SidebarLayoutProps, SidebarPanel, SidebarPanelContent, SidebarPanelContentProps, SidebarPanelHeader, SidebarPanelHeaderProps, SidebarPanelProps, SidebarProps, SidebarProvider, SidebarProviderProps, SidebarRail, SidebarRailFooter, SidebarRailFooterProps, SidebarRailHeader, SidebarRailHeaderProps, SidebarRailNav, SidebarRailNavProps, SidebarRailProps, SidebarUser, SnapshotList, SnapshotListProps, SystemLogsViewer, SystemLogsViewerProps, TeamRole, UsageSummary, UsageSummaryData, UsageSummaryProps, Variant, VariantList, VariantListProps, VariantOutcome, VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar } from './dashboard.js';
12
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, H as HARNESS_OPTIONS, c as HarnessPicker, d as HarnessPickerProps, e as HarnessType, f as chatCapableHarnesses } from './harness-picker-lyeEncN4.js';
11
+ export { ActivityFeed, ActivityFeedProps, ActivityItem, Backend, BackendConfig, BackendConfigProps, BackendSelector, BackendSelectorProps, BackendStatusData, ClusterStatusBar, ClusterStatusBarProps, ClusterStatusItem, CreditBalance, CreditBalanceProps, DashboardLayout, DashboardLayoutProps, DashboardProfile, DashboardSnapshotInfo, DashboardUser, ExposedPort, GitCommitData, GitPanel, GitPanelProps, GitStatusData, HARNESS_BRAND, HARNESS_OPTIONS, HarnessBrand, HarnessLogo, HarnessLogoProps, HarnessPicker, HarnessPickerProps, INSUFFICIENT_BALANCE_CODE, InfoPanel, InfoPanelProps, InsufficientBalance, Invoice, InvoiceTable, InvoiceTableProps, McpServer, MetricAreaChart, MetricAreaChartProps, MetricChartPoint, MetricChartTone, NavItem, NetworkConfig, NetworkConfigData, NetworkConfigProps, NewSandboxCard, NewSandboxCardProps, OutOfCreditsModal, OutOfCreditsModalProps, PlanCardData, PlanCards, PlanCardsProps, PlanFeature, PortsList, PortsListProps, ProcessInfo, ProcessList, ProcessListProps, ProductVariant, ProfileAvatar, ProfileAvatarProps, ProfileComparison, ProfileComparisonProps, ProfileSelector, ProfileSelectorProps, PromoBanner, PromoBannerProps, RailButton, RailButtonProps, RailCollapseToggle, RailCollapseToggleProps, RailFlyout, RailFlyoutProps, RailModeButton, RailModeButtonProps, RailSeparator, RailSeparatorProps, RailThemeToggle, RailTooltip, RailTooltipProps, ResourceMeter, ResourceMeterProps, ResourceSnapshot, ResourceSnapshotItem, ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxCardData, SandboxCardProps, SandboxStatus, SandboxTable, SandboxTableProps, Sidebar, SidebarContent, SidebarContentProps, SidebarLayout, SidebarLayoutFlyoutItem, SidebarLayoutNavItem, SidebarLayoutProps, SidebarPanel, SidebarPanelContent, SidebarPanelContentProps, SidebarPanelHeader, SidebarPanelHeaderProps, SidebarPanelProps, SidebarProps, SidebarProvider, SidebarProviderProps, SidebarRail, SidebarRailFooter, SidebarRailFooterProps, SidebarRailHeader, SidebarRailHeaderProps, SidebarRailNav, SidebarRailNavProps, SidebarRailProps, SidebarUser, SnapshotList, SnapshotListProps, SystemLogsViewer, SystemLogsViewerProps, TeamRole, UsageSummary, UsageSummaryData, UsageSummaryProps, Variant, VariantList, VariantListProps, VariantOutcome, VariantStatus, canAdminSandbox, chatCapableHarnesses, parseInsufficientBalance, useSidebar } from './dashboard.js';
13
12
  export { D as DEFAULT_FEATURED_MODEL_IDS, M as ModelInfo, a as ModelPicker, b as ModelPickerProps, c as ModelPickerVariant, d as canonicalModelId, e as dedupeModels, f as formatContext, g as formatPricing, m as modelDedupKey } from './model-picker-Cmisf9Y8.js';
14
13
  export { B as BillingBalance, a as BillingDashboard, b as BillingDashboardProps, c as BillingSubscription, d as BillingUsage, P as PricingPage, e as PricingPageProps, f as PricingTier, T as TemplateCard, g as TemplateCardData, h as TemplateCardProps, U as UsageChart, i as UsageChartProps, j as UsageDataPoint, k as formatPrice } from './template-card-UhV3pmRC.js';
15
14
  export { AuthHeader, AuthHeaderProps, GitHubLoginButton, GitHubLoginButtonProps, LoginLayout, LoginLayoutProps, SessionUser, UserMenu, UserMenuProps } from '@tangle-network/ui/auth';
16
15
  export { TangleLoginButton, TangleLoginButtonProps } from './auth.js';
17
16
  export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream } from '@tangle-network/ui/hooks';
18
17
  export { SandboxMetrics, SidecarMetricsPayload, UsePtySessionOptions, UsePtySessionReturn, UseSandboxMetricsOptions, UseSandboxMetricsResult, useCreateSession, useDeleteSession, usePtySession, useRenameSession, useSandboxMetrics, useSessions } from './hooks.js';
19
- export { S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-jUbIngSV.js';
18
+ export { S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-VtiMwKa6.js';
20
19
  export { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, RegisterActiveSessionOptions, SessionProjectKey, activeSessionsAtom, addMessage, addParts, bumpActiveSessionActivity, clearChat, getActiveSession, getAllActiveSessions, getAllProjectActivity, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, messagesAtom, partMapAtom, registerActiveSession, resetActiveSessions, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useHasBackgroundRunningSessions, useNavbarSessions, useProjectActivity, useProjectSessions, useSessionsByActivity, useTotalRunningSessions } from '@tangle-network/ui/stores';
21
20
  export { ChatSession, connectSession, disconnectSession, sessionAtom } from './stores.js';
22
21
  export { AgentBranding, CustomToolRenderer, DisplayVariant, FinalTextPart, GroupedMessage, MessageRun, MessageUser, ReasoningPart, Run, RunStats, SessionMessage, SessionPart, TextPart, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime } from '@tangle-network/ui/types';
23
22
  export { Session } from './types.js';
24
23
  export { TOOL_CATEGORY_ICONS, cn, copyText, formatBytes, formatDuration, formatUptime, getToolCategory, getToolDisplayMetadata, getToolErrorText, timeAgo, truncateText } from '@tangle-network/ui/utils';
24
+ export { HarnessType } from '@tangle-network/agent-interface';
25
25
  import 'react/jsx-runtime';
26
26
  import 'react';
27
27
  import '@tanstack/react-query';
package/dist/index.js CHANGED
@@ -104,7 +104,7 @@ import {
104
104
  modelProvider,
105
105
  snapHarnessToModel,
106
106
  snapModelToHarness
107
- } from "./chunk-BJFWPP5T.js";
107
+ } from "./chunk-AWYBQTP6.js";
108
108
  import {
109
109
  ExpandedToolDetail,
110
110
  InlineThinkingItem,
@@ -133,7 +133,7 @@ import {
133
133
  dispatchSessionCreated,
134
134
  shellShouldRevalidate,
135
135
  useOptimisticSessionItems
136
- } from "./chunk-AUFV7766.js";
136
+ } from "./chunk-6NDOA4SB.js";
137
137
  import {
138
138
  OpenUIArtifactRenderer
139
139
  } from "./chunk-AZ3AWMTM.js";
@@ -171,6 +171,7 @@ import {
171
171
  RailModeButton,
172
172
  RailSeparator,
173
173
  RailThemeToggle,
174
+ RailTooltip,
174
175
  ResourceMeter,
175
176
  ResourceSnapshot,
176
177
  SIDEBAR_MOBILE_WIDTH,
@@ -198,7 +199,7 @@ import {
198
199
  canAdminSandbox,
199
200
  parseInsufficientBalance,
200
201
  useSidebar
201
- } from "./chunk-SXAMR3TV.js";
202
+ } from "./chunk-CI6RWXWY.js";
202
203
  import {
203
204
  BillingDashboard,
204
205
  InfoPanel,
@@ -206,7 +207,7 @@ import {
206
207
  TemplateCard,
207
208
  UsageChart,
208
209
  formatPrice
209
- } from "./chunk-DNZ4DTNA.js";
210
+ } from "./chunk-2XNT74ZX.js";
210
211
  import {
211
212
  Avatar,
212
213
  AvatarFallback,
@@ -301,7 +302,7 @@ import {
301
302
  HarnessLogo,
302
303
  HarnessPicker,
303
304
  chatCapableHarnesses
304
- } from "./chunk-ELGN7DPS.js";
305
+ } from "./chunk-I64YISXS.js";
305
306
  import {
306
307
  DEFAULT_FEATURED_MODEL_IDS,
307
308
  ModelPicker,
@@ -310,7 +311,7 @@ import {
310
311
  formatContext,
311
312
  formatPricing,
312
313
  modelDedupKey
313
- } from "./chunk-6NQBODYV.js";
314
+ } from "./chunk-NMR2CTGP.js";
314
315
  import "./chunk-EI44GEQ5.js";
315
316
 
316
317
  // src/index.ts
@@ -445,6 +446,7 @@ export {
445
446
  RailModeButton,
446
447
  RailSeparator,
447
448
  RailThemeToggle,
449
+ RailTooltip,
448
450
  RealtimeSessionRegistry,
449
451
  ReasoningLevelPicker,
450
452
  ResourceMeter,