windmill-components 1.522.0 → 1.531.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/package/components/AIAgentLogViewer.svelte +123 -0
  2. package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
  3. package/package/components/AppConnectInner.svelte +10 -10
  4. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  5. package/package/components/Dev.svelte +12 -28
  6. package/package/components/DiffEditor.svelte +6 -3
  7. package/package/components/DiffEditor.svelte.d.ts +1 -0
  8. package/package/components/DisplayResult.svelte +16 -10
  9. package/package/components/DisplayResult.svelte.d.ts +1 -0
  10. package/package/components/EditableSchemaForm.svelte +5 -2
  11. package/package/components/Editor.svelte +26 -8
  12. package/package/components/Editor.svelte.d.ts +1 -1
  13. package/package/components/EditorBar.svelte +25 -5
  14. package/package/components/EditorSettings.svelte +6 -0
  15. package/package/components/FirstStepInputs.svelte +2 -2
  16. package/package/components/FlowBuilder.svelte +18 -36
  17. package/package/components/FlowGraphViewerStep.svelte +7 -0
  18. package/package/components/FlowJobResult.svelte +15 -63
  19. package/package/components/FlowJobResult.svelte.d.ts +10 -4
  20. package/package/components/FlowLogViewer.svelte +660 -0
  21. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  22. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  23. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  24. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  25. package/package/components/FlowPreviewContent.svelte +4 -5
  26. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  27. package/package/components/FlowPreviewResult.svelte +4 -5
  28. package/package/components/FlowPreviewResult.svelte.d.ts +3 -5
  29. package/package/components/FlowStatusViewer.svelte +28 -16
  30. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  31. package/package/components/FlowStatusViewerInner.svelte +483 -296
  32. package/package/components/FlowStatusViewerInner.svelte.d.ts +27 -33
  33. package/package/components/FlowTimeline.svelte +11 -13
  34. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  35. package/package/components/FlowWrapper.svelte +3 -2
  36. package/package/components/HighlightCode.svelte +4 -1
  37. package/package/components/IconedResourceType.svelte +9 -5
  38. package/package/components/JobLoader.svelte +61 -8
  39. package/package/components/JobLoader.svelte.d.ts +9 -1
  40. package/package/components/LogViewer.svelte +8 -2
  41. package/package/components/LogViewer.svelte.d.ts +1 -0
  42. package/package/components/LogViewerHeader.svelte +32 -0
  43. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  44. package/package/components/ModulePreviewForm.svelte +10 -6
  45. package/package/components/ModulePreviewResultViewer.svelte +16 -0
  46. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  47. package/package/components/ModuleTest.svelte +59 -16
  48. package/package/components/RelativeLineNumbers.svelte +16 -0
  49. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  50. package/package/components/ResourceEditor.svelte +9 -4
  51. package/package/components/ScriptBuilder.svelte +13 -11
  52. package/package/components/ScriptEditor.svelte +2 -2
  53. package/package/components/SimpleEditor.svelte +10 -4
  54. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  55. package/package/components/TemplateEditor.svelte +1 -1
  56. package/package/components/UserSettings.svelte +4 -4
  57. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  58. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  59. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  60. package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
  61. package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
  62. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  63. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  64. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  65. package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
  66. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  67. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  68. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  69. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  70. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  71. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  72. package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
  73. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  74. package/package/components/apps/components/layout/AppList.svelte +9 -8
  75. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  76. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  77. package/package/components/apps/components/layout/AppStepper.svelte +9 -5
  78. package/package/components/apps/components/layout/AppTabs.svelte +2 -2
  79. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  80. package/package/components/apps/editor/GridEditor.svelte +24 -19
  81. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  82. package/package/components/apps/editor/GridViewer.svelte +1 -1
  83. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  84. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  85. package/package/components/apps/editor/appUtils.js +17 -68
  86. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  87. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  88. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
  90. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  93. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  94. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  95. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  96. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  97. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  98. package/package/components/apps/utils.d.ts +2 -0
  99. package/package/components/apps/utils.js +22 -0
  100. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  101. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  102. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  103. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  104. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  105. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  106. package/package/components/copilot/MetadataGen.svelte +19 -1
  107. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  108. package/package/components/copilot/ScriptGen.svelte +23 -31
  109. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  110. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  111. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  112. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
  114. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  115. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  116. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  117. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  118. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  119. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  120. package/package/components/copilot/chat/api/apiTools.js +192 -0
  121. package/package/components/copilot/chat/api/core.d.ts +7 -0
  122. package/package/components/copilot/chat/api/core.js +61 -0
  123. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  124. package/package/components/copilot/chat/flow/core.js +213 -42
  125. package/package/components/copilot/chat/flow/utils.js +3 -0
  126. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  127. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  128. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  129. package/package/components/copilot/chat/navigator/core.js +20 -22
  130. package/package/components/copilot/chat/script/core.d.ts +11 -3
  131. package/package/components/copilot/chat/script/core.js +92 -15
  132. package/package/components/copilot/chat/shared.d.ts +30 -3
  133. package/package/components/copilot/chat/shared.js +228 -9
  134. package/package/components/copilot/lib.d.ts +1 -1
  135. package/package/components/copilot/lib.js +15 -6
  136. package/package/components/custom_ui.d.ts +2 -0
  137. package/package/components/details/DetailPageLayout.svelte +34 -33
  138. package/package/components/flow_builder.d.ts +1 -2
  139. package/package/components/flows/FlowEditor.svelte +3 -3
  140. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  141. package/package/components/flows/common/FlowCard.svelte +2 -2
  142. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  143. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  144. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  145. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  146. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  147. package/package/components/flows/content/FlowConstants.svelte +3 -3
  148. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  149. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  150. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  151. package/package/components/flows/content/FlowLoop.svelte +2 -2
  152. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  153. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  154. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  155. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  156. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  157. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  158. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  159. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  160. package/package/components/flows/content/FlowResult.svelte +2 -3
  161. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  162. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  163. package/package/components/flows/dfs.d.ts +3 -1
  164. package/package/components/flows/dfs.js +5 -1
  165. package/package/components/flows/flowInfers.js +78 -0
  166. package/package/components/flows/flowState.d.ts +2 -3
  167. package/package/components/flows/flowState.js +2 -2
  168. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  169. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  170. package/package/components/flows/flowStore.d.ts +3 -4
  171. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  172. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  173. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  174. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  175. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  176. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
  177. package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
  178. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  179. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  180. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  181. package/package/components/flows/map/MapItem.svelte +4 -2
  182. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  183. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  184. package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
  186. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  187. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  188. package/package/components/flows/testSteps.svelte.js +26 -23
  189. package/package/components/flows/types.d.ts +1 -1
  190. package/package/components/flows/utils.d.ts +3 -5
  191. package/package/components/flows/utils.js +3 -4
  192. package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
  193. package/package/components/graph/FlowGraphV2.svelte +44 -24
  194. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  195. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  196. package/package/components/graph/graphBuilder.svelte.js +30 -14
  197. package/package/components/graph/model.d.ts +9 -6
  198. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  199. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  200. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  201. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  202. package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
  203. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  204. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  205. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  206. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  207. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  208. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  209. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  210. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  211. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  212. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  213. package/package/components/icons/RubyIcon.svelte +656 -0
  214. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  215. package/package/components/instanceSettings.js +9 -0
  216. package/package/components/modulesTest.svelte.d.ts +6 -3
  217. package/package/components/modulesTest.svelte.js +32 -0
  218. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  219. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  220. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  221. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
  222. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  223. package/package/components/runs/RunRow.svelte +5 -1
  224. package/package/components/schema/AddProperty.svelte +41 -36
  225. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  226. package/package/components/schema/AddPropertyV2.svelte +41 -37
  227. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  228. package/package/components/schema/FlowPropertyEditor.svelte +8 -6
  229. package/package/components/search/RunsSearch.svelte +1 -1
  230. package/package/components/settings/CreateToken.svelte +132 -12
  231. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  232. package/package/components/settings/TokenDisplay.svelte +18 -42
  233. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  234. package/package/components/settings/TokensTable.svelte +2 -4
  235. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  236. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  237. package/package/components/sidebar/MenuButton.svelte +12 -10
  238. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  239. package/package/components/stepHistoryLoader.svelte.js +7 -12
  240. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  241. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  242. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  243. package/package/components/tutorials/utils.js +3 -0
  244. package/package/components/worker_group.d.ts +4 -1
  245. package/package/components/worker_group.js +3 -2
  246. package/package/editorLangUtils.d.ts +1 -1
  247. package/package/editorLangUtils.js +2 -0
  248. package/package/editorUtils.d.ts +2 -1
  249. package/package/editorUtils.js +2 -1
  250. package/package/gen/core/OpenAPI.js +1 -1
  251. package/package/gen/schemas.gen.d.ts +296 -8
  252. package/package/gen/schemas.gen.js +364 -70
  253. package/package/gen/services.gen.d.ts +118 -16
  254. package/package/gen/services.gen.js +226 -19
  255. package/package/gen/types.gen.d.ts +660 -16
  256. package/package/hubPaths.json +7 -4
  257. package/package/infer.js +10 -1
  258. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  259. package/package/script_helpers.d.ts +3 -0
  260. package/package/script_helpers.js +58 -3
  261. package/package/scripts.d.ts +1 -1
  262. package/package/scripts.js +3 -2
  263. package/package/stores.d.ts +2 -0
  264. package/package/stores.js +2 -0
  265. package/package/svelte5Utils.svelte.d.ts +16 -0
  266. package/package/svelte5Utils.svelte.js +26 -0
  267. package/package/utils.d.ts +1 -1
  268. package/package.json +20 -19
  269. package/package/components/AllFlowLogs.svelte +0 -31
  270. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  271. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  272. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
@@ -1,7 +1,6 @@
1
1
  import FlowStatusViewerInner from './FlowStatusViewerInner.svelte';
2
- import { type Job, type FlowModuleValue } from '../gen';
3
- import { type DurationStatus, type GraphModuleState } from './graph';
4
- import { type Writable } from 'svelte/store';
2
+ import { type Job, type FlowModuleValue, type CompletedJob } from '../gen';
3
+ import { type DurationStatus, type GlobalIterationBounds, type GraphModuleState } from './graph';
5
4
  interface Props {
6
5
  jobId: string;
7
6
  initialJob?: Job | undefined;
@@ -14,29 +13,32 @@ interface Props {
14
13
  branchall?: boolean;
15
14
  } | undefined;
16
15
  innerModule?: FlowModuleValue | undefined;
17
- globalRefreshes?: Record<string, (clear: any, root: any) => Promise<void>>;
18
16
  render?: boolean;
19
17
  isOwner?: boolean;
20
18
  selectedNode?: string | undefined;
21
- globalModuleStates: Writable<Record<string, GraphModuleState>>[];
22
- globalDurationStatuses: Writable<Record<string, DurationStatus>>[];
23
- childFlow?: boolean;
19
+ globalModuleStates: Record<string, GraphModuleState>[];
20
+ globalDurationStatuses?: Record<string, DurationStatus>[];
21
+ globalIterationBounds: Record<string, GlobalIterationBounds>;
22
+ isSelectedBranch?: boolean;
24
23
  isSubflow?: boolean;
25
24
  reducedPolling?: boolean;
26
25
  wideResults?: boolean;
27
26
  hideFlowResult?: boolean;
27
+ topModuleStates?: Record<string, GraphModuleState>;
28
28
  workspace?: string | undefined;
29
29
  prefix?: string | undefined;
30
- subflowParentsGlobalModuleStates?: Writable<Record<string, GraphModuleState>>[];
31
- subflowParentsDurationStatuses?: Writable<Record<string, DurationStatus>>[];
30
+ subflowParentsGlobalModuleStates?: Record<string, GraphModuleState>[];
31
+ subflowParentsDurationStatuses?: Record<string, DurationStatus>[];
32
32
  isForloopSelected?: boolean;
33
- parentRecursiveRefresh?: Record<string, (clear: any, root: any) => Promise<void>>;
33
+ updateRecursiveRefreshFn?: (jobId: string, updateFn: (clear: any, root: any) => Promise<void>) => void;
34
+ refreshGlobal: (moduleId: string, clear: boolean, root: string) => Promise<void>;
35
+ updateGlobalRefresh: (moduleId: string, updateFn: (clear: any, root: any) => Promise<void>) => void;
34
36
  job?: (Job & {
35
37
  result_stream?: string;
36
38
  }) | undefined;
37
39
  rightColumnSelect?: 'timeline' | 'node_status' | 'node_definition' | 'user_states';
38
- localModuleStates?: Writable<Record<string, GraphModuleState>>;
39
- localDurationStatuses?: Writable<Record<string, DurationStatus>>;
40
+ localModuleStates?: Record<string, GraphModuleState>;
41
+ localDurationStatuses?: Record<string, DurationStatus>;
40
42
  onResultStreamUpdate?: ({ jobId, result_stream }: {
41
43
  jobId: string;
42
44
  result_stream?: string;
@@ -44,26 +46,18 @@ interface Props {
44
46
  customUi?: {
45
47
  tagLabel?: string | undefined;
46
48
  };
49
+ graphTabOpen: boolean;
50
+ isNodeSelected: boolean;
51
+ loadExtraLogs?: (logs: string) => void;
52
+ onStart?: () => void;
53
+ onJobsLoaded?: ({ job, force }: {
54
+ job: Job;
55
+ force: boolean;
56
+ }) => void;
57
+ onDone?: ({ job }: {
58
+ job: CompletedJob;
59
+ }) => void;
47
60
  }
48
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
49
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
50
- $$bindings?: Bindings;
51
- } & Exports;
52
- (internal: unknown, props: Props & {
53
- $$events?: Events;
54
- $$slots?: Slots;
55
- }): Exports & {
56
- $set?: any;
57
- $on?: any;
58
- };
59
- z_$$bindings?: Bindings;
60
- }
61
- declare const FlowStatusViewerInner: $$__sveltets_2_IsomorphicComponent<Props, {
62
- jobsLoaded: CustomEvent<any>;
63
- done: CustomEvent<any>;
64
- start: CustomEvent<any>;
65
- } & {
66
- [evt: string]: CustomEvent<any>;
67
- }, {}, {}, "job" | "globalRefreshes" | "selectedNode" | "parentRecursiveRefresh" | "rightColumnSelect">;
68
- type FlowStatusViewerInner = InstanceType<typeof FlowStatusViewerInner>;
61
+ declare const FlowStatusViewerInner: import("svelte").Component<Props, {}, "job" | "localModuleStates" | "selectedNode" | "rightColumnSelect" | "localDurationStatuses">;
62
+ type FlowStatusViewerInner = ReturnType<typeof FlowStatusViewerInner>;
69
63
  export default FlowStatusViewerInner;
@@ -1,22 +1,23 @@
1
- <script lang="ts">import { debounce, displayDate, msToSec } from '../utils';
1
+ <script lang="ts">import { debounce, displayDate, msToSec, readFieldsRecursively } from '../utils';
2
2
  import { onDestroy, untrack } from 'svelte';
3
3
  import { getDbClockNow } from '../forLater';
4
4
  import { Loader2 } from 'lucide-svelte';
5
5
  import TimelineBar from './TimelineBar.svelte';
6
6
  import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
7
- let { selfWaitTime = undefined, aggregateWaitTime = undefined, flowModules, durationStatuses, flowDone = false } = $props();
7
+ let { selfWaitTime = undefined, aggregateWaitTime = undefined, flowModules, durationStatuses, flowDone = false, decreaseIterationFrom, buildSubflowKey, globalIterationBounds } = $props();
8
8
  let min = $state(undefined);
9
9
  let max = $state(undefined);
10
10
  let total = $state(undefined);
11
11
  let items = $state(undefined);
12
- let { debounced, clearDebounce } = debounce(() => computeItems($durationStatuses), 30);
12
+ let { debounced, clearDebounce } = debounce(() => computeItems(durationStatuses), 30);
13
13
  $effect(() => {
14
- flowDone != undefined && $durationStatuses && untrack(() => debounced());
14
+ readFieldsRecursively(durationStatuses);
15
+ flowDone != undefined && durationStatuses && untrack(() => debounced());
15
16
  });
16
17
  export function reset() {
17
18
  min = undefined;
18
19
  max = undefined;
19
- items = computeItems($durationStatuses);
20
+ items = computeItems(durationStatuses);
20
21
  }
21
22
  function computeItems(durationStatuses) {
22
23
  let nmin = undefined;
@@ -126,20 +127,17 @@ onDestroy(() => {
126
127
  </div>
127
128
  {/if}
128
129
  {#each Object.values(flowModules) as k (k)}
130
+ {@const iterationFrom = globalIterationBounds[buildSubflowKey(k)]?.iteration_from ?? 0}
129
131
  <div class="overflow-auto max-h-60 shadow-inner dark:shadow-gray-700 relative">
130
- {#if ($durationStatuses?.[k]?.iteration_from ?? 0) > 0}
132
+ {#if iterationFrom > 0}
131
133
  <div class="w-full flex flex-row-reverse sticky top-0">
132
134
  <button
133
135
  class="!text-secondary underline mr-2 text-2xs text-right whitespace-nowrap"
134
136
  onclick={() => {
135
- let r = $durationStatuses[k]
136
- if (r.iteration_from) {
137
- r.iteration_from -= 20
138
- $durationStatuses = $durationStatuses
139
- }
137
+ decreaseIterationFrom?.(k, 20)
140
138
  }}
141
- >Viewing iterations {$durationStatuses[k].iteration_from} to {$durationStatuses[k]
142
- .iteration_total}. Load more
139
+ >Viewing iterations {iterationFrom} to {globalIterationBounds[buildSubflowKey(k)]
140
+ ?.iteration_total}. Load more
143
141
  </button>
144
142
  </div>
145
143
  {/if}
@@ -1,18 +1,19 @@
1
- import type { Writable } from 'svelte/store';
1
+ import type { GlobalIterationBounds } from './graph';
2
2
  interface Props {
3
3
  selfWaitTime?: number | undefined;
4
4
  aggregateWaitTime?: number | undefined;
5
5
  flowModules: string[];
6
- durationStatuses: Writable<Record<string, {
6
+ durationStatuses: Record<string, {
7
7
  byJob: Record<string, {
8
8
  created_at?: number;
9
9
  started_at?: number;
10
10
  duration_ms?: number;
11
11
  }>;
12
- iteration_from?: number;
13
- iteration_total?: number;
14
- }>>;
12
+ }>;
15
13
  flowDone?: boolean;
14
+ decreaseIterationFrom?: (key: string, amount: number) => void;
15
+ buildSubflowKey: (key: string) => string;
16
+ globalIterationBounds: Record<string, GlobalIterationBounds>;
16
17
  }
17
18
  declare const FlowTimeline: import("svelte").Component<Props, {
18
19
  reset: () => void;
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">import AiChatLayout from './copilot/chat/AiChatLayout.svelte';
2
2
  import FlowBuilder from './FlowBuilder.svelte';
3
- let { flowStore: oldFlowStore, disableAi, light, ...props } = $props();
3
+ let { flowStore: oldFlowStore, flowStateStore: oldFlowStateStore, disableAi, light, ...props } = $props();
4
4
  let flowStore = $state(oldFlowStore);
5
+ let flowStateStore = $state(oldFlowStateStore);
5
6
  let trialRender = $state(true);
6
7
  if (light) {
7
8
  setTimeout(() => {
@@ -13,7 +14,7 @@ if (light) {
13
14
  {#if trialRender}
14
15
  <AiChatLayout noPadding={true} {disableAi}>
15
16
  {#if light}<div class="bg-red-500 absolute z-10">Trial version</div>{/if}
16
- <FlowBuilder {flowStore} {disableAi} {...props} />
17
+ <FlowBuilder {flowStore} {flowStateStore} {disableAi} {...props} />
17
18
  </AiChatLayout>
18
19
  {:else}
19
20
  <div class="flex flex-col items-center justify-center h-screen">
@@ -12,6 +12,7 @@ import rust from 'svelte-highlight/languages/rust';
12
12
  import csharp from 'svelte-highlight/languages/csharp';
13
13
  import yaml from 'svelte-highlight/languages/yaml';
14
14
  import java from 'svelte-highlight/languages/java';
15
+ import ruby from 'svelte-highlight/languages/ruby';
15
16
  import { Button } from './common';
16
17
  import { copyToClipboard } from '../utils';
17
18
  import { ClipboardCopy } from 'lucide-svelte';
@@ -66,7 +67,9 @@ function getLang(lang) {
66
67
  return yaml;
67
68
  case 'java':
68
69
  return java;
69
- // for related places search: ADD_NEW_LANG
70
+ case 'ruby':
71
+ return ruby;
72
+ // for related places search: ADD_NEW_LANG
70
73
  default:
71
74
  return typescript;
72
75
  }
@@ -26,20 +26,24 @@
26
26
  } = $props()
27
27
 
28
28
  let iconComponent = $derived(
29
- name === 'teams'
30
- ? APP_TO_ICON_COMPONENT.ms_teams_webhook
31
- : APP_TO_ICON_COMPONENT[name] || APP_TO_ICON_COMPONENT[name.split('_')[0]]
29
+ name
30
+ ? name === 'teams'
31
+ ? APP_TO_ICON_COMPONENT.ms_teams_webhook
32
+ : APP_TO_ICON_COMPONENT[name] || APP_TO_ICON_COMPONENT[name.split('_')[0]]
33
+ : undefined
32
34
  )
35
+
36
+ let widthInPixels = $derived(parseInt(width))
33
37
  </script>
34
38
 
35
- <div class="truncate flex flex-row gap-2 {center ? 'justify-center items-center' : ''} -pl-2">
39
+ <div class="truncate flex flex-row gap-2 items-center {center ? 'justify-center ' : ''} -pl-2">
36
40
  {#if !silent && !after}
37
41
  {name}
38
42
  {/if}
39
43
  {#if iconComponent}
40
44
  {@const SvelteComponent = iconComponent}
41
45
  <span class={isSelected ? 'text-secondary' : 'text-secondary grayscale'}>
42
- <SvelteComponent {height} {width} />
46
+ <SvelteComponent {height} {width} size={widthInPixels} />
43
47
  </span>
44
48
  {:else if formatExtension}
45
49
  <span class={isSelected ? 'text-secondary' : 'text-secondary grayscale'}>
@@ -1,9 +1,13 @@
1
+ <script module lang="ts">import pLimit from 'p-limit';
2
+ const plimit = pLimit(5);
3
+ </script>
4
+
1
5
  <script lang="ts">import { JobService } from '../gen';
2
6
  import { workspaceStore } from '../stores';
3
7
  import { onDestroy, tick, untrack } from 'svelte';
4
8
  import { sendUserToast } from '../toast';
5
9
  import { isScriptPreview } from '../utils';
6
- let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, onlyResult = false, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
10
+ let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, onlyResult = false, loadPlaceholderJobOnStart = undefined, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
7
11
  /// Last time asked for job progress
8
12
  let lastTimeCheckedProgress = undefined;
9
13
  /// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
@@ -23,6 +27,8 @@ let ITERATIONS_BEFORE_SUPER_SLOW_REFRESH = 100;
23
27
  let lastStartedAt = Date.now();
24
28
  let currentId = $state(undefined);
25
29
  let noPingTimeout = undefined;
30
+ let lastNoLogs = $state(noLogs);
31
+ let lastCompletedJobId = $state(undefined);
26
32
  $effect(() => {
27
33
  let newIsLoading = currentId !== undefined;
28
34
  untrack(() => {
@@ -31,6 +37,29 @@ $effect(() => {
31
37
  }
32
38
  });
33
39
  });
40
+ const noLogsChangeRestartEvent = 'SSE restart after no logs change';
41
+ $effect(() => {
42
+ if (noLogs != lastNoLogs) {
43
+ lastNoLogs = noLogs;
44
+ if (!noLogs) {
45
+ currentEventSource?.onerror?.(new Event(noLogsChangeRestartEvent));
46
+ const lastJobId = lastCompletedJobId;
47
+ if (lastJobId && (job || lastCallbacks?.loadExtraLogs)) {
48
+ plimit(() => JobService.getCompletedJobLogsTail({
49
+ workspace: $workspaceStore,
50
+ id: lastJobId
51
+ })).then((res) => {
52
+ if (res && job) {
53
+ job.logs = res;
54
+ }
55
+ if (res && lastCallbacks?.loadExtraLogs) {
56
+ lastCallbacks.loadExtraLogs({ id: lastJobId, logs: res });
57
+ }
58
+ });
59
+ }
60
+ }
61
+ }
62
+ });
34
63
  function clearCurrentId() {
35
64
  if (currentId) {
36
65
  if (allowConcurentRequests) {
@@ -44,6 +73,7 @@ function clearCurrentId() {
44
73
  export async function abstractRun(fn, callbacks) {
45
74
  try {
46
75
  isLoading = true;
76
+ lastCompletedJobId = undefined;
47
77
  clearCurrentJob();
48
78
  lastCallbacks = callbacks;
49
79
  noPingTimeout = undefined;
@@ -101,6 +131,16 @@ export async function runFlowByPath(path, args, callbacks) {
101
131
  skipPreprocessor: true
102
132
  }), callbacks);
103
133
  }
134
+ export async function runFlowPreview(args, flow, callbacks) {
135
+ return abstractRun(() => JobService.runFlowPreview({
136
+ workspace: $workspaceStore,
137
+ requestBody: {
138
+ args,
139
+ value: flow.value,
140
+ tag: flow.tag
141
+ }
142
+ }), callbacks);
143
+ }
104
144
  function refreshLogOffset() {
105
145
  if (logOffset == 0) {
106
146
  logOffset = job?.logs?.length ? job.logs?.length + 1 : 0;
@@ -145,7 +185,6 @@ export async function cancelJob() {
145
185
  const id = currentId;
146
186
  if (id) {
147
187
  lastCallbacks?.cancel?.({ id });
148
- lastCallbacks = undefined;
149
188
  clearCurrentId();
150
189
  // Clean up SSE connection
151
190
  currentEventSource?.close();
@@ -166,7 +205,6 @@ export async function clearCurrentJob() {
166
205
  if (currentId && !allowConcurentRequests) {
167
206
  job = undefined;
168
207
  lastCallbacks?.cancel?.({ id: currentId });
169
- lastCallbacks = undefined;
170
208
  await cancelJob();
171
209
  }
172
210
  }
@@ -184,11 +222,17 @@ export async function watchJob(testId, callbacks) {
184
222
  syncIteration = 0;
185
223
  errorIteration = 0;
186
224
  currentId = testId;
187
- job = undefined;
225
+ if (loadPlaceholderJobOnStart) {
226
+ job = structuredClone(loadPlaceholderJobOnStart);
227
+ }
228
+ else {
229
+ job = undefined;
230
+ }
188
231
  startedWatchingJob = Date.now();
189
232
  // Clean up any existing SSE connection
190
233
  currentEventSource?.close();
191
234
  currentEventSource = undefined;
235
+ lastCallbacks = callbacks;
192
236
  // Try SSE first, fall back to polling if needed
193
237
  if (supportsSSE()) {
194
238
  await loadTestJobWithSSE(testId, 0, callbacks);
@@ -364,6 +408,7 @@ async function onJobCompleted(id, job, callbacks) {
364
408
  }
365
409
  callbacks?.change?.(job);
366
410
  clearCurrentId();
411
+ lastCompletedJobId = id;
367
412
  }
368
413
  }
369
414
  function setNoPingTimeout(id, attempt, callbacks) {
@@ -389,13 +434,14 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
389
434
  if (isCurrentJob(id)) {
390
435
  try {
391
436
  // First load the job to get initial state
392
- if (!job && !onlyResult) {
437
+ if ((!job || job.id == '') && !onlyResult) {
393
438
  job = await JobService.getJob({
394
439
  workspace: workspace,
395
440
  id,
396
441
  noLogs: noLogs,
397
442
  noCode
398
443
  });
444
+ callbacks?.change?.(job);
399
445
  }
400
446
  if (!onlyResult) {
401
447
  callbacks?.resultStreamUpdate?.({
@@ -524,9 +570,16 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
524
570
  console.warn('SSE error:', error);
525
571
  currentEventSource?.close();
526
572
  currentEventSource = undefined;
527
- if (attempt < 3) {
528
- console.log(`SSE error (1), retrying ... attempt: ${attempt + 1}/3`);
529
- setTimeout(() => loadTestJobWithSSE(id, attempt + 1, callbacks), 1000);
573
+ let delay = 1000;
574
+ let isNoLogsChange = error.type == noLogsChangeRestartEvent;
575
+ if (isNoLogsChange) {
576
+ delay = 0;
577
+ }
578
+ if (attempt < 3 || isNoLogsChange) {
579
+ if (!isNoLogsChange) {
580
+ console.log(`SSE error (1), retrying ... attempt: ${attempt + 1}/3`);
581
+ }
582
+ setTimeout(() => loadTestJobWithSSE(id, attempt + 1, callbacks), delay);
530
583
  }
531
584
  else {
532
585
  // Fall back to polling on error
@@ -1,4 +1,4 @@
1
- import { type Job } from '../gen';
1
+ import { type Job, type OpenFlow } from '../gen';
2
2
  import type { SupportedLanguage } from '../common';
3
3
  export type Callbacks = {
4
4
  done?: (x: Job & {
@@ -26,6 +26,10 @@ export type Callbacks = {
26
26
  id: string;
27
27
  result_stream?: string;
28
28
  }) => void;
29
+ loadExtraLogs?: ({ id, logs }: {
30
+ id: string;
31
+ logs: string;
32
+ }) => void;
29
33
  };
30
34
  interface Props {
31
35
  isLoading?: boolean;
@@ -40,6 +44,7 @@ interface Props {
40
44
  jobUpdateLastFetch?: Date | undefined;
41
45
  toastError?: boolean;
42
46
  onlyResult?: boolean;
47
+ loadPlaceholderJobOnStart?: Job;
43
48
  scriptProgress?: number | undefined;
44
49
  children?: import('svelte').Snippet<[any]>;
45
50
  }
@@ -48,6 +53,9 @@ declare const JobLoader: import("svelte").Component<Props, {
48
53
  runScriptByPath: (path: string, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
49
54
  runScriptByHash: (hash: string, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
50
55
  runFlowByPath: (path: string, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
56
+ runFlowPreview: (args: Record<string, any>, flow: OpenFlow & {
57
+ tag?: string;
58
+ }, callbacks?: Callbacks) => Promise<string>;
51
59
  getLogs: () => Promise<void>;
52
60
  runPreview: (path: string | undefined, code: string, lang: SupportedLanguage | undefined, args: Record<string, any>, tag: string | undefined, lock?: string, hash?: string, callbacks?: Callbacks) => Promise<string>;
53
61
  cancelJob: () => Promise<void>;
@@ -15,7 +15,8 @@ import AnsiUp from 'ansi_up';
15
15
  import NoWorkerWithTagWarning from './runs/NoWorkerWithTagWarning.svelte';
16
16
  import { JobService } from '../gen';
17
17
  import Tooltip from './Tooltip.svelte';
18
- let { content, isLoading, duration = undefined, mem = undefined, wrapperClass = '', jobId = undefined, tag, small = false, drawerOpen = $bindable(false), noMaxH = false, noAutoScroll = false, download = true, customEmptyMessage = 'No logs are available yet', tagLabel = undefined } = $props();
18
+ import { twMerge } from 'tailwind-merge';
19
+ let { content, isLoading, duration = undefined, mem = undefined, wrapperClass = '', jobId = undefined, tag, small = false, drawerOpen = $bindable(false), noMaxH = false, noAutoScroll = false, download = true, customEmptyMessage = 'No logs are available yet', tagLabel = undefined, noPadding = false } = $props();
19
20
  // @ts-ignore
20
21
  const ansi_up = $state(new AnsiUp());
21
22
  ansi_up.use_classes = true;
@@ -213,7 +214,12 @@ let html = $derived(ansi_up.ansi_to_html(downloadStartUrl && prefixIndex != unde
213
214
  : 'top-2'} left-36">mem peak: {(mem / 1024).toPrecision(4)}MB</span
214
215
  >
215
216
  {/if}
216
- <pre class="whitespace-pre break-words {small ? '!text-2xs' : '!text-xs'} w-full p-2"
217
+ <pre
218
+ class={twMerge(
219
+ 'whitespace-pre break-words w-full',
220
+ small ? '!text-2xs' : '!text-xs',
221
+ noPadding ? '' : 'p-2'
222
+ )}
217
223
  >{#if content}{@const len =
218
224
  (content?.length ?? 0) +
219
225
  (loadedFromObjectStore?.length ?? 0)}{#if downloadStartUrl}<button onclick={getStoreLogs}
@@ -13,6 +13,7 @@ interface Props {
13
13
  download?: boolean;
14
14
  customEmptyMessage?: string;
15
15
  tagLabel?: string;
16
+ noPadding?: boolean;
16
17
  }
17
18
  declare const LogViewer: import("svelte").Component<Props, {
18
19
  scrollToBottom: () => void;
@@ -0,0 +1,32 @@
1
+ <script lang="ts">import { FoldVertical, UnfoldVertical } from 'lucide-svelte';
2
+ let { showResultsInputs = $bindable(), toggleExpandAll, allExpanded } = $props();
3
+ </script>
4
+
5
+ <div class="flex justify-end gap-4 items-center p-2 bg-surface-secondary border-b">
6
+ <div class="flex items-center gap-2 whitespace-nowrap">
7
+ <label
8
+ for="showResultsInputs"
9
+ class="text-xs text-tertiary hover:text-primary transition-colors">Show inputs/results</label
10
+ >
11
+ <div class="flex-shrink-0">
12
+ <input
13
+ type="checkbox"
14
+ name="showResultsInputs"
15
+ id="showResultsInputs"
16
+ bind:checked={showResultsInputs}
17
+ class="w-3 h-4 accent-primary -my-1"
18
+ />
19
+ </div>
20
+ </div>
21
+ <button
22
+ onclick={toggleExpandAll}
23
+ class="text-xs text-tertiary hover:text-primary transition-colors flex items-center gap-2 min-w-24 justify-end"
24
+ >
25
+ {allExpanded ? 'Collapse All' : 'Expand All'}
26
+ {#if allExpanded}
27
+ <FoldVertical size={16} />
28
+ {:else}
29
+ <UnfoldVertical size={16} />
30
+ {/if}
31
+ </button>
32
+ </div>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ showResultsInputs: boolean | undefined;
3
+ toggleExpandAll: () => void;
4
+ allExpanded: boolean | undefined;
5
+ }
6
+ declare const LogViewerHeader: import("svelte").Component<Props, {}, "showResultsInputs">;
7
+ type LogViewerHeader = ReturnType<typeof LogViewerHeader>;
8
+ export default LogViewerHeader;
@@ -1,4 +1,4 @@
1
- <script lang="ts">import { allTrue } from '../utils';
1
+ <script lang="ts">import { allTrue, sendUserToast } from '../utils';
2
2
  import { RefreshCw } from 'lucide-svelte';
3
3
  import ArgInput from './ArgInput.svelte';
4
4
  import { Button } from './common';
@@ -53,10 +53,11 @@ async function loadResourceTypes() {
53
53
  resourceTypes = await getResourceTypes();
54
54
  }
55
55
  loadResourceTypes();
56
- let args = $state({});
57
56
  onMount(() => {
58
- testSteps?.updateStepArgs(mod.id, $flowStateStore, flowStore?.val, previewArgs?.val);
59
- args = testSteps?.getStepArgs(mod.id) ?? { value: {} };
57
+ if (!testSteps) {
58
+ sendUserToast('testSteps module not initialized. Preview will not work.', true);
59
+ }
60
+ testSteps?.updateStepArgs(mod.id, flowStateStore.val, flowStore?.val, previewArgs?.val);
60
61
  });
61
62
  </script>
62
63
 
@@ -71,14 +72,17 @@ onMount(() => {
71
72
  )}
72
73
  data-arg={argName}
73
74
  >
74
- {#if typeof args.value == 'object' && schema?.properties?.[argName]}
75
+ {#if schema?.properties?.[argName]}
75
76
  <ArgInput
76
77
  {resourceTypes}
77
78
  minW={false}
78
79
  autofocus={autofocus && !focusArg && i == 0}
79
80
  label={argName}
80
81
  description={schema.properties[argName].description}
81
- bind:value={args.value[argName]}
82
+ bind:value={
83
+ () => testSteps?.getStepInputArgs(mod.id, argName),
84
+ (v) => testSteps?.setStepInputArgs(mod.id, argName, v)
85
+ }
82
86
  type={schema.properties[argName].type}
83
87
  oneOf={schema.properties[argName].oneOf}
84
88
  required={schema?.required?.includes(argName)}
@@ -1,15 +1,22 @@
1
1
  <script lang="ts">import LogViewer from './LogViewer.svelte';
2
2
  import JobProgressBar from './jobs/JobProgressBar.svelte';
3
3
  import ScriptFix from './copilot/ScriptFix.svelte';
4
+ import {} from '../gen';
4
5
  import OutputPickerInner from './flows/propPicker/OutputPickerInner.svelte';
5
6
  import { Pane, Splitpanes } from 'svelte-splitpanes';
6
7
  import { getContext } from 'svelte';
7
8
  import { getStringError } from './copilot/chat/utils';
9
+ import AiAgentLogViewer from './AIAgentLogViewer.svelte';
8
10
  let { lang, editor, diffEditor, loopStatus = undefined, lastJob = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false, tagLabel = undefined } = $props();
9
11
  const { testSteps } = getContext('FlowEditorContext');
10
12
  let selectedJob = $state(undefined);
11
13
  let preview = $state(undefined);
12
14
  let jobProgressReset = $state(() => { });
15
+ $effect(() => {
16
+ if (preview != undefined && testJob) {
17
+ preview = undefined;
18
+ }
19
+ });
13
20
  let forceJson = $state(false);
14
21
  const logJob = $derived(testJob ?? selectedJob);
15
22
  </script>
@@ -60,6 +67,15 @@ const logJob = $derived(testJob ?? selectedJob);
60
67
  customEmptyMessage="Using pinned data"
61
68
  {tagLabel}
62
69
  />
70
+ {:else if mod.value.type === 'aiagent' && logJob?.type === 'CompletedJob'}
71
+ <AiAgentLogViewer
72
+ tools={mod.value.tools}
73
+ agentJob={{
74
+ ...logJob,
75
+ type: 'CompletedJob'
76
+ }}
77
+ workspaceId={logJob.workspace_id}
78
+ />
63
79
  {:else}
64
80
  <LogViewer
65
81
  small
@@ -1,6 +1,6 @@
1
1
  import type DiffEditor from './DiffEditor.svelte';
2
2
  import type Editor from './Editor.svelte';
3
- import type { Script, Job, FlowModule } from '../gen';
3
+ import { type Script, type Job, type FlowModule } from '../gen';
4
4
  interface Props {
5
5
  lang: Script['language'];
6
6
  editor: Editor | undefined;