@loopstack/loopstack-studio 0.32.0 → 0.34.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 (39) hide show
  1. package/dist/api/index.js +4 -1
  2. package/dist/api/workflows.js +1 -0
  3. package/dist/app/EnvironmentEmbedRoot.js +22 -24
  4. package/dist/components/loopstack-elements/link.js +64 -56
  5. package/dist/components/messages/CompletionMessagePaper.js +25 -29
  6. package/dist/events/sse-client-events.js +2 -0
  7. package/dist/features/dashboard/AppLauncher.js +111 -64
  8. package/dist/features/documents/DocumentRenderer.js +42 -42
  9. package/dist/features/documents/renderers/LinkMessageRenderer.js +10 -10
  10. package/dist/features/feature-registry/FeatureRegistryProvider.js +15 -17
  11. package/dist/features/feature-registry/available-features.js +3 -2
  12. package/dist/features/feature-registry/index.js +1 -1
  13. package/dist/features/file-explorer/api/files.js +8 -3
  14. package/dist/features/file-explorer/components/FileExplorerPanel.js +64 -43
  15. package/dist/features/file-explorer/file-explorer-feature.js +15 -7
  16. package/dist/features/file-explorer/hooks/useFileExplorer.js +31 -29
  17. package/dist/features/file-explorer/index.js +1 -1
  18. package/dist/features/file-explorer/providers/FileExplorerProvider.js +77 -77
  19. package/dist/features/git/components/WorkbenchGitPanel.js +1 -1
  20. package/dist/features/secrets/components/WorkbenchSecretsPanel.js +1 -1
  21. package/dist/features/workbench/Workbench.js +16 -16
  22. package/dist/features/workbench/components/NewRunDialog.js +1 -1
  23. package/dist/features/workbench/components/WorkbenchIconSidebar.js +1 -1
  24. package/dist/features/workbench/components/WorkbenchSidebarShell.js +3 -3
  25. package/dist/features/workbench/index.js +1 -1
  26. package/dist/features/workspaces/Workspaces.js +1 -1
  27. package/dist/hooks/index.js +2 -2
  28. package/dist/hooks/query-keys.js +39 -32
  29. package/dist/hooks/useSecrets.js +9 -45
  30. package/dist/hooks/useWorkflows.js +73 -61
  31. package/dist/index.d.ts +39 -13
  32. package/dist/index.js +8 -8
  33. package/dist/loopstack-studio.css +1 -1
  34. package/dist/pages/EmbedWorkbenchPage.js +46 -40
  35. package/dist/pages/WorkbenchPage.js +50 -45
  36. package/dist/pages/WorkspacePage.js +39 -25
  37. package/dist/pages/WorkspaceRunsPage.js +34 -26
  38. package/dist/providers/InvalidationEventsProvider.js +22 -20
  39. package/package.json +2 -2
@@ -1,21 +1,33 @@
1
- import { getChildWorkflowsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowsCacheKey } from "./query-keys.js";
1
+ import { getChildWorkflowsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowStatusCacheKey, getWorkflowsCacheKey } from "./query-keys.js";
2
2
  import { useApiClient } from "./useApi.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
5
5
  function useWorkflow(e) {
6
6
  let i = c(10), { envKey: a, api: o } = useApiClient(), s;
7
7
  i[0] !== a || i[1] !== e ? (s = getWorkflowCacheKey(a, e), i[0] = a, i[1] = e, i[2] = s) : s = i[2];
8
- let u;
9
- i[3] !== o || i[4] !== e ? (u = () => o.workflows.getById({ id: e }), i[3] = o, i[4] = e, i[5] = u) : u = i[5];
8
+ let l;
9
+ i[3] !== o || i[4] !== e ? (l = () => o.workflows.getById({ id: e }), i[3] = o, i[4] = e, i[5] = l) : l = i[5];
10
+ let d = !!e, f;
11
+ return i[6] !== s || i[7] !== l || i[8] !== d ? (f = {
12
+ queryKey: s,
13
+ queryFn: l,
14
+ enabled: d
15
+ }, i[6] = s, i[7] = l, i[8] = d, i[9] = f) : f = i[9], useQuery(f);
16
+ }
17
+ function useWorkflowStatus(e) {
18
+ let r = c(10), { envKey: i, api: a } = useApiClient(), s;
19
+ r[0] !== i || r[1] !== e ? (s = getWorkflowStatusCacheKey(i, e), r[0] = i, r[1] = e, r[2] = s) : s = r[2];
20
+ let l;
21
+ r[3] !== a || r[4] !== e ? (l = () => a.workflows.getStatusById({ id: e }), r[3] = a, r[4] = e, r[5] = l) : l = r[5];
10
22
  let d = !!e, f;
11
- return i[6] !== s || i[7] !== u || i[8] !== d ? (f = {
23
+ return r[6] !== s || r[7] !== l || r[8] !== d ? (f = {
12
24
  queryKey: s,
13
- queryFn: u,
25
+ queryFn: l,
14
26
  enabled: d
15
- }, i[6] = s, i[7] = u, i[8] = d, i[9] = f) : f = i[9], useQuery(f);
27
+ }, r[6] = s, r[7] = l, r[8] = d, r[9] = f) : f = r[9], useQuery(f);
16
28
  }
17
- function useFilterWorkflows(e, r, i, a, s, u) {
18
- let d = c(32), f = i === void 0 ? "id" : i, p = a === void 0 ? "DESC" : a, m = s === void 0 ? 0 : s, h = u === void 0 ? 10 : u, { envKey: g, api: _ } = useApiClient(), v;
29
+ function useFilterWorkflows(e, r, i, a, o, l) {
30
+ let d = c(32), f = i === void 0 ? "id" : i, p = a === void 0 ? "DESC" : a, m = o === void 0 ? 0 : o, h = l === void 0 ? 10 : l, { envKey: g, api: _ } = useApiClient(), v;
19
31
  d[0] === r ? v = d[1] : (v = Object.keys(r), d[0] = r, d[1] = v);
20
32
  let y = v.length > 0, b;
21
33
  d[2] !== r || d[3] !== y ? (b = y ? JSON.stringify(r) : void 0, d[2] = r, d[3] = y, d[4] = b) : b = d[4];
@@ -59,62 +71,62 @@ function useFilterWorkflows(e, r, i, a, s, u) {
59
71
  }, d[29] = D, d[30] = O, d[31] = k) : k = d[31], useQuery(k);
60
72
  }
61
73
  function useCreateWorkflow() {
62
- let e = c(8), { envKey: r, api: i } = useApiClient(), a = useQueryClient(), l;
63
- e[0] === i ? l = e[1] : (l = (e) => i.workflows.create(e), e[0] = i, e[1] = l);
64
- let d;
65
- e[2] !== r || e[3] !== a ? (d = () => {
74
+ let e = c(8), { envKey: r, api: i } = useApiClient(), a = useQueryClient(), o;
75
+ e[0] === i ? o = e[1] : (o = (e) => i.workflows.create(e), e[0] = i, e[1] = o);
76
+ let u;
77
+ e[2] !== r || e[3] !== a ? (u = () => {
66
78
  a.invalidateQueries({ queryKey: getWorkflowsCacheKey(r) });
67
- }, e[2] = r, e[3] = a, e[4] = d) : d = e[4];
79
+ }, e[2] = r, e[3] = a, e[4] = u) : u = e[4];
68
80
  let f;
69
- return e[5] !== l || e[6] !== d ? (f = {
70
- mutationFn: l,
71
- onSuccess: d
72
- }, e[5] = l, e[6] = d, e[7] = f) : f = e[7], useMutation(f);
81
+ return e[5] !== o || e[6] !== u ? (f = {
82
+ mutationFn: o,
83
+ onSuccess: u
84
+ }, e[5] = o, e[6] = u, e[7] = f) : f = e[7], useMutation(f);
73
85
  }
74
86
  function useUpdateWorkflow() {
75
- let e = c(8), { envKey: i, api: a } = useApiClient(), l = useQueryClient(), d;
76
- e[0] === a ? d = e[1] : (d = (e) => a.workflows.update(e), e[0] = a, e[1] = d);
87
+ let e = c(8), { envKey: i, api: a } = useApiClient(), o = useQueryClient(), u;
88
+ e[0] === a ? u = e[1] : (u = (e) => a.workflows.update(e), e[0] = a, e[1] = u);
77
89
  let f;
78
- e[2] !== i || e[3] !== l ? (f = (e, a) => {
79
- l.invalidateQueries({ queryKey: getWorkflowCacheKey(i, a.id) }), l.invalidateQueries({ queryKey: getWorkflowsCacheKey(i) });
80
- }, e[2] = i, e[3] = l, e[4] = f) : f = e[4];
90
+ e[2] !== i || e[3] !== o ? (f = (e, a) => {
91
+ o.invalidateQueries({ queryKey: getWorkflowCacheKey(i, a.id) }), o.invalidateQueries({ queryKey: getWorkflowsCacheKey(i) });
92
+ }, e[2] = i, e[3] = o, e[4] = f) : f = e[4];
81
93
  let p;
82
- return e[5] !== d || e[6] !== f ? (p = {
83
- mutationFn: d,
94
+ return e[5] !== u || e[6] !== f ? (p = {
95
+ mutationFn: u,
84
96
  onSuccess: f
85
- }, e[5] = d, e[6] = f, e[7] = p) : p = e[7], useMutation(p);
97
+ }, e[5] = u, e[6] = f, e[7] = p) : p = e[7], useMutation(p);
86
98
  }
87
99
  function useDeleteWorkflow() {
88
- let e = c(8), { envKey: i, api: a } = useApiClient(), l = useQueryClient(), d;
89
- e[0] === a ? d = e[1] : (d = (e) => a.workflows.delete({ id: e }), e[0] = a, e[1] = d);
100
+ let e = c(8), { envKey: i, api: a } = useApiClient(), o = useQueryClient(), u;
101
+ e[0] === a ? u = e[1] : (u = (e) => a.workflows.delete({ id: e }), e[0] = a, e[1] = u);
90
102
  let f;
91
- e[2] !== i || e[3] !== l ? (f = (e, a) => {
92
- l.removeQueries({ queryKey: getWorkflowCacheKey(i, a) }), l.invalidateQueries({ queryKey: getWorkflowsCacheKey(i) });
93
- }, e[2] = i, e[3] = l, e[4] = f) : f = e[4];
103
+ e[2] !== i || e[3] !== o ? (f = (e, a) => {
104
+ o.removeQueries({ queryKey: getWorkflowCacheKey(i, a) }), o.invalidateQueries({ queryKey: getWorkflowsCacheKey(i) });
105
+ }, e[2] = i, e[3] = o, e[4] = f) : f = e[4];
94
106
  let p;
95
- return e[5] !== d || e[6] !== f ? (p = {
96
- mutationFn: d,
107
+ return e[5] !== u || e[6] !== f ? (p = {
108
+ mutationFn: u,
97
109
  onSuccess: f
98
- }, e[5] = d, e[6] = f, e[7] = p) : p = e[7], useMutation(p);
110
+ }, e[5] = u, e[6] = f, e[7] = p) : p = e[7], useMutation(p);
99
111
  }
100
112
  function useBatchDeleteWorkflows() {
101
- let e = c(8), { envKey: r, api: i } = useApiClient(), a = useQueryClient(), l;
102
- e[0] === i ? l = e[1] : (l = (e) => i.workflows.batchDelete({ ids: e }), e[0] = i, e[1] = l);
103
- let d;
104
- e[2] !== r || e[3] !== a ? (d = () => {
113
+ let e = c(8), { envKey: r, api: i } = useApiClient(), a = useQueryClient(), o;
114
+ e[0] === i ? o = e[1] : (o = (e) => i.workflows.batchDelete({ ids: e }), e[0] = i, e[1] = o);
115
+ let u;
116
+ e[2] !== r || e[3] !== a ? (u = () => {
105
117
  a.invalidateQueries({ queryKey: getWorkflowsCacheKey(r) });
106
- }, e[2] = r, e[3] = a, e[4] = d) : d = e[4];
118
+ }, e[2] = r, e[3] = a, e[4] = u) : u = e[4];
107
119
  let f;
108
- return e[5] !== l || e[6] !== d ? (f = {
109
- mutationFn: l,
110
- onSuccess: d
111
- }, e[5] = l, e[6] = d, e[7] = f) : f = e[7], useMutation(f);
120
+ return e[5] !== o || e[6] !== u ? (f = {
121
+ mutationFn: o,
122
+ onSuccess: u
123
+ }, e[5] = o, e[6] = u, e[7] = f) : f = e[7], useMutation(f);
112
124
  }
113
125
  function useChildWorkflows(r, i) {
114
- let a = c(10), o = i === void 0 ? !0 : i, { envKey: s, api: u } = useApiClient(), d;
126
+ let a = c(10), o = i === void 0 ? !0 : i, { envKey: s, api: l } = useApiClient(), d;
115
127
  a[0] !== s || a[1] !== r ? (d = getChildWorkflowsCacheKey(s, r), a[0] = s, a[1] = r, a[2] = d) : d = a[2];
116
128
  let f;
117
- a[3] !== u || a[4] !== r ? (f = () => u.workflows.getAll({
129
+ a[3] !== l || a[4] !== r ? (f = () => l.workflows.getAll({
118
130
  filter: JSON.stringify({ parentId: r }),
119
131
  sortBy: JSON.stringify([{
120
132
  field: "createdAt",
@@ -122,7 +134,7 @@ function useChildWorkflows(r, i) {
122
134
  }]),
123
135
  page: 0,
124
136
  limit: 100
125
- }), a[3] = u, a[4] = r, a[5] = f) : f = a[5];
137
+ }), a[3] = l, a[4] = r, a[5] = f) : f = a[5];
126
138
  let p = o && !!r, m;
127
139
  return a[6] !== d || a[7] !== f || a[8] !== p ? (m = {
128
140
  queryKey: d,
@@ -137,37 +149,37 @@ function _temp(e) {
137
149
  function useWorkflowConfigByName(e) {
138
150
  let r = c(10), { envKey: a, api: o } = useApiClient(), s;
139
151
  r[0] !== a || r[1] !== e ? (s = getWorkflowConfigCacheKey(a, e), r[0] = a, r[1] = e, r[2] = s) : s = r[2];
140
- let u;
141
- r[3] !== o || r[4] !== e ? (u = () => o.config.getWorkflowConfig({ workflowName: e }), r[3] = o, r[4] = e, r[5] = u) : u = r[5];
152
+ let l;
153
+ r[3] !== o || r[4] !== e ? (l = () => o.config.getWorkflowConfig({ workflowName: e }), r[3] = o, r[4] = e, r[5] = l) : l = r[5];
142
154
  let d = !!e, f;
143
- return r[6] !== s || r[7] !== u || r[8] !== d ? (f = {
155
+ return r[6] !== s || r[7] !== l || r[8] !== d ? (f = {
144
156
  queryKey: s,
145
- queryFn: u,
157
+ queryFn: l,
146
158
  enabled: d
147
- }, r[6] = s, r[7] = u, r[8] = d, r[9] = f) : f = r[9], useQuery(f);
159
+ }, r[6] = s, r[7] = l, r[8] = d, r[9] = f) : f = r[9], useQuery(f);
148
160
  }
149
161
  function useWorkflowSource(e) {
150
162
  let r = c(10), { envKey: i, api: o } = useApiClient(), s;
151
163
  r[0] !== i || r[1] !== e ? (s = getWorkflowSourceCacheKey(i, e), r[0] = i, r[1] = e, r[2] = s) : s = r[2];
152
- let u;
153
- r[3] !== o || r[4] !== e ? (u = () => o.config.getWorkflowSource({ workflowName: e }), r[3] = o, r[4] = e, r[5] = u) : u = r[5];
164
+ let l;
165
+ r[3] !== o || r[4] !== e ? (l = () => o.config.getWorkflowSource({ workflowName: e }), r[3] = o, r[4] = e, r[5] = l) : l = r[5];
154
166
  let d = !!e, f;
155
- return r[6] !== s || r[7] !== u || r[8] !== d ? (f = {
167
+ return r[6] !== s || r[7] !== l || r[8] !== d ? (f = {
156
168
  queryKey: s,
157
- queryFn: u,
169
+ queryFn: l,
158
170
  enabled: d
159
- }, r[6] = s, r[7] = u, r[8] = d, r[9] = f) : f = r[9], useQuery(f);
171
+ }, r[6] = s, r[7] = l, r[8] = d, r[9] = f) : f = r[9], useQuery(f);
160
172
  }
161
173
  function useWorkflowCheckpoints(e) {
162
174
  let i = c(10), { envKey: a, api: o } = useApiClient(), s;
163
175
  i[0] !== a || i[1] !== e ? (s = [...getWorkflowCacheKey(a, e), "checkpoints"], i[0] = a, i[1] = e, i[2] = s) : s = i[2];
164
- let u;
165
- i[3] !== o || i[4] !== e ? (u = () => o.workflows.getCheckpoints({ id: e }), i[3] = o, i[4] = e, i[5] = u) : u = i[5];
176
+ let l;
177
+ i[3] !== o || i[4] !== e ? (l = () => o.workflows.getCheckpoints({ id: e }), i[3] = o, i[4] = e, i[5] = l) : l = i[5];
166
178
  let d = !!e, f;
167
- return i[6] !== s || i[7] !== u || i[8] !== d ? (f = {
179
+ return i[6] !== s || i[7] !== l || i[8] !== d ? (f = {
168
180
  queryKey: s,
169
- queryFn: u,
181
+ queryFn: l,
170
182
  enabled: d
171
- }, i[6] = s, i[7] = u, i[8] = d, i[9] = f) : f = i[9], useQuery(f);
183
+ }, i[6] = s, i[7] = l, i[8] = d, i[9] = f) : f = i[9], useQuery(f);
172
184
  }
173
- export { useBatchDeleteWorkflows, useChildWorkflows, useCreateWorkflow, useDeleteWorkflow, useFilterWorkflows, useUpdateWorkflow, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource };
185
+ export { useBatchDeleteWorkflows, useChildWorkflows, useCreateWorkflow, useDeleteWorkflow, useFilterWorkflows, useUpdateWorkflow, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource, useWorkflowStatus };
package/dist/index.d.ts CHANGED
@@ -49,6 +49,7 @@ import { WorkflowCreateInterface } from '@loopstack/contracts/api';
49
49
  import { WorkflowFullInterface } from '@loopstack/contracts/api';
50
50
  import { WorkflowItemInterface } from '@loopstack/contracts/api';
51
51
  import { WorkflowSourceInterface } from '@loopstack/contracts/api';
52
+ import { WorkflowStatusInterface } from '@loopstack/contracts/api';
52
53
  import { WorkflowUpdateInterface } from '@loopstack/contracts/api';
53
54
  import { WorkspaceCreateInterface } from '@loopstack/contracts/api';
54
55
  import { WorkspaceEnvironmentInterface } from '@loopstack/contracts/api';
@@ -292,14 +293,26 @@ declare function createApi(http: AxiosInstance): {
292
293
  }>;
293
294
  };
294
295
  files: {
295
- getTree: (params: {
296
- workspaceId: string;
297
- path?: string;
298
- }) => Promise<FileExplorerNode[]>;
299
- readFile: (params: {
300
- workspaceId: string;
301
- path: string;
302
- }) => Promise<FileContent>;
296
+ local: {
297
+ getTree: (params: {
298
+ workspaceId: string;
299
+ path?: string;
300
+ }) => Promise<FileExplorerNode[]>;
301
+ readFile: (params: {
302
+ workspaceId: string;
303
+ path: string;
304
+ }) => Promise<FileContent>;
305
+ };
306
+ remote: {
307
+ getTree: (params: {
308
+ workspaceId: string;
309
+ path?: string;
310
+ }) => Promise<FileExplorerNode[]>;
311
+ readFile: (params: {
312
+ workspaceId: string;
313
+ path: string;
314
+ }) => Promise<FileContent>;
315
+ };
303
316
  };
304
317
  git: {
305
318
  getStatus: (params: {
@@ -367,6 +380,9 @@ declare function createApi(http: AxiosInstance): {
367
380
  getById: (params: {
368
381
  id: string;
369
382
  }) => Promise<WorkflowFullInterface>;
383
+ getStatusById: (params: {
384
+ id: string;
385
+ }) => Promise<WorkflowStatusInterface>;
370
386
  getAll: (params?: {
371
387
  filter?: string;
372
388
  sortBy?: string;
@@ -735,11 +751,11 @@ declare class EventEmitter {
735
751
  emit(event: string, ...args: unknown[]): void;
736
752
  }
737
753
 
738
- export declare function FeatureRegistryProvider({ features, children }: FeatureRegistryProviderProps): JSX.Element;
754
+ export declare function FeatureRegistryProvider({ appName, children }: FeatureRegistryProviderProps): JSX.Element;
739
755
 
740
756
  export declare interface FeatureRegistryProviderProps {
741
- /** Static feature list (fallback when no backend features are available). */
742
- features?: StudioFeature[];
757
+ /** App name to scope features to. Must match an `appName` from `/api/v1/config/apps`. */
758
+ appName: string;
743
759
  children: ReactNode;
744
760
  }
745
761
 
@@ -748,8 +764,6 @@ declare interface FileContent {
748
764
  content: string;
749
765
  }
750
766
 
751
- export declare const fileExplorerFeature: StudioFeature;
752
-
753
767
  declare interface FileExplorerNode {
754
768
  id: string;
755
769
  name: string;
@@ -817,6 +831,8 @@ export declare function getWorkflowsCacheKey(envKey: string): string[];
817
831
 
818
832
  export declare function getWorkflowSourceCacheKey(envKey: string, alias: string): string[];
819
833
 
834
+ export declare function getWorkflowStatusCacheKey(envKey: string, id: string): string[];
835
+
820
836
  export declare function getWorkflowTypesCacheKey(envKey: string, appBlockName: string): string[];
821
837
 
822
838
  export declare function getWorkspaceCacheKey(envKey: string, id: string): string[];
@@ -934,6 +950,8 @@ declare interface LoadingCenteredProps extends default_2.HTMLAttributes<HTMLDivE
934
950
  children?: default_2.ReactNode;
935
951
  }
936
952
 
953
+ export declare const localFileExplorerFeature: StudioFeature;
954
+
937
955
  export declare const LocalHealthCheck: () => JSX.Element | null;
938
956
 
939
957
  export declare class LocalRouter implements StudioRouter {
@@ -1037,6 +1055,8 @@ export declare function RadioGroup({ className, ...props }: React_2.ComponentPro
1037
1055
 
1038
1056
  export declare function RadioGroupItem({ className, ...props }: React_2.ComponentProps<typeof RadioGroupPrimitive.Item>): JSX.Element;
1039
1057
 
1058
+ export declare const remoteFileExplorerFeature: StudioFeature;
1059
+
1040
1060
  export declare interface RowAction<T = any> {
1041
1061
  id: string;
1042
1062
  label: string;
@@ -1506,6 +1526,12 @@ export declare function useWorkflowConfigByName(workflowName: string | undefined
1506
1526
  */
1507
1527
  export declare function useWorkflowSource(workflowName: string | undefined): UseQueryResult<WorkflowSourceInterface, Error>;
1508
1528
 
1529
+ /**
1530
+ * Fetch the slim live status for a single workflow — used by embedded sub-workflow link cards
1531
+ * to react to state changes without pulling the full workflow payload.
1532
+ */
1533
+ export declare function useWorkflowStatus(id: string | undefined): UseQueryResult<WorkflowStatusInterface, Error>;
1534
+
1509
1535
  export declare function useWorkspace(id: string | undefined): UseQueryResult<WorkspaceInterface, Error>;
1510
1536
 
1511
1537
  export declare function useWorkspaceEnvironments(workspaceId?: string): UseQueryResult<WorkspaceEnvironmentInterface[], Error>;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getAppTypesCacheKey, getAvailableEnvironmentsCacheKey, getChildWorkflowsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getGitLogCacheKey, getGitRemoteCacheKey, getGitStatusCacheKey, getHealthCacheKey, getMeCacheKey, getSecretsCacheKey, getStudioAppsCacheKey, getToolConfigCacheKey, getToolConfigsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowTypesCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspacesCacheKey } from "./hooks/query-keys.js";
1
+ import { getAppTypesCacheKey, getAvailableEnvironmentsCacheKey, getChildWorkflowsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getGitLogCacheKey, getGitRemoteCacheKey, getGitStatusCacheKey, getHealthCacheKey, getMeCacheKey, getSecretsCacheKey, getStudioAppsCacheKey, getToolConfigCacheKey, getToolConfigsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowStatusCacheKey, getWorkflowTypesCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspacesCacheKey } from "./hooks/query-keys.js";
2
2
  import { createApiClient } from "./services/createApiClient.js";
3
3
  import { eventBus } from "./services/eventEmitter.js";
4
4
  import "./services/index.js";
@@ -7,7 +7,7 @@ import { useApiClient } from "./hooks/useApi.js";
7
7
  import { useIsMobile } from "./hooks/use-mobile.js";
8
8
  import { useAppsConfig, useAvailableEnvironments, useDocumentConfigs } from "./hooks/useConfig.js";
9
9
  import { useReplaceEnvironments, useResetEnvironment, useWorkspaceEnvironments } from "./hooks/useEnvironments.js";
10
- import { useBatchDeleteWorkflows, useChildWorkflows, useCreateWorkflow, useDeleteWorkflow, useFilterWorkflows, useUpdateWorkflow, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource } from "./hooks/useWorkflows.js";
10
+ import { useBatchDeleteWorkflows, useChildWorkflows, useCreateWorkflow, useDeleteWorkflow, useFilterWorkflows, useUpdateWorkflow, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource, useWorkflowStatus } from "./hooks/useWorkflows.js";
11
11
  import { useBatchDeleteWorkspaces, useCreateWorkspace, useDeleteWorkspace, useFilterWorkspaces, useSetFavouriteWorkspace, useUpdateWorkspace, useWorkspace } from "./hooks/useWorkspaces.js";
12
12
  import "./hooks/index.js";
13
13
  import { StudioPreferencesProvider, useOptionalStudioPreferences, useStudioPreferences } from "./providers/StudioPreferencesProvider.js";
@@ -64,17 +64,17 @@ import ErrorSnackbar_default from "./components/feedback/ErrorSnackbar.js";
64
64
  import ErrorAlert_default from "./components/feedback/ErrorAlert.js";
65
65
  import "./components/index.js";
66
66
  import DebugPage_default from "./pages/DebugPage.js";
67
+ import { FeatureRegistryProvider } from "./features/feature-registry/FeatureRegistryProvider.js";
68
+ import "./features/feature-registry/index.js";
67
69
  import { EnvironmentSlotSelector } from "./features/workspaces/components/EnvironmentSlotSelector.js";
68
70
  import CreateWorkspace_default from "./features/workspaces/components/CreateWorkspace.js";
69
- import DashboardPage from "./pages/DashboardPage.js";
70
- import WorkspacesPage from "./pages/WorkspacesPage.js";
71
71
  import "./features/workspaces/index.js";
72
- import { fileExplorerFeature } from "./features/file-explorer/file-explorer-feature.js";
72
+ import { localFileExplorerFeature, remoteFileExplorerFeature } from "./features/file-explorer/file-explorer-feature.js";
73
73
  import "./features/file-explorer/index.js";
74
74
  import { secretsFeature } from "./features/secrets/secrets-feature.js";
75
75
  import "./features/secrets/index.js";
76
- import { FeatureRegistryProvider } from "./features/feature-registry/FeatureRegistryProvider.js";
77
- import "./features/feature-registry/index.js";
76
+ import DashboardPage from "./pages/DashboardPage.js";
77
+ import WorkspacesPage from "./pages/WorkspacesPage.js";
78
78
  import WorkspacePage_default from "./pages/WorkspacePage.js";
79
79
  import WorkspaceRunsPage_default from "./pages/WorkspaceRunsPage.js";
80
80
  import WorkbenchPage from "./pages/WorkbenchPage.js";
@@ -90,4 +90,4 @@ import LocalHealthCheck_default from "./features/health/LocalHealthCheck.js";
90
90
  import EnvironmentEmbedRoot from "./app/EnvironmentEmbedRoot.js";
91
91
  import { StudioSidebar } from "./components/layout/StudioSidebar.js";
92
92
  import "./features/health/index.js";
93
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, CompletionMessagePaper_default as CompletionMessagePaper, ComponentOverridesProvider, ConfirmDialog_default as ConfirmDialog, CreateWorkspace_default as CreateWorkspace, CustomListView_default as CustomItemListView, DashboardPage, DataList, DataTable, DataTableBatchAction_default as DataTableBatchActions, DataTableFilters_default as DataTableFilters, DataTablePagination_default as DataTablePagination, DataTableToolbar_default as DataTableToolbar, DebugPage_default as DebugPage, DebugWorkflowDetailsPage, DebugWorkflowsPage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiscordLogo, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmbedWorkbenchPage, EnvironmentEmbedRoot, EnvironmentSlotSelector, ErrorAlert_default as ErrorAlert, ErrorBoundary, ErrorSnackbar_default as ErrorSnackbar, FeatureRegistryProvider, GoogleLogo, Input, InvalidationEventsProvider, ListView_default as ItemListView, Label, LoadingCentered_default as LoadingCentered, LocalHealthCheck_default as LocalHealthCheck, LocalRouter, MainLayout_default as MainLayout, PageBreadcrumbs_default as PageBreadcrumbs, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PreviewWorkbenchPage, RadioGroup, RadioGroupItem, RunsListPage, RunsPage, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarInsetDiv, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuDiv, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Snackbar_default as Snackbar, SseProvider, StudioLandingPage, StudioPreferencesProvider, StudioProvider, StudioSidebar, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WorkbenchPage, WorkflowDebugPage_default as WorkflowDebugPage, WorkspacePage_default as WorkspacePage, WorkspaceRunsPage_default as WorkspaceRunsPage, WorkspacesPage, badgeVariants, buttonVariants, createApiClient, eventBus, fileExplorerFeature, getAppTypesCacheKey, getAvailableEnvironmentsCacheKey, getChildWorkflowsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getGitLogCacheKey, getGitRemoteCacheKey, getGitStatusCacheKey, getHealthCacheKey, getMeCacheKey, getSecretsCacheKey, getStudioAppsCacheKey, getToolConfigCacheKey, getToolConfigsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowTypesCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspacesCacheKey, secretsFeature, useApiClient, useAppsConfig, useAvailableEnvironments, useBatchDeleteWorkflows, useBatchDeleteWorkspaces, useChildWorkflows, useComponentOverrides, useCreateWorkflow, useCreateWorkspace, useDeleteWorkflow, useDeleteWorkspace, useDocumentConfigs, useFilterWorkflows, useFilterWorkspaces, useIsMobile, useOptionalStudioPreferences, useReplaceEnvironments, useResetEnvironment, useRouter, useSetFavouriteWorkspace, useSidebar, useStudio, useStudioOptional, useStudioPreferences, useUpdateWorkflow, useUpdateWorkspace, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource, useWorkspace, useWorkspaceEnvironments };
93
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, CompletionMessagePaper_default as CompletionMessagePaper, ComponentOverridesProvider, ConfirmDialog_default as ConfirmDialog, CreateWorkspace_default as CreateWorkspace, CustomListView_default as CustomItemListView, DashboardPage, DataList, DataTable, DataTableBatchAction_default as DataTableBatchActions, DataTableFilters_default as DataTableFilters, DataTablePagination_default as DataTablePagination, DataTableToolbar_default as DataTableToolbar, DebugPage_default as DebugPage, DebugWorkflowDetailsPage, DebugWorkflowsPage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiscordLogo, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmbedWorkbenchPage, EnvironmentEmbedRoot, EnvironmentSlotSelector, ErrorAlert_default as ErrorAlert, ErrorBoundary, ErrorSnackbar_default as ErrorSnackbar, FeatureRegistryProvider, GoogleLogo, Input, InvalidationEventsProvider, ListView_default as ItemListView, Label, LoadingCentered_default as LoadingCentered, LocalHealthCheck_default as LocalHealthCheck, LocalRouter, MainLayout_default as MainLayout, PageBreadcrumbs_default as PageBreadcrumbs, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PreviewWorkbenchPage, RadioGroup, RadioGroupItem, RunsListPage, RunsPage, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarInsetDiv, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuDiv, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Snackbar_default as Snackbar, SseProvider, StudioLandingPage, StudioPreferencesProvider, StudioProvider, StudioSidebar, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WorkbenchPage, WorkflowDebugPage_default as WorkflowDebugPage, WorkspacePage_default as WorkspacePage, WorkspaceRunsPage_default as WorkspaceRunsPage, WorkspacesPage, badgeVariants, buttonVariants, createApiClient, eventBus, getAppTypesCacheKey, getAvailableEnvironmentsCacheKey, getChildWorkflowsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getGitLogCacheKey, getGitRemoteCacheKey, getGitStatusCacheKey, getHealthCacheKey, getMeCacheKey, getSecretsCacheKey, getStudioAppsCacheKey, getToolConfigCacheKey, getToolConfigsCacheKey, getWorkflowCacheKey, getWorkflowConfigCacheKey, getWorkflowSourceCacheKey, getWorkflowStatusCacheKey, getWorkflowTypesCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspacesCacheKey, localFileExplorerFeature, remoteFileExplorerFeature, secretsFeature, useApiClient, useAppsConfig, useAvailableEnvironments, useBatchDeleteWorkflows, useBatchDeleteWorkspaces, useChildWorkflows, useComponentOverrides, useCreateWorkflow, useCreateWorkspace, useDeleteWorkflow, useDeleteWorkspace, useDocumentConfigs, useFilterWorkflows, useFilterWorkspaces, useIsMobile, useOptionalStudioPreferences, useReplaceEnvironments, useResetEnvironment, useRouter, useSetFavouriteWorkspace, useSidebar, useStudio, useStudioOptional, useStudioPreferences, useUpdateWorkflow, useUpdateWorkspace, useWorkflow, useWorkflowCheckpoints, useWorkflowConfigByName, useWorkflowSource, useWorkflowStatus, useWorkspace, useWorkspaceEnvironments };