@loopstack/loopstack-studio 0.22.0 → 0.23.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.
Files changed (82) hide show
  1. package/dist/app/EnvironmentEmbedRoot.js +20 -18
  2. package/dist/components/feedback/ErrorBoundary.js +43 -0
  3. package/dist/components/{LoadingCentered.js → feedback/LoadingCentered.js} +1 -1
  4. package/dist/components/feedback/index.js +5 -0
  5. package/dist/components/index.js +6 -3
  6. package/dist/components/layout/MainLayout.js +32 -16
  7. package/dist/components/layout/StudioSidebar.js +165 -0
  8. package/dist/components/ui-widgets/widgets/SandboxRun.js +1 -0
  9. package/dist/features/code-explorer/CodeExplorer.js +6 -0
  10. package/dist/features/code-explorer/components/CodeExplorerTree.js +5 -0
  11. package/dist/features/code-explorer/components/CodeExplorerTreeNode.js +6 -0
  12. package/dist/features/code-explorer/components/FileContentViewer.js +1 -0
  13. package/dist/features/code-explorer/components/FileTabsBar.js +1 -1
  14. package/dist/features/code-explorer/index.js +4 -0
  15. package/dist/features/debug/components/ConfigFlowViewer.js +1 -1
  16. package/dist/features/debug/components/PipelineFlowViewer.js +1 -1
  17. package/dist/features/debug/index.js +3 -0
  18. package/dist/features/documents/DocumentRenderer.js +53 -0
  19. package/dist/features/{workbench → documents}/components/DocumentItem.js +1 -1
  20. package/dist/features/{workbench → documents}/components/DocumentMetadataPills.js +2 -2
  21. package/dist/features/{workbench/components → documents}/document-details/DocumentDetails.js +3 -3
  22. package/dist/features/{workbench/components → documents}/document-details/PromptDetails.js +3 -3
  23. package/dist/features/documents/index.js +4 -0
  24. package/dist/features/{workbench/components/document-renderer → documents/renderers}/AiMessage.js +5 -5
  25. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentDebugRenderer.js +1 -1
  26. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentFormRenderer.js +3 -3
  27. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentMessageRenderer.js +1 -1
  28. package/dist/features/{workbench/components/document-renderer → documents/renderers}/ErrorMessageRenderer.js +1 -1
  29. package/dist/features/{workbench/components/document-renderer → documents/renderers}/LinkMessageRenderer.js +1 -1
  30. package/dist/features/{workbench/components/document-renderer → documents/renderers}/MarkdownMessageRenderer.js +2 -2
  31. package/dist/features/{workbench/components/document-renderer → documents/renderers}/PlainMessageRenderer.js +1 -1
  32. package/dist/features/health/index.js +1 -0
  33. package/dist/features/workbench/NavigationItems.js +29 -29
  34. package/dist/features/workbench/Workbench.js +57 -69
  35. package/dist/features/workbench/WorkflowItem.js +63 -55
  36. package/dist/features/workbench/WorkflowList.js +52 -81
  37. package/dist/features/workbench/components/NewRunDialog.js +2 -1
  38. package/dist/features/workbench/components/WorkbenchFlowPanel.js +5 -4
  39. package/dist/features/workbench/components/WorkflowHistoryItem.js +11 -11
  40. package/dist/features/workbench/components/buttons/WorkflowButtons.js +49 -50
  41. package/dist/features/workbench/hooks/useWorkflowData.js +49 -0
  42. package/dist/features/workbench/hooks/useWorkflowListState.js +50 -0
  43. package/dist/features/workbench/index.js +8 -0
  44. package/dist/features/workbench/providers/WorkbenchLayoutProvider.js +2 -3
  45. package/dist/features/workspaces/components/CreateWorkspace.js +1 -1
  46. package/dist/features/workspaces/components/ExecutionTimeline.js +1 -1
  47. package/dist/features/workspaces/components/PipelineForm.js +1 -1
  48. package/dist/features/workspaces/index.js +3 -0
  49. package/dist/hooks/index.js +3 -2
  50. package/dist/hooks/query-keys.js +138 -0
  51. package/dist/hooks/useAuth.js +43 -42
  52. package/dist/hooks/useConfig.js +31 -35
  53. package/dist/hooks/useDashboard.js +9 -13
  54. package/dist/hooks/useDebounce.js +8 -17
  55. package/dist/hooks/useDocuments.js +4 -9
  56. package/dist/hooks/useFiles.js +31 -39
  57. package/dist/hooks/useNamespaces.js +2 -8
  58. package/dist/hooks/usePipelines.js +132 -155
  59. package/dist/hooks/useProcessor.js +11 -14
  60. package/dist/hooks/useWorkflows.js +40 -62
  61. package/dist/hooks/useWorkspaces.js +105 -110
  62. package/dist/index.d.ts +99 -3
  63. package/dist/index.js +14 -7
  64. package/dist/pages/DashboardPage.js +1 -1
  65. package/dist/pages/DebugWorkflowDetailsPage.js +2 -2
  66. package/dist/pages/EmbedWorkbenchPage.js +4 -3
  67. package/dist/pages/PipelineDebugPage.js +6 -5
  68. package/dist/pages/PreviewWorkbenchPage.js +121 -118
  69. package/dist/pages/RunsListPage.js +52 -24
  70. package/dist/pages/StudioLandingPage.js +1 -0
  71. package/dist/pages/WorkbenchPage.js +3 -2
  72. package/dist/pages/WorkspacePage.js +1 -1
  73. package/dist/providers/InvalidationEventsProvider.js +9 -11
  74. package/dist/providers/StudioProvider.js +2 -2
  75. package/dist/routing/LocalRouter.js +12 -8
  76. package/package.json +1 -1
  77. package/dist/features/workbench/components/DocumentRenderer.js +0 -54
  78. /package/dist/components/{content → feedback}/ErrorAlert.js +0 -0
  79. /package/dist/components/{snackbars → feedback}/ErrorSnackbar.js +0 -0
  80. /package/dist/components/{snackbars → feedback}/Snackbar.js +0 -0
  81. /package/dist/features/{workbench → documents}/components/DocumentList.js +0 -0
  82. /package/dist/features/{workbench/components/document-renderer → documents/renderers}/AiMessageContent.js +0 -0
@@ -2,32 +2,34 @@ import { StudioProvider } from "../providers/StudioProvider.js";
2
2
  import { SseProvider } from "../providers/SseProvider.js";
3
3
  import { InvalidationEventsProvider } from "../providers/InvalidationEventsProvider.js";
4
4
  import { useRouter } from "../routing/LocalRouter.js";
5
+ import LocalHealthCheck_default from "../features/health/LocalHealthCheck.js";
5
6
  import { QueryProvider } from "../providers/QueryProvider.js";
6
7
  import { c } from "react/compiler-runtime";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  import { Outlet, useSearchParams } from "react-router-dom";
9
10
  function EnvironmentEmbedRoot() {
10
- let d = c(13), [f] = useSearchParams(), p;
11
- d[0] === f ? p = d[1] : (p = f.get("url") ?? "http://localhost:3080", d[0] = f, d[1] = p);
12
- let m = p, h;
13
- d[2] === f ? h = d[3] : (h = f.get("name") ?? "Preview Environment", d[2] = f, d[3] = h);
14
- let g = h, _;
15
- d[4] !== g || d[5] !== m ? (_ = {
11
+ let f = c(14), [p] = useSearchParams(), m;
12
+ f[0] === p ? m = f[1] : (m = p.get("url") ?? "http://localhost:3080", f[0] = p, f[1] = m);
13
+ let h = m, g;
14
+ f[2] === p ? g = f[3] : (g = p.get("name") ?? "Preview Environment", f[2] = p, f[3] = g);
15
+ let _ = g, v;
16
+ f[4] !== _ || f[5] !== h ? (v = {
16
17
  id: "preview-env",
17
- name: g,
18
- url: m
19
- }, d[4] = g, d[5] = m, d[6] = _) : _ = d[6];
20
- let v = _, y = useRouter(v.id), b, x, S;
21
- d[7] === Symbol.for("react.memo_cache_sentinel") ? (b = /* @__PURE__ */ jsx(SseProvider, {}), x = /* @__PURE__ */ jsx(InvalidationEventsProvider, {}), S = /* @__PURE__ */ jsx(Outlet, {}), d[7] = b, d[8] = x, d[9] = S) : (b = d[7], x = d[8], S = d[9]);
22
- let C;
23
- return d[10] !== v || d[11] !== y ? (C = /* @__PURE__ */ jsx(QueryProvider, { children: /* @__PURE__ */ jsxs(StudioProvider, {
24
- router: y,
25
- environment: v,
18
+ name: _,
19
+ url: h
20
+ }, f[4] = _, f[5] = h, f[6] = v) : v = f[6];
21
+ let y = v, b = useRouter(y.id, "/embed/env"), x, S, C, w;
22
+ f[7] === Symbol.for("react.memo_cache_sentinel") ? (x = /* @__PURE__ */ jsx(LocalHealthCheck_default, {}), S = /* @__PURE__ */ jsx(SseProvider, {}), C = /* @__PURE__ */ jsx(InvalidationEventsProvider, {}), w = /* @__PURE__ */ jsx(Outlet, {}), f[7] = x, f[8] = S, f[9] = C, f[10] = w) : (x = f[7], S = f[8], C = f[9], w = f[10]);
23
+ let T;
24
+ return f[11] !== y || f[12] !== b ? (T = /* @__PURE__ */ jsx(QueryProvider, { children: /* @__PURE__ */ jsxs(StudioProvider, {
25
+ router: b,
26
+ environment: y,
26
27
  children: [
27
- b,
28
28
  x,
29
- S
29
+ S,
30
+ C,
31
+ w
30
32
  ]
31
- }) }), d[10] = v, d[11] = y, d[12] = C) : C = d[12], C;
33
+ }) }), f[11] = y, f[12] = b, f[13] = T) : T = f[13], T;
32
34
  }
33
35
  export { EnvironmentEmbedRoot as default };
@@ -0,0 +1,43 @@
1
+ import { Button } from "../ui/button.js";
2
+ import { Alert, AlertDescription, AlertTitle } from "../ui/alert.js";
3
+ import { Component } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { AlertCircle } from "lucide-react";
6
+ var ErrorBoundary = class extends Component {
7
+ state = {
8
+ hasError: !1,
9
+ error: null
10
+ };
11
+ static getDerivedStateFromError(e) {
12
+ return {
13
+ hasError: !0,
14
+ error: e
15
+ };
16
+ }
17
+ componentDidCatch(e, c) {}
18
+ handleRetry = () => {
19
+ this.props.onRetry ? this.props.onRetry() : this.setState({
20
+ hasError: !1,
21
+ error: null
22
+ });
23
+ };
24
+ render() {
25
+ return this.state.hasError && this.state.error ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ jsxs("div", {
26
+ className: "flex min-h-[200px] flex-col items-center justify-center gap-4 p-6",
27
+ children: [/* @__PURE__ */ jsxs(Alert, {
28
+ variant: "destructive",
29
+ className: "max-w-lg",
30
+ children: [
31
+ /* @__PURE__ */ jsx(AlertCircle, { className: "h-4 w-4" }),
32
+ /* @__PURE__ */ jsx(AlertTitle, { children: "Something went wrong" }),
33
+ /* @__PURE__ */ jsxs(AlertDescription, { children: [this.state.error.message, !1] })
34
+ ]
35
+ }), /* @__PURE__ */ jsx(Button, {
36
+ onClick: this.handleRetry,
37
+ variant: "outline",
38
+ children: "Try again"
39
+ })]
40
+ }) : this.props.children;
41
+ }
42
+ };
43
+ export { ErrorBoundary };
@@ -1,4 +1,4 @@
1
- import { cn } from "../lib/utils.js";
1
+ import { cn } from "../../lib/utils.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React from "react";
4
4
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
@@ -0,0 +1,5 @@
1
+ import { ErrorBoundary } from "./ErrorBoundary.js";
2
+ import LoadingCentered_default from "./LoadingCentered.js";
3
+ import Snackbar_default from "./Snackbar.js";
4
+ import ErrorSnackbar_default from "./ErrorSnackbar.js";
5
+ import ErrorAlert_default from "./ErrorAlert.js";
@@ -40,6 +40,9 @@ import { DataList } from "./data-table/DataList.js";
40
40
  import ListView_default from "./lists/ListView.js";
41
41
  import CustomListView_default from "./lists/CustomListView.js";
42
42
  import CompletionMessagePaper_default from "./messages/CompletionMessagePaper.js";
43
- import Snackbar_default from "./snackbars/Snackbar.js";
44
- import ErrorSnackbar_default from "./snackbars/ErrorSnackbar.js";
45
- import LoadingCentered_default from "./LoadingCentered.js";
43
+ import { ErrorBoundary } from "./feedback/ErrorBoundary.js";
44
+ import LoadingCentered_default from "./feedback/LoadingCentered.js";
45
+ import Snackbar_default from "./feedback/Snackbar.js";
46
+ import ErrorSnackbar_default from "./feedback/ErrorSnackbar.js";
47
+ import ErrorAlert_default from "./feedback/ErrorAlert.js";
48
+ import "./feedback/index.js";
@@ -1,26 +1,42 @@
1
+ import { Separator } from "../ui/separator.js";
2
+ import { SidebarTrigger, useSidebar } from "../ui/sidebar.js";
1
3
  import PageBreadcrumbs_default from "../page/PageBreadcrumbs.js";
2
4
  import { c } from "react/compiler-runtime";
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
- var MainLayout_default = (i) => {
5
- let a = c(10), { children: o, breadcrumbsData: s, headerMenu: l } = i, u;
6
- a[0] === s ? u = a[1] : (u = /* @__PURE__ */ jsx(PageBreadcrumbs_default, { breadcrumbData: s }), a[0] = s, a[1] = u);
7
- let d;
8
- a[2] !== l || a[3] !== u ? (d = /* @__PURE__ */ jsxs("div", {
9
- className: "border-b flex h-12 shrink-0 items-center justify-between",
10
- children: [u, l]
11
- }), a[2] = l, a[3] = u, a[4] = d) : d = a[4];
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ var SidebarTriggerSafe = () => {
7
+ try {
8
+ return useSidebar(), /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SidebarTrigger, { className: "-ml-1" }), /* @__PURE__ */ jsx(Separator, {
9
+ orientation: "vertical",
10
+ className: "mr-2 data-[orientation=vertical]:h-4"
11
+ })] });
12
+ } catch {
13
+ return null;
14
+ }
15
+ }, MainLayout_default = (e) => {
16
+ let o = c(11), { children: s, breadcrumbsData: l, headerMenu: u } = e, d;
17
+ o[0] === Symbol.for("react.memo_cache_sentinel") ? (d = /* @__PURE__ */ jsx(SidebarTriggerSafe, {}), o[0] = d) : d = o[0];
12
18
  let f;
13
- a[5] === o ? f = a[6] : (f = /* @__PURE__ */ jsx("div", {
19
+ o[1] === l ? f = o[2] : (f = /* @__PURE__ */ jsxs("div", {
20
+ className: "flex items-center gap-2",
21
+ children: [d, /* @__PURE__ */ jsx(PageBreadcrumbs_default, { breadcrumbData: l })]
22
+ }), o[1] = l, o[2] = f);
23
+ let p;
24
+ o[3] !== u || o[4] !== f ? (p = /* @__PURE__ */ jsxs("div", {
25
+ className: "border-b flex h-12 shrink-0 items-center justify-between gap-2 px-4",
26
+ children: [f, u]
27
+ }), o[3] = u, o[4] = f, o[5] = p) : p = o[5];
28
+ let m;
29
+ o[6] === s ? m = o[7] : (m = /* @__PURE__ */ jsx("div", {
14
30
  className: "flex-1 overflow-auto p-4",
15
31
  children: /* @__PURE__ */ jsx("div", {
16
32
  className: "space-y-6",
17
- children: o
33
+ children: s
18
34
  })
19
- }), a[5] = o, a[6] = f);
20
- let p;
21
- return a[7] !== d || a[8] !== f ? (p = /* @__PURE__ */ jsxs("div", {
35
+ }), o[6] = s, o[7] = m);
36
+ let h;
37
+ return o[8] !== p || o[9] !== m ? (h = /* @__PURE__ */ jsxs("div", {
22
38
  className: "flex h-full flex-col",
23
- children: [d, f]
24
- }), a[7] = d, a[8] = f, a[9] = p) : p = a[9], p;
39
+ children: [p, m]
40
+ }), o[8] = p, o[9] = m, o[10] = h) : h = o[10], h;
25
41
  };
26
42
  export { MainLayout_default as default };
@@ -0,0 +1,165 @@
1
+ import { useStudio, useStudioOptional } from "../../providers/StudioProvider.js";
2
+ import { useFilterPipelines } from "../../hooks/usePipelines.js";
3
+ import { useComponentOverrides } from "../../providers/ComponentOverridesProvider.js";
4
+ import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarTrigger, useSidebar } from "../ui/sidebar.js";
5
+ import { c } from "react/compiler-runtime";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Link, useLocation } from "react-router-dom";
8
+ import { CircleAlert, Info, LayoutDashboard, LayoutGrid, Play, Workflow } from "lucide-react";
9
+ var DefaultSidebarHeader = () => {
10
+ let e = c(5), { state: u } = useSidebar(), d;
11
+ e[0] === u ? d = e[1] : (d = u === "expanded" && /* @__PURE__ */ jsxs("div", {
12
+ className: "flex items-center gap-2 px-1.5",
13
+ children: [/* @__PURE__ */ jsx("img", {
14
+ src: "/loopstack.svg",
15
+ alt: "Loopstack",
16
+ className: "h-6 w-6"
17
+ }), /* @__PURE__ */ jsx("span", {
18
+ className: "text-sm font-semibold",
19
+ children: "Loopstack Studio"
20
+ })]
21
+ }), e[0] = u, e[1] = d);
22
+ let f;
23
+ e[2] === Symbol.for("react.memo_cache_sentinel") ? (f = /* @__PURE__ */ jsx(SidebarTrigger, { className: "hover:cursor-pointer" }), e[2] = f) : f = e[2];
24
+ let p;
25
+ return e[3] === d ? p = e[4] : (p = /* @__PURE__ */ jsxs(SidebarHeader, {
26
+ className: "border-sidebar-border h-12 w-full flex-row items-center justify-between border-b px-1.5 py-0",
27
+ children: [d, f]
28
+ }), e[3] = d, e[4] = p), p;
29
+ }, RunsNav = () => {
30
+ let u = c(26), f = useLocation(), { router: p } = useStudio(), m = p.getRuns(), h;
31
+ u[0] === p ? h = u[1] : (h = p.getRunsActionRequired(), u[0] = p, u[1] = h);
32
+ let y = h, C;
33
+ u[2] === Symbol.for("react.memo_cache_sentinel") ? (C = {
34
+ parentId: null,
35
+ status: "paused"
36
+ }, u[2] = C) : C = u[2];
37
+ let w = useFilterPipelines(void 0, C, "createdAt", "DESC", 0, 1).data?.total ?? 0, T;
38
+ u[3] === Symbol.for("react.memo_cache_sentinel") ? (T = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Runs" }), u[3] = T) : T = u[3];
39
+ let E = f.pathname === m || f.pathname === m + "/", D, O;
40
+ u[4] === Symbol.for("react.memo_cache_sentinel") ? (D = /* @__PURE__ */ jsx(Play, {}), O = /* @__PURE__ */ jsx("span", { children: "Overview" }), u[4] = D, u[5] = O) : (D = u[4], O = u[5]);
41
+ let k;
42
+ u[6] === m ? k = u[7] : (k = /* @__PURE__ */ jsxs(Link, {
43
+ to: m,
44
+ children: [D, O]
45
+ }), u[6] = m, u[7] = k);
46
+ let A;
47
+ u[8] !== E || u[9] !== k ? (A = /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
48
+ asChild: !0,
49
+ isActive: E,
50
+ tooltip: "Overview",
51
+ children: k
52
+ }) }), u[8] = E, u[9] = k, u[10] = A) : A = u[10];
53
+ let j = f.pathname === y, M, N;
54
+ u[11] === Symbol.for("react.memo_cache_sentinel") ? (N = /* @__PURE__ */ jsx(CircleAlert, {}), M = /* @__PURE__ */ jsx("span", { children: "Action Required" }), u[11] = M, u[12] = N) : (M = u[11], N = u[12]);
55
+ let P;
56
+ u[13] === y ? P = u[14] : (P = /* @__PURE__ */ jsxs(Link, {
57
+ to: y,
58
+ children: [N, M]
59
+ }), u[13] = y, u[14] = P);
60
+ let F;
61
+ u[15] !== P || u[16] !== j ? (F = /* @__PURE__ */ jsx(SidebarMenuButton, {
62
+ asChild: !0,
63
+ isActive: j,
64
+ tooltip: "Action Required",
65
+ children: P
66
+ }), u[15] = P, u[16] = j, u[17] = F) : F = u[17];
67
+ let I;
68
+ u[18] === w ? I = u[19] : (I = w > 0 && /* @__PURE__ */ jsx(SidebarMenuBadge, { children: w }), u[18] = w, u[19] = I);
69
+ let L;
70
+ u[20] !== F || u[21] !== I ? (L = /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [F, I] }), u[20] = F, u[21] = I, u[22] = L) : L = u[22];
71
+ let R;
72
+ return u[23] !== L || u[24] !== A ? (R = /* @__PURE__ */ jsxs(SidebarGroup, { children: [T, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsxs(SidebarMenu, { children: [A, L] }) })] }), u[23] = L, u[24] = A, u[25] = R) : R = u[25], R;
73
+ }, WorkspacesNav = () => {
74
+ let u = c(11), d = useLocation(), { router: f } = useStudio(), p = f.getWorkspaces(), m;
75
+ u[0] === Symbol.for("react.memo_cache_sentinel") ? (m = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Workspaces" }), u[0] = m) : m = u[0];
76
+ let h;
77
+ u[1] !== d.pathname || u[2] !== p ? (h = d.pathname === p || d.pathname.startsWith(p + "/"), u[1] = d.pathname, u[2] = p, u[3] = h) : h = u[3];
78
+ let y, x;
79
+ u[4] === Symbol.for("react.memo_cache_sentinel") ? (y = /* @__PURE__ */ jsx(LayoutGrid, {}), x = /* @__PURE__ */ jsx("span", { children: "My Workspaces" }), u[4] = y, u[5] = x) : (y = u[4], x = u[5]);
80
+ let C;
81
+ u[6] === p ? C = u[7] : (C = /* @__PURE__ */ jsxs(Link, {
82
+ to: p,
83
+ children: [y, x]
84
+ }), u[6] = p, u[7] = C);
85
+ let w;
86
+ return u[8] !== h || u[9] !== C ? (w = /* @__PURE__ */ jsxs(SidebarGroup, { children: [m, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
87
+ asChild: !0,
88
+ isActive: h,
89
+ tooltip: "My Workspaces",
90
+ children: C
91
+ }) }) }) })] }), u[8] = h, u[9] = C, u[10] = w) : w = u[10], w;
92
+ }, InsightsNav = () => {
93
+ let u = c(15), d = useLocation(), { router: f } = useStudio(), p;
94
+ u[0] === f ? p = u[1] : (p = f.getDashboard(), u[0] = f, u[1] = p);
95
+ let m;
96
+ u[2] === p ? m = u[3] : (m = {
97
+ label: "Dashboard",
98
+ href: p,
99
+ icon: LayoutDashboard
100
+ }, u[2] = p, u[3] = m);
101
+ let h;
102
+ u[4] === f ? h = u[5] : (h = f.getDebugWorkflows(), u[4] = f, u[5] = h);
103
+ let y;
104
+ u[6] === h ? y = u[7] : (y = {
105
+ label: "Workflows",
106
+ href: h,
107
+ icon: Workflow
108
+ }, u[6] = h, u[7] = y);
109
+ let x;
110
+ u[8] !== m || u[9] !== y ? (x = [m, y], u[8] = m, u[9] = y, u[10] = x) : x = u[10];
111
+ let C = x, w;
112
+ u[11] === Symbol.for("react.memo_cache_sentinel") ? (w = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Insights" }), u[11] = w) : w = u[11];
113
+ let T;
114
+ return u[12] !== d || u[13] !== C ? (T = /* @__PURE__ */ jsxs(SidebarGroup, { children: [w, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: C.map((e) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
115
+ asChild: !0,
116
+ isActive: d.pathname === e.href,
117
+ tooltip: e.label,
118
+ children: /* @__PURE__ */ jsxs(Link, {
119
+ to: e.href,
120
+ children: [/* @__PURE__ */ jsx(e.icon, {}), /* @__PURE__ */ jsx("span", { children: e.label })]
121
+ })
122
+ }) }, e.href)) }) })] }), u[12] = d, u[13] = C, u[14] = T) : T = u[14], T;
123
+ }, DefaultSidebarFooter = () => {
124
+ let u = c(9), d = useLocation(), { router: f } = useStudio(), p;
125
+ u[0] === f ? p = u[1] : (p = f.getEnvironmentInfo(), u[0] = f, u[1] = p);
126
+ let m = p, g = d.pathname === m, _, v;
127
+ u[2] === Symbol.for("react.memo_cache_sentinel") ? (_ = /* @__PURE__ */ jsx(Info, {}), v = /* @__PURE__ */ jsx("span", { children: "Info" }), u[2] = _, u[3] = v) : (_ = u[2], v = u[3]);
128
+ let y;
129
+ u[4] === m ? y = u[5] : (y = /* @__PURE__ */ jsxs(Link, {
130
+ to: m,
131
+ children: [_, v]
132
+ }), u[4] = m, u[5] = y);
133
+ let x;
134
+ return u[6] !== g || u[7] !== y ? (x = /* @__PURE__ */ jsx(SidebarFooter, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
135
+ asChild: !0,
136
+ isActive: g,
137
+ size: "sm",
138
+ tooltip: "Info",
139
+ children: y
140
+ }) }) }) }), u[6] = g, u[7] = y, u[8] = x) : x = u[8], x;
141
+ };
142
+ const StudioSidebar = () => {
143
+ let e = c(13), d = useComponentOverrides(), h = useStudioOptional(), g = d.SidebarHeader ?? DefaultSidebarHeader, _ = d.SidebarFooter ?? DefaultSidebarFooter, v;
144
+ e[0] === g ? v = e[1] : (v = /* @__PURE__ */ jsx(g, {}), e[0] = g, e[1] = v);
145
+ let y;
146
+ e[2] === h ? y = e[3] : (y = h && /* @__PURE__ */ jsxs(Fragment, { children: [
147
+ /* @__PURE__ */ jsx(RunsNav, {}),
148
+ /* @__PURE__ */ jsx(WorkspacesNav, {}),
149
+ /* @__PURE__ */ jsx(InsightsNav, {})
150
+ ] }), e[2] = h, e[3] = y);
151
+ let b;
152
+ e[4] === y ? b = e[5] : (b = /* @__PURE__ */ jsx(SidebarContent, { children: y }), e[4] = y, e[5] = b);
153
+ let x;
154
+ e[6] !== _ || e[7] !== h ? (x = h && /* @__PURE__ */ jsx(_, {}), e[6] = _, e[7] = h, e[8] = x) : x = e[8];
155
+ let S;
156
+ return e[9] !== v || e[10] !== b || e[11] !== x ? (S = /* @__PURE__ */ jsxs(Sidebar, {
157
+ collapsible: "icon",
158
+ children: [
159
+ v,
160
+ b,
161
+ x
162
+ ]
163
+ }), e[9] = v, e[10] = b, e[11] = x, e[12] = S) : S = e[12], S;
164
+ };
165
+ export { StudioSidebar };
@@ -1,6 +1,7 @@
1
1
  import { Button } from "../../ui/button.js";
2
2
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../ui/tooltip.js";
3
3
  import { useWorkbenchLayout } from "../../../features/workbench/providers/WorkbenchLayoutProvider.js";
4
+ import "../../../features/workbench/index.js";
4
5
  import { c } from "react/compiler-runtime";
5
6
  import React from "react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,6 @@
1
+ import "../../lib/utils.js";
2
+ import "../../components/ui/input.js";
3
+ import "./providers/CodeExplorerProvider.js";
4
+ import "./components/CodeExplorerTree.js";
5
+ import { c } from "react/compiler-runtime";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,5 @@
1
+ import "../../../components/ui/scroll-area.js";
2
+ import "../providers/CodeExplorerProvider.js";
3
+ import "./CodeExplorerTreeNode.js";
4
+ import { useMemo } from "react";
5
+ import { jsx } from "react/jsx-runtime";
@@ -0,0 +1,6 @@
1
+ import "../../../lib/utils.js";
2
+ import "../../../components/ui/button.js";
3
+ import "../../../components/ui/collapsible.js";
4
+ import "../utils/fileIcons.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { ChevronDown, ChevronRight, X } from "lucide-react";
@@ -4,6 +4,7 @@ import MarkdownContent_default from "../../../components/dynamic-form/MarkdownCo
4
4
  import { ReactFlowProvider } from "../../../node_modules/@xyflow/react/dist/esm/index.js";
5
5
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../../components/ui/tabs.js";
6
6
  import ConfigFlowViewer_default from "../../debug/components/ConfigFlowViewer.js";
7
+ import "../../debug/index.js";
7
8
  import { c } from "react/compiler-runtime";
8
9
  import { jsx, jsxs } from "react/jsx-runtime";
9
10
  import { Loader2 } from "lucide-react";
@@ -2,9 +2,9 @@ import { cn } from "../../../lib/utils.js";
2
2
  import { Button } from "../../../components/ui/button.js";
3
3
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "../../../components/ui/dropdown-menu.js";
4
4
  import { ScrollArea, ScrollBar } from "../../../components/ui/scroll-area.js";
5
- import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger } from "../../../components/ui/context-menu.js";
6
5
  import { useCodeExplorerContext } from "../providers/CodeExplorerProvider.js";
7
6
  import { getFileIcon } from "../utils/fileIcons.js";
7
+ import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger } from "../../../components/ui/context-menu.js";
8
8
  import { c } from "react/compiler-runtime";
9
9
  import { useEffect, useRef } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,4 @@
1
+ import { CodeExplorerProvider, useCodeExplorerContext } from "./providers/CodeExplorerProvider.js";
2
+ import "./CodeExplorer.js";
3
+ import { FileContentViewer } from "./components/FileContentViewer.js";
4
+ import { FileTabsBar } from "./components/FileTabsBar.js";
@@ -1,7 +1,7 @@
1
1
  import { Background, BackgroundVariant, Controls, index, useEdgesState, useNodesState, useReactFlow } from "../../../node_modules/@xyflow/react/dist/esm/index.js";
2
2
  /* empty css */
3
- import { buildWorkflowGraph } from "../lib/flow-utils.js";
4
3
  import StateNode_default from "./pipeline-flow/StateNode.js";
4
+ import { buildWorkflowGraph } from "../lib/flow-utils.js";
5
5
  import WorkflowTransitionEdge_default from "./pipeline-flow/WorkflowTransitionEdge.js";
6
6
  import { c } from "react/compiler-runtime";
7
7
  import React, { useEffect, useRef } from "react";
@@ -2,8 +2,8 @@ import { usePipeline } from "../../../hooks/usePipelines.js";
2
2
  import { Background, BackgroundVariant, Controls, index, useEdgesState, useNodesState, useReactFlow } from "../../../node_modules/@xyflow/react/dist/esm/index.js";
3
3
  /* empty css */
4
4
  import StateNode_default from "./pipeline-flow/StateNode.js";
5
- import WorkflowTransitionEdge_default from "./pipeline-flow/WorkflowTransitionEdge.js";
6
5
  import WorkflowGraph_default from "./pipeline-flow/WorkflowGraph.js";
6
+ import WorkflowTransitionEdge_default from "./pipeline-flow/WorkflowTransitionEdge.js";
7
7
  import { c } from "react/compiler-runtime";
8
8
  import React, { useCallback, useEffect, useRef, useState } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,3 @@
1
+ import PipelineFlowViewer_default from "./components/PipelineFlowViewer.js";
2
+ import PipelineDebugHeader_default from "./components/PipelineDebugHeader.js";
3
+ import ConfigFlowViewer_default from "./components/ConfigFlowViewer.js";
@@ -0,0 +1,53 @@
1
+ import CompletionMessagePaper_default from "../../components/messages/CompletionMessagePaper.js";
2
+ import OAuthPromptRenderer_default from "../oauth/OAuthPromptRenderer.js";
3
+ import "../oauth/index.js";
4
+ import AiMessage_default from "./renderers/AiMessage.js";
5
+ import DocumentDebugRenderer_default from "./renderers/DocumentDebugRenderer.js";
6
+ import DocumentFormRenderer_default from "./renderers/DocumentFormRenderer.js";
7
+ import DocumentMessageRenderer_default from "./renderers/DocumentMessageRenderer.js";
8
+ import ErrorMessageRenderer_default from "./renderers/ErrorMessageRenderer.js";
9
+ import LinkMessageRenderer_default from "./renderers/LinkMessageRenderer.js";
10
+ import MarkdownMessageRenderer_default from "./renderers/MarkdownMessageRenderer.js";
11
+ import PlainMessageRenderer_default from "./renderers/PlainMessageRenderer.js";
12
+ import { c } from "react/compiler-runtime";
13
+ import React from "react";
14
+ import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
15
+ var rendererRegistry = new Map([
16
+ ["ai-message", ({ document: e, isLastItem: f }) => /* @__PURE__ */ jsx(AiMessage_default, {
17
+ document: e,
18
+ isLastItem: f
19
+ })],
20
+ ["debug", ({ document: e }) => /* @__PURE__ */ jsx("div", {
21
+ className: "mb-4 flex",
22
+ children: /* @__PURE__ */ jsx(DocumentDebugRenderer_default, { document: e })
23
+ })],
24
+ ["object-form", ({ pipeline: f, workflow: p, document: m, isActive: g }) => /* @__PURE__ */ jsx(CompletionMessagePaper_default, {
25
+ role: "document",
26
+ fullWidth: !0,
27
+ timestamp: new Date(m.createdAt),
28
+ children: /* @__PURE__ */ jsx(DocumentFormRenderer_default, {
29
+ pipeline: f,
30
+ workflow: p,
31
+ document: m,
32
+ enabled: g,
33
+ viewOnly: !g
34
+ })
35
+ })],
36
+ ["message", ({ document: e }) => /* @__PURE__ */ jsx(DocumentMessageRenderer_default, { document: e })],
37
+ ["error", ({ document: e }) => /* @__PURE__ */ jsx(ErrorMessageRenderer_default, { document: e })],
38
+ ["plain", ({ document: e }) => /* @__PURE__ */ jsx(PlainMessageRenderer_default, { document: e })],
39
+ ["markdown", ({ document: e }) => /* @__PURE__ */ jsx(MarkdownMessageRenderer_default, { document: e })],
40
+ ["link", ({ document: e }) => /* @__PURE__ */ jsx(LinkMessageRenderer_default, { document: e })],
41
+ ["oauth-prompt", ({ pipeline: e, workflow: p, document: m, isActive: h }) => /* @__PURE__ */ jsx(OAuthPromptRenderer_default, {
42
+ pipeline: e,
43
+ workflow: p,
44
+ document: m,
45
+ isActive: h
46
+ })]
47
+ ]), DocumentRenderer_default = (e) => {
48
+ let f = c(5), p = e.document.ui?.form?.widget ?? "object-form", m;
49
+ f[0] === p ? m = f[1] : (m = rendererRegistry.get(p), f[0] = p, f[1] = m);
50
+ let h = m, g;
51
+ return f[2] !== h || f[3] !== e ? (g = /* @__PURE__ */ jsx("div", { children: h ? /* @__PURE__ */ jsx(h, { ...e }) : /* @__PURE__ */ jsx(Fragment$1, { children: "unknown document type" }) }), f[2] = h, f[3] = e, f[4] = g) : g = f[4], g;
52
+ };
53
+ export { DocumentRenderer_default as default };
@@ -1,5 +1,5 @@
1
+ import DocumentRenderer_default from "../DocumentRenderer.js";
1
2
  import DocumentMetadataPills_default from "./DocumentMetadataPills.js";
2
- import DocumentRenderer_default from "./DocumentRenderer.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import React from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Badge } from "../../../components/ui/badge.js";
2
2
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../../../components/ui/dialog.js";
3
- import DocumentDetails_default from "./document-details/DocumentDetails.js";
4
- import PromptDetails_default from "./document-details/PromptDetails.js";
3
+ import DocumentDetails_default from "../document-details/DocumentDetails.js";
4
+ import PromptDetails_default from "../document-details/PromptDetails.js";
5
5
  import { c } from "react/compiler-runtime";
6
6
  import { useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../../../../components/ui/accordion.js";
2
- import { Badge } from "../../../../components/ui/badge.js";
3
- import { Card, CardContent } from "../../../../components/ui/card.js";
1
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../../../components/ui/accordion.js";
2
+ import { Badge } from "../../../components/ui/badge.js";
3
+ import { Card, CardContent } from "../../../components/ui/card.js";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../../../../components/ui/accordion.js";
2
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../components/ui/card.js";
3
- import CompletionMessagePaper_default from "../../../../components/messages/CompletionMessagePaper.js";
1
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../../../components/ui/accordion.js";
2
+ import { Card, CardContent, CardHeader, CardTitle } from "../../../components/ui/card.js";
3
+ import CompletionMessagePaper_default from "../../../components/messages/CompletionMessagePaper.js";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,4 @@
1
+ import DocumentRenderer_default from "./DocumentRenderer.js";
2
+ import DocumentMetadataPills_default from "./components/DocumentMetadataPills.js";
3
+ import DocumentItem_default from "./components/DocumentItem.js";
4
+ import DocumentList_default from "./components/DocumentList.js";
@@ -1,8 +1,8 @@
1
- import { getToolOrDynamicToolName, isReasoningUIPart, isTextUIPart, isToolOrDynamicToolUIPart } from "../../../../node_modules/ai/dist/index.js";
2
- import { Message, MessageAction, MessageActions, MessageContent, MessageResponse } from "../../../../components/ai-elements/message.js";
3
- import { Reasoning, ReasoningContent, ReasoningTrigger } from "../../../../components/ai-elements/reasoning.js";
4
- import { Source, Sources, SourcesContent, SourcesTrigger } from "../../../../components/ai-elements/sources.js";
5
- import { Tool, ToolContent, ToolHeader, ToolInput, ToolOutput } from "../../../../components/ai-elements/tool.js";
1
+ import { getToolOrDynamicToolName, isReasoningUIPart, isTextUIPart, isToolOrDynamicToolUIPart } from "../../../node_modules/ai/dist/index.js";
2
+ import { Message, MessageAction, MessageActions, MessageContent, MessageResponse } from "../../../components/ai-elements/message.js";
3
+ import { Reasoning, ReasoningContent, ReasoningTrigger } from "../../../components/ai-elements/reasoning.js";
4
+ import { Source, Sources, SourcesContent, SourcesTrigger } from "../../../components/ai-elements/sources.js";
5
+ import { Tool, ToolContent, ToolHeader, ToolInput, ToolOutput } from "../../../components/ai-elements/tool.js";
6
6
  import { c } from "react/compiler-runtime";
7
7
  import { Fragment } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../../../components/ui/collapsible.js";
1
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../../components/ui/collapsible.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import Form_default from "../../../../components/dynamic-form/Form.js";
2
- import { useRunPipeline } from "../../../../hooks/useProcessor.js";
3
- import UiActions_default from "../../../../components/ui-widgets/UiActions.js";
1
+ import Form_default from "../../../components/dynamic-form/Form.js";
2
+ import { useRunPipeline } from "../../../hooks/useProcessor.js";
3
+ import UiActions_default from "../../../components/ui-widgets/UiActions.js";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import React, { useEffect } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import CompletionMessagePaper_default from "../../../../components/messages/CompletionMessagePaper.js";
1
+ import CompletionMessagePaper_default from "../../../components/messages/CompletionMessagePaper.js";
2
2
  import AiMessageContent_default from "./AiMessageContent.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import React from "react";
@@ -1,4 +1,4 @@
1
- import { Alert, AlertDescription } from "../../../../components/ui/alert.js";
1
+ import { Alert, AlertDescription } from "../../../components/ui/alert.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import link_default from "../../../../components/loopstack-elements/link.js";
1
+ import link_default from "../../../components/loopstack-elements/link.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import CompletionMessagePaper_default from "../../../../components/messages/CompletionMessagePaper.js";
2
- import MarkdownContent_default from "../../../../components/dynamic-form/MarkdownContent.js";
1
+ import CompletionMessagePaper_default from "../../../components/messages/CompletionMessagePaper.js";
2
+ import MarkdownContent_default from "../../../components/dynamic-form/MarkdownContent.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import React from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import CompletionMessagePaper_default from "../../../../components/messages/CompletionMessagePaper.js";
1
+ import CompletionMessagePaper_default from "../../../components/messages/CompletionMessagePaper.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -0,0 +1 @@
1
+ import LocalHealthCheck_default from "./LocalHealthCheck.js";