windmill-components 1.522.0 → 1.531.1

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 (272) hide show
  1. package/package/components/AIAgentLogViewer.svelte +123 -0
  2. package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
  3. package/package/components/AppConnectInner.svelte +10 -10
  4. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  5. package/package/components/Dev.svelte +12 -28
  6. package/package/components/DiffEditor.svelte +6 -3
  7. package/package/components/DiffEditor.svelte.d.ts +1 -0
  8. package/package/components/DisplayResult.svelte +16 -10
  9. package/package/components/DisplayResult.svelte.d.ts +1 -0
  10. package/package/components/EditableSchemaForm.svelte +5 -2
  11. package/package/components/Editor.svelte +26 -8
  12. package/package/components/Editor.svelte.d.ts +1 -1
  13. package/package/components/EditorBar.svelte +25 -5
  14. package/package/components/EditorSettings.svelte +6 -0
  15. package/package/components/FirstStepInputs.svelte +2 -2
  16. package/package/components/FlowBuilder.svelte +18 -36
  17. package/package/components/FlowGraphViewerStep.svelte +7 -0
  18. package/package/components/FlowJobResult.svelte +15 -63
  19. package/package/components/FlowJobResult.svelte.d.ts +10 -4
  20. package/package/components/FlowLogViewer.svelte +660 -0
  21. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  22. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  23. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  24. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  25. package/package/components/FlowPreviewContent.svelte +4 -5
  26. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  27. package/package/components/FlowPreviewResult.svelte +4 -5
  28. package/package/components/FlowPreviewResult.svelte.d.ts +3 -5
  29. package/package/components/FlowStatusViewer.svelte +28 -16
  30. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  31. package/package/components/FlowStatusViewerInner.svelte +483 -296
  32. package/package/components/FlowStatusViewerInner.svelte.d.ts +27 -33
  33. package/package/components/FlowTimeline.svelte +11 -13
  34. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  35. package/package/components/FlowWrapper.svelte +3 -2
  36. package/package/components/HighlightCode.svelte +4 -1
  37. package/package/components/IconedResourceType.svelte +9 -5
  38. package/package/components/JobLoader.svelte +61 -8
  39. package/package/components/JobLoader.svelte.d.ts +9 -1
  40. package/package/components/LogViewer.svelte +8 -2
  41. package/package/components/LogViewer.svelte.d.ts +1 -0
  42. package/package/components/LogViewerHeader.svelte +32 -0
  43. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  44. package/package/components/ModulePreviewForm.svelte +10 -6
  45. package/package/components/ModulePreviewResultViewer.svelte +16 -0
  46. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  47. package/package/components/ModuleTest.svelte +59 -16
  48. package/package/components/RelativeLineNumbers.svelte +16 -0
  49. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  50. package/package/components/ResourceEditor.svelte +9 -4
  51. package/package/components/ScriptBuilder.svelte +13 -11
  52. package/package/components/ScriptEditor.svelte +2 -2
  53. package/package/components/SimpleEditor.svelte +10 -4
  54. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  55. package/package/components/TemplateEditor.svelte +1 -1
  56. package/package/components/UserSettings.svelte +4 -4
  57. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  58. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  59. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  60. package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
  61. package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
  62. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  63. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  64. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  65. package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
  66. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  67. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  68. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  69. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  70. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  71. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  72. package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
  73. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  74. package/package/components/apps/components/layout/AppList.svelte +9 -8
  75. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  76. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  77. package/package/components/apps/components/layout/AppStepper.svelte +9 -5
  78. package/package/components/apps/components/layout/AppTabs.svelte +2 -2
  79. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  80. package/package/components/apps/editor/GridEditor.svelte +24 -19
  81. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  82. package/package/components/apps/editor/GridViewer.svelte +1 -1
  83. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  84. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  85. package/package/components/apps/editor/appUtils.js +17 -68
  86. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  87. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  88. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
  90. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  93. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  94. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  95. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  96. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  97. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  98. package/package/components/apps/utils.d.ts +2 -0
  99. package/package/components/apps/utils.js +22 -0
  100. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  101. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  102. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  103. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  104. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  105. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  106. package/package/components/copilot/MetadataGen.svelte +19 -1
  107. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  108. package/package/components/copilot/ScriptGen.svelte +23 -31
  109. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  110. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  111. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  112. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
  114. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  115. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  116. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  117. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  118. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  119. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  120. package/package/components/copilot/chat/api/apiTools.js +192 -0
  121. package/package/components/copilot/chat/api/core.d.ts +7 -0
  122. package/package/components/copilot/chat/api/core.js +61 -0
  123. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  124. package/package/components/copilot/chat/flow/core.js +213 -42
  125. package/package/components/copilot/chat/flow/utils.js +3 -0
  126. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  127. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  128. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  129. package/package/components/copilot/chat/navigator/core.js +20 -22
  130. package/package/components/copilot/chat/script/core.d.ts +11 -3
  131. package/package/components/copilot/chat/script/core.js +92 -15
  132. package/package/components/copilot/chat/shared.d.ts +30 -3
  133. package/package/components/copilot/chat/shared.js +228 -9
  134. package/package/components/copilot/lib.d.ts +1 -1
  135. package/package/components/copilot/lib.js +15 -6
  136. package/package/components/custom_ui.d.ts +2 -0
  137. package/package/components/details/DetailPageLayout.svelte +34 -33
  138. package/package/components/flow_builder.d.ts +1 -2
  139. package/package/components/flows/FlowEditor.svelte +3 -3
  140. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  141. package/package/components/flows/common/FlowCard.svelte +2 -2
  142. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  143. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  144. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  145. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  146. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  147. package/package/components/flows/content/FlowConstants.svelte +3 -3
  148. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  149. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  150. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  151. package/package/components/flows/content/FlowLoop.svelte +2 -2
  152. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  153. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  154. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  155. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  156. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  157. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  158. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  159. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  160. package/package/components/flows/content/FlowResult.svelte +2 -3
  161. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  162. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  163. package/package/components/flows/dfs.d.ts +3 -1
  164. package/package/components/flows/dfs.js +5 -1
  165. package/package/components/flows/flowInfers.js +78 -0
  166. package/package/components/flows/flowState.d.ts +2 -3
  167. package/package/components/flows/flowState.js +2 -2
  168. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  169. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  170. package/package/components/flows/flowStore.d.ts +3 -4
  171. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  172. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  173. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  174. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  175. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  176. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
  177. package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
  178. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  179. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  180. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  181. package/package/components/flows/map/MapItem.svelte +4 -2
  182. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  183. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  184. package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
  186. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  187. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  188. package/package/components/flows/testSteps.svelte.js +26 -23
  189. package/package/components/flows/types.d.ts +1 -1
  190. package/package/components/flows/utils.d.ts +3 -5
  191. package/package/components/flows/utils.js +3 -4
  192. package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
  193. package/package/components/graph/FlowGraphV2.svelte +44 -24
  194. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  195. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  196. package/package/components/graph/graphBuilder.svelte.js +30 -14
  197. package/package/components/graph/model.d.ts +9 -6
  198. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  199. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  200. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  201. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  202. package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
  203. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  204. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  205. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  206. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  207. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  208. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  209. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  210. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  211. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  212. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  213. package/package/components/icons/RubyIcon.svelte +656 -0
  214. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  215. package/package/components/instanceSettings.js +9 -0
  216. package/package/components/modulesTest.svelte.d.ts +6 -3
  217. package/package/components/modulesTest.svelte.js +32 -0
  218. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  219. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  220. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  221. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
  222. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  223. package/package/components/runs/RunRow.svelte +5 -1
  224. package/package/components/schema/AddProperty.svelte +41 -36
  225. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  226. package/package/components/schema/AddPropertyV2.svelte +41 -37
  227. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  228. package/package/components/schema/FlowPropertyEditor.svelte +8 -6
  229. package/package/components/search/RunsSearch.svelte +1 -1
  230. package/package/components/settings/CreateToken.svelte +132 -12
  231. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  232. package/package/components/settings/TokenDisplay.svelte +18 -42
  233. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  234. package/package/components/settings/TokensTable.svelte +2 -4
  235. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  236. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  237. package/package/components/sidebar/MenuButton.svelte +12 -10
  238. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  239. package/package/components/stepHistoryLoader.svelte.js +7 -12
  240. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  241. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  242. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  243. package/package/components/tutorials/utils.js +3 -0
  244. package/package/components/worker_group.d.ts +4 -1
  245. package/package/components/worker_group.js +3 -2
  246. package/package/editorLangUtils.d.ts +1 -1
  247. package/package/editorLangUtils.js +2 -0
  248. package/package/editorUtils.d.ts +2 -1
  249. package/package/editorUtils.js +2 -1
  250. package/package/gen/core/OpenAPI.js +1 -1
  251. package/package/gen/schemas.gen.d.ts +296 -8
  252. package/package/gen/schemas.gen.js +364 -70
  253. package/package/gen/services.gen.d.ts +118 -16
  254. package/package/gen/services.gen.js +226 -19
  255. package/package/gen/types.gen.d.ts +660 -16
  256. package/package/hubPaths.json +7 -4
  257. package/package/infer.js +10 -1
  258. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  259. package/package/script_helpers.d.ts +3 -0
  260. package/package/script_helpers.js +58 -3
  261. package/package/scripts.d.ts +1 -1
  262. package/package/scripts.js +3 -2
  263. package/package/stores.d.ts +2 -0
  264. package/package/stores.js +2 -0
  265. package/package/svelte5Utils.svelte.d.ts +16 -0
  266. package/package/svelte5Utils.svelte.js +26 -0
  267. package/package/utils.d.ts +1 -1
  268. package/package.json +20 -19
  269. package/package/components/AllFlowLogs.svelte +0 -31
  270. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  271. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  272. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">import BarsStaggered from '../../icons/BarsStaggered.svelte';
2
- import { CheckCircle2, ChevronRight, Code, GitBranch, Repeat, Square, Zap } from 'lucide-svelte';
2
+ import { BotIcon, CheckCircle2, ChevronRight, Code, GitBranch, Repeat, Square, Zap } from 'lucide-svelte';
3
3
  import { createEventDispatcher } from 'svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  export let label;
@@ -51,6 +51,9 @@ const dispatch = createEventDispatcher();
51
51
  {:else if label === 'Branch to all'}
52
52
  <GitBranch size={14} />
53
53
  Branch to all
54
+ {:else if label === 'AI Agent'}
55
+ <BotIcon size={14} />
56
+ AI Agent
54
57
  {/if}
55
58
  </span>
56
59
  {#if returnIcon && selected}
@@ -5,13 +5,14 @@ import { DollarSign, Pencil, RefreshCw, SquareFunction } from 'lucide-svelte';
5
5
  let { inputTransform, id, onEditInput } = $props();
6
6
  const { flowStore, flowStateStore, testSteps, previewArgs } = getContext('FlowEditorContext') || {};
7
7
  onMount(() => {
8
- testSteps?.updateStepArgs(id, $flowStateStore, flowStore?.val, previewArgs?.val);
8
+ testSteps?.updateStepArgs(id, flowStateStore?.val, flowStore?.val, previewArgs?.val);
9
9
  });
10
- const input = $derived(testSteps?.getStepArgs(id)?.value);
10
+ const input = $derived(testSteps?.getStepArgs(id));
11
11
  </script>
12
12
 
13
13
  <div class="p-4 pr-6 h-full overflow-y-auto">
14
- <ObjectViewer json={input} {inputTransform} {metaData} {editKey} />
14
+ <!-- {JSON.stringify({ inputTransform, input })} -->
15
+ <ObjectViewer json={input} {metaData} {editKey} />
15
16
  </div>
16
17
 
17
18
  {#snippet metaData(key: string)}
@@ -31,7 +32,7 @@ const input = $derived(testSteps?.getStepArgs(id)?.value);
31
32
  {#if testSteps?.isArgManuallySet(id, key)}
32
33
  <button
33
34
  onclick={() => {
34
- testSteps?.evalArg(id, key, $flowStateStore, flowStore?.val, previewArgs?.val)
35
+ testSteps?.evalArg(id, key, flowStateStore?.val, flowStore?.val, previewArgs?.val)
35
36
  }}
36
37
  title="Re-evaluate input"
37
38
  class="-my-1 ml-0.5 hover:text-primary dark:hover:text-primary dark:text-gray-500 text-gray-300"
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">import { twMerge } from 'tailwind-merge';
2
2
  import { base } from '../../../base';
3
3
  import { ExternalLink } from 'lucide-svelte';
4
+ import { emptyString } from '../../../utils';
4
5
  export let job = undefined;
5
6
  </script>
6
7
 
@@ -22,17 +23,18 @@ export let job = undefined;
22
23
  )}
23
24
  title={'success' in job && job.success ? 'Success' : 'Failed'}
24
25
  ></div>
25
-
26
26
  <span class="text-xs truncate" dir="rtl" title={`job id: ${job.id}`}>
27
27
  {job.id.slice(-5)}
28
28
  </span>
29
- <a
30
- target="_blank"
31
- href="{base}/run/{job.id}?workspace={job.workspace_id}"
32
- class="text-right float-right text-gray-300 group-hover:text-gray-400 transition-all duration-200 dark:text-gray-500 dark:group-hover:text-gray-300"
33
- title="See run detail in a new tab"
34
- >
35
- <ExternalLink size={12} />
36
- </a>
29
+ {#if !emptyString(job.id)}
30
+ <a
31
+ target="_blank"
32
+ href="{base}/run/{job.id}?workspace={job.workspace_id}"
33
+ class="text-right float-right text-gray-300 group-hover:text-gray-400 transition-all duration-200 dark:text-gray-500 dark:group-hover:text-gray-300"
34
+ title="See run detail in a new tab"
35
+ >
36
+ <ExternalLink size={12} />
37
+ </a>
38
+ {/if}
37
39
  </div>
38
40
  {/if}
@@ -329,6 +329,15 @@ const copilot_fix_render = $derived(copilot_fix);
329
329
  >
330
330
  {/if}
331
331
  </div>
332
+ {:else if testJob}
333
+ <!-- {JSON.stringify(testJob)} -->
334
+ <OutputBadge
335
+ job={testJob}
336
+ class={twMerge(
337
+ 'min-w-16 text-secondary',
338
+ preview || testJob?.id !== job?.id ? 'bg-surface shadow-sm h-[23px]' : ''
339
+ )}
340
+ />
332
341
  {/if}
333
342
 
334
343
  {#if !disableMock && !isLoadingAndNotMock}
@@ -418,7 +427,7 @@ const copilot_fix_render = $derived(copilot_fix);
418
427
  </div>
419
428
 
420
429
  <div class="px-2">
421
- {#if selectedJob && 'result' in selectedJob && displayResultJob && toolbarLocationJob === 'external'}
430
+ {#if selectedJob && displayResultJob && toolbarLocationJob === 'external'}
422
431
  <DisplayResultControlBar
423
432
  workspaceId={selectedJob.workspace_id}
424
433
  jobId={selectedJob.id}
@@ -56,6 +56,6 @@ interface Props {
56
56
  onResetInitial?: () => void;
57
57
  customEmptyJobMessage?: string;
58
58
  }
59
- declare const OutputPickerInner: import("svelte").Component<Props, {}, "preview" | "forceJson" | "isLoading" | "mock" | "selectedJob" | "derivedHistoryOpen">;
59
+ declare const OutputPickerInner: import("svelte").Component<Props, {}, "preview" | "forceJson" | "mock" | "isLoading" | "selectedJob" | "derivedHistoryOpen">;
60
60
  type OutputPickerInner = ReturnType<typeof OutputPickerInner>;
61
61
  export default OutputPickerInner;
@@ -1,13 +1,14 @@
1
1
  import type { FlowModule, OpenFlow } from '../../gen';
2
2
  import type { FlowState } from './flowState';
3
3
  import { type PickableProperties } from './previousResults';
4
- import { type ModuleArgs } from './utils';
5
4
  export declare class TestSteps {
6
5
  #private;
7
6
  constructor();
8
7
  setStepArgsManually(moduleId: string, args: Record<string, any>): void;
9
- getStepArgs(moduleId: string): ModuleArgs | undefined;
8
+ getStepArgs(moduleId: string): Record<string, any> | undefined;
9
+ getStepInputArgs(moduleId: string, argName: string): any | undefined;
10
10
  setStepArgs(moduleId: string, args: Record<string, any>): void;
11
+ setStepInputArgs(moduleId: string, argName: string, value: any): void;
11
12
  getStepArg(moduleId: string, argName: string): any | undefined;
12
13
  setEvaluatedStepArg(moduleId: string, argName: string, value: any): void;
13
14
  isArgManuallySet(moduleId: string, argName: string): boolean;
@@ -5,40 +5,43 @@ export class TestSteps {
5
5
  #steps = $state({});
6
6
  constructor() { }
7
7
  setStepArgsManually(moduleId, args) {
8
- if (!this.#steps[moduleId]) {
9
- this.#steps[moduleId] = { value: {} };
10
- }
11
- this.#steps[moduleId].value = args;
8
+ this.#steps[moduleId] = args;
12
9
  }
13
10
  getStepArgs(moduleId) {
14
11
  return this.#steps[moduleId];
15
12
  }
13
+ getStepInputArgs(moduleId, argName) {
14
+ return this.#steps[moduleId]?.[argName];
15
+ }
16
16
  setStepArgs(moduleId, args) {
17
+ this.#steps[moduleId] = args;
18
+ }
19
+ setStepInputArgs(moduleId, argName, value) {
17
20
  if (!this.#steps[moduleId]) {
18
- this.#steps[moduleId] = { value: {} };
21
+ this.#steps[moduleId] = {};
19
22
  }
20
- this.#steps[moduleId].value = args;
23
+ this.#steps[moduleId][argName] = value;
21
24
  }
22
25
  getStepArg(moduleId, argName) {
23
26
  return this.#steps[moduleId]?.[argName];
24
27
  }
25
28
  setEvaluatedStepArg(moduleId, argName, value) {
26
29
  if (!this.#steps[moduleId]) {
27
- this.#steps[moduleId] = { value: {} };
30
+ this.#steps[moduleId] = {};
28
31
  }
29
32
  if (!this.#stepsEvaluated[moduleId]) {
30
- this.#stepsEvaluated[moduleId] = { value: {} };
33
+ this.#stepsEvaluated[moduleId] = {};
31
34
  }
32
- this.#steps[moduleId].value[argName] = $state.snapshot(value);
33
- this.#stepsEvaluated[moduleId].value[argName] = $state.snapshot(value);
35
+ this.#steps[moduleId][argName] = $state.snapshot(value);
36
+ this.#stepsEvaluated[moduleId][argName] = $state.snapshot(value);
34
37
  }
35
38
  isArgManuallySet(moduleId, argName) {
36
- return (JSON.stringify(this.#steps[moduleId]?.value?.[argName]) !==
37
- JSON.stringify(this.#stepsEvaluated[moduleId]?.value?.[argName]));
39
+ return (JSON.stringify(this.#steps[moduleId]?.[argName]) !==
40
+ JSON.stringify(this.#stepsEvaluated[moduleId]?.[argName]));
38
41
  }
39
42
  getManuallyEditedArgs(moduleId) {
40
43
  const manuallyEditedArgs = [];
41
- const moduleArgs = this.#steps[moduleId]?.value ?? {};
44
+ const moduleArgs = this.#steps[moduleId] ?? {};
42
45
  Object.keys(moduleArgs).forEach((argName) => {
43
46
  if (this.isArgManuallySet(moduleId, argName)) {
44
47
  manuallyEditedArgs.push(argName);
@@ -65,8 +68,8 @@ export class TestSteps {
65
68
  const stepPropPicker = getStepPropPicker(flowState, parentModule, previousModule, moduleId, flow, previewArgs, false);
66
69
  const pickableProperties = stepPropPicker.pickableProperties;
67
70
  const argSnapshot = $state.snapshot(evalValue(argName, modules[0], pickableProperties, false));
68
- this.#stepsEvaluated[moduleId].value[argName] = argSnapshot;
69
- this.#steps[moduleId].value[argName] = structuredClone(argSnapshot);
71
+ this.#stepsEvaluated[moduleId][argName] = argSnapshot;
72
+ this.#steps[moduleId][argName] = structuredClone(argSnapshot);
70
73
  }
71
74
  initializeFromSchema(mod, schema, pickableProperties) {
72
75
  const args = Object.fromEntries(Object.keys(schema.properties ?? {}).map((k) => [
@@ -75,20 +78,20 @@ export class TestSteps {
75
78
  ]));
76
79
  const manuallyEditedArgs = this.getManuallyEditedArgs(mod.id);
77
80
  if (!this.#steps[mod.id]) {
78
- this.#steps[mod.id] = { value: {} };
81
+ this.#steps[mod.id] = {};
79
82
  }
80
83
  if (!this.#stepsEvaluated[mod.id]) {
81
- this.#stepsEvaluated[mod.id] = { value: {} };
84
+ this.#stepsEvaluated[mod.id] = {};
82
85
  }
83
- this.#stepsEvaluated[mod.id].value = $state.snapshot(args);
86
+ this.#stepsEvaluated[mod.id] = $state.snapshot(args);
84
87
  // Preserve manually edited args
85
88
  const argsSnapshot = $state.snapshot(args);
86
89
  Object.keys(argsSnapshot).forEach((key) => {
87
90
  if (manuallyEditedArgs.includes(key)) {
88
- argsSnapshot[key] = this.#steps[mod.id]?.value?.[key];
91
+ argsSnapshot[key] = this.#steps[mod.id]?.[key];
89
92
  }
90
93
  });
91
- this.#steps[mod.id].value = argsSnapshot;
94
+ this.#steps[mod.id] = argsSnapshot;
92
95
  }
93
96
  updateStepArgs(id, flowState, flow, previewArgs) {
94
97
  if (!flowState || !flow) {
@@ -112,11 +115,11 @@ export class TestSteps {
112
115
  return;
113
116
  }
114
117
  const nargs = {};
115
- Object.keys(this.#stepsEvaluated[moduleId]?.value ?? {}).forEach((key) => {
118
+ Object.keys(this.#stepsEvaluated[moduleId] ?? {}).forEach((key) => {
116
119
  if (keys.includes(key)) {
117
- nargs[key] = this.#stepsEvaluated[moduleId]?.value?.[key];
120
+ nargs[key] = this.#stepsEvaluated[moduleId]?.[key];
118
121
  }
119
122
  });
120
- this.#stepsEvaluated[moduleId].value = nargs;
123
+ this.#stepsEvaluated[moduleId] = nargs;
121
124
  }
122
125
  }
@@ -56,7 +56,7 @@ export type FlowEditorContext = {
56
56
  pathStore: Writable<string>;
57
57
  flowStore: StateStore<ExtendedOpenFlow>;
58
58
  flowInputEditorState: Writable<FlowInputEditorState>;
59
- flowStateStore: Writable<FlowState>;
59
+ flowStateStore: StateStore<FlowState>;
60
60
  testSteps: TestSteps;
61
61
  saveDraft: () => void;
62
62
  initialPathStore: Writable<string>;
@@ -1,13 +1,9 @@
1
1
  import { type FlowModule, type Job, type RestartedFrom, type OpenFlow } from '../../gen';
2
- import { type Writable } from 'svelte/store';
3
2
  import type { FlowModuleState } from './flowState';
4
3
  import { type PickableProperties } from './previousResults';
5
4
  import type { ExtendedOpenFlow } from './types';
6
5
  import type { GraphModuleState } from '../graph';
7
6
  import type { ModulesTestStates } from '../modulesTest.svelte';
8
- export type ModuleArgs = {
9
- value: Record<string, any>;
10
- };
11
7
  export declare function evalValue(k: string, mod: FlowModule, pickableProperties: PickableProperties | undefined, showError: boolean): any;
12
8
  export declare function filteredContentForExport(flow: ExtendedOpenFlow): {
13
9
  summary: string;
@@ -40,4 +36,6 @@ export declare function checkIfParentLoop(flowStore: ExtendedOpenFlow, modId: st
40
36
  * Extracts job information and converts it to GraphModuleState format
41
37
  * for graph rendering
42
38
  */
43
- export declare function updateDerivedModuleStatesFromTestJobs(moduleId: string | undefined, moduleTestStates: ModulesTestStates | undefined, moduleStates: Writable<Record<string, GraphModuleState>> | undefined): void;
39
+ export declare function updateDerivedModuleStatesFromTestJobs(moduleId: string | undefined, moduleTestStates: ModulesTestStates | undefined, moduleStates: Record<string, GraphModuleState> | undefined): {
40
+ [x: string]: GraphModuleState;
41
+ } | undefined;
@@ -181,9 +181,8 @@ export function updateDerivedModuleStatesFromTestJobs(moduleId, moduleTestStates
181
181
  };
182
182
  }
183
183
  }
184
- // Update the store with test job states
185
- moduleStates.update((currentStates) => ({
186
- ...currentStates,
184
+ return {
185
+ ...moduleStates,
187
186
  ...newStates
188
- }));
187
+ };
189
188
  }
@@ -386,7 +386,8 @@ export function createGitSyncContext(workspace) {
386
386
  workspace,
387
387
  path: hubPaths.gitSyncTest,
388
388
  requestBody: {
389
- repo_url_resource_path: repo.git_repo_resource_path
389
+ repo_url_resource_path: repo.git_repo_resource_path,
390
+ init: repo.isUnsavedConnection || false
390
391
  },
391
392
  skipPreprocessor: true
392
393
  });
@@ -4,7 +4,7 @@ import { getContext, onDestroy, setContext, tick, untrack } from 'svelte';
4
4
  import { get, writable } from 'svelte/store';
5
5
  import '@xyflow/svelte/dist/base.css';
6
6
  import { SvelteFlow, ConnectionLineType, Controls, ControlButton, SvelteFlowProvider } from '@xyflow/svelte';
7
- import { graphBuilder, isTriggerStep } from './graphBuilder.svelte';
7
+ import { graphBuilder, isTriggerStep, topologicalSort } from './graphBuilder.svelte';
8
8
  import ModuleNode from './renderers/nodes/ModuleNode.svelte';
9
9
  import InputNode from './renderers/nodes/InputNode.svelte';
10
10
  import BranchAllStart from './renderers/nodes/BranchAllStart.svelte';
@@ -29,16 +29,19 @@ import FlowYamlEditor from '../flows/header/FlowYamlEditor.svelte';
29
29
  import BranchOneEndNode from './renderers/nodes/branchOneEndNode.svelte';
30
30
  import { workspaceStore } from '../../stores';
31
31
  import SubflowBound from './renderers/nodes/SubflowBound.svelte';
32
- import { deepEqual } from 'fast-equals';
33
32
  import ViewportResizer from './ViewportResizer.svelte';
34
33
  import AssetNode, { computeAssetNodes } from './renderers/nodes/AssetNode.svelte';
35
34
  import AssetsOverflowedNode from './renderers/nodes/AssetsOverflowedNode.svelte';
35
+ import AiToolNode, { computeAIToolNodes } from './renderers/nodes/AIToolNode.svelte';
36
+ import NewAiToolNode from './renderers/nodes/NewAIToolNode.svelte';
37
+ import { ChangeTracker } from '../../svelte5Utils.svelte';
38
+ import { deepEqual } from 'fast-equals';
36
39
  let useDataflow = writable(false);
37
40
  const triggerContext = getContext('TriggerContext');
38
41
  let fullWidth = 0;
39
42
  let width = $state(0);
40
43
  let simplifiableFlow = $state(undefined);
41
- let { onInsert = undefined, onDelete = undefined, onMove = undefined, onDeleteBranch = undefined, onNewBranch = undefined, onSelect = undefined, onChangeId = undefined, onUpdateMock = undefined, onSelectedIteration = undefined, success = undefined, modules = [], failureModule = undefined, preprocessorModule = undefined, minHeight = 0, maxHeight = undefined, notSelectable = false, flowModuleStates = undefined, selectedId = writable(undefined), path = undefined, newFlow = false, insertable = false, earlyStop = false, cache = false, scroll = false, moving = undefined, download = false, fullSize = false, disableAi = false, triggerNode = false, workspace = $workspaceStore ?? 'NO_WORKSPACE', editMode = false, allowSimplifiedPoll = true, expandedSubflows = $bindable({}), onTestUpTo = undefined, onEditInput = undefined, isOwner = false, onTestFlow = undefined, isRunning = false, onCancelTestFlow = undefined, onOpenPreview = undefined, onHideJobStatus = undefined, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = writable({}), flowHasChanged = false } = $props();
44
+ let { onInsert = undefined, onDelete = undefined, onMove = undefined, onDeleteBranch = undefined, onNewBranch = undefined, onSelect = undefined, onChangeId = undefined, onUpdateMock = undefined, onSelectedIteration = undefined, success = undefined, modules = [], failureModule = undefined, preprocessorModule = undefined, minHeight = 0, maxHeight = undefined, notSelectable = false, flowModuleStates = undefined, testModuleStates = undefined, selectedId = writable(undefined), path = undefined, newFlow = false, insertable = false, earlyStop = false, cache = false, scroll = false, moving = undefined, download = false, fullSize = false, disableAi = false, triggerNode = false, workspace = $workspaceStore ?? 'NO_WORKSPACE', editMode = false, allowSimplifiedPoll = true, expandedSubflows = $bindable({}), onTestUpTo = undefined, onEditInput = undefined, isOwner = false, onTestFlow = undefined, isRunning = false, onCancelTestFlow = undefined, onOpenPreview = undefined, onHideJobStatus = undefined, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = {}, flowHasChanged = false } = $props();
42
45
  setContext('FlowGraphContext', { selectedId, useDataflow });
43
46
  if (triggerContext && allowSimplifiedPoll) {
44
47
  if (isSimplifiable(modules)) {
@@ -63,9 +66,11 @@ function onModulesChange(modules) {
63
66
  let lastNodes = undefined;
64
67
  function layoutNodes(nodes) {
65
68
  let lastResult = lastNodes?.[1];
66
- if (lastResult && nodes === lastNodes?.[0]) {
69
+ if (lastResult && deepEqual(nodes, lastNodes?.[0])) {
70
+ console.debug('layoutNodes', 'same nodes');
67
71
  return lastResult;
68
72
  }
73
+ console.debug('layoutNodes', nodes.length);
69
74
  let seenId = [];
70
75
  for (const n of nodes) {
71
76
  if (seenId.includes(n.id)) {
@@ -77,7 +82,7 @@ function layoutNodes(nodes) {
77
82
  const nodes2 = nodes.map((n) => {
78
83
  return { ...n, position: { x: 0, y: 0 } };
79
84
  });
80
- for (const n of nodes.reverse()) {
85
+ for (const n of topologicalSort(nodes)) {
81
86
  const endId = n.id + '-end';
82
87
  if (nodeWidths[endId] != undefined) {
83
88
  nodeWidths[n.id] = Math.max(nodeWidths[n.id] ?? 0, nodeWidths[endId]);
@@ -111,12 +116,11 @@ function layoutNodes(nodes) {
111
116
  }
112
117
  const yOffset = insertable ? 100 : 0;
113
118
  const newNodes = dag.descendants().map((des) => ({
114
- ...des.data,
115
119
  id: des.data.id,
116
120
  position: {
117
121
  x: des.x
118
122
  ? // @ts-ignore
119
- (des.data.data.offset ?? 0) +
123
+ (des.data.offset ?? 0) +
120
124
  // @ts-ignore
121
125
  des.x +
122
126
  (fullSize ? fullWidth : width) / 2 -
@@ -195,14 +199,7 @@ let eventHandler = {
195
199
  onHideJobStatus?.();
196
200
  }
197
201
  };
198
- let lastModules = $state.snapshot(modules);
199
- let moduleCounter = $state(0);
200
- function onModulesChange2(modules) {
201
- if (!deepEqual(modules, lastModules)) {
202
- lastModules = $state.snapshot(modules);
203
- moduleCounter++;
204
- }
205
- }
202
+ let moduleTracker = new ChangeTracker($state.snapshot(modules));
206
203
  let nodes = $state.raw([]);
207
204
  let edges = $state.raw([]);
208
205
  let height = $state(0);
@@ -220,9 +217,29 @@ async function updateStores() {
220
217
  if (graph.error) {
221
218
  return;
222
219
  }
223
- let newGraph = graph;
224
- newGraph.nodes.sort((a, b) => b.id.localeCompare(a.id));
225
- [nodes, edges] = computeAssetNodes(layoutNodes(newGraph.nodes), newGraph.edges);
220
+ // console.log('compute')
221
+ let layoutedNodes = layoutNodes(Object.values(graph.nodes).map((n) => ({
222
+ id: n.id,
223
+ parentIds: n.parentIds,
224
+ offset: n.data.offset ?? 0
225
+ })));
226
+ let newNodes = layoutedNodes.map((n) => ({ ...n, ...graph.nodes[n.id] }));
227
+ let assetNodesResult = computeAssetNodes(newNodes.map((n) => ({
228
+ data: { assets: n.data?.assets },
229
+ id: n.id,
230
+ position: n.position
231
+ })));
232
+ newNodes = newNodes.map((n) => ({
233
+ ...n,
234
+ position: assetNodesResult.newNodePositions[n.id]
235
+ }));
236
+ let aiToolNodesResult = computeAIToolNodes(newNodes, eventHandler, insertable, flowModuleStates);
237
+ nodes = [
238
+ ...newNodes.map((n) => ({ ...n, position: aiToolNodesResult.newNodePositions[n.id] })),
239
+ ...assetNodesResult.newAssetNodes,
240
+ ...aiToolNodesResult.toolNodes
241
+ ];
242
+ edges = [...assetNodesResult.newAssetEdges, ...aiToolNodesResult.toolEdges, ...graph.edges];
226
243
  await tick();
227
244
  height = Math.max(...nodes.map((n) => n.position.y + NODE.height + 100), minHeight);
228
245
  }
@@ -242,7 +259,9 @@ const nodeTypes = {
242
259
  noBranch: NoBranchNode,
243
260
  trigger: TriggersNode,
244
261
  asset: AssetNode,
245
- assetsOverflowed: AssetsOverflowedNode
262
+ assetsOverflowed: AssetsOverflowedNode,
263
+ aiTool: AiToolNode,
264
+ newAiTool: NewAiToolNode
246
265
  };
247
266
  const edgeTypes = {
248
267
  edge: BaseEdge,
@@ -261,15 +280,16 @@ $effect(() => {
261
280
  });
262
281
  $effect(() => {
263
282
  readFieldsRecursively(modules);
264
- untrack(() => onModulesChange2(modules));
283
+ untrack(() => moduleTracker.track($state.snapshot(modules)));
265
284
  });
266
285
  let graph = $derived.by(() => {
267
- moduleCounter;
286
+ moduleTracker.counter;
268
287
  return graphBuilder(untrack(() => modules), {
269
288
  disableAi,
270
289
  insertable,
271
- flowModuleStates,
272
- selectedId: $selectedId,
290
+ flowModuleStates: untrack(() => flowModuleStates),
291
+ testModuleStates: untrack(() => testModuleStates),
292
+ selectedId: untrack(() => $selectedId),
273
293
  path,
274
294
  newFlow,
275
295
  cache,
@@ -283,7 +303,7 @@ let graph = $derived.by(() => {
283
303
  suspendStatus,
284
304
  flowHasChanged,
285
305
  additionalAssetsMap: flowGraphAssetsCtx?.val.additionalAssetsMap
286
- }, failureModule, preprocessorModule, eventHandler, success, $useDataflow, $selectedId, moving, simplifiableFlow, triggerNode ? path : undefined, expandedSubflows);
306
+ }, untrack(() => failureModule), untrack(() => preprocessorModule), eventHandler, success, $useDataflow, untrack(() => $selectedId), moving, simplifiableFlow, triggerNode ? path : undefined, expandedSubflows);
287
307
  });
288
308
  $effect(() => {
289
309
  ;
@@ -3,6 +3,7 @@ import { type GraphModuleState } from '.';
3
3
  import { type Writable } from 'svelte/store';
4
4
  import '@xyflow/svelte/dist/base.css';
5
5
  import { type InlineScript, type InsertKind, type onSelectedIteration } from './graphBuilder.svelte';
6
+ import type { ModulesTestStates } from '../modulesTest.svelte';
6
7
  interface Props {
7
8
  success?: boolean | undefined;
8
9
  modules?: FlowModule[] | undefined;
@@ -12,6 +13,7 @@ interface Props {
12
13
  maxHeight?: number | undefined;
13
14
  notSelectable?: boolean;
14
15
  flowModuleStates?: Record<string, GraphModuleState> | undefined;
16
+ testModuleStates?: ModulesTestStates;
15
17
  selectedId?: Writable<string | undefined>;
16
18
  path?: string | undefined;
17
19
  newFlow?: boolean;
@@ -33,10 +35,10 @@ interface Props {
33
35
  individualStepTests?: boolean;
34
36
  flowJob?: Job | undefined;
35
37
  showJobStatus?: boolean;
36
- suspendStatus?: Writable<Record<string, {
38
+ suspendStatus?: Record<string, {
37
39
  job: Job;
38
40
  nb: number;
39
- }>>;
41
+ }>;
40
42
  onDelete?: (id: string) => void;
41
43
  onInsert?: (detail: {
42
44
  sourceId?: string;
@@ -48,6 +50,7 @@ interface Props {
48
50
  index: number;
49
51
  detail: string;
50
52
  isPreprocessor?: boolean;
53
+ agentId?: string;
51
54
  inlineScript?: InlineScript;
52
55
  script?: {
53
56
  path: string;