@tangle-network/sandbox-ui 0.23.4 → 0.24.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.
package/dist/pages.js CHANGED
@@ -17,11 +17,193 @@ import {
17
17
  cn
18
18
  } from "./chunk-EI44GEQ5.js";
19
19
 
20
+ // src/pages/auth-page.tsx
21
+ import { useState } from "react";
22
+ import { Logo, TangleKnot } from "@tangle-network/brand";
23
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
24
+ var C = {
25
+ pageBg: "#f7f7f8",
26
+ card: "#ffffff",
27
+ border: "rgba(15, 23, 42, 0.10)",
28
+ text: "#0f172a",
29
+ muted: "#71717a",
30
+ inputBg: "#f5f5f4"
31
+ };
32
+ function GithubIcon() {
33
+ return /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" }) });
34
+ }
35
+ function GoogleIcon() {
36
+ return /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", "aria-hidden": true, children: [
37
+ /* @__PURE__ */ jsx("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z", fill: "#4285F4" }),
38
+ /* @__PURE__ */ jsx("path", { d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z", fill: "#34A853" }),
39
+ /* @__PURE__ */ jsx("path", { d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z", fill: "#FBBC05" }),
40
+ /* @__PURE__ */ jsx("path", { d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z", fill: "#EA4335" })
41
+ ] });
42
+ }
43
+ var SOCIAL_LABEL = { github: "GitHub", google: "Google" };
44
+ var SOCIAL_ICON = { github: /* @__PURE__ */ jsx(GithubIcon, {}), google: /* @__PURE__ */ jsx(GoogleIcon, {}) };
45
+ function AuthPage({
46
+ product,
47
+ tagline,
48
+ mode = "signin",
49
+ tangleAuthUrl = "/auth/tangle/start",
50
+ providers = ["github", "google"],
51
+ socialHref = (p) => `/api/auth/sign-in/social?provider=${p}&callbackURL=/app`,
52
+ onEmailSubmit,
53
+ altHref,
54
+ accent = "#0f172a",
55
+ accentHover = "#1e293b",
56
+ logoSize = "lg",
57
+ className,
58
+ style,
59
+ children
60
+ }) {
61
+ const [email, setEmail] = useState("");
62
+ const [password, setPassword] = useState("");
63
+ const [error, setError] = useState("");
64
+ const [loading, setLoading] = useState(false);
65
+ const isSignup = mode === "signup";
66
+ const tangleLabel = isSignup ? "Sign up with Tangle" : "Continue with Tangle";
67
+ const emailLabel = isSignup ? "Create account with email" : "Sign in with email";
68
+ const handleSubmit = async (e) => {
69
+ e.preventDefault();
70
+ if (!onEmailSubmit) return;
71
+ setLoading(true);
72
+ setError("");
73
+ try {
74
+ const err = await onEmailSubmit(email, password);
75
+ if (err) setError(err);
76
+ } catch {
77
+ setError("Connection error \u2014 please try again");
78
+ } finally {
79
+ setLoading(false);
80
+ }
81
+ };
82
+ const outlineBtn = {
83
+ display: "flex",
84
+ alignItems: "center",
85
+ justifyContent: "center",
86
+ gap: 10,
87
+ width: "100%",
88
+ padding: "10px 12px",
89
+ borderRadius: 8,
90
+ border: `1px solid ${C.border}`,
91
+ background: "transparent",
92
+ color: C.text,
93
+ fontSize: 14,
94
+ fontWeight: 500,
95
+ cursor: "pointer",
96
+ transition: "background 120ms"
97
+ };
98
+ const inputStyle = {
99
+ width: "100%",
100
+ padding: "10px 12px",
101
+ borderRadius: 8,
102
+ border: `1px solid ${C.border}`,
103
+ background: C.inputBg,
104
+ color: C.text,
105
+ fontSize: 14,
106
+ outline: "none"
107
+ };
108
+ return /* @__PURE__ */ jsx(
109
+ "div",
110
+ {
111
+ style: { minHeight: "100vh", display: "flex", alignItems: "center", justifyContent: "center", padding: 16, background: C.pageBg },
112
+ children: /* @__PURE__ */ jsxs(
113
+ "div",
114
+ {
115
+ className,
116
+ style: {
117
+ width: "100%",
118
+ maxWidth: 384,
119
+ background: C.card,
120
+ border: `1px solid ${C.border}`,
121
+ borderRadius: 16,
122
+ padding: 32,
123
+ boxShadow: "0 1px 2px rgba(0,0,0,0.04), 0 8px 24px rgba(0,0,0,0.06)",
124
+ ...style
125
+ },
126
+ children: [
127
+ /* @__PURE__ */ jsxs("div", { style: { marginBottom: 28 }, children: [
128
+ /* @__PURE__ */ jsx(Logo, { variant: "full", suffix: product, size: logoSize }),
129
+ tagline !== null && /* @__PURE__ */ jsx("p", { style: { fontSize: 14, marginTop: 12, color: C.muted }, children: tagline ?? (isSignup ? `Create your ${product ?? "Tangle"} workspace.` : `Sign in to your ${product ?? "Tangle"} workspace.`) })
130
+ ] }),
131
+ /* @__PURE__ */ jsxs(
132
+ "a",
133
+ {
134
+ href: tangleAuthUrl,
135
+ style: {
136
+ display: "flex",
137
+ alignItems: "center",
138
+ justifyContent: "center",
139
+ gap: 10,
140
+ width: "100%",
141
+ padding: "10px 12px",
142
+ borderRadius: 8,
143
+ background: accent,
144
+ border: "1px solid rgba(255,255,255,0.12)",
145
+ color: "#fff",
146
+ fontSize: 14,
147
+ fontWeight: 600,
148
+ textDecoration: "none",
149
+ transition: "background 120ms"
150
+ },
151
+ onMouseEnter: (e) => e.currentTarget.style.background = accentHover,
152
+ onMouseLeave: (e) => e.currentTarget.style.background = accent,
153
+ children: [
154
+ /* @__PURE__ */ jsx(TangleKnot, { size: 16 }),
155
+ tangleLabel
156
+ ]
157
+ }
158
+ ),
159
+ providers.length > 0 && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: 8, marginTop: 8 }, children: providers.map((p) => /* @__PURE__ */ jsxs(
160
+ "button",
161
+ {
162
+ type: "button",
163
+ style: outlineBtn,
164
+ onClick: () => {
165
+ window.location.href = socialHref(p);
166
+ },
167
+ onMouseEnter: (e) => e.currentTarget.style.background = "rgba(0,0,0,0.02)",
168
+ onMouseLeave: (e) => e.currentTarget.style.background = "transparent",
169
+ children: [
170
+ SOCIAL_ICON[p],
171
+ "Continue with ",
172
+ SOCIAL_LABEL[p]
173
+ ]
174
+ },
175
+ p
176
+ )) }),
177
+ onEmailSubmit && /* @__PURE__ */ jsxs(Fragment, { children: [
178
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12, margin: "24px 0" }, children: [
179
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, height: 1, background: C.border } }),
180
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 12, color: C.muted }, children: "or" }),
181
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, height: 1, background: C.border } })
182
+ ] }),
183
+ /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, style: { display: "flex", flexDirection: "column", gap: 12 }, children: [
184
+ /* @__PURE__ */ jsx("input", { type: "email", required: true, "aria-label": "Email", placeholder: "Email", value: email, onChange: (e) => setEmail(e.target.value), style: inputStyle }),
185
+ /* @__PURE__ */ jsx("input", { type: "password", required: true, "aria-label": "Password", placeholder: "Password", value: password, onChange: (e) => setPassword(e.target.value), style: inputStyle }),
186
+ error && /* @__PURE__ */ jsx("p", { role: "alert", style: { fontSize: 14, color: "#b91c1c" }, children: error }),
187
+ /* @__PURE__ */ jsx("button", { type: "submit", disabled: loading, style: { ...outlineBtn, opacity: loading ? 0.5 : 1 }, children: loading ? "\u2026" : emailLabel })
188
+ ] })
189
+ ] }),
190
+ children,
191
+ altHref && /* @__PURE__ */ jsxs("p", { style: { textAlign: "center", fontSize: 14, marginTop: 24, color: C.muted }, children: [
192
+ isSignup ? "Already have an account? " : `New to Tangle${product ? ` ${product}` : ""}? `,
193
+ /* @__PURE__ */ jsx("a", { href: altHref, style: { fontWeight: 500, color: C.text }, children: isSignup ? "Sign in" : "Create account" })
194
+ ] })
195
+ ]
196
+ }
197
+ )
198
+ }
199
+ );
200
+ }
201
+
20
202
  // src/pages/billing-page.tsx
21
203
  import * as React from "react";
22
204
  import { Skeleton, SkeletonCard } from "@tangle-network/ui/primitives";
23
205
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "@tangle-network/ui/primitives";
24
- import { jsx, jsxs } from "react/jsx-runtime";
206
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
25
207
  var defaultBillingData = {
26
208
  subscription: null,
27
209
  balance: { available: 0, used: 0 },
@@ -67,15 +249,15 @@ async function fetchBillingDataFromApi(apiBasePath) {
67
249
  function BillingPageSkeleton({
68
250
  variant: _variant = "sandbox"
69
251
  }) {
70
- return /* @__PURE__ */ jsxs("div", { className: "space-y-8", children: [
71
- /* @__PURE__ */ jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [
72
- /* @__PURE__ */ jsx(SkeletonCard, {}),
73
- /* @__PURE__ */ jsx(SkeletonCard, {}),
74
- /* @__PURE__ */ jsx(SkeletonCard, {})
252
+ return /* @__PURE__ */ jsxs2("div", { className: "space-y-8", children: [
253
+ /* @__PURE__ */ jsxs2("div", { className: "grid gap-6 lg:grid-cols-3", children: [
254
+ /* @__PURE__ */ jsx2(SkeletonCard, {}),
255
+ /* @__PURE__ */ jsx2(SkeletonCard, {}),
256
+ /* @__PURE__ */ jsx2(SkeletonCard, {})
75
257
  ] }),
76
- /* @__PURE__ */ jsxs("div", { className: "space-y-4 rounded-xl border border-border bg-card p-6", children: [
77
- /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-48" }),
78
- /* @__PURE__ */ jsx("div", { className: "h-48", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-full w-full" }) })
258
+ /* @__PURE__ */ jsxs2("div", { className: "space-y-4 rounded-xl border border-border bg-card p-6", children: [
259
+ /* @__PURE__ */ jsx2(Skeleton, { className: "h-6 w-48" }),
260
+ /* @__PURE__ */ jsx2("div", { className: "h-48", children: /* @__PURE__ */ jsx2(Skeleton, { className: "h-full w-full" }) })
79
261
  ] })
80
262
  ] });
81
263
  }
@@ -83,8 +265,8 @@ function BillingPageError({
83
265
  message,
84
266
  onRetry
85
267
  }) {
86
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center space-y-4 rounded-xl border border-destructive/20 bg-destructive/5 p-8 text-center", children: [
87
- /* @__PURE__ */ jsx("div", { className: "rounded-full bg-destructive/10 p-3", children: /* @__PURE__ */ jsxs(
268
+ return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col items-center justify-center space-y-4 rounded-xl border border-destructive/20 bg-destructive/5 p-8 text-center", children: [
269
+ /* @__PURE__ */ jsx2("div", { className: "rounded-full bg-destructive/10 p-3", children: /* @__PURE__ */ jsxs2(
88
270
  "svg",
89
271
  {
90
272
  xmlns: "http://www.w3.org/2000/svg",
@@ -96,18 +278,18 @@ function BillingPageError({
96
278
  strokeLinejoin: "round",
97
279
  className: "h-6 w-6 text-destructive",
98
280
  children: [
99
- /* @__PURE__ */ jsx("title", { children: "Error icon" }),
100
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
101
- /* @__PURE__ */ jsx("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
102
- /* @__PURE__ */ jsx("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
281
+ /* @__PURE__ */ jsx2("title", { children: "Error icon" }),
282
+ /* @__PURE__ */ jsx2("circle", { cx: "12", cy: "12", r: "10" }),
283
+ /* @__PURE__ */ jsx2("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
284
+ /* @__PURE__ */ jsx2("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
103
285
  ]
104
286
  }
105
287
  ) }),
106
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
107
- /* @__PURE__ */ jsx("h3", { className: "font-semibold text-lg", children: "Failed to load billing data" }),
108
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: message })
288
+ /* @__PURE__ */ jsxs2("div", { className: "space-y-2", children: [
289
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-lg", children: "Failed to load billing data" }),
290
+ /* @__PURE__ */ jsx2("p", { className: "text-muted-foreground text-sm", children: message })
109
291
  ] }),
110
- /* @__PURE__ */ jsx(
292
+ /* @__PURE__ */ jsx2(
111
293
  "button",
112
294
  {
113
295
  type: "button",
@@ -208,19 +390,19 @@ function BillingPage({
208
390
  []
209
391
  );
210
392
  if (state.loading) {
211
- return /* @__PURE__ */ jsx(BillingPageSkeleton, { variant });
393
+ return /* @__PURE__ */ jsx2(BillingPageSkeleton, { variant });
212
394
  }
213
395
  if (state.error) {
214
- return /* @__PURE__ */ jsx(BillingPageError, { message: state.error, onRetry: loadData });
396
+ return /* @__PURE__ */ jsx2(BillingPageError, { message: state.error, onRetry: loadData });
215
397
  }
216
398
  const data = state.data || defaultBillingData;
217
- return /* @__PURE__ */ jsx("div", { className: "space-y-8", children: /* @__PURE__ */ jsxs(Tabs, { defaultValue: "overview", className: "w-full", children: [
218
- /* @__PURE__ */ jsxs(TabsList, { className: "mb-6", children: [
219
- /* @__PURE__ */ jsx(TabsTrigger, { value: "overview", children: "Overview" }),
220
- /* @__PURE__ */ jsx(TabsTrigger, { value: "plans", children: "Plans" }),
221
- /* @__PURE__ */ jsx(TabsTrigger, { value: "usage", children: "Usage History" })
399
+ return /* @__PURE__ */ jsx2("div", { className: "space-y-8", children: /* @__PURE__ */ jsxs2(Tabs, { defaultValue: "overview", className: "w-full", children: [
400
+ /* @__PURE__ */ jsxs2(TabsList, { className: "mb-6", children: [
401
+ /* @__PURE__ */ jsx2(TabsTrigger, { value: "overview", children: "Overview" }),
402
+ /* @__PURE__ */ jsx2(TabsTrigger, { value: "plans", children: "Plans" }),
403
+ /* @__PURE__ */ jsx2(TabsTrigger, { value: "usage", children: "Usage History" })
222
404
  ] }),
223
- /* @__PURE__ */ jsx(TabsContent, { value: "overview", className: "space-y-6", children: /* @__PURE__ */ jsx(
405
+ /* @__PURE__ */ jsx2(TabsContent, { value: "overview", className: "space-y-6", children: /* @__PURE__ */ jsx2(
224
406
  BillingDashboard,
225
407
  {
226
408
  subscription: data.subscription,
@@ -231,7 +413,7 @@ function BillingPage({
231
413
  variant
232
414
  }
233
415
  ) }),
234
- /* @__PURE__ */ jsx(TabsContent, { value: "plans", children: /* @__PURE__ */ jsx(
416
+ /* @__PURE__ */ jsx2(TabsContent, { value: "plans", children: /* @__PURE__ */ jsx2(
235
417
  PricingPage,
236
418
  {
237
419
  tiers: data.tiers,
@@ -243,15 +425,15 @@ function BillingPage({
243
425
  loading: state.selectingTier
244
426
  }
245
427
  ) }),
246
- /* @__PURE__ */ jsx(TabsContent, { value: "usage", children: data.usageHistory.length > 0 ? /* @__PURE__ */ jsx(
428
+ /* @__PURE__ */ jsx2(TabsContent, { value: "usage", children: data.usageHistory.length > 0 ? /* @__PURE__ */ jsx2(
247
429
  UsageChart,
248
430
  {
249
431
  data: data.usageHistory,
250
432
  title: "Credit Usage History",
251
433
  unit: "credits"
252
434
  }
253
- ) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center rounded-xl border border-border bg-card p-12 text-center", children: [
254
- /* @__PURE__ */ jsxs(
435
+ ) : /* @__PURE__ */ jsxs2("div", { className: "flex flex-col items-center justify-center rounded-xl border border-border bg-card p-12 text-center", children: [
436
+ /* @__PURE__ */ jsxs2(
255
437
  "svg",
256
438
  {
257
439
  xmlns: "http://www.w3.org/2000/svg",
@@ -263,14 +445,14 @@ function BillingPage({
263
445
  strokeLinejoin: "round",
264
446
  className: "mb-4 h-12 w-12 text-muted-foreground",
265
447
  children: [
266
- /* @__PURE__ */ jsx("title", { children: "No usage data icon" }),
267
- /* @__PURE__ */ jsx("path", { d: "M3 3v18h18" }),
268
- /* @__PURE__ */ jsx("path", { d: "m19 9-5 5-4-4-3 3" })
448
+ /* @__PURE__ */ jsx2("title", { children: "No usage data icon" }),
449
+ /* @__PURE__ */ jsx2("path", { d: "M3 3v18h18" }),
450
+ /* @__PURE__ */ jsx2("path", { d: "m19 9-5 5-4-4-3 3" })
269
451
  ]
270
452
  }
271
453
  ),
272
- /* @__PURE__ */ jsx("h3", { className: "font-semibold text-lg", children: "No usage data yet" }),
273
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "Start using credits to see your usage history here." })
454
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-lg", children: "No usage data yet" }),
455
+ /* @__PURE__ */ jsx2("p", { className: "text-muted-foreground text-sm", children: "Start using credits to see your usage history here." })
274
456
  ] }) })
275
457
  ] }) });
276
458
  }
@@ -288,7 +470,7 @@ import {
288
470
  Trash2,
289
471
  Check
290
472
  } from "lucide-react";
291
- import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
473
+ import { Fragment as Fragment3, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
292
474
  var VALID_DRIVERS = /* @__PURE__ */ new Set([
293
475
  "docker",
294
476
  "firecracker",
@@ -341,7 +523,7 @@ function resolveEnvironment(env) {
341
523
  id: env.id,
342
524
  name: templateName,
343
525
  description: env.description ?? "User template from snapshot",
344
- icon: /* @__PURE__ */ jsx2("span", { className: "text-[var(--surface-success-text)] text-2xl font-bold", children: "T" }),
526
+ icon: /* @__PURE__ */ jsx3("span", { className: "text-[var(--surface-success-text)] text-2xl font-bold", children: "T" }),
345
527
  color: "green"
346
528
  };
347
529
  }
@@ -354,7 +536,7 @@ function resolveEnvironment(env) {
354
536
  id: env.id,
355
537
  name,
356
538
  description: env.description ?? `${name} development environment`,
357
- icon: /* @__PURE__ */ jsx2("span", { className: `${textClass} text-2xl font-bold`, children: abbr }),
539
+ icon: /* @__PURE__ */ jsx3("span", { className: `${textClass} text-2xl font-bold`, children: abbr }),
358
540
  color
359
541
  };
360
542
  }
@@ -363,21 +545,21 @@ var defaultEnvironments = [
363
545
  id: "node",
364
546
  name: "Node.js",
365
547
  description: "v20.x LTS with optimized runtime for asynchronous event-driven agents.",
366
- icon: /* @__PURE__ */ jsx2("span", { className: "text-[var(--code-success)] text-2xl font-bold", children: "N" }),
548
+ icon: /* @__PURE__ */ jsx3("span", { className: "text-[var(--code-success)] text-2xl font-bold", children: "N" }),
367
549
  color: "green"
368
550
  },
369
551
  {
370
552
  id: "python",
371
553
  name: "Python",
372
554
  description: "v3.11 pre-installed with PyTorch and common data science libraries.",
373
- icon: /* @__PURE__ */ jsx2("span", { className: "text-sky-400 text-2xl font-bold", children: "Py" }),
555
+ icon: /* @__PURE__ */ jsx3("span", { className: "text-sky-400 text-2xl font-bold", children: "Py" }),
374
556
  color: "blue"
375
557
  },
376
558
  {
377
559
  id: "ubuntu",
378
560
  name: "Ubuntu",
379
561
  description: "Full 22.04 LTS terminal access for custom containerized workloads.",
380
- icon: /* @__PURE__ */ jsx2("span", { className: "text-orange-400 text-2xl font-bold", children: "U" }),
562
+ icon: /* @__PURE__ */ jsx3("span", { className: "text-orange-400 text-2xl font-bold", children: "U" }),
381
563
  color: "orange"
382
564
  }
383
565
  ];
@@ -450,21 +632,21 @@ function SshAccessStep({ config }) {
450
632
  const keys = config.keys ?? [];
451
633
  const inlineKeyCount = config.inlinePublicKeys.split(/\r?\n/).map((key) => key.trim()).filter(Boolean).length;
452
634
  const totalKeyCount = config.selectedKeyIds.length + inlineKeyCount;
453
- return /* @__PURE__ */ jsxs2("div", { className: "space-y-4", children: [
454
- /* @__PURE__ */ jsxs2("div", { className: "flex items-start justify-between gap-4", children: [
455
- /* @__PURE__ */ jsxs2("div", { children: [
456
- /* @__PURE__ */ jsx2("p", { className: "font-medium text-foreground text-sm", children: "SSH Access" }),
457
- /* @__PURE__ */ jsx2("p", { className: "mt-1 text-muted-foreground text-xs", children: "Select stored keys or paste public keys for authorized_keys." })
635
+ return /* @__PURE__ */ jsxs3("div", { className: "space-y-4", children: [
636
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-start justify-between gap-4", children: [
637
+ /* @__PURE__ */ jsxs3("div", { children: [
638
+ /* @__PURE__ */ jsx3("p", { className: "font-medium text-foreground text-sm", children: "SSH Access" }),
639
+ /* @__PURE__ */ jsx3("p", { className: "mt-1 text-muted-foreground text-xs", children: "Select stored keys or paste public keys for authorized_keys." })
458
640
  ] }),
459
- /* @__PURE__ */ jsxs2(Badge, { variant: "outline", children: [
641
+ /* @__PURE__ */ jsxs3(Badge, { variant: "outline", children: [
460
642
  totalKeyCount,
461
643
  " key",
462
644
  totalKeyCount === 1 ? "" : "s"
463
645
  ] })
464
646
  ] }),
465
- keys.length > 0 && /* @__PURE__ */ jsx2("div", { className: "grid gap-2 sm:grid-cols-2", children: keys.map((key) => {
647
+ keys.length > 0 && /* @__PURE__ */ jsx3("div", { className: "grid gap-2 sm:grid-cols-2", children: keys.map((key) => {
466
648
  const selected = config.selectedKeyIds.includes(key.id);
467
- return /* @__PURE__ */ jsx2(
649
+ return /* @__PURE__ */ jsx3(
468
650
  Button,
469
651
  {
470
652
  type: "button",
@@ -476,9 +658,9 @@ function SshAccessStep({ config }) {
476
658
  selected ? config.selectedKeyIds.filter((id) => id !== key.id) : [...config.selectedKeyIds, key.id]
477
659
  );
478
660
  },
479
- children: /* @__PURE__ */ jsxs2("span", { className: "min-w-0", children: [
480
- /* @__PURE__ */ jsx2("span", { className: "block font-medium text-foreground", children: key.name }),
481
- /* @__PURE__ */ jsxs2("span", { className: "block truncate font-mono text-muted-foreground text-xs", children: [
661
+ children: /* @__PURE__ */ jsxs3("span", { className: "min-w-0", children: [
662
+ /* @__PURE__ */ jsx3("span", { className: "block font-medium text-foreground", children: key.name }),
663
+ /* @__PURE__ */ jsxs3("span", { className: "block truncate font-mono text-muted-foreground text-xs", children: [
482
664
  key.keyType,
483
665
  " \xB7 ",
484
666
  key.fingerprint
@@ -488,7 +670,7 @@ function SshAccessStep({ config }) {
488
670
  key.id
489
671
  );
490
672
  }) }),
491
- /* @__PURE__ */ jsx2(
673
+ /* @__PURE__ */ jsx3(
492
674
  Textarea,
493
675
  {
494
676
  className: "min-h-24 font-mono text-xs",
@@ -726,9 +908,9 @@ function ProvisioningWizard({
726
908
  const pricingSuffix = pricingView === "hourly" ? "/ hour" : "/ sec";
727
909
  const rateSuffix = pricingView === "hourly" ? "/h" : "/s";
728
910
  const fmtRate = (v) => pricingView === "hourly" ? v.toFixed(2) : formatPerSecondValue(v);
729
- return /* @__PURE__ */ jsxs2("div", { className: cn("max-w-6xl mx-auto flex flex-col", className), children: [
730
- /* @__PURE__ */ jsxs2("div", { className: "mb-4 flex items-center gap-3 shrink-0", children: [
731
- onBack && /* @__PURE__ */ jsx2(
911
+ return /* @__PURE__ */ jsxs3("div", { className: cn("max-w-6xl mx-auto flex flex-col", className), children: [
912
+ /* @__PURE__ */ jsxs3("div", { className: "mb-4 flex items-center gap-3 shrink-0", children: [
913
+ onBack && /* @__PURE__ */ jsx3(
732
914
  Button,
733
915
  {
734
916
  type: "button",
@@ -736,30 +918,30 @@ function ProvisioningWizard({
736
918
  size: "icon",
737
919
  onClick: onBack,
738
920
  className: "h-9 w-9 shrink-0",
739
- children: /* @__PURE__ */ jsx2(ArrowLeft, { className: "h-4 w-4" })
921
+ children: /* @__PURE__ */ jsx3(ArrowLeft, { className: "h-4 w-4" })
740
922
  }
741
923
  ),
742
- /* @__PURE__ */ jsxs2("div", { children: [
743
- /* @__PURE__ */ jsx2("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Sandbox Provisioning" }),
744
- /* @__PURE__ */ jsx2("p", { className: "text-muted-foreground text-sm", children: "Select your stack, allocate resources, and deploy." })
924
+ /* @__PURE__ */ jsxs3("div", { children: [
925
+ /* @__PURE__ */ jsx3("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Sandbox Provisioning" }),
926
+ /* @__PURE__ */ jsx3("p", { className: "text-muted-foreground text-sm", children: "Select your stack, allocate resources, and deploy." })
745
927
  ] })
746
928
  ] }),
747
- /* @__PURE__ */ jsxs2("div", { className: "grid grid-cols-12 gap-5 flex-1 min-h-0", children: [
748
- /* @__PURE__ */ jsxs2("div", { className: "col-span-12 xl:col-span-8 flex flex-col min-h-0", children: [
749
- isMultistep && /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2 mb-4 rounded-lg border border-border bg-card px-4 py-2 shadow-sm mx-auto max-w-2xl justify-between shrink-0", children: stepLabels.map((label, index) => {
929
+ /* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-12 gap-5 flex-1 min-h-0", children: [
930
+ /* @__PURE__ */ jsxs3("div", { className: "col-span-12 xl:col-span-8 flex flex-col min-h-0", children: [
931
+ isMultistep && /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2 mb-4 rounded-lg border border-border bg-card px-4 py-2 shadow-sm mx-auto max-w-2xl justify-between shrink-0", children: stepLabels.map((label, index) => {
750
932
  const s = index + 1;
751
- return /* @__PURE__ */ jsxs2("div", { className: "flex items-center", children: [
752
- /* @__PURE__ */ jsx2(
933
+ return /* @__PURE__ */ jsxs3("div", { className: "flex items-center", children: [
934
+ /* @__PURE__ */ jsx3(
753
935
  "div",
754
936
  {
755
937
  className: cn(
756
938
  "h-6 w-6 rounded-full flex items-center justify-center font-semibold text-xs shrink-0 transition-colors duration-200",
757
939
  currentStep >= s ? "bg-primary text-primary-foreground" : "bg-muted border border-border text-muted-foreground"
758
940
  ),
759
- children: currentStep > s ? /* @__PURE__ */ jsx2(Check, { className: "h-3 w-3" }) : s
941
+ children: currentStep > s ? /* @__PURE__ */ jsx3(Check, { className: "h-3 w-3" }) : s
760
942
  }
761
943
  ),
762
- /* @__PURE__ */ jsx2(
944
+ /* @__PURE__ */ jsx3(
763
945
  "span",
764
946
  {
765
947
  className: cn(
@@ -769,7 +951,7 @@ function ProvisioningWizard({
769
951
  children: label
770
952
  }
771
953
  ),
772
- s < finalStep && /* @__PURE__ */ jsx2(
954
+ s < finalStep && /* @__PURE__ */ jsx3(
773
955
  "div",
774
956
  {
775
957
  className: cn(
@@ -780,12 +962,12 @@ function ProvisioningWizard({
780
962
  )
781
963
  ] }, s);
782
964
  }) }),
783
- dc && isMultistep && /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between rounded-lg border border-border bg-card px-4 py-2.5 shadow-sm shrink-0 mb-4", children: [
784
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 text-sm", children: [
785
- /* @__PURE__ */ jsx2(Info, { className: "h-4 w-4 text-primary shrink-0" }),
786
- /* @__PURE__ */ jsx2("span", { className: "text-muted-foreground", children: "Pre-configured from template." })
965
+ dc && isMultistep && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between rounded-lg border border-border bg-card px-4 py-2.5 shadow-sm shrink-0 mb-4", children: [
966
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 text-sm", children: [
967
+ /* @__PURE__ */ jsx3(Info, { className: "h-4 w-4 text-primary shrink-0" }),
968
+ /* @__PURE__ */ jsx3("span", { className: "text-muted-foreground", children: "Pre-configured from template." })
787
969
  ] }),
788
- /* @__PURE__ */ jsx2(
970
+ /* @__PURE__ */ jsx3(
789
971
  Button,
790
972
  {
791
973
  type: "button",
@@ -812,33 +994,33 @@ function ProvisioningWizard({
812
994
  }
813
995
  )
814
996
  ] }),
815
- loadError && /* @__PURE__ */ jsxs2("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-3 flex items-center gap-2 shrink-0 mb-4", children: [
816
- /* @__PURE__ */ jsx2(Info, { className: "h-4 w-4 text-destructive shrink-0" }),
817
- /* @__PURE__ */ jsx2("p", { className: "text-sm font-medium text-destructive", children: loadError })
997
+ loadError && /* @__PURE__ */ jsxs3("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-3 flex items-center gap-2 shrink-0 mb-4", children: [
998
+ /* @__PURE__ */ jsx3(Info, { className: "h-4 w-4 text-destructive shrink-0" }),
999
+ /* @__PURE__ */ jsx3("p", { className: "text-sm font-medium text-destructive", children: loadError })
818
1000
  ] }),
819
- /* @__PURE__ */ jsxs2("div", { className: "flex-1 overflow-y-auto min-h-0 space-y-4", children: [
820
- (!isMultistep || currentStep === 1) && /* @__PURE__ */ jsx2(React2.Fragment, { children: /* @__PURE__ */ jsxs2("section", { className: SECTION_CARD_CLASS, children: [
821
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 mb-4", children: [
822
- /* @__PURE__ */ jsx2(Layers, { className: "h-4 w-4 text-primary shrink-0" }),
823
- /* @__PURE__ */ jsx2("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Environment Selection" })
1001
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto min-h-0 space-y-4", children: [
1002
+ (!isMultistep || currentStep === 1) && /* @__PURE__ */ jsx3(React2.Fragment, { children: /* @__PURE__ */ jsxs3("section", { className: SECTION_CARD_CLASS, children: [
1003
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 mb-4", children: [
1004
+ /* @__PURE__ */ jsx3(Layers, { className: "h-4 w-4 text-primary shrink-0" }),
1005
+ /* @__PURE__ */ jsx3("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Environment Selection" })
824
1006
  ] }),
825
- /* @__PURE__ */ jsx2("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-3", children: isLoadingEnvironments && environments.length === 0 ? Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxs2(
1007
+ /* @__PURE__ */ jsx3("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-3", children: isLoadingEnvironments && environments.length === 0 ? Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxs3(
826
1008
  "div",
827
1009
  {
828
1010
  className: "p-3.5 rounded-lg border border-border bg-card/50 animate-pulse",
829
1011
  "aria-hidden": "true",
830
1012
  children: [
831
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between items-start mb-2.5", children: [
832
- /* @__PURE__ */ jsx2("div", { className: "w-10 h-10 rounded-full bg-muted/60 border border-border" }),
833
- /* @__PURE__ */ jsx2("div", { className: "w-4 h-4 rounded-full border-2 border-border" })
1013
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-start mb-2.5", children: [
1014
+ /* @__PURE__ */ jsx3("div", { className: "w-10 h-10 rounded-full bg-muted/60 border border-border" }),
1015
+ /* @__PURE__ */ jsx3("div", { className: "w-4 h-4 rounded-full border-2 border-border" })
834
1016
  ] }),
835
- /* @__PURE__ */ jsx2("div", { className: "h-3 w-1/3 rounded bg-muted/60 mb-2" }),
836
- /* @__PURE__ */ jsx2("div", { className: "h-2.5 w-5/6 rounded bg-muted/50 mb-1.5" }),
837
- /* @__PURE__ */ jsx2("div", { className: "h-2.5 w-2/3 rounded bg-muted/50" })
1017
+ /* @__PURE__ */ jsx3("div", { className: "h-3 w-1/3 rounded bg-muted/60 mb-2" }),
1018
+ /* @__PURE__ */ jsx3("div", { className: "h-2.5 w-5/6 rounded bg-muted/50 mb-1.5" }),
1019
+ /* @__PURE__ */ jsx3("div", { className: "h-2.5 w-2/3 rounded bg-muted/50" })
838
1020
  ]
839
1021
  },
840
1022
  `env-skeleton-${i}`
841
- )) : environments.map((env) => /* @__PURE__ */ jsxs2(
1023
+ )) : environments.map((env) => /* @__PURE__ */ jsxs3(
842
1024
  "button",
843
1025
  {
844
1026
  type: "button",
@@ -848,36 +1030,36 @@ function ProvisioningWizard({
848
1030
  selectedEnv === env.id ? "bg-primary/5 border-primary ring-1 ring-primary/20" : "bg-card border-border hover:border-primary/30 active:scale-[0.99]"
849
1031
  ),
850
1032
  children: [
851
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between items-start mb-2.5", children: [
852
- /* @__PURE__ */ jsx2("div", { className: "w-10 h-10 rounded-full flex items-center justify-center bg-muted/50 border border-border", children: env.icon }),
853
- /* @__PURE__ */ jsx2(
1033
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-start mb-2.5", children: [
1034
+ /* @__PURE__ */ jsx3("div", { className: "w-10 h-10 rounded-full flex items-center justify-center bg-muted/50 border border-border", children: env.icon }),
1035
+ /* @__PURE__ */ jsx3(
854
1036
  "div",
855
1037
  {
856
1038
  className: cn(
857
1039
  "w-4 h-4 rounded-full border-2 flex items-center justify-center transition-colors duration-200",
858
1040
  selectedEnv === env.id ? "border-primary bg-primary" : "border-border group-hover:border-primary/40"
859
1041
  ),
860
- children: selectedEnv === env.id && /* @__PURE__ */ jsx2(Check, { className: "h-2.5 w-2.5 text-primary-foreground" })
1042
+ children: selectedEnv === env.id && /* @__PURE__ */ jsx3(Check, { className: "h-2.5 w-2.5 text-primary-foreground" })
861
1043
  }
862
1044
  )
863
1045
  ] }),
864
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-sm mb-0.5 text-foreground", children: env.name }),
865
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-muted-foreground leading-relaxed", children: env.description })
1046
+ /* @__PURE__ */ jsx3("h3", { className: "font-semibold text-sm mb-0.5 text-foreground", children: env.name }),
1047
+ /* @__PURE__ */ jsx3("p", { className: "text-xs text-muted-foreground leading-relaxed", children: env.description })
866
1048
  ]
867
1049
  },
868
1050
  env.id
869
1051
  )) })
870
1052
  ] }) }),
871
- (!isMultistep || currentStep === 2) && /* @__PURE__ */ jsx2(React2.Fragment, { children: /* @__PURE__ */ jsxs2("section", { className: SECTION_CARD_CLASS, children: [
872
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 mb-4", children: [
873
- /* @__PURE__ */ jsx2(Cpu, { className: "h-4 w-4 text-primary shrink-0" }),
874
- /* @__PURE__ */ jsx2("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Resource Allocation" })
1053
+ (!isMultistep || currentStep === 2) && /* @__PURE__ */ jsx3(React2.Fragment, { children: /* @__PURE__ */ jsxs3("section", { className: SECTION_CARD_CLASS, children: [
1054
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 mb-4", children: [
1055
+ /* @__PURE__ */ jsx3(Cpu, { className: "h-4 w-4 text-primary shrink-0" }),
1056
+ /* @__PURE__ */ jsx3("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Resource Allocation" })
875
1057
  ] }),
876
- /* @__PURE__ */ jsxs2("div", { className: "mb-4", children: [
877
- /* @__PURE__ */ jsx2("label", { className: cn(FIELD_LABEL_CLASS, "mb-2"), children: "Compute Presets" }),
878
- /* @__PURE__ */ jsx2("div", { className: "grid grid-cols-3 gap-2", children: presets.map((p) => {
1058
+ /* @__PURE__ */ jsxs3("div", { className: "mb-4", children: [
1059
+ /* @__PURE__ */ jsx3("label", { className: cn(FIELD_LABEL_CLASS, "mb-2"), children: "Compute Presets" }),
1060
+ /* @__PURE__ */ jsx3("div", { className: "grid grid-cols-3 gap-2", children: presets.map((p) => {
879
1061
  const active = activePreset === p.name && !p.locked;
880
- return /* @__PURE__ */ jsxs2(
1062
+ return /* @__PURE__ */ jsxs3(
881
1063
  "button",
882
1064
  {
883
1065
  type: "button",
@@ -888,8 +1070,8 @@ function ProvisioningWizard({
888
1070
  active ? "bg-primary/5 border-primary ring-1 ring-primary/20" : p.locked ? "bg-muted/30 border-border opacity-60 cursor-not-allowed" : "bg-card border-border hover:border-primary/30 active:scale-[0.99]"
889
1071
  ),
890
1072
  children: [
891
- p.locked && /* @__PURE__ */ jsx2("div", { className: "absolute -top-1.5 -right-1.5 bg-primary text-primary-foreground text-[9px] font-semibold px-1.5 py-0.5 rounded-full uppercase tracking-wider", children: p.unlockLabel }),
892
- /* @__PURE__ */ jsx2(
1073
+ p.locked && /* @__PURE__ */ jsx3("div", { className: "absolute -top-1.5 -right-1.5 bg-primary text-primary-foreground text-[9px] font-semibold px-1.5 py-0.5 rounded-full uppercase tracking-wider", children: p.unlockLabel }),
1074
+ /* @__PURE__ */ jsx3(
893
1075
  "div",
894
1076
  {
895
1077
  className: cn(
@@ -899,7 +1081,7 @@ function ProvisioningWizard({
899
1081
  children: p.name
900
1082
  }
901
1083
  ),
902
- /* @__PURE__ */ jsxs2("div", { className: "text-xs text-muted-foreground mt-0.5 font-mono", children: [
1084
+ /* @__PURE__ */ jsxs3("div", { className: "text-xs text-muted-foreground mt-0.5 font-mono", children: [
903
1085
  p.cpu,
904
1086
  " vCPU",
905
1087
  p.cpu === 1 ? "" : "s",
@@ -916,7 +1098,7 @@ function ProvisioningWizard({
916
1098
  );
917
1099
  }) })
918
1100
  ] }),
919
- /* @__PURE__ */ jsx2("div", { className: "space-y-4", children: [
1101
+ /* @__PURE__ */ jsx3("div", { className: "space-y-4", children: [
920
1102
  {
921
1103
  label: "Compute Cores (CPU)",
922
1104
  value: cpuCores,
@@ -947,12 +1129,12 @@ function ProvisioningWizard({
947
1129
  ].map(
948
1130
  ({ label, value, setter, min, max, step: s, unit }) => {
949
1131
  const displayUnit = unit === "vCPU" ? `${value} vCPU${value === 1 ? "" : "s"}` : `${value}${unit}`;
950
- return /* @__PURE__ */ jsxs2("div", { children: [
951
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between items-end pb-1 mb-1.5", children: [
952
- /* @__PURE__ */ jsx2("label", { className: FIELD_LABEL_CLASS, children: label }),
953
- /* @__PURE__ */ jsx2("span", { className: "text-sm font-semibold text-foreground tabular-nums", children: displayUnit })
1132
+ return /* @__PURE__ */ jsxs3("div", { children: [
1133
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-end pb-1 mb-1.5", children: [
1134
+ /* @__PURE__ */ jsx3("label", { className: FIELD_LABEL_CLASS, children: label }),
1135
+ /* @__PURE__ */ jsx3("span", { className: "text-sm font-semibold text-foreground tabular-nums", children: displayUnit })
954
1136
  ] }),
955
- /* @__PURE__ */ jsx2(
1137
+ /* @__PURE__ */ jsx3(
956
1138
  "input",
957
1139
  {
958
1140
  type: "range",
@@ -967,12 +1149,12 @@ function ProvisioningWizard({
967
1149
  className: "w-full h-1.5 rounded-full appearance-none cursor-pointer accent-primary [&::-webkit-slider-runnable-track]:bg-border [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:h-1.5 [&::-moz-range-track]:bg-border [&::-moz-range-track]:rounded-full [&::-moz-range-track]:h-1.5 [&::-webkit-slider-thumb]:bg-primary [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:-mt-[5px] [&::-webkit-slider-thumb]:shadow-sm [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-primary-foreground"
968
1150
  }
969
1151
  ),
970
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between text-[10px] font-mono text-muted-foreground/60 mt-1", children: [
971
- /* @__PURE__ */ jsxs2("span", { children: [
1152
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-[10px] font-mono text-muted-foreground/60 mt-1", children: [
1153
+ /* @__PURE__ */ jsxs3("span", { children: [
972
1154
  min,
973
1155
  unit === "vCPU" ? min === 1 ? " vCPU" : " vCPUs" : unit
974
1156
  ] }),
975
- /* @__PURE__ */ jsxs2("span", { children: [
1157
+ /* @__PURE__ */ jsxs3("span", { children: [
976
1158
  max,
977
1159
  unit === "vCPU" ? max === 1 ? " vCPU" : " vCPUs" : unit
978
1160
  ] })
@@ -981,24 +1163,24 @@ function ProvisioningWizard({
981
1163
  }
982
1164
  ) })
983
1165
  ] }) }),
984
- (!isMultistep || currentStep === 2) && /* @__PURE__ */ jsx2(React2.Fragment, { children: /* @__PURE__ */ jsx2("section", { className: SECTION_CARD_CLASS, children: /* @__PURE__ */ jsxs2("div", { children: [
985
- /* @__PURE__ */ jsxs2(
1166
+ (!isMultistep || currentStep === 2) && /* @__PURE__ */ jsx3(React2.Fragment, { children: /* @__PURE__ */ jsx3("section", { className: SECTION_CARD_CLASS, children: /* @__PURE__ */ jsxs3("div", { children: [
1167
+ /* @__PURE__ */ jsxs3(
986
1168
  "button",
987
1169
  {
988
1170
  type: "button",
989
1171
  onClick: () => setShowAdvanced(!showAdvanced),
990
1172
  className: "flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors text-sm font-medium focus:outline-none",
991
1173
  children: [
992
- /* @__PURE__ */ jsx2(Settings, { className: "w-4 h-4" }),
1174
+ /* @__PURE__ */ jsx3(Settings, { className: "w-4 h-4" }),
993
1175
  showAdvanced ? "Hide Advanced Options" : "Show Advanced Options"
994
1176
  ]
995
1177
  }
996
1178
  ),
997
- showAdvanced && /* @__PURE__ */ jsxs2("div", { className: "mt-4 space-y-4", children: [
998
- /* @__PURE__ */ jsxs2("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
999
- /* @__PURE__ */ jsxs2("div", { children: [
1000
- /* @__PURE__ */ jsx2("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Workspace Name" }),
1001
- /* @__PURE__ */ jsx2(
1179
+ showAdvanced && /* @__PURE__ */ jsxs3("div", { className: "mt-4 space-y-4", children: [
1180
+ /* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
1181
+ /* @__PURE__ */ jsxs3("div", { children: [
1182
+ /* @__PURE__ */ jsx3("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Workspace Name" }),
1183
+ /* @__PURE__ */ jsx3(
1002
1184
  Input,
1003
1185
  {
1004
1186
  type: "text",
@@ -1010,9 +1192,9 @@ function ProvisioningWizard({
1010
1192
  }
1011
1193
  )
1012
1194
  ] }),
1013
- /* @__PURE__ */ jsxs2("div", { children: [
1014
- /* @__PURE__ */ jsx2("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Virtualization Driver" }),
1015
- /* @__PURE__ */ jsxs2(
1195
+ /* @__PURE__ */ jsxs3("div", { children: [
1196
+ /* @__PURE__ */ jsx3("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Virtualization Driver" }),
1197
+ /* @__PURE__ */ jsxs3(
1016
1198
  "select",
1017
1199
  {
1018
1200
  value: driver,
@@ -1024,8 +1206,8 @@ function ProvisioningWizard({
1024
1206
  },
1025
1207
  className: "w-full bg-card border border-border rounded-lg h-9 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent appearance-none",
1026
1208
  children: [
1027
- /* @__PURE__ */ jsx2("option", { value: "docker", className: "bg-gray-900", children: "Docker container (Default)" }),
1028
- /* @__PURE__ */ jsx2(
1209
+ /* @__PURE__ */ jsx3("option", { value: "docker", className: "bg-gray-900", children: "Docker container (Default)" }),
1210
+ /* @__PURE__ */ jsx3(
1029
1211
  "option",
1030
1212
  {
1031
1213
  value: "firecracker",
@@ -1033,15 +1215,15 @@ function ProvisioningWizard({
1033
1215
  children: "Firecracker microVM (Secure)"
1034
1216
  }
1035
1217
  ),
1036
- /* @__PURE__ */ jsx2("option", { value: "tangle", className: "bg-gray-900", children: "Tangle Distributed Node" })
1218
+ /* @__PURE__ */ jsx3("option", { value: "tangle", className: "bg-gray-900", children: "Tangle Distributed Node" })
1037
1219
  ]
1038
1220
  }
1039
1221
  )
1040
1222
  ] })
1041
1223
  ] }),
1042
- /* @__PURE__ */ jsxs2("div", { children: [
1043
- /* @__PURE__ */ jsx2("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Git Repository URL" }),
1044
- /* @__PURE__ */ jsx2(
1224
+ /* @__PURE__ */ jsxs3("div", { children: [
1225
+ /* @__PURE__ */ jsx3("label", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Git Repository URL" }),
1226
+ /* @__PURE__ */ jsx3(
1045
1227
  Input,
1046
1228
  {
1047
1229
  type: "text",
@@ -1052,10 +1234,10 @@ function ProvisioningWizard({
1052
1234
  }
1053
1235
  )
1054
1236
  ] }),
1055
- /* @__PURE__ */ jsxs2("div", { children: [
1056
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between items-center mb-1.5", children: [
1057
- /* @__PURE__ */ jsx2("label", { className: FIELD_LABEL_CLASS, children: "Environment Variables" }),
1058
- /* @__PURE__ */ jsxs2(
1237
+ /* @__PURE__ */ jsxs3("div", { children: [
1238
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-1.5", children: [
1239
+ /* @__PURE__ */ jsx3("label", { className: FIELD_LABEL_CLASS, children: "Environment Variables" }),
1240
+ /* @__PURE__ */ jsxs3(
1059
1241
  "button",
1060
1242
  {
1061
1243
  type: "button",
@@ -1065,15 +1247,15 @@ function ProvisioningWizard({
1065
1247
  ]),
1066
1248
  className: "flex items-center gap-1 text-xs text-primary hover:text-primary/70 transition-colors font-medium",
1067
1249
  children: [
1068
- /* @__PURE__ */ jsx2(Plus, { className: "h-3 w-3" }),
1250
+ /* @__PURE__ */ jsx3(Plus, { className: "h-3 w-3" }),
1069
1251
  " Add Var"
1070
1252
  ]
1071
1253
  }
1072
1254
  )
1073
1255
  ] }),
1074
- /* @__PURE__ */ jsxs2("div", { className: "space-y-2", children: [
1075
- envVars.map((env, i) => /* @__PURE__ */ jsxs2("div", { className: "flex gap-2", children: [
1076
- /* @__PURE__ */ jsx2(
1256
+ /* @__PURE__ */ jsxs3("div", { className: "space-y-2", children: [
1257
+ envVars.map((env, i) => /* @__PURE__ */ jsxs3("div", { className: "flex gap-2", children: [
1258
+ /* @__PURE__ */ jsx3(
1077
1259
  Input,
1078
1260
  {
1079
1261
  type: "text",
@@ -1087,7 +1269,7 @@ function ProvisioningWizard({
1087
1269
  placeholder: "API_KEY"
1088
1270
  }
1089
1271
  ),
1090
- /* @__PURE__ */ jsx2(
1272
+ /* @__PURE__ */ jsx3(
1091
1273
  Input,
1092
1274
  {
1093
1275
  type: "password",
@@ -1101,7 +1283,7 @@ function ProvisioningWizard({
1101
1283
  placeholder: "sk-xxxxxxxxxxx"
1102
1284
  }
1103
1285
  ),
1104
- /* @__PURE__ */ jsx2(
1286
+ /* @__PURE__ */ jsx3(
1105
1287
  Button,
1106
1288
  {
1107
1289
  type: "button",
@@ -1111,25 +1293,25 @@ function ProvisioningWizard({
1111
1293
  envVars.filter((_, idx) => idx !== i)
1112
1294
  ),
1113
1295
  className: "h-9 w-9 shrink-0 text-destructive hover:bg-destructive/10 hover:border-destructive/30",
1114
- children: /* @__PURE__ */ jsx2(Trash2, { className: "h-4 w-4" })
1296
+ children: /* @__PURE__ */ jsx3(Trash2, { className: "h-4 w-4" })
1115
1297
  }
1116
1298
  )
1117
1299
  ] }, i)),
1118
- envVars.length === 0 && /* @__PURE__ */ jsx2("div", { className: "text-center p-3 border border-dashed border-border rounded-lg text-muted-foreground/60 text-xs italic", children: "No environment variables set" })
1300
+ envVars.length === 0 && /* @__PURE__ */ jsx3("div", { className: "text-center p-3 border border-dashed border-border rounded-lg text-muted-foreground/60 text-xs italic", children: "No environment variables set" })
1119
1301
  ] })
1120
1302
  ] }),
1121
- availableScripts.length > 0 && /* @__PURE__ */ jsxs2("div", { children: [
1122
- /* @__PURE__ */ jsx2("div", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Startup Scripts" }),
1123
- /* @__PURE__ */ jsx2("div", { className: "space-y-2", children: availableScripts.filter((s) => s.enabled).map((script) => {
1303
+ availableScripts.length > 0 && /* @__PURE__ */ jsxs3("div", { children: [
1304
+ /* @__PURE__ */ jsx3("div", { className: cn(FIELD_LABEL_CLASS, "mb-1.5"), children: "Startup Scripts" }),
1305
+ /* @__PURE__ */ jsx3("div", { className: "space-y-2", children: availableScripts.filter((s) => s.enabled).map((script) => {
1124
1306
  const selected = startupScriptIds.includes(
1125
1307
  script.id
1126
1308
  );
1127
- return /* @__PURE__ */ jsxs2(
1309
+ return /* @__PURE__ */ jsxs3(
1128
1310
  "label",
1129
1311
  {
1130
1312
  className: "flex items-start gap-3 cursor-pointer group rounded-lg border border-border p-3 transition-colors hover:border-primary/30",
1131
1313
  children: [
1132
- /* @__PURE__ */ jsx2(
1314
+ /* @__PURE__ */ jsx3(
1133
1315
  "input",
1134
1316
  {
1135
1317
  type: "checkbox",
@@ -1142,15 +1324,15 @@ function ProvisioningWizard({
1142
1324
  className: "mt-0.5 h-4 w-4 rounded border-border text-primary focus:ring-primary/30"
1143
1325
  }
1144
1326
  ),
1145
- /* @__PURE__ */ jsxs2("div", { className: "flex-1 min-w-0", children: [
1146
- /* @__PURE__ */ jsx2("div", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: script.name }),
1147
- script.description && /* @__PURE__ */ jsx2("div", { className: "text-xs text-muted-foreground mt-0.5", children: script.description }),
1148
- script.injectSecrets.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-1 mt-1.5", children: script.injectSecrets.map((s) => /* @__PURE__ */ jsxs2(
1327
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 min-w-0", children: [
1328
+ /* @__PURE__ */ jsx3("div", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: script.name }),
1329
+ script.description && /* @__PURE__ */ jsx3("div", { className: "text-xs text-muted-foreground mt-0.5", children: script.description }),
1330
+ script.injectSecrets.length > 0 && /* @__PURE__ */ jsx3("div", { className: "flex flex-wrap gap-1 mt-1.5", children: script.injectSecrets.map((s) => /* @__PURE__ */ jsxs3(
1149
1331
  "span",
1150
1332
  {
1151
1333
  className: "inline-flex items-center gap-0.5 rounded-full bg-muted px-2 py-0.5 text-[10px] text-muted-foreground",
1152
1334
  children: [
1153
- /* @__PURE__ */ jsxs2(
1335
+ /* @__PURE__ */ jsxs3(
1154
1336
  "svg",
1155
1337
  {
1156
1338
  className: "h-2.5 w-2.5",
@@ -1159,7 +1341,7 @@ function ProvisioningWizard({
1159
1341
  stroke: "currentColor",
1160
1342
  strokeWidth: "2",
1161
1343
  children: [
1162
- /* @__PURE__ */ jsx2(
1344
+ /* @__PURE__ */ jsx3(
1163
1345
  "rect",
1164
1346
  {
1165
1347
  x: "3",
@@ -1170,7 +1352,7 @@ function ProvisioningWizard({
1170
1352
  ry: "2"
1171
1353
  }
1172
1354
  ),
1173
- /* @__PURE__ */ jsx2("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
1355
+ /* @__PURE__ */ jsx3("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
1174
1356
  ]
1175
1357
  }
1176
1358
  ),
@@ -1186,9 +1368,9 @@ function ProvisioningWizard({
1186
1368
  );
1187
1369
  }) })
1188
1370
  ] }),
1189
- /* @__PURE__ */ jsxs2("div", { className: "pt-3 border-t border-border flex items-start justify-between gap-3", children: [
1190
- /* @__PURE__ */ jsxs2("div", { children: [
1191
- /* @__PURE__ */ jsx2(
1371
+ /* @__PURE__ */ jsxs3("div", { className: "pt-3 border-t border-border flex items-start justify-between gap-3", children: [
1372
+ /* @__PURE__ */ jsxs3("div", { children: [
1373
+ /* @__PURE__ */ jsx3(
1192
1374
  "label",
1193
1375
  {
1194
1376
  htmlFor: "wizard-bare-mode",
@@ -1196,9 +1378,9 @@ function ProvisioningWizard({
1196
1378
  children: "Bare Mode"
1197
1379
  }
1198
1380
  ),
1199
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-muted-foreground mt-0.5", children: "Start as a raw container without an embedded AI Agent backend." })
1381
+ /* @__PURE__ */ jsx3("p", { className: "text-xs text-muted-foreground mt-0.5", children: "Start as a raw container without an embedded AI Agent backend." })
1200
1382
  ] }),
1201
- /* @__PURE__ */ jsx2(
1383
+ /* @__PURE__ */ jsx3(
1202
1384
  Switch,
1203
1385
  {
1204
1386
  id: "wizard-bare-mode",
@@ -1210,27 +1392,27 @@ function ProvisioningWizard({
1210
1392
  ] })
1211
1393
  ] })
1212
1394
  ] }) }) }),
1213
- sshAccess && (!isMultistep || currentStep === 3) && /* @__PURE__ */ jsx2(React2.Fragment, { children: /* @__PURE__ */ jsxs2("section", { className: SECTION_CARD_CLASS, children: [
1214
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 mb-4", children: [
1215
- /* @__PURE__ */ jsx2(Settings, { className: "h-4 w-4 text-primary shrink-0" }),
1216
- /* @__PURE__ */ jsx2("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Access Configuration" })
1395
+ sshAccess && (!isMultistep || currentStep === 3) && /* @__PURE__ */ jsx3(React2.Fragment, { children: /* @__PURE__ */ jsxs3("section", { className: SECTION_CARD_CLASS, children: [
1396
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 mb-4", children: [
1397
+ /* @__PURE__ */ jsx3(Settings, { className: "h-4 w-4 text-primary shrink-0" }),
1398
+ /* @__PURE__ */ jsx3("h2", { className: "text-sm font-semibold uppercase tracking-[0.06em] text-muted-foreground", children: "Access Configuration" })
1217
1399
  ] }),
1218
- /* @__PURE__ */ jsx2(SshAccessStep, { config: sshAccess })
1400
+ /* @__PURE__ */ jsx3(SshAccessStep, { config: sshAccess })
1219
1401
  ] }) })
1220
1402
  ] })
1221
1403
  ] }),
1222
- /* @__PURE__ */ jsxs2("div", { className: "col-span-12 xl:col-span-4 sticky top-4 space-y-4", children: [
1223
- /* @__PURE__ */ jsxs2("div", { className: "rounded-lg border border-border bg-card p-5 shadow-sm", children: [
1224
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between items-center mb-3", children: [
1225
- /* @__PURE__ */ jsx2("span", { className: FIELD_LABEL_CLASS, children: "Run Cost" }),
1226
- /* @__PURE__ */ jsxs2(
1404
+ /* @__PURE__ */ jsxs3("div", { className: "col-span-12 xl:col-span-4 sticky top-4 space-y-4", children: [
1405
+ /* @__PURE__ */ jsxs3("div", { className: "rounded-lg border border-border bg-card p-5 shadow-sm", children: [
1406
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-3", children: [
1407
+ /* @__PURE__ */ jsx3("span", { className: FIELD_LABEL_CLASS, children: "Run Cost" }),
1408
+ /* @__PURE__ */ jsxs3(
1227
1409
  "div",
1228
1410
  {
1229
1411
  role: "group",
1230
1412
  "aria-label": "Pricing view",
1231
1413
  className: "inline-flex items-center rounded-md border border-border bg-muted/50 p-0.5",
1232
1414
  children: [
1233
- /* @__PURE__ */ jsx2(
1415
+ /* @__PURE__ */ jsx3(
1234
1416
  "button",
1235
1417
  {
1236
1418
  type: "button",
@@ -1243,7 +1425,7 @@ function ProvisioningWizard({
1243
1425
  children: "Per Hour"
1244
1426
  }
1245
1427
  ),
1246
- /* @__PURE__ */ jsx2(
1428
+ /* @__PURE__ */ jsx3(
1247
1429
  "button",
1248
1430
  {
1249
1431
  type: "button",
@@ -1260,8 +1442,8 @@ function ProvisioningWizard({
1260
1442
  }
1261
1443
  )
1262
1444
  ] }),
1263
- /* @__PURE__ */ jsxs2("div", { className: "flex items-baseline gap-2 mb-4", children: [
1264
- /* @__PURE__ */ jsxs2(
1445
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-baseline gap-2 mb-4", children: [
1446
+ /* @__PURE__ */ jsxs3(
1265
1447
  "span",
1266
1448
  {
1267
1449
  className: cn(
@@ -1275,36 +1457,36 @@ function ProvisioningWizard({
1275
1457
  },
1276
1458
  pricingView
1277
1459
  ),
1278
- /* @__PURE__ */ jsx2("span", { className: "text-muted-foreground text-sm", children: pricingSuffix })
1460
+ /* @__PURE__ */ jsx3("span", { className: "text-muted-foreground text-sm", children: pricingSuffix })
1279
1461
  ] }),
1280
- /* @__PURE__ */ jsxs2("div", { className: "space-y-2 rounded-md border border-border bg-muted/30 p-3", children: [
1281
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1282
- /* @__PURE__ */ jsx2("span", { children: "COMPUTE" }),
1283
- /* @__PURE__ */ jsxs2("span", { className: "text-foreground", children: [
1462
+ /* @__PURE__ */ jsxs3("div", { className: "space-y-2 rounded-md border border-border bg-muted/30 p-3", children: [
1463
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1464
+ /* @__PURE__ */ jsx3("span", { children: "COMPUTE" }),
1465
+ /* @__PURE__ */ jsxs3("span", { className: "text-foreground", children: [
1284
1466
  "$",
1285
1467
  fmtRate(hourlyCostBreakdown.compute),
1286
1468
  rateSuffix
1287
1469
  ] })
1288
1470
  ] }),
1289
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1290
- /* @__PURE__ */ jsx2("span", { children: "MEMORY" }),
1291
- /* @__PURE__ */ jsxs2("span", { className: "text-foreground/80", children: [
1471
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1472
+ /* @__PURE__ */ jsx3("span", { children: "MEMORY" }),
1473
+ /* @__PURE__ */ jsxs3("span", { className: "text-foreground/80", children: [
1292
1474
  "$",
1293
1475
  fmtRate(hourlyCostBreakdown.memory),
1294
1476
  rateSuffix
1295
1477
  ] })
1296
1478
  ] }),
1297
- /* @__PURE__ */ jsxs2("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1298
- /* @__PURE__ */ jsx2("span", { children: "STORAGE" }),
1299
- /* @__PURE__ */ jsxs2("span", { className: "text-foreground/80", children: [
1479
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-xs font-mono tracking-wide text-muted-foreground", children: [
1480
+ /* @__PURE__ */ jsx3("span", { children: "STORAGE" }),
1481
+ /* @__PURE__ */ jsxs3("span", { className: "text-foreground/80", children: [
1300
1482
  "$",
1301
1483
  fmtRate(hourlyCostBreakdown.storage),
1302
1484
  rateSuffix
1303
1485
  ] })
1304
1486
  ] }),
1305
- hourlyCostBreakdown.floorApplies && /* @__PURE__ */ jsxs2("div", { className: "flex justify-between text-xs font-mono tracking-wide text-primary border-t border-border pt-2", children: [
1306
- /* @__PURE__ */ jsx2("span", { children: "MIN CHARGE" }),
1307
- /* @__PURE__ */ jsxs2("span", { children: [
1487
+ hourlyCostBreakdown.floorApplies && /* @__PURE__ */ jsxs3("div", { className: "flex justify-between text-xs font-mono tracking-wide text-primary border-t border-border pt-2", children: [
1488
+ /* @__PURE__ */ jsx3("span", { children: "MIN CHARGE" }),
1489
+ /* @__PURE__ */ jsxs3("span", { children: [
1308
1490
  "$",
1309
1491
  fmtRate(
1310
1492
  hourlyCostBreakdown.floor - hourlyCostBreakdown.lineSum
@@ -1314,12 +1496,12 @@ function ProvisioningWizard({
1314
1496
  ] })
1315
1497
  ] })
1316
1498
  ] }),
1317
- deployError && /* @__PURE__ */ jsxs2("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-3 flex items-center gap-2", children: [
1318
- /* @__PURE__ */ jsx2(Info, { className: "h-4 w-4 text-destructive shrink-0" }),
1319
- /* @__PURE__ */ jsx2("p", { className: "text-sm font-medium text-destructive", children: deployError })
1499
+ deployError && /* @__PURE__ */ jsxs3("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-3 flex items-center gap-2", children: [
1500
+ /* @__PURE__ */ jsx3(Info, { className: "h-4 w-4 text-destructive shrink-0" }),
1501
+ /* @__PURE__ */ jsx3("p", { className: "text-sm font-medium text-destructive", children: deployError })
1320
1502
  ] }),
1321
- /* @__PURE__ */ jsx2("div", { className: "space-y-2", children: isMultistep ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
1322
- currentStep < finalStep ? /* @__PURE__ */ jsxs2(
1503
+ /* @__PURE__ */ jsx3("div", { className: "space-y-2", children: isMultistep ? /* @__PURE__ */ jsxs3(Fragment3, { children: [
1504
+ currentStep < finalStep ? /* @__PURE__ */ jsxs3(
1323
1505
  Button,
1324
1506
  {
1325
1507
  type: "button",
@@ -1330,20 +1512,20 @@ function ProvisioningWizard({
1330
1512
  stepLabels[currentStep]
1331
1513
  ]
1332
1514
  }
1333
- ) : /* @__PURE__ */ jsx2(
1515
+ ) : /* @__PURE__ */ jsx3(
1334
1516
  Button,
1335
1517
  {
1336
1518
  type: "button",
1337
1519
  onClick: handleDeploy,
1338
1520
  disabled: isDeploying || !selectedEnv,
1339
1521
  className: "w-full",
1340
- children: isDeploying ? /* @__PURE__ */ jsxs2("span", { className: "flex items-center justify-center gap-2", children: [
1341
- /* @__PURE__ */ jsx2(Loader2, { className: "h-4 w-4 animate-spin" }),
1522
+ children: isDeploying ? /* @__PURE__ */ jsxs3("span", { className: "flex items-center justify-center gap-2", children: [
1523
+ /* @__PURE__ */ jsx3(Loader2, { className: "h-4 w-4 animate-spin" }),
1342
1524
  "Deploying..."
1343
1525
  ] }) : "Deploy Workspace"
1344
1526
  }
1345
1527
  ),
1346
- currentStep > 1 && /* @__PURE__ */ jsx2(
1528
+ currentStep > 1 && /* @__PURE__ */ jsx3(
1347
1529
  Button,
1348
1530
  {
1349
1531
  type: "button",
@@ -1353,15 +1535,15 @@ function ProvisioningWizard({
1353
1535
  children: "Back"
1354
1536
  }
1355
1537
  )
1356
- ] }) : /* @__PURE__ */ jsx2(
1538
+ ] }) : /* @__PURE__ */ jsx3(
1357
1539
  Button,
1358
1540
  {
1359
1541
  type: "button",
1360
1542
  onClick: handleDeploy,
1361
1543
  disabled: isDeploying || !selectedEnv,
1362
1544
  className: "w-full",
1363
- children: isDeploying ? /* @__PURE__ */ jsxs2("span", { className: "flex items-center justify-center gap-2", children: [
1364
- /* @__PURE__ */ jsx2(Loader2, { className: "h-4 w-4 animate-spin" }),
1545
+ children: isDeploying ? /* @__PURE__ */ jsxs3("span", { className: "flex items-center justify-center gap-2", children: [
1546
+ /* @__PURE__ */ jsx3(Loader2, { className: "h-4 w-4 animate-spin" }),
1365
1547
  "Spinning up environment..."
1366
1548
  ] }) : "Deploy Workspace"
1367
1549
  }
@@ -1375,7 +1557,7 @@ function ProvisioningWizard({
1375
1557
  import * as React3 from "react";
1376
1558
  import { Skeleton as Skeleton2, SkeletonCard as SkeletonCard2 } from "@tangle-network/ui/primitives";
1377
1559
  import { ChevronDown } from "lucide-react";
1378
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1560
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1379
1561
  async function fetchTiersFromApi(apiBasePath) {
1380
1562
  const res = await fetch(`${apiBasePath}/v1/billing/tiers`);
1381
1563
  if (!res.ok) throw new Error("Failed to fetch pricing tiers");
@@ -1459,25 +1641,25 @@ function StandalonePricingPage({
1459
1641
  },
1460
1642
  [apiBasePath, state.billingPeriod, onSelectTier]
1461
1643
  );
1462
- return /* @__PURE__ */ jsxs3("div", { className: cn("mx-auto max-w-6xl px-6 py-16 space-y-16", className), children: [
1463
- /* @__PURE__ */ jsxs3("div", { className: "space-y-4 text-center", children: [
1464
- eyebrow && /* @__PURE__ */ jsx3("span", { className: "text-xs font-bold uppercase tracking-widest text-[var(--brand-emerald,#10B981)]", children: eyebrow }),
1465
- /* @__PURE__ */ jsx3("h1", { className: "text-4xl font-extrabold tracking-tight text-foreground sm:text-5xl font-display", children: title }),
1466
- /* @__PURE__ */ jsx3("p", { className: "mx-auto max-w-2xl text-lg text-muted-foreground", children: subtitle })
1644
+ return /* @__PURE__ */ jsxs4("div", { className: cn("mx-auto max-w-6xl px-6 py-16 space-y-16", className), children: [
1645
+ /* @__PURE__ */ jsxs4("div", { className: "space-y-4 text-center", children: [
1646
+ eyebrow && /* @__PURE__ */ jsx4("span", { className: "text-xs font-bold uppercase tracking-widest text-[var(--brand-emerald,#10B981)]", children: eyebrow }),
1647
+ /* @__PURE__ */ jsx4("h1", { className: "text-4xl font-extrabold tracking-tight text-foreground sm:text-5xl font-display", children: title }),
1648
+ /* @__PURE__ */ jsx4("p", { className: "mx-auto max-w-2xl text-lg text-muted-foreground", children: subtitle })
1467
1649
  ] }),
1468
- state.loading ? /* @__PURE__ */ jsxs3("div", { className: "space-y-8", children: [
1469
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-center gap-4", children: [
1470
- /* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" }),
1471
- /* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" })
1650
+ state.loading ? /* @__PURE__ */ jsxs4("div", { className: "space-y-8", children: [
1651
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-center gap-4", children: [
1652
+ /* @__PURE__ */ jsx4(Skeleton2, { className: "h-10 w-24" }),
1653
+ /* @__PURE__ */ jsx4(Skeleton2, { className: "h-10 w-24" })
1472
1654
  ] }),
1473
- /* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [
1474
- /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
1475
- /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
1476
- /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" })
1655
+ /* @__PURE__ */ jsxs4("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [
1656
+ /* @__PURE__ */ jsx4(SkeletonCard2, { className: "h-[500px]" }),
1657
+ /* @__PURE__ */ jsx4(SkeletonCard2, { className: "h-[500px]" }),
1658
+ /* @__PURE__ */ jsx4(SkeletonCard2, { className: "h-[500px]" })
1477
1659
  ] })
1478
- ] }) : state.error ? /* @__PURE__ */ jsxs3("div", { className: "flex flex-col items-center justify-center space-y-4 rounded-xl border border-destructive/20 bg-destructive/5 p-8 text-center", children: [
1479
- /* @__PURE__ */ jsx3("p", { className: "text-destructive text-sm font-medium", children: state.error }),
1480
- /* @__PURE__ */ jsx3(
1660
+ ] }) : state.error ? /* @__PURE__ */ jsxs4("div", { className: "flex flex-col items-center justify-center space-y-4 rounded-xl border border-destructive/20 bg-destructive/5 p-8 text-center", children: [
1661
+ /* @__PURE__ */ jsx4("p", { className: "text-destructive text-sm font-medium", children: state.error }),
1662
+ /* @__PURE__ */ jsx4(
1481
1663
  "button",
1482
1664
  {
1483
1665
  type: "button",
@@ -1486,7 +1668,7 @@ function StandalonePricingPage({
1486
1668
  children: "Try Again"
1487
1669
  }
1488
1670
  )
1489
- ] }) : /* @__PURE__ */ jsx3(
1671
+ ] }) : /* @__PURE__ */ jsx4(
1490
1672
  PricingPage,
1491
1673
  {
1492
1674
  tiers: state.tiers,
@@ -1497,14 +1679,14 @@ function StandalonePricingPage({
1497
1679
  loading: state.selectingTier
1498
1680
  }
1499
1681
  ),
1500
- /* @__PURE__ */ jsxs3("div", { className: "mx-auto max-w-2xl space-y-4 border-t border-border pt-12", children: [
1501
- /* @__PURE__ */ jsx3("h2", { className: "text-center text-xl font-bold text-foreground mb-6", children: "Frequently Asked Questions" }),
1502
- FAQ.map(({ q, a }) => /* @__PURE__ */ jsxs3("details", { className: "group rounded-xl border border-border bg-card overflow-hidden", children: [
1503
- /* @__PURE__ */ jsxs3("summary", { className: "flex cursor-pointer items-center justify-between px-6 py-4 font-medium text-foreground text-sm", children: [
1682
+ /* @__PURE__ */ jsxs4("div", { className: "mx-auto max-w-2xl space-y-4 border-t border-border pt-12", children: [
1683
+ /* @__PURE__ */ jsx4("h2", { className: "text-center text-xl font-bold text-foreground mb-6", children: "Frequently Asked Questions" }),
1684
+ FAQ.map(({ q, a }) => /* @__PURE__ */ jsxs4("details", { className: "group rounded-xl border border-border bg-card overflow-hidden", children: [
1685
+ /* @__PURE__ */ jsxs4("summary", { className: "flex cursor-pointer items-center justify-between px-6 py-4 font-medium text-foreground text-sm", children: [
1504
1686
  q,
1505
- /* @__PURE__ */ jsx3(ChevronDown, { className: "h-4 w-4 text-muted-foreground transition-transform group-open:rotate-180" })
1687
+ /* @__PURE__ */ jsx4(ChevronDown, { className: "h-4 w-4 text-muted-foreground transition-transform group-open:rotate-180" })
1506
1688
  ] }),
1507
- /* @__PURE__ */ jsx3("div", { className: "px-6 pb-4", children: /* @__PURE__ */ jsx3("p", { className: "text-sm text-muted-foreground leading-relaxed", children: a }) })
1689
+ /* @__PURE__ */ jsx4("div", { className: "px-6 pb-4", children: /* @__PURE__ */ jsx4("p", { className: "text-sm text-muted-foreground leading-relaxed", children: a }) })
1508
1690
  ] }, q))
1509
1691
  ] })
1510
1692
  ] });
@@ -1536,7 +1718,7 @@ import {
1536
1718
  } from "@tangle-network/ui/primitives";
1537
1719
  import { EmptyState } from "@tangle-network/ui/primitives";
1538
1720
  import { Input as Input2 } from "@tangle-network/ui/primitives";
1539
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1721
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1540
1722
  var TIER_LIMITS = {
1541
1723
  free: 3,
1542
1724
  starter: 10,
@@ -1589,14 +1771,14 @@ function ProfilesPage({
1589
1771
  const filteredCustom = customProfiles.filter(
1590
1772
  (p) => p.name.toLowerCase().includes(searchQuery.toLowerCase()) || p.description?.toLowerCase().includes(searchQuery.toLowerCase())
1591
1773
  );
1592
- return /* @__PURE__ */ jsxs4("div", { className: "space-y-6", children: [
1593
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between", children: [
1594
- /* @__PURE__ */ jsxs4("div", { children: [
1595
- /* @__PURE__ */ jsx4("h1", { className: "font-semibold text-2xl", children: title }),
1596
- /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground", children: "Customize agent behavior with system prompts, models, and instructions" })
1774
+ return /* @__PURE__ */ jsxs5("div", { className: "space-y-6", children: [
1775
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between", children: [
1776
+ /* @__PURE__ */ jsxs5("div", { children: [
1777
+ /* @__PURE__ */ jsx5("h1", { className: "font-semibold text-2xl", children: title }),
1778
+ /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground", children: "Customize agent behavior with system prompts, models, and instructions" })
1597
1779
  ] }),
1598
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3", children: [
1599
- onCompareClick && customProfiles.length >= 2 && /* @__PURE__ */ jsx4(
1780
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3", children: [
1781
+ onCompareClick && customProfiles.length >= 2 && /* @__PURE__ */ jsx5(
1600
1782
  Button2,
1601
1783
  {
1602
1784
  variant: "outline",
@@ -1604,30 +1786,30 @@ function ProfilesPage({
1604
1786
  children: "Compare Profiles"
1605
1787
  }
1606
1788
  ),
1607
- /* @__PURE__ */ jsxs4(
1789
+ /* @__PURE__ */ jsxs5(
1608
1790
  Button2,
1609
1791
  {
1610
1792
  onClick: () => setCreateDialogOpen(true),
1611
1793
  disabled: !canCreateMore,
1612
1794
  children: [
1613
- /* @__PURE__ */ jsx4(Plus2, { className: "mr-2 h-4 w-4" }),
1795
+ /* @__PURE__ */ jsx5(Plus2, { className: "mr-2 h-4 w-4" }),
1614
1796
  "Create Profile"
1615
1797
  ]
1616
1798
  }
1617
1799
  )
1618
1800
  ] })
1619
1801
  ] }),
1620
- !canCreateMore && /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] p-3 text-sm text-[var(--surface-warning-text)]", children: [
1621
- /* @__PURE__ */ jsx4(AlertCircle, { className: "h-4 w-4" }),
1622
- /* @__PURE__ */ jsxs4("span", { children: [
1802
+ !canCreateMore && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] p-3 text-sm text-[var(--surface-warning-text)]", children: [
1803
+ /* @__PURE__ */ jsx5(AlertCircle, { className: "h-4 w-4" }),
1804
+ /* @__PURE__ */ jsxs5("span", { children: [
1623
1805
  "You've reached your profile limit (",
1624
1806
  profileLimit,
1625
1807
  " profiles). Upgrade your plan to create more."
1626
1808
  ] })
1627
1809
  ] }),
1628
- /* @__PURE__ */ jsxs4("div", { className: "relative max-w-md", children: [
1629
- /* @__PURE__ */ jsx4(Search, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
1630
- /* @__PURE__ */ jsx4(
1810
+ /* @__PURE__ */ jsxs5("div", { className: "relative max-w-md", children: [
1811
+ /* @__PURE__ */ jsx5(Search, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
1812
+ /* @__PURE__ */ jsx5(
1631
1813
  Input2,
1632
1814
  {
1633
1815
  placeholder: "Search profiles...",
@@ -1637,33 +1819,33 @@ function ProfilesPage({
1637
1819
  }
1638
1820
  )
1639
1821
  ] }),
1640
- error && /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
1641
- /* @__PURE__ */ jsx4(AlertCircle, { className: "h-4 w-4" }),
1642
- /* @__PURE__ */ jsx4("span", { children: error }),
1643
- /* @__PURE__ */ jsx4(Button2, { variant: "ghost", size: "sm", onClick: loadProfiles, children: "Retry" })
1822
+ error && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
1823
+ /* @__PURE__ */ jsx5(AlertCircle, { className: "h-4 w-4" }),
1824
+ /* @__PURE__ */ jsx5("span", { children: error }),
1825
+ /* @__PURE__ */ jsx5(Button2, { variant: "ghost", size: "sm", onClick: loadProfiles, children: "Retry" })
1644
1826
  ] }),
1645
- loading && /* @__PURE__ */ jsx4("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx4(Loader22, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }),
1646
- !loading && /* @__PURE__ */ jsxs4("div", { className: "space-y-8", children: [
1647
- /* @__PURE__ */ jsxs4("section", { children: [
1648
- /* @__PURE__ */ jsx4("div", { className: "mb-3 flex items-center justify-between", children: /* @__PURE__ */ jsxs4("h2", { className: "font-medium text-lg", children: [
1827
+ loading && /* @__PURE__ */ jsx5("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx5(Loader22, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }),
1828
+ !loading && /* @__PURE__ */ jsxs5("div", { className: "space-y-8", children: [
1829
+ /* @__PURE__ */ jsxs5("section", { children: [
1830
+ /* @__PURE__ */ jsx5("div", { className: "mb-3 flex items-center justify-between", children: /* @__PURE__ */ jsxs5("h2", { className: "font-medium text-lg", children: [
1649
1831
  "Your Profiles (",
1650
1832
  customProfiles.length,
1651
1833
  "/",
1652
1834
  profileLimit === Number.POSITIVE_INFINITY ? "inf" : profileLimit,
1653
1835
  ")"
1654
1836
  ] }) }),
1655
- filteredCustom.length === 0 ? /* @__PURE__ */ jsx4(
1837
+ filteredCustom.length === 0 ? /* @__PURE__ */ jsx5(
1656
1838
  EmptyState,
1657
1839
  {
1658
- icon: /* @__PURE__ */ jsx4(Settings2, { className: "h-8 w-8" }),
1840
+ icon: /* @__PURE__ */ jsx5(Settings2, { className: "h-8 w-8" }),
1659
1841
  title: "No custom profiles yet",
1660
1842
  description: "Create a profile to customize agent behavior",
1661
- action: canCreateMore ? /* @__PURE__ */ jsxs4(Button2, { onClick: () => setCreateDialogOpen(true), children: [
1662
- /* @__PURE__ */ jsx4(Plus2, { className: "mr-2 h-4 w-4" }),
1843
+ action: canCreateMore ? /* @__PURE__ */ jsxs5(Button2, { onClick: () => setCreateDialogOpen(true), children: [
1844
+ /* @__PURE__ */ jsx5(Plus2, { className: "mr-2 h-4 w-4" }),
1663
1845
  "Create Profile"
1664
1846
  ] }) : void 0
1665
1847
  }
1666
- ) : /* @__PURE__ */ jsx4("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: filteredCustom.map((profile) => /* @__PURE__ */ jsx4(
1848
+ ) : /* @__PURE__ */ jsx5("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: filteredCustom.map((profile) => /* @__PURE__ */ jsx5(
1667
1849
  ProfileCard,
1668
1850
  {
1669
1851
  profile,
@@ -1674,13 +1856,13 @@ function ProfilesPage({
1674
1856
  profile.id
1675
1857
  )) })
1676
1858
  ] }),
1677
- /* @__PURE__ */ jsxs4("section", { children: [
1678
- /* @__PURE__ */ jsx4("div", { className: "mb-3 flex items-center justify-between", children: /* @__PURE__ */ jsxs4("h2", { className: "font-medium text-lg", children: [
1859
+ /* @__PURE__ */ jsxs5("section", { children: [
1860
+ /* @__PURE__ */ jsx5("div", { className: "mb-3 flex items-center justify-between", children: /* @__PURE__ */ jsxs5("h2", { className: "font-medium text-lg", children: [
1679
1861
  "Built-in Profiles (",
1680
1862
  builtinProfiles.length,
1681
1863
  ")"
1682
1864
  ] }) }),
1683
- filteredBuiltin.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground text-sm", children: "No matching built-in profiles" }) : /* @__PURE__ */ jsx4("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: filteredBuiltin.map((profile) => /* @__PURE__ */ jsx4(
1865
+ filteredBuiltin.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground text-sm", children: "No matching built-in profiles" }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: filteredBuiltin.map((profile) => /* @__PURE__ */ jsx5(
1684
1866
  ProfileCard,
1685
1867
  {
1686
1868
  profile,
@@ -1691,7 +1873,7 @@ function ProfilesPage({
1691
1873
  )) })
1692
1874
  ] })
1693
1875
  ] }),
1694
- /* @__PURE__ */ jsx4(
1876
+ /* @__PURE__ */ jsx5(
1695
1877
  ProfileFormDialog,
1696
1878
  {
1697
1879
  open: createDialogOpen || !!editingProfile,
@@ -1709,7 +1891,7 @@ function ProfilesPage({
1709
1891
  }
1710
1892
  }
1711
1893
  ),
1712
- /* @__PURE__ */ jsx4(
1894
+ /* @__PURE__ */ jsx5(
1713
1895
  DeleteProfileDialog,
1714
1896
  {
1715
1897
  profile: deletingProfile,
@@ -1721,7 +1903,7 @@ function ProfilesPage({
1721
1903
  }
1722
1904
  }
1723
1905
  ),
1724
- /* @__PURE__ */ jsx4(
1906
+ /* @__PURE__ */ jsx5(
1725
1907
  ProfileDetailDialog,
1726
1908
  {
1727
1909
  profile: detailProfile,
@@ -1750,61 +1932,61 @@ function ProfileCard({
1750
1932
  onDelete,
1751
1933
  isBuiltin
1752
1934
  }) {
1753
- return /* @__PURE__ */ jsxs4(
1935
+ return /* @__PURE__ */ jsxs5(
1754
1936
  Card,
1755
1937
  {
1756
1938
  className: "cursor-pointer p-4 transition-colors hover:border-border/80",
1757
1939
  onClick: onView,
1758
1940
  children: [
1759
- /* @__PURE__ */ jsxs4("div", { className: "flex items-start justify-between", children: [
1760
- /* @__PURE__ */ jsxs4("div", { className: "flex-1", children: [
1761
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
1762
- /* @__PURE__ */ jsx4("h3", { className: "font-medium", children: profile.name }),
1763
- isBuiltin && /* @__PURE__ */ jsx4(Badge2, { variant: "secondary", className: "border-0 text-xs", children: "Built-in" }),
1764
- profile.is_public && !isBuiltin && /* @__PURE__ */ jsx4(Badge2, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)] text-xs", children: "Public" })
1941
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-start justify-between", children: [
1942
+ /* @__PURE__ */ jsxs5("div", { className: "flex-1", children: [
1943
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2", children: [
1944
+ /* @__PURE__ */ jsx5("h3", { className: "font-medium", children: profile.name }),
1945
+ isBuiltin && /* @__PURE__ */ jsx5(Badge2, { variant: "secondary", className: "border-0 text-xs", children: "Built-in" }),
1946
+ profile.is_public && !isBuiltin && /* @__PURE__ */ jsx5(Badge2, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)] text-xs", children: "Public" })
1765
1947
  ] }),
1766
- profile.description && /* @__PURE__ */ jsx4("p", { className: "mt-1 line-clamp-2 text-muted-foreground text-sm", children: profile.description })
1948
+ profile.description && /* @__PURE__ */ jsx5("p", { className: "mt-1 line-clamp-2 text-muted-foreground text-sm", children: profile.description })
1767
1949
  ] }),
1768
- !isBuiltin && /* @__PURE__ */ jsxs4("div", { className: "flex gap-1", onClick: (e) => e.stopPropagation(), children: [
1769
- onEdit && /* @__PURE__ */ jsx4(
1950
+ !isBuiltin && /* @__PURE__ */ jsxs5("div", { className: "flex gap-1", onClick: (e) => e.stopPropagation(), children: [
1951
+ onEdit && /* @__PURE__ */ jsx5(
1770
1952
  Button2,
1771
1953
  {
1772
1954
  variant: "ghost",
1773
1955
  size: "icon",
1774
1956
  onClick: onEdit,
1775
1957
  "aria-label": "Edit profile",
1776
- children: /* @__PURE__ */ jsx4(Edit2, { className: "h-4 w-4" })
1958
+ children: /* @__PURE__ */ jsx5(Edit2, { className: "h-4 w-4" })
1777
1959
  }
1778
1960
  ),
1779
- onDelete && /* @__PURE__ */ jsx4(
1961
+ onDelete && /* @__PURE__ */ jsx5(
1780
1962
  Button2,
1781
1963
  {
1782
1964
  variant: "ghost",
1783
1965
  size: "icon",
1784
1966
  onClick: onDelete,
1785
1967
  "aria-label": "Delete profile",
1786
- children: /* @__PURE__ */ jsx4(Trash22, { className: "h-4 w-4 text-[var(--surface-danger-text)]" })
1968
+ children: /* @__PURE__ */ jsx5(Trash22, { className: "h-4 w-4 text-[var(--surface-danger-text)]" })
1787
1969
  }
1788
1970
  )
1789
1971
  ] })
1790
1972
  ] }),
1791
- /* @__PURE__ */ jsxs4("div", { className: "mt-3 flex flex-wrap gap-2", children: [
1792
- profile.extends && /* @__PURE__ */ jsxs4(Badge2, { variant: "outline", className: "text-xs", children: [
1973
+ /* @__PURE__ */ jsxs5("div", { className: "mt-3 flex flex-wrap gap-2", children: [
1974
+ profile.extends && /* @__PURE__ */ jsxs5(Badge2, { variant: "outline", className: "text-xs", children: [
1793
1975
  "extends ",
1794
1976
  profile.extends
1795
1977
  ] }),
1796
- profile.model && /* @__PURE__ */ jsx4(Badge2, { variant: "outline", className: "text-xs", children: profile.model.split("/").pop() })
1978
+ profile.model && /* @__PURE__ */ jsx5(Badge2, { variant: "outline", className: "text-xs", children: profile.model.split("/").pop() })
1797
1979
  ] }),
1798
- profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs4("div", { className: "mt-3 flex gap-4 border-border border-t pt-3 text-muted-foreground text-xs", children: [
1799
- /* @__PURE__ */ jsxs4("span", { children: [
1980
+ profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs5("div", { className: "mt-3 flex gap-4 border-border border-t pt-3 text-muted-foreground text-xs", children: [
1981
+ /* @__PURE__ */ jsxs5("span", { children: [
1800
1982
  profile.metrics.total_runs,
1801
1983
  " runs"
1802
1984
  ] }),
1803
- /* @__PURE__ */ jsxs4("span", { children: [
1985
+ /* @__PURE__ */ jsxs5("span", { children: [
1804
1986
  profile.metrics.success_rate.toFixed(0),
1805
1987
  "% success"
1806
1988
  ] }),
1807
- /* @__PURE__ */ jsxs4("span", { children: [
1989
+ /* @__PURE__ */ jsxs5("span", { children: [
1808
1990
  "~",
1809
1991
  (profile.metrics.avg_duration_ms / 1e3).toFixed(1),
1810
1992
  "s avg"
@@ -1891,19 +2073,19 @@ function ProfileFormDialog({
1891
2073
  setSaving(false);
1892
2074
  }
1893
2075
  };
1894
- return /* @__PURE__ */ jsx4(Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs4(DialogContent, { className: "max-w-2xl", children: [
1895
- /* @__PURE__ */ jsxs4(DialogHeader, { children: [
1896
- /* @__PURE__ */ jsx4(DialogTitle, { children: isEditing ? "Edit Profile" : "Create Profile" }),
1897
- /* @__PURE__ */ jsx4(DialogDescription, { children: isEditing ? "Update your custom profile configuration" : "Create a new profile to customize agent behavior" })
2076
+ return /* @__PURE__ */ jsx5(Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs5(DialogContent, { className: "max-w-2xl", children: [
2077
+ /* @__PURE__ */ jsxs5(DialogHeader, { children: [
2078
+ /* @__PURE__ */ jsx5(DialogTitle, { children: isEditing ? "Edit Profile" : "Create Profile" }),
2079
+ /* @__PURE__ */ jsx5(DialogDescription, { children: isEditing ? "Update your custom profile configuration" : "Create a new profile to customize agent behavior" })
1898
2080
  ] }),
1899
- /* @__PURE__ */ jsxs4("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
1900
- error && /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
1901
- /* @__PURE__ */ jsx4(AlertCircle, { className: "h-4 w-4" }),
1902
- /* @__PURE__ */ jsx4("span", { children: error })
2081
+ /* @__PURE__ */ jsxs5("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
2082
+ error && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
2083
+ /* @__PURE__ */ jsx5(AlertCircle, { className: "h-4 w-4" }),
2084
+ /* @__PURE__ */ jsx5("span", { children: error })
1903
2085
  ] }),
1904
- /* @__PURE__ */ jsxs4("div", { children: [
1905
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "Name *" }),
1906
- /* @__PURE__ */ jsx4(
2086
+ /* @__PURE__ */ jsxs5("div", { children: [
2087
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "Name *" }),
2088
+ /* @__PURE__ */ jsx5(
1907
2089
  Input2,
1908
2090
  {
1909
2091
  value: formData.name,
@@ -1915,9 +2097,9 @@ function ProfileFormDialog({
1915
2097
  }
1916
2098
  )
1917
2099
  ] }),
1918
- /* @__PURE__ */ jsxs4("div", { children: [
1919
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "Description" }),
1920
- /* @__PURE__ */ jsx4(
2100
+ /* @__PURE__ */ jsxs5("div", { children: [
2101
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "Description" }),
2102
+ /* @__PURE__ */ jsx5(
1921
2103
  Input2,
1922
2104
  {
1923
2105
  value: formData.description,
@@ -1926,17 +2108,17 @@ function ProfileFormDialog({
1926
2108
  }
1927
2109
  )
1928
2110
  ] }),
1929
- /* @__PURE__ */ jsxs4("div", { children: [
1930
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "Extends (base profile)" }),
1931
- /* @__PURE__ */ jsxs4(
2111
+ /* @__PURE__ */ jsxs5("div", { children: [
2112
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "Extends (base profile)" }),
2113
+ /* @__PURE__ */ jsxs5(
1932
2114
  "select",
1933
2115
  {
1934
2116
  value: formData.extends,
1935
2117
  onChange: (e) => setFormData((d) => ({ ...d, extends: e.target.value })),
1936
2118
  className: "w-full rounded-md border border-border bg-background px-3 py-2 text-sm",
1937
2119
  children: [
1938
- /* @__PURE__ */ jsx4("option", { value: "", children: "None (start from scratch)" }),
1939
- builtinProfiles.map((p) => /* @__PURE__ */ jsxs4("option", { value: p.name, children: [
2120
+ /* @__PURE__ */ jsx5("option", { value: "", children: "None (start from scratch)" }),
2121
+ builtinProfiles.map((p) => /* @__PURE__ */ jsxs5("option", { value: p.name, children: [
1940
2122
  p.name,
1941
2123
  " - ",
1942
2124
  p.description ?? "Built-in profile"
@@ -1945,9 +2127,9 @@ function ProfileFormDialog({
1945
2127
  }
1946
2128
  )
1947
2129
  ] }),
1948
- /* @__PURE__ */ jsxs4("div", { children: [
1949
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "Model" }),
1950
- /* @__PURE__ */ jsx4(
2130
+ /* @__PURE__ */ jsxs5("div", { children: [
2131
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "Model" }),
2132
+ /* @__PURE__ */ jsx5(
1951
2133
  Input2,
1952
2134
  {
1953
2135
  value: formData.model,
@@ -1955,11 +2137,11 @@ function ProfileFormDialog({
1955
2137
  placeholder: "anthropic/claude-sonnet-4"
1956
2138
  }
1957
2139
  ),
1958
- /* @__PURE__ */ jsx4("p", { className: "mt-1 text-muted-foreground text-xs", children: "Format: provider/model-id (e.g., anthropic/claude-sonnet-4)" })
2140
+ /* @__PURE__ */ jsx5("p", { className: "mt-1 text-muted-foreground text-xs", children: "Format: provider/model-id (e.g., anthropic/claude-sonnet-4)" })
1959
2141
  ] }),
1960
- /* @__PURE__ */ jsxs4("div", { children: [
1961
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "System Prompt" }),
1962
- /* @__PURE__ */ jsx4(
2142
+ /* @__PURE__ */ jsxs5("div", { children: [
2143
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "System Prompt" }),
2144
+ /* @__PURE__ */ jsx5(
1963
2145
  "textarea",
1964
2146
  {
1965
2147
  value: formData.system_prompt,
@@ -1970,9 +2152,9 @@ function ProfileFormDialog({
1970
2152
  }
1971
2153
  )
1972
2154
  ] }),
1973
- /* @__PURE__ */ jsxs4("div", { children: [
1974
- /* @__PURE__ */ jsx4("label", { className: "mb-1 block font-medium text-sm", children: "Tags" }),
1975
- /* @__PURE__ */ jsx4(
2155
+ /* @__PURE__ */ jsxs5("div", { children: [
2156
+ /* @__PURE__ */ jsx5("label", { className: "mb-1 block font-medium text-sm", children: "Tags" }),
2157
+ /* @__PURE__ */ jsx5(
1976
2158
  Input2,
1977
2159
  {
1978
2160
  value: formData.tags?.join(", "),
@@ -1983,10 +2165,10 @@ function ProfileFormDialog({
1983
2165
  placeholder: "trading, aggressive, experimental"
1984
2166
  }
1985
2167
  ),
1986
- /* @__PURE__ */ jsx4("p", { className: "mt-1 text-muted-foreground text-xs", children: "Comma-separated tags for organization" })
2168
+ /* @__PURE__ */ jsx5("p", { className: "mt-1 text-muted-foreground text-xs", children: "Comma-separated tags for organization" })
1987
2169
  ] }),
1988
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
1989
- /* @__PURE__ */ jsx4(
2170
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2", children: [
2171
+ /* @__PURE__ */ jsx5(
1990
2172
  "input",
1991
2173
  {
1992
2174
  type: "checkbox",
@@ -1996,12 +2178,12 @@ function ProfileFormDialog({
1996
2178
  className: "rounded border-border"
1997
2179
  }
1998
2180
  ),
1999
- /* @__PURE__ */ jsx4("label", { htmlFor: "is_public", className: "text-sm", children: "Make this profile public (visible to other users)" })
2181
+ /* @__PURE__ */ jsx5("label", { htmlFor: "is_public", className: "text-sm", children: "Make this profile public (visible to other users)" })
2000
2182
  ] }),
2001
- /* @__PURE__ */ jsxs4(DialogFooter, { children: [
2002
- /* @__PURE__ */ jsx4(Button2, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
2003
- /* @__PURE__ */ jsxs4(Button2, { type: "submit", disabled: saving || !formData.name, children: [
2004
- saving && /* @__PURE__ */ jsx4(Loader22, { className: "mr-2 h-4 w-4 animate-spin" }),
2183
+ /* @__PURE__ */ jsxs5(DialogFooter, { children: [
2184
+ /* @__PURE__ */ jsx5(Button2, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
2185
+ /* @__PURE__ */ jsxs5(Button2, { type: "submit", disabled: saving || !formData.name, children: [
2186
+ saving && /* @__PURE__ */ jsx5(Loader22, { className: "mr-2 h-4 w-4 animate-spin" }),
2005
2187
  isEditing ? "Save Changes" : "Create Profile"
2006
2188
  ] })
2007
2189
  ] })
@@ -2029,34 +2211,34 @@ function DeleteProfileDialog({
2029
2211
  setDeleting(false);
2030
2212
  }
2031
2213
  };
2032
- return /* @__PURE__ */ jsx4(Dialog, { open: !!profile, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs4(DialogContent, { children: [
2033
- /* @__PURE__ */ jsxs4(DialogHeader, { children: [
2034
- /* @__PURE__ */ jsx4(DialogTitle, { children: "Delete Profile" }),
2035
- /* @__PURE__ */ jsxs4(DialogDescription, { children: [
2214
+ return /* @__PURE__ */ jsx5(Dialog, { open: !!profile, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs5(DialogContent, { children: [
2215
+ /* @__PURE__ */ jsxs5(DialogHeader, { children: [
2216
+ /* @__PURE__ */ jsx5(DialogTitle, { children: "Delete Profile" }),
2217
+ /* @__PURE__ */ jsxs5(DialogDescription, { children: [
2036
2218
  'Are you sure you want to delete "',
2037
2219
  profile?.name,
2038
2220
  '"? This action cannot be undone.'
2039
2221
  ] })
2040
2222
  ] }),
2041
- error && /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
2042
- /* @__PURE__ */ jsx4(AlertCircle, { className: "h-4 w-4" }),
2043
- /* @__PURE__ */ jsx4("span", { children: error })
2223
+ error && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 rounded-lg border border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] p-3 text-[var(--surface-danger-text)] text-sm", children: [
2224
+ /* @__PURE__ */ jsx5(AlertCircle, { className: "h-4 w-4" }),
2225
+ /* @__PURE__ */ jsx5("span", { children: error })
2044
2226
  ] }),
2045
- profile?.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs4("div", { className: "rounded-lg border border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] p-3 text-sm text-[var(--surface-warning-text)]", children: [
2227
+ profile?.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] p-3 text-sm text-[var(--surface-warning-text)]", children: [
2046
2228
  "This profile has ",
2047
2229
  profile.metrics.total_runs,
2048
2230
  " recorded runs. Deleting it will lose all performance metrics."
2049
2231
  ] }),
2050
- /* @__PURE__ */ jsxs4(DialogFooter, { children: [
2051
- /* @__PURE__ */ jsx4(Button2, { variant: "outline", onClick: onClose, children: "Cancel" }),
2052
- /* @__PURE__ */ jsxs4(
2232
+ /* @__PURE__ */ jsxs5(DialogFooter, { children: [
2233
+ /* @__PURE__ */ jsx5(Button2, { variant: "outline", onClick: onClose, children: "Cancel" }),
2234
+ /* @__PURE__ */ jsxs5(
2053
2235
  Button2,
2054
2236
  {
2055
2237
  variant: "destructive",
2056
2238
  onClick: handleDelete,
2057
2239
  disabled: deleting,
2058
2240
  children: [
2059
- deleting && /* @__PURE__ */ jsx4(Loader22, { className: "mr-2 h-4 w-4 animate-spin" }),
2241
+ deleting && /* @__PURE__ */ jsx5(Loader22, { className: "mr-2 h-4 w-4 animate-spin" }),
2060
2242
  "Delete Profile"
2061
2243
  ]
2062
2244
  }
@@ -2071,35 +2253,35 @@ function ProfileDetailDialog({
2071
2253
  onDuplicate
2072
2254
  }) {
2073
2255
  if (!profile) return null;
2074
- return /* @__PURE__ */ jsx4(Dialog, { open: !!profile, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs4(DialogContent, { className: "max-w-2xl", children: [
2075
- /* @__PURE__ */ jsxs4(DialogHeader, { children: [
2076
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
2077
- /* @__PURE__ */ jsx4(DialogTitle, { children: profile.name }),
2078
- profile.is_builtin && /* @__PURE__ */ jsx4(Badge2, { variant: "secondary", className: "border-0", children: "Built-in" }),
2079
- profile.is_public && !profile.is_builtin && /* @__PURE__ */ jsx4(Badge2, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)]", children: "Public" })
2256
+ return /* @__PURE__ */ jsx5(Dialog, { open: !!profile, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxs5(DialogContent, { className: "max-w-2xl", children: [
2257
+ /* @__PURE__ */ jsxs5(DialogHeader, { children: [
2258
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2", children: [
2259
+ /* @__PURE__ */ jsx5(DialogTitle, { children: profile.name }),
2260
+ profile.is_builtin && /* @__PURE__ */ jsx5(Badge2, { variant: "secondary", className: "border-0", children: "Built-in" }),
2261
+ profile.is_public && !profile.is_builtin && /* @__PURE__ */ jsx5(Badge2, { className: "border border-[var(--surface-info-border)] bg-[var(--surface-info-bg)] text-[var(--surface-info-text)]", children: "Public" })
2080
2262
  ] }),
2081
- profile.description && /* @__PURE__ */ jsx4(DialogDescription, { children: profile.description })
2263
+ profile.description && /* @__PURE__ */ jsx5(DialogDescription, { children: profile.description })
2082
2264
  ] }),
2083
- /* @__PURE__ */ jsxs4("div", { className: "space-y-4", children: [
2084
- /* @__PURE__ */ jsxs4("div", { className: "grid gap-4 sm:grid-cols-2", children: [
2085
- profile.extends && /* @__PURE__ */ jsxs4("div", { children: [
2086
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "Extends" }),
2087
- /* @__PURE__ */ jsx4("p", { className: "text-sm", children: profile.extends })
2265
+ /* @__PURE__ */ jsxs5("div", { className: "space-y-4", children: [
2266
+ /* @__PURE__ */ jsxs5("div", { className: "grid gap-4 sm:grid-cols-2", children: [
2267
+ profile.extends && /* @__PURE__ */ jsxs5("div", { children: [
2268
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "Extends" }),
2269
+ /* @__PURE__ */ jsx5("p", { className: "text-sm", children: profile.extends })
2088
2270
  ] }),
2089
- profile.model && /* @__PURE__ */ jsxs4("div", { children: [
2090
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "Model" }),
2091
- /* @__PURE__ */ jsx4("p", { className: "text-sm", children: profile.model })
2271
+ profile.model && /* @__PURE__ */ jsxs5("div", { children: [
2272
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "Model" }),
2273
+ /* @__PURE__ */ jsx5("p", { className: "text-sm", children: profile.model })
2092
2274
  ] })
2093
2275
  ] }),
2094
- profile.tags && profile.tags.length > 0 && /* @__PURE__ */ jsxs4("div", { children: [
2095
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "Tags" }),
2096
- /* @__PURE__ */ jsx4("div", { className: "mt-1 flex flex-wrap gap-1", children: profile.tags.map((tag) => /* @__PURE__ */ jsx4(Badge2, { variant: "outline", className: "text-xs", children: tag }, tag)) })
2276
+ profile.tags && profile.tags.length > 0 && /* @__PURE__ */ jsxs5("div", { children: [
2277
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "Tags" }),
2278
+ /* @__PURE__ */ jsx5("div", { className: "mt-1 flex flex-wrap gap-1", children: profile.tags.map((tag) => /* @__PURE__ */ jsx5(Badge2, { variant: "outline", className: "text-xs", children: tag }, tag)) })
2097
2279
  ] }),
2098
- profile.system_prompt && /* @__PURE__ */ jsxs4("div", { children: [
2099
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "System Prompt" }),
2100
- /* @__PURE__ */ jsxs4("div", { className: "relative mt-1", children: [
2101
- /* @__PURE__ */ jsx4("pre", { className: "max-h-48 overflow-auto rounded-lg bg-muted p-3 font-mono text-sm", children: profile.system_prompt }),
2102
- /* @__PURE__ */ jsx4(
2280
+ profile.system_prompt && /* @__PURE__ */ jsxs5("div", { children: [
2281
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "System Prompt" }),
2282
+ /* @__PURE__ */ jsxs5("div", { className: "relative mt-1", children: [
2283
+ /* @__PURE__ */ jsx5("pre", { className: "max-h-48 overflow-auto rounded-lg bg-muted p-3 font-mono text-sm", children: profile.system_prompt }),
2284
+ /* @__PURE__ */ jsx5(
2103
2285
  Button2,
2104
2286
  {
2105
2287
  variant: "ghost",
@@ -2107,54 +2289,54 @@ function ProfileDetailDialog({
2107
2289
  className: "absolute top-2 right-2",
2108
2290
  onClick: () => navigator.clipboard.writeText(profile.system_prompt),
2109
2291
  "aria-label": "Copy system prompt",
2110
- children: /* @__PURE__ */ jsx4(Copy, { className: "h-4 w-4" })
2292
+ children: /* @__PURE__ */ jsx5(Copy, { className: "h-4 w-4" })
2111
2293
  }
2112
2294
  )
2113
2295
  ] })
2114
2296
  ] }),
2115
- profile.instructions && profile.instructions.length > 0 && /* @__PURE__ */ jsxs4("div", { children: [
2116
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "Instructions" }),
2117
- /* @__PURE__ */ jsx4("ul", { className: "mt-1 space-y-1", children: profile.instructions.map((inst, i) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start gap-2 text-sm", children: [
2118
- /* @__PURE__ */ jsx4(ChevronRight, { className: "mt-0.5 h-4 w-4 text-muted-foreground" }),
2297
+ profile.instructions && profile.instructions.length > 0 && /* @__PURE__ */ jsxs5("div", { children: [
2298
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "Instructions" }),
2299
+ /* @__PURE__ */ jsx5("ul", { className: "mt-1 space-y-1", children: profile.instructions.map((inst, i) => /* @__PURE__ */ jsxs5("li", { className: "flex items-start gap-2 text-sm", children: [
2300
+ /* @__PURE__ */ jsx5(ChevronRight, { className: "mt-0.5 h-4 w-4 text-muted-foreground" }),
2119
2301
  inst
2120
2302
  ] }, i)) })
2121
2303
  ] }),
2122
- profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs4("div", { className: "rounded-lg border border-border p-4", children: [
2123
- /* @__PURE__ */ jsx4("label", { className: "font-medium text-muted-foreground text-xs", children: "Performance Metrics" }),
2124
- /* @__PURE__ */ jsxs4("div", { className: "mt-2 grid grid-cols-2 gap-4 sm:grid-cols-4", children: [
2125
- /* @__PURE__ */ jsxs4("div", { children: [
2126
- /* @__PURE__ */ jsx4("p", { className: "font-medium text-2xl", children: profile.metrics.total_runs }),
2127
- /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground text-xs", children: "Total Runs" })
2304
+ profile.metrics && profile.metrics.total_runs > 0 && /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border p-4", children: [
2305
+ /* @__PURE__ */ jsx5("label", { className: "font-medium text-muted-foreground text-xs", children: "Performance Metrics" }),
2306
+ /* @__PURE__ */ jsxs5("div", { className: "mt-2 grid grid-cols-2 gap-4 sm:grid-cols-4", children: [
2307
+ /* @__PURE__ */ jsxs5("div", { children: [
2308
+ /* @__PURE__ */ jsx5("p", { className: "font-medium text-2xl", children: profile.metrics.total_runs }),
2309
+ /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground text-xs", children: "Total Runs" })
2128
2310
  ] }),
2129
- /* @__PURE__ */ jsxs4("div", { children: [
2130
- /* @__PURE__ */ jsxs4("p", { className: "font-medium text-2xl", children: [
2311
+ /* @__PURE__ */ jsxs5("div", { children: [
2312
+ /* @__PURE__ */ jsxs5("p", { className: "font-medium text-2xl", children: [
2131
2313
  profile.metrics.success_rate.toFixed(0),
2132
2314
  "%"
2133
2315
  ] }),
2134
- /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground text-xs", children: "Success Rate" })
2316
+ /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground text-xs", children: "Success Rate" })
2135
2317
  ] }),
2136
- /* @__PURE__ */ jsxs4("div", { children: [
2137
- /* @__PURE__ */ jsxs4("p", { className: "font-medium text-2xl", children: [
2318
+ /* @__PURE__ */ jsxs5("div", { children: [
2319
+ /* @__PURE__ */ jsxs5("p", { className: "font-medium text-2xl", children: [
2138
2320
  (profile.metrics.avg_duration_ms / 1e3).toFixed(1),
2139
2321
  "s"
2140
2322
  ] }),
2141
- /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground text-xs", children: "Avg Duration" })
2323
+ /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground text-xs", children: "Avg Duration" })
2142
2324
  ] }),
2143
- profile.metrics.avg_tokens_used && /* @__PURE__ */ jsxs4("div", { children: [
2144
- /* @__PURE__ */ jsx4("p", { className: "font-medium text-2xl", children: profile.metrics.avg_tokens_used.toLocaleString() }),
2145
- /* @__PURE__ */ jsx4("p", { className: "text-muted-foreground text-xs", children: "Avg Tokens" })
2325
+ profile.metrics.avg_tokens_used && /* @__PURE__ */ jsxs5("div", { children: [
2326
+ /* @__PURE__ */ jsx5("p", { className: "font-medium text-2xl", children: profile.metrics.avg_tokens_used.toLocaleString() }),
2327
+ /* @__PURE__ */ jsx5("p", { className: "text-muted-foreground text-xs", children: "Avg Tokens" })
2146
2328
  ] })
2147
2329
  ] })
2148
2330
  ] })
2149
2331
  ] }),
2150
- /* @__PURE__ */ jsxs4(DialogFooter, { children: [
2151
- /* @__PURE__ */ jsx4(Button2, { variant: "outline", onClick: onClose, children: "Close" }),
2152
- onDuplicate && /* @__PURE__ */ jsxs4(Button2, { variant: "outline", onClick: onDuplicate, children: [
2153
- /* @__PURE__ */ jsx4(Copy, { className: "mr-2 h-4 w-4" }),
2332
+ /* @__PURE__ */ jsxs5(DialogFooter, { children: [
2333
+ /* @__PURE__ */ jsx5(Button2, { variant: "outline", onClick: onClose, children: "Close" }),
2334
+ onDuplicate && /* @__PURE__ */ jsxs5(Button2, { variant: "outline", onClick: onDuplicate, children: [
2335
+ /* @__PURE__ */ jsx5(Copy, { className: "mr-2 h-4 w-4" }),
2154
2336
  "Duplicate"
2155
2337
  ] }),
2156
- onEdit && /* @__PURE__ */ jsxs4(Button2, { onClick: onEdit, children: [
2157
- /* @__PURE__ */ jsx4(Edit2, { className: "mr-2 h-4 w-4" }),
2338
+ onEdit && /* @__PURE__ */ jsxs5(Button2, { onClick: onEdit, children: [
2339
+ /* @__PURE__ */ jsx5(Edit2, { className: "mr-2 h-4 w-4" }),
2158
2340
  "Edit"
2159
2341
  ] })
2160
2342
  ] })
@@ -2172,7 +2354,7 @@ import {
2172
2354
  DialogHeader as DialogHeader2,
2173
2355
  DialogTitle as DialogTitle2
2174
2356
  } from "@tangle-network/ui/primitives";
2175
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
2357
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2176
2358
  function SecretsPage({ apiClient, className, teamSecretsHint }) {
2177
2359
  const [secrets, setSecrets] = React5.useState([]);
2178
2360
  const [loading, setLoading] = React5.useState(true);
@@ -2245,36 +2427,36 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2245
2427
  return dateStr;
2246
2428
  }
2247
2429
  };
2248
- return /* @__PURE__ */ jsxs5("div", { className: cn("mx-auto w-full max-w-7xl space-y-8", className), children: [
2249
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-4 md:flex-row md:items-end md:justify-between", children: [
2250
- /* @__PURE__ */ jsxs5("div", { children: [
2251
- /* @__PURE__ */ jsx5("h1", { className: "font-display text-3xl font-extrabold tracking-tight text-foreground", children: "Environment Secrets" }),
2252
- /* @__PURE__ */ jsx5("p", { className: "mt-1 text-sm text-muted-foreground", children: "Secrets are securely stored and automatically exposed as environment variables across all your sandboxes." })
2430
+ return /* @__PURE__ */ jsxs6("div", { className: cn("mx-auto w-full max-w-7xl space-y-8", className), children: [
2431
+ /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-4 md:flex-row md:items-end md:justify-between", children: [
2432
+ /* @__PURE__ */ jsxs6("div", { children: [
2433
+ /* @__PURE__ */ jsx6("h1", { className: "font-display text-3xl font-extrabold tracking-tight text-foreground", children: "Environment Secrets" }),
2434
+ /* @__PURE__ */ jsx6("p", { className: "mt-1 text-sm text-muted-foreground", children: "Secrets are securely stored and automatically exposed as environment variables across all your sandboxes." })
2253
2435
  ] }),
2254
- /* @__PURE__ */ jsxs5(
2436
+ /* @__PURE__ */ jsxs6(
2255
2437
  "button",
2256
2438
  {
2257
2439
  type: "button",
2258
2440
  onClick: () => setIsCreateOpen(true),
2259
2441
  className: "inline-flex items-center gap-2 rounded-lg bg-[var(--btn-primary-bg)] border border-[var(--border-accent,transparent)] px-5 py-2.5 text-sm font-semibold text-[var(--btn-primary-text)] hover:bg-[var(--btn-primary-hover)] transition-colors active:scale-[0.97]",
2260
2442
  children: [
2261
- /* @__PURE__ */ jsx5(Plus3, { className: "h-4 w-4" }),
2443
+ /* @__PURE__ */ jsx6(Plus3, { className: "h-4 w-4" }),
2262
2444
  "New Secret"
2263
2445
  ]
2264
2446
  }
2265
2447
  )
2266
2448
  ] }),
2267
- teamSecretsHint && /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 rounded-lg border border-border bg-[var(--accent-surface-soft)]/40 px-4 py-3", children: [
2268
- /* @__PURE__ */ jsx5(Users, { className: "h-5 w-5 shrink-0 text-[var(--accent-text)]", "aria-hidden": "true" }),
2269
- /* @__PURE__ */ jsxs5("div", { className: "flex-1 text-sm", children: [
2270
- /* @__PURE__ */ jsx5("p", { className: "font-semibold text-foreground", children: "Setting up secrets for a team?" }),
2271
- /* @__PURE__ */ jsxs5("p", { className: "mt-0.5 text-muted-foreground text-xs", children: [
2449
+ teamSecretsHint && /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3 rounded-lg border border-border bg-[var(--accent-surface-soft)]/40 px-4 py-3", children: [
2450
+ /* @__PURE__ */ jsx6(Users, { className: "h-5 w-5 shrink-0 text-[var(--accent-text)]", "aria-hidden": "true" }),
2451
+ /* @__PURE__ */ jsxs6("div", { className: "flex-1 text-sm", children: [
2452
+ /* @__PURE__ */ jsx6("p", { className: "font-semibold text-foreground", children: "Setting up secrets for a team?" }),
2453
+ /* @__PURE__ */ jsxs6("p", { className: "mt-0.5 text-muted-foreground text-xs", children: [
2272
2454
  "Secrets here are ",
2273
- /* @__PURE__ */ jsx5("strong", { children: "personal" }),
2455
+ /* @__PURE__ */ jsx6("strong", { children: "personal" }),
2274
2456
  " \u2014 only available in sandboxes you create. To share credentials with teammates, configure them on the team page instead."
2275
2457
  ] })
2276
2458
  ] }),
2277
- /* @__PURE__ */ jsxs5(
2459
+ /* @__PURE__ */ jsxs6(
2278
2460
  "button",
2279
2461
  {
2280
2462
  type: "button",
@@ -2282,24 +2464,24 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2282
2464
  className: "inline-flex shrink-0 items-center gap-1 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-semibold text-foreground hover:bg-muted transition-colors",
2283
2465
  children: [
2284
2466
  teamSecretsHint.label ?? "Manage team secrets",
2285
- /* @__PURE__ */ jsx5(ArrowRight, { className: "h-3 w-3", "aria-hidden": "true" })
2467
+ /* @__PURE__ */ jsx6(ArrowRight, { className: "h-3 w-3", "aria-hidden": "true" })
2286
2468
  ]
2287
2469
  }
2288
2470
  )
2289
2471
  ] }),
2290
- /* @__PURE__ */ jsxs5("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-4", children: [
2291
- /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2292
- /* @__PURE__ */ jsx5("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Total Active Secrets" }),
2293
- /* @__PURE__ */ jsx5("div", { className: "mt-2 flex items-baseline gap-2", children: /* @__PURE__ */ jsx5("span", { className: "font-display text-2xl font-extrabold text-foreground", children: secrets.length }) })
2472
+ /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-4", children: [
2473
+ /* @__PURE__ */ jsxs6("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2474
+ /* @__PURE__ */ jsx6("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Total Active Secrets" }),
2475
+ /* @__PURE__ */ jsx6("div", { className: "mt-2 flex items-baseline gap-2", children: /* @__PURE__ */ jsx6("span", { className: "font-display text-2xl font-extrabold text-foreground", children: secrets.length }) })
2294
2476
  ] }),
2295
- /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2296
- /* @__PURE__ */ jsx5("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Status" }),
2297
- /* @__PURE__ */ jsxs5("div", { className: "mt-2 flex items-center gap-2", children: [
2298
- /* @__PURE__ */ jsx5(CheckCircle, { className: "h-4 w-4 text-[var(--surface-success-text,#047857)]" }),
2299
- /* @__PURE__ */ jsx5("span", { className: "text-sm font-semibold text-[var(--surface-success-text,#047857)]", children: "Encrypted" })
2477
+ /* @__PURE__ */ jsxs6("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2478
+ /* @__PURE__ */ jsx6("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Status" }),
2479
+ /* @__PURE__ */ jsxs6("div", { className: "mt-2 flex items-center gap-2", children: [
2480
+ /* @__PURE__ */ jsx6(CheckCircle, { className: "h-4 w-4 text-[var(--surface-success-text,#047857)]" }),
2481
+ /* @__PURE__ */ jsx6("span", { className: "text-sm font-semibold text-[var(--surface-success-text,#047857)]", children: "Encrypted" })
2300
2482
  ] })
2301
2483
  ] }),
2302
- /* @__PURE__ */ jsx5(
2484
+ /* @__PURE__ */ jsx6(
2303
2485
  InfoPanel,
2304
2486
  {
2305
2487
  className: "md:col-span-2",
@@ -2309,11 +2491,11 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2309
2491
  }
2310
2492
  )
2311
2493
  ] }),
2312
- error && /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-4 flex items-center gap-3", children: [
2313
- /* @__PURE__ */ jsx5(AlertCircle2, { className: "h-5 w-5 text-destructive shrink-0" }),
2314
- /* @__PURE__ */ jsx5("p", { className: "text-destructive text-sm font-medium", children: error })
2494
+ error && /* @__PURE__ */ jsxs6("div", { className: "rounded-lg border border-destructive/30 bg-destructive/10 p-4 flex items-center gap-3", children: [
2495
+ /* @__PURE__ */ jsx6(AlertCircle2, { className: "h-5 w-5 text-destructive shrink-0" }),
2496
+ /* @__PURE__ */ jsx6("p", { className: "text-destructive text-sm font-medium", children: error })
2315
2497
  ] }),
2316
- /* @__PURE__ */ jsx5(Dialog2, { open: isCreateOpen, onOpenChange: (open) => {
2498
+ /* @__PURE__ */ jsx6(Dialog2, { open: isCreateOpen, onOpenChange: (open) => {
2317
2499
  if (!open) {
2318
2500
  setIsCreateOpen(false);
2319
2501
  setNewName("");
@@ -2321,12 +2503,12 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2321
2503
  setCreateError(null);
2322
2504
  setShowValue(false);
2323
2505
  }
2324
- }, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-md", children: [
2325
- /* @__PURE__ */ jsxs5(DialogHeader2, { children: [
2326
- /* @__PURE__ */ jsx5(DialogTitle2, { children: "Create Secret" }),
2327
- /* @__PURE__ */ jsx5(DialogDescription2, { children: "Secrets are automatically exposed as environment variables across all your new sandboxes." })
2506
+ }, children: /* @__PURE__ */ jsxs6(DialogContent2, { className: "max-w-md", children: [
2507
+ /* @__PURE__ */ jsxs6(DialogHeader2, { children: [
2508
+ /* @__PURE__ */ jsx6(DialogTitle2, { children: "Create Secret" }),
2509
+ /* @__PURE__ */ jsx6(DialogDescription2, { children: "Secrets are automatically exposed as environment variables across all your new sandboxes." })
2328
2510
  ] }),
2329
- /* @__PURE__ */ jsxs5(
2511
+ /* @__PURE__ */ jsxs6(
2330
2512
  "form",
2331
2513
  {
2332
2514
  onSubmit: (e) => {
@@ -2335,9 +2517,9 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2335
2517
  },
2336
2518
  className: "space-y-4",
2337
2519
  children: [
2338
- /* @__PURE__ */ jsxs5("div", { children: [
2339
- /* @__PURE__ */ jsx5("label", { htmlFor: "secret-name", className: "block text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Name" }),
2340
- /* @__PURE__ */ jsx5(
2520
+ /* @__PURE__ */ jsxs6("div", { children: [
2521
+ /* @__PURE__ */ jsx6("label", { htmlFor: "secret-name", className: "block text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Name" }),
2522
+ /* @__PURE__ */ jsx6(
2341
2523
  "input",
2342
2524
  {
2343
2525
  id: "secret-name",
@@ -2351,10 +2533,10 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2351
2533
  }
2352
2534
  )
2353
2535
  ] }),
2354
- /* @__PURE__ */ jsxs5("div", { children: [
2355
- /* @__PURE__ */ jsx5("label", { htmlFor: "secret-value", className: "block text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Value" }),
2356
- /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
2357
- /* @__PURE__ */ jsx5(
2536
+ /* @__PURE__ */ jsxs6("div", { children: [
2537
+ /* @__PURE__ */ jsx6("label", { htmlFor: "secret-value", className: "block text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Value" }),
2538
+ /* @__PURE__ */ jsxs6("div", { className: "relative", children: [
2539
+ /* @__PURE__ */ jsx6(
2358
2540
  "input",
2359
2541
  {
2360
2542
  id: "secret-value",
@@ -2367,26 +2549,26 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2367
2549
  className: "w-full rounded-md border border-border bg-card px-3 py-2.5 pr-10 text-sm font-mono text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2368
2550
  }
2369
2551
  ),
2370
- /* @__PURE__ */ jsx5(
2552
+ /* @__PURE__ */ jsx6(
2371
2553
  "button",
2372
2554
  {
2373
2555
  type: "button",
2374
2556
  onClick: () => setShowValue(!showValue),
2375
2557
  className: "absolute right-2 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-foreground",
2376
2558
  "aria-label": showValue ? "Hide value" : "Show value",
2377
- children: showValue ? /* @__PURE__ */ jsx5(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx5(Eye, { className: "h-4 w-4" })
2559
+ children: showValue ? /* @__PURE__ */ jsx6(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx6(Eye, { className: "h-4 w-4" })
2378
2560
  }
2379
2561
  )
2380
2562
  ] }),
2381
- /* @__PURE__ */ jsx5("p", { className: "mt-1.5 text-xs text-muted-foreground", children: "This value cannot be retrieved after creation." })
2563
+ /* @__PURE__ */ jsx6("p", { className: "mt-1.5 text-xs text-muted-foreground", children: "This value cannot be retrieved after creation." })
2382
2564
  ] }),
2383
- /* @__PURE__ */ jsx5("button", { type: "submit", className: "hidden", tabIndex: -1, "aria-hidden": "true", children: "Submit" })
2565
+ /* @__PURE__ */ jsx6("button", { type: "submit", className: "hidden", tabIndex: -1, "aria-hidden": "true", children: "Submit" })
2384
2566
  ]
2385
2567
  }
2386
2568
  ),
2387
- createError && /* @__PURE__ */ jsx5("p", { className: "mt-3 text-sm text-destructive", children: createError }),
2388
- /* @__PURE__ */ jsxs5(DialogFooter2, { children: [
2389
- /* @__PURE__ */ jsx5(
2569
+ createError && /* @__PURE__ */ jsx6("p", { className: "mt-3 text-sm text-destructive", children: createError }),
2570
+ /* @__PURE__ */ jsxs6(DialogFooter2, { children: [
2571
+ /* @__PURE__ */ jsx6(
2390
2572
  "button",
2391
2573
  {
2392
2574
  type: "button",
@@ -2400,7 +2582,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2400
2582
  children: "Cancel"
2401
2583
  }
2402
2584
  ),
2403
- /* @__PURE__ */ jsx5(
2585
+ /* @__PURE__ */ jsx6(
2404
2586
  "button",
2405
2587
  {
2406
2588
  type: "button",
@@ -2412,19 +2594,19 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2412
2594
  )
2413
2595
  ] })
2414
2596
  ] }) }),
2415
- /* @__PURE__ */ jsx5(Dialog2, { open: !!deleteTarget, onOpenChange: (open) => {
2597
+ /* @__PURE__ */ jsx6(Dialog2, { open: !!deleteTarget, onOpenChange: (open) => {
2416
2598
  if (!open) setDeleteTarget(null);
2417
- }, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-sm", children: [
2418
- /* @__PURE__ */ jsxs5(DialogHeader2, { children: [
2419
- /* @__PURE__ */ jsx5(DialogTitle2, { children: "Delete Secret?" }),
2420
- /* @__PURE__ */ jsxs5(DialogDescription2, { children: [
2599
+ }, children: /* @__PURE__ */ jsxs6(DialogContent2, { className: "max-w-sm", children: [
2600
+ /* @__PURE__ */ jsxs6(DialogHeader2, { children: [
2601
+ /* @__PURE__ */ jsx6(DialogTitle2, { children: "Delete Secret?" }),
2602
+ /* @__PURE__ */ jsxs6(DialogDescription2, { children: [
2421
2603
  "This will permanently delete ",
2422
- /* @__PURE__ */ jsx5("span", { className: "font-mono font-bold text-foreground", children: deleteTarget }),
2604
+ /* @__PURE__ */ jsx6("span", { className: "font-mono font-bold text-foreground", children: deleteTarget }),
2423
2605
  ". Sandboxes using this secret will lose access to it."
2424
2606
  ] })
2425
2607
  ] }),
2426
- /* @__PURE__ */ jsxs5(DialogFooter2, { children: [
2427
- /* @__PURE__ */ jsx5(
2608
+ /* @__PURE__ */ jsxs6(DialogFooter2, { children: [
2609
+ /* @__PURE__ */ jsx6(
2428
2610
  "button",
2429
2611
  {
2430
2612
  type: "button",
@@ -2433,7 +2615,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2433
2615
  children: "Cancel"
2434
2616
  }
2435
2617
  ),
2436
- /* @__PURE__ */ jsx5(
2618
+ /* @__PURE__ */ jsx6(
2437
2619
  "button",
2438
2620
  {
2439
2621
  type: "button",
@@ -2445,20 +2627,20 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2445
2627
  )
2446
2628
  ] })
2447
2629
  ] }) }),
2448
- /* @__PURE__ */ jsxs5("div", { className: "overflow-hidden rounded-lg border border-border bg-card shadow-[var(--shadow-card)]", children: [
2449
- /* @__PURE__ */ jsxs5("div", { className: "border-b border-border px-6 py-4 flex items-center justify-between", children: [
2450
- /* @__PURE__ */ jsx5("div", { className: "flex gap-6", children: /* @__PURE__ */ jsx5("button", { type: "button", className: "text-xs font-bold uppercase tracking-widest text-foreground border-b-2 border-foreground pb-1", children: "All Secrets" }) }),
2451
- /* @__PURE__ */ jsxs5("span", { className: "text-xs text-muted-foreground font-mono", children: [
2630
+ /* @__PURE__ */ jsxs6("div", { className: "overflow-hidden rounded-lg border border-border bg-card shadow-[var(--shadow-card)]", children: [
2631
+ /* @__PURE__ */ jsxs6("div", { className: "border-b border-border px-6 py-4 flex items-center justify-between", children: [
2632
+ /* @__PURE__ */ jsx6("div", { className: "flex gap-6", children: /* @__PURE__ */ jsx6("button", { type: "button", className: "text-xs font-bold uppercase tracking-widest text-foreground border-b-2 border-foreground pb-1", children: "All Secrets" }) }),
2633
+ /* @__PURE__ */ jsxs6("span", { className: "text-xs text-muted-foreground font-mono", children: [
2452
2634
  secrets.length,
2453
2635
  " secret",
2454
2636
  secrets.length !== 1 ? "s" : ""
2455
2637
  ] })
2456
2638
  ] }),
2457
- loading ? /* @__PURE__ */ jsx5("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx5("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent" }) }) : secrets.length === 0 ? /* @__PURE__ */ jsxs5("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
2458
- /* @__PURE__ */ jsx5(Lock, { className: "h-10 w-10 text-muted-foreground mb-4" }),
2459
- /* @__PURE__ */ jsx5("h3", { className: "text-lg font-semibold text-foreground", children: "No secrets yet" }),
2460
- /* @__PURE__ */ jsx5("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a secret to inject into your sandboxes." }),
2461
- /* @__PURE__ */ jsxs5(
2639
+ loading ? /* @__PURE__ */ jsx6("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx6("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-muted-foreground border-t-transparent" }) }) : secrets.length === 0 ? /* @__PURE__ */ jsxs6("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
2640
+ /* @__PURE__ */ jsx6(Lock, { className: "h-10 w-10 text-muted-foreground mb-4" }),
2641
+ /* @__PURE__ */ jsx6("h3", { className: "text-lg font-semibold text-foreground", children: "No secrets yet" }),
2642
+ /* @__PURE__ */ jsx6("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a secret to inject into your sandboxes." }),
2643
+ /* @__PURE__ */ jsxs6(
2462
2644
  "button",
2463
2645
  {
2464
2646
  type: "button",
@@ -2466,52 +2648,52 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2466
2648
  "aria-label": "Create your first secret",
2467
2649
  className: "mt-6 inline-flex items-center gap-2 rounded-md bg-[var(--btn-primary-bg)] px-4 py-2 text-sm font-semibold text-[var(--btn-primary-text)] hover:bg-[var(--btn-primary-hover)] transition-colors active:scale-[0.97]",
2468
2650
  children: [
2469
- /* @__PURE__ */ jsx5(Plus3, { className: "h-4 w-4" }),
2651
+ /* @__PURE__ */ jsx6(Plus3, { className: "h-4 w-4" }),
2470
2652
  "New Secret"
2471
2653
  ]
2472
2654
  }
2473
2655
  )
2474
- ] }) : /* @__PURE__ */ jsxs5("table", { className: "w-full text-left border-collapse", children: [
2475
- /* @__PURE__ */ jsx5("thead", { children: /* @__PURE__ */ jsxs5("tr", { className: "bg-muted/30 border-b border-border", children: [
2476
- /* @__PURE__ */ jsx5("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Secret Name" }),
2477
- /* @__PURE__ */ jsx5("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Encrypted Value" }),
2478
- /* @__PURE__ */ jsx5("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground text-right", children: "Created" }),
2479
- /* @__PURE__ */ jsx5("th", { className: "px-6 py-4 w-12" })
2656
+ ] }) : /* @__PURE__ */ jsxs6("table", { className: "w-full text-left border-collapse", children: [
2657
+ /* @__PURE__ */ jsx6("thead", { children: /* @__PURE__ */ jsxs6("tr", { className: "bg-muted/30 border-b border-border", children: [
2658
+ /* @__PURE__ */ jsx6("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Secret Name" }),
2659
+ /* @__PURE__ */ jsx6("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Encrypted Value" }),
2660
+ /* @__PURE__ */ jsx6("th", { className: "px-6 py-4 text-[10px] font-bold uppercase tracking-widest text-muted-foreground text-right", children: "Created" }),
2661
+ /* @__PURE__ */ jsx6("th", { className: "px-6 py-4 w-12" })
2480
2662
  ] }) }),
2481
- /* @__PURE__ */ jsx5("tbody", { className: "divide-y divide-border", children: secrets.map((secret) => /* @__PURE__ */ jsxs5("tr", { className: "hover:bg-muted/20 transition-colors", children: [
2482
- /* @__PURE__ */ jsx5("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3", children: [
2483
- /* @__PURE__ */ jsx5(Key, { className: "h-4 w-4 text-muted-foreground" }),
2484
- /* @__PURE__ */ jsx5("span", { className: "text-sm font-bold font-mono text-foreground", children: secret.name })
2663
+ /* @__PURE__ */ jsx6("tbody", { className: "divide-y divide-border", children: secrets.map((secret) => /* @__PURE__ */ jsxs6("tr", { className: "hover:bg-muted/20 transition-colors", children: [
2664
+ /* @__PURE__ */ jsx6("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3", children: [
2665
+ /* @__PURE__ */ jsx6(Key, { className: "h-4 w-4 text-muted-foreground" }),
2666
+ /* @__PURE__ */ jsx6("span", { className: "text-sm font-bold font-mono text-foreground", children: secret.name })
2485
2667
  ] }) }),
2486
- /* @__PURE__ */ jsx5("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsx5("code", { className: "text-xs font-mono text-muted-foreground bg-muted px-2 py-1 rounded", children: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }) }),
2487
- /* @__PURE__ */ jsx5("td", { className: "px-6 py-4 text-right", children: /* @__PURE__ */ jsx5("span", { className: "text-xs text-muted-foreground", children: formatDate(secret.createdAt) }) }),
2488
- /* @__PURE__ */ jsx5("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsx5(
2668
+ /* @__PURE__ */ jsx6("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsx6("code", { className: "text-xs font-mono text-muted-foreground bg-muted px-2 py-1 rounded", children: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }) }),
2669
+ /* @__PURE__ */ jsx6("td", { className: "px-6 py-4 text-right", children: /* @__PURE__ */ jsx6("span", { className: "text-xs text-muted-foreground", children: formatDate(secret.createdAt) }) }),
2670
+ /* @__PURE__ */ jsx6("td", { className: "px-6 py-4", children: /* @__PURE__ */ jsx6(
2489
2671
  "button",
2490
2672
  {
2491
2673
  type: "button",
2492
2674
  onClick: () => setDeleteTarget(secret.name),
2493
2675
  className: "p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",
2494
2676
  "aria-label": `Delete ${secret.name}`,
2495
- children: /* @__PURE__ */ jsx5(Trash23, { className: "h-4 w-4" })
2677
+ children: /* @__PURE__ */ jsx6(Trash23, { className: "h-4 w-4" })
2496
2678
  }
2497
2679
  ) })
2498
2680
  ] }, secret.name)) })
2499
2681
  ] })
2500
2682
  ] }),
2501
- /* @__PURE__ */ jsxs5("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2", children: [
2502
- /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
2503
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 mb-3", children: [
2504
- /* @__PURE__ */ jsx5("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx5(Shield, { className: "h-5 w-5" }) }),
2505
- /* @__PURE__ */ jsx5("h3", { className: "text-sm font-bold text-foreground", children: "Encryption Standard" })
2683
+ /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2", children: [
2684
+ /* @__PURE__ */ jsxs6("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
2685
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3 mb-3", children: [
2686
+ /* @__PURE__ */ jsx6("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx6(Shield, { className: "h-5 w-5" }) }),
2687
+ /* @__PURE__ */ jsx6("h3", { className: "text-sm font-bold text-foreground", children: "Encryption Standard" })
2506
2688
  ] }),
2507
- /* @__PURE__ */ jsx5("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Your secrets are encrypted using AES-256-GCM at rest and TLS 1.3 in transit. Hardware Security Modules manage all root keys." })
2689
+ /* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Your secrets are encrypted using AES-256-GCM at rest and TLS 1.3 in transit. Hardware Security Modules manage all root keys." })
2508
2690
  ] }),
2509
- /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
2510
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3 mb-3", children: [
2511
- /* @__PURE__ */ jsx5("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx5(Lock, { className: "h-5 w-5" }) }),
2512
- /* @__PURE__ */ jsx5("h3", { className: "text-sm font-bold text-foreground", children: "Access Policy" })
2691
+ /* @__PURE__ */ jsxs6("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
2692
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3 mb-3", children: [
2693
+ /* @__PURE__ */ jsx6("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx6(Lock, { className: "h-5 w-5" }) }),
2694
+ /* @__PURE__ */ jsx6("h3", { className: "text-sm font-bold text-foreground", children: "Access Policy" })
2513
2695
  ] }),
2514
- /* @__PURE__ */ jsx5("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Secrets are injected at sandbox creation time and are never exposed in logs, API responses, or container metadata." })
2696
+ /* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Secrets are injected at sandbox creation time and are never exposed in logs, API responses, or container metadata." })
2515
2697
  ] })
2516
2698
  ] })
2517
2699
  ] });
@@ -2520,18 +2702,18 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2520
2702
  // src/pages/templates-page.tsx
2521
2703
  import { Layers as Layers2 } from "lucide-react";
2522
2704
  import { Skeleton as Skeleton3 } from "@tangle-network/ui/primitives";
2523
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2705
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
2524
2706
  function TemplatesPage({ templates, loading = false, onUseTemplate, className }) {
2525
- return /* @__PURE__ */ jsxs6("div", { className: cn("space-y-8", className), children: [
2526
- /* @__PURE__ */ jsxs6("div", { children: [
2527
- /* @__PURE__ */ jsx6("h1", { className: "font-bold text-3xl text-foreground", children: "Templates" }),
2528
- /* @__PURE__ */ jsx6("p", { className: "mt-1 text-muted-foreground", children: "Pre-configured environments to get started quickly" })
2707
+ return /* @__PURE__ */ jsxs7("div", { className: cn("space-y-8", className), children: [
2708
+ /* @__PURE__ */ jsxs7("div", { children: [
2709
+ /* @__PURE__ */ jsx7("h1", { className: "font-bold text-3xl text-foreground", children: "Templates" }),
2710
+ /* @__PURE__ */ jsx7("p", { className: "mt-1 text-muted-foreground", children: "Pre-configured environments to get started quickly" })
2529
2711
  ] }),
2530
- loading || !templates ? /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx6(Skeleton3, { className: "h-56 rounded-2xl" }, i)) }) : templates.length === 0 ? /* @__PURE__ */ jsxs6("div", { className: "rounded-2xl border border-border bg-card p-16 text-center", children: [
2531
- /* @__PURE__ */ jsx6(Layers2, { className: "mx-auto mb-3 h-10 w-10 text-muted-foreground" }),
2532
- /* @__PURE__ */ jsx6("p", { className: "text-sm font-medium text-foreground mb-1", children: "No templates available" }),
2533
- /* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground", children: "Check back later for pre-configured environments." })
2534
- ] }) : /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: templates.map((template) => /* @__PURE__ */ jsx6(
2712
+ loading || !templates ? /* @__PURE__ */ jsx7("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx7(Skeleton3, { className: "h-56 rounded-2xl" }, i)) }) : templates.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "rounded-2xl border border-border bg-card p-16 text-center", children: [
2713
+ /* @__PURE__ */ jsx7(Layers2, { className: "mx-auto mb-3 h-10 w-10 text-muted-foreground" }),
2714
+ /* @__PURE__ */ jsx7("p", { className: "text-sm font-medium text-foreground mb-1", children: "No templates available" }),
2715
+ /* @__PURE__ */ jsx7("p", { className: "text-sm text-muted-foreground", children: "Check back later for pre-configured environments." })
2716
+ ] }) : /* @__PURE__ */ jsx7("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: templates.map((template) => /* @__PURE__ */ jsx7(
2535
2717
  TemplateCard,
2536
2718
  {
2537
2719
  template,
@@ -2571,7 +2753,7 @@ import {
2571
2753
  DialogHeader as DialogHeader3,
2572
2754
  DialogTitle as DialogTitle3
2573
2755
  } from "@tangle-network/ui/primitives";
2574
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
2756
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
2575
2757
  var SCRIPT_TYPE_META = {
2576
2758
  bash: {
2577
2759
  label: "Bash",
@@ -2893,41 +3075,41 @@ function StartupScriptsPage({ apiClient, className }) {
2893
3075
  }));
2894
3076
  };
2895
3077
  const activeCount = scripts.filter((s) => s.enabled).length;
2896
- return /* @__PURE__ */ jsxs7("div", { className: cn("mx-auto w-full max-w-7xl space-y-6", className), children: [
2897
- /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-4 md:flex-row md:items-end md:justify-between", children: [
2898
- /* @__PURE__ */ jsxs7("div", { children: [
2899
- /* @__PURE__ */ jsx7("h1", { className: "font-display text-3xl font-extrabold tracking-tight text-foreground", children: "Startup Scripts" }),
2900
- /* @__PURE__ */ jsx7("p", { className: "mt-1 text-sm text-muted-foreground", children: "Define scripts that run automatically when your sandboxes start. Scripts can access your encrypted secrets." })
3078
+ return /* @__PURE__ */ jsxs8("div", { className: cn("mx-auto w-full max-w-7xl space-y-6", className), children: [
3079
+ /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-4 md:flex-row md:items-end md:justify-between", children: [
3080
+ /* @__PURE__ */ jsxs8("div", { children: [
3081
+ /* @__PURE__ */ jsx8("h1", { className: "font-display text-3xl font-extrabold tracking-tight text-foreground", children: "Startup Scripts" }),
3082
+ /* @__PURE__ */ jsx8("p", { className: "mt-1 text-sm text-muted-foreground", children: "Define scripts that run automatically when your sandboxes start. Scripts can access your encrypted secrets." })
2901
3083
  ] }),
2902
- /* @__PURE__ */ jsxs7(
3084
+ /* @__PURE__ */ jsxs8(
2903
3085
  "button",
2904
3086
  {
2905
3087
  type: "button",
2906
3088
  onClick: openCreate,
2907
3089
  className: "inline-flex items-center gap-2 rounded-lg bg-[var(--btn-primary-bg)] px-4 py-2.5 text-sm font-bold text-[var(--btn-primary-text)] shadow-sm transition-colors hover:bg-[var(--btn-primary-hover)]",
2908
3090
  children: [
2909
- /* @__PURE__ */ jsx7(Plus4, { className: "h-4 w-4" }),
3091
+ /* @__PURE__ */ jsx8(Plus4, { className: "h-4 w-4" }),
2910
3092
  "New Script"
2911
3093
  ]
2912
3094
  }
2913
3095
  )
2914
3096
  ] }),
2915
- /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-4", children: [
2916
- /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2917
- /* @__PURE__ */ jsx7("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Total Scripts" }),
2918
- /* @__PURE__ */ jsx7("div", { className: "mt-2 flex items-baseline gap-2", children: /* @__PURE__ */ jsx7("span", { className: "font-display text-2xl font-extrabold text-foreground", children: scripts.length }) })
3097
+ /* @__PURE__ */ jsxs8("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-4", children: [
3098
+ /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
3099
+ /* @__PURE__ */ jsx8("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Total Scripts" }),
3100
+ /* @__PURE__ */ jsx8("div", { className: "mt-2 flex items-baseline gap-2", children: /* @__PURE__ */ jsx8("span", { className: "font-display text-2xl font-extrabold text-foreground", children: scripts.length }) })
2919
3101
  ] }),
2920
- /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
2921
- /* @__PURE__ */ jsx7("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Active" }),
2922
- /* @__PURE__ */ jsxs7("div", { className: "mt-2 flex items-baseline gap-2", children: [
2923
- /* @__PURE__ */ jsx7("span", { className: "font-display text-2xl font-extrabold text-foreground", children: activeCount }),
2924
- /* @__PURE__ */ jsxs7("span", { className: "text-xs text-muted-foreground", children: [
3102
+ /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-card p-5 shadow-[var(--shadow-card)]", children: [
3103
+ /* @__PURE__ */ jsx8("p", { className: "text-[10px] font-bold uppercase tracking-widest text-muted-foreground", children: "Active" }),
3104
+ /* @__PURE__ */ jsxs8("div", { className: "mt-2 flex items-baseline gap-2", children: [
3105
+ /* @__PURE__ */ jsx8("span", { className: "font-display text-2xl font-extrabold text-foreground", children: activeCount }),
3106
+ /* @__PURE__ */ jsxs8("span", { className: "text-xs text-muted-foreground", children: [
2925
3107
  "of ",
2926
3108
  scripts.length
2927
3109
  ] })
2928
3110
  ] })
2929
3111
  ] }),
2930
- /* @__PURE__ */ jsx7(
3112
+ /* @__PURE__ */ jsx8(
2931
3113
  InfoPanel,
2932
3114
  {
2933
3115
  className: "md:col-span-2",
@@ -2937,12 +3119,12 @@ function StartupScriptsPage({ apiClient, className }) {
2937
3119
  }
2938
3120
  )
2939
3121
  ] }),
2940
- error && /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-3 rounded-lg border border-destructive/30 bg-destructive/10 p-4", children: [
2941
- /* @__PURE__ */ jsx7(AlertCircle3, { className: "h-5 w-5 shrink-0 text-destructive" }),
2942
- /* @__PURE__ */ jsx7("p", { className: "text-sm font-medium text-destructive", children: error })
3122
+ error && /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-3 rounded-lg border border-destructive/30 bg-destructive/10 p-4", children: [
3123
+ /* @__PURE__ */ jsx8(AlertCircle3, { className: "h-5 w-5 shrink-0 text-destructive" }),
3124
+ /* @__PURE__ */ jsx8("p", { className: "text-sm font-medium text-destructive", children: error })
2943
3125
  ] }),
2944
- /* @__PURE__ */ jsx7(Dialog3, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
2945
- dialogStep === "picker" && /* @__PURE__ */ jsxs7(
3126
+ /* @__PURE__ */ jsx8(Dialog3, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxs8(DialogContent3, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
3127
+ dialogStep === "picker" && /* @__PURE__ */ jsxs8(
2946
3128
  "div",
2947
3129
  {
2948
3130
  className: cn(
@@ -2950,14 +3132,14 @@ function StartupScriptsPage({ apiClient, className }) {
2950
3132
  transitionDir === "back" ? "slide-in-from-left-4" : "slide-in-from-right-4"
2951
3133
  ),
2952
3134
  children: [
2953
- /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
2954
- /* @__PURE__ */ jsx7(DialogTitle3, { children: "New Startup Script" }),
2955
- /* @__PURE__ */ jsx7(DialogDescription3, { children: "Start from a template or create a blank script." })
3135
+ /* @__PURE__ */ jsxs8(DialogHeader3, { children: [
3136
+ /* @__PURE__ */ jsx8(DialogTitle3, { children: "New Startup Script" }),
3137
+ /* @__PURE__ */ jsx8(DialogDescription3, { children: "Start from a template or create a blank script." })
2956
3138
  ] }),
2957
- /* @__PURE__ */ jsxs7("div", { className: "space-y-4 py-2", children: [
2958
- /* @__PURE__ */ jsxs7("div", { children: [
2959
- /* @__PURE__ */ jsx7("p", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Blank Script" }),
2960
- /* @__PURE__ */ jsx7("div", { className: "flex flex-wrap gap-2", children: Object.entries(SCRIPT_TYPE_META).map(([type, meta]) => /* @__PURE__ */ jsx7(
3139
+ /* @__PURE__ */ jsxs8("div", { className: "space-y-4 py-2", children: [
3140
+ /* @__PURE__ */ jsxs8("div", { children: [
3141
+ /* @__PURE__ */ jsx8("p", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Blank Script" }),
3142
+ /* @__PURE__ */ jsx8("div", { className: "flex flex-wrap gap-2", children: Object.entries(SCRIPT_TYPE_META).map(([type, meta]) => /* @__PURE__ */ jsx8(
2961
3143
  "button",
2962
3144
  {
2963
3145
  type: "button",
@@ -2968,24 +3150,24 @@ function StartupScriptsPage({ apiClient, className }) {
2968
3150
  type
2969
3151
  )) })
2970
3152
  ] }),
2971
- /* @__PURE__ */ jsxs7("div", { children: [
2972
- /* @__PURE__ */ jsx7("p", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Templates" }),
2973
- /* @__PURE__ */ jsx7("div", { className: "space-y-2", children: SCRIPT_TEMPLATES.map((tmpl) => /* @__PURE__ */ jsxs7(
3153
+ /* @__PURE__ */ jsxs8("div", { children: [
3154
+ /* @__PURE__ */ jsx8("p", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Templates" }),
3155
+ /* @__PURE__ */ jsx8("div", { className: "space-y-2", children: SCRIPT_TEMPLATES.map((tmpl) => /* @__PURE__ */ jsxs8(
2974
3156
  "button",
2975
3157
  {
2976
3158
  type: "button",
2977
3159
  onClick: () => openFromTemplate(tmpl),
2978
3160
  className: "w-full text-left rounded-lg border border-border bg-card p-4 hover:border-primary/30 hover:bg-muted/30 transition-colors group",
2979
3161
  children: [
2980
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between", children: [
2981
- /* @__PURE__ */ jsxs7("div", { children: [
2982
- /* @__PURE__ */ jsx7("h4", { className: "text-sm font-bold text-foreground group-hover:text-primary transition-colors", children: tmpl.name }),
2983
- /* @__PURE__ */ jsx7("p", { className: "mt-0.5 text-xs text-muted-foreground", children: tmpl.description })
3162
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between", children: [
3163
+ /* @__PURE__ */ jsxs8("div", { children: [
3164
+ /* @__PURE__ */ jsx8("h4", { className: "text-sm font-bold text-foreground group-hover:text-primary transition-colors", children: tmpl.name }),
3165
+ /* @__PURE__ */ jsx8("p", { className: "mt-0.5 text-xs text-muted-foreground", children: tmpl.description })
2984
3166
  ] }),
2985
- /* @__PURE__ */ jsx7("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: SCRIPT_TYPE_META[tmpl.scriptType].label })
3167
+ /* @__PURE__ */ jsx8("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: SCRIPT_TYPE_META[tmpl.scriptType].label })
2986
3168
  ] }),
2987
- tmpl.injectSecrets.length > 0 && /* @__PURE__ */ jsx7("div", { className: "mt-2 flex flex-wrap gap-1", children: tmpl.injectSecrets.map((s) => /* @__PURE__ */ jsxs7("span", { className: "inline-flex items-center gap-0.5 rounded-full bg-muted px-2 py-0.5 text-[10px] text-muted-foreground", children: [
2988
- /* @__PURE__ */ jsx7(Lock2, { className: "h-2.5 w-2.5" }),
3169
+ tmpl.injectSecrets.length > 0 && /* @__PURE__ */ jsx8("div", { className: "mt-2 flex flex-wrap gap-1", children: tmpl.injectSecrets.map((s) => /* @__PURE__ */ jsxs8("span", { className: "inline-flex items-center gap-0.5 rounded-full bg-muted px-2 py-0.5 text-[10px] text-muted-foreground", children: [
3170
+ /* @__PURE__ */ jsx8(Lock2, { className: "h-2.5 w-2.5" }),
2989
3171
  s
2990
3172
  ] }, s)) })
2991
3173
  ]
@@ -2998,7 +3180,7 @@ function StartupScriptsPage({ apiClient, className }) {
2998
3180
  },
2999
3181
  `picker-${stepKey}`
3000
3182
  ),
3001
- dialogStep === "form" && /* @__PURE__ */ jsxs7(
3183
+ dialogStep === "form" && /* @__PURE__ */ jsxs8(
3002
3184
  "div",
3003
3185
  {
3004
3186
  className: cn(
@@ -3006,14 +3188,14 @@ function StartupScriptsPage({ apiClient, className }) {
3006
3188
  transitionDir === "forward" ? "slide-in-from-right-4" : "slide-in-from-left-4"
3007
3189
  ),
3008
3190
  children: [
3009
- /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
3010
- /* @__PURE__ */ jsx7(DialogTitle3, { children: editingScript ? "Edit Script" : "Create Startup Script" }),
3011
- /* @__PURE__ */ jsx7(DialogDescription3, { children: editingScript ? "Modify your startup script configuration." : "Define a shell script that runs when sandboxes start. Scripts execute before the AI agent." })
3191
+ /* @__PURE__ */ jsxs8(DialogHeader3, { children: [
3192
+ /* @__PURE__ */ jsx8(DialogTitle3, { children: editingScript ? "Edit Script" : "Create Startup Script" }),
3193
+ /* @__PURE__ */ jsx8(DialogDescription3, { children: editingScript ? "Modify your startup script configuration." : "Define a shell script that runs when sandboxes start. Scripts execute before the AI agent." })
3012
3194
  ] }),
3013
- /* @__PURE__ */ jsxs7("div", { className: "space-y-5 py-2", children: [
3014
- /* @__PURE__ */ jsxs7("div", { children: [
3015
- /* @__PURE__ */ jsx7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Name" }),
3016
- /* @__PURE__ */ jsx7(
3195
+ /* @__PURE__ */ jsxs8("div", { className: "space-y-5 py-2", children: [
3196
+ /* @__PURE__ */ jsxs8("div", { children: [
3197
+ /* @__PURE__ */ jsx8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Name" }),
3198
+ /* @__PURE__ */ jsx8(
3017
3199
  "input",
3018
3200
  {
3019
3201
  type: "text",
@@ -3025,9 +3207,9 @@ function StartupScriptsPage({ apiClient, className }) {
3025
3207
  }
3026
3208
  )
3027
3209
  ] }),
3028
- /* @__PURE__ */ jsxs7("div", { children: [
3029
- /* @__PURE__ */ jsx7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Description" }),
3030
- /* @__PURE__ */ jsx7(
3210
+ /* @__PURE__ */ jsxs8("div", { children: [
3211
+ /* @__PURE__ */ jsx8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Description" }),
3212
+ /* @__PURE__ */ jsx8(
3031
3213
  "input",
3032
3214
  {
3033
3215
  type: "text",
@@ -3039,9 +3221,9 @@ function StartupScriptsPage({ apiClient, className }) {
3039
3221
  }
3040
3222
  )
3041
3223
  ] }),
3042
- /* @__PURE__ */ jsxs7("div", { children: [
3043
- /* @__PURE__ */ jsx7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Language" }),
3044
- /* @__PURE__ */ jsx7("div", { className: "mt-1.5 flex flex-wrap gap-2", children: Object.entries(SCRIPT_TYPE_META).map(([type, meta]) => /* @__PURE__ */ jsx7(
3224
+ /* @__PURE__ */ jsxs8("div", { children: [
3225
+ /* @__PURE__ */ jsx8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Language" }),
3226
+ /* @__PURE__ */ jsx8("div", { className: "mt-1.5 flex flex-wrap gap-2", children: Object.entries(SCRIPT_TYPE_META).map(([type, meta]) => /* @__PURE__ */ jsx8(
3045
3227
  "button",
3046
3228
  {
3047
3229
  type: "button",
@@ -3063,9 +3245,9 @@ function StartupScriptsPage({ apiClient, className }) {
3063
3245
  type
3064
3246
  )) })
3065
3247
  ] }),
3066
- /* @__PURE__ */ jsxs7("div", { children: [
3067
- /* @__PURE__ */ jsx7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Script" }),
3068
- /* @__PURE__ */ jsx7(
3248
+ /* @__PURE__ */ jsxs8("div", { children: [
3249
+ /* @__PURE__ */ jsx8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Script" }),
3250
+ /* @__PURE__ */ jsx8(
3069
3251
  "textarea",
3070
3252
  {
3071
3253
  value: formData.content,
@@ -3075,19 +3257,19 @@ function StartupScriptsPage({ apiClient, className }) {
3075
3257
  className: "mt-1.5 w-full rounded-lg border border-border bg-[var(--depth-1,hsl(var(--muted)))] px-4 py-3 font-mono text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 resize-y"
3076
3258
  }
3077
3259
  ),
3078
- /* @__PURE__ */ jsxs7("p", { className: "mt-1 text-xs text-muted-foreground", children: [
3260
+ /* @__PURE__ */ jsxs8("p", { className: "mt-1 text-xs text-muted-foreground", children: [
3079
3261
  SCRIPT_TYPE_META[formData.scriptType].label,
3080
3262
  " script. Injected secrets are available as environment variables (e.g. ",
3081
- /* @__PURE__ */ jsx7("code", { className: "text-primary", children: "$GITHUB_TOKEN" }),
3263
+ /* @__PURE__ */ jsx8("code", { className: "text-primary", children: "$GITHUB_TOKEN" }),
3082
3264
  ")."
3083
3265
  ] })
3084
3266
  ] }),
3085
- secrets.length > 0 && /* @__PURE__ */ jsxs7("div", { children: [
3086
- /* @__PURE__ */ jsx7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Inject Secrets" }),
3087
- /* @__PURE__ */ jsx7("p", { className: "mt-0.5 text-xs text-muted-foreground", children: "Select secrets to make available as environment variables." }),
3088
- /* @__PURE__ */ jsx7("div", { className: "mt-2 flex flex-wrap gap-2", children: secrets.map((secret) => {
3267
+ secrets.length > 0 && /* @__PURE__ */ jsxs8("div", { children: [
3268
+ /* @__PURE__ */ jsx8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Inject Secrets" }),
3269
+ /* @__PURE__ */ jsx8("p", { className: "mt-0.5 text-xs text-muted-foreground", children: "Select secrets to make available as environment variables." }),
3270
+ /* @__PURE__ */ jsx8("div", { className: "mt-2 flex flex-wrap gap-2", children: secrets.map((secret) => {
3089
3271
  const selected = formData.injectSecrets.includes(secret.name);
3090
- return /* @__PURE__ */ jsxs7(
3272
+ return /* @__PURE__ */ jsxs8(
3091
3273
  "button",
3092
3274
  {
3093
3275
  type: "button",
@@ -3097,7 +3279,7 @@ function StartupScriptsPage({ apiClient, className }) {
3097
3279
  selected ? "bg-primary/10 border-primary/30 text-primary" : "bg-muted border-border text-muted-foreground hover:border-primary/20"
3098
3280
  ),
3099
3281
  children: [
3100
- /* @__PURE__ */ jsx7(Lock2, { className: "h-3 w-3" }),
3282
+ /* @__PURE__ */ jsx8(Lock2, { className: "h-3 w-3" }),
3101
3283
  secret.name
3102
3284
  ]
3103
3285
  },
@@ -3105,29 +3287,29 @@ function StartupScriptsPage({ apiClient, className }) {
3105
3287
  );
3106
3288
  }) })
3107
3289
  ] }),
3108
- /* @__PURE__ */ jsxs7("div", { children: [
3109
- /* @__PURE__ */ jsxs7(
3290
+ /* @__PURE__ */ jsxs8("div", { children: [
3291
+ /* @__PURE__ */ jsxs8(
3110
3292
  "button",
3111
3293
  {
3112
3294
  type: "button",
3113
3295
  onClick: () => setShowConditions(!showConditions),
3114
3296
  className: "flex items-center gap-2 text-xs font-bold uppercase tracking-widest text-muted-foreground hover:text-foreground transition-colors",
3115
3297
  children: [
3116
- showConditions ? /* @__PURE__ */ jsx7(ChevronUp, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx7(ChevronDown2, { className: "h-3.5 w-3.5" }),
3298
+ showConditions ? /* @__PURE__ */ jsx8(ChevronUp, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx8(ChevronDown2, { className: "h-3.5 w-3.5" }),
3117
3299
  "Conditions & Execution"
3118
3300
  ]
3119
3301
  }
3120
3302
  ),
3121
- showConditions && /* @__PURE__ */ jsxs7("div", { className: "mt-3 space-y-4 rounded-lg border border-border bg-muted/30 p-4", children: [
3122
- /* @__PURE__ */ jsxs7("div", { children: [
3123
- /* @__PURE__ */ jsxs7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3124
- /* @__PURE__ */ jsx7(Layers3, { className: "h-3.5 w-3.5" }),
3303
+ showConditions && /* @__PURE__ */ jsxs8("div", { className: "mt-3 space-y-4 rounded-lg border border-border bg-muted/30 p-4", children: [
3304
+ /* @__PURE__ */ jsxs8("div", { children: [
3305
+ /* @__PURE__ */ jsxs8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3306
+ /* @__PURE__ */ jsx8(Layers3, { className: "h-3.5 w-3.5" }),
3125
3307
  "Environments"
3126
3308
  ] }),
3127
- /* @__PURE__ */ jsx7("p", { className: "mt-0.5 text-xs text-muted-foreground", children: environments.length > 0 ? "Only run for these environments. Leave empty to run for all." : "No templates configured. Script will run for all environments." }),
3128
- environments.length > 0 && /* @__PURE__ */ jsx7("div", { className: "mt-2 flex flex-wrap gap-2", children: environments.map((env) => {
3309
+ /* @__PURE__ */ jsx8("p", { className: "mt-0.5 text-xs text-muted-foreground", children: environments.length > 0 ? "Only run for these environments. Leave empty to run for all." : "No templates configured. Script will run for all environments." }),
3310
+ environments.length > 0 && /* @__PURE__ */ jsx8("div", { className: "mt-2 flex flex-wrap gap-2", children: environments.map((env) => {
3129
3311
  const selected = formData.environments.includes(env.id);
3130
- return /* @__PURE__ */ jsx7(
3312
+ return /* @__PURE__ */ jsx8(
3131
3313
  "button",
3132
3314
  {
3133
3315
  type: "button",
@@ -3142,13 +3324,13 @@ function StartupScriptsPage({ apiClient, className }) {
3142
3324
  );
3143
3325
  }) })
3144
3326
  ] }),
3145
- /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-2 gap-4", children: [
3146
- /* @__PURE__ */ jsxs7("div", { children: [
3147
- /* @__PURE__ */ jsxs7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3148
- /* @__PURE__ */ jsx7(Cpu2, { className: "h-3.5 w-3.5" }),
3327
+ /* @__PURE__ */ jsxs8("div", { className: "grid grid-cols-2 gap-4", children: [
3328
+ /* @__PURE__ */ jsxs8("div", { children: [
3329
+ /* @__PURE__ */ jsxs8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3330
+ /* @__PURE__ */ jsx8(Cpu2, { className: "h-3.5 w-3.5" }),
3149
3331
  "Min CPU Cores"
3150
3332
  ] }),
3151
- /* @__PURE__ */ jsx7(
3333
+ /* @__PURE__ */ jsx8(
3152
3334
  "input",
3153
3335
  {
3154
3336
  type: "number",
@@ -3164,12 +3346,12 @@ function StartupScriptsPage({ apiClient, className }) {
3164
3346
  }
3165
3347
  )
3166
3348
  ] }),
3167
- /* @__PURE__ */ jsxs7("div", { children: [
3168
- /* @__PURE__ */ jsxs7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3169
- /* @__PURE__ */ jsx7(MemoryStick, { className: "h-3.5 w-3.5" }),
3349
+ /* @__PURE__ */ jsxs8("div", { children: [
3350
+ /* @__PURE__ */ jsxs8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3351
+ /* @__PURE__ */ jsx8(MemoryStick, { className: "h-3.5 w-3.5" }),
3170
3352
  "Min RAM (GB)"
3171
3353
  ] }),
3172
- /* @__PURE__ */ jsx7(
3354
+ /* @__PURE__ */ jsx8(
3173
3355
  "input",
3174
3356
  {
3175
3357
  type: "number",
@@ -3186,13 +3368,13 @@ function StartupScriptsPage({ apiClient, className }) {
3186
3368
  )
3187
3369
  ] })
3188
3370
  ] }),
3189
- /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-2 gap-4", children: [
3190
- /* @__PURE__ */ jsxs7("div", { children: [
3191
- /* @__PURE__ */ jsxs7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3192
- /* @__PURE__ */ jsx7(GripVertical, { className: "h-3.5 w-3.5" }),
3371
+ /* @__PURE__ */ jsxs8("div", { className: "grid grid-cols-2 gap-4", children: [
3372
+ /* @__PURE__ */ jsxs8("div", { children: [
3373
+ /* @__PURE__ */ jsxs8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3374
+ /* @__PURE__ */ jsx8(GripVertical, { className: "h-3.5 w-3.5" }),
3193
3375
  "Run Order"
3194
3376
  ] }),
3195
- /* @__PURE__ */ jsx7(
3377
+ /* @__PURE__ */ jsx8(
3196
3378
  "input",
3197
3379
  {
3198
3380
  type: "number",
@@ -3203,14 +3385,14 @@ function StartupScriptsPage({ apiClient, className }) {
3203
3385
  className: "mt-1.5 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-primary/30"
3204
3386
  }
3205
3387
  ),
3206
- /* @__PURE__ */ jsx7("p", { className: "mt-1 text-xs text-muted-foreground", children: "Lower runs first" })
3388
+ /* @__PURE__ */ jsx8("p", { className: "mt-1 text-xs text-muted-foreground", children: "Lower runs first" })
3207
3389
  ] }),
3208
- /* @__PURE__ */ jsxs7("div", { children: [
3209
- /* @__PURE__ */ jsxs7("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3210
- /* @__PURE__ */ jsx7(Clock, { className: "h-3.5 w-3.5" }),
3390
+ /* @__PURE__ */ jsxs8("div", { children: [
3391
+ /* @__PURE__ */ jsxs8("label", { className: "text-xs font-bold uppercase tracking-widest text-muted-foreground flex items-center gap-1.5", children: [
3392
+ /* @__PURE__ */ jsx8(Clock, { className: "h-3.5 w-3.5" }),
3211
3393
  "Timeout (seconds)"
3212
3394
  ] }),
3213
- /* @__PURE__ */ jsx7(
3395
+ /* @__PURE__ */ jsx8(
3214
3396
  "input",
3215
3397
  {
3216
3398
  type: "number",
@@ -3223,13 +3405,13 @@ function StartupScriptsPage({ apiClient, className }) {
3223
3405
  )
3224
3406
  ] })
3225
3407
  ] }),
3226
- /* @__PURE__ */ jsxs7("div", { className: "space-y-3", children: [
3227
- /* @__PURE__ */ jsxs7("label", { className: "flex items-center justify-between cursor-pointer", children: [
3228
- /* @__PURE__ */ jsxs7("div", { children: [
3229
- /* @__PURE__ */ jsx7("span", { className: "text-sm font-medium text-foreground", children: "Continue on failure" }),
3230
- /* @__PURE__ */ jsx7("p", { className: "text-xs text-muted-foreground", children: "If script fails, continue starting the sandbox" })
3408
+ /* @__PURE__ */ jsxs8("div", { className: "space-y-3", children: [
3409
+ /* @__PURE__ */ jsxs8("label", { className: "flex items-center justify-between cursor-pointer", children: [
3410
+ /* @__PURE__ */ jsxs8("div", { children: [
3411
+ /* @__PURE__ */ jsx8("span", { className: "text-sm font-medium text-foreground", children: "Continue on failure" }),
3412
+ /* @__PURE__ */ jsx8("p", { className: "text-xs text-muted-foreground", children: "If script fails, continue starting the sandbox" })
3231
3413
  ] }),
3232
- /* @__PURE__ */ jsx7(
3414
+ /* @__PURE__ */ jsx8(
3233
3415
  "button",
3234
3416
  {
3235
3417
  type: "button",
@@ -3238,7 +3420,7 @@ function StartupScriptsPage({ apiClient, className }) {
3238
3420
  "relative h-6 w-11 rounded-full transition-colors",
3239
3421
  formData.continueOnFailure ? "bg-primary" : "bg-border"
3240
3422
  ),
3241
- children: /* @__PURE__ */ jsx7(
3423
+ children: /* @__PURE__ */ jsx8(
3242
3424
  "span",
3243
3425
  {
3244
3426
  className: cn(
@@ -3250,12 +3432,12 @@ function StartupScriptsPage({ apiClient, className }) {
3250
3432
  }
3251
3433
  )
3252
3434
  ] }),
3253
- /* @__PURE__ */ jsxs7("label", { className: "flex items-center justify-between cursor-pointer", children: [
3254
- /* @__PURE__ */ jsxs7("div", { children: [
3255
- /* @__PURE__ */ jsx7("span", { className: "text-sm font-medium text-foreground", children: "Run as root" }),
3256
- /* @__PURE__ */ jsx7("p", { className: "text-xs text-muted-foreground", children: "Execute with root privileges instead of the agent user" })
3435
+ /* @__PURE__ */ jsxs8("label", { className: "flex items-center justify-between cursor-pointer", children: [
3436
+ /* @__PURE__ */ jsxs8("div", { children: [
3437
+ /* @__PURE__ */ jsx8("span", { className: "text-sm font-medium text-foreground", children: "Run as root" }),
3438
+ /* @__PURE__ */ jsx8("p", { className: "text-xs text-muted-foreground", children: "Execute with root privileges instead of the agent user" })
3257
3439
  ] }),
3258
- /* @__PURE__ */ jsx7(
3440
+ /* @__PURE__ */ jsx8(
3259
3441
  "button",
3260
3442
  {
3261
3443
  type: "button",
@@ -3264,7 +3446,7 @@ function StartupScriptsPage({ apiClient, className }) {
3264
3446
  "relative h-6 w-11 rounded-full transition-colors",
3265
3447
  formData.runAsRoot ? "bg-primary" : "bg-border"
3266
3448
  ),
3267
- children: /* @__PURE__ */ jsx7(
3449
+ children: /* @__PURE__ */ jsx8(
3268
3450
  "span",
3269
3451
  {
3270
3452
  className: cn(
@@ -3279,26 +3461,26 @@ function StartupScriptsPage({ apiClient, className }) {
3279
3461
  ] })
3280
3462
  ] })
3281
3463
  ] }),
3282
- formError && /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 rounded-lg border border-destructive/30 bg-destructive/10 p-3", children: [
3283
- /* @__PURE__ */ jsx7(AlertCircle3, { className: "h-4 w-4 text-destructive" }),
3284
- /* @__PURE__ */ jsx7("p", { className: "text-sm text-destructive", children: formError })
3464
+ formError && /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2 rounded-lg border border-destructive/30 bg-destructive/10 p-3", children: [
3465
+ /* @__PURE__ */ jsx8(AlertCircle3, { className: "h-4 w-4 text-destructive" }),
3466
+ /* @__PURE__ */ jsx8("p", { className: "text-sm text-destructive", children: formError })
3285
3467
  ] })
3286
3468
  ] }),
3287
- /* @__PURE__ */ jsxs7(DialogFooter3, { className: "flex items-center justify-between sm:justify-between", children: [
3288
- /* @__PURE__ */ jsx7("div", { children: !editingScript && /* @__PURE__ */ jsxs7(
3469
+ /* @__PURE__ */ jsxs8(DialogFooter3, { className: "flex items-center justify-between sm:justify-between", children: [
3470
+ /* @__PURE__ */ jsx8("div", { children: !editingScript && /* @__PURE__ */ jsxs8(
3289
3471
  "button",
3290
3472
  {
3291
3473
  type: "button",
3292
3474
  onClick: () => goToStep("picker"),
3293
3475
  className: "inline-flex items-center gap-1.5 rounded-lg border border-border px-4 py-2 text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
3294
3476
  children: [
3295
- /* @__PURE__ */ jsx7("svg", { className: "h-4 w-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx7("path", { d: "m15 18-6-6 6-6" }) }),
3477
+ /* @__PURE__ */ jsx8("svg", { className: "h-4 w-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx8("path", { d: "m15 18-6-6 6-6" }) }),
3296
3478
  "Back"
3297
3479
  ]
3298
3480
  }
3299
3481
  ) }),
3300
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2", children: [
3301
- /* @__PURE__ */ jsx7(
3482
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2", children: [
3483
+ /* @__PURE__ */ jsx8(
3302
3484
  "button",
3303
3485
  {
3304
3486
  type: "button",
@@ -3307,7 +3489,7 @@ function StartupScriptsPage({ apiClient, className }) {
3307
3489
  children: "Cancel"
3308
3490
  }
3309
3491
  ),
3310
- /* @__PURE__ */ jsx7(
3492
+ /* @__PURE__ */ jsx8(
3311
3493
  "button",
3312
3494
  {
3313
3495
  type: "button",
@@ -3324,17 +3506,17 @@ function StartupScriptsPage({ apiClient, className }) {
3324
3506
  `form-${stepKey}`
3325
3507
  )
3326
3508
  ] }) }),
3327
- /* @__PURE__ */ jsx7(Dialog3, { open: !!deleteTarget, onOpenChange: () => setDeleteTarget(null), children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-md", children: [
3328
- /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
3329
- /* @__PURE__ */ jsx7(DialogTitle3, { children: "Delete Startup Script" }),
3330
- /* @__PURE__ */ jsxs7(DialogDescription3, { children: [
3509
+ /* @__PURE__ */ jsx8(Dialog3, { open: !!deleteTarget, onOpenChange: () => setDeleteTarget(null), children: /* @__PURE__ */ jsxs8(DialogContent3, { className: "max-w-md", children: [
3510
+ /* @__PURE__ */ jsxs8(DialogHeader3, { children: [
3511
+ /* @__PURE__ */ jsx8(DialogTitle3, { children: "Delete Startup Script" }),
3512
+ /* @__PURE__ */ jsxs8(DialogDescription3, { children: [
3331
3513
  "Are you sure you want to delete \u201C",
3332
3514
  deleteTarget?.name,
3333
3515
  "\u201D? This action cannot be undone."
3334
3516
  ] })
3335
3517
  ] }),
3336
- /* @__PURE__ */ jsxs7(DialogFooter3, { children: [
3337
- /* @__PURE__ */ jsx7(
3518
+ /* @__PURE__ */ jsxs8(DialogFooter3, { children: [
3519
+ /* @__PURE__ */ jsx8(
3338
3520
  "button",
3339
3521
  {
3340
3522
  type: "button",
@@ -3343,7 +3525,7 @@ function StartupScriptsPage({ apiClient, className }) {
3343
3525
  children: "Cancel"
3344
3526
  }
3345
3527
  ),
3346
- /* @__PURE__ */ jsx7(
3528
+ /* @__PURE__ */ jsx8(
3347
3529
  "button",
3348
3530
  {
3349
3531
  type: "button",
@@ -3355,20 +3537,20 @@ function StartupScriptsPage({ apiClient, className }) {
3355
3537
  )
3356
3538
  ] })
3357
3539
  ] }) }),
3358
- /* @__PURE__ */ jsxs7("div", { className: "overflow-hidden rounded-lg border border-border bg-card shadow-[var(--shadow-card)]", children: [
3359
- /* @__PURE__ */ jsxs7("div", { className: "border-b border-border px-6 py-4 flex items-center justify-between", children: [
3360
- /* @__PURE__ */ jsx7("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx7("button", { className: "text-xs font-bold uppercase tracking-widest text-foreground", children: "All Scripts" }) }),
3361
- /* @__PURE__ */ jsxs7("span", { className: "text-xs text-muted-foreground font-mono", children: [
3540
+ /* @__PURE__ */ jsxs8("div", { className: "overflow-hidden rounded-lg border border-border bg-card shadow-[var(--shadow-card)]", children: [
3541
+ /* @__PURE__ */ jsxs8("div", { className: "border-b border-border px-6 py-4 flex items-center justify-between", children: [
3542
+ /* @__PURE__ */ jsx8("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx8("button", { className: "text-xs font-bold uppercase tracking-widest text-foreground", children: "All Scripts" }) }),
3543
+ /* @__PURE__ */ jsxs8("span", { className: "text-xs text-muted-foreground font-mono", children: [
3362
3544
  scripts.length,
3363
3545
  " script",
3364
3546
  scripts.length !== 1 ? "s" : ""
3365
3547
  ] })
3366
3548
  ] }),
3367
- loading ? /* @__PURE__ */ jsx7("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx7("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }) : scripts.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
3368
- /* @__PURE__ */ jsx7(Terminal, { className: "h-10 w-10 text-muted-foreground mb-4" }),
3369
- /* @__PURE__ */ jsx7("h3", { className: "text-lg font-semibold text-foreground", children: "No startup scripts yet" }),
3370
- /* @__PURE__ */ jsx7("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a script to run automatically when your sandboxes start." }),
3371
- /* @__PURE__ */ jsxs7(
3549
+ loading ? /* @__PURE__ */ jsx8("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx8("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }) : scripts.length === 0 ? /* @__PURE__ */ jsxs8("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
3550
+ /* @__PURE__ */ jsx8(Terminal, { className: "h-10 w-10 text-muted-foreground mb-4" }),
3551
+ /* @__PURE__ */ jsx8("h3", { className: "text-lg font-semibold text-foreground", children: "No startup scripts yet" }),
3552
+ /* @__PURE__ */ jsx8("p", { className: "mt-1 text-sm text-muted-foreground max-w-sm", children: "Create a script to run automatically when your sandboxes start." }),
3553
+ /* @__PURE__ */ jsxs8(
3372
3554
  "button",
3373
3555
  {
3374
3556
  type: "button",
@@ -3376,12 +3558,12 @@ function StartupScriptsPage({ apiClient, className }) {
3376
3558
  "aria-label": "Create your first startup script",
3377
3559
  className: "mt-4 inline-flex items-center gap-2 rounded-lg bg-[var(--btn-primary-bg)] px-4 py-2.5 text-sm font-bold text-[var(--btn-primary-text)] shadow-sm transition-colors hover:bg-[var(--btn-primary-hover)]",
3378
3560
  children: [
3379
- /* @__PURE__ */ jsx7(Plus4, { className: "h-4 w-4" }),
3561
+ /* @__PURE__ */ jsx8(Plus4, { className: "h-4 w-4" }),
3380
3562
  "New Script"
3381
3563
  ]
3382
3564
  }
3383
3565
  )
3384
- ] }) : /* @__PURE__ */ jsx7("div", { className: "divide-y divide-border", children: scripts.map((script) => /* @__PURE__ */ jsxs7(
3566
+ ] }) : /* @__PURE__ */ jsx8("div", { className: "divide-y divide-border", children: scripts.map((script) => /* @__PURE__ */ jsxs8(
3385
3567
  "div",
3386
3568
  {
3387
3569
  className: cn(
@@ -3389,7 +3571,7 @@ function StartupScriptsPage({ apiClient, className }) {
3389
3571
  !script.enabled && "opacity-60"
3390
3572
  ),
3391
3573
  children: [
3392
- /* @__PURE__ */ jsx7(
3574
+ /* @__PURE__ */ jsx8(
3393
3575
  "button",
3394
3576
  {
3395
3577
  type: "button",
@@ -3399,53 +3581,53 @@ function StartupScriptsPage({ apiClient, className }) {
3399
3581
  "flex h-8 w-8 shrink-0 items-center justify-center rounded-full transition-colors",
3400
3582
  script.enabled ? "bg-[var(--surface-success-bg,hsl(142 76% 90%))] text-[var(--surface-success-text,hsl(142 76% 36%))]" : "bg-muted text-muted-foreground"
3401
3583
  ),
3402
- children: script.enabled ? /* @__PURE__ */ jsx7(Power, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx7(PowerOff, { className: "h-4 w-4" })
3584
+ children: script.enabled ? /* @__PURE__ */ jsx8(Power, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx8(PowerOff, { className: "h-4 w-4" })
3403
3585
  }
3404
3586
  ),
3405
- /* @__PURE__ */ jsxs7("div", { className: "flex-1 min-w-0", children: [
3406
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2", children: [
3407
- /* @__PURE__ */ jsx7("h4", { className: "text-sm font-bold text-foreground truncate", children: script.name }),
3408
- /* @__PURE__ */ jsx7("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: SCRIPT_TYPE_META[script.scriptType ?? "bash"].label }),
3409
- script.runOrder !== 100 && /* @__PURE__ */ jsxs7("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: [
3587
+ /* @__PURE__ */ jsxs8("div", { className: "flex-1 min-w-0", children: [
3588
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2", children: [
3589
+ /* @__PURE__ */ jsx8("h4", { className: "text-sm font-bold text-foreground truncate", children: script.name }),
3590
+ /* @__PURE__ */ jsx8("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: SCRIPT_TYPE_META[script.scriptType ?? "bash"].label }),
3591
+ script.runOrder !== 100 && /* @__PURE__ */ jsxs8("span", { className: "text-[10px] font-mono text-muted-foreground bg-muted rounded px-1.5 py-0.5", children: [
3410
3592
  "#",
3411
3593
  script.runOrder
3412
3594
  ] })
3413
3595
  ] }),
3414
- script.description && /* @__PURE__ */ jsx7("p", { className: "mt-0.5 text-xs text-muted-foreground truncate", children: script.description }),
3415
- /* @__PURE__ */ jsxs7("div", { className: "mt-1.5 flex flex-wrap gap-1.5", children: [
3416
- script.environments.map((env) => /* @__PURE__ */ jsx7("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-medium text-primary", children: env }, env)),
3417
- script.injectSecrets.map((s) => /* @__PURE__ */ jsxs7("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground flex items-center gap-0.5", children: [
3418
- /* @__PURE__ */ jsx7(Lock2, { className: "h-2.5 w-2.5" }),
3596
+ script.description && /* @__PURE__ */ jsx8("p", { className: "mt-0.5 text-xs text-muted-foreground truncate", children: script.description }),
3597
+ /* @__PURE__ */ jsxs8("div", { className: "mt-1.5 flex flex-wrap gap-1.5", children: [
3598
+ script.environments.map((env) => /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-medium text-primary", children: env }, env)),
3599
+ script.injectSecrets.map((s) => /* @__PURE__ */ jsxs8("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground flex items-center gap-0.5", children: [
3600
+ /* @__PURE__ */ jsx8(Lock2, { className: "h-2.5 w-2.5" }),
3419
3601
  s
3420
3602
  ] }, s)),
3421
- script.continueOnFailure && /* @__PURE__ */ jsx7("span", { className: "rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-600", children: "soft fail" }),
3422
- script.runAsRoot && /* @__PURE__ */ jsx7("span", { className: "rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive", children: "root" })
3603
+ script.continueOnFailure && /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-600", children: "soft fail" }),
3604
+ script.runAsRoot && /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive", children: "root" })
3423
3605
  ] })
3424
3606
  ] }),
3425
- /* @__PURE__ */ jsxs7("div", { className: "hidden md:flex items-center gap-1 text-xs text-muted-foreground", children: [
3426
- /* @__PURE__ */ jsx7(Clock, { className: "h-3.5 w-3.5" }),
3607
+ /* @__PURE__ */ jsxs8("div", { className: "hidden md:flex items-center gap-1 text-xs text-muted-foreground", children: [
3608
+ /* @__PURE__ */ jsx8(Clock, { className: "h-3.5 w-3.5" }),
3427
3609
  script.timeoutSeconds,
3428
3610
  "s"
3429
3611
  ] }),
3430
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-1 sm:opacity-0 sm:group-hover:opacity-100 sm:focus-within:opacity-100 transition-opacity", children: [
3431
- /* @__PURE__ */ jsx7(
3612
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-1 sm:opacity-0 sm:group-hover:opacity-100 sm:focus-within:opacity-100 transition-opacity", children: [
3613
+ /* @__PURE__ */ jsx8(
3432
3614
  "button",
3433
3615
  {
3434
3616
  type: "button",
3435
3617
  onClick: () => openEdit(script),
3436
3618
  className: "rounded-md p-2 text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
3437
3619
  "aria-label": `Edit ${script.name}`,
3438
- children: /* @__PURE__ */ jsx7(Pencil, { className: "h-4 w-4" })
3620
+ children: /* @__PURE__ */ jsx8(Pencil, { className: "h-4 w-4" })
3439
3621
  }
3440
3622
  ),
3441
- /* @__PURE__ */ jsx7(
3623
+ /* @__PURE__ */ jsx8(
3442
3624
  "button",
3443
3625
  {
3444
3626
  type: "button",
3445
3627
  onClick: () => setDeleteTarget(script),
3446
3628
  className: "rounded-md p-2 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",
3447
3629
  "aria-label": `Delete ${script.name}`,
3448
- children: /* @__PURE__ */ jsx7(Trash24, { className: "h-4 w-4" })
3630
+ children: /* @__PURE__ */ jsx8(Trash24, { className: "h-4 w-4" })
3449
3631
  }
3450
3632
  )
3451
3633
  ] })
@@ -3454,20 +3636,20 @@ function StartupScriptsPage({ apiClient, className }) {
3454
3636
  script.id
3455
3637
  )) })
3456
3638
  ] }),
3457
- /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2", children: [
3458
- /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
3459
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-3 mb-3", children: [
3460
- /* @__PURE__ */ jsx7("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx7(Play, { className: "h-5 w-5" }) }),
3461
- /* @__PURE__ */ jsx7("h3", { className: "text-sm font-bold text-foreground", children: "How Scripts Run" })
3639
+ /* @__PURE__ */ jsxs8("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-2", children: [
3640
+ /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
3641
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-3 mb-3", children: [
3642
+ /* @__PURE__ */ jsx8("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx8(Play, { className: "h-5 w-5" }) }),
3643
+ /* @__PURE__ */ jsx8("h3", { className: "text-sm font-bold text-foreground", children: "How Scripts Run" })
3462
3644
  ] }),
3463
- /* @__PURE__ */ jsx7("p", { className: "text-sm text-muted-foreground", children: 'Scripts execute in order after the container starts but before the AI agent. They run as bash scripts with full access to mounted tools (Nix profile) and workspace. Failed scripts abort sandbox creation unless "continue on failure" is enabled.' })
3645
+ /* @__PURE__ */ jsx8("p", { className: "text-sm text-muted-foreground", children: 'Scripts execute in order after the container starts but before the AI agent. They run as bash scripts with full access to mounted tools (Nix profile) and workspace. Failed scripts abort sandbox creation unless "continue on failure" is enabled.' })
3464
3646
  ] }),
3465
- /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
3466
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-3 mb-3", children: [
3467
- /* @__PURE__ */ jsx7("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx7(Shield2, { className: "h-5 w-5" }) }),
3468
- /* @__PURE__ */ jsx7("h3", { className: "text-sm font-bold text-foreground", children: "Security & Secrets" })
3647
+ /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-card p-6 shadow-[var(--shadow-card)]", children: [
3648
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-3 mb-3", children: [
3649
+ /* @__PURE__ */ jsx8("div", { className: "flex h-9 w-9 items-center justify-center rounded-md bg-[var(--brand-primary,hsl(var(--primary)))] text-[var(--btn-primary-text)]", children: /* @__PURE__ */ jsx8(Shield2, { className: "h-5 w-5" }) }),
3650
+ /* @__PURE__ */ jsx8("h3", { className: "text-sm font-bold text-foreground", children: "Security & Secrets" })
3469
3651
  ] }),
3470
- /* @__PURE__ */ jsx7("p", { className: "text-sm text-muted-foreground", children: "Selected secrets are injected as environment variables at execution time. Secret values are never stored in the script itself \u2014 they are decrypted and injected only when the sandbox starts. Scripts can use conditions to restrict execution to specific environments or resource tiers." })
3652
+ /* @__PURE__ */ jsx8("p", { className: "text-sm text-muted-foreground", children: "Selected secrets are injected as environment variables at execution time. Secret values are never stored in the script itself \u2014 they are decrypted and injected only when the sandbox starts. Scripts can use conditions to restrict execution to specific environments or resource tiers." })
3471
3653
  ] })
3472
3654
  ] })
3473
3655
  ] });
@@ -3615,6 +3797,7 @@ function getPresetForTemplate(id) {
3615
3797
  return { ...defaults, environment: id };
3616
3798
  }
3617
3799
  export {
3800
+ AuthPage,
3618
3801
  BillingPage,
3619
3802
  ProfilesPage,
3620
3803
  ProvisioningWizard,