windmill-components 1.504.6 → 1.511.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 (233) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +184 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +115 -88
  10. package/package/components/Editor.svelte.d.ts +30 -55
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  14. package/package/components/FlowBuilder.svelte +11 -2
  15. package/package/components/FlowJobResult.svelte +12 -17
  16. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  17. package/package/components/FlowPreviewContent.svelte +13 -10
  18. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/package/components/FlowPreviewResult.svelte +14 -6
  20. package/package/components/FlowStatusViewer.svelte +11 -24
  21. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  22. package/package/components/FlowStatusViewerInner.svelte +110 -131
  23. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  24. package/package/components/GitDiffPreview.svelte +55 -0
  25. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  26. package/package/components/HistoricInputs.svelte +2 -2
  27. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  28. package/package/components/InitGitRepoPopover.svelte +410 -0
  29. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  30. package/package/components/InstanceSetting.svelte +21 -9
  31. package/package/components/InstanceSettings.svelte +16 -3
  32. package/package/components/JobLoader.svelte +567 -0
  33. package/package/components/JobLoader.svelte.d.ts +53 -0
  34. package/package/components/JobLogs.svelte +6 -4
  35. package/package/components/JobLogs.svelte.d.ts +5 -18
  36. package/package/components/JsonEditor.svelte +11 -11
  37. package/package/components/JsonEditor.svelte.d.ts +14 -56
  38. package/package/components/Label.svelte +6 -11
  39. package/package/components/Label.svelte.d.ts +14 -39
  40. package/package/components/LightweightResourcePicker.svelte +18 -39
  41. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  42. package/package/components/LogViewer.svelte +35 -41
  43. package/package/components/LogViewer.svelte.d.ts +6 -20
  44. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  46. package/package/components/ModuleTest.svelte +16 -11
  47. package/package/components/NumberTypeNarrowing.svelte +13 -16
  48. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  49. package/package/components/PullGitRepoPopover.svelte +355 -0
  50. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  51. package/package/components/ResourceTypePicker.svelte +20 -17
  52. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  53. package/package/components/S3FilePicker.svelte +5 -3
  54. package/package/components/SavedInputs.svelte +2 -2
  55. package/package/components/ScriptBuilder.svelte +4 -3
  56. package/package/components/ScriptEditor.svelte +34 -31
  57. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  58. package/package/components/Section.svelte +7 -20
  59. package/package/components/Section.svelte.d.ts +20 -47
  60. package/package/components/ServiceLogsInner.svelte +2 -1
  61. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  62. package/package/components/SimpleEditor.svelte +4 -4
  63. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  64. package/package/components/SqlRepl.svelte +0 -1
  65. package/package/components/Subsection.svelte +10 -12
  66. package/package/components/Subsection.svelte.d.ts +15 -39
  67. package/package/components/UserSettings.svelte +1 -1
  68. package/package/components/WorkerGroup.svelte +260 -165
  69. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  70. package/package/components/WorkerTagPicker.svelte +3 -3
  71. package/package/components/WorkerTagSelect.svelte +33 -4
  72. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  73. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  74. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  75. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  76. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  77. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  78. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  79. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  80. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  81. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  82. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  83. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  84. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  85. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  86. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  87. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  88. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  89. package/package/components/apps/editor/component/components.d.ts +12 -0
  90. package/package/components/apps/editor/component/components.js +19 -7
  91. package/package/components/assets/AssetButtons.svelte +38 -0
  92. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  93. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  94. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  95. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  96. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  97. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  98. package/package/components/assets/README_DEV.md +0 -0
  99. package/package/components/assets/lib.d.ts +9 -1
  100. package/package/components/assets/lib.js +48 -7
  101. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  102. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  103. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  104. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  105. package/package/components/common/table/ScriptRow.svelte +3 -1
  106. package/package/components/copilot/AIFormSettings.svelte +3 -4
  107. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  108. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
  110. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  111. package/package/components/copilot/autocomplete/request.js +15 -7
  112. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  114. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  115. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  116. package/package/components/copilot/chat/flow/core.js +2 -38
  117. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  118. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  119. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  120. package/package/components/copilot/chat/navigator/core.js +2 -1
  121. package/package/components/copilot/chat/script/core.d.ts +11 -2
  122. package/package/components/copilot/chat/script/core.js +165 -23
  123. package/package/components/copilot/chat/shared.d.ts +10 -0
  124. package/package/components/copilot/chat/shared.js +56 -0
  125. package/package/components/copilot/lib.d.ts +1 -0
  126. package/package/components/copilot/lib.js +30 -9
  127. package/package/components/custom_ui.d.ts +1 -0
  128. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  129. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  130. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  131. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  132. package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
  133. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  134. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  135. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  136. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  138. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  139. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  140. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  141. package/package/components/flows/flowStore.d.ts +1 -1
  142. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  143. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  144. package/package/components/flows/scheduleUtils.js +1 -1
  145. package/package/components/flows/types.d.ts +2 -1
  146. package/package/components/graph/FlowGraphV2.svelte +8 -104
  147. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  148. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  149. package/package/components/graph/graphBuilder.svelte.js +35 -9
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  152. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  153. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  154. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  155. package/package/components/graph/util.js +1 -1
  156. package/package/components/home/ItemsList.svelte +2 -0
  157. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  158. package/package/components/jobs/JobPreview.svelte +10 -6
  159. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  160. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  161. package/package/components/runs/JobPreview.svelte +26 -16
  162. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  163. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  164. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  165. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  166. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  167. package/package/components/script_builder.d.ts +2 -2
  168. package/package/components/settings/CreateToken.svelte +76 -41
  169. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  170. package/package/components/settings/ScopeSelector.svelte +613 -0
  171. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  172. package/package/components/settings/TokenDisplay.svelte +103 -0
  173. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  174. package/package/components/settings/TokensTable.svelte +70 -349
  175. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  176. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  177. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  178. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  179. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  180. package/package/components/triggers/TriggersEditor.svelte +45 -3
  181. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  182. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
  183. package/package/components/triggers/gcp/utils.js +9 -1
  184. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
  185. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  186. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  187. package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
  188. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  189. package/package/components/triggers/http/utils.js +9 -3
  190. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
  191. package/package/components/triggers/kafka/utils.js +9 -1
  192. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  193. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  194. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
  195. package/package/components/triggers/mqtt/utils.js +9 -1
  196. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
  197. package/package/components/triggers/nats/utils.js +9 -1
  198. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  199. package/package/components/triggers/postgres/utils.js +9 -1
  200. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
  201. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
  202. package/package/components/triggers/sqs/utils.js +9 -1
  203. package/package/components/triggers/utils.js +12 -0
  204. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
  205. package/package/components/triggers/websocket/utils.js +11 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  207. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  208. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  211. package/package/gen/core/OpenAPI.js +1 -1
  212. package/package/gen/schemas.gen.d.ts +305 -23
  213. package/package/gen/schemas.gen.js +305 -23
  214. package/package/gen/services.gen.d.ts +33 -1
  215. package/package/gen/services.gen.js +66 -2
  216. package/package/gen/types.gen.d.ts +216 -11
  217. package/package/history.svelte.js +0 -2
  218. package/package/hub.d.ts +1 -0
  219. package/package/hubPaths.json +5 -2
  220. package/package/infer.js +16 -10
  221. package/package/svelte5Utils.svelte.d.ts +1 -0
  222. package/package/svelte5Utils.svelte.js +25 -18
  223. package/package/toast.js +10 -0
  224. package/package/utils.d.ts +3 -2
  225. package/package/utils.js +20 -5
  226. package/package.json +11 -11
  227. package/package/components/ResultJobLoader.svelte +0 -219
  228. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  229. package/package/components/TestJobLoader.svelte +0 -274
  230. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  231. package/package/components/icons/AssetVarIcon.svelte +0 -31
  232. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  233. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -4,7 +4,7 @@
4
4
  <script lang="ts">import { onDestroy, tick } from 'svelte';
5
5
  import { fade } from 'svelte/transition';
6
6
  import {} from '../../gen';
7
- import TestJobLoader from '../TestJobLoader.svelte';
7
+ import JobLoader from '../JobLoader.svelte';
8
8
  import DisplayResult from '../DisplayResult.svelte';
9
9
  import JobArgs from '../JobArgs.svelte';
10
10
  import { writable } from 'svelte/store';
@@ -19,7 +19,7 @@ let job = $state(undefined);
19
19
  let hovered = $state(false);
20
20
  let timeout;
21
21
  let result = $state();
22
- let testJobLoader = $state();
22
+ let jobLoader = $state();
23
23
  let loaded = false;
24
24
  let wrapper = $state();
25
25
  let popupOnTop = $state(true);
@@ -31,7 +31,11 @@ async function instantOpen() {
31
31
  openStore.set(id);
32
32
  if (!loaded) {
33
33
  await tick();
34
- testJobLoader?.watchJob(id);
34
+ jobLoader?.watchJob(id, {
35
+ done(job) {
36
+ onDone(job);
37
+ }
38
+ });
35
39
  }
36
40
  }
37
41
  else {
@@ -58,8 +62,8 @@ function staggeredClose() {
58
62
  close();
59
63
  }, loaded ? 100 : 300);
60
64
  }
61
- function onDone(event) {
62
- job = event.detail;
65
+ function onDone(njob) {
66
+ job = njob;
63
67
  result = job['result'];
64
68
  loaded = true;
65
69
  }
@@ -70,7 +74,7 @@ onDestroy(() => {
70
74
 
71
75
  <svelte:window onkeydown={({ key }) => ['Escape', 'Esc'].includes(key) && close()} />
72
76
  {#if hovered}
73
- <TestJobLoader bind:job bind:this={testJobLoader} on:done={onDone} />
77
+ <JobLoader bind:job bind:this={jobLoader} />
74
78
  {/if}
75
79
 
76
80
  <!-- svelte-ignore a11y_no_static_element_interactions -->
@@ -9,7 +9,7 @@ import RawAppInputsSpecEditor from './RawAppInputsSpecEditor.svelte';
9
9
  import SplitPanesWrapper from '../splitPanes/SplitPanesWrapper.svelte';
10
10
  import SchemaForm from '../SchemaForm.svelte';
11
11
  import RunnableJobPanelInner from '../apps/editor/RunnableJobPanelInner.svelte';
12
- import TestJobLoader from '../TestJobLoader.svelte';
12
+ import JobLoader from '../JobLoader.svelte';
13
13
  let { runnable = $bindable(), id, appPath } = $props();
14
14
  const dispatch = createEventDispatcher();
15
15
  async function fork(nrunnable) {
@@ -37,7 +37,7 @@ function getSchema(runnable) {
37
37
  }
38
38
  return {};
39
39
  }
40
- let testJobLoader = $state();
40
+ let jobLoader = $state();
41
41
  let testJob = $state();
42
42
  let testIsLoading = $state(false);
43
43
  let scriptProgress = $state(0);
@@ -54,15 +54,15 @@ function onFieldsChange(fields) {
54
54
  async function testPreview() {
55
55
  selectedTab = 'test';
56
56
  if (runnable?.type == 'runnableByName' && runnable.inlineScript?.language != 'frontend') {
57
- await testJobLoader?.runPreview(appPath + '/' + id, runnable.inlineScript?.content ?? '', runnable.inlineScript?.language, args, undefined);
57
+ await jobLoader?.runPreview(appPath + '/' + id, runnable.inlineScript?.content ?? '', runnable.inlineScript?.language, args, undefined);
58
58
  }
59
59
  else if (runnable?.type == 'runnableByPath') {
60
- if (testJobLoader && runnable?.type == 'runnableByPath') {
60
+ if (jobLoader && runnable?.type == 'runnableByPath') {
61
61
  if (runnable.runType == 'flow') {
62
- await testJobLoader.runFlowByPath(runnable.path, args);
62
+ await jobLoader.runFlowByPath(runnable.path, args);
63
63
  }
64
64
  else if (runnable.runType == 'script' || runnable.runType == 'hubscript') {
65
- await testJobLoader.runScriptByPath(runnable.path, args);
65
+ await jobLoader.runScriptByPath(runnable.path, args);
66
66
  }
67
67
  }
68
68
  }
@@ -74,9 +74,10 @@ $effect(() => {
74
74
  });
75
75
  </script>
76
76
 
77
- <TestJobLoader
77
+ <JobLoader
78
+ noCode={true}
78
79
  bind:scriptProgress
79
- bind:this={testJobLoader}
80
+ bind:this={jobLoader}
80
81
  bind:isLoading={testIsLoading}
81
82
  bind:job={testJob}
82
83
  />
@@ -97,8 +98,8 @@ $effect(() => {
97
98
  isLoading={testIsLoading}
98
99
  onRun={testPreview}
99
100
  onCancel={async () => {
100
- if (testJobLoader) {
101
- await testJobLoader.cancelJob()
101
+ if (jobLoader) {
102
+ await jobLoader.cancelJob()
102
103
  }
103
104
  }}
104
105
  on:delete
@@ -116,8 +117,8 @@ $effect(() => {
116
117
  isLoading={testIsLoading}
117
118
  onRun={testPreview}
118
119
  onCancel={async () => {
119
- if (testJobLoader) {
120
- await testJobLoader.cancelJob()
120
+ if (jobLoader) {
121
+ await jobLoader.cancelJob()
121
122
  }
122
123
  }}
123
124
  />
@@ -12,6 +12,7 @@ import Alert from '../common/alert/Alert.svelte';
12
12
  import { batchReRunDefaultPropertyExpr, buildExtraLibForBatchReruns, mergeSchemasForBatchReruns } from '../jobs/batchReruns';
13
13
  import Toggle from '../Toggle.svelte';
14
14
  import { TriangleAlert } from 'lucide-svelte';
15
+ import { readFieldsRecursively } from '../../utils';
15
16
  let { selectedIds, options = $bindable() } = $props();
16
17
  let selected = $state();
17
18
  $effect(() => {
@@ -103,7 +104,10 @@ function propertyAlwaysHasSameType(propertyName, group) {
103
104
  const selectedUsesLatestSchema = $derived(!!selected &&
104
105
  (selected?.kind === 'flow' ||
105
106
  (options[selected.kind][selected.script_path]?.use_latest_version ?? false)));
106
- const jobGroupsPromise = $derived(selectedIds && untrack(() => fetchJobGroups()));
107
+ const jobGroupsPromise = $derived.by(() => {
108
+ readFieldsRecursively(selectedIds);
109
+ return untrack(() => fetchJobGroups());
110
+ });
107
111
  </script>
108
112
 
109
113
  <div class="flex-1 flex flex-col">
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">import { base } from '../../base';
2
2
  import { ConcurrencyGroupsService } from '../../gen';
3
- import TestJobLoader from '../TestJobLoader.svelte';
3
+ import JobLoader from '../JobLoader.svelte';
4
4
  import DisplayResult from '../DisplayResult.svelte';
5
5
  import JobArgs from '../JobArgs.svelte';
6
6
  import LogViewer from '../LogViewer.svelte';
@@ -14,13 +14,14 @@ import { workspaceStore } from '../../stores';
14
14
  import WorkflowTimeline from '../WorkflowTimeline.svelte';
15
15
  import Popover from '../Popover.svelte';
16
16
  import { isFlowPreview, isScriptPreview, truncateRev } from '../../utils';
17
- import { createEventDispatcher, untrack } from 'svelte';
17
+ import { createEventDispatcher, setContext, untrack } from 'svelte';
18
18
  import { ListFilter } from 'lucide-svelte';
19
+ import FlowAssetsHandler, { initFlowGraphAssetsCtx } from '../flows/FlowAssetsHandler.svelte';
20
+ import JobAssetsViewer from '../assets/JobAssetsViewer.svelte';
19
21
  let { id, blankLink = false, workspace } = $props();
20
22
  let job = $state(undefined);
21
23
  let result = $state();
22
- function onDone(event) {
23
- job = event.detail;
24
+ function onDone(job) {
24
25
  result = job['result'];
25
26
  }
26
27
  let currentJob = $state(undefined);
@@ -31,6 +32,7 @@ async function getConcurrencyKey(job) {
31
32
  concurrencyKey = await ConcurrencyGroupsService.getConcurrencyKey({ id: job.id });
32
33
  }
33
34
  let viewTab = $state('result');
35
+ setContext('FlowGraphAssetContext', initFlowGraphAssetsCtx({ getModules: () => job?.raw_flow?.modules ?? [] }));
34
36
  function asWorkflowStatus(x) {
35
37
  return x;
36
38
  }
@@ -41,24 +43,24 @@ $effect(() => {
41
43
  }
42
44
  });
43
45
  $effect(() => {
44
- id && testJobLoader && untrack(() => testJobLoader?.watchJob(id));
46
+ id &&
47
+ jobLoader &&
48
+ untrack(() => jobLoader?.watchJob(id, {
49
+ done(x) {
50
+ onDone(x);
51
+ }
52
+ }));
45
53
  });
46
54
  $effect(() => {
47
- job?.logs == undefined && job && viewTab == 'logs' && untrack(() => testJobLoader?.getLogs());
55
+ job?.logs == undefined && job && viewTab == 'logs' && untrack(() => jobLoader?.getLogs());
48
56
  });
49
57
  $effect(() => {
50
58
  job?.id && lastJobId !== job.id && untrack(() => job && getConcurrencyKey(job));
51
59
  });
52
- let testJobLoader = $state(undefined);
60
+ let jobLoader = $state(undefined);
53
61
  </script>
54
62
 
55
- <TestJobLoader
56
- lazyLogs
57
- workspaceOverride={workspace}
58
- bind:job={currentJob}
59
- bind:this={testJobLoader}
60
- on:done={onDone}
61
- />
63
+ <JobLoader lazyLogs workspaceOverride={workspace} bind:job={currentJob} bind:this={jobLoader} />
62
64
 
63
65
  <div class="p-4 flex flex-col gap-2 items-start h-full">
64
66
  {#if job}
@@ -165,9 +167,9 @@ let testJobLoader = $state(undefined);
165
167
  {/if}
166
168
 
167
169
  <div class=" w-full rounded-md min-h-full">
168
- {#if job?.is_flow_step == false && job?.flow_status && (isScriptPreview(job?.job_kind) || job?.job_kind == 'script') && !(typeof job.flow_status == 'object' && '_metadata' in job.flow_status)}
170
+ {#if job?.workflow_as_code_status}
169
171
  <WorkflowTimeline
170
- flow_status={asWorkflowStatus(job.flow_status)}
172
+ flow_status={asWorkflowStatus(job.workflow_as_code_status)}
171
173
  flowDone={job.type == 'CompletedJob'}
172
174
  />
173
175
  {/if}
@@ -176,6 +178,7 @@ let testJobLoader = $state(undefined);
176
178
  <Tabs bind:selected={viewTab}>
177
179
  <Tab size="xs" value="result">Result</Tab>
178
180
  <Tab size="xs" value="logs">Logs</Tab>
181
+ <Tab size="xs" value="assets">Assets</Tab>
179
182
  {#if isScriptPreview(job?.job_kind)}
180
183
  <Tab size="xs" value="code">Code</Tab>
181
184
  {/if}
@@ -189,6 +192,8 @@ let testJobLoader = $state(undefined);
189
192
  <FlowStatusViewer jobId={job.id} workspaceId={job.workspace_id} />
190
193
  </div>
191
194
  </div>
195
+ {:else if viewTab == 'assets'}
196
+ <JobAssetsViewer {job} />
192
197
  {:else}
193
198
  <div class="flex flex-col border rounded-md p-2 mt-2 h-full overflow-auto">
194
199
  {#if viewTab == 'logs'}
@@ -247,3 +252,8 @@ let testJobLoader = $state(undefined);
247
252
  </div>
248
253
  {/if}
249
254
  </div>
255
+ <FlowAssetsHandler
256
+ modules={job?.raw_flow?.modules ?? []}
257
+ enableDbExplore
258
+ enablePathScriptAndFlowAssets
259
+ />
@@ -40,9 +40,9 @@ interface Props {
40
40
  perPage?: number | undefined;
41
41
  allowWildcards?: boolean;
42
42
  }
43
- declare const JobLoader: import("svelte").Component<Props, {
43
+ declare const JobsLoader: import("svelte").Component<Props, {
44
44
  loadExtraJobs: () => Promise<boolean>;
45
45
  loadJobs: (nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean) => Promise<void>;
46
46
  }, "jobs" | "loading" | "minTs" | "maxTs" | "jobKinds" | "queue_count" | "suspended_count" | "completedJobs" | "externalJobs" | "extendedJobs">;
47
- type JobLoader = ReturnType<typeof JobLoader>;
48
- export default JobLoader;
47
+ type JobsLoader = ReturnType<typeof JobsLoader>;
48
+ export default JobsLoader;
@@ -2,7 +2,7 @@
2
2
  import { AlertTriangle } from 'lucide-svelte';
3
3
  import Popover from '../Popover.svelte';
4
4
  import { onDestroy } from 'svelte';
5
- let { tag } = $props();
5
+ let { tag, tagLabel = undefined } = $props();
6
6
  let noWorkerWithTag = $state(false);
7
7
  let timeout = undefined;
8
8
  let visible = true;
@@ -35,7 +35,7 @@ onDestroy(() => {
35
35
  <Popover notClickable placement="top">
36
36
  <AlertTriangle size={16} class="text-yellow-500" />
37
37
  {#snippet text()}
38
- No worker with tag <b>{tag}</b> is currently running.
38
+ No worker with {tagLabel ?? 'tag'} <b>{tag}</b> is currently running.
39
39
  {/snippet}
40
40
  </Popover>
41
41
  {/if}
@@ -1,5 +1,6 @@
1
1
  interface Props {
2
2
  tag: string;
3
+ tagLabel?: string;
3
4
  }
4
5
  declare const NoWorkerWithTagWarning: import("svelte").Component<Props, {}, "">;
5
6
  type NoWorkerWithTagWarning = ReturnType<typeof NoWorkerWithTagWarning>;
@@ -40,6 +40,6 @@ declare const RunsFilter: $$__sveltets_2_IsomorphicComponent<Props, {
40
40
  successChange: CustomEvent<any>;
41
41
  } & {
42
42
  [evt: string]: CustomEvent<any>;
43
- }, {}, {}, "path" | "tag" | "success" | "worker" | "folder" | "user" | "label" | "isSkipped" | "argFilter" | "resultFilter" | "schedulePath" | "jobKindsCat" | "concurrencyKey" | "argError" | "resultError" | "allWorkspaces" | "allowWildcards" | "filterBy">;
43
+ }, {}, {}, "path" | "tag" | "success" | "worker" | "label" | "folder" | "user" | "isSkipped" | "argFilter" | "resultFilter" | "schedulePath" | "jobKindsCat" | "concurrencyKey" | "argError" | "resultError" | "allWorkspaces" | "allowWildcards" | "filterBy">;
44
44
  type RunsFilter = InstanceType<typeof RunsFilter>;
45
45
  export default RunsFilter;
@@ -76,10 +76,10 @@ let forceJson = $state(false);
76
76
  {#if selectedTab === 'logs'}
77
77
  <SplitPanesWrapper>
78
78
  <Splitpanes horizontal>
79
- {#if previewJob?.is_flow_step == false && previewJob?.flow_status && !(typeof previewJob.flow_status == 'object' && '_metadata' in previewJob.flow_status)}
79
+ {#if previewJob?.workflow_as_code_status}
80
80
  <Pane class="relative">
81
81
  <WorkflowTimeline
82
- flow_status={asWorkflowStatus(previewJob.flow_status)}
82
+ flow_status={asWorkflowStatus(previewJob.workflow_as_code_status)}
83
83
  flowDone={previewJob.type == 'CompletedJob'}
84
84
  />
85
85
  </Pane>
@@ -93,6 +93,7 @@ let forceJson = $state(false);
93
93
  isLoading={previewJob?.['running'] == false && previewIsLoading}
94
94
  tag={previewJob?.tag}
95
95
  download={customUi?.disableDownload !== true}
96
+ tagLabel={customUi?.tagLabel}
96
97
  />
97
98
  </Pane>
98
99
  <Pane>
@@ -1,5 +1,5 @@
1
1
  import type { NewScript } from '../gen';
2
- import type { AssetWithAccessType } from './assets/lib';
2
+ import type { AssetWithAltAccessType } from './assets/lib';
3
3
  import type { ScriptBuilderWhitelabelCustomUi } from './custom_ui';
4
4
  import type { DiffDrawerI } from './diff_drawer';
5
5
  import type { ScriptBuilderFunctionExports } from './scriptBuilder';
@@ -8,7 +8,7 @@ import type { NewScriptWithDraftAndDraftTriggers, Trigger } from './triggers/uti
8
8
  export interface ScriptBuilderProps {
9
9
  script: NewScript & {
10
10
  draft_triggers?: Trigger[];
11
- fallback_access_types?: AssetWithAccessType[];
11
+ assets?: AssetWithAltAccessType[];
12
12
  };
13
13
  disableAi?: boolean;
14
14
  fullyLoaded?: boolean;
@@ -4,12 +4,13 @@ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
4
4
  import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
5
5
  import { triggerableByAI } from '../../actions/triggerableByAI.svelte';
6
6
  import Toggle from '../Toggle.svelte';
7
- import { UserService } from '../../gen';
8
- import { copyToClipboard } from '../../utils';
9
- import { Clipboard } from 'lucide-svelte';
10
- import ClipboardPanel from '../details/ClipboardPanel.svelte';
7
+ import { IntegrationService, UserService } from '../../gen';
11
8
  import { createEventDispatcher } from 'svelte';
12
- let { showMcpMode = false, defaultNewTokenWorkspace, scopes, actions, newTokenLabel = $bindable(undefined) } = $props();
9
+ import MultiSelect from '../select/MultiSelect.svelte';
10
+ import { safeSelectItems } from '../select/utils.svelte';
11
+ import TokenDisplay from './TokenDisplay.svelte';
12
+ import ScopeSelector from './ScopeSelector.svelte';
13
+ let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined) } = $props();
13
14
  let newToken = $state(undefined);
14
15
  let newMcpToken = $state(undefined);
15
16
  let newTokenExpiration = $state(undefined);
@@ -19,10 +20,9 @@ let mcpCreationMode = $state(false);
19
20
  let newMcpScope = $state('favorites');
20
21
  let loadingApps = $state(false);
21
22
  let errorFetchApps = $state(false);
22
- // let allApps = $state<string[]>([])
23
- function handleCopyClick() {
24
- copyToClipboard(newToken ?? '');
25
- }
23
+ let allApps = $state([]);
24
+ let customScopes = $state([]);
25
+ let showCustomScopes = $state(false);
26
26
  const dispatch = createEventDispatcher();
27
27
  function ensureCurrentWorkspaceIncluded(workspacesList, currentWorkspace) {
28
28
  if (!currentWorkspace) {
@@ -47,6 +47,9 @@ async function createToken(mcpMode = false) {
47
47
  tokenScopes.push(`mcp:hub:${newMcpApps.join(',')}`);
48
48
  }
49
49
  }
50
+ else if (showCustomScopes && customScopes.length > 0) {
51
+ tokenScopes = customScopes;
52
+ }
50
53
  const createdToken = await UserService.createToken({
51
54
  requestBody: {
52
55
  label: newTokenLabel,
@@ -62,8 +65,8 @@ async function createToken(mcpMode = false) {
62
65
  newToken = `${createdToken}`;
63
66
  }
64
67
  dispatch('tokenCreated', newToken ?? newMcpToken);
65
- if (actions) {
66
- actions();
68
+ if (onTokenCreated) {
69
+ onTokenCreated(newToken ?? newMcpToken ?? '');
67
70
  }
68
71
  mcpCreationMode = false;
69
72
  }
@@ -73,37 +76,36 @@ async function createToken(mcpMode = false) {
73
76
  }
74
77
  const workspaces = $derived(ensureCurrentWorkspaceIncluded($userWorkspaces, $workspaceStore));
75
78
  const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorkspace}/sse?token=`);
79
+ $effect(() => {
80
+ if (mcpCreationMode) {
81
+ getAllApps();
82
+ }
83
+ else {
84
+ newMcpApps = [];
85
+ }
86
+ });
87
+ async function getAllApps() {
88
+ if (allApps.length > 0) {
89
+ return;
90
+ }
91
+ try {
92
+ loadingApps = true;
93
+ allApps = (await IntegrationService.listHubIntegrations({
94
+ kind: 'script'
95
+ })).map((x) => x.name);
96
+ }
97
+ catch (err) {
98
+ console.error('Hub is not available');
99
+ allApps = [];
100
+ errorFetchApps = true;
101
+ }
102
+ finally {
103
+ loadingApps = false;
104
+ }
105
+ }
76
106
  </script>
77
107
 
78
108
  <div>
79
- {#if newToken}
80
- <div
81
- class="border rounded-md mb-6 px-2 py-2 bg-green-50 dark:bg-green-200 dark:text-green-800 flex flex-row flex-wrap"
82
- >
83
- <div>
84
- Added token: <button onclick={handleCopyClick} class="inline-flex gap-2 items-center">
85
- {newToken}
86
- <Clipboard size={12} />
87
- </button>
88
- </div>
89
- <div class="pt-1 text-xs ml-2">
90
- Make sure to copy your personal access token now. You won't be able to see it again!
91
- </div>
92
- </div>
93
- {/if}
94
-
95
- {#if newMcpToken}
96
- <div
97
- class="border rounded-md mb-6 px-2 py-2 bg-green-50 dark:bg-green-200 dark:text-green-800 flex flex-row flex-wrap"
98
- >
99
- <p class="text-sm mb-2">New MCP URL:</p>
100
- <ClipboardPanel content={`${mcpBaseUrl}${newMcpToken}`} />
101
- <p class="pt-1 text-xs">
102
- Make sure to copy this URL now. You won't be able to see it again!
103
- </p>
104
- </div>
105
- {/if}
106
-
107
109
  <div class="py-3 px-3 border rounded-md mb-6 bg-surface-secondary min-w-min">
108
110
  <h3 class="pb-3 font-semibold">Add a new token</h3>
109
111
 
@@ -149,7 +151,27 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
149
151
  </div>
150
152
  {/if}
151
153
 
152
- <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
154
+ {#if !mcpCreationMode && (!scopes || scopes.length === 0)}
155
+ <div class="flex flex-col gap-2">
156
+ <Toggle
157
+ checked={showCustomScopes}
158
+ on:change={(e) => {
159
+ showCustomScopes = e.detail
160
+ }}
161
+ options={{
162
+ right: 'Limit token permissions',
163
+ rightTooltip:
164
+ 'By default, tokens have full API access. Enable this to restrict the token to specific scopes.'
165
+ }}
166
+ size="xs"
167
+ />
168
+ {#if showCustomScopes}
169
+ <ScopeSelector bind:selectedScopes={customScopes} />
170
+ {/if}
171
+ </div>
172
+ {/if}
173
+
174
+ <div class="mt-2 grid grid-cols-1 md:grid-cols-2 gap-4">
153
175
  {#if mcpCreationMode}
154
176
  <div>
155
177
  <span class="block mb-1">Scope</span>
@@ -178,7 +200,12 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
178
200
  {:else if errorFetchApps}
179
201
  <div>Error fetching apps</div>
180
202
  {:else}
181
- <!-- MultiSelectWrapper was confirmed not to be necessary : deleted -->
203
+ <MultiSelect
204
+ items={safeSelectItems(allApps)}
205
+ placeholder="Select apps"
206
+ bind:value={newMcpApps}
207
+ class="!bg-surface"
208
+ />
182
209
  {/if}
183
210
  </div>
184
211
 
@@ -232,4 +259,12 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
232
259
  </Button>
233
260
  </div>
234
261
  </div>
262
+
263
+ {#if newToken}
264
+ <TokenDisplay token={newToken} type="token" />
265
+ {/if}
266
+
267
+ {#if newMcpToken}
268
+ <TokenDisplay token={newMcpToken} type="mcp" mcpUrl={`${mcpBaseUrl}${newMcpToken}`} />
269
+ {/if}
235
270
  </div>
@@ -4,7 +4,7 @@ interface Props {
4
4
  newTokenLabel?: string;
5
5
  defaultNewTokenWorkspace?: string;
6
6
  scopes?: string[];
7
- actions?: () => void;
7
+ onTokenCreated?: (token: string) => void;
8
8
  displayCreateToken?: boolean;
9
9
  }
10
10
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {