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
@@ -41,6 +41,84 @@ export async function loadSchemaFromModule(module) {
41
41
  schema: schema ?? emptySchema()
42
42
  };
43
43
  }
44
+ else if (mod.type === 'aiagent') {
45
+ const schema = {
46
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
47
+ properties: {
48
+ provider: {
49
+ type: 'object',
50
+ oneOf: [
51
+ {
52
+ type: 'object',
53
+ title: 'OpenAI',
54
+ properties: {
55
+ kind: { type: 'string', enum: ['OpenAI'] },
56
+ resource: {
57
+ type: 'object',
58
+ format: 'resource-openai'
59
+ },
60
+ model: {
61
+ type: 'string',
62
+ enum: ['gpt-5', 'gpt-5-mini', 'gpt-5-nano', 'gpt-4.1', 'gpt-4o', 'gpt-4o-mini']
63
+ }
64
+ },
65
+ required: ['kind', 'resource', 'model']
66
+ },
67
+ {
68
+ type: 'object',
69
+ title: 'Anthropic',
70
+ properties: {
71
+ kind: { type: 'string', enum: ['Anthropic'] },
72
+ resource: {
73
+ type: 'object',
74
+ format: 'resource-anthropic'
75
+ },
76
+ model: {
77
+ type: 'string',
78
+ enum: ['claude-sonnet-4-0', 'claude-3-7-sonnet-latest', 'claude-3-5-haiku-latest']
79
+ }
80
+ },
81
+ required: ['kind', 'resource', 'model']
82
+ }
83
+ ]
84
+ },
85
+ system_prompt: {
86
+ type: 'string',
87
+ default: 'You are a helpful assistant'
88
+ },
89
+ user_message: {
90
+ type: 'string'
91
+ },
92
+ max_completion_tokens: {
93
+ type: 'number'
94
+ },
95
+ temperature: {
96
+ type: 'number'
97
+ }
98
+ },
99
+ required: ['provider', 'model', 'system_prompt', 'user_message'],
100
+ type: 'object',
101
+ order: [
102
+ 'provider',
103
+ 'model',
104
+ 'system_prompt',
105
+ 'user_message',
106
+ 'max_completion_tokens',
107
+ 'temperature'
108
+ ]
109
+ };
110
+ let input_transforms = mod.input_transforms ?? {};
111
+ return {
112
+ input_transforms: Object.keys(schema?.properties ?? {}).reduce((accu, key) => {
113
+ accu[key] = input_transforms[key] ?? {
114
+ type: 'static',
115
+ value: undefined
116
+ };
117
+ return accu;
118
+ }, {}),
119
+ schema
120
+ };
121
+ }
44
122
  return {
45
123
  input_transforms: {},
46
124
  schema: emptySchema()
@@ -1,12 +1,11 @@
1
1
  import type { Schema } from '../../common';
2
2
  import type { Flow } from '../../gen';
3
- import type { Writable } from 'svelte/store';
3
+ import type { StateStore } from '../../utils';
4
4
  export type FlowModuleState = {
5
5
  schema?: Schema;
6
6
  previewResult?: any;
7
7
  previewArgs?: any;
8
8
  previewJobId?: string;
9
- previewWorkspaceId?: string;
10
9
  previewSuccess?: boolean;
11
10
  };
12
11
  export type FlowState = Record<string, FlowModuleState>;
@@ -15,4 +14,4 @@ export type FlowState = Record<string, FlowModuleState>;
15
14
  * It contains data loaded that are not contained in a Flow object i.e. schemas.
16
15
  * We also hold the data of the results of a test job, ran by the user.
17
16
  */
18
- export declare function initFlowState(flow: Flow, flowStateStore: Writable<FlowState>): Promise<void>;
17
+ export declare function initFlowState(flow: Flow, flowStateStore: StateStore<FlowState>): Promise<void>;
@@ -11,10 +11,10 @@ export async function initFlowState(flow, flowStateStore) {
11
11
  const failureModule = flow.value.failure_module
12
12
  ? await loadFlowModuleState(flow.value.failure_module)
13
13
  : emptyFlowModuleState();
14
- flowStateStore.set({
14
+ flowStateStore.val = {
15
15
  ...modulesState,
16
16
  failure: failureModule
17
- });
17
+ };
18
18
  }
19
19
  /**
20
20
  * mapFlowModule recursively explore the flow, following deeply nested loop and branches modules
@@ -1,6 +1,5 @@
1
1
  import type { Schema } from '../../common';
2
2
  import { type FlowModule, type PathFlow, type PathScript, type RawScript, type OpenFlow, type Script } from '../../gen';
3
- import { type Writable } from 'svelte/store';
4
3
  import type { FlowModuleState, FlowState } from './flowState';
5
4
  import type { ExtendedOpenFlow } from './types';
6
5
  import { type StateStore } from '../../utils';
@@ -16,6 +15,7 @@ export declare function createLoop(id: string, enabledAi: boolean): Promise<[Flo
16
15
  export declare function createWhileLoop(id: string): Promise<[FlowModule, FlowModuleState]>;
17
16
  export declare function createBranches(id: string): Promise<[FlowModule, FlowModuleState]>;
18
17
  export declare function createBranchAll(id: string): Promise<[FlowModule, FlowModuleState]>;
18
+ export declare function createAiAgent(id: string): Promise<[FlowModule, FlowModuleState]>;
19
19
  export declare function createFlow(id: string): Promise<[FlowModule, FlowModuleState]>;
20
20
  export declare function fork(flowModule: FlowModule): Promise<[FlowModule & {
21
21
  value: RawScript;
@@ -24,16 +24,16 @@ export declare function emptyModule(flowState: FlowState, fullFlow: OpenFlow, fl
24
24
  export declare function createScriptFromInlineScript(flowModule: FlowModule, suffix: string, schema: Schema | undefined, flowPath: string): Promise<[FlowModule & {
25
25
  value: PathScript;
26
26
  }, FlowModuleState]>;
27
- export declare function deleteFlowStateById(id: string, flowStateStore: Writable<FlowState>): void;
27
+ export declare function deleteFlowStateById(id: string, flowStateStore: StateStore<FlowState>): void;
28
28
  export declare function sliceModules(modules: FlowModule[], upTo: number, idOrders: string[]): FlowModule[];
29
- export declare function insertNewPreprocessorModule(flowStore: StateStore<ExtendedOpenFlow>, flowStateStore: Writable<FlowState>, inlineScript?: {
29
+ export declare function insertNewPreprocessorModule(flowStore: StateStore<ExtendedOpenFlow>, flowStateStore: StateStore<FlowState>, inlineScript?: {
30
30
  language: RawScript['language'];
31
31
  }, wsScript?: {
32
32
  path: string;
33
33
  summary: string;
34
34
  hash: string | undefined;
35
35
  }): Promise<void>;
36
- export declare function insertNewFailureModule(flowStore: StateStore<ExtendedOpenFlow>, flowStateStore: Writable<FlowState>, inlineScript?: {
36
+ export declare function insertNewFailureModule(flowStore: StateStore<ExtendedOpenFlow>, flowStateStore: StateStore<FlowState>, inlineScript?: {
37
37
  language: RawScript['language'];
38
38
  subkind: 'pgsql' | 'flow';
39
39
  instructions?: string;
@@ -14,7 +14,8 @@ export async function loadFlowModuleState(flowModule) {
14
14
  const { input_transforms, schema } = await loadSchemaFromModule(flowModule);
15
15
  if (flowModule.value.type == 'script' ||
16
16
  flowModule.value.type == 'rawscript' ||
17
- flowModule.value.type == 'flow') {
17
+ flowModule.value.type == 'flow' ||
18
+ flowModule.value.type == 'aiagent') {
18
19
  flowModule.value.input_transforms = input_transforms;
19
20
  }
20
21
  return {
@@ -109,6 +110,15 @@ export async function createBranchAll(id) {
109
110
  const flowModuleState = await loadFlowModuleState(branchesFlowModules);
110
111
  return [branchesFlowModules, flowModuleState];
111
112
  }
113
+ export async function createAiAgent(id) {
114
+ const aiAgentFlowModules = {
115
+ id,
116
+ value: { type: 'aiagent', tools: [], input_transforms: {} },
117
+ summary: 'AI Agent'
118
+ };
119
+ const flowModuleState = await loadFlowModuleState(aiAgentFlowModules);
120
+ return [aiAgentFlowModules, flowModuleState];
121
+ }
112
122
  export async function createFlow(id) {
113
123
  const flowFlowModules = {
114
124
  id,
@@ -181,10 +191,7 @@ export async function createScriptFromInlineScript(flowModule, suffix, schema, f
181
191
  return pickScript(availablePath, flowModule.summary ?? '', flowModule.id, hash);
182
192
  }
183
193
  export function deleteFlowStateById(id, flowStateStore) {
184
- flowStateStore.update((fss) => {
185
- delete fss[id];
186
- return fss;
187
- });
194
+ delete flowStateStore.val[id];
188
195
  }
189
196
  export function sliceModules(modules, upTo, idOrders) {
190
197
  return modules
@@ -227,10 +234,7 @@ export async function insertNewPreprocessorModule(flowStore, flowStateStore, inl
227
234
  [module, state] = await pickScript(wsScript.path, wsScript.summary, module.id, wsScript.hash);
228
235
  }
229
236
  flowStore.val.value.preprocessor_module = module;
230
- flowStateStore.update((fss) => {
231
- fss[module.id] = state;
232
- return fss;
233
- });
237
+ flowStateStore.val[module.id] = state;
234
238
  }
235
239
  export async function insertNewFailureModule(flowStore, flowStateStore, inlineScript, wsScript) {
236
240
  let module = {
@@ -250,8 +254,5 @@ export async function insertNewFailureModule(flowStore, flowStateStore, inlineSc
250
254
  [module, state] = await pickScript(wsScript.path, wsScript.summary, module.id, wsScript.hash);
251
255
  }
252
256
  flowStore.val.value.failure_module = module;
253
- flowStateStore.update((fss) => {
254
- fss[module.id] = state;
255
- return fss;
256
- });
257
+ flowStateStore.val[module.id] = state;
257
258
  }
@@ -1,10 +1,9 @@
1
1
  import type { Flow, OpenFlow } from '../../gen';
2
- import { type Writable } from 'svelte/store';
3
2
  import { type FlowState } from './flowState';
4
3
  import type { StateStore } from '../../utils';
5
4
  export type FlowMode = 'push' | 'pull';
6
- export declare const importFlowStore: Writable<Flow | undefined>;
7
- export declare function initFlow(flow: Flow, flowStore: StateStore<Flow>, flowStateStore: Writable<FlowState>): Promise<void>;
5
+ export declare const importFlowStore: import("svelte/store").Writable<Flow | undefined>;
6
+ export declare function initFlow(flow: Flow, flowStore: StateStore<Flow>, flowStateStore: StateStore<FlowState>): Promise<void>;
8
7
  export declare function copyFirstStepSchema(flowState: FlowState, flowStore: StateStore<OpenFlow>): Promise<void>;
9
8
  export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow): Promise<{
10
9
  schema: import("../../common").Schema | undefined;
@@ -14,7 +13,7 @@ export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow)
14
13
  value: {
15
14
  language?: "deno" | "bun" | "python3" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "oracledb" | "graphql" | "nativets" | "php" | undefined;
16
15
  path?: string | undefined;
17
- type: "rawscript" | "script" | "flow" | "forloopflow" | "whileloopflow" | "branchone" | "branchall" | "identity";
16
+ type: "rawscript" | "script" | "flow" | "forloopflow" | "whileloopflow" | "branchone" | "branchall" | "aiagent" | "identity";
18
17
  };
19
18
  };
20
19
  connectFirstNode: () => void;
@@ -5,7 +5,7 @@ import { createEventDispatcher, tick } from 'svelte';
5
5
  import { getContext } from 'svelte';
6
6
  import { Play } from 'lucide-svelte';
7
7
  import { aiChatManager } from '../../copilot/chat/AIChatManager.svelte';
8
- let { loading = false, onRunPreview, onJobDone } = $props();
8
+ let { loading = false, onRunPreview, onJobDone, localModuleStates = $bindable({}) } = $props();
9
9
  const { selectedId } = getContext('FlowEditorContext');
10
10
  let flowPreviewContent = $state(undefined);
11
11
  let preventEscape = $state(false);
@@ -134,6 +134,7 @@ export function getFlowPreviewContent() {
134
134
  bind:selectedJobStepType
135
135
  bind:branchOrIterationN
136
136
  bind:rightColumnSelect
137
+ bind:localModuleStates
137
138
  on:close={() => {
138
139
  // keep the data in the preview content
139
140
  deferContent = true
@@ -47,6 +47,7 @@ function apply() {
47
47
  sendUserToast('Error parsing yaml: ' + e), true;
48
48
  }
49
49
  }
50
+ let editorHeight = $state(0);
50
51
  </script>
51
52
 
52
53
  <Drawer on:open={reload} bind:this={drawer} size="800px">
@@ -60,7 +61,15 @@ function apply() {
60
61
  {#await import('../../SimpleEditor.svelte')}
61
62
  <Loader2 class="animate-spin" />
62
63
  {:then Module}
63
- <Module.default bind:this={editor} autoHeight bind:code lang="yaml" />
64
+ <div class="h-full w-full overflow-hidden" bind:clientHeight={editorHeight}>
65
+ <Module.default
66
+ bind:this={editor}
67
+ autoHeight
68
+ minHeight={editorHeight}
69
+ bind:code
70
+ lang="yaml"
71
+ />
72
+ </div>
64
73
  {/await}
65
74
  {/if}
66
75
  </DrawerContent>
@@ -29,7 +29,7 @@ const wide = $derived(hover || selected || flowPreviewJob || individualStepTests
29
29
  <span transition:fade={{ duration: 100 }} class="text-xs">Test flow</span>
30
30
  {/if}
31
31
  </Button>
32
- {#if wide && (flowPreviewJob || individualStepTests)}
32
+ {#if wide && flowPreviewJob}
33
33
  <div
34
34
  class="flex flex-row items-center shadow-sm rounded-md mt-1"
35
35
  in:fade={{ duration: 100, delay: 200 }}
@@ -4,7 +4,7 @@ import Popover from '../../Popover.svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import VirtualList from '@tutorlatin/svelte-tiny-virtual-list';
6
6
  import { untrack } from 'svelte';
7
- let { id, flowJobs, flowJobsSuccess, selected, selectedManually, onSelectedIteration, moduleId } = $props();
7
+ let { id, flowJobs, flowJobsSuccess, selected, selectedManually, onSelectedIteration, moduleId, showIcon = true } = $props();
8
8
  let filter = $state(undefined);
9
9
  function onKeydown(event) {
10
10
  if (event.key === 'Enter' &&
@@ -40,6 +40,7 @@ function updateItems() {
40
40
  }
41
41
  let isOpen = $state(false);
42
42
  $effect(() => {
43
+ filter;
43
44
  isOpen && flowJobs && untrack(() => updateItems());
44
45
  });
45
46
  </script>
@@ -99,7 +100,9 @@ $effect(() => {
99
100
  meltElement={trigger}
100
101
  >
101
102
  #{selected == -1 ? '?' : selected + 1}
102
- <ListFilter size={15} />
103
+ {#if showIcon}
104
+ <ListFilter size={15} />
105
+ {/if}
103
106
  </MeltButton>
104
107
  {/snippet}
105
108
 
@@ -118,7 +121,8 @@ $effect(() => {
118
121
  class={twMerge(
119
122
  'text-primary text-xs w-full text-left py-1 pl-2 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center',
120
123
  items[idx].success == false ? 'text-red-400' : '',
121
- 'data-[highlighted]:bg-surface-hover'
124
+ 'data-[highlighted]:bg-surface-hover',
125
+ items[idx].index == selected ? 'bg-surface-selected' : ''
122
126
  )}
123
127
  onClick={() => {
124
128
  onSelectedIteration({
@@ -7,6 +7,7 @@ interface Props {
7
7
  selected: number;
8
8
  selectedManually: boolean | undefined;
9
9
  onSelectedIteration: onSelectedIteration;
10
+ showIcon?: boolean;
10
11
  }
11
12
  declare const FlowJobsMenu: import("svelte").Component<Props, {}, "">;
12
13
  type FlowJobsMenu = ReturnType<typeof FlowJobsMenu>;
@@ -2,7 +2,7 @@
2
2
  import Popover from '../../Popover.svelte';
3
3
  import { classNames } from '../../../utils';
4
4
  import { AlertTriangle, Bed, Database, Gauge, Move, PhoneIncoming, Repeat, Square, SkipForward, Pin, X, Play, Loader2 } from 'lucide-svelte';
5
- import { createEventDispatcher, getContext, untrack } from 'svelte';
5
+ import { createEventDispatcher, getContext } from 'svelte';
6
6
  import { fade } from 'svelte/transition';
7
7
  import { twMerge } from 'tailwind-merge';
8
8
  import IdEditorInput from '../../IdEditorInput.svelte';
@@ -50,30 +50,30 @@ function updateConnectingData(id, pickableIds, flowPropPickerConfig, flowStateSt
50
50
  connectingData =
51
51
  flowPropPickerConfig && pickableIds && Object.keys(pickableIds).includes(id)
52
52
  ? pickableIds[id]
53
- : (flowStateStore?.[id]?.previewResult ?? {});
53
+ : (flowStateStore?.val?.[id]?.previewResult ?? {});
54
54
  }
55
55
  $effect(() => {
56
- const args = [id, pickableIds, $flowPropPickerConfig, $flowStateStore];
57
- untrack(() => updateConnectingData(...args));
56
+ updateConnectingData(id, pickableIds, $flowPropPickerConfig, flowStateStore);
58
57
  });
59
58
  function updateLastJob(flowStateStore) {
60
- if (!flowStateStore || !id || flowStateStore[id]?.previewResult === 'never tested this far') {
59
+ if (!flowStateStore ||
60
+ !id ||
61
+ flowStateStore.val[id]?.previewResult === 'never tested this far') {
61
62
  return;
62
63
  }
63
64
  lastJob = {
64
- id: flowStateStore[id]?.previewJobId ?? '',
65
- result: flowStateStore[id]?.previewResult,
65
+ id: flowStateStore.val[id]?.previewJobId ?? '',
66
+ result: flowStateStore.val[id]?.previewResult,
66
67
  type: 'CompletedJob',
67
- workspace_id: flowStateStore[id]?.previewWorkspaceId ?? '',
68
- success: flowStateStore[id]?.previewSuccess ?? undefined
68
+ success: flowStateStore.val[id]?.previewSuccess ?? undefined
69
69
  };
70
70
  }
71
71
  $effect(() => {
72
72
  if (testJob && testJob.type === 'CompletedJob') {
73
73
  lastJob = $state.snapshot(testJob);
74
74
  }
75
- else if (flowStateStore && $flowStateStore) {
76
- untrack(() => updateLastJob($flowStateStore));
75
+ else if (id) {
76
+ updateLastJob(flowStateStore);
77
77
  }
78
78
  });
79
79
  let isConnectingCandidate = $derived(!!id && !!$flowPropPickerConfig && !!pickableIds && Object.keys(pickableIds).includes(id));
@@ -144,7 +144,7 @@ let testRunDropdownOpen = $state(false);
144
144
  {#if deletable && id && flowEditorContext?.flowStore && outputPickerVisible}
145
145
  {@const flowStore = flowEditorContext?.flowStore.val}
146
146
  {@const mod = flowStore?.value ? dfsPreviousResults(id, flowStore, false)[0] : undefined}
147
- {#if mod && $flowStateStore?.[id]}
147
+ {#if mod && flowStateStore?.val?.[id]}
148
148
  <ModuleTest bind:this={moduleTest} {mod} bind:testIsLoading bind:testJob />
149
149
  {/if}
150
150
  {/if}
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">import { createEventDispatcher, getContext, tick } from 'svelte';
2
- import { createInlineScriptModule, createBranchAll, createBranches, createLoop, createWhileLoop, deleteFlowStateById, emptyModule, pickScript, pickFlow, insertNewPreprocessorModule } from '../flowStateUtils.svelte';
2
+ import { createInlineScriptModule, createBranchAll, createBranches, createLoop, createWhileLoop, deleteFlowStateById, emptyModule, pickScript, pickFlow, insertNewPreprocessorModule, createAiAgent } from '../flowStateUtils.svelte';
3
3
  import { emptyFlowModuleState } from '../utils';
4
4
  import { dfs } from '../dfs';
5
5
  import { push } from '../../../history.svelte';
@@ -16,19 +16,19 @@ import { setScheduledPollSchedule } from '../../triggers';
16
16
  import { JobService } from '../../../gen';
17
17
  import { dfsByModule } from '../previousResults';
18
18
  import { refreshStateStore } from '../../../svelte5Utils.svelte';
19
- import { writable } from 'svelte/store';
20
19
  import FlowStickyNode from './FlowStickyNode.svelte';
21
20
  import { getStepHistoryLoaderContext } from '../../stepHistoryLoader.svelte';
22
- let { sidebarSize = $bindable(undefined), disableStaticInputs = false, disableTutorials = false, disableAi = false, disableSettings = false, newFlow = false, smallErrorHandler = false, workspace = $workspaceStore, onTestUpTo, onEditInput, localModuleStates = writable({}), aiChatOpen, showFlowAiButton, toggleAiChat, isOwner, onTestFlow, isRunning, onCancelTestFlow, onOpenPreview, onHideJobStatus, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = writable({}), onDelete, flowHasChanged } = $props();
21
+ import { ModulesTestStates } from '../../modulesTest.svelte';
22
+ let { sidebarSize = $bindable(undefined), disableStaticInputs = false, disableTutorials = false, disableAi = false, disableSettings = false, newFlow = false, smallErrorHandler = false, workspace = $workspaceStore, onTestUpTo, onEditInput, localModuleStates = {}, testModuleStates = new ModulesTestStates(), aiChatOpen, showFlowAiButton, toggleAiChat, isOwner, onTestFlow, isRunning, onCancelTestFlow, onOpenPreview, onHideJobStatus, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = $bindable({ val: {} }), onDelete, flowHasChanged } = $props();
23
23
  let flowTutorials = $state(undefined);
24
24
  const { customUi, selectedId, moving, history, flowStateStore, flowStore, pathStore } = getContext('FlowEditorContext');
25
25
  const { triggersCount, triggersState } = getContext('TriggerContext');
26
26
  const { flowPropPickerConfig } = getContext('PropPickerContext');
27
27
  export async function insertNewModuleAtIndex(modules, index, kind, wsScript, wsFlow, inlineScript) {
28
28
  push(history, flowStore.val);
29
- let module = emptyModule($flowStateStore, flowStore.val, kind == 'flow');
29
+ let module = emptyModule(flowStateStore.val, flowStore.val, kind == 'flow');
30
30
  let state = emptyFlowModuleState();
31
- $flowStateStore[module.id] = state;
31
+ flowStateStore.val[module.id] = state;
32
32
  if (wsFlow) {
33
33
  ;
34
34
  [module, state] = await pickFlow(wsFlow.path, wsFlow.summary, module.id);
@@ -53,10 +53,14 @@ export async function insertNewModuleAtIndex(modules, index, kind, wsScript, wsF
53
53
  ;
54
54
  [module, state] = await createBranchAll(module.id);
55
55
  }
56
+ else if (kind == 'aiagent') {
57
+ ;
58
+ [module, state] = await createAiAgent(module.id);
59
+ }
56
60
  else if (inlineScript) {
57
61
  const { language, kind, subkind, summary } = inlineScript;
58
62
  [module, state] = await createInlineScriptModule(language, kind, subkind, module.id, summary);
59
- $flowStateStore[module.id] = state;
63
+ flowStateStore.val[module.id] = state;
60
64
  if (kind == 'trigger') {
61
65
  module.summary = 'Trigger';
62
66
  }
@@ -64,7 +68,7 @@ export async function insertNewModuleAtIndex(modules, index, kind, wsScript, wsF
64
68
  module.summary = 'Approval';
65
69
  }
66
70
  }
67
- $flowStateStore[module.id] = state;
71
+ flowStateStore.val[module.id] = state;
68
72
  if (kind == 'approval') {
69
73
  module.suspend = { required_events: 1, timeout: 1800 };
70
74
  }
@@ -108,6 +112,9 @@ export function removeAtId(modules, id) {
108
112
  });
109
113
  mod.value.default = removeAtId(mod.value.default, id);
110
114
  }
115
+ else if (mod.value.type == 'aiagent') {
116
+ mod.value.tools = removeAtId(mod.value.tools, id);
117
+ }
111
118
  return mod;
112
119
  });
113
120
  }
@@ -200,18 +207,16 @@ async function loadLastJob(path, moduleId) {
200
207
  id: previousJobId[0].id
201
208
  });
202
209
  if ('result' in getJobResult) {
203
- $flowStateStore[moduleId] = {
204
- ...($flowStateStore[moduleId] ?? {}),
210
+ flowStateStore.val[moduleId] = {
211
+ ...(flowStateStore.val[moduleId] ?? {}),
205
212
  previewResult: getJobResult.result,
206
213
  previewJobId: previousJobId[0].id,
207
- previewWorkspaceId: previousJobId[0].workspace_id,
208
214
  previewSuccess: getJobResult.success
209
215
  };
210
216
  if (stepHistoryLoader) {
211
217
  stepHistoryLoader.stepStates[moduleId].loadingJobs = false;
212
218
  }
213
219
  }
214
- $flowStateStore = $flowStateStore;
215
220
  }
216
221
  }
217
222
  $effect(() => {
@@ -285,12 +290,13 @@ $effect(() => {
285
290
  editMode
286
291
  {onTestUpTo}
287
292
  {onEditInput}
288
- flowModuleStates={$localModuleStates}
293
+ flowModuleStates={localModuleStates}
294
+ {testModuleStates}
289
295
  {isOwner}
290
296
  {individualStepTests}
291
297
  {flowJob}
292
298
  {showJobStatus}
293
- {suspendStatus}
299
+ suspendStatus={suspendStatus.val}
294
300
  {flowHasChanged}
295
301
  onDelete={(id) => {
296
302
  dependents = getDependentComponents(id, flowStore.val)
@@ -305,7 +311,7 @@ $effect(() => {
305
311
  }
306
312
  refreshStateStore(flowStore)
307
313
  onDelete?.(id)
308
- delete $flowStateStore[id]
314
+ delete flowStateStore.val[id]
309
315
  }
310
316
 
311
317
  if (Object.keys(dependents).length > 0) {
@@ -343,6 +349,8 @@ $effect(() => {
343
349
  }
344
350
  } else if (mod.id == detail.sourceId || mod.id == detail.targetId) {
345
351
  targetModules = modules
352
+ } else if (mod.id == detail.agentId && mod.value.type === 'aiagent') {
353
+ targetModules = mod.value.tools
346
354
  }
347
355
  })
348
356
  if (flowStore.val.value.modules && Array.isArray(flowStore.val.value.modules)) {
@@ -374,7 +382,8 @@ $effect(() => {
374
382
  })
375
383
  }
376
384
  } else {
377
- const index = detail.index ?? 0
385
+ const index = (detail.agentId ? targetModules?.length : detail.index) ?? 0
386
+
378
387
  await insertNewModuleAtIndex(
379
388
  targetModules,
380
389
  index,
@@ -417,7 +426,6 @@ $effect(() => {
417
426
  if (['branchone', 'branchall'].includes(detail.kind)) {
418
427
  await addBranch(targetModules[detail.index ?? 0].id)
419
428
  }
420
- $flowStateStore = $flowStateStore
421
429
  refreshStateStore(flowStore)
422
430
  dispatch('change')
423
431
  }
@@ -467,9 +475,8 @@ $effect(() => {
467
475
  mod.id = newId
468
476
  }
469
477
  })
470
- $flowStateStore[newId] = $flowStateStore[id]
471
- delete $flowStateStore[id]
472
- $flowStateStore = $flowStateStore
478
+ flowStateStore.val[newId] = flowStateStore.val[id]
479
+ delete flowStateStore.val[id]
473
480
  refreshStateStore(flowStore)
474
481
  $selectedId = newId
475
482
  }}
@@ -1,7 +1,8 @@
1
1
  import type { FlowModule, Job } from '../../../gen';
2
2
  import type { InlineScript, InsertKind } from '../../graph/graphBuilder.svelte';
3
3
  import type { GraphModuleState } from '../../graph';
4
- import { type Writable } from 'svelte/store';
4
+ import { ModulesTestStates } from '../../modulesTest.svelte';
5
+ import type { StateStore } from '../../../utils';
5
6
  interface Props {
6
7
  sidebarSize?: number | undefined;
7
8
  disableStaticInputs?: boolean;
@@ -13,7 +14,8 @@ interface Props {
13
14
  workspace?: string | undefined;
14
15
  onTestUpTo?: ((id: string) => void) | undefined;
15
16
  onEditInput?: (moduleId: string, key: string) => void;
16
- localModuleStates?: Writable<Record<string, GraphModuleState>>;
17
+ localModuleStates?: Record<string, GraphModuleState>;
18
+ testModuleStates?: ModulesTestStates;
17
19
  aiChatOpen?: boolean;
18
20
  showFlowAiButton?: boolean;
19
21
  toggleAiChat?: () => void;
@@ -26,7 +28,7 @@ interface Props {
26
28
  individualStepTests?: boolean;
27
29
  flowJob?: Job | undefined;
28
30
  showJobStatus?: boolean;
29
- suspendStatus?: Writable<Record<string, {
31
+ suspendStatus?: StateStore<Record<string, {
30
32
  job: Job;
31
33
  nb: number;
32
34
  }>>;
@@ -67,6 +69,6 @@ declare const FlowModuleSchemaMap: $$__sveltets_2_IsomorphicComponent<Props, {
67
69
  removeBranch: (id: string, index: number) => void;
68
70
  isNodeVisible: (nodeId: string) => boolean;
69
71
  setExpr: (module: FlowModule, expr: string) => void;
70
- }, "sidebarSize">;
72
+ }, "suspendStatus" | "sidebarSize">;
71
73
  type FlowModuleSchemaMap = InstanceType<typeof FlowModuleSchemaMap>;
72
74
  export default FlowModuleSchemaMap;
@@ -10,6 +10,7 @@ export let funcDesc = '';
10
10
  export let disableAi = false;
11
11
  export let kind = 'script';
12
12
  export let allowTrigger = true;
13
+ export let scriptOnly = false;
13
14
  let customUi = getContext('customUi');
14
15
  let selectedKind = kind;
15
16
  let preFilter = 'all';
@@ -58,7 +59,7 @@ shouldUsePortal={true} -->
58
59
  </div>
59
60
 
60
61
  <div class="flex flex-row grow min-h-0">
61
- {#if kind === 'script'}
62
+ {#if kind === 'script' && !scriptOnly}
62
63
  <div class="flex-none flex flex-col text-xs text-primary">
63
64
  <TopLevelNode
64
65
  label="Action"
@@ -130,6 +131,13 @@ shouldUsePortal={true} -->
130
131
  dispatch('new', { kind: 'branchall' })
131
132
  }}
132
133
  />
134
+ <TopLevelNode
135
+ label="AI Agent"
136
+ on:select={() => {
137
+ dispatch('close')
138
+ dispatch('new', { kind: 'aiagent' })
139
+ }}
140
+ />
133
141
  </div>
134
142
  {/if}
135
143
 
@@ -17,6 +17,7 @@ declare const InsertModuleInner: $$__sveltets_2_IsomorphicComponent<{
17
17
  disableAi?: boolean;
18
18
  kind?: "script" | "trigger" | "preprocessor" | "failure";
19
19
  allowTrigger?: boolean;
20
+ scriptOnly?: boolean;
20
21
  }, {
21
22
  insert: CustomEvent<any>;
22
23
  new: CustomEvent<any>;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { Button } from '../../common';
2
2
  import LanguageIcon from '../../common/languageIcons/LanguageIcon.svelte';
3
3
  import IconedResourceType from '../../IconedResourceType.svelte';
4
- import { Building, Repeat, Square, ArrowDown, GitBranch } from 'lucide-svelte';
4
+ import { Building, Repeat, Square, ArrowDown, GitBranch, Bot } from 'lucide-svelte';
5
5
  import { createEventDispatcher, getContext } from 'svelte';
6
6
  import FlowModuleSchemaItem from './FlowModuleSchemaItem.svelte';
7
7
  import { prettyLanguage } from '../../../common';
@@ -204,7 +204,9 @@ let parentLoop = $derived(flowStore?.val && mod ? checkIfParentLoop(flowStore.va
204
204
  >
205
205
  {#snippet icon()}
206
206
  <div>
207
- {#if mod.value.type === 'rawscript'}
207
+ {#if mod.value.type === 'aiagent'}
208
+ <Bot size={16} />
209
+ {:else if mod.value.type === 'rawscript'}
208
210
  <LanguageIcon lang={mod.value.language} width={16} height={16} />
209
211
  {:else if mod.summary == 'Terminate flow'}
210
212
  <Square size={16} />