@tangle-network/sandbox-ui 0.20.3 → 0.21.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.
@@ -185,7 +185,7 @@ function SidebarRailFooter({ children, className }) {
185
185
  function RailSeparator({ className }) {
186
186
  return /* @__PURE__ */ jsx2("div", { className: cn("my-2 h-px w-10 bg-[var(--md3-outline-variant)]", className) });
187
187
  }
188
- function RailButton({ icon: Icon2, label, isActive, badge, onClick, className, showLabel }) {
188
+ function RailButton({ icon: Icon, label, isActive, badge, onClick, className, showLabel }) {
189
189
  return /* @__PURE__ */ jsxs(
190
190
  "button",
191
191
  {
@@ -203,7 +203,7 @@ function RailButton({ icon: Icon2, label, isActive, badge, onClick, className, s
203
203
  className
204
204
  ),
205
205
  children: [
206
- /* @__PURE__ */ jsx2(Icon2, { className: "h-5 w-5 shrink-0" }),
206
+ /* @__PURE__ */ jsx2(Icon, { className: "h-5 w-5 shrink-0" }),
207
207
  showLabel && /* @__PURE__ */ jsx2("span", { className: "text-sm font-medium", children: label }),
208
208
  badge !== void 0 && badge > 0 && /* @__PURE__ */ jsx2("span", { className: "absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-[var(--md3-on-primary)] px-1 shadow-sm", children: badge > 99 ? "99+" : badge })
209
209
  ]
@@ -1139,168 +1139,30 @@ function PlanCards({ plans, className }) {
1139
1139
  ] });
1140
1140
  }
1141
1141
 
1142
- // src/dashboard/backend-selector.tsx
1143
- import { ChevronDown } from "lucide-react";
1144
- import * as Select from "@radix-ui/react-select";
1145
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1146
- function BackendSelector({
1147
- backends,
1148
- selected,
1149
- onChange,
1150
- label = "Model",
1151
- placeholder = "Select a model",
1152
- className
1153
- }) {
1154
- const current = backends.find((b) => b.type === selected);
1155
- return /* @__PURE__ */ jsxs10("div", { className: cn("space-y-1.5", className), children: [
1156
- label && /* @__PURE__ */ jsx11("label", { className: "block text-xs font-medium text-muted-foreground uppercase tracking-[0.06em]", children: label }),
1157
- /* @__PURE__ */ jsxs10(Select.Root, { value: selected, onValueChange: onChange, children: [
1158
- /* @__PURE__ */ jsxs10(
1159
- Select.Trigger,
1160
- {
1161
- className: cn(
1162
- "flex w-full items-center justify-between gap-2 rounded-[var(--radius-md)]",
1163
- "border border-border bg-card",
1164
- "px-3 py-2.5 text-sm text-left",
1165
- "transition-colors duration-[var(--transition-fast)]",
1166
- "hover:border-primary/20 hover:bg-accent/30",
1167
- "focus:outline-none focus:border-primary/30",
1168
- "data-[state=open]:border-primary/30 data-[state=open]:bg-accent/30"
1169
- ),
1170
- children: [
1171
- /* @__PURE__ */ jsx11("div", { className: "min-w-0 flex-1", children: current ? /* @__PURE__ */ jsxs10("div", { children: [
1172
- /* @__PURE__ */ jsx11("span", { className: "font-medium text-foreground", children: current.label }),
1173
- current.description && /* @__PURE__ */ jsx11("span", { className: "ml-2 text-xs text-muted-foreground", children: current.description })
1174
- ] }) : /* @__PURE__ */ jsx11("span", { className: "text-muted-foreground", children: placeholder }) }),
1175
- /* @__PURE__ */ jsx11(Select.Icon, { asChild: true, children: /* @__PURE__ */ jsx11(ChevronDown, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-[var(--transition-fast)] data-[state=open]:rotate-180" }) })
1176
- ]
1177
- }
1178
- ),
1179
- /* @__PURE__ */ jsx11(Select.Portal, { children: /* @__PURE__ */ jsx11(
1180
- Select.Content,
1181
- {
1182
- position: "popper",
1183
- sideOffset: 4,
1184
- className: cn(
1185
- "z-50 w-[var(--radix-select-trigger-width)] overflow-hidden",
1186
- "rounded-[var(--radius-md)] border border-border",
1187
- "bg-card shadow-[var(--shadow-dropdown)]",
1188
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
1189
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1190
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1191
- "data-[side=bottom]:slide-in-from-top-1"
1192
- ),
1193
- children: /* @__PURE__ */ jsx11(Select.Viewport, { className: "p-1", children: backends.map((backend) => /* @__PURE__ */ jsxs10(
1194
- Select.Item,
1195
- {
1196
- value: backend.type,
1197
- className: cn(
1198
- "relative flex cursor-pointer select-none flex-col rounded-[var(--radius-sm)]",
1199
- "px-3 py-2.5 text-sm outline-none",
1200
- "transition-colors duration-[var(--transition-fast)]",
1201
- "hover:bg-accent/50 focus:bg-accent/50",
1202
- "data-[state=checked]:bg-[var(--accent-surface-soft)] data-[state=checked]:text-[var(--brand-primary)]"
1203
- ),
1204
- children: [
1205
- /* @__PURE__ */ jsx11(Select.ItemText, { children: /* @__PURE__ */ jsx11("span", { className: "font-medium", children: backend.label }) }),
1206
- backend.description && /* @__PURE__ */ jsx11("span", { className: "mt-0.5 text-xs text-muted-foreground data-[state=checked]:text-[var(--accent-text)]", children: backend.description })
1207
- ]
1208
- },
1209
- backend.type
1210
- )) })
1211
- }
1212
- ) })
1213
- ] })
1214
- ] });
1215
- }
1216
-
1217
- // src/dashboard/harness-picker.tsx
1218
- import { jsx as jsx12 } from "react/jsx-runtime";
1219
- var HARNESS_OPTIONS = [
1220
- {
1221
- type: "opencode",
1222
- label: "OpenCode",
1223
- description: "Default agent \u2014 broad model support, deterministic streaming"
1224
- },
1225
- {
1226
- type: "claude-code",
1227
- label: "Claude Code",
1228
- description: "Native Claude skills and tools (requires ANTHROPIC_API_KEY)"
1229
- },
1230
- {
1231
- type: "codex",
1232
- label: "Codex",
1233
- description: "OpenAI Codex CLI (requires OPENAI_API_KEY)"
1234
- },
1235
- {
1236
- type: "amp",
1237
- label: "AMP",
1238
- description: "Sourcegraph AMP agent"
1239
- },
1240
- {
1241
- type: "factory-droids",
1242
- label: "Factory Droids",
1243
- description: "Factory Droid agent"
1244
- },
1245
- {
1246
- type: "cli-base",
1247
- label: "CLI base (no agent)",
1248
- description: "Shell tools only \u2014 for non-AI scheduled tasks"
1249
- }
1250
- ];
1251
- function HarnessPicker({
1252
- value,
1253
- onChange,
1254
- available,
1255
- optionsOverride,
1256
- label = "Agent harness",
1257
- ...rest
1258
- }) {
1259
- const allowed = new Set(available ?? HARNESS_OPTIONS.map((h) => h.type));
1260
- const backends = HARNESS_OPTIONS.filter((h) => allowed.has(h.type)).map((h) => {
1261
- const override = optionsOverride?.[h.type];
1262
- return {
1263
- type: h.type,
1264
- label: override?.label ?? h.label,
1265
- description: override?.description ?? h.description
1266
- };
1267
- });
1268
- return /* @__PURE__ */ jsx12(
1269
- BackendSelector,
1270
- {
1271
- backends,
1272
- selected: value,
1273
- onChange: (next) => onChange(next),
1274
- label,
1275
- ...rest
1276
- }
1277
- );
1278
- }
1279
-
1280
1142
  // src/dashboard/dashboard-layout.tsx
1281
1143
  import * as React4 from "react";
1282
1144
  import { Plus as Plus2, Bell } from "lucide-react";
1283
- import { Fragment as Fragment7, jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
1145
+ import { Fragment as Fragment7, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1284
1146
  function SettingsIconSmall({ className }) {
1285
- return /* @__PURE__ */ jsxs11("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1286
- /* @__PURE__ */ jsx13("title", { children: "Settings" }),
1287
- /* @__PURE__ */ jsx13("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
1288
- /* @__PURE__ */ jsx13("circle", { cx: "12", cy: "12", r: "3" })
1147
+ return /* @__PURE__ */ jsxs10("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1148
+ /* @__PURE__ */ jsx11("title", { children: "Settings" }),
1149
+ /* @__PURE__ */ jsx11("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
1150
+ /* @__PURE__ */ jsx11("circle", { cx: "12", cy: "12", r: "3" })
1289
1151
  ] });
1290
1152
  }
1291
1153
  function MenuIcon({ className }) {
1292
- return /* @__PURE__ */ jsxs11("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1293
- /* @__PURE__ */ jsx13("title", { children: "Menu icon" }),
1294
- /* @__PURE__ */ jsx13("line", { x1: "4", x2: "20", y1: "12", y2: "12" }),
1295
- /* @__PURE__ */ jsx13("line", { x1: "4", x2: "20", y1: "6", y2: "6" }),
1296
- /* @__PURE__ */ jsx13("line", { x1: "4", x2: "20", y1: "18", y2: "18" })
1154
+ return /* @__PURE__ */ jsxs10("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1155
+ /* @__PURE__ */ jsx11("title", { children: "Menu icon" }),
1156
+ /* @__PURE__ */ jsx11("line", { x1: "4", x2: "20", y1: "12", y2: "12" }),
1157
+ /* @__PURE__ */ jsx11("line", { x1: "4", x2: "20", y1: "6", y2: "6" }),
1158
+ /* @__PURE__ */ jsx11("line", { x1: "4", x2: "20", y1: "18", y2: "18" })
1297
1159
  ] });
1298
1160
  }
1299
1161
  function XIcon({ className }) {
1300
- return /* @__PURE__ */ jsxs11("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1301
- /* @__PURE__ */ jsx13("title", { children: "Close icon" }),
1302
- /* @__PURE__ */ jsx13("path", { d: "M18 6 6 18" }),
1303
- /* @__PURE__ */ jsx13("path", { d: "m6 6 12 12" })
1162
+ return /* @__PURE__ */ jsxs10("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
1163
+ /* @__PURE__ */ jsx11("title", { children: "Close icon" }),
1164
+ /* @__PURE__ */ jsx11("path", { d: "M18 6 6 18" }),
1165
+ /* @__PURE__ */ jsx11("path", { d: "m6 6 12 12" })
1304
1166
  ] });
1305
1167
  }
1306
1168
  function formatNotifDate(raw) {
@@ -1314,7 +1176,7 @@ function DefaultLink2({
1314
1176
  children,
1315
1177
  ...rest
1316
1178
  }) {
1317
- return /* @__PURE__ */ jsx13("a", { href: href ?? to, className, ...rest, children });
1179
+ return /* @__PURE__ */ jsx11("a", { href: href ?? to, className, ...rest, children });
1318
1180
  }
1319
1181
  function DashboardLayoutInner({
1320
1182
  children,
@@ -1369,16 +1231,16 @@ function DashboardLayoutInner({
1369
1231
  );
1370
1232
  const activePanel = panels.find((p) => p.mode === mode);
1371
1233
  const buildSidebarContent = React4.useCallback(
1372
- (showLabels) => /* @__PURE__ */ jsxs11(Fragment7, { children: [
1373
- /* @__PURE__ */ jsxs11(SidebarRail, { wide: showLabels, children: [
1374
- /* @__PURE__ */ jsx13(SidebarRailHeader, { children: /* @__PURE__ */ jsx13(Link, { href: "/", to: "/", className: "p-1 rounded-md transition-colors hover:bg-muted/50", children: /* @__PURE__ */ jsx13(Logo, { variant, size: "sm", iconOnly: true }) }) }),
1375
- /* @__PURE__ */ jsx13(SidebarRailNav, { children: navItems.map((item, i) => {
1234
+ (showLabels) => /* @__PURE__ */ jsxs10(Fragment7, { children: [
1235
+ /* @__PURE__ */ jsxs10(SidebarRail, { wide: showLabels, children: [
1236
+ /* @__PURE__ */ jsx11(SidebarRailHeader, { children: /* @__PURE__ */ jsx11(Link, { href: "/", to: "/", className: "p-1 rounded-md transition-colors hover:bg-muted/50", children: /* @__PURE__ */ jsx11(Logo, { variant, size: "sm", iconOnly: true }) }) }),
1237
+ /* @__PURE__ */ jsx11(SidebarRailNav, { children: navItems.map((item, i) => {
1376
1238
  const isMode = modeSet.has(item.id);
1377
1239
  const prevIsMode = i > 0 && modeSet.has(navItems[i - 1].id);
1378
1240
  const showSep = i > 0 && isMode && !prevIsMode;
1379
- return /* @__PURE__ */ jsxs11(React4.Fragment, { children: [
1380
- showSep && /* @__PURE__ */ jsx13(RailSeparator, {}),
1381
- isMode ? /* @__PURE__ */ jsx13(
1241
+ return /* @__PURE__ */ jsxs10(React4.Fragment, { children: [
1242
+ showSep && /* @__PURE__ */ jsx11(RailSeparator, {}),
1243
+ isMode ? /* @__PURE__ */ jsx11(
1382
1244
  RailModeButton,
1383
1245
  {
1384
1246
  mode: item.id,
@@ -1387,7 +1249,7 @@ function DashboardLayoutInner({
1387
1249
  badge: item.badge,
1388
1250
  showLabel: showLabels
1389
1251
  }
1390
- ) : /* @__PURE__ */ jsx13(Link, { href: item.href, to: item.href, children: /* @__PURE__ */ jsx13(
1252
+ ) : /* @__PURE__ */ jsx11(Link, { href: item.href, to: item.href, children: /* @__PURE__ */ jsx11(
1391
1253
  RailButton,
1392
1254
  {
1393
1255
  icon: item.icon,
@@ -1398,11 +1260,11 @@ function DashboardLayoutInner({
1398
1260
  ) })
1399
1261
  ] }, item.id);
1400
1262
  }) }),
1401
- /* @__PURE__ */ jsxs11(SidebarRailFooter, { children: [
1402
- onSettingsClick ? /* @__PURE__ */ jsx13(RailButton, { icon: SettingsIconSmall, label: "Settings", onClick: onSettingsClick, showLabel: showLabels }) : /* @__PURE__ */ jsx13(Link, { href: settingsHref, to: settingsHref, children: /* @__PURE__ */ jsx13(RailButton, { icon: SettingsIconSmall, label: "Settings", showLabel: showLabels }) }),
1263
+ /* @__PURE__ */ jsxs10(SidebarRailFooter, { children: [
1264
+ onSettingsClick ? /* @__PURE__ */ jsx11(RailButton, { icon: SettingsIconSmall, label: "Settings", onClick: onSettingsClick, showLabel: showLabels }) : /* @__PURE__ */ jsx11(Link, { href: settingsHref, to: settingsHref, children: /* @__PURE__ */ jsx11(RailButton, { icon: SettingsIconSmall, label: "Settings", showLabel: showLabels }) }),
1403
1265
  railFooter,
1404
- /* @__PURE__ */ jsx13(RailSeparator, {}),
1405
- /* @__PURE__ */ jsx13(
1266
+ /* @__PURE__ */ jsx11(RailSeparator, {}),
1267
+ /* @__PURE__ */ jsx11(
1406
1268
  ProfileAvatar,
1407
1269
  {
1408
1270
  user: sidebarUser,
@@ -1416,9 +1278,9 @@ function DashboardLayoutInner({
1416
1278
  )
1417
1279
  ] })
1418
1280
  ] }),
1419
- panels.length > 0 && /* @__PURE__ */ jsxs11(SidebarPanel, { children: [
1420
- /* @__PURE__ */ jsx13(SidebarPanelHeader, { title: activePanel?.title ?? mode }),
1421
- /* @__PURE__ */ jsx13(SidebarPanelContent, { children: activePanel?.content })
1281
+ panels.length > 0 && /* @__PURE__ */ jsxs10(SidebarPanel, { children: [
1282
+ /* @__PURE__ */ jsx11(SidebarPanelHeader, { title: activePanel?.title ?? mode }),
1283
+ /* @__PURE__ */ jsx11(SidebarPanelContent, { children: activePanel?.content })
1422
1284
  ] })
1423
1285
  ] }),
1424
1286
  // biome-ignore lint/correctness/useExhaustiveDependencies: intentional — only the inputs that actually affect the sidebar tree
@@ -1443,8 +1305,8 @@ function DashboardLayoutInner({
1443
1305
  );
1444
1306
  const sidebarContent = React4.useMemo(() => buildSidebarContent(false), [buildSidebarContent]);
1445
1307
  const mobileSidebarContent = React4.useMemo(() => buildSidebarContent(true), [buildSidebarContent]);
1446
- return /* @__PURE__ */ jsxs11("div", { className: cn("min-h-screen bg-background text-foreground", className), children: [
1447
- /* @__PURE__ */ jsxs11(
1308
+ return /* @__PURE__ */ jsxs10("div", { className: cn("min-h-screen bg-background text-foreground", className), children: [
1309
+ /* @__PURE__ */ jsxs10(
1448
1310
  "nav",
1449
1311
  {
1450
1312
  className: "fixed top-0 z-50 bg-card border-b border-border flex justify-between items-center px-8 h-14 font-sans text-[13px] tracking-tight transition-[left,width] duration-200 ease-in-out",
@@ -1453,9 +1315,9 @@ function DashboardLayoutInner({
1453
1315
  width: hidden ? "100%" : `calc(100% - ${contentMargin}px)`
1454
1316
  },
1455
1317
  children: [
1456
- /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-8", children: [
1457
- /* @__PURE__ */ jsx13(Link, { href: "/", to: "/", className: "lg:hidden flex items-center p-1 rounded-md hover:bg-muted/50 transition-colors", children: /* @__PURE__ */ jsx13(Logo, { variant, size: "sm", iconOnly: true }) }),
1458
- topNavLinks && topNavLinks.length > 0 && /* @__PURE__ */ jsx13("div", { className: "hidden md:flex gap-6", children: topNavLinks.map((link) => /* @__PURE__ */ jsx13(
1318
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-8", children: [
1319
+ /* @__PURE__ */ jsx11(Link, { href: "/", to: "/", className: "lg:hidden flex items-center p-1 rounded-md hover:bg-muted/50 transition-colors", children: /* @__PURE__ */ jsx11(Logo, { variant, size: "sm", iconOnly: true }) }),
1320
+ topNavLinks && topNavLinks.length > 0 && /* @__PURE__ */ jsx11("div", { className: "hidden md:flex gap-6", children: topNavLinks.map((link) => /* @__PURE__ */ jsx11(
1459
1321
  Link,
1460
1322
  {
1461
1323
  href: link.href,
@@ -1469,21 +1331,21 @@ function DashboardLayoutInner({
1469
1331
  link.href
1470
1332
  )) })
1471
1333
  ] }),
1472
- /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-4", children: [
1473
- onNewSandbox && /* @__PURE__ */ jsxs11(
1334
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-4", children: [
1335
+ onNewSandbox && /* @__PURE__ */ jsxs10(
1474
1336
  "button",
1475
1337
  {
1476
1338
  type: "button",
1477
1339
  onClick: onNewSandbox,
1478
1340
  className: "hidden md:flex items-center gap-2 bg-[var(--btn-primary-bg)] border border-[var(--border-accent)] text-[var(--btn-primary-text)] px-4 py-2 rounded-lg font-bold hover:bg-[var(--btn-primary-hover)] transition-all active:scale-95 text-xs",
1479
1341
  children: [
1480
- /* @__PURE__ */ jsx13(Plus2, { className: "h-3.5 w-3.5" }),
1342
+ /* @__PURE__ */ jsx11(Plus2, { className: "h-3.5 w-3.5" }),
1481
1343
  "New Sandbox"
1482
1344
  ]
1483
1345
  }
1484
1346
  ),
1485
- /* @__PURE__ */ jsxs11("div", { className: "relative", ref: notifRef, children: [
1486
- /* @__PURE__ */ jsxs11(
1347
+ /* @__PURE__ */ jsxs10("div", { className: "relative", ref: notifRef, children: [
1348
+ /* @__PURE__ */ jsxs10(
1487
1349
  "button",
1488
1350
  {
1489
1351
  type: "button",
@@ -1492,15 +1354,15 @@ function DashboardLayoutInner({
1492
1354
  "aria-label": "Notifications",
1493
1355
  "aria-expanded": notificationsOpen,
1494
1356
  children: [
1495
- /* @__PURE__ */ jsx13(Bell, { className: "h-4 w-4" }),
1496
- (notifData?.unreadCount ?? 0) > 0 && /* @__PURE__ */ jsx13("span", { className: "absolute top-1 right-1 h-2 w-2 rounded-full bg-destructive" })
1357
+ /* @__PURE__ */ jsx11(Bell, { className: "h-4 w-4" }),
1358
+ (notifData?.unreadCount ?? 0) > 0 && /* @__PURE__ */ jsx11("span", { className: "absolute top-1 right-1 h-2 w-2 rounded-full bg-destructive" })
1497
1359
  ]
1498
1360
  }
1499
1361
  ),
1500
- notificationsOpen && /* @__PURE__ */ jsxs11("div", { className: "absolute right-0 top-full mt-2 w-80 rounded-lg border border-border bg-card shadow-lg z-50", children: [
1501
- /* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between border-b border-border px-4 py-3", children: [
1502
- /* @__PURE__ */ jsx13("p", { className: "font-bold text-foreground text-sm", children: "Notifications" }),
1503
- (notifData?.unreadCount ?? 0) > 0 && notifData?.onMarkAllRead && /* @__PURE__ */ jsx13(
1362
+ notificationsOpen && /* @__PURE__ */ jsxs10("div", { className: "absolute right-0 top-full mt-2 w-80 rounded-lg border border-border bg-card shadow-lg z-50", children: [
1363
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between border-b border-border px-4 py-3", children: [
1364
+ /* @__PURE__ */ jsx11("p", { className: "font-bold text-foreground text-sm", children: "Notifications" }),
1365
+ (notifData?.unreadCount ?? 0) > 0 && notifData?.onMarkAllRead && /* @__PURE__ */ jsx11(
1504
1366
  "button",
1505
1367
  {
1506
1368
  type: "button",
@@ -1512,11 +1374,11 @@ function DashboardLayoutInner({
1512
1374
  }
1513
1375
  )
1514
1376
  ] }),
1515
- !notifData?.items || notifData.items.length === 0 ? /* @__PURE__ */ jsxs11("div", { className: "flex flex-col items-center justify-center px-4 py-8 text-center", children: [
1516
- /* @__PURE__ */ jsx13(Bell, { className: "h-8 w-8 text-muted-foreground/40 mb-2" }),
1517
- /* @__PURE__ */ jsx13("p", { className: "text-muted-foreground text-sm", children: "No notifications yet" }),
1518
- /* @__PURE__ */ jsx13("p", { className: "text-muted-foreground/60 text-xs mt-1", children: "We'll notify you about important updates" })
1519
- ] }) : /* @__PURE__ */ jsx13("div", { className: "max-h-80 overflow-y-auto", children: notifData.items.map((n) => /* @__PURE__ */ jsxs11(
1377
+ !notifData?.items || notifData.items.length === 0 ? /* @__PURE__ */ jsxs10("div", { className: "flex flex-col items-center justify-center px-4 py-8 text-center", children: [
1378
+ /* @__PURE__ */ jsx11(Bell, { className: "h-8 w-8 text-muted-foreground/40 mb-2" }),
1379
+ /* @__PURE__ */ jsx11("p", { className: "text-muted-foreground text-sm", children: "No notifications yet" }),
1380
+ /* @__PURE__ */ jsx11("p", { className: "text-muted-foreground/60 text-xs mt-1", children: "We'll notify you about important updates" })
1381
+ ] }) : /* @__PURE__ */ jsx11("div", { className: "max-h-80 overflow-y-auto", children: notifData.items.map((n) => /* @__PURE__ */ jsxs10(
1520
1382
  "button",
1521
1383
  {
1522
1384
  type: "button",
@@ -1528,9 +1390,9 @@ function DashboardLayoutInner({
1528
1390
  if (!n.read) notifData.onMarkRead?.(n.id);
1529
1391
  },
1530
1392
  children: [
1531
- /* @__PURE__ */ jsx13("p", { className: cn("text-sm", !n.read ? "font-semibold text-foreground" : "text-muted-foreground"), children: n.title }),
1532
- /* @__PURE__ */ jsx13("p", { className: "text-xs text-muted-foreground mt-0.5 line-clamp-2", children: n.message }),
1533
- /* @__PURE__ */ jsx13("p", { className: "text-[10px] text-muted-foreground/50 mt-1", children: formatNotifDate(n.createdAt) })
1393
+ /* @__PURE__ */ jsx11("p", { className: cn("text-sm", !n.read ? "font-semibold text-foreground" : "text-muted-foreground"), children: n.title }),
1394
+ /* @__PURE__ */ jsx11("p", { className: "text-xs text-muted-foreground mt-0.5 line-clamp-2", children: n.message }),
1395
+ /* @__PURE__ */ jsx11("p", { className: "text-[10px] text-muted-foreground/50 mt-1", children: formatNotifDate(n.createdAt) })
1534
1396
  ]
1535
1397
  },
1536
1398
  n.id
@@ -1538,7 +1400,7 @@ function DashboardLayoutInner({
1538
1400
  ] })
1539
1401
  ] })
1540
1402
  ] }),
1541
- /* @__PURE__ */ jsx13(
1403
+ /* @__PURE__ */ jsx11(
1542
1404
  "button",
1543
1405
  {
1544
1406
  type: "button",
@@ -1546,14 +1408,14 @@ function DashboardLayoutInner({
1546
1408
  className: "rounded-md p-2 hover:bg-muted/50 lg:hidden",
1547
1409
  "aria-label": mobileMenuOpen ? "Close menu" : "Open menu",
1548
1410
  "aria-expanded": mobileMenuOpen,
1549
- children: mobileMenuOpen ? /* @__PURE__ */ jsx13(XIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ jsx13(MenuIcon, { className: "h-6 w-6" })
1411
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx11(XIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ jsx11(MenuIcon, { className: "h-6 w-6" })
1550
1412
  }
1551
1413
  )
1552
1414
  ]
1553
1415
  }
1554
1416
  ),
1555
- mobileMenuOpen && /* @__PURE__ */ jsx13("div", { className: "fixed inset-0 z-30 bg-black/50 lg:hidden", onClick: () => setMobileMenuOpen(false), "aria-hidden": "true" }),
1556
- /* @__PURE__ */ jsx13(
1417
+ mobileMenuOpen && /* @__PURE__ */ jsx11("div", { className: "fixed inset-0 z-30 bg-black/50 lg:hidden", onClick: () => setMobileMenuOpen(false), "aria-hidden": "true" }),
1418
+ /* @__PURE__ */ jsx11(
1557
1419
  "aside",
1558
1420
  {
1559
1421
  className: cn(
@@ -1566,17 +1428,17 @@ function DashboardLayoutInner({
1566
1428
  children: mobileSidebarContent
1567
1429
  }
1568
1430
  ),
1569
- /* @__PURE__ */ jsx13(Sidebar, { className: cn("hidden lg:flex", sidebarClassName), children: sidebarContent }),
1570
- /* @__PURE__ */ jsx13(SidebarContent, { className: cn("pt-16 px-6 pb-8 lg:px-8 bg-background", contentClassName), children }),
1431
+ /* @__PURE__ */ jsx11(Sidebar, { className: cn("hidden lg:flex", sidebarClassName), children: sidebarContent }),
1432
+ /* @__PURE__ */ jsx11(SidebarContent, { className: cn("pt-16 px-6 pb-8 lg:px-8 bg-background", contentClassName), children }),
1571
1433
  footer
1572
1434
  ] });
1573
1435
  }
1574
1436
  function DashboardLayout({ defaultPanelOpen, defaultMode, ...props }) {
1575
- return /* @__PURE__ */ jsx13(SidebarProvider, { defaultPanelOpen, defaultMode, hasPanels: (props.panels?.length ?? 0) > 0, children: /* @__PURE__ */ jsx13(DashboardLayoutInner, { defaultPanelOpen, defaultMode, ...props }) });
1437
+ return /* @__PURE__ */ jsx11(SidebarProvider, { defaultPanelOpen, defaultMode, hasPanels: (props.panels?.length ?? 0) > 0, children: /* @__PURE__ */ jsx11(DashboardLayoutInner, { defaultPanelOpen, defaultMode, ...props }) });
1576
1438
  }
1577
1439
 
1578
1440
  // src/dashboard/profile-selector.tsx
1579
- import { Check as Check2, ChevronDown as ChevronDown2, Plus as Plus3, Settings } from "lucide-react";
1441
+ import { Check as Check2, ChevronDown, Plus as Plus3, Settings } from "lucide-react";
1580
1442
  import { Button as Button2 } from "@tangle-network/ui/primitives";
1581
1443
  import { Badge } from "@tangle-network/ui/primitives";
1582
1444
  import {
@@ -1587,7 +1449,7 @@ import {
1587
1449
  DropdownMenuSeparator as DropdownMenuSeparator4,
1588
1450
  DropdownMenuTrigger as DropdownMenuTrigger4
1589
1451
  } from "@tangle-network/ui/primitives";
1590
- import { Fragment as Fragment8, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
1452
+ import { Fragment as Fragment8, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1591
1453
  function ProfileSelector({
1592
1454
  profiles,
1593
1455
  selectedId,
@@ -1602,77 +1464,77 @@ function ProfileSelector({
1602
1464
  const selected = profiles.find((p) => p.id === selectedId);
1603
1465
  const builtinProfiles = profiles.filter((p) => p.is_builtin);
1604
1466
  const customProfiles = profiles.filter((p) => !p.is_builtin);
1605
- return /* @__PURE__ */ jsxs12("div", { className, children: [
1606
- label && /* @__PURE__ */ jsx14("label", { className: "mb-2 block font-medium text-sm", children: label }),
1607
- /* @__PURE__ */ jsxs12(DropdownMenu4, { children: [
1608
- /* @__PURE__ */ jsx14(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsxs12(Button2, { variant: "outline", className: "w-full justify-between", children: [
1609
- /* @__PURE__ */ jsx14("span", { className: "truncate", children: selected ? selected.name : placeholder }),
1610
- /* @__PURE__ */ jsx14(ChevronDown2, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
1467
+ return /* @__PURE__ */ jsxs11("div", { className, children: [
1468
+ label && /* @__PURE__ */ jsx12("label", { className: "mb-2 block font-medium text-sm", children: label }),
1469
+ /* @__PURE__ */ jsxs11(DropdownMenu4, { children: [
1470
+ /* @__PURE__ */ jsx12(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsxs11(Button2, { variant: "outline", className: "w-full justify-between", children: [
1471
+ /* @__PURE__ */ jsx12("span", { className: "truncate", children: selected ? selected.name : placeholder }),
1472
+ /* @__PURE__ */ jsx12(ChevronDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
1611
1473
  ] }) }),
1612
- /* @__PURE__ */ jsxs12(DropdownMenuContent4, { className: "w-[300px]", align: "start", children: [
1613
- /* @__PURE__ */ jsxs12(
1474
+ /* @__PURE__ */ jsxs11(DropdownMenuContent4, { className: "w-[300px]", align: "start", children: [
1475
+ /* @__PURE__ */ jsxs11(
1614
1476
  DropdownMenuItem4,
1615
1477
  {
1616
1478
  onClick: () => onSelect(null),
1617
1479
  className: "flex items-center justify-between",
1618
1480
  children: [
1619
- /* @__PURE__ */ jsx14("span", { children: placeholder }),
1620
- !selectedId && /* @__PURE__ */ jsx14(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1481
+ /* @__PURE__ */ jsx12("span", { children: placeholder }),
1482
+ !selectedId && /* @__PURE__ */ jsx12(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1621
1483
  ]
1622
1484
  }
1623
1485
  ),
1624
- builtinProfiles.length > 0 && /* @__PURE__ */ jsxs12(Fragment8, { children: [
1625
- /* @__PURE__ */ jsx14(DropdownMenuSeparator4, {}),
1626
- /* @__PURE__ */ jsx14(DropdownMenuLabel2, { children: "Built-in Profiles" }),
1627
- builtinProfiles.map((profile) => /* @__PURE__ */ jsxs12(
1486
+ builtinProfiles.length > 0 && /* @__PURE__ */ jsxs11(Fragment8, { children: [
1487
+ /* @__PURE__ */ jsx12(DropdownMenuSeparator4, {}),
1488
+ /* @__PURE__ */ jsx12(DropdownMenuLabel2, { children: "Built-in Profiles" }),
1489
+ builtinProfiles.map((profile) => /* @__PURE__ */ jsxs11(
1628
1490
  DropdownMenuItem4,
1629
1491
  {
1630
1492
  onClick: () => onSelect(profile),
1631
1493
  className: "flex flex-col items-start gap-1",
1632
1494
  children: [
1633
- /* @__PURE__ */ jsxs12("div", { className: "flex w-full items-center justify-between", children: [
1634
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
1635
- /* @__PURE__ */ jsx14("span", { className: "font-medium", children: profile.name }),
1636
- profile.extends && /* @__PURE__ */ jsxs12(Badge, { variant: "secondary", className: "border-0 text-xs", children: [
1495
+ /* @__PURE__ */ jsxs11("div", { className: "flex w-full items-center justify-between", children: [
1496
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2", children: [
1497
+ /* @__PURE__ */ jsx12("span", { className: "font-medium", children: profile.name }),
1498
+ profile.extends && /* @__PURE__ */ jsxs11(Badge, { variant: "secondary", className: "border-0 text-xs", children: [
1637
1499
  "extends ",
1638
1500
  profile.extends
1639
1501
  ] })
1640
1502
  ] }),
1641
- selectedId === profile.id && /* @__PURE__ */ jsx14(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1503
+ selectedId === profile.id && /* @__PURE__ */ jsx12(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1642
1504
  ] }),
1643
- profile.description && /* @__PURE__ */ jsx14("span", { className: "line-clamp-1 text-muted-foreground text-xs", children: profile.description })
1505
+ profile.description && /* @__PURE__ */ jsx12("span", { className: "line-clamp-1 text-muted-foreground text-xs", children: profile.description })
1644
1506
  ]
1645
1507
  },
1646
1508
  profile.id
1647
1509
  ))
1648
1510
  ] }),
1649
- customProfiles.length > 0 && /* @__PURE__ */ jsxs12(Fragment8, { children: [
1650
- /* @__PURE__ */ jsx14(DropdownMenuSeparator4, {}),
1651
- /* @__PURE__ */ jsx14(DropdownMenuLabel2, { children: "Custom Profiles" }),
1652
- customProfiles.map((profile) => /* @__PURE__ */ jsxs12(
1511
+ customProfiles.length > 0 && /* @__PURE__ */ jsxs11(Fragment8, { children: [
1512
+ /* @__PURE__ */ jsx12(DropdownMenuSeparator4, {}),
1513
+ /* @__PURE__ */ jsx12(DropdownMenuLabel2, { children: "Custom Profiles" }),
1514
+ customProfiles.map((profile) => /* @__PURE__ */ jsxs11(
1653
1515
  DropdownMenuItem4,
1654
1516
  {
1655
1517
  onClick: () => onSelect(profile),
1656
1518
  className: "flex flex-col items-start gap-1",
1657
1519
  children: [
1658
- /* @__PURE__ */ jsxs12("div", { className: "flex w-full items-center justify-between", children: [
1659
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
1660
- /* @__PURE__ */ jsx14("span", { className: "font-medium", children: profile.name }),
1661
- profile.model && /* @__PURE__ */ jsx14(Badge, { variant: "secondary", className: "border-0 text-xs", children: profile.model.split("/").pop() })
1520
+ /* @__PURE__ */ jsxs11("div", { className: "flex w-full items-center justify-between", children: [
1521
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2", children: [
1522
+ /* @__PURE__ */ jsx12("span", { className: "font-medium", children: profile.name }),
1523
+ profile.model && /* @__PURE__ */ jsx12(Badge, { variant: "secondary", className: "border-0 text-xs", children: profile.model.split("/").pop() })
1662
1524
  ] }),
1663
- selectedId === profile.id && /* @__PURE__ */ jsx14(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1525
+ selectedId === profile.id && /* @__PURE__ */ jsx12(Check2, { className: "h-4 w-4 text-[var(--surface-success-text)]" })
1664
1526
  ] }),
1665
- profile.description && /* @__PURE__ */ jsx14("span", { className: "line-clamp-1 text-muted-foreground text-xs", children: profile.description }),
1666
- showMetrics && profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs12("div", { className: "flex gap-3 text-muted-foreground text-xs", children: [
1667
- /* @__PURE__ */ jsxs12("span", { children: [
1527
+ profile.description && /* @__PURE__ */ jsx12("span", { className: "line-clamp-1 text-muted-foreground text-xs", children: profile.description }),
1528
+ showMetrics && profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs11("div", { className: "flex gap-3 text-muted-foreground text-xs", children: [
1529
+ /* @__PURE__ */ jsxs11("span", { children: [
1668
1530
  profile.metrics.total_runs,
1669
1531
  " runs"
1670
1532
  ] }),
1671
- /* @__PURE__ */ jsxs12("span", { children: [
1533
+ /* @__PURE__ */ jsxs11("span", { children: [
1672
1534
  profile.metrics.success_rate.toFixed(0),
1673
1535
  "% success"
1674
1536
  ] }),
1675
- /* @__PURE__ */ jsxs12("span", { children: [
1537
+ /* @__PURE__ */ jsxs11("span", { children: [
1676
1538
  "~",
1677
1539
  (profile.metrics.avg_duration_ms / 1e3).toFixed(1),
1678
1540
  "s avg"
@@ -1683,26 +1545,26 @@ function ProfileSelector({
1683
1545
  profile.id
1684
1546
  ))
1685
1547
  ] }),
1686
- (onCreateClick || onManageClick) && /* @__PURE__ */ jsxs12(Fragment8, { children: [
1687
- /* @__PURE__ */ jsx14(DropdownMenuSeparator4, {}),
1688
- onCreateClick && /* @__PURE__ */ jsxs12(
1548
+ (onCreateClick || onManageClick) && /* @__PURE__ */ jsxs11(Fragment8, { children: [
1549
+ /* @__PURE__ */ jsx12(DropdownMenuSeparator4, {}),
1550
+ onCreateClick && /* @__PURE__ */ jsxs11(
1689
1551
  DropdownMenuItem4,
1690
1552
  {
1691
1553
  onClick: onCreateClick,
1692
1554
  className: "text-[var(--surface-info-text)]",
1693
1555
  children: [
1694
- /* @__PURE__ */ jsx14(Plus3, { className: "mr-2 h-4 w-4" }),
1556
+ /* @__PURE__ */ jsx12(Plus3, { className: "mr-2 h-4 w-4" }),
1695
1557
  "Create New Profile"
1696
1558
  ]
1697
1559
  }
1698
1560
  ),
1699
- onManageClick && /* @__PURE__ */ jsxs12(
1561
+ onManageClick && /* @__PURE__ */ jsxs11(
1700
1562
  DropdownMenuItem4,
1701
1563
  {
1702
1564
  onClick: onManageClick,
1703
1565
  className: "text-muted-foreground",
1704
1566
  children: [
1705
- /* @__PURE__ */ jsx14(Settings, { className: "mr-2 h-4 w-4" }),
1567
+ /* @__PURE__ */ jsx12(Settings, { className: "mr-2 h-4 w-4" }),
1706
1568
  "Manage Profiles"
1707
1569
  ]
1708
1570
  }
@@ -1728,26 +1590,26 @@ function ProfileComparison({
1728
1590
  const fastestProfile = profilesWithMetrics.reduce(
1729
1591
  (best, p) => (p.metrics?.avg_duration_ms ?? Number.POSITIVE_INFINITY) < (best.metrics?.avg_duration_ms ?? Number.POSITIVE_INFINITY) ? p : best
1730
1592
  );
1731
- return /* @__PURE__ */ jsxs12("div", { className: `rounded-lg border border-border p-4 ${className ?? ""}`, children: [
1732
- /* @__PURE__ */ jsx14("h4", { className: "mb-3 font-medium text-sm", children: "Profile Performance" }),
1733
- /* @__PURE__ */ jsx14("div", { className: "space-y-3", children: profilesWithMetrics.map((profile) => {
1593
+ return /* @__PURE__ */ jsxs11("div", { className: `rounded-lg border border-border p-4 ${className ?? ""}`, children: [
1594
+ /* @__PURE__ */ jsx12("h4", { className: "mb-3 font-medium text-sm", children: "Profile Performance" }),
1595
+ /* @__PURE__ */ jsx12("div", { className: "space-y-3", children: profilesWithMetrics.map((profile) => {
1734
1596
  const isBestSuccess = profile.id === bestSuccess.id;
1735
1597
  const isFastest = profile.id === fastestProfile.id;
1736
- return /* @__PURE__ */ jsxs12(
1598
+ return /* @__PURE__ */ jsxs11(
1737
1599
  "div",
1738
1600
  {
1739
1601
  className: "flex items-center justify-between gap-4",
1740
1602
  children: [
1741
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
1742
- /* @__PURE__ */ jsx14("span", { className: "font-medium", children: profile.name }),
1743
- isBestSuccess && /* @__PURE__ */ jsx14(Badge, { className: "border border-[var(--surface-success-border)] bg-[var(--surface-success-bg)] text-[var(--surface-success-text)] text-xs", children: "Best Success" }),
1744
- isFastest && !isBestSuccess && /* @__PURE__ */ jsx14(Badge, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)] text-xs", children: "Fastest" })
1603
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2", children: [
1604
+ /* @__PURE__ */ jsx12("span", { className: "font-medium", children: profile.name }),
1605
+ isBestSuccess && /* @__PURE__ */ jsx12(Badge, { className: "border border-[var(--surface-success-border)] bg-[var(--surface-success-bg)] text-[var(--surface-success-text)] text-xs", children: "Best Success" }),
1606
+ isFastest && !isBestSuccess && /* @__PURE__ */ jsx12(Badge, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)] text-xs", children: "Fastest" })
1745
1607
  ] }),
1746
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-4 text-sm", children: [
1747
- /* @__PURE__ */ jsxs12("span", { children: [
1748
- /* @__PURE__ */ jsx14("span", { className: "text-muted-foreground", children: "Success:" }),
1608
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-4 text-sm", children: [
1609
+ /* @__PURE__ */ jsxs11("span", { children: [
1610
+ /* @__PURE__ */ jsx12("span", { className: "text-muted-foreground", children: "Success:" }),
1749
1611
  " ",
1750
- /* @__PURE__ */ jsxs12(
1612
+ /* @__PURE__ */ jsxs11(
1751
1613
  "span",
1752
1614
  {
1753
1615
  className: (profile.metrics?.success_rate ?? 0) >= 80 ? "text-[var(--surface-success-text)]" : (profile.metrics?.success_rate ?? 0) >= 50 ? "text-[var(--surface-warning-text)]" : "text-[var(--surface-danger-text)]",
@@ -1758,13 +1620,13 @@ function ProfileComparison({
1758
1620
  }
1759
1621
  )
1760
1622
  ] }),
1761
- /* @__PURE__ */ jsxs12("span", { children: [
1762
- /* @__PURE__ */ jsx14("span", { className: "text-muted-foreground", children: "Avg:" }),
1623
+ /* @__PURE__ */ jsxs11("span", { children: [
1624
+ /* @__PURE__ */ jsx12("span", { className: "text-muted-foreground", children: "Avg:" }),
1763
1625
  " ",
1764
1626
  ((profile.metrics?.avg_duration_ms ?? 0) / 1e3).toFixed(1),
1765
1627
  "s"
1766
1628
  ] }),
1767
- /* @__PURE__ */ jsxs12("span", { className: "text-muted-foreground", children: [
1629
+ /* @__PURE__ */ jsxs11("span", { className: "text-muted-foreground", children: [
1768
1630
  profile.metrics?.total_runs,
1769
1631
  " runs"
1770
1632
  ] })
@@ -1790,7 +1652,7 @@ import {
1790
1652
  } from "lucide-react";
1791
1653
  import { Button as Button3 } from "@tangle-network/ui/primitives";
1792
1654
  import { Badge as Badge2 } from "@tangle-network/ui/primitives";
1793
- import { Fragment as Fragment9, jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
1655
+ import { Fragment as Fragment9, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1794
1656
  var statusConfig = {
1795
1657
  pending: {
1796
1658
  icon: Clock3,
@@ -1874,19 +1736,19 @@ function VariantList({
1874
1736
  isActioning,
1875
1737
  className
1876
1738
  }) {
1877
- return /* @__PURE__ */ jsx15("div", { className: `space-y-2 ${className || ""}`, children: variants.map((variant) => {
1739
+ return /* @__PURE__ */ jsx13("div", { className: `space-y-2 ${className || ""}`, children: variants.map((variant) => {
1878
1740
  const status = statusConfig[variant.status];
1879
1741
  const StatusIcon = status.icon;
1880
1742
  const isSelected = variant.id === selectedId;
1881
- return /* @__PURE__ */ jsxs13(
1743
+ return /* @__PURE__ */ jsxs12(
1882
1744
  "div",
1883
1745
  {
1884
1746
  className: `cursor-pointer rounded-lg border px-3 py-2.5 transition-colors ${isSelected ? "border-primary/30 bg-[var(--accent-surface-soft)]" : "border-border bg-card hover:border-primary/20 hover:bg-muted/50"}`,
1885
1747
  onClick: () => onSelect?.(variant.id),
1886
1748
  children: [
1887
- /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
1888
- /* @__PURE__ */ jsxs13(Badge2, { className: `shrink-0 ${status.bg} ${status.border} ${status.color}`, children: [
1889
- /* @__PURE__ */ jsx15(
1749
+ /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
1750
+ /* @__PURE__ */ jsxs12(Badge2, { className: `shrink-0 ${status.bg} ${status.border} ${status.color}`, children: [
1751
+ /* @__PURE__ */ jsx13(
1890
1752
  StatusIcon,
1891
1753
  {
1892
1754
  className: `mr-1 h-3 w-3 ${status.animate ? "animate-spin" : ""}`
@@ -1894,27 +1756,27 @@ function VariantList({
1894
1756
  ),
1895
1757
  status.label
1896
1758
  ] }),
1897
- /* @__PURE__ */ jsx15("span", { className: "truncate text-sm font-medium text-foreground", children: variant.label }),
1898
- variant.sublabel && /* @__PURE__ */ jsxs13("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
1759
+ /* @__PURE__ */ jsx13("span", { className: "truncate text-sm font-medium text-foreground", children: variant.label }),
1760
+ variant.sublabel && /* @__PURE__ */ jsxs12("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
1899
1761
  "(",
1900
1762
  variant.sublabel,
1901
1763
  ")"
1902
1764
  ] }),
1903
- variant.durationMs && /* @__PURE__ */ jsxs13("span", { className: "flex shrink-0 items-center gap-1 text-xs text-muted-foreground", children: [
1904
- /* @__PURE__ */ jsx15(Timer, { className: "h-3 w-3" }),
1765
+ variant.durationMs && /* @__PURE__ */ jsxs12("span", { className: "flex shrink-0 items-center gap-1 text-xs text-muted-foreground", children: [
1766
+ /* @__PURE__ */ jsx13(Timer, { className: "h-3 w-3" }),
1905
1767
  (variant.durationMs / 1e3).toFixed(1),
1906
1768
  "s"
1907
1769
  ] }),
1908
- /* @__PURE__ */ jsxs13("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
1909
- variant.outcome && /* @__PURE__ */ jsx15(
1770
+ /* @__PURE__ */ jsxs12("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
1771
+ variant.outcome && /* @__PURE__ */ jsx13(
1910
1772
  Badge2,
1911
1773
  {
1912
1774
  className: `${outcomeConfig[variant.outcome].bg} ${outcomeConfig[variant.outcome].border} ${outcomeConfig[variant.outcome].color}`,
1913
1775
  children: outcomeConfig[variant.outcome].label
1914
1776
  }
1915
1777
  ),
1916
- variant.status === "completed" && variant.outcome === "pending_review" && onAccept && onReject && /* @__PURE__ */ jsxs13(Fragment9, { children: [
1917
- /* @__PURE__ */ jsxs13(
1778
+ variant.status === "completed" && variant.outcome === "pending_review" && onAccept && onReject && /* @__PURE__ */ jsxs12(Fragment9, { children: [
1779
+ /* @__PURE__ */ jsxs12(
1918
1780
  Button3,
1919
1781
  {
1920
1782
  variant: "outline",
@@ -1926,12 +1788,12 @@ function VariantList({
1926
1788
  },
1927
1789
  disabled: isActioning === variant.id,
1928
1790
  children: [
1929
- /* @__PURE__ */ jsx15(Check3, { className: "mr-1 h-3 w-3" }),
1791
+ /* @__PURE__ */ jsx13(Check3, { className: "mr-1 h-3 w-3" }),
1930
1792
  "Accept"
1931
1793
  ]
1932
1794
  }
1933
1795
  ),
1934
- /* @__PURE__ */ jsxs13(
1796
+ /* @__PURE__ */ jsxs12(
1935
1797
  Button3,
1936
1798
  {
1937
1799
  variant: "outline",
@@ -1943,13 +1805,13 @@ function VariantList({
1943
1805
  },
1944
1806
  disabled: isActioning === variant.id,
1945
1807
  children: [
1946
- /* @__PURE__ */ jsx15(X, { className: "mr-1 h-3 w-3" }),
1808
+ /* @__PURE__ */ jsx13(X, { className: "mr-1 h-3 w-3" }),
1947
1809
  "Reject"
1948
1810
  ]
1949
1811
  }
1950
1812
  )
1951
1813
  ] }),
1952
- variant.detailsUrl && /* @__PURE__ */ jsx15(
1814
+ variant.detailsUrl && /* @__PURE__ */ jsx13(
1953
1815
  Button3,
1954
1816
  {
1955
1817
  variant: "ghost",
@@ -1959,13 +1821,13 @@ function VariantList({
1959
1821
  e.stopPropagation();
1960
1822
  window.open(variant.detailsUrl, "_blank");
1961
1823
  },
1962
- children: /* @__PURE__ */ jsx15(ExternalLink2, { className: "h-3.5 w-3.5" })
1824
+ children: /* @__PURE__ */ jsx13(ExternalLink2, { className: "h-3.5 w-3.5" })
1963
1825
  }
1964
1826
  )
1965
1827
  ] })
1966
1828
  ] }),
1967
- variant.error && /* @__PURE__ */ jsx15("p", { className: "mt-1.5 text-xs text-[var(--surface-danger-text)]", children: variant.error }),
1968
- variant.summary && /* @__PURE__ */ jsx15("p", { className: "mt-1.5 line-clamp-2 text-xs text-muted-foreground", children: variant.summary })
1829
+ variant.error && /* @__PURE__ */ jsx13("p", { className: "mt-1.5 text-xs text-[var(--surface-danger-text)]", children: variant.error }),
1830
+ variant.summary && /* @__PURE__ */ jsx13("p", { className: "mt-1.5 line-clamp-2 text-xs text-muted-foreground", children: variant.summary })
1969
1831
  ]
1970
1832
  },
1971
1833
  variant.id
@@ -1976,7 +1838,7 @@ function VariantList({
1976
1838
  // src/dashboard/system-logs.tsx
1977
1839
  import { Terminal as Terminal3 } from "lucide-react";
1978
1840
  import { useEffect as useEffect2, useRef as useRef2, useState as useState4 } from "react";
1979
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1841
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1980
1842
  function SystemLogsViewer({ apiUrl, token, className }) {
1981
1843
  const [logs, setLogs] = useState4([]);
1982
1844
  const [error, setError] = useState4(null);
@@ -2029,18 +1891,18 @@ function SystemLogsViewer({ apiUrl, token, className }) {
2029
1891
  const isAtBottom = scrollHeight - scrollTop - clientHeight < 20;
2030
1892
  setIsFollowing((prev) => prev === isAtBottom ? prev : isAtBottom);
2031
1893
  };
2032
- return /* @__PURE__ */ jsxs14("div", { className: cn("flex flex-col h-full bg-background text-foreground font-mono text-sm leading-relaxed overflow-hidden rounded-lg border border-border", className), children: [
2033
- /* @__PURE__ */ jsxs14("div", { className: "flex-none flex items-center justify-between border-b border-border bg-muted/50 backdrop-blur-md px-4 py-2", children: [
2034
- /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
2035
- /* @__PURE__ */ jsx16(Terminal3, { className: "h-4 w-4 text-primary animate-pulse" }),
2036
- /* @__PURE__ */ jsx16("span", { className: "font-bold text-xs uppercase tracking-widest text-muted-foreground", children: "System Traces" })
1894
+ return /* @__PURE__ */ jsxs13("div", { className: cn("flex flex-col h-full bg-background text-foreground font-mono text-sm leading-relaxed overflow-hidden rounded-lg border border-border", className), children: [
1895
+ /* @__PURE__ */ jsxs13("div", { className: "flex-none flex items-center justify-between border-b border-border bg-muted/50 backdrop-blur-md px-4 py-2", children: [
1896
+ /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
1897
+ /* @__PURE__ */ jsx14(Terminal3, { className: "h-4 w-4 text-primary animate-pulse" }),
1898
+ /* @__PURE__ */ jsx14("span", { className: "font-bold text-xs uppercase tracking-widest text-muted-foreground", children: "System Traces" })
2037
1899
  ] }),
2038
- /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3", children: [
2039
- error && /* @__PURE__ */ jsxs14("span", { className: "text-destructive text-xs flex items-center gap-1", children: [
2040
- /* @__PURE__ */ jsx16("span", { className: "w-2 h-2 rounded-full bg-destructive animate-ping" }),
1900
+ /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
1901
+ error && /* @__PURE__ */ jsxs13("span", { className: "text-destructive text-xs flex items-center gap-1", children: [
1902
+ /* @__PURE__ */ jsx14("span", { className: "w-2 h-2 rounded-full bg-destructive animate-ping" }),
2041
1903
  " Error fetching logs"
2042
1904
  ] }),
2043
- /* @__PURE__ */ jsx16(
1905
+ /* @__PURE__ */ jsx14(
2044
1906
  "button",
2045
1907
  {
2046
1908
  onClick: () => {
@@ -2055,29 +1917,29 @@ function SystemLogsViewer({ apiUrl, token, className }) {
2055
1917
  )
2056
1918
  ] })
2057
1919
  ] }),
2058
- /* @__PURE__ */ jsx16(
1920
+ /* @__PURE__ */ jsx14(
2059
1921
  "div",
2060
1922
  {
2061
1923
  ref: scrollRef,
2062
1924
  onScroll: handleScroll,
2063
1925
  className: "flex-1 overflow-y-auto p-4 space-y-1",
2064
- children: logs.length === 0 && !error ? /* @__PURE__ */ jsx16("div", { className: "flex h-full items-center justify-center text-muted-foreground italic", children: "Waiting for orchestrator logs..." }) : logs.map((log, i) => /* @__PURE__ */ jsxs14("div", { className: "break-words", children: [
2065
- /* @__PURE__ */ jsxs14("span", { className: "text-muted-foreground mr-3 select-none", children: [
1926
+ children: logs.length === 0 && !error ? /* @__PURE__ */ jsx14("div", { className: "flex h-full items-center justify-center text-muted-foreground italic", children: "Waiting for orchestrator logs..." }) : logs.map((log, i) => /* @__PURE__ */ jsxs13("div", { className: "break-words", children: [
1927
+ /* @__PURE__ */ jsxs13("span", { className: "text-muted-foreground mr-3 select-none", children: [
2066
1928
  "[",
2067
1929
  log.timestamp || i.toString().padStart(4, "0"),
2068
1930
  "]"
2069
1931
  ] }),
2070
- /* @__PURE__ */ jsxs14("span", { className: "text-primary/70 mr-2", children: [
1932
+ /* @__PURE__ */ jsxs13("span", { className: "text-primary/70 mr-2", children: [
2071
1933
  "[",
2072
1934
  log.level,
2073
1935
  "]"
2074
1936
  ] }),
2075
- /* @__PURE__ */ jsxs14("span", { className: "text-muted-foreground mr-2", children: [
1937
+ /* @__PURE__ */ jsxs13("span", { className: "text-muted-foreground mr-2", children: [
2076
1938
  "[",
2077
1939
  log.scope,
2078
1940
  "]"
2079
1941
  ] }),
2080
- /* @__PURE__ */ jsx16("span", { className: log.level.toUpperCase() === "ERROR" || log.message.toLowerCase().includes("failed") ? "text-destructive" : log.level.toUpperCase() === "WARN" ? "text-warning" : "text-foreground", children: log.message })
1942
+ /* @__PURE__ */ jsx14("span", { className: log.level.toUpperCase() === "ERROR" || log.message.toLowerCase().includes("failed") ? "text-destructive" : log.level.toUpperCase() === "WARN" ? "text-warning" : "text-foreground", children: log.message })
2081
1943
  ] }, `${log.timestamp}-${log.scope}-${i}`))
2082
1944
  }
2083
1945
  )
@@ -2088,50 +1950,50 @@ function SystemLogsViewer({ apiUrl, token, className }) {
2088
1950
  import { Clock as Clock4, Layers, MessageSquare, DollarSign } from "lucide-react";
2089
1951
  import { StatCard } from "@tangle-network/ui/primitives";
2090
1952
  import { Skeleton as Skeleton2 } from "@tangle-network/ui/primitives";
2091
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
1953
+ import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
2092
1954
  function UsageSummary({ data, loading = false, className }) {
2093
1955
  if (loading || !data) {
2094
- return /* @__PURE__ */ jsx17("div", { className: cn("grid grid-cols-2 gap-4 lg:grid-cols-4", className), children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsx17(Skeleton2, { className: "h-28 rounded-xl" }, i)) });
1956
+ return /* @__PURE__ */ jsx15("div", { className: cn("grid grid-cols-2 gap-4 lg:grid-cols-4", className), children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsx15(Skeleton2, { className: "h-28 rounded-xl" }, i)) });
2095
1957
  }
2096
- return /* @__PURE__ */ jsxs15("div", { className: cn("grid grid-cols-2 gap-4 lg:grid-cols-4", className), children: [
2097
- /* @__PURE__ */ jsx17(
1958
+ return /* @__PURE__ */ jsxs14("div", { className: cn("grid grid-cols-2 gap-4 lg:grid-cols-4", className), children: [
1959
+ /* @__PURE__ */ jsx15(
2098
1960
  StatCard,
2099
1961
  {
2100
1962
  variant: "sandbox",
2101
1963
  title: "Compute Hours",
2102
1964
  value: data.computeHours.toFixed(1),
2103
1965
  subtitle: "This billing period",
2104
- icon: /* @__PURE__ */ jsx17(Clock4, { className: "h-5 w-5" })
1966
+ icon: /* @__PURE__ */ jsx15(Clock4, { className: "h-5 w-5" })
2105
1967
  }
2106
1968
  ),
2107
- /* @__PURE__ */ jsx17(
1969
+ /* @__PURE__ */ jsx15(
2108
1970
  StatCard,
2109
1971
  {
2110
1972
  variant: "sandbox",
2111
1973
  title: "Active Sessions",
2112
1974
  value: data.activeSessions,
2113
1975
  subtitle: "Currently running",
2114
- icon: /* @__PURE__ */ jsx17(Layers, { className: "h-5 w-5" })
1976
+ icon: /* @__PURE__ */ jsx15(Layers, { className: "h-5 w-5" })
2115
1977
  }
2116
1978
  ),
2117
- /* @__PURE__ */ jsx17(
1979
+ /* @__PURE__ */ jsx15(
2118
1980
  StatCard,
2119
1981
  {
2120
1982
  variant: "sandbox",
2121
1983
  title: "Messages Sent",
2122
1984
  value: data.messagesSent.toLocaleString(),
2123
1985
  subtitle: "Agent interactions",
2124
- icon: /* @__PURE__ */ jsx17(MessageSquare, { className: "h-5 w-5" })
1986
+ icon: /* @__PURE__ */ jsx15(MessageSquare, { className: "h-5 w-5" })
2125
1987
  }
2126
1988
  ),
2127
- /* @__PURE__ */ jsx17(
1989
+ /* @__PURE__ */ jsx15(
2128
1990
  StatCard,
2129
1991
  {
2130
1992
  variant: "sandbox",
2131
1993
  title: "Estimated Cost",
2132
1994
  value: `$${data.estimatedCost.toFixed(2)}`,
2133
1995
  subtitle: "This billing period",
2134
- icon: /* @__PURE__ */ jsx17(DollarSign, { className: "h-5 w-5" })
1996
+ icon: /* @__PURE__ */ jsx15(DollarSign, { className: "h-5 w-5" })
2135
1997
  }
2136
1998
  )
2137
1999
  ] });
@@ -2139,66 +2001,66 @@ function UsageSummary({ data, loading = false, className }) {
2139
2001
 
2140
2002
  // src/dashboard/git-panel.tsx
2141
2003
  import { GitBranch, GitCommit, FileEdit, FilePlus, File } from "lucide-react";
2142
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2004
+ import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
2143
2005
  function GitPanel({ status, log, loading = false, onRefresh, className }) {
2144
2006
  if (loading) {
2145
- return /* @__PURE__ */ jsx18("div", { className: cn("rounded-lg border border-border bg-card p-5", className), children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
2146
- /* @__PURE__ */ jsx18("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }),
2007
+ return /* @__PURE__ */ jsx16("div", { className: cn("rounded-lg border border-border bg-card p-5", className), children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
2008
+ /* @__PURE__ */ jsx16("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }),
2147
2009
  "Loading git info..."
2148
2010
  ] }) });
2149
2011
  }
2150
2012
  if (!status) {
2151
- return /* @__PURE__ */ jsx18("div", { className: cn("rounded-lg border border-border bg-card p-5", className), children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
2152
- /* @__PURE__ */ jsx18(GitBranch, { className: "h-4 w-4" }),
2013
+ return /* @__PURE__ */ jsx16("div", { className: cn("rounded-lg border border-border bg-card p-5", className), children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
2014
+ /* @__PURE__ */ jsx16(GitBranch, { className: "h-4 w-4" }),
2153
2015
  "No git repository detected"
2154
2016
  ] }) });
2155
2017
  }
2156
2018
  const changedCount = status.staged.length + status.modified.length + status.untracked.length;
2157
- return /* @__PURE__ */ jsxs16("div", { className: cn("rounded-lg border border-border bg-card overflow-hidden", className), children: [
2158
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between border-b border-border bg-muted/30 px-4 py-3", children: [
2159
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
2160
- /* @__PURE__ */ jsx18(GitBranch, { className: "h-4 w-4 text-primary" }),
2161
- /* @__PURE__ */ jsx18("span", { className: "text-sm font-bold text-foreground", children: status.branch }),
2162
- status.isDirty && /* @__PURE__ */ jsxs16("span", { className: "rounded-full bg-[var(--surface-warning-bg)] px-1.5 py-0.5 text-[10px] font-bold text-[var(--surface-warning-text)]", children: [
2019
+ return /* @__PURE__ */ jsxs15("div", { className: cn("rounded-lg border border-border bg-card overflow-hidden", className), children: [
2020
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between border-b border-border bg-muted/30 px-4 py-3", children: [
2021
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
2022
+ /* @__PURE__ */ jsx16(GitBranch, { className: "h-4 w-4 text-primary" }),
2023
+ /* @__PURE__ */ jsx16("span", { className: "text-sm font-bold text-foreground", children: status.branch }),
2024
+ status.isDirty && /* @__PURE__ */ jsxs15("span", { className: "rounded-full bg-[var(--surface-warning-bg)] px-1.5 py-0.5 text-[10px] font-bold text-[var(--surface-warning-text)]", children: [
2163
2025
  changedCount,
2164
2026
  " change",
2165
2027
  changedCount !== 1 ? "s" : ""
2166
2028
  ] })
2167
2029
  ] }),
2168
- onRefresh && /* @__PURE__ */ jsx18("button", { type: "button", onClick: onRefresh, className: "text-xs text-muted-foreground hover:text-foreground transition-colors", children: "Refresh" })
2030
+ onRefresh && /* @__PURE__ */ jsx16("button", { type: "button", onClick: onRefresh, className: "text-xs text-muted-foreground hover:text-foreground transition-colors", children: "Refresh" })
2169
2031
  ] }),
2170
- changedCount > 0 && /* @__PURE__ */ jsx18("div", { className: "border-b border-border px-4 py-3", children: /* @__PURE__ */ jsxs16("div", { className: "space-y-1.5", children: [
2171
- status.staged.map((f) => /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-xs", children: [
2172
- /* @__PURE__ */ jsx18(FilePlus, { className: "h-3 w-3 text-[var(--surface-success-text)]" }),
2173
- /* @__PURE__ */ jsx18("span", { className: "font-mono text-foreground truncate", children: f }),
2174
- /* @__PURE__ */ jsx18("span", { className: "text-[var(--surface-success-text)] text-[10px] font-bold ml-auto", children: "STAGED" })
2032
+ changedCount > 0 && /* @__PURE__ */ jsx16("div", { className: "border-b border-border px-4 py-3", children: /* @__PURE__ */ jsxs15("div", { className: "space-y-1.5", children: [
2033
+ status.staged.map((f) => /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-xs", children: [
2034
+ /* @__PURE__ */ jsx16(FilePlus, { className: "h-3 w-3 text-[var(--surface-success-text)]" }),
2035
+ /* @__PURE__ */ jsx16("span", { className: "font-mono text-foreground truncate", children: f }),
2036
+ /* @__PURE__ */ jsx16("span", { className: "text-[var(--surface-success-text)] text-[10px] font-bold ml-auto", children: "STAGED" })
2175
2037
  ] }, `s-${f}`)),
2176
- status.modified.map((f) => /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-xs", children: [
2177
- /* @__PURE__ */ jsx18(FileEdit, { className: "h-3 w-3 text-[var(--surface-warning-text)]" }),
2178
- /* @__PURE__ */ jsx18("span", { className: "font-mono text-foreground truncate", children: f })
2038
+ status.modified.map((f) => /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-xs", children: [
2039
+ /* @__PURE__ */ jsx16(FileEdit, { className: "h-3 w-3 text-[var(--surface-warning-text)]" }),
2040
+ /* @__PURE__ */ jsx16("span", { className: "font-mono text-foreground truncate", children: f })
2179
2041
  ] }, `m-${f}`)),
2180
- status.untracked.map((f) => /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-xs", children: [
2181
- /* @__PURE__ */ jsx18(File, { className: "h-3 w-3 text-muted-foreground" }),
2182
- /* @__PURE__ */ jsx18("span", { className: "font-mono text-muted-foreground truncate", children: f })
2042
+ status.untracked.map((f) => /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-xs", children: [
2043
+ /* @__PURE__ */ jsx16(File, { className: "h-3 w-3 text-muted-foreground" }),
2044
+ /* @__PURE__ */ jsx16("span", { className: "font-mono text-muted-foreground truncate", children: f })
2183
2045
  ] }, `u-${f}`))
2184
2046
  ] }) }),
2185
- log.length > 0 && /* @__PURE__ */ jsxs16("div", { className: "px-4 py-3", children: [
2186
- /* @__PURE__ */ jsx18("div", { className: "mb-2 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Recent Commits" }),
2187
- /* @__PURE__ */ jsx18("div", { className: "space-y-2", children: log.slice(0, 5).map((commit) => /* @__PURE__ */ jsxs16("div", { className: "flex items-start gap-2 text-xs", children: [
2188
- /* @__PURE__ */ jsx18(GitCommit, { className: "h-3 w-3 text-muted-foreground mt-0.5 shrink-0" }),
2189
- /* @__PURE__ */ jsxs16("div", { className: "min-w-0", children: [
2190
- /* @__PURE__ */ jsx18("span", { className: "font-mono text-primary mr-1.5", children: commit.shortSha }),
2191
- /* @__PURE__ */ jsx18("span", { className: "text-foreground", children: commit.message })
2047
+ log.length > 0 && /* @__PURE__ */ jsxs15("div", { className: "px-4 py-3", children: [
2048
+ /* @__PURE__ */ jsx16("div", { className: "mb-2 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Recent Commits" }),
2049
+ /* @__PURE__ */ jsx16("div", { className: "space-y-2", children: log.slice(0, 5).map((commit) => /* @__PURE__ */ jsxs15("div", { className: "flex items-start gap-2 text-xs", children: [
2050
+ /* @__PURE__ */ jsx16(GitCommit, { className: "h-3 w-3 text-muted-foreground mt-0.5 shrink-0" }),
2051
+ /* @__PURE__ */ jsxs15("div", { className: "min-w-0", children: [
2052
+ /* @__PURE__ */ jsx16("span", { className: "font-mono text-primary mr-1.5", children: commit.shortSha }),
2053
+ /* @__PURE__ */ jsx16("span", { className: "text-foreground", children: commit.message })
2192
2054
  ] })
2193
2055
  ] }, commit.shortSha)) })
2194
2056
  ] }),
2195
- (status.ahead > 0 || status.behind > 0) && /* @__PURE__ */ jsxs16("div", { className: "border-t border-border px-4 py-2 flex items-center gap-3 text-xs text-muted-foreground", children: [
2196
- status.ahead > 0 && /* @__PURE__ */ jsxs16("span", { children: [
2057
+ (status.ahead > 0 || status.behind > 0) && /* @__PURE__ */ jsxs15("div", { className: "border-t border-border px-4 py-2 flex items-center gap-3 text-xs text-muted-foreground", children: [
2058
+ status.ahead > 0 && /* @__PURE__ */ jsxs15("span", { children: [
2197
2059
  "\u2191 ",
2198
2060
  status.ahead,
2199
2061
  " ahead"
2200
2062
  ] }),
2201
- status.behind > 0 && /* @__PURE__ */ jsxs16("span", { children: [
2063
+ status.behind > 0 && /* @__PURE__ */ jsxs15("span", { children: [
2202
2064
  "\u2193 ",
2203
2065
  status.behind,
2204
2066
  " behind"
@@ -2210,7 +2072,7 @@ function GitPanel({ status, log, loading = false, onRefresh, className }) {
2210
2072
  // src/dashboard/ports-list.tsx
2211
2073
  import * as React6 from "react";
2212
2074
  import { Copy as Copy3, Check as Check4, Globe, Plus as Plus4, Trash2 as Trash23 } from "lucide-react";
2213
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2075
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
2214
2076
  function PortsList({ ports, onExposePort, onRemovePort, isExposing = false, className }) {
2215
2077
  const [newPort, setNewPort] = React6.useState("");
2216
2078
  const [copiedPort, setCopiedPort] = React6.useState(null);
@@ -2237,48 +2099,48 @@ function PortsList({ ports, onExposePort, onRemovePort, isExposing = false, clas
2237
2099
  setNewPort("");
2238
2100
  }
2239
2101
  };
2240
- return /* @__PURE__ */ jsxs17("div", { className: cn("space-y-4", className), children: [
2241
- ports.length > 0 ? /* @__PURE__ */ jsx19("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs17("table", { className: "w-full text-sm", children: [
2242
- /* @__PURE__ */ jsx19("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs17("tr", { children: [
2243
- /* @__PURE__ */ jsx19("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Port" }),
2244
- /* @__PURE__ */ jsx19("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Public URL" }),
2245
- /* @__PURE__ */ jsx19("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Status" }),
2246
- /* @__PURE__ */ jsx19("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-20" })
2102
+ return /* @__PURE__ */ jsxs16("div", { className: cn("space-y-4", className), children: [
2103
+ ports.length > 0 ? /* @__PURE__ */ jsx17("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs16("table", { className: "w-full text-sm", children: [
2104
+ /* @__PURE__ */ jsx17("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs16("tr", { children: [
2105
+ /* @__PURE__ */ jsx17("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Port" }),
2106
+ /* @__PURE__ */ jsx17("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Public URL" }),
2107
+ /* @__PURE__ */ jsx17("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Status" }),
2108
+ /* @__PURE__ */ jsx17("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-20" })
2247
2109
  ] }) }),
2248
- /* @__PURE__ */ jsx19("tbody", { className: "divide-y divide-border", children: ports.map((p) => /* @__PURE__ */ jsxs17("tr", { children: [
2249
- /* @__PURE__ */ jsx19("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: p.port }),
2250
- /* @__PURE__ */ jsx19("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsxs17(
2110
+ /* @__PURE__ */ jsx17("tbody", { className: "divide-y divide-border", children: ports.map((p) => /* @__PURE__ */ jsxs16("tr", { children: [
2111
+ /* @__PURE__ */ jsx17("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: p.port }),
2112
+ /* @__PURE__ */ jsx17("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsxs16(
2251
2113
  "button",
2252
2114
  {
2253
2115
  type: "button",
2254
2116
  onClick: () => handleCopy(p.url, p.port),
2255
2117
  className: "flex items-center gap-2 font-mono text-xs text-primary hover:underline cursor-pointer group",
2256
2118
  children: [
2257
- /* @__PURE__ */ jsx19("span", { className: "truncate max-w-[300px]", children: p.url }),
2258
- copiedPort === p.port ? /* @__PURE__ */ jsx19(Check4, { className: "h-3 w-3 text-[var(--surface-success-text)] shrink-0" }) : /* @__PURE__ */ jsx19(Copy3, { className: "h-3 w-3 opacity-0 group-hover:opacity-100 transition-opacity shrink-0" })
2119
+ /* @__PURE__ */ jsx17("span", { className: "truncate max-w-[300px]", children: p.url }),
2120
+ copiedPort === p.port ? /* @__PURE__ */ jsx17(Check4, { className: "h-3 w-3 text-[var(--surface-success-text)] shrink-0" }) : /* @__PURE__ */ jsx17(Copy3, { className: "h-3 w-3 opacity-0 group-hover:opacity-100 transition-opacity shrink-0" })
2259
2121
  ]
2260
2122
  }
2261
2123
  ) }),
2262
- /* @__PURE__ */ jsx19("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsx19("span", { className: cn(
2124
+ /* @__PURE__ */ jsx17("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsx17("span", { className: cn(
2263
2125
  "inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider",
2264
2126
  p.status === "active" ? "bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]" : "bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]"
2265
2127
  ), children: p.status }) }),
2266
- /* @__PURE__ */ jsx19("td", { className: "px-4 py-3 text-right", children: onRemovePort && /* @__PURE__ */ jsx19(
2128
+ /* @__PURE__ */ jsx17("td", { className: "px-4 py-3 text-right", children: onRemovePort && /* @__PURE__ */ jsx17(
2267
2129
  "button",
2268
2130
  {
2269
2131
  type: "button",
2270
2132
  onClick: () => onRemovePort(p.port),
2271
2133
  className: "p-1 text-muted-foreground hover:text-destructive transition-colors rounded",
2272
- children: /* @__PURE__ */ jsx19(Trash23, { className: "h-3.5 w-3.5" })
2134
+ children: /* @__PURE__ */ jsx17(Trash23, { className: "h-3.5 w-3.5" })
2273
2135
  }
2274
2136
  ) })
2275
2137
  ] }, p.port)) })
2276
- ] }) }) : /* @__PURE__ */ jsxs17("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2277
- /* @__PURE__ */ jsx19(Globe, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2278
- /* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground", children: "No ports exposed yet" })
2138
+ ] }) }) : /* @__PURE__ */ jsxs16("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2139
+ /* @__PURE__ */ jsx17(Globe, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2140
+ /* @__PURE__ */ jsx17("p", { className: "text-sm text-muted-foreground", children: "No ports exposed yet" })
2279
2141
  ] }),
2280
- /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-3", children: [
2281
- /* @__PURE__ */ jsx19(
2142
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
2143
+ /* @__PURE__ */ jsx17(
2282
2144
  "input",
2283
2145
  {
2284
2146
  type: "number",
@@ -2291,7 +2153,7 @@ function PortsList({ ports, onExposePort, onRemovePort, isExposing = false, clas
2291
2153
  className: "flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2292
2154
  }
2293
2155
  ),
2294
- /* @__PURE__ */ jsxs17(
2156
+ /* @__PURE__ */ jsxs16(
2295
2157
  "button",
2296
2158
  {
2297
2159
  type: "button",
@@ -2299,7 +2161,7 @@ function PortsList({ ports, onExposePort, onRemovePort, isExposing = false, clas
2299
2161
  disabled: !newPort || isExposing,
2300
2162
  className: "inline-flex items-center gap-2 rounded-lg bg-primary/20 border border-primary/30 px-4 py-2 text-sm font-medium text-primary hover:bg-primary hover:text-primary-foreground transition-colors disabled:opacity-50",
2301
2163
  children: [
2302
- /* @__PURE__ */ jsx19(Plus4, { className: "h-4 w-4" }),
2164
+ /* @__PURE__ */ jsx17(Plus4, { className: "h-4 w-4" }),
2303
2165
  "Expose"
2304
2166
  ]
2305
2167
  }
@@ -2311,7 +2173,7 @@ function PortsList({ ports, onExposePort, onRemovePort, isExposing = false, clas
2311
2173
  // src/dashboard/process-list.tsx
2312
2174
  import * as React7 from "react";
2313
2175
  import { Activity as Activity3, Plus as Plus5, Skull, Terminal as Terminal4 } from "lucide-react";
2314
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
2176
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
2315
2177
  function formatUptime(startedAt) {
2316
2178
  if (!startedAt) return "-";
2317
2179
  const ms = Date.now() - new Date(startedAt).getTime();
@@ -2329,43 +2191,43 @@ function ProcessList({ processes, onSpawn, onKill, loading = false, className })
2329
2191
  setNewCommand("");
2330
2192
  }
2331
2193
  };
2332
- return /* @__PURE__ */ jsxs18("div", { className: cn("space-y-4", className), children: [
2333
- loading ? /* @__PURE__ */ jsxs18("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2334
- /* @__PURE__ */ jsx20(Activity3, { className: "mx-auto h-6 w-6 text-muted-foreground animate-spin mb-2" }),
2335
- /* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground", children: "Loading processes..." })
2336
- ] }) : processes.length > 0 ? /* @__PURE__ */ jsx20("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs18("table", { className: "w-full text-sm", children: [
2337
- /* @__PURE__ */ jsx20("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs18("tr", { children: [
2338
- /* @__PURE__ */ jsx20("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "PID" }),
2339
- /* @__PURE__ */ jsx20("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Command" }),
2340
- /* @__PURE__ */ jsx20("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Status" }),
2341
- /* @__PURE__ */ jsx20("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Uptime" }),
2342
- /* @__PURE__ */ jsx20("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-20" })
2194
+ return /* @__PURE__ */ jsxs17("div", { className: cn("space-y-4", className), children: [
2195
+ loading ? /* @__PURE__ */ jsxs17("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2196
+ /* @__PURE__ */ jsx18(Activity3, { className: "mx-auto h-6 w-6 text-muted-foreground animate-spin mb-2" }),
2197
+ /* @__PURE__ */ jsx18("p", { className: "text-sm text-muted-foreground", children: "Loading processes..." })
2198
+ ] }) : processes.length > 0 ? /* @__PURE__ */ jsx18("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs17("table", { className: "w-full text-sm", children: [
2199
+ /* @__PURE__ */ jsx18("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs17("tr", { children: [
2200
+ /* @__PURE__ */ jsx18("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "PID" }),
2201
+ /* @__PURE__ */ jsx18("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Command" }),
2202
+ /* @__PURE__ */ jsx18("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Status" }),
2203
+ /* @__PURE__ */ jsx18("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Uptime" }),
2204
+ /* @__PURE__ */ jsx18("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-20" })
2343
2205
  ] }) }),
2344
- /* @__PURE__ */ jsx20("tbody", { className: "divide-y divide-border", children: processes.map((p) => /* @__PURE__ */ jsxs18("tr", { children: [
2345
- /* @__PURE__ */ jsx20("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: p.pid }),
2346
- /* @__PURE__ */ jsx20("td", { className: "px-4 py-3 font-mono text-xs text-foreground truncate max-w-[250px]", children: p.command }),
2347
- /* @__PURE__ */ jsx20("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsx20("span", { className: cn(
2206
+ /* @__PURE__ */ jsx18("tbody", { className: "divide-y divide-border", children: processes.map((p) => /* @__PURE__ */ jsxs17("tr", { children: [
2207
+ /* @__PURE__ */ jsx18("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: p.pid }),
2208
+ /* @__PURE__ */ jsx18("td", { className: "px-4 py-3 font-mono text-xs text-foreground truncate max-w-[250px]", children: p.command }),
2209
+ /* @__PURE__ */ jsx18("td", { className: "px-4 py-3", children: /* @__PURE__ */ jsx18("span", { className: cn(
2348
2210
  "inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider",
2349
2211
  p.running ? "bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]" : "bg-muted text-muted-foreground"
2350
2212
  ), children: p.running ? "running" : `exited (${p.exitCode ?? "?"})` }) }),
2351
- /* @__PURE__ */ jsx20("td", { className: "px-4 py-3 font-mono text-xs text-muted-foreground", children: formatUptime(p.startedAt) }),
2352
- /* @__PURE__ */ jsx20("td", { className: "px-4 py-3 text-right", children: p.running && /* @__PURE__ */ jsx20(
2213
+ /* @__PURE__ */ jsx18("td", { className: "px-4 py-3 font-mono text-xs text-muted-foreground", children: formatUptime(p.startedAt) }),
2214
+ /* @__PURE__ */ jsx18("td", { className: "px-4 py-3 text-right", children: p.running && /* @__PURE__ */ jsx18(
2353
2215
  "button",
2354
2216
  {
2355
2217
  type: "button",
2356
2218
  onClick: () => onKill(p.pid),
2357
2219
  className: "p-1 text-muted-foreground hover:text-destructive transition-colors rounded",
2358
2220
  title: "Kill process",
2359
- children: /* @__PURE__ */ jsx20(Skull, { className: "h-3.5 w-3.5" })
2221
+ children: /* @__PURE__ */ jsx18(Skull, { className: "h-3.5 w-3.5" })
2360
2222
  }
2361
2223
  ) })
2362
2224
  ] }, `${p.pid}-${p.startedAt ?? p.command}`)) })
2363
- ] }) }) : /* @__PURE__ */ jsxs18("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2364
- /* @__PURE__ */ jsx20(Terminal4, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2365
- /* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground", children: "No processes running" })
2225
+ ] }) }) : /* @__PURE__ */ jsxs17("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2226
+ /* @__PURE__ */ jsx18(Terminal4, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2227
+ /* @__PURE__ */ jsx18("p", { className: "text-sm text-muted-foreground", children: "No processes running" })
2366
2228
  ] }),
2367
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3", children: [
2368
- /* @__PURE__ */ jsx20(
2229
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-3", children: [
2230
+ /* @__PURE__ */ jsx18(
2369
2231
  "input",
2370
2232
  {
2371
2233
  type: "text",
@@ -2376,7 +2238,7 @@ function ProcessList({ processes, onSpawn, onKill, loading = false, className })
2376
2238
  className: "flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm font-mono text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2377
2239
  }
2378
2240
  ),
2379
- /* @__PURE__ */ jsxs18(
2241
+ /* @__PURE__ */ jsxs17(
2380
2242
  "button",
2381
2243
  {
2382
2244
  type: "button",
@@ -2384,7 +2246,7 @@ function ProcessList({ processes, onSpawn, onKill, loading = false, className })
2384
2246
  disabled: !newCommand.trim(),
2385
2247
  className: "inline-flex items-center gap-2 rounded-lg bg-primary/20 border border-primary/30 px-4 py-2 text-sm font-medium text-primary hover:bg-primary hover:text-primary-foreground transition-colors disabled:opacity-50",
2386
2248
  children: [
2387
- /* @__PURE__ */ jsx20(Plus5, { className: "h-4 w-4" }),
2249
+ /* @__PURE__ */ jsx18(Plus5, { className: "h-4 w-4" }),
2388
2250
  "Spawn"
2389
2251
  ]
2390
2252
  }
@@ -2396,7 +2258,7 @@ function ProcessList({ processes, onSpawn, onKill, loading = false, className })
2396
2258
  // src/dashboard/network-config.tsx
2397
2259
  import * as React8 from "react";
2398
2260
  import { Network as Network2, Plus as Plus6, Trash2 as Trash24, ShieldAlert } from "lucide-react";
2399
- import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
2261
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
2400
2262
  function NetworkConfig({ config, onUpdate, loading = false, className }) {
2401
2263
  const [newCidr, setNewCidr] = React8.useState("");
2402
2264
  const isValidCidr = (value) => {
@@ -2419,21 +2281,21 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2419
2281
  }
2420
2282
  };
2421
2283
  if (loading || !config) {
2422
- return /* @__PURE__ */ jsxs19("div", { className: cn("rounded-lg border border-border bg-muted/20 p-6 text-center", className), children: [
2423
- /* @__PURE__ */ jsx21(Network2, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2424
- /* @__PURE__ */ jsx21("p", { className: "text-sm text-muted-foreground", children: "Loading network configuration..." })
2284
+ return /* @__PURE__ */ jsxs18("div", { className: cn("rounded-lg border border-border bg-muted/20 p-6 text-center", className), children: [
2285
+ /* @__PURE__ */ jsx19(Network2, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2286
+ /* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground", children: "Loading network configuration..." })
2425
2287
  ] });
2426
2288
  }
2427
- return /* @__PURE__ */ jsxs19("div", { className: cn("space-y-4", className), children: [
2428
- /* @__PURE__ */ jsxs19("div", { className: "flex items-center justify-between rounded-lg border border-border bg-card px-4 py-3", children: [
2429
- /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-3", children: [
2430
- /* @__PURE__ */ jsx21(ShieldAlert, { className: "h-4 w-4 text-muted-foreground" }),
2431
- /* @__PURE__ */ jsxs19("div", { children: [
2432
- /* @__PURE__ */ jsx21("p", { className: "text-sm font-medium text-foreground", children: "Block Outbound Traffic" }),
2433
- /* @__PURE__ */ jsx21("p", { className: "text-xs text-muted-foreground", children: "Prevent the sandbox from making external network requests" })
2289
+ return /* @__PURE__ */ jsxs18("div", { className: cn("space-y-4", className), children: [
2290
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between rounded-lg border border-border bg-card px-4 py-3", children: [
2291
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3", children: [
2292
+ /* @__PURE__ */ jsx19(ShieldAlert, { className: "h-4 w-4 text-muted-foreground" }),
2293
+ /* @__PURE__ */ jsxs18("div", { children: [
2294
+ /* @__PURE__ */ jsx19("p", { className: "text-sm font-medium text-foreground", children: "Block Outbound Traffic" }),
2295
+ /* @__PURE__ */ jsx19("p", { className: "text-xs text-muted-foreground", children: "Prevent the sandbox from making external network requests" })
2434
2296
  ] })
2435
2297
  ] }),
2436
- /* @__PURE__ */ jsx21(
2298
+ /* @__PURE__ */ jsx19(
2437
2299
  "button",
2438
2300
  {
2439
2301
  type: "button",
@@ -2445,7 +2307,7 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2445
2307
  "relative inline-flex h-6 w-11 items-center rounded-full transition-colors",
2446
2308
  config.blockOutbound ? "bg-destructive" : "bg-muted"
2447
2309
  ),
2448
- children: /* @__PURE__ */ jsx21(
2310
+ children: /* @__PURE__ */ jsx19(
2449
2311
  "span",
2450
2312
  {
2451
2313
  className: cn(
@@ -2457,22 +2319,22 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2457
2319
  }
2458
2320
  )
2459
2321
  ] }),
2460
- /* @__PURE__ */ jsxs19("div", { children: [
2461
- /* @__PURE__ */ jsx21("h4", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wider", children: "Allowlist (CIDR)" }),
2462
- config.allowList.length > 0 ? /* @__PURE__ */ jsx21("div", { className: "space-y-1.5 mb-3", children: config.allowList.map((cidr) => /* @__PURE__ */ jsxs19("div", { className: "flex items-center justify-between rounded border border-border bg-muted/20 px-3 py-2", children: [
2463
- /* @__PURE__ */ jsx21("span", { className: "font-mono text-xs text-foreground", children: cidr }),
2464
- /* @__PURE__ */ jsx21(
2322
+ /* @__PURE__ */ jsxs18("div", { children: [
2323
+ /* @__PURE__ */ jsx19("h4", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wider", children: "Allowlist (CIDR)" }),
2324
+ config.allowList.length > 0 ? /* @__PURE__ */ jsx19("div", { className: "space-y-1.5 mb-3", children: config.allowList.map((cidr) => /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between rounded border border-border bg-muted/20 px-3 py-2", children: [
2325
+ /* @__PURE__ */ jsx19("span", { className: "font-mono text-xs text-foreground", children: cidr }),
2326
+ /* @__PURE__ */ jsx19(
2465
2327
  "button",
2466
2328
  {
2467
2329
  type: "button",
2468
2330
  onClick: () => handleRemoveCidr(cidr),
2469
2331
  className: "p-1 text-muted-foreground hover:text-destructive transition-colors rounded",
2470
- children: /* @__PURE__ */ jsx21(Trash24, { className: "h-3 w-3" })
2332
+ children: /* @__PURE__ */ jsx19(Trash24, { className: "h-3 w-3" })
2471
2333
  }
2472
2334
  )
2473
- ] }, cidr)) }) : /* @__PURE__ */ jsx21("p", { className: "text-xs text-muted-foreground mb-3", children: "No CIDR rules configured. All traffic is allowed." }),
2474
- /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-3", children: [
2475
- /* @__PURE__ */ jsx21(
2335
+ ] }, cidr)) }) : /* @__PURE__ */ jsx19("p", { className: "text-xs text-muted-foreground mb-3", children: "No CIDR rules configured. All traffic is allowed." }),
2336
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3", children: [
2337
+ /* @__PURE__ */ jsx19(
2476
2338
  "input",
2477
2339
  {
2478
2340
  type: "text",
@@ -2483,7 +2345,7 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2483
2345
  className: "flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm font-mono text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2484
2346
  }
2485
2347
  ),
2486
- /* @__PURE__ */ jsxs19(
2348
+ /* @__PURE__ */ jsxs18(
2487
2349
  "button",
2488
2350
  {
2489
2351
  type: "button",
@@ -2491,7 +2353,7 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2491
2353
  disabled: !newCidr.trim(),
2492
2354
  className: "inline-flex items-center gap-2 rounded-lg bg-primary/20 border border-primary/30 px-4 py-2 text-sm font-medium text-primary hover:bg-primary hover:text-primary-foreground transition-colors disabled:opacity-50",
2493
2355
  children: [
2494
- /* @__PURE__ */ jsx21(Plus6, { className: "h-4 w-4" }),
2356
+ /* @__PURE__ */ jsx19(Plus6, { className: "h-4 w-4" }),
2495
2357
  "Add"
2496
2358
  ]
2497
2359
  }
@@ -2504,7 +2366,7 @@ function NetworkConfig({ config, onUpdate, loading = false, className }) {
2504
2366
  // src/dashboard/backend-config.tsx
2505
2367
  import * as React9 from "react";
2506
2368
  import { Bot, Plus as Plus7, RefreshCw as RefreshCw2, Trash2 as Trash25, Server, Wrench } from "lucide-react";
2507
- import { Fragment as Fragment10, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
2369
+ import { Fragment as Fragment10, jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
2508
2370
  function BackendConfig({
2509
2371
  status,
2510
2372
  mcpServers,
@@ -2534,91 +2396,91 @@ function BackendConfig({
2534
2396
  }
2535
2397
  };
2536
2398
  if (loading || !status) {
2537
- return /* @__PURE__ */ jsxs20("div", { className: cn("rounded-lg border border-border bg-muted/20 p-6 text-center", className), children: [
2538
- /* @__PURE__ */ jsx22(Bot, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2539
- /* @__PURE__ */ jsx22("p", { className: "text-sm text-muted-foreground", children: "Loading backend status..." })
2399
+ return /* @__PURE__ */ jsxs19("div", { className: cn("rounded-lg border border-border bg-muted/20 p-6 text-center", className), children: [
2400
+ /* @__PURE__ */ jsx20(Bot, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2401
+ /* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground", children: "Loading backend status..." })
2540
2402
  ] });
2541
2403
  }
2542
- return /* @__PURE__ */ jsxs20("div", { className: cn("space-y-4", className), children: [
2543
- /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [
2544
- /* @__PURE__ */ jsxs20("div", { className: "px-4 py-3 border-b border-border bg-muted/30 flex items-center justify-between", children: [
2545
- /* @__PURE__ */ jsx22("h4", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: "Agent Status" }),
2546
- /* @__PURE__ */ jsxs20(
2404
+ return /* @__PURE__ */ jsxs19("div", { className: cn("space-y-4", className), children: [
2405
+ /* @__PURE__ */ jsxs19("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [
2406
+ /* @__PURE__ */ jsxs19("div", { className: "px-4 py-3 border-b border-border bg-muted/30 flex items-center justify-between", children: [
2407
+ /* @__PURE__ */ jsx20("h4", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: "Agent Status" }),
2408
+ /* @__PURE__ */ jsxs19(
2547
2409
  "button",
2548
2410
  {
2549
2411
  type: "button",
2550
2412
  onClick: onRestart,
2551
2413
  className: "inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-foreground hover:bg-muted/80 transition-colors border border-border",
2552
2414
  children: [
2553
- /* @__PURE__ */ jsx22(RefreshCw2, { className: "h-3 w-3" }),
2415
+ /* @__PURE__ */ jsx20(RefreshCw2, { className: "h-3 w-3" }),
2554
2416
  "Restart"
2555
2417
  ]
2556
2418
  }
2557
2419
  )
2558
2420
  ] }),
2559
- /* @__PURE__ */ jsx22("div", { className: "p-4", children: /* @__PURE__ */ jsxs20("dl", { className: "grid grid-cols-[100px_1fr] gap-y-3 text-sm", children: [
2560
- /* @__PURE__ */ jsx22("dt", { className: "text-muted-foreground", children: "Status" }),
2561
- /* @__PURE__ */ jsx22("dd", { children: /* @__PURE__ */ jsx22("span", { className: cn(
2421
+ /* @__PURE__ */ jsx20("div", { className: "p-4", children: /* @__PURE__ */ jsxs19("dl", { className: "grid grid-cols-[100px_1fr] gap-y-3 text-sm", children: [
2422
+ /* @__PURE__ */ jsx20("dt", { className: "text-muted-foreground", children: "Status" }),
2423
+ /* @__PURE__ */ jsx20("dd", { children: /* @__PURE__ */ jsx20("span", { className: cn(
2562
2424
  "inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider",
2563
2425
  status.running ? "bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]" : "bg-destructive/10 text-destructive"
2564
2426
  ), children: status.running ? "Running" : "Stopped" }) }),
2565
- /* @__PURE__ */ jsx22("dt", { className: "text-muted-foreground", children: "Model" }),
2566
- /* @__PURE__ */ jsx22("dd", { className: "font-mono text-xs", children: status.model ?? "Default" }),
2567
- status.provider && /* @__PURE__ */ jsxs20(Fragment10, { children: [
2568
- /* @__PURE__ */ jsx22("dt", { className: "text-muted-foreground", children: "Provider" }),
2569
- /* @__PURE__ */ jsx22("dd", { className: "font-mono text-xs", children: status.provider })
2427
+ /* @__PURE__ */ jsx20("dt", { className: "text-muted-foreground", children: "Model" }),
2428
+ /* @__PURE__ */ jsx20("dd", { className: "font-mono text-xs", children: status.model ?? "Default" }),
2429
+ status.provider && /* @__PURE__ */ jsxs19(Fragment10, { children: [
2430
+ /* @__PURE__ */ jsx20("dt", { className: "text-muted-foreground", children: "Provider" }),
2431
+ /* @__PURE__ */ jsx20("dd", { className: "font-mono text-xs", children: status.provider })
2570
2432
  ] })
2571
2433
  ] }) })
2572
2434
  ] }),
2573
- /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [
2574
- /* @__PURE__ */ jsxs20("div", { className: "px-4 py-3 border-b border-border bg-muted/30 flex items-center justify-between", children: [
2575
- /* @__PURE__ */ jsxs20("h4", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-2", children: [
2576
- /* @__PURE__ */ jsx22(Wrench, { className: "h-3.5 w-3.5" }),
2435
+ /* @__PURE__ */ jsxs19("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [
2436
+ /* @__PURE__ */ jsxs19("div", { className: "px-4 py-3 border-b border-border bg-muted/30 flex items-center justify-between", children: [
2437
+ /* @__PURE__ */ jsxs19("h4", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-2", children: [
2438
+ /* @__PURE__ */ jsx20(Wrench, { className: "h-3.5 w-3.5" }),
2577
2439
  "MCP Servers"
2578
2440
  ] }),
2579
- /* @__PURE__ */ jsxs20(
2441
+ /* @__PURE__ */ jsxs19(
2580
2442
  "button",
2581
2443
  {
2582
2444
  type: "button",
2583
2445
  onClick: () => setShowAddMcp(!showAddMcp),
2584
2446
  className: "inline-flex items-center gap-1.5 rounded-md bg-primary/20 border border-primary/30 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary hover:text-primary-foreground transition-colors",
2585
2447
  children: [
2586
- /* @__PURE__ */ jsx22(Plus7, { className: "h-3 w-3" }),
2448
+ /* @__PURE__ */ jsx20(Plus7, { className: "h-3 w-3" }),
2587
2449
  "Add"
2588
2450
  ]
2589
2451
  }
2590
2452
  )
2591
2453
  ] }),
2592
- mcpServers.length > 0 ? /* @__PURE__ */ jsx22("div", { className: "divide-y divide-border", children: mcpServers.map((s) => /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between px-4 py-3", children: [
2593
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-3 min-w-0", children: [
2594
- /* @__PURE__ */ jsx22(Server, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }),
2595
- /* @__PURE__ */ jsxs20("div", { className: "min-w-0", children: [
2596
- /* @__PURE__ */ jsx22("p", { className: "text-sm font-medium text-foreground truncate", children: s.name }),
2597
- /* @__PURE__ */ jsxs20("p", { className: "text-xs font-mono text-muted-foreground truncate", children: [
2454
+ mcpServers.length > 0 ? /* @__PURE__ */ jsx20("div", { className: "divide-y divide-border", children: mcpServers.map((s) => /* @__PURE__ */ jsxs19("div", { className: "flex items-center justify-between px-4 py-3", children: [
2455
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-3 min-w-0", children: [
2456
+ /* @__PURE__ */ jsx20(Server, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }),
2457
+ /* @__PURE__ */ jsxs19("div", { className: "min-w-0", children: [
2458
+ /* @__PURE__ */ jsx20("p", { className: "text-sm font-medium text-foreground truncate", children: s.name }),
2459
+ /* @__PURE__ */ jsxs19("p", { className: "text-xs font-mono text-muted-foreground truncate", children: [
2598
2460
  s.command,
2599
2461
  " ",
2600
2462
  s.args?.join(" ") ?? ""
2601
2463
  ] })
2602
2464
  ] })
2603
2465
  ] }),
2604
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2 shrink-0", children: [
2605
- s.status && /* @__PURE__ */ jsx22("span", { className: cn(
2466
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2 shrink-0", children: [
2467
+ s.status && /* @__PURE__ */ jsx20("span", { className: cn(
2606
2468
  "inline-flex items-center rounded-full px-1.5 py-0.5 text-[9px] font-bold uppercase",
2607
2469
  s.status === "running" ? "bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]" : s.status === "error" ? "bg-destructive/10 text-destructive" : "bg-muted text-muted-foreground"
2608
2470
  ), children: s.status }),
2609
- /* @__PURE__ */ jsx22(
2471
+ /* @__PURE__ */ jsx20(
2610
2472
  "button",
2611
2473
  {
2612
2474
  type: "button",
2613
2475
  onClick: () => onRemoveMcp(s.name),
2614
2476
  className: "p-1 text-muted-foreground hover:text-destructive transition-colors rounded",
2615
- children: /* @__PURE__ */ jsx22(Trash25, { className: "h-3.5 w-3.5" })
2477
+ children: /* @__PURE__ */ jsx20(Trash25, { className: "h-3.5 w-3.5" })
2616
2478
  }
2617
2479
  )
2618
2480
  ] })
2619
- ] }, s.name)) }) : /* @__PURE__ */ jsx22("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground", children: "No MCP servers configured" }) }),
2620
- showAddMcp && /* @__PURE__ */ jsxs20("div", { className: "p-4 border-t border-border bg-muted/10 space-y-2", children: [
2621
- /* @__PURE__ */ jsx22(
2481
+ ] }, s.name)) }) : /* @__PURE__ */ jsx20("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx20("p", { className: "text-xs text-muted-foreground", children: "No MCP servers configured" }) }),
2482
+ showAddMcp && /* @__PURE__ */ jsxs19("div", { className: "p-4 border-t border-border bg-muted/10 space-y-2", children: [
2483
+ /* @__PURE__ */ jsx20(
2622
2484
  "input",
2623
2485
  {
2624
2486
  type: "text",
@@ -2628,7 +2490,7 @@ function BackendConfig({
2628
2490
  className: "w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2629
2491
  }
2630
2492
  ),
2631
- /* @__PURE__ */ jsx22(
2493
+ /* @__PURE__ */ jsx20(
2632
2494
  "input",
2633
2495
  {
2634
2496
  type: "text",
@@ -2638,7 +2500,7 @@ function BackendConfig({
2638
2500
  className: "w-full rounded-lg border border-border bg-background px-3 py-2 text-sm font-mono text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2639
2501
  }
2640
2502
  ),
2641
- /* @__PURE__ */ jsx22(
2503
+ /* @__PURE__ */ jsx20(
2642
2504
  "input",
2643
2505
  {
2644
2506
  type: "text",
@@ -2648,8 +2510,8 @@ function BackendConfig({
2648
2510
  className: "w-full rounded-lg border border-border bg-background px-3 py-2 text-sm font-mono text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2649
2511
  }
2650
2512
  ),
2651
- /* @__PURE__ */ jsxs20("div", { className: "flex justify-end gap-2 pt-1", children: [
2652
- /* @__PURE__ */ jsx22(
2513
+ /* @__PURE__ */ jsxs19("div", { className: "flex justify-end gap-2 pt-1", children: [
2514
+ /* @__PURE__ */ jsx20(
2653
2515
  "button",
2654
2516
  {
2655
2517
  type: "button",
@@ -2658,7 +2520,7 @@ function BackendConfig({
2658
2520
  children: "Cancel"
2659
2521
  }
2660
2522
  ),
2661
- /* @__PURE__ */ jsx22(
2523
+ /* @__PURE__ */ jsx20(
2662
2524
  "button",
2663
2525
  {
2664
2526
  type: "button",
@@ -2677,7 +2539,7 @@ function BackendConfig({
2677
2539
  // src/dashboard/snapshot-list.tsx
2678
2540
  import * as React10 from "react";
2679
2541
  import { Camera, Clock as Clock5, HardDrive, Plus as Plus8, RotateCcw } from "lucide-react";
2680
- import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
2542
+ import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
2681
2543
  function formatBytes(bytes) {
2682
2544
  if (bytes == null || bytes < 0) return "-";
2683
2545
  if (bytes === 0) return "0 B";
@@ -2700,25 +2562,25 @@ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loadin
2700
2562
  setTags("");
2701
2563
  setShowCreate(false);
2702
2564
  };
2703
- return /* @__PURE__ */ jsxs21("div", { className: cn("space-y-4", className), children: [
2704
- /* @__PURE__ */ jsxs21("div", { className: "flex items-center justify-between", children: [
2705
- /* @__PURE__ */ jsx23("h3", { className: "text-sm font-bold text-foreground", children: "Snapshots" }),
2706
- /* @__PURE__ */ jsxs21(
2565
+ return /* @__PURE__ */ jsxs20("div", { className: cn("space-y-4", className), children: [
2566
+ /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between", children: [
2567
+ /* @__PURE__ */ jsx21("h3", { className: "text-sm font-bold text-foreground", children: "Snapshots" }),
2568
+ /* @__PURE__ */ jsxs20(
2707
2569
  "button",
2708
2570
  {
2709
2571
  type: "button",
2710
2572
  onClick: () => setShowCreate(!showCreate),
2711
2573
  className: "inline-flex items-center gap-1.5 rounded-lg bg-primary/20 border border-primary/30 px-3 py-1.5 text-xs font-medium text-primary hover:bg-primary hover:text-primary-foreground transition-colors",
2712
2574
  children: [
2713
- /* @__PURE__ */ jsx23(Plus8, { className: "h-3.5 w-3.5" }),
2575
+ /* @__PURE__ */ jsx21(Plus8, { className: "h-3.5 w-3.5" }),
2714
2576
  "Create Snapshot"
2715
2577
  ]
2716
2578
  }
2717
2579
  )
2718
2580
  ] }),
2719
- showCreate && /* @__PURE__ */ jsxs21("div", { className: "rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3", children: [
2720
- /* @__PURE__ */ jsx23("p", { className: "text-sm text-foreground font-medium", children: "Create a new snapshot of the current sandbox state." }),
2721
- /* @__PURE__ */ jsx23(
2581
+ showCreate && /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3", children: [
2582
+ /* @__PURE__ */ jsx21("p", { className: "text-sm text-foreground font-medium", children: "Create a new snapshot of the current sandbox state." }),
2583
+ /* @__PURE__ */ jsx21(
2722
2584
  "input",
2723
2585
  {
2724
2586
  type: "text",
@@ -2729,8 +2591,8 @@ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loadin
2729
2591
  className: "w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2730
2592
  }
2731
2593
  ),
2732
- /* @__PURE__ */ jsxs21("div", { className: "flex justify-end gap-2", children: [
2733
- /* @__PURE__ */ jsx23(
2594
+ /* @__PURE__ */ jsxs20("div", { className: "flex justify-end gap-2", children: [
2595
+ /* @__PURE__ */ jsx21(
2734
2596
  "button",
2735
2597
  {
2736
2598
  type: "button",
@@ -2739,44 +2601,44 @@ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loadin
2739
2601
  children: "Cancel"
2740
2602
  }
2741
2603
  ),
2742
- /* @__PURE__ */ jsxs21(
2604
+ /* @__PURE__ */ jsxs20(
2743
2605
  "button",
2744
2606
  {
2745
2607
  type: "button",
2746
2608
  onClick: handleCreate,
2747
2609
  className: "rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
2748
2610
  children: [
2749
- /* @__PURE__ */ jsx23(Camera, { className: "h-3 w-3 mr-1.5 inline" }),
2611
+ /* @__PURE__ */ jsx21(Camera, { className: "h-3 w-3 mr-1.5 inline" }),
2750
2612
  "Create"
2751
2613
  ]
2752
2614
  }
2753
2615
  )
2754
2616
  ] })
2755
2617
  ] }),
2756
- loading ? /* @__PURE__ */ jsxs21("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2757
- /* @__PURE__ */ jsx23(Camera, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2758
- /* @__PURE__ */ jsx23("p", { className: "text-sm text-muted-foreground", children: "Loading snapshots..." })
2759
- ] }) : snapshots.length > 0 ? /* @__PURE__ */ jsx23("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs21("table", { className: "w-full text-sm", children: [
2760
- /* @__PURE__ */ jsx23("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs21("tr", { children: [
2761
- /* @__PURE__ */ jsx23("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "ID" }),
2762
- /* @__PURE__ */ jsx23("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Created" }),
2763
- /* @__PURE__ */ jsx23("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Size" }),
2764
- /* @__PURE__ */ jsx23("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Tags" }),
2765
- /* @__PURE__ */ jsx23("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-24" })
2618
+ loading ? /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2619
+ /* @__PURE__ */ jsx21(Camera, { className: "mx-auto h-6 w-6 text-muted-foreground animate-pulse mb-2" }),
2620
+ /* @__PURE__ */ jsx21("p", { className: "text-sm text-muted-foreground", children: "Loading snapshots..." })
2621
+ ] }) : snapshots.length > 0 ? /* @__PURE__ */ jsx21("div", { className: "rounded-lg border border-border overflow-hidden", children: /* @__PURE__ */ jsxs20("table", { className: "w-full text-sm", children: [
2622
+ /* @__PURE__ */ jsx21("thead", { className: "bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxs20("tr", { children: [
2623
+ /* @__PURE__ */ jsx21("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "ID" }),
2624
+ /* @__PURE__ */ jsx21("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Created" }),
2625
+ /* @__PURE__ */ jsx21("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Size" }),
2626
+ /* @__PURE__ */ jsx21("th", { className: "px-4 py-2.5 text-left text-xs font-medium text-muted-foreground", children: "Tags" }),
2627
+ /* @__PURE__ */ jsx21("th", { className: "px-4 py-2.5 text-right text-xs font-medium text-muted-foreground w-24" })
2766
2628
  ] }) }),
2767
- /* @__PURE__ */ jsx23("tbody", { className: "divide-y divide-border", children: snapshots.map((s) => /* @__PURE__ */ jsxs21("tr", { children: [
2768
- /* @__PURE__ */ jsx23("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: s.id.slice(0, 12) }),
2769
- /* @__PURE__ */ jsx23("td", { className: "px-4 py-3 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxs21("span", { className: "inline-flex items-center gap-1.5", children: [
2770
- /* @__PURE__ */ jsx23(Clock5, { className: "h-3 w-3" }),
2629
+ /* @__PURE__ */ jsx21("tbody", { className: "divide-y divide-border", children: snapshots.map((s) => /* @__PURE__ */ jsxs20("tr", { children: [
2630
+ /* @__PURE__ */ jsx21("td", { className: "px-4 py-3 font-mono text-xs text-foreground", children: s.id.slice(0, 12) }),
2631
+ /* @__PURE__ */ jsx21("td", { className: "px-4 py-3 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxs20("span", { className: "inline-flex items-center gap-1.5", children: [
2632
+ /* @__PURE__ */ jsx21(Clock5, { className: "h-3 w-3" }),
2771
2633
  formatDate(s.createdAt)
2772
2634
  ] }) }),
2773
- /* @__PURE__ */ jsx23("td", { className: "px-4 py-3 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxs21("span", { className: "inline-flex items-center gap-1.5", children: [
2774
- /* @__PURE__ */ jsx23(HardDrive, { className: "h-3 w-3" }),
2635
+ /* @__PURE__ */ jsx21("td", { className: "px-4 py-3 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxs20("span", { className: "inline-flex items-center gap-1.5", children: [
2636
+ /* @__PURE__ */ jsx21(HardDrive, { className: "h-3 w-3" }),
2775
2637
  formatBytes(s.sizeBytes)
2776
2638
  ] }) }),
2777
- /* @__PURE__ */ jsx23("td", { className: "px-4 py-3", children: s.tags?.length ? /* @__PURE__ */ jsx23("div", { className: "flex items-center gap-1 flex-wrap", children: s.tags.map((tag) => /* @__PURE__ */ jsx23("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground border border-border", children: tag }, tag)) }) : /* @__PURE__ */ jsx23("span", { className: "text-xs text-muted-foreground", children: "-" }) }),
2778
- /* @__PURE__ */ jsx23("td", { className: "px-4 py-3 text-right", children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center justify-end gap-2", children: [
2779
- /* @__PURE__ */ jsxs21(
2639
+ /* @__PURE__ */ jsx21("td", { className: "px-4 py-3", children: s.tags?.length ? /* @__PURE__ */ jsx21("div", { className: "flex items-center gap-1 flex-wrap", children: s.tags.map((tag) => /* @__PURE__ */ jsx21("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground border border-border", children: tag }, tag)) }) : /* @__PURE__ */ jsx21("span", { className: "text-xs text-muted-foreground", children: "-" }) }),
2640
+ /* @__PURE__ */ jsx21("td", { className: "px-4 py-3 text-right", children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-end gap-2", children: [
2641
+ /* @__PURE__ */ jsxs20(
2780
2642
  "button",
2781
2643
  {
2782
2644
  type: "button",
@@ -2784,12 +2646,12 @@ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loadin
2784
2646
  className: "inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-foreground hover:bg-muted/80 transition-colors border border-border",
2785
2647
  title: "Restore to new sandbox",
2786
2648
  children: [
2787
- /* @__PURE__ */ jsx23(RotateCcw, { className: "h-3 w-3" }),
2649
+ /* @__PURE__ */ jsx21(RotateCcw, { className: "h-3 w-3" }),
2788
2650
  "Restore"
2789
2651
  ]
2790
2652
  }
2791
2653
  ),
2792
- onSaveAsTemplate && /* @__PURE__ */ jsx23(
2654
+ onSaveAsTemplate && /* @__PURE__ */ jsx21(
2793
2655
  "button",
2794
2656
  {
2795
2657
  type: "button",
@@ -2801,16 +2663,16 @@ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loadin
2801
2663
  )
2802
2664
  ] }) })
2803
2665
  ] }, s.id)) })
2804
- ] }) }) : /* @__PURE__ */ jsxs21("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2805
- /* @__PURE__ */ jsx23(Camera, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2806
- /* @__PURE__ */ jsx23("p", { className: "text-sm text-muted-foreground", children: "No snapshots yet" }),
2807
- /* @__PURE__ */ jsx23("p", { className: "text-xs text-muted-foreground mt-1", children: "Create a snapshot to save the current state of your sandbox." })
2666
+ ] }) }) : /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
2667
+ /* @__PURE__ */ jsx21(Camera, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
2668
+ /* @__PURE__ */ jsx21("p", { className: "text-sm text-muted-foreground", children: "No snapshots yet" }),
2669
+ /* @__PURE__ */ jsx21("p", { className: "text-xs text-muted-foreground mt-1", children: "Create a snapshot to save the current state of your sandbox." })
2808
2670
  ] })
2809
2671
  ] });
2810
2672
  }
2811
2673
 
2812
2674
  // src/dashboard/promo-banner.tsx
2813
- import { Fragment as Fragment11, jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
2675
+ import { Fragment as Fragment11, jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
2814
2676
  function PromoBanner({
2815
2677
  title,
2816
2678
  description,
@@ -2825,21 +2687,21 @@ function PromoBanner({
2825
2687
  "mt-6 inline-flex items-center gap-2 rounded-md border border-white/20 bg-[var(--btn-primary-bg)] px-4 py-2 text-sm font-medium text-[var(--btn-primary-text)] transition-colors",
2826
2688
  disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-[var(--btn-primary-hover)]"
2827
2689
  );
2828
- const buttonContent = /* @__PURE__ */ jsxs22(Fragment11, { children: [
2690
+ const buttonContent = /* @__PURE__ */ jsxs21(Fragment11, { children: [
2829
2691
  buttonLabel,
2830
- /* @__PURE__ */ jsxs22("svg", { "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "h-4 w-4", children: [
2831
- /* @__PURE__ */ jsx24("path", { d: "M5 12h14" }),
2832
- /* @__PURE__ */ jsx24("path", { d: "m12 5 7 7-7 7" })
2692
+ /* @__PURE__ */ jsxs21("svg", { "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "h-4 w-4", children: [
2693
+ /* @__PURE__ */ jsx22("path", { d: "M5 12h14" }),
2694
+ /* @__PURE__ */ jsx22("path", { d: "m12 5 7 7-7 7" })
2833
2695
  ] })
2834
2696
  ] });
2835
- return /* @__PURE__ */ jsxs22("div", { className: cn("relative overflow-hidden rounded-xl bg-[var(--brand-strong)] p-8 md:flex md:items-center md:justify-between", className), children: [
2836
- /* @__PURE__ */ jsxs22("div", { className: "relative z-10", children: [
2837
- /* @__PURE__ */ jsx24("h3", { className: "text-xl font-bold text-[var(--brand-strong-text)]", children: title }),
2838
- /* @__PURE__ */ jsx24("p", { className: "mt-2 max-w-md text-sm text-[var(--brand-strong-text-muted)]", children: description }),
2839
- href && !disabled ? /* @__PURE__ */ jsx24("a", { href, target: "_blank", rel: "noopener noreferrer", onClick, className: buttonClasses, children: buttonContent }) : /* @__PURE__ */ jsx24("button", { type: "button", onClick, disabled, className: buttonClasses, children: buttonContent })
2697
+ return /* @__PURE__ */ jsxs21("div", { className: cn("relative overflow-hidden rounded-xl bg-[var(--brand-strong)] p-8 md:flex md:items-center md:justify-between", className), children: [
2698
+ /* @__PURE__ */ jsxs21("div", { className: "relative z-10", children: [
2699
+ /* @__PURE__ */ jsx22("h3", { className: "text-xl font-bold text-[var(--brand-strong-text)]", children: title }),
2700
+ /* @__PURE__ */ jsx22("p", { className: "mt-2 max-w-md text-sm text-[var(--brand-strong-text-muted)]", children: description }),
2701
+ href && !disabled ? /* @__PURE__ */ jsx22("a", { href, target: "_blank", rel: "noopener noreferrer", onClick, className: buttonClasses, children: buttonContent }) : /* @__PURE__ */ jsx22("button", { type: "button", onClick, disabled, className: buttonClasses, children: buttonContent })
2840
2702
  ] }),
2841
- icon && /* @__PURE__ */ jsx24("div", { className: "relative z-10 mt-6 flex items-center md:mt-0", children: /* @__PURE__ */ jsx24("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl border border-white/10 bg-white/10", children: icon }) }),
2842
- /* @__PURE__ */ jsx24("div", { className: "pointer-events-none absolute inset-y-0 right-0 w-1/3 bg-gradient-to-l from-white/5 to-transparent" })
2703
+ icon && /* @__PURE__ */ jsx22("div", { className: "relative z-10 mt-6 flex items-center md:mt-0", children: /* @__PURE__ */ jsx22("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl border border-white/10 bg-white/10", children: icon }) }),
2704
+ /* @__PURE__ */ jsx22("div", { className: "pointer-events-none absolute inset-y-0 right-0 w-1/3 bg-gradient-to-l from-white/5 to-transparent" })
2843
2705
  ] });
2844
2706
  }
2845
2707
 
@@ -2875,9 +2737,6 @@ export {
2875
2737
  SandboxTable,
2876
2738
  InvoiceTable,
2877
2739
  PlanCards,
2878
- BackendSelector,
2879
- HARNESS_OPTIONS,
2880
- HarnessPicker,
2881
2740
  DashboardLayout,
2882
2741
  ProfileSelector,
2883
2742
  ProfileComparison,