@truefoundry/trueforge-ui 0.1.0-rc.1 → 0.1.0-rc.2

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/{ConnectorSettings-ADACLWQI.js → ConnectorSettings-H37ZFC6Z.js} +35 -12
  3. package/dist/ConnectorSettings-H37ZFC6Z.js.map +1 -0
  4. package/dist/{DockLayout-BH5XX2AQ.js → DockLayout-KEMFRWIR.js} +8 -8
  5. package/dist/{DrawerLayout-O2XZQCG4.js → DrawerLayout-ZVWCKEIS.js} +8 -8
  6. package/dist/{ModelSettings-LKFJVUYQ.js → ModelSettings-QJMYHCMD.js} +5 -5
  7. package/dist/OpenUiFenceBlock-XFBUGPKQ.js +9 -0
  8. package/dist/{SandboxSettings-H5MDAE47.js → SandboxSettings-BUBMLW7Q.js} +159 -65
  9. package/dist/SandboxSettings-BUBMLW7Q.js.map +1 -0
  10. package/dist/{SettingsBuilder-3JOLC56Z.js → SettingsBuilder-26XSGIHK.js} +7 -7
  11. package/dist/{SidebarLayout-G6BGD7EY.js → SidebarLayout-F3XFXW7B.js} +8 -8
  12. package/dist/{SkillSettings-4VB42CVG.js → SkillSettings-IRMGDFRG.js} +5 -5
  13. package/dist/{WidgetLayout-ABSXZUSQ.js → WidgetLayout-SZMABKIR.js} +8 -8
  14. package/dist/{chunk-EFGSH3MO.js → chunk-7EEOWDLE.js} +7 -7
  15. package/dist/chunk-DTF7ZMUJ.js +567 -0
  16. package/dist/chunk-DTF7ZMUJ.js.map +1 -0
  17. package/dist/{chunk-3PTFNAQK.js → chunk-H7DR64W3.js} +46 -31
  18. package/dist/chunk-H7DR64W3.js.map +1 -0
  19. package/dist/{chunk-FDBJNXH2.js → chunk-HT5HKQXE.js} +2 -2
  20. package/dist/{chunk-VJTCFZNM.js → chunk-LRQHHZDX.js} +4 -4
  21. package/dist/{chunk-Z27F4LBZ.js → chunk-QGNLP2EE.js} +163 -71
  22. package/dist/chunk-QGNLP2EE.js.map +1 -0
  23. package/dist/{chunk-U5GBGEGN.js → chunk-XAZ5HJXV.js} +83 -9
  24. package/dist/chunk-XAZ5HJXV.js.map +1 -0
  25. package/dist/index.d.ts +6 -2
  26. package/dist/index.js +112 -17
  27. package/dist/index.js.map +1 -1
  28. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +42 -28
  29. package/dist/plugins/trueforge-agent-server-adapter/index.js +27 -16
  30. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  31. package/dist/styles.css +1 -1
  32. package/package.json +2 -2
  33. package/dist/ConnectorSettings-ADACLWQI.js.map +0 -1
  34. package/dist/OpenUiFenceBlock-A2CWCPOP.js +0 -9
  35. package/dist/SandboxSettings-H5MDAE47.js.map +0 -1
  36. package/dist/chunk-3PTFNAQK.js.map +0 -1
  37. package/dist/chunk-U5GBGEGN.js.map +0 -1
  38. package/dist/chunk-WMRZSULD.js +0 -567
  39. package/dist/chunk-WMRZSULD.js.map +0 -1
  40. package/dist/chunk-Z27F4LBZ.js.map +0 -1
  41. /package/dist/{DockLayout-BH5XX2AQ.js.map → DockLayout-KEMFRWIR.js.map} +0 -0
  42. /package/dist/{DrawerLayout-O2XZQCG4.js.map → DrawerLayout-ZVWCKEIS.js.map} +0 -0
  43. /package/dist/{ModelSettings-LKFJVUYQ.js.map → ModelSettings-QJMYHCMD.js.map} +0 -0
  44. /package/dist/{OpenUiFenceBlock-A2CWCPOP.js.map → OpenUiFenceBlock-XFBUGPKQ.js.map} +0 -0
  45. /package/dist/{SettingsBuilder-3JOLC56Z.js.map → SettingsBuilder-26XSGIHK.js.map} +0 -0
  46. /package/dist/{SidebarLayout-G6BGD7EY.js.map → SidebarLayout-F3XFXW7B.js.map} +0 -0
  47. /package/dist/{SkillSettings-4VB42CVG.js.map → SkillSettings-IRMGDFRG.js.map} +0 -0
  48. /package/dist/{WidgetLayout-ABSXZUSQ.js.map → WidgetLayout-SZMABKIR.js.map} +0 -0
  49. /package/dist/{chunk-EFGSH3MO.js.map → chunk-7EEOWDLE.js.map} +0 -0
  50. /package/dist/{chunk-FDBJNXH2.js.map → chunk-HT5HKQXE.js.map} +0 -0
  51. /package/dist/{chunk-VJTCFZNM.js.map → chunk-LRQHHZDX.js.map} +0 -0
@@ -5,18 +5,20 @@ import {
5
5
  AccordionSummary,
6
6
  Button,
7
7
  CenteredModal,
8
+ Tooltip,
8
9
  auiInputClass,
9
10
  useToasterOptional
10
- } from "./chunk-Z27F4LBZ.js";
11
+ } from "./chunk-QGNLP2EE.js";
11
12
  import {
12
13
  Icon,
14
+ Spinner,
13
15
  getErrorMessage,
14
16
  useCatalogServer
15
- } from "./chunk-U5GBGEGN.js";
16
- import "./chunk-FDBJNXH2.js";
17
+ } from "./chunk-XAZ5HJXV.js";
18
+ import "./chunk-HT5HKQXE.js";
17
19
  import {
18
20
  cn
19
- } from "./chunk-WMRZSULD.js";
21
+ } from "./chunk-DTF7ZMUJ.js";
20
22
 
21
23
  // src/containers/SettingsBuilder/SandboxSettings.tsx
22
24
  import { useCallback, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
@@ -26,7 +28,6 @@ import { useEffect, useState } from "react";
26
28
  import { jsx, jsxs } from "react/jsx-runtime";
27
29
  var EMPTY_CONFIG = {
28
30
  // Snapshot/image is release-owned now; kept only to satisfy the external SandboxProviderConfig type.
29
- snapshotName: "",
30
31
  execTimeoutMs: 3e5,
31
32
  autoStopIntervalInMinutes: 15,
32
33
  autoArchiveIntervalInMinutes: 10080,
@@ -92,7 +93,6 @@ var ConfigureSandboxForm = ({
92
93
  try {
93
94
  await onSave({
94
95
  // Snapshot/image is release-owned; the field is retained only for the external type.
95
- snapshotName: "",
96
96
  execTimeoutMs: execTimeout,
97
97
  autoStopIntervalInMinutes: autoStop,
98
98
  autoArchiveIntervalInMinutes: autoArchive,
@@ -253,19 +253,42 @@ var ConfigureSandboxForm_default = ConfigureSandboxForm;
253
253
 
254
254
  // src/containers/SettingsBuilder/SandboxSettings.tsx
255
255
  import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
256
+ var SNAPSHOT_STATUS_POLL_INTERVAL_MS = 1e4;
256
257
  var configFrom = ({
257
- snapshotName,
258
258
  execTimeoutMs,
259
259
  autoStopIntervalInMinutes,
260
260
  autoArchiveIntervalInMinutes,
261
261
  autoDeleteIntervalInMinutes
262
262
  }) => ({
263
- snapshotName,
264
263
  execTimeoutMs,
265
264
  autoStopIntervalInMinutes,
266
265
  autoArchiveIntervalInMinutes,
267
266
  autoDeleteIntervalInMinutes
268
267
  });
268
+ var statusPresentation = (status) => {
269
+ switch (status) {
270
+ case "pending":
271
+ return {
272
+ label: "Syncing image...",
273
+ className: "text-warning-bg"
274
+ };
275
+ case "ready":
276
+ return {
277
+ label: "Connected",
278
+ className: "text-success-bg"
279
+ };
280
+ case "failed":
281
+ return {
282
+ label: "Sync failed",
283
+ className: "text-failure-bg"
284
+ };
285
+ default:
286
+ return {
287
+ label: status,
288
+ className: "text-text-secondary"
289
+ };
290
+ }
291
+ };
269
292
  var SandboxSettings = () => {
270
293
  const { sandboxCatalog } = useCatalogServer();
271
294
  const toaster = useToasterOptional();
@@ -300,10 +323,44 @@ var SandboxSettings = () => {
300
323
  useEffect2(() => {
301
324
  void refresh();
302
325
  }, [refresh]);
326
+ const hasPendingProvider = providers.some((entry) => entry.snapshotSyncStatus.status === "pending");
327
+ useEffect2(() => {
328
+ if (!sandboxCatalog || !hasPendingProvider) return;
329
+ const activeSandboxCatalog = sandboxCatalog;
330
+ let cancelled = false;
331
+ let timeoutId;
332
+ function schedulePoll() {
333
+ timeoutId = window.setTimeout(() => {
334
+ void poll();
335
+ }, SNAPSHOT_STATUS_POLL_INTERVAL_MS);
336
+ }
337
+ async function poll() {
338
+ try {
339
+ const listed = await activeSandboxCatalog.listSandboxProviders();
340
+ if (cancelled) return;
341
+ setProviders(listed);
342
+ setError(null);
343
+ if (listed.some((entry) => entry.snapshotSyncStatus.status === "pending")) {
344
+ schedulePoll();
345
+ }
346
+ } catch (err) {
347
+ if (cancelled) return;
348
+ setError(getErrorMessage(err, "Failed to refresh sandbox providers"));
349
+ schedulePoll();
350
+ }
351
+ }
352
+ schedulePoll();
353
+ return () => {
354
+ cancelled = true;
355
+ if (timeoutId !== void 0) {
356
+ window.clearTimeout(timeoutId);
357
+ }
358
+ };
359
+ }, [sandboxCatalog, hasPendingProvider]);
303
360
  const hasConfiguredProvider = providers.length > 0;
304
361
  const availableEntries = useMemo(() => {
305
362
  if (hasConfiguredProvider) return [];
306
- const connectedCatalogIds = new Set(providers.map((provider) => provider.catalogId));
363
+ const connectedCatalogIds = new Set(providers.map((provider) => provider.data.catalogId));
307
364
  return catalog.filter((entry) => !connectedCatalogIds.has(entry.id));
308
365
  }, [catalog, providers, hasConfiguredProvider]);
309
366
  const formInitialConfig = useMemo(
@@ -358,6 +415,15 @@ var SandboxSettings = () => {
358
415
  toaster?.showSuccess({ title: `${updateProvider.name} updated` });
359
416
  }, 0);
360
417
  };
418
+ const handleRetry = (provider) => {
419
+ void runMutation(async () => {
420
+ await sandboxCatalog.updateSandboxProvider({
421
+ id: provider.id,
422
+ ...configFrom(provider)
423
+ });
424
+ }).catch(() => {
425
+ });
426
+ };
361
427
  const handleRemove = (provider) => {
362
428
  const deleteSandboxProvider = sandboxCatalog.deleteSandboxProvider;
363
429
  if (!deleteSandboxProvider) return;
@@ -379,61 +445,89 @@ var SandboxSettings = () => {
379
445
  "Configured \xB7 ",
380
446
  providers.length
381
447
  ] }),
382
- /* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: providers.map((provider) => /* @__PURE__ */ jsxs2(
383
- "article",
384
- {
385
- className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
386
- children: [
387
- /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
388
- /* @__PURE__ */ jsx2(
389
- "span",
390
- {
391
- className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
392
- "aria-hidden": true,
393
- children: /* @__PURE__ */ jsx2(Icon, { name: "cube", className: "size-4.5" })
394
- }
395
- ),
396
- /* @__PURE__ */ jsx2("div", { className: "min-w-0", children: /* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: provider.name }) })
397
- ] }),
398
- /* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2.5 sm:justify-end", children: [
399
- provider.isConnected ? /* @__PURE__ */ jsxs2("span", { className: "flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium text-success-bg", children: [
400
- /* @__PURE__ */ jsx2("span", { className: "h-1.5 w-1.5 rounded-full bg-success-bg" }),
401
- "Connected"
402
- ] }) : null,
403
- /* @__PURE__ */ jsx2(
404
- Button,
405
- {
406
- variant: "secondary",
407
- size: "sm",
408
- type: "button",
409
- disabled: busy,
410
- onClick: () => {
411
- setFormError(null);
412
- setCreateEntry(null);
413
- setUpdateProvider(provider);
414
- },
415
- children: "Update"
416
- }
417
- ),
418
- sandboxCatalog.deleteSandboxProvider ? /* @__PURE__ */ jsx2(
419
- Button,
420
- {
421
- variant: "ghost",
422
- size: "sm",
423
- className: "text-text-secondary",
424
- type: "button",
425
- disabled: busy,
426
- onClick: () => {
427
- handleRemove(provider);
428
- },
429
- children: "Remove"
430
- }
431
- ) : null
432
- ] })
433
- ]
434
- },
435
- provider.id
436
- )) })
448
+ /* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: providers.map((entry) => {
449
+ const provider = entry.data;
450
+ const status = statusPresentation(entry.snapshotSyncStatus.status);
451
+ const statusReason = entry.snapshotSyncStatus.statusReason;
452
+ const statusIndicator = /* @__PURE__ */ jsxs2("span", { className: `inline-flex items-center gap-1.5 text-sm font-medium ${status.className}`, children: [
453
+ entry.snapshotSyncStatus.status === "pending" ? /* @__PURE__ */ jsx2(Spinner, { size: 16, "aria-label": "Syncing snapshot image" }) : entry.snapshotSyncStatus.status === "ready" ? /* @__PURE__ */ jsx2("span", { className: "size-2 rounded-full bg-success-bg", "aria-hidden": true }) : entry.snapshotSyncStatus.status === "failed" ? /* @__PURE__ */ jsx2(Icon, { name: "triangle-exclamation", className: "size-4" }) : null,
454
+ status.label
455
+ ] });
456
+ return /* @__PURE__ */ jsxs2(
457
+ "article",
458
+ {
459
+ className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
460
+ children: [
461
+ /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
462
+ /* @__PURE__ */ jsx2(
463
+ "span",
464
+ {
465
+ className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
466
+ "aria-hidden": true,
467
+ children: /* @__PURE__ */ jsx2(Icon, { name: "cube", className: "size-4.5" })
468
+ }
469
+ ),
470
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0", children: /* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: provider.name }) })
471
+ ] }),
472
+ /* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2.5 sm:justify-end", children: [
473
+ statusIndicator,
474
+ statusReason ? /* @__PURE__ */ jsx2(Tooltip, { content: statusReason, children: /* @__PURE__ */ jsx2(
475
+ "button",
476
+ {
477
+ type: "button",
478
+ "aria-label": "Snapshot sync status details",
479
+ className: "inline-flex text-text-secondary transition-colors hover:text-text-primary",
480
+ children: /* @__PURE__ */ jsx2(Icon, { name: "info", className: "size-4" })
481
+ }
482
+ ) }) : null,
483
+ entry.snapshotSyncStatus.status === "failed" ? /* @__PURE__ */ jsx2(
484
+ Button,
485
+ {
486
+ variant: "ghost",
487
+ size: "sm",
488
+ type: "button",
489
+ disabled: busy,
490
+ onClick: () => {
491
+ handleRetry(provider);
492
+ },
493
+ children: "Retry"
494
+ }
495
+ ) : null,
496
+ /* @__PURE__ */ jsx2(
497
+ Button,
498
+ {
499
+ variant: "secondary",
500
+ size: "sm",
501
+ type: "button",
502
+ disabled: busy,
503
+ onClick: () => {
504
+ setFormError(null);
505
+ setCreateEntry(null);
506
+ setUpdateProvider(provider);
507
+ },
508
+ children: "Update"
509
+ }
510
+ ),
511
+ sandboxCatalog.deleteSandboxProvider ? /* @__PURE__ */ jsx2(
512
+ Button,
513
+ {
514
+ variant: "ghost",
515
+ size: "sm",
516
+ className: "text-text-secondary",
517
+ type: "button",
518
+ disabled: busy,
519
+ onClick: () => {
520
+ handleRemove(provider);
521
+ },
522
+ children: "Remove"
523
+ }
524
+ ) : null
525
+ ] })
526
+ ]
527
+ },
528
+ provider.id
529
+ );
530
+ }) })
437
531
  ] }) : null,
438
532
  !hasConfiguredProvider ? /* @__PURE__ */ jsxs2("section", { children: [
439
533
  /* @__PURE__ */ jsxs2("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary", children: [
@@ -502,4 +596,4 @@ var SandboxSettings_default = SandboxSettings;
502
596
  export {
503
597
  SandboxSettings_default as default
504
598
  };
505
- //# sourceMappingURL=SandboxSettings-H5MDAE47.js.map
599
+ //# sourceMappingURL=SandboxSettings-BUBMLW7Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/containers/SettingsBuilder/SandboxSettings.tsx","../src/containers/SettingsBuilder/ConfigureSandboxForm.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Spinner } from '@/atoms/primitives/Spinner.js';\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { Tooltip } from '../../atoms/primitives/Tooltip.js';\nimport { Icon } from '../../icons/Icon.js';\nimport { useCatalogServer } from '../../server/ServerContext.js';\nimport type {\n SandboxProviderBase,\n SandboxProviderCatalogEntry,\n SandboxProviderConfig,\n SandboxProviderListEntry,\n SandboxSnapshotSyncStatus,\n} from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\nimport { useToasterOptional } from '../ToasterContainer.js';\nimport ConfigureSandboxForm, { type SandboxConfigDraft } from './ConfigureSandboxForm.js';\n\nconst SNAPSHOT_STATUS_POLL_INTERVAL_MS = 10000;\n\nconst configFrom = ({\n execTimeoutMs,\n autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes,\n}: SandboxProviderConfig): SandboxProviderConfig => ({\n execTimeoutMs,\n autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes,\n});\n\nconst statusPresentation = (status: SandboxSnapshotSyncStatus['status']): { label: string; className: string } => {\n switch (status) {\n case 'pending':\n return {\n label: 'Syncing image...',\n className: 'text-warning-bg',\n };\n case 'ready':\n return {\n label: 'Connected',\n className: 'text-success-bg',\n };\n case 'failed':\n return {\n label: 'Sync failed',\n className: 'text-failure-bg',\n };\n default:\n return {\n label: status,\n className: 'text-text-secondary',\n };\n }\n};\n\nconst SandboxSettings = () => {\n const { sandboxCatalog } = useCatalogServer();\n const toaster = useToasterOptional();\n\n const [providers, setProviders] = useState<SandboxProviderListEntry[]>([]);\n const [catalog, setCatalog] = useState<SandboxProviderCatalogEntry[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [formError, setFormError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const [createEntry, setCreateEntry] = useState<SandboxProviderCatalogEntry | null>(null);\n const [updateProvider, setUpdateProvider] = useState<SandboxProviderBase | null>(null);\n\n const refresh = useCallback(\n async ({ quiet = false }: { quiet?: boolean } = {}) => {\n if (!sandboxCatalog) return;\n if (!quiet) setLoading(true);\n setError(null);\n try {\n const [listed, available] = await Promise.all([\n sandboxCatalog.listSandboxProviders(),\n sandboxCatalog.getSandboxProviderCatalog(),\n ]);\n setProviders(listed);\n setCatalog(available);\n } catch (err) {\n setError(getErrorMessage(err, 'Failed to load sandbox providers'));\n } finally {\n if (!quiet) setLoading(false);\n }\n },\n [sandboxCatalog],\n );\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n const hasPendingProvider = providers.some(entry => entry.snapshotSyncStatus.status === 'pending');\n\n useEffect(() => {\n if (!sandboxCatalog || !hasPendingProvider) return;\n const activeSandboxCatalog = sandboxCatalog;\n\n let cancelled = false;\n let timeoutId: number | undefined;\n\n function schedulePoll() {\n timeoutId = window.setTimeout(() => {\n void poll();\n }, SNAPSHOT_STATUS_POLL_INTERVAL_MS);\n }\n\n async function poll() {\n try {\n const listed = await activeSandboxCatalog.listSandboxProviders();\n if (cancelled) return;\n setProviders(listed);\n setError(null);\n if (listed.some(entry => entry.snapshotSyncStatus.status === 'pending')) {\n schedulePoll();\n }\n } catch (err) {\n if (cancelled) return;\n setError(getErrorMessage(err, 'Failed to refresh sandbox providers'));\n schedulePoll();\n }\n }\n\n schedulePoll();\n return () => {\n cancelled = true;\n if (timeoutId !== undefined) {\n window.clearTimeout(timeoutId);\n }\n };\n }, [sandboxCatalog, hasPendingProvider]);\n\n // Tenant/UI-wide: only one sandbox provider may be configured at a time.\n const hasConfiguredProvider = providers.length > 0;\n const availableEntries = useMemo(() => {\n if (hasConfiguredProvider) return [];\n const connectedCatalogIds = new Set(providers.map(provider => provider.data.catalogId));\n return catalog.filter(entry => !connectedCatalogIds.has(entry.id));\n }, [catalog, providers, hasConfiguredProvider]);\n\n const formInitialConfig = useMemo(\n () => (updateProvider ? configFrom(updateProvider) : createEntry ? configFrom(createEntry) : null),\n [updateProvider, createEntry],\n );\n\n if (!sandboxCatalog) {\n return <p className=\"text-sm text-text-secondary\">Sandbox provider catalog is not available.</p>;\n }\n\n const runMutation = async (fn: () => Promise<void>, setMutationError = setError) => {\n setBusy(true);\n setError(null);\n try {\n await fn();\n await refresh({ quiet: true });\n } catch (err) {\n setMutationError(getErrorMessage(err, 'Request failed'));\n throw err;\n } finally {\n setBusy(false);\n }\n };\n\n const handleCreate = async (draft: SandboxConfigDraft) => {\n if (!createEntry) return;\n setFormError(null);\n await runMutation(async () => {\n await sandboxCatalog.createSandboxProvider({\n catalogId: createEntry.id,\n name: createEntry.name,\n type: createEntry.type,\n ...configFrom(draft),\n apiKey: draft.apiKey,\n });\n }, setFormError);\n setCreateEntry(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${createEntry.name} configured` });\n }, 0);\n };\n\n const handleUpdate = async (draft: SandboxConfigDraft) => {\n if (!updateProvider) return;\n setFormError(null);\n await runMutation(async () => {\n await sandboxCatalog.updateSandboxProvider({\n id: updateProvider.id,\n ...configFrom(draft),\n ...(draft.apiKey ? { apiKey: draft.apiKey } : {}),\n });\n }, setFormError);\n setUpdateProvider(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${updateProvider.name} updated` });\n }, 0);\n };\n\n const handleRetry = (provider: SandboxProviderBase) => {\n void runMutation(async () => {\n await sandboxCatalog.updateSandboxProvider({\n id: provider.id,\n ...configFrom(provider),\n });\n }).catch(() => {});\n };\n\n const handleRemove = (provider: SandboxProviderBase) => {\n const deleteSandboxProvider = sandboxCatalog.deleteSandboxProvider;\n if (!deleteSandboxProvider) return;\n void runMutation(async () => {\n await deleteSandboxProvider({ id: provider.id });\n }).catch(() => {});\n };\n\n const formOpen = createEntry != null || updateProvider != null;\n const isUpdate = updateProvider != null;\n const formTitle = updateProvider\n ? `Update ${updateProvider.name}`\n : createEntry\n ? `Configure ${createEntry.name}`\n : 'Configure sandbox provider';\n\n return (\n <>\n <h3 className=\"text-xl font-semibold tracking-tight text-text-primary\">Sandbox providers</h3>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Choose a provider that runs sandboxes for code, files and shell commands. Only one can be active at a time.\n </p>\n\n {error ? (\n <p className=\"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg\">\n {error}\n </p>\n ) : null}\n\n <div className=\"mt-4 flex-1 overflow-y-auto\">\n {loading ? (\n <p className=\"text-sm text-text-secondary\">Loading sandbox providers…</p>\n ) : (\n <div className=\"space-y-6\">\n {providers.length > 0 ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Configured · {providers.length}\n </h4>\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {providers.map(entry => {\n const provider = entry.data;\n const status = statusPresentation(entry.snapshotSyncStatus.status);\n const statusReason = entry.snapshotSyncStatus.statusReason;\n const statusIndicator = (\n <span className={`inline-flex items-center gap-1.5 text-sm font-medium ${status.className}`}>\n {entry.snapshotSyncStatus.status === 'pending' ? (\n <Spinner size={16} aria-label=\"Syncing snapshot image\" />\n ) : entry.snapshotSyncStatus.status === 'ready' ? (\n <span className=\"size-2 rounded-full bg-success-bg\" aria-hidden />\n ) : entry.snapshotSyncStatus.status === 'failed' ? (\n <Icon name=\"triangle-exclamation\" className=\"size-4\" />\n ) : null}\n {status.label}\n </span>\n );\n return (\n <article\n key={provider.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"cube\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{provider.name}</h5>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2.5 sm:justify-end\">\n {statusIndicator}\n {statusReason ? (\n <Tooltip content={statusReason}>\n <button\n type=\"button\"\n aria-label=\"Snapshot sync status details\"\n className=\"inline-flex text-text-secondary transition-colors hover:text-text-primary\"\n >\n <Icon name=\"info\" className=\"size-4\" />\n </button>\n </Tooltip>\n ) : null}\n {entry.snapshotSyncStatus.status === 'failed' ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n handleRetry(provider);\n }}\n >\n Retry\n </Button>\n ) : null}\n <Button\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(provider);\n }}\n >\n Update\n </Button>\n\n {sandboxCatalog.deleteSandboxProvider ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-text-secondary\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n handleRemove(provider);\n }}\n >\n Remove\n </Button>\n ) : null}\n </div>\n </article>\n );\n })}\n </div>\n </section>\n ) : null}\n\n {!hasConfiguredProvider ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Available · {availableEntries.length}\n </h4>\n {availableEntries.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {catalog.length > 0\n ? 'All catalog providers are configured.'\n : 'No sandbox providers in the catalog.'}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {availableEntries.map(entry => (\n <article\n key={entry.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"cube\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{entry.name}</h5>\n </div>\n </div>\n\n <Button\n variant=\"secondary\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setUpdateProvider(null);\n setCreateEntry(entry);\n }}\n >\n Configure\n </Button>\n </article>\n ))}\n </div>\n )}\n </section>\n ) : null}\n </div>\n )}\n </div>\n\n <ConfigureSandboxForm\n open={formOpen}\n onOpenChange={open => {\n if (!open) {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(null);\n }\n }}\n onSave={isUpdate ? handleUpdate : handleCreate}\n title={formTitle}\n description={\n isUpdate\n ? 'Update this sandbox provider. Leave API key blank to keep the existing key.'\n : 'Configure this sandbox provider. API key is never stored in the catalog.'\n }\n initialConfig={formInitialConfig}\n requireApiKey={!isUpdate}\n busy={busy}\n error={formError}\n />\n </>\n );\n};\n\nexport default SandboxSettings;\n","'use client';\n\nimport { useEffect, useState, type FormEvent } from 'react';\n\nimport { cn } from '../../atoms/lib/cn.js';\nimport { auiInputClass } from '../../atoms/lib/inputClasses.js';\nimport { Accordion, AccordionDetails, AccordionSummary } from '../../atoms/primitives/Accordion.js';\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { CenteredModal } from '../../atoms/primitives/CenteredModal.js';\nimport { Icon } from '../../icons/Icon.js';\nimport type { SandboxProviderConfig } from '../../server/types.js';\n\nexport type SandboxConfigDraft = SandboxProviderConfig & {\n apiKey: string;\n};\n\ntype ConfigureSandboxFormProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSave: (draft: SandboxConfigDraft) => void | Promise<void>;\n title: string;\n description?: string;\n /** Prefills config fields; apiKey is never autofilled. */\n initialConfig?: SandboxProviderConfig | null;\n /** When false (updates), empty apiKey means keep the existing key. */\n requireApiKey?: boolean;\n busy?: boolean;\n error?: string | null;\n};\n\n/** Sensible defaults so the advanced fields are never blank, even without a catalog preset. */\nconst EMPTY_CONFIG: SandboxProviderConfig = {\n // Snapshot/image is release-owned now; kept only to satisfy the external SandboxProviderConfig type.\n execTimeoutMs: 300000,\n autoStopIntervalInMinutes: 15,\n autoArchiveIntervalInMinutes: 10080,\n autoDeleteIntervalInMinutes: 43200,\n};\n\nconst inputClassName = auiInputClass('h-11 shadow-sm');\n\nfunction parseNonNegInt(raw: string): number | null {\n if (raw.trim() === '') return null;\n const n = Number(raw);\n if (!Number.isFinite(n) || n < 0) return null;\n return n;\n}\n\nconst ConfigureSandboxForm = ({\n open,\n onOpenChange,\n onSave,\n title,\n description,\n initialConfig = null,\n requireApiKey = true,\n busy = false,\n error,\n}: ConfigureSandboxFormProps) => {\n const [execTimeoutMs, setExecTimeoutMs] = useState('');\n const [autoStopIntervalInMinutes, setAutoStopIntervalInMinutes] = useState('');\n const [autoArchiveIntervalInMinutes, setAutoArchiveIntervalInMinutes] = useState('');\n const [autoDeleteIntervalInMinutes, setAutoDeleteIntervalInMinutes] = useState('');\n const [apiKey, setApiKey] = useState('');\n const [advancedOpen, setAdvancedOpen] = useState(false);\n\n const resetForm = () => {\n setExecTimeoutMs('');\n setAutoStopIntervalInMinutes('');\n setAutoArchiveIntervalInMinutes('');\n setAutoDeleteIntervalInMinutes('');\n setApiKey('');\n setAdvancedOpen(false);\n };\n\n useEffect(() => {\n if (!open) return;\n const config = initialConfig ?? EMPTY_CONFIG;\n setExecTimeoutMs(String(config.execTimeoutMs));\n setAutoStopIntervalInMinutes(String(config.autoStopIntervalInMinutes));\n setAutoArchiveIntervalInMinutes(String(config.autoArchiveIntervalInMinutes));\n setAutoDeleteIntervalInMinutes(String(config.autoDeleteIntervalInMinutes));\n setApiKey('');\n setAdvancedOpen(false);\n }, [open, initialConfig]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) resetForm();\n onOpenChange(nextOpen);\n };\n\n const execTimeout = parseNonNegInt(execTimeoutMs);\n const autoStop = parseNonNegInt(autoStopIntervalInMinutes);\n const autoArchive = parseNonNegInt(autoArchiveIntervalInMinutes);\n const autoDelete = parseNonNegInt(autoDeleteIntervalInMinutes);\n const trimmedKey = apiKey.trim();\n\n const isValid =\n (!requireApiKey || !!trimmedKey) &&\n execTimeout != null &&\n autoStop != null &&\n autoArchive != null &&\n autoDelete != null;\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!isValid || busy || execTimeout == null || autoStop == null || autoArchive == null || autoDelete == null) {\n return;\n }\n\n try {\n await onSave({\n // Snapshot/image is release-owned; the field is retained only for the external type.\n execTimeoutMs: execTimeout,\n autoStopIntervalInMinutes: autoStop,\n autoArchiveIntervalInMinutes: autoArchive,\n autoDeleteIntervalInMinutes: autoDelete,\n apiKey: trimmedKey,\n });\n resetForm();\n onOpenChange(false);\n } catch {\n // Parent surfaces error; keep form open.\n }\n };\n\n return (\n <CenteredModal\n open={open}\n onOpenChange={handleOpenChange}\n title={title}\n description={description}\n contentSized\n headerIcon={\n <span\n className=\"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"cube\" className=\"size-6\" />\n </span>\n }\n >\n <form className=\"flex flex-col overflow-y-auto p-5 md:p-6\" onSubmit={handleSubmit}>\n <div className=\"space-y-4\">\n <div>\n <label htmlFor=\"sandbox-api-key\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n API key\n {!requireApiKey ? <span className=\"font-normal text-text-secondary\"> (optional)</span> : null}\n </label>\n <input\n id=\"sandbox-api-key\"\n type=\"password\"\n required={requireApiKey}\n value={apiKey}\n onChange={event => {\n setApiKey(event.target.value);\n }}\n placeholder={requireApiKey ? 'dtn_...' : 'Leave blank to keep existing'}\n autoFocus\n className={inputClassName}\n />\n </div>\n\n <Accordion\n expanded={advancedOpen}\n onChange={(_event, next) => setAdvancedOpen(next)}\n className=\"rounded-md border border-border\"\n >\n <AccordionSummary className=\"px-3 py-2.5\">\n <span className=\"flex w-full items-center justify-between text-sm font-medium text-text-primary\">\n Advanced settings\n <Icon\n name=\"chevron-down\"\n className={cn(\n 'size-4 shrink-0 text-text-secondary transition-transform duration-200',\n advancedOpen ? 'rotate-0' : '-rotate-90',\n )}\n />\n </span>\n </AccordionSummary>\n <AccordionDetails className=\"space-y-4 border-t border-border px-3 pb-3 pt-4\">\n <div>\n <label htmlFor=\"sandbox-exec-timeout\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Exec timeout (ms)\n </label>\n <input\n id=\"sandbox-exec-timeout\"\n type=\"number\"\n min={0}\n required\n value={execTimeoutMs}\n onChange={event => {\n setExecTimeoutMs(event.target.value);\n }}\n placeholder=\"300000\"\n className={inputClassName}\n />\n </div>\n\n <div>\n <label htmlFor=\"sandbox-auto-stop\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Auto-stop interval (minutes)\n </label>\n <input\n id=\"sandbox-auto-stop\"\n type=\"number\"\n min={0}\n required\n value={autoStopIntervalInMinutes}\n onChange={event => {\n setAutoStopIntervalInMinutes(event.target.value);\n }}\n placeholder=\"15\"\n className={inputClassName}\n />\n </div>\n\n <div>\n <label htmlFor=\"sandbox-auto-archive\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Auto-archive interval (minutes)\n </label>\n <input\n id=\"sandbox-auto-archive\"\n type=\"number\"\n min={0}\n required\n value={autoArchiveIntervalInMinutes}\n onChange={event => {\n setAutoArchiveIntervalInMinutes(event.target.value);\n }}\n placeholder=\"10080\"\n className={inputClassName}\n />\n </div>\n\n <div>\n <label htmlFor=\"sandbox-auto-delete\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Auto-delete interval (minutes)\n </label>\n <input\n id=\"sandbox-auto-delete\"\n type=\"number\"\n min={0}\n required\n value={autoDeleteIntervalInMinutes}\n onChange={event => {\n setAutoDeleteIntervalInMinutes(event.target.value);\n }}\n placeholder=\"43200\"\n className={inputClassName}\n />\n </div>\n </AccordionDetails>\n </Accordion>\n </div>\n\n <div className=\"mt-6 space-y-3\">\n {error ? <p className=\"text-failure-bg text-sm\">{error}</p> : null}\n <Button type=\"submit\" size=\"lg\" disabled={!isValid || busy} className=\"w-full shrink-0\">\n Save\n </Button>\n </div>\n </form>\n </CenteredModal>\n );\n};\n\nexport default ConfigureSandboxForm;\n"],"mappings":"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","names":["useEffect","useState","jsx","jsxs","useState","useEffect"]}
@@ -8,18 +8,18 @@ import {
8
8
  useOptionalCatalogServer,
9
9
  useOptionalRefreshServerCapabilities,
10
10
  useShellMode
11
- } from "./chunk-U5GBGEGN.js";
11
+ } from "./chunk-XAZ5HJXV.js";
12
12
  import {
13
13
  cn
14
- } from "./chunk-WMRZSULD.js";
14
+ } from "./chunk-DTF7ZMUJ.js";
15
15
 
16
16
  // src/containers/SettingsBuilder/index.tsx
17
17
  import { lazy, Suspense, useCallback, useEffect, useMemo } from "react";
18
18
  import { jsx, jsxs } from "react/jsx-runtime";
19
- var ModelSettings = lazy(() => import("./ModelSettings-LKFJVUYQ.js"));
20
- var ConnectorSettings = lazy(() => import("./ConnectorSettings-ADACLWQI.js"));
21
- var SkillSettings = lazy(() => import("./SkillSettings-4VB42CVG.js"));
22
- var SandboxSettings = lazy(() => import("./SandboxSettings-H5MDAE47.js"));
19
+ var ModelSettings = lazy(() => import("./ModelSettings-QJMYHCMD.js"));
20
+ var ConnectorSettings = lazy(() => import("./ConnectorSettings-H37ZFC6Z.js"));
21
+ var SkillSettings = lazy(() => import("./SkillSettings-IRMGDFRG.js"));
22
+ var SandboxSettings = lazy(() => import("./SandboxSettings-BUBMLW7Q.js"));
23
23
  function SettingsSectionFallback() {
24
24
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-1 items-center justify-center py-8", role: "status", "aria-live": "polite", "aria-busy": "true", children: [
25
25
  /* @__PURE__ */ jsx(Spinner, { size: 20, className: "text-text-secondary" }),
@@ -133,4 +133,4 @@ var SettingsBuilder_default = TruefoundrySettingsBuilder;
133
133
  export {
134
134
  SettingsBuilder_default as default
135
135
  };
136
- //# sourceMappingURL=SettingsBuilder-3JOLC56Z.js.map
136
+ //# sourceMappingURL=SettingsBuilder-26XSGIHK.js.map
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  NamedAgentHeaderLabel,
4
4
  ShellActions
5
- } from "./chunk-VJTCFZNM.js";
5
+ } from "./chunk-LRQHHZDX.js";
6
6
  import {
7
7
  Thread,
8
8
  ThreadListContainer
9
- } from "./chunk-3PTFNAQK.js";
9
+ } from "./chunk-H7DR64W3.js";
10
10
  import {
11
11
  useAui
12
12
  } from "./chunk-M6MHLVSO.js";
@@ -14,22 +14,22 @@ import {
14
14
  useBrandName,
15
15
  useChatHeaderContentVisible,
16
16
  useSlot
17
- } from "./chunk-Z27F4LBZ.js";
17
+ } from "./chunk-QGNLP2EE.js";
18
18
  import {
19
19
  Icon,
20
20
  Spinner,
21
21
  auiButtonClass,
22
22
  useOptionalShellMode
23
- } from "./chunk-U5GBGEGN.js";
24
- import "./chunk-FDBJNXH2.js";
23
+ } from "./chunk-XAZ5HJXV.js";
24
+ import "./chunk-HT5HKQXE.js";
25
25
  import {
26
26
  cn
27
- } from "./chunk-WMRZSULD.js";
27
+ } from "./chunk-DTF7ZMUJ.js";
28
28
 
29
29
  // src/layouts/SidebarLayout.tsx
30
30
  import { lazy, Suspense, useEffect, useRef, useState } from "react";
31
31
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
32
- var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-3JOLC56Z.js"));
32
+ var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-26XSGIHK.js"));
33
33
  var desktopCollapsed = false;
34
34
  function SidebarLayout({ className }) {
35
35
  const aui = useAui();
@@ -233,4 +233,4 @@ function SidebarLayout({ className }) {
233
233
  export {
234
234
  SidebarLayout
235
235
  };
236
- //# sourceMappingURL=SidebarLayout-G6BGD7EY.js.map
236
+ //# sourceMappingURL=SidebarLayout-F3XFXW7B.js.map
@@ -5,14 +5,14 @@ import {
5
5
  SearchInput_default,
6
6
  auiInputClass,
7
7
  useToasterOptional
8
- } from "./chunk-Z27F4LBZ.js";
8
+ } from "./chunk-QGNLP2EE.js";
9
9
  import {
10
10
  Icon,
11
11
  getErrorMessage,
12
12
  useCatalogServer
13
- } from "./chunk-U5GBGEGN.js";
14
- import "./chunk-FDBJNXH2.js";
15
- import "./chunk-WMRZSULD.js";
13
+ } from "./chunk-XAZ5HJXV.js";
14
+ import "./chunk-HT5HKQXE.js";
15
+ import "./chunk-DTF7ZMUJ.js";
16
16
 
17
17
  // src/containers/SettingsBuilder/SkillSettings.tsx
18
18
  import { useCallback, useEffect, useMemo, useState as useState2 } from "react";
@@ -386,4 +386,4 @@ var SkillSettings_default = SkillSettings;
386
386
  export {
387
387
  SkillSettings_default as default
388
388
  };
389
- //# sourceMappingURL=SkillSettings-4VB42CVG.js.map
389
+ //# sourceMappingURL=SkillSettings-IRMGDFRG.js.map
@@ -1,22 +1,22 @@
1
1
  "use client";
2
2
  import {
3
3
  StackChatPanel
4
- } from "./chunk-EFGSH3MO.js";
5
- import "./chunk-VJTCFZNM.js";
6
- import "./chunk-3PTFNAQK.js";
4
+ } from "./chunk-7EEOWDLE.js";
5
+ import "./chunk-LRQHHZDX.js";
6
+ import "./chunk-H7DR64W3.js";
7
7
  import "./chunk-M6MHLVSO.js";
8
8
  import {
9
9
  useSlot
10
- } from "./chunk-Z27F4LBZ.js";
10
+ } from "./chunk-QGNLP2EE.js";
11
11
  import {
12
12
  CompactLayoutProvider,
13
13
  Icon,
14
14
  auiButtonClass
15
- } from "./chunk-U5GBGEGN.js";
16
- import "./chunk-FDBJNXH2.js";
15
+ } from "./chunk-XAZ5HJXV.js";
16
+ import "./chunk-HT5HKQXE.js";
17
17
  import {
18
18
  cn
19
- } from "./chunk-WMRZSULD.js";
19
+ } from "./chunk-DTF7ZMUJ.js";
20
20
 
21
21
  // src/layouts/WidgetLayout.tsx
22
22
  import { useEffect, useRef, useState } from "react";
@@ -98,4 +98,4 @@ function WidgetLayout({ className }) {
98
98
  export {
99
99
  WidgetLayout
100
100
  };
101
- //# sourceMappingURL=WidgetLayout-ABSXZUSQ.js.map
101
+ //# sourceMappingURL=WidgetLayout-SZMABKIR.js.map
@@ -1,31 +1,31 @@
1
1
  import {
2
2
  NamedAgentHeaderLabel,
3
3
  ShellActions
4
- } from "./chunk-VJTCFZNM.js";
4
+ } from "./chunk-LRQHHZDX.js";
5
5
  import {
6
6
  Thread,
7
7
  ThreadListContainer
8
- } from "./chunk-3PTFNAQK.js";
8
+ } from "./chunk-H7DR64W3.js";
9
9
  import {
10
10
  useAui
11
11
  } from "./chunk-M6MHLVSO.js";
12
12
  import {
13
13
  useSlot
14
- } from "./chunk-Z27F4LBZ.js";
14
+ } from "./chunk-QGNLP2EE.js";
15
15
  import {
16
16
  Icon,
17
17
  Spinner,
18
18
  auiButtonClass,
19
19
  useOptionalShellMode
20
- } from "./chunk-U5GBGEGN.js";
20
+ } from "./chunk-XAZ5HJXV.js";
21
21
  import {
22
22
  cn
23
- } from "./chunk-WMRZSULD.js";
23
+ } from "./chunk-DTF7ZMUJ.js";
24
24
 
25
25
  // src/layouts/StackChatPanel.tsx
26
26
  import { lazy, Suspense, useEffect, useState } from "react";
27
27
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
28
- var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-3JOLC56Z.js"));
28
+ var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-26XSGIHK.js"));
29
29
  function StackChatPanel({ className, threadHeaderEnd }) {
30
30
  const [view, setView] = useState("thread");
31
31
  const aui = useAui();
@@ -86,4 +86,4 @@ function StackChatPanel({ className, threadHeaderEnd }) {
86
86
  export {
87
87
  StackChatPanel
88
88
  };
89
- //# sourceMappingURL=chunk-EFGSH3MO.js.map
89
+ //# sourceMappingURL=chunk-7EEOWDLE.js.map