windmill-components 1.522.0 → 1.531.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 (271) 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/HighlightCode.svelte +4 -1
  36. package/package/components/IconedResourceType.svelte +9 -5
  37. package/package/components/JobLoader.svelte +61 -8
  38. package/package/components/JobLoader.svelte.d.ts +9 -1
  39. package/package/components/LogViewer.svelte +8 -2
  40. package/package/components/LogViewer.svelte.d.ts +1 -0
  41. package/package/components/LogViewerHeader.svelte +32 -0
  42. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  43. package/package/components/ModulePreviewForm.svelte +10 -6
  44. package/package/components/ModulePreviewResultViewer.svelte +16 -0
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  46. package/package/components/ModuleTest.svelte +59 -16
  47. package/package/components/RelativeLineNumbers.svelte +16 -0
  48. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  49. package/package/components/ResourceEditor.svelte +9 -4
  50. package/package/components/ScriptBuilder.svelte +13 -11
  51. package/package/components/ScriptEditor.svelte +2 -2
  52. package/package/components/SimpleEditor.svelte +10 -4
  53. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  54. package/package/components/TemplateEditor.svelte +1 -1
  55. package/package/components/UserSettings.svelte +4 -4
  56. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  57. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  58. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  59. package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
  60. package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
  61. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  62. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  63. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  64. package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
  65. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  66. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  67. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  68. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  69. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  70. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  71. package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
  72. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  73. package/package/components/apps/components/layout/AppList.svelte +9 -8
  74. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  75. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  76. package/package/components/apps/components/layout/AppStepper.svelte +9 -5
  77. package/package/components/apps/components/layout/AppTabs.svelte +2 -2
  78. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  79. package/package/components/apps/editor/GridEditor.svelte +24 -19
  80. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  81. package/package/components/apps/editor/GridViewer.svelte +1 -1
  82. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  83. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  84. package/package/components/apps/editor/appUtils.js +17 -68
  85. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  86. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  87. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
  88. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
  89. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  90. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  91. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  92. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  93. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  94. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  95. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  96. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  97. package/package/components/apps/utils.d.ts +2 -0
  98. package/package/components/apps/utils.js +22 -0
  99. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  100. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  101. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  102. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  103. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  104. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  105. package/package/components/copilot/MetadataGen.svelte +19 -1
  106. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  107. package/package/components/copilot/ScriptGen.svelte +23 -31
  108. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  110. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  111. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  112. package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
  113. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  114. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  115. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  116. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  117. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  118. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  119. package/package/components/copilot/chat/api/apiTools.js +192 -0
  120. package/package/components/copilot/chat/api/core.d.ts +7 -0
  121. package/package/components/copilot/chat/api/core.js +61 -0
  122. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  123. package/package/components/copilot/chat/flow/core.js +213 -42
  124. package/package/components/copilot/chat/flow/utils.js +3 -0
  125. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  126. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  127. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  128. package/package/components/copilot/chat/navigator/core.js +20 -22
  129. package/package/components/copilot/chat/script/core.d.ts +11 -3
  130. package/package/components/copilot/chat/script/core.js +92 -15
  131. package/package/components/copilot/chat/shared.d.ts +30 -3
  132. package/package/components/copilot/chat/shared.js +228 -9
  133. package/package/components/copilot/lib.d.ts +1 -1
  134. package/package/components/copilot/lib.js +15 -6
  135. package/package/components/custom_ui.d.ts +2 -0
  136. package/package/components/details/DetailPageLayout.svelte +34 -33
  137. package/package/components/flow_builder.d.ts +1 -2
  138. package/package/components/flows/FlowEditor.svelte +3 -3
  139. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  140. package/package/components/flows/common/FlowCard.svelte +2 -2
  141. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  142. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  143. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  144. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  145. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  146. package/package/components/flows/content/FlowConstants.svelte +3 -3
  147. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  148. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  149. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  150. package/package/components/flows/content/FlowLoop.svelte +2 -2
  151. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  152. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  153. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  154. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  155. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  157. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  158. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  159. package/package/components/flows/content/FlowResult.svelte +2 -3
  160. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  161. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  162. package/package/components/flows/dfs.d.ts +3 -1
  163. package/package/components/flows/dfs.js +5 -1
  164. package/package/components/flows/flowInfers.js +78 -0
  165. package/package/components/flows/flowState.d.ts +2 -3
  166. package/package/components/flows/flowState.js +2 -2
  167. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  168. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  169. package/package/components/flows/flowStore.d.ts +3 -4
  170. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  171. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  172. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  173. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  174. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  175. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
  176. package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
  177. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  178. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  179. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  180. package/package/components/flows/map/MapItem.svelte +4 -2
  181. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  182. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  183. package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
  184. package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  186. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  187. package/package/components/flows/testSteps.svelte.js +26 -23
  188. package/package/components/flows/types.d.ts +1 -1
  189. package/package/components/flows/utils.d.ts +3 -5
  190. package/package/components/flows/utils.js +3 -4
  191. package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
  192. package/package/components/graph/FlowGraphV2.svelte +44 -24
  193. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  194. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  195. package/package/components/graph/graphBuilder.svelte.js +30 -14
  196. package/package/components/graph/model.d.ts +9 -6
  197. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  198. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  199. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  200. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  201. package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
  202. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  203. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  204. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  205. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  206. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  207. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  208. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  209. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  210. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  211. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  212. package/package/components/icons/RubyIcon.svelte +656 -0
  213. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  214. package/package/components/instanceSettings.js +9 -0
  215. package/package/components/modulesTest.svelte.d.ts +6 -3
  216. package/package/components/modulesTest.svelte.js +32 -0
  217. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  218. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  219. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  220. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
  221. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  222. package/package/components/runs/RunRow.svelte +5 -1
  223. package/package/components/schema/AddProperty.svelte +41 -36
  224. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  225. package/package/components/schema/AddPropertyV2.svelte +41 -37
  226. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  227. package/package/components/schema/FlowPropertyEditor.svelte +8 -6
  228. package/package/components/search/RunsSearch.svelte +1 -1
  229. package/package/components/settings/CreateToken.svelte +132 -12
  230. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  231. package/package/components/settings/TokenDisplay.svelte +18 -42
  232. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  233. package/package/components/settings/TokensTable.svelte +2 -4
  234. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  235. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  236. package/package/components/sidebar/MenuButton.svelte +12 -10
  237. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  238. package/package/components/stepHistoryLoader.svelte.js +7 -12
  239. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  240. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  241. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  242. package/package/components/tutorials/utils.js +3 -0
  243. package/package/components/worker_group.d.ts +4 -1
  244. package/package/components/worker_group.js +3 -2
  245. package/package/editorLangUtils.d.ts +1 -1
  246. package/package/editorLangUtils.js +2 -0
  247. package/package/editorUtils.d.ts +2 -1
  248. package/package/editorUtils.js +2 -1
  249. package/package/gen/core/OpenAPI.js +1 -1
  250. package/package/gen/schemas.gen.d.ts +296 -8
  251. package/package/gen/schemas.gen.js +364 -70
  252. package/package/gen/services.gen.d.ts +118 -16
  253. package/package/gen/services.gen.js +226 -19
  254. package/package/gen/types.gen.d.ts +660 -16
  255. package/package/hubPaths.json +7 -4
  256. package/package/infer.js +10 -1
  257. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  258. package/package/script_helpers.d.ts +3 -0
  259. package/package/script_helpers.js +58 -3
  260. package/package/scripts.d.ts +1 -1
  261. package/package/scripts.js +3 -2
  262. package/package/stores.d.ts +2 -0
  263. package/package/stores.js +2 -0
  264. package/package/svelte5Utils.svelte.d.ts +16 -0
  265. package/package/svelte5Utils.svelte.js +26 -0
  266. package/package/utils.d.ts +1 -1
  267. package/package.json +20 -19
  268. package/package/components/AllFlowLogs.svelte +0 -31
  269. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  270. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  271. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
@@ -49,7 +49,7 @@ import { refreshStateStore } from '../../../svelte5Utils.svelte';
49
49
  import { getStepHistoryLoaderContext } from '../../stepHistoryLoader.svelte';
50
50
  import AssetsDropdownButton from '../../assets/AssetsDropdownButton.svelte';
51
51
  const { selectedId, currentEditor, previewArgs, flowStateStore, flowStore, pathStore, saveDraft, customUi, executionCount } = getContext('FlowEditorContext');
52
- let { flowModule = $bindable(), failureModule = false, preprocessorModule = false, parentModule = $bindable(), previousModule, scriptKind = 'script', scriptTemplate = 'script', noEditor, enableAi, savedModule = undefined, forceTestTab = false, highlightArg = undefined } = $props();
52
+ let { flowModule = $bindable(), failureModule = false, preprocessorModule = false, parentModule = $bindable(), previousModule, scriptKind = 'script', scriptTemplate = 'script', noEditor, enableAi, savedModule = undefined, forceTestTab = false, highlightArg = undefined, isAgentTool = false } = $props();
53
53
  let workspaceScriptTag = $state(undefined);
54
54
  let workspaceScriptLang = $state(undefined);
55
55
  let diffMode = $state(false);
@@ -63,7 +63,7 @@ let websocketAlive = $state({
63
63
  ruff: false,
64
64
  shellcheck: false
65
65
  });
66
- let selected = $state(preprocessorModule ? 'test' : 'inputs');
66
+ let selected = $state(preprocessorModule || isAgentTool ? 'test' : 'inputs');
67
67
  let advancedSelected = $state('retries');
68
68
  let advancedRuntimeSelected = $state('concurrency');
69
69
  let s3Kind = $state('s3_client');
@@ -95,6 +95,7 @@ async function reload(flowModule) {
95
95
  reloadError = undefined;
96
96
  try {
97
97
  const { input_transforms, schema } = await loadSchemaFromModule(flowModule);
98
+ console.log('reload', schema);
98
99
  validCode = true;
99
100
  if (inputTransformSchemaForm) {
100
101
  inputTransformSchemaForm.setArgs(input_transforms);
@@ -102,7 +103,8 @@ async function reload(flowModule) {
102
103
  else {
103
104
  if (flowModule.value.type == 'rawscript' ||
104
105
  flowModule.value.type == 'script' ||
105
- flowModule.value.type == 'flow') {
106
+ flowModule.value.type == 'flow' ||
107
+ flowModule.value.type == 'aiagent') {
106
108
  if (!deepEqual(flowModule.value.input_transforms, input_transforms)) {
107
109
  flowModule.value.input_transforms = input_transforms;
108
110
  }
@@ -114,12 +116,12 @@ async function reload(flowModule) {
114
116
  }
115
117
  }
116
118
  await tick();
117
- if (!deepEqual(schema, $flowStateStore[flowModule.id]?.schema)) {
118
- if (!$flowStateStore[flowModule.id]) {
119
- $flowStateStore[flowModule.id] = { schema };
119
+ if (!deepEqual(schema, flowStateStore.val[flowModule.id]?.schema)) {
120
+ if (!flowStateStore.val[flowModule.id]) {
121
+ flowStateStore.val[flowModule.id] = { schema };
120
122
  }
121
123
  else {
122
- $flowStateStore[flowModule.id].schema = schema;
124
+ flowStateStore.val[flowModule.id].schema = schema;
123
125
  }
124
126
  }
125
127
  }
@@ -138,32 +140,31 @@ let editorSettingsPanelSize = $state(100 - untrack(() => editorPanelSize));
138
140
  let stepHistoryLoader = getStepHistoryLoaderContext();
139
141
  let lastJobId = undefined;
140
142
  function onSelectedIdChange() {
141
- if (!$flowStateStore?.[$selectedId]?.schema && flowModule) {
143
+ if (!flowStateStore?.val?.[$selectedId]?.schema && flowModule) {
142
144
  reload(flowModule);
143
145
  }
144
146
  lastJobId = undefined;
145
147
  }
146
148
  async function getLastJob() {
147
- if (!$flowStateStore ||
149
+ if (!flowStateStore ||
148
150
  !flowModule.id ||
149
- $flowStateStore[flowModule.id]?.previewResult === 'never tested this far' ||
150
- !$flowStateStore[flowModule.id]?.previewJobId ||
151
- !$flowStateStore[flowModule.id]?.previewWorkspaceId) {
151
+ flowStateStore.val[flowModule.id]?.previewResult === 'never tested this far' ||
152
+ !flowStateStore.val[flowModule.id]?.previewJobId) {
152
153
  return;
153
154
  }
154
- if (lastJobId == $flowStateStore[flowModule.id]?.previewJobId ||
155
- lastJob?.id == $flowStateStore[flowModule.id]?.previewJobId ||
156
- $flowStateStore[flowModule.id]?.previewSuccess == undefined) {
155
+ if (lastJobId == flowStateStore.val[flowModule.id]?.previewJobId ||
156
+ lastJob?.id == flowStateStore.val[flowModule.id]?.previewJobId ||
157
+ flowStateStore.val[flowModule.id]?.previewSuccess == undefined) {
157
158
  return;
158
159
  }
159
- lastJobId = $flowStateStore[flowModule.id]?.previewJobId;
160
+ lastJobId = flowStateStore.val[flowModule.id]?.previewJobId;
160
161
  const job = await JobService.getJob({
161
- workspace: $flowStateStore[flowModule.id]?.previewWorkspaceId ?? '',
162
- id: $flowStateStore[flowModule.id]?.previewJobId ?? '',
162
+ workspace: $workspaceStore ?? '',
163
+ id: flowStateStore.val[flowModule.id]?.previewJobId ?? '',
163
164
  noCode: true
164
165
  });
165
166
  if (job && job.type === 'CompletedJob') {
166
- lastJobId = $flowStateStore[flowModule.id]?.previewJobId;
167
+ lastJobId = flowStateStore.val[flowModule.id]?.previewJobId;
167
168
  lastJob = job;
168
169
  }
169
170
  }
@@ -182,8 +183,8 @@ function hideDiffMode() {
182
183
  }
183
184
  let lastDeployedCode = $derived(onModulesChange(savedModule, flowModule));
184
185
  let stepPropPicker = $derived($executionCount != undefined && failureModule
185
- ? getFailureStepPropPicker($flowStateStore, flowStore.val, previewArgs.val)
186
- : getStepPropPicker($flowStateStore, parentModule, previousModule, flowModule.id, flowStore.val, previewArgs.val, false));
186
+ ? getFailureStepPropPicker(flowStateStore.val, flowStore.val, previewArgs.val)
187
+ : getStepPropPicker(flowStateStore.val, parentModule, previousModule, flowModule.id, flowStore.val, previewArgs.val, false));
187
188
  $effect.pre(() => {
188
189
  $selectedId && untrack(() => onSelectedIdChange());
189
190
  });
@@ -191,7 +192,7 @@ $effect(() => {
191
192
  if (testJob && testJob.type === 'CompletedJob') {
192
193
  lastJob = $state.snapshot(testJob);
193
194
  }
194
- else if ($workspaceStore && $pathStore && flowModule?.id && $flowStateStore) {
195
+ else if ($workspaceStore && $pathStore && flowModule?.id && flowStateStore) {
195
196
  untrack(() => getLastJob());
196
197
  }
197
198
  });
@@ -252,6 +253,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
252
253
  }
253
254
  }}
254
255
  bind:summary={flowModule.summary}
256
+ {isAgentTool}
255
257
  >
256
258
  {#snippet header()}
257
259
  <FlowModuleHeader
@@ -276,7 +278,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
276
278
  on:fork={async () => {
277
279
  const [module, state] = await fork(flowModule)
278
280
  flowModule = module
279
- $flowStateStore[module.id] = state
281
+ flowStateStore.val[module.id] = state
280
282
  }}
281
283
  on:reload={async () => {
282
284
  if (flowModule.value.type == 'script') {
@@ -295,14 +297,14 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
295
297
  const [module, state] = await createScriptFromInlineScript(
296
298
  flowModule,
297
299
  $selectedId,
298
- $flowStateStore[flowModule.id].schema,
300
+ flowStateStore.val[flowModule.id].schema,
299
301
  $pathStore
300
302
  )
301
303
  if (flowModule.value.type == 'rawscript') {
302
304
  module.value.input_transforms = flowModule.value.input_transforms
303
305
  }
304
306
  flowModule = module
305
- $flowStateStore[module.id] = state
307
+ flowStateStore.val[module.id] = state
306
308
  }}
307
309
  />
308
310
  {/snippet}
@@ -335,97 +337,117 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
335
337
 
336
338
  <div class="min-h-0 flex-grow" id="flow-editor-editor">
337
339
  <Splitpanes horizontal>
338
- <Pane bind:size={editorPanelSize} minSize={10} class="relative">
339
- {#if flowModule.value.type === 'rawscript'}
340
- {#if !noEditor}
341
- {#key flowModule.id}
342
- <div class="absolute top-2 right-4 z-10 flex flex-row gap-2">
343
- {#if assets?.length}
344
- <AssetsDropdownButton {assets} />
345
- {/if}
346
- </div>
347
- <Editor
348
- loadAsync
349
- folding
350
- path={$pathStore + '/' + flowModule.id}
351
- bind:websocketAlive
352
- bind:this={editor}
353
- class="h-full relative"
354
- code={flowModule.value.content}
355
- scriptLang={flowModule?.value?.language}
356
- automaticLayout={true}
357
- cmdEnterAction={async () => {
358
- selected = 'test'
359
- if ($selectedId == flowModule.id) {
360
- if (flowModule.value.type === 'rawscript' && editor) {
361
- flowModule.value.content = editor.getCode()
340
+ {#if flowModule.value.type !== 'aiagent'}
341
+ <Pane bind:size={editorPanelSize} minSize={10} class="relative">
342
+ {#if flowModule.value.type === 'rawscript'}
343
+ {#if !noEditor}
344
+ {#key flowModule.id}
345
+ <div class="absolute top-2 right-4 z-10 flex flex-row gap-2">
346
+ {#if assets?.length}
347
+ <AssetsDropdownButton {assets} />
348
+ {/if}
349
+ </div>
350
+ <Editor
351
+ loadAsync
352
+ folding
353
+ path={$pathStore + '/' + flowModule.id}
354
+ bind:websocketAlive
355
+ bind:this={editor}
356
+ class="h-full relative"
357
+ code={flowModule.value.content}
358
+ scriptLang={flowModule?.value?.language}
359
+ automaticLayout={true}
360
+ cmdEnterAction={async () => {
361
+ selected = 'test'
362
+ if ($selectedId == flowModule.id) {
363
+ if (flowModule.value.type === 'rawscript' && editor) {
364
+ flowModule.value.content = editor.getCode()
365
+ }
366
+ await reload(flowModule)
367
+ modulePreview?.runTestWithStepArgs()
362
368
  }
363
- await reload(flowModule)
364
- modulePreview?.runTestWithStepArgs()
365
- }
366
- }}
367
- on:change={async (event) => {
368
- const content = event.detail
369
- if (flowModule.value.type === 'rawscript') {
370
- if (flowModule.value.content !== content) {
371
- flowModule.value.content = content
369
+ }}
370
+ on:change={async (event) => {
371
+ const content = event.detail
372
+ if (flowModule.value.type === 'rawscript') {
373
+ if (flowModule.value.content !== content) {
374
+ flowModule.value.content = content
375
+ }
376
+ await reload(flowModule)
372
377
  }
373
- await reload(flowModule)
374
- }
375
- }}
376
- formatAction={() => {
377
- reload(flowModule)
378
- saveDraft()
379
- }}
380
- fixedOverflowWidgets={true}
381
- args={Object.entries(flowModule.value.input_transforms).reduce(
382
- (acc, [key, obj]) => {
383
- acc[key] = obj.type === 'static' ? obj.value : undefined
384
- return acc
385
- },
386
- {}
387
- )}
388
- key={`flow-inline-${$workspaceStore}-${$pathStore}-${flowModule.id}`}
389
- />
390
- <DiffEditor
391
- open={false}
392
- bind:this={diffEditor}
393
- automaticLayout
394
- fixedOverflowWidgets
395
- defaultLang={scriptLangToEditorLang(flowModule.value.language)}
396
- class="h-full"
397
- />
398
- {/key}
399
- {/if}
400
- {:else if flowModule.value.type === 'script'}
401
- {#if !noEditor && (customUi?.hubCode != false || !flowModule?.value?.path?.startsWith('hub/'))}
402
- <div class="border-t">
403
- {#key forceReload}
404
- <FlowModuleScript
405
- bind:tag={workspaceScriptTag}
406
- bind:language={workspaceScriptLang}
407
- showAllCode={false}
408
- path={flowModule.value.path}
409
- hash={flowModule.value.hash}
378
+ }}
379
+ formatAction={() => {
380
+ reload(flowModule)
381
+ saveDraft()
382
+ }}
383
+ fixedOverflowWidgets={true}
384
+ args={Object.entries(flowModule.value.input_transforms).reduce(
385
+ (acc, [key, obj]) => {
386
+ acc[key] = obj.type === 'static' ? obj.value : undefined
387
+ return acc
388
+ },
389
+ {}
390
+ )}
391
+ key={`flow-inline-${$workspaceStore}-${$pathStore}-${flowModule.id}`}
392
+ />
393
+ <DiffEditor
394
+ open={false}
395
+ bind:this={diffEditor}
396
+ automaticLayout
397
+ fixedOverflowWidgets
398
+ defaultLang={scriptLangToEditorLang(flowModule.value.language)}
399
+ class="h-full"
400
+ showButtons={diffMode}
401
+ showHistoryButton={false}
402
+ on:hideDiffMode={hideDiffMode}
410
403
  />
411
404
  {/key}
412
- </div>
405
+ {/if}
406
+ {:else if flowModule.value.type === 'script'}
407
+ {#if !noEditor && (customUi?.hubCode != false || !flowModule?.value?.path?.startsWith('hub/'))}
408
+ <div class="border-t">
409
+ {#key forceReload}
410
+ <FlowModuleScript
411
+ bind:tag={workspaceScriptTag}
412
+ bind:language={workspaceScriptLang}
413
+ showAllCode={false}
414
+ path={flowModule.value.path}
415
+ hash={flowModule.value.hash}
416
+ />
417
+ {/key}
418
+ </div>
419
+ {/if}
420
+ {:else if flowModule.value.type === 'flow'}
421
+ {#key forceReload}
422
+ <FlowPathViewer path={flowModule.value.path} />
423
+ {/key}
413
424
  {/if}
414
- {:else if flowModule.value.type === 'flow'}
415
- {#key forceReload}
416
- <FlowPathViewer path={flowModule.value.path} />
417
- {/key}
418
- {/if}
419
- </Pane>
420
- <Pane bind:size={editorSettingsPanelSize} minSize={20}>
425
+ </Pane>
426
+ {/if}
427
+ <Pane
428
+ bind:size={
429
+ () => {
430
+ if (flowModule.value.type === 'aiagent') {
431
+ return 100
432
+ }
433
+ return editorSettingsPanelSize
434
+ },
435
+ (v) => {
436
+ if (flowModule.value.type !== 'aiagent') {
437
+ editorSettingsPanelSize = v
438
+ }
439
+ }
440
+ }
441
+ minSize={20}
442
+ >
421
443
  <Splitpanes>
422
444
  <Pane minSize={36} bind:size={leftPanelSize}>
423
445
  <Tabs bind:selected>
424
- {#if !preprocessorModule}
446
+ {#if !preprocessorModule && !isAgentTool}
425
447
  <Tab value="inputs">Step Input</Tab>
426
448
  {/if}
427
449
  <Tab value="test">Test this step</Tab>
428
- {#if !preprocessorModule}
450
+ {#if !preprocessorModule && !isAgentTool}
429
451
  <Tab value="advanced">Advanced</Tab>
430
452
  {/if}
431
453
  </Tabs>
@@ -434,7 +456,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
434
456
  ? 'h-[calc(100%-68px)]'
435
457
  : 'h-[calc(100%-34px)]'}
436
458
  >
437
- {#if selected === 'inputs' && (flowModule.value.type == 'rawscript' || flowModule.value.type == 'script' || flowModule.value.type == 'flow')}
459
+ {#if selected === 'inputs' && (flowModule.value.type == 'rawscript' || flowModule.value.type == 'script' || flowModule.value.type == 'flow' || flowModule.value.type == 'aiagent')}
438
460
  <div class="h-full overflow-auto bg-surface" id="flow-editor-step-input">
439
461
  <PropPickerWrapper
440
462
  pickableProperties={stepPropPicker.pickableProperties}
@@ -451,7 +473,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
451
473
  class="px-1 xl:px-2"
452
474
  bind:this={inputTransformSchemaForm}
453
475
  pickableProperties={stepPropPicker.pickableProperties}
454
- schema={$flowStateStore[$selectedId]?.schema ?? {}}
476
+ schema={flowStateStore.val[$selectedId]?.schema ?? {}}
455
477
  previousModuleId={previousModule?.id}
456
478
  bind:args={
457
479
  () => {
@@ -479,7 +501,7 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
479
501
  bind:this={modulePreview}
480
502
  mod={flowModule}
481
503
  {noEditor}
482
- schema={$flowStateStore[$selectedId]?.schema ?? {}}
504
+ schema={flowStateStore.val[$selectedId]?.schema ?? {}}
483
505
  bind:testJob
484
506
  bind:testIsLoading
485
507
  bind:scriptProgress
@@ -12,6 +12,7 @@ interface Props {
12
12
  savedModule?: FlowModule | undefined;
13
13
  forceTestTab?: boolean;
14
14
  highlightArg?: string;
15
+ isAgentTool?: boolean;
15
16
  }
16
17
  declare const FlowModuleComponent: import("svelte").Component<Props, {}, "flowModule" | "parentModule">;
17
18
  type FlowModuleComponent = ReturnType<typeof FlowModuleComponent>;
@@ -10,7 +10,7 @@ import { dfs } from '../previousResults';
10
10
  const { flowStateStore, flowStore, previewArgs } = getContext('FlowEditorContext');
11
11
  let { flowModule = $bindable() } = $props();
12
12
  let editor = $state(undefined);
13
- let stepPropPicker = $derived(getStepPropPicker($flowStateStore, undefined, undefined, flowModule.id, flowStore.val, previewArgs.val, false));
13
+ let stepPropPicker = $derived(getStepPropPicker(flowStateStore.val, undefined, undefined, flowModule.id, flowStore.val, previewArgs.val, false));
14
14
  function checkIfParentLoop(flowStoreValue) {
15
15
  const flow = JSON.parse(JSON.stringify(flowStoreValue));
16
16
  const parents = dfs(flowModule.id, flow, true);
@@ -27,7 +27,7 @@ let isLoop = $derived(flowModule.value.type === 'forloopflow' || flowModule.valu
27
27
  let isBranchAll = $derived(flowModule.value.type === 'branchall');
28
28
  let isStopAfterIfEnabled = $derived(Boolean(flowModule.stop_after_if));
29
29
  let isStopAfterAllIterationsEnabled = $derived(Boolean(flowModule.stop_after_all_iters_if));
30
- let result = $derived($flowStateStore[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_FAR);
30
+ let result = $derived(flowStateStore.val[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_FAR);
31
31
  let parentLoopId = $derived(checkIfParentLoop(flowStore.val));
32
32
  </script>
33
33
 
@@ -8,7 +8,7 @@ import { getStepPropPicker } from '../previousResults';
8
8
  const { flowStateStore, flowStore, previewArgs } = getContext('FlowEditorContext');
9
9
  let { flowModule = $bindable(), parentModule, previousModule } = $props();
10
10
  let editor = $state(undefined);
11
- let stepPropPicker = $derived(getStepPropPicker($flowStateStore, parentModule, previousModule, flowModule.id, flowStore.val, previewArgs.val, false));
11
+ let stepPropPicker = $derived(getStepPropPicker(flowStateStore.val, parentModule, previousModule, flowModule.id, flowStore.val, previewArgs.val, false));
12
12
  let isSkipEnabled = $derived(Boolean(flowModule.skip_if));
13
13
  </script>
14
14
 
@@ -14,7 +14,7 @@ schema.properties['sleep'] = {
14
14
  type: 'number'
15
15
  };
16
16
  let editor = $state(undefined);
17
- const result = $flowStateStore[$selectedId]?.previewResult ?? {};
17
+ const result = flowStateStore.val[$selectedId]?.previewResult ?? {};
18
18
  let isSleepEnabled = $derived(Boolean(flowModule.sleep));
19
19
  </script>
20
20
 
@@ -15,7 +15,7 @@ import SuspendDrawer from './SuspendDrawer.svelte';
15
15
  import EditableSchemaDrawer from '../../schema/EditableSchemaDrawer.svelte';
16
16
  import AddProperty from '../../schema/AddProperty.svelte';
17
17
  const { selectedId, flowStateStore } = getContext('FlowEditorContext');
18
- const result = $flowStateStore[$selectedId]?.previewResult ?? {};
18
+ const result = flowStateStore.val[$selectedId]?.previewResult ?? {};
19
19
  let editor = $state(undefined);
20
20
  let { flowModule = $bindable(), previousModuleId } = $props();
21
21
  let schema = $state(emptySchema());
@@ -17,7 +17,7 @@ const { selectedId, flowStateStore } = getContext('FlowEditorContext');
17
17
  const { triggersState, triggersCount } = getContext('TriggerContext');
18
18
  let scriptKind = $state('script');
19
19
  let scriptTemplate = $state('script');
20
- let { flowModule = $bindable(), noEditor = false, enableAi = false, savedModule = undefined, parentModule = $bindable(), previousModule = undefined, forceTestTab, highlightArg } = $props();
20
+ let { flowModule = $bindable(), noEditor = false, enableAi = false, savedModule = undefined, parentModule = $bindable(), previousModule = undefined, forceTestTab, highlightArg, isAgentTool = false } = $props();
21
21
  function initializePrimaryScheduleForTriggerScript(module) {
22
22
  const primaryIndex = triggersState.triggers.findIndex((t) => t.isPrimary);
23
23
  if (primaryIndex === -1) {
@@ -61,7 +61,7 @@ async function createModuleFromScript(path, summary, kind, hash) {
61
61
  initializePrimaryScheduleForTriggerScript(module);
62
62
  }
63
63
  flowModule = module;
64
- $flowStateStore[module.id] = state;
64
+ flowStateStore.val[module.id] = state;
65
65
  }
66
66
  </script>
67
67
 
@@ -100,7 +100,7 @@ async function createModuleFromScript(path, summary, kind, hash) {
100
100
  const [module, state] = await pickFlow(path, summary, flowModule.id)
101
101
 
102
102
  flowModule = module
103
- $flowStateStore[module.id] = state
103
+ flowStateStore.val[module.id] = state
104
104
  }}
105
105
  />
106
106
  {:else}
@@ -137,13 +137,13 @@ async function createModuleFromScript(path, summary, kind, hash) {
137
137
  }
138
138
 
139
139
  flowModule = module
140
- $flowStateStore[module.id] = state
140
+ flowStateStore.val[module.id] = state
141
141
  }}
142
142
  failureModule={$selectedId === 'failure'}
143
143
  preprocessorModule={$selectedId === 'preprocessor'}
144
144
  />
145
145
  {/if}
146
- {:else if flowModule.value.type === 'rawscript' || flowModule.value.type === 'script' || flowModule.value.type === 'flow'}
146
+ {:else if flowModule.value.type === 'rawscript' || flowModule.value.type === 'script' || flowModule.value.type === 'flow' || flowModule.value.type === 'aiagent'}
147
147
  <FlowModuleComponent
148
148
  {noEditor}
149
149
  bind:flowModule
@@ -157,6 +157,7 @@ async function createModuleFromScript(path, summary, kind, hash) {
157
157
  {savedModule}
158
158
  forceTestTab={forceTestTab?.[flowModule.id]}
159
159
  highlightArg={highlightArg?.[flowModule.id]}
160
+ {isAgentTool}
160
161
  />
161
162
  {/if}
162
163
  {:else if flowModule.value.type === 'forloopflow' || flowModule.value.type == 'whileloopflow'}
@@ -244,4 +245,13 @@ async function createModuleFromScript(path, summary, kind, hash) {
244
245
  {/each}
245
246
  {/if}
246
247
  {/each}
248
+ {:else if flowModule.value.type === 'aiagent'}
249
+ {#each flowModule.value.tools as _, index (index)}
250
+ <FlowModuleWrapper
251
+ {noEditor}
252
+ bind:flowModule={flowModule.value.tools[index]}
253
+ bind:parentModule={flowModule}
254
+ isAgentTool
255
+ />
256
+ {/each}
247
257
  {/if}
@@ -9,6 +9,7 @@ interface Props {
9
9
  previousModule?: FlowModule | undefined;
10
10
  forceTestTab?: Record<string, boolean>;
11
11
  highlightArg?: Record<string, string | undefined>;
12
+ isAgentTool?: boolean;
12
13
  }
13
14
  declare const FlowModuleWrapper: import("svelte").Component<Props, {}, "flowModule" | "parentModule">;
14
15
  type FlowModuleWrapper = ReturnType<typeof FlowModuleWrapper>;
@@ -2,11 +2,11 @@
2
2
  import { workspaceStore } from '../../../stores';
3
3
  import FlowCard from '../common/FlowCard.svelte';
4
4
  import Button from '../../common/button/Button.svelte';
5
- let { job, isOwner, localDurationStatuses, suspendStatus, noEditor, onOpenDetails } = $props();
5
+ let { job, isOwner, suspendStatus, noEditor, onOpenDetails } = $props();
6
6
  </script>
7
7
 
8
8
  <FlowCard {noEditor} title="Flow result">
9
- {#if job && isOwner !== undefined && localDurationStatuses && suspendStatus}
9
+ {#if job && isOwner !== undefined && suspendStatus}
10
10
  <div class="px-4 py-2">
11
11
  <FlowPreviewResult
12
12
  {job}
@@ -14,7 +14,6 @@ let { job, isOwner, localDurationStatuses, suspendStatus, noEditor, onOpenDetail
14
14
  {isOwner}
15
15
  hideFlowResult={false}
16
16
  hideDownloadLogs={false}
17
- {localDurationStatuses}
18
17
  innerModules={[]}
19
18
  {suspendStatus}
20
19
  {extra}
@@ -1,11 +1,9 @@
1
- import type { DurationStatus } from '../../graph';
2
1
  import type { Job } from '../../../gen';
3
- import type { Writable } from 'svelte/store';
2
+ import type { StateStore } from '../../../utils';
4
3
  interface Props {
5
4
  job?: Job;
6
5
  isOwner?: boolean;
7
- localDurationStatuses?: Writable<Record<string, DurationStatus>>;
8
- suspendStatus?: Writable<Record<string, {
6
+ suspendStatus?: StateStore<Record<string, {
9
7
  job: Job;
10
8
  nb: number;
11
9
  }>>;
@@ -21,7 +21,7 @@ let selected = $state('early-stop');
21
21
  let previewOpen = $state(false);
22
22
  let jobId = $state(undefined);
23
23
  let job = $state(undefined);
24
- let previewIterationArgs = $derived($flowStateStore[mod.id]?.previewArgs ?? {});
24
+ let previewIterationArgs = $derived(flowStateStore.val[mod.id]?.previewArgs ?? {});
25
25
  </script>
26
26
 
27
27
  <Drawer bind:open={previewOpen} alwaysOpen size="75%">
@@ -1,2 +1,4 @@
1
1
  import type { FlowModule } from '../../gen';
2
- export declare function dfs<T>(modules: FlowModule[], f: (x: FlowModule, modules: FlowModule[], branches: FlowModule[][]) => T): T[];
2
+ export declare function dfs<T>(modules: FlowModule[], f: (x: FlowModule, modules: FlowModule[], branches: FlowModule[][]) => T, { skipToolNodes }?: {
3
+ skipToolNodes?: boolean;
4
+ }): T[];
@@ -1,4 +1,4 @@
1
- export function dfs(modules, f) {
1
+ export function dfs(modules, f, { skipToolNodes = false } = {}) {
2
2
  let result = [];
3
3
  for (const module of modules) {
4
4
  if (module.value.type == 'forloopflow' || module.value.type == 'whileloopflow') {
@@ -19,6 +19,10 @@ export function dfs(modules, f) {
19
19
  result = result.concat(dfs(branch, f));
20
20
  }
21
21
  }
22
+ else if (module.value.type == 'aiagent' && !skipToolNodes) {
23
+ result = result.concat(f(module, modules, [module.value.tools]));
24
+ result = result.concat(dfs(module.value.tools, f));
25
+ }
22
26
  else {
23
27
  result.push(f(module, modules, []));
24
28
  }