windmill-components 1.511.1 → 1.531.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) 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/AppConnectInner.svelte.d.ts +1 -1
  5. package/package/components/ArgInput.svelte +42 -14
  6. package/package/components/ArgInput.svelte.d.ts +2 -10
  7. package/package/components/AssignableTagsInner.svelte +5 -0
  8. package/package/components/AuthSettings.svelte +4 -2
  9. package/package/components/AuthSettings.svelte.d.ts +1 -0
  10. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  11. package/package/components/DBManagerDrawer.svelte +154 -151
  12. package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
  13. package/package/components/DBTable.svelte +3 -3
  14. package/package/components/DBTable.svelte.d.ts +1 -0
  15. package/package/components/DBTableEditor.svelte +7 -7
  16. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  17. package/package/components/DeployWorkspace.svelte +1 -1
  18. package/package/components/Dev.svelte +12 -28
  19. package/package/components/DiffEditor.svelte +6 -3
  20. package/package/components/DiffEditor.svelte.d.ts +1 -0
  21. package/package/components/DisplayResult.svelte +46 -14
  22. package/package/components/DisplayResult.svelte.d.ts +5 -1
  23. package/package/components/DynSelect.svelte +58 -34
  24. package/package/components/DynSelect.svelte.d.ts +3 -11
  25. package/package/components/EditableSchemaForm.svelte +131 -8
  26. package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
  27. package/package/components/Editor.svelte +27 -9
  28. package/package/components/Editor.svelte.d.ts +1 -1
  29. package/package/components/EditorBar.svelte +105 -7
  30. package/package/components/EditorSettings.svelte +6 -0
  31. package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
  32. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
  33. package/package/components/ExploreAssetButton.svelte +14 -4
  34. package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
  35. package/package/components/FirstStepInputs.svelte +2 -2
  36. package/package/components/FlowBuilder.svelte +18 -36
  37. package/package/components/FlowGraphViewerStep.svelte +7 -0
  38. package/package/components/FlowJobResult.svelte +16 -64
  39. package/package/components/FlowJobResult.svelte.d.ts +11 -4
  40. package/package/components/FlowLogViewer.svelte +660 -0
  41. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  42. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  43. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  44. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  45. package/package/components/FlowPreviewContent.svelte +13 -6
  46. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  47. package/package/components/FlowPreviewResult.svelte +7 -5
  48. package/package/components/FlowPreviewResult.svelte.d.ts +4 -5
  49. package/package/components/FlowStatusViewer.svelte +28 -16
  50. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  51. package/package/components/FlowStatusViewerInner.svelte +500 -295
  52. package/package/components/FlowStatusViewerInner.svelte.d.ts +34 -34
  53. package/package/components/FlowTimeline.svelte +11 -13
  54. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  55. package/package/components/FolderEditor.svelte +1 -1
  56. package/package/components/GitDiffPreview.svelte +14 -18
  57. package/package/components/GitDiffPreview.svelte.d.ts +2 -8
  58. package/package/components/GitHubAppIntegration.svelte +3 -1
  59. package/package/components/HighlightCode.svelte +4 -1
  60. package/package/components/IconedResourceType.svelte +9 -5
  61. package/package/components/IdEditorInput.svelte +25 -22
  62. package/package/components/IdEditorInput.svelte.d.ts +11 -23
  63. package/package/components/InstanceSetting.svelte +7 -2
  64. package/package/components/InstanceSettings.svelte +1 -0
  65. package/package/components/JobLoader.svelte +108 -12
  66. package/package/components/JobLoader.svelte.d.ts +16 -3
  67. package/package/components/LogViewer.svelte +8 -2
  68. package/package/components/LogViewer.svelte.d.ts +1 -0
  69. package/package/components/LogViewerHeader.svelte +32 -0
  70. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  71. package/package/components/Login.svelte +8 -2
  72. package/package/components/MemoryFootprintViewer.svelte +1 -1
  73. package/package/components/ModulePreviewForm.svelte +10 -6
  74. package/package/components/ModulePreviewResultViewer.svelte +18 -2
  75. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  76. package/package/components/ModuleTest.svelte +59 -16
  77. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  78. package/package/components/NextcloudSetting.svelte +84 -0
  79. package/package/components/NextcloudSetting.svelte.d.ts +7 -0
  80. package/package/components/ObjectResourceInput.svelte +3 -2
  81. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  82. package/package/components/ParqetCsvTableRenderer.svelte +1 -1
  83. package/package/components/RelativeLineNumbers.svelte +16 -0
  84. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  85. package/package/components/ResourceEditor.svelte +10 -5
  86. package/package/components/ResourcePicker.svelte +8 -1
  87. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  88. package/package/components/ResultStreamDisplay.svelte +5 -0
  89. package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
  90. package/package/components/RunForm.svelte +9 -1
  91. package/package/components/SchemaForm.svelte +2 -2
  92. package/package/components/SchemaForm.svelte.d.ts +2 -10
  93. package/package/components/ScriptBuilder.svelte +26 -19
  94. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  95. package/package/components/ScriptEditor.svelte +2 -2
  96. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  97. package/package/components/ScriptWrapper.svelte +1 -1
  98. package/package/components/ShareModal.svelte.d.ts +1 -1
  99. package/package/components/SimpleAgTable.svelte +2 -0
  100. package/package/components/SimpleAgTable.svelte.d.ts +2 -0
  101. package/package/components/SimpleEditor.svelte +10 -4
  102. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  103. package/package/components/SqlRepl.svelte +21 -7
  104. package/package/components/SqlRepl.svelte.d.ts +2 -2
  105. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  106. package/package/components/TemplateEditor.svelte +1 -1
  107. package/package/components/UserSettings.svelte +4 -4
  108. package/package/components/WorkerTagSelect.svelte +70 -1
  109. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  110. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  111. package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
  112. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  113. package/package/components/apps/components/display/AppText.svelte +2 -2
  114. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
  115. package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
  116. package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
  117. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  118. package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
  119. package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
  120. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
  121. package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
  122. package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
  123. package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
  124. package/package/components/apps/components/display/dbtable/utils.js +52 -28
  125. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
  126. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  127. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  128. package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -6
  129. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  130. package/package/components/apps/components/display/table/utils.js +7 -4
  131. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
  132. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  133. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  134. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  135. package/package/components/apps/components/helpers/RunnableComponent.svelte +10 -8
  136. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -2
  137. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  138. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  139. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  140. package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
  141. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  142. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  143. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -21
  144. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  145. package/package/components/apps/components/layout/AppList.svelte +9 -8
  146. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  147. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  148. package/package/components/apps/components/layout/AppStepper.svelte +10 -6
  149. package/package/components/apps/components/layout/AppTabs.svelte +3 -3
  150. package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
  151. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  152. package/package/components/apps/editor/GridEditor.svelte +24 -19
  153. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  154. package/package/components/apps/editor/GridViewer.svelte +1 -0
  155. package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
  156. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  157. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  158. package/package/components/apps/editor/appUtils.js +17 -68
  159. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  160. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  161. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
  162. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
  163. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +14 -55
  164. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  165. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  166. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  167. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +31 -45
  168. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  169. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  170. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
  171. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  172. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  173. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  174. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  175. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  176. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  177. package/package/components/apps/utils.d.ts +2 -0
  178. package/package/components/apps/utils.js +22 -0
  179. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  180. package/package/components/assets/JobAssetsViewer.svelte +2 -2
  181. package/package/components/assets/lib.js +4 -0
  182. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
  183. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  184. package/package/components/common/button/Button.svelte +4 -3
  185. package/package/components/common/button/Button.svelte.d.ts +1 -0
  186. package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
  187. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
  188. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
  189. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
  190. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  191. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  192. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  193. package/package/components/common/modal/Modal.svelte +2 -5
  194. package/package/components/common/tabs/TabsV2.svelte +2 -1
  195. package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
  196. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  197. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  198. package/package/components/copilot/MetadataGen.svelte +19 -1
  199. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  200. package/package/components/copilot/ScriptGen.svelte +23 -31
  201. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  202. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  203. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  204. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  205. package/package/components/copilot/chat/AIChatManager.svelte.js +171 -33
  206. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  207. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  208. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  209. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  210. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  211. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  212. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  213. package/package/components/copilot/chat/api/apiTools.js +192 -0
  214. package/package/components/copilot/chat/api/core.d.ts +7 -0
  215. package/package/components/copilot/chat/api/core.js +61 -0
  216. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  217. package/package/components/copilot/chat/flow/core.js +213 -42
  218. package/package/components/copilot/chat/flow/utils.js +3 -0
  219. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  220. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  221. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  222. package/package/components/copilot/chat/navigator/core.js +20 -22
  223. package/package/components/copilot/chat/script/core.d.ts +11 -3
  224. package/package/components/copilot/chat/script/core.js +120 -44
  225. package/package/components/copilot/chat/shared.d.ts +31 -4
  226. package/package/components/copilot/chat/shared.js +235 -10
  227. package/package/components/copilot/lib.d.ts +1 -1
  228. package/package/components/copilot/lib.js +15 -6
  229. package/package/components/custom_ui.d.ts +4 -0
  230. package/package/components/dbOps.d.ts +20 -8
  231. package/package/components/dbOps.js +85 -40
  232. package/package/components/details/DetailPageHeader.svelte +0 -2
  233. package/package/components/details/DetailPageLayout.svelte +34 -33
  234. package/package/components/flow_builder.d.ts +1 -2
  235. package/package/components/flows/FlowEditor.svelte +3 -3
  236. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  237. package/package/components/flows/common/FlowCard.svelte +2 -2
  238. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  239. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  240. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  241. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  242. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  243. package/package/components/flows/content/FlowConstants.svelte +3 -3
  244. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  245. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  246. package/package/components/flows/content/FlowInput.svelte +5 -0
  247. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  248. package/package/components/flows/content/FlowLoop.svelte +2 -2
  249. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  250. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  251. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  252. package/package/components/flows/content/FlowModuleScript.svelte +0 -1
  253. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  254. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  255. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  256. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  257. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  258. package/package/components/flows/content/FlowResult.svelte +2 -3
  259. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  260. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  261. package/package/components/flows/dfs.d.ts +3 -1
  262. package/package/components/flows/dfs.js +5 -1
  263. package/package/components/flows/flowInfers.js +78 -0
  264. package/package/components/flows/flowState.d.ts +2 -3
  265. package/package/components/flows/flowState.js +2 -2
  266. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  267. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  268. package/package/components/flows/flowStore.d.ts +3 -4
  269. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  270. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  271. package/package/components/flows/idUtils.js +2 -1
  272. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  273. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  274. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  275. package/package/components/flows/map/FlowModuleSchemaItem.svelte +15 -15
  276. package/package/components/flows/map/FlowModuleSchemaMap.svelte +27 -15
  277. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  278. package/package/components/flows/map/InsertModuleButton.svelte +4 -1
  279. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  280. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  281. package/package/components/flows/map/MapItem.svelte +4 -2
  282. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  283. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  284. package/package/components/flows/propPicker/OutputBadge.svelte +16 -10
  285. package/package/components/flows/propPicker/OutputPickerInner.svelte +19 -6
  286. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
  287. package/package/components/flows/propPicker/StepHistory.svelte +4 -1
  288. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  289. package/package/components/flows/testSteps.svelte.js +26 -23
  290. package/package/components/flows/types.d.ts +1 -1
  291. package/package/components/flows/utils.d.ts +3 -5
  292. package/package/components/flows/utils.js +3 -4
  293. package/package/components/git_sync/DetectionFlow.svelte +202 -0
  294. package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
  295. package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
  296. package/package/components/git_sync/GitSyncContext.svelte.js +462 -0
  297. package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
  298. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
  299. package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
  300. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
  301. package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
  302. package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
  303. package/package/components/git_sync/GitSyncSection.svelte +89 -0
  304. package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
  305. package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
  306. package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
  307. package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
  308. package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
  309. package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
  310. package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
  311. package/package/components/graph/FlowGraphV2.svelte +49 -25
  312. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  313. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  314. package/package/components/graph/graphBuilder.svelte.js +31 -15
  315. package/package/components/graph/model.d.ts +9 -6
  316. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  317. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  318. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  319. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  320. package/package/components/graph/renderers/nodes/AssetNode.svelte +19 -14
  321. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  322. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  323. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  324. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  325. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  326. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  327. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  328. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  329. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  330. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  331. package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
  332. package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
  333. package/package/components/icons/AssetGenericIcon.svelte +3 -0
  334. package/package/components/icons/DucklakeIcon.svelte +18 -0
  335. package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
  336. package/package/components/icons/RubyIcon.svelte +656 -0
  337. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  338. package/package/components/instanceSettings.js +20 -3
  339. package/package/components/modulesTest.svelte.d.ts +6 -3
  340. package/package/components/modulesTest.svelte.js +32 -0
  341. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  342. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  343. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  344. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +2 -5
  345. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  346. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  347. package/package/components/runs/RunRow.svelte +5 -1
  348. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  349. package/package/components/schema/AddProperty.svelte +41 -36
  350. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  351. package/package/components/schema/AddPropertyV2.svelte +41 -37
  352. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  353. package/package/components/schema/FlowPropertyEditor.svelte +11 -8
  354. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  355. package/package/components/schema/PropertyEditor.svelte +0 -2
  356. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  357. package/package/components/schema/SchemaFormDND.svelte +2 -1
  358. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
  359. package/package/components/scriptEditor/LogPanel.svelte +5 -3
  360. package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
  361. package/package/components/search/RunsSearch.svelte +1 -1
  362. package/package/components/select/Select.svelte +7 -4
  363. package/package/components/select/Select.svelte.d.ts +5 -0
  364. package/package/components/select/SelectDropdown.svelte +2 -1
  365. package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
  366. package/package/components/settings/CreateToken.svelte +132 -12
  367. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  368. package/package/components/settings/TokenDisplay.svelte +18 -42
  369. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  370. package/package/components/settings/TokensTable.svelte +2 -4
  371. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  372. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  373. package/package/components/sidebar/MenuButton.svelte +12 -10
  374. package/package/components/sidebar/changelogs.js +5 -0
  375. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  376. package/package/components/stepHistoryLoader.svelte.js +7 -12
  377. package/package/components/table/AutoDataTable.svelte +6 -4
  378. package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
  379. package/package/components/table/DataTable.svelte +12 -10
  380. package/package/components/table/DataTable.svelte.d.ts +1 -0
  381. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
  382. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  383. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  384. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
  385. package/package/components/triggers/gcp/utils.js +1 -0
  386. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  387. package/package/components/triggers/http/utils.js +1 -1
  388. package/package/components/triggers/kafka/utils.js +1 -1
  389. package/package/components/triggers/mqtt/utils.js +1 -1
  390. package/package/components/triggers/nats/utils.js +1 -1
  391. package/package/components/triggers/postgres/utils.js +1 -1
  392. package/package/components/triggers/sqs/utils.js +1 -1
  393. package/package/components/triggers/utils.js +2 -1
  394. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
  395. package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
  396. package/package/components/triggers/websocket/utils.js +1 -1
  397. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  398. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  399. package/package/components/tutorials/utils.js +3 -0
  400. package/package/components/worker_group.d.ts +4 -1
  401. package/package/components/worker_group.js +3 -2
  402. package/package/components/workspaceSettings/AISettings.svelte +52 -36
  403. package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
  404. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
  405. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
  406. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
  407. package/package/consts.js +2 -1
  408. package/package/editorLangUtils.d.ts +1 -1
  409. package/package/editorLangUtils.js +2 -0
  410. package/package/editorUtils.d.ts +2 -1
  411. package/package/editorUtils.js +2 -1
  412. package/package/gen/core/OpenAPI.js +1 -1
  413. package/package/gen/schemas.gen.d.ts +303 -14
  414. package/package/gen/schemas.gen.js +371 -76
  415. package/package/gen/services.gen.d.ts +136 -16
  416. package/package/gen/services.gen.js +264 -19
  417. package/package/gen/types.gen.d.ts +736 -17
  418. package/package/git-sync.d.ts +36 -0
  419. package/package/git-sync.js +1 -0
  420. package/package/hub.d.ts +1 -0
  421. package/package/hubPaths.json +9 -3
  422. package/package/infer.js +13 -3
  423. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  424. package/package/script_helpers.d.ts +5 -2
  425. package/package/script_helpers.js +87 -14
  426. package/package/scripts.d.ts +1 -1
  427. package/package/scripts.js +3 -2
  428. package/package/services/JobManager.d.ts +28 -0
  429. package/package/services/JobManager.js +114 -0
  430. package/package/stores.d.ts +3 -1
  431. package/package/stores.js +2 -0
  432. package/package/svelte5Utils.svelte.d.ts +16 -0
  433. package/package/svelte5Utils.svelte.js +26 -0
  434. package/package/utils.d.ts +19 -2
  435. package/package/utils.js +55 -2
  436. package/package.json +24 -22
  437. package/package/components/AllFlowLogs.svelte +0 -31
  438. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  439. package/package/components/InitGitRepoPopover.svelte +0 -410
  440. package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
  441. package/package/components/PullGitRepoPopover.svelte +0 -355
  442. package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
  443. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  444. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
  445. package/package/inferArgSig.d.ts +0 -42
  446. package/package/inferArgSig.js +0 -198
@@ -1,24 +1,31 @@
1
1
  import { flowTools, prepareFlowSystemMessage, prepareFlowUserMessage } from './flow/core';
2
2
  import ContextManager from './ContextManager.svelte';
3
3
  import HistoryManager from './HistoryManager.svelte';
4
- import { processToolCall } from './shared';
4
+ import { extractCodeFromMarkdown, getLatestAssistantMessage, processToolCall } from './shared';
5
5
  import { INLINE_CHAT_SYSTEM_PROMPT, prepareScriptSystemMessage, prepareScriptTools } from './script/core';
6
6
  import { navigatorTools, prepareNavigatorSystemMessage } from './navigator/core';
7
- import { loadApiTools } from './navigator/apiTools';
7
+ import { loadApiTools } from './api/apiTools';
8
8
  import { prepareScriptUserMessage } from './script/core';
9
9
  import { prepareNavigatorUserMessage } from './navigator/core';
10
10
  import { sendUserToast } from '../../../toast';
11
- import { getCompletion } from '../lib';
11
+ import { getCompletion, getModelContextWindow } from '../lib';
12
12
  import { dfs } from '../../flows/previousResults';
13
13
  import { getStringError } from './utils';
14
14
  import { untrack } from 'svelte';
15
- import { askTools, prepareAskSystemMessage } from './ask/core';
15
+ import { copilotSessionModel } from '../../../stores';
16
+ import { askTools, prepareAskSystemMessage, prepareAskUserMessage } from './ask/core';
16
17
  import { chatState, DEFAULT_SIZE, triggerablesByAi } from './sharedChatState.svelte';
18
+ import { get } from 'svelte/store';
19
+ import { prepareApiSystemMessage, prepareApiUserMessage } from './api/core';
20
+ // If the estimated token usage is greater than the model context window - the threshold, we delete the oldest message
21
+ const MAX_TOKENS_THRESHOLD_PERCENTAGE = 0.05;
22
+ const MAX_TOKENS_HARD_LIMIT = 5000;
17
23
  export var AIMode;
18
24
  (function (AIMode) {
19
25
  AIMode["SCRIPT"] = "script";
20
26
  AIMode["FLOW"] = "flow";
21
27
  AIMode["NAVIGATOR"] = "navigator";
28
+ AIMode["API"] = "API";
22
29
  AIMode["ASK"] = "ask";
23
30
  })(AIMode || (AIMode = {}));
24
31
  class AIChatManager {
@@ -52,18 +59,56 @@ class AIChatManager {
52
59
  pendingNewCode = $state(undefined);
53
60
  apiTools = $state([]);
54
61
  aiChatInput = $state(null);
62
+ confirmationCallback = $state(undefined);
55
63
  allowedModes = $derived({
56
64
  script: this.scriptEditorOptions !== undefined,
57
65
  flow: this.flowAiChatHelpers !== undefined,
58
66
  navigator: true,
59
- ask: true
67
+ ask: true,
68
+ API: true
60
69
  });
61
70
  open = $derived(chatState.size > 0);
71
+ checkTokenUsageOverLimit = (messages) => {
72
+ const estimatedTokens = messages.reduce((acc, message) => {
73
+ // one token is ~ 4 characters
74
+ const tokenPerCharacter = 4;
75
+ // handle content
76
+ if (message.content) {
77
+ acc += message.content.length / tokenPerCharacter;
78
+ }
79
+ // Handle tool calls
80
+ if (message.role === 'assistant' && message.tool_calls) {
81
+ acc += JSON.stringify(message.tool_calls).length / tokenPerCharacter;
82
+ }
83
+ return acc;
84
+ }, 0);
85
+ const modelContextWindow = getModelContextWindow(get(copilotSessionModel)?.model ?? '');
86
+ return (estimatedTokens >
87
+ modelContextWindow -
88
+ Math.max(modelContextWindow * MAX_TOKENS_THRESHOLD_PERCENTAGE, MAX_TOKENS_HARD_LIMIT));
89
+ };
90
+ deleteOldestMessage = (messages, maxDepth = 10) => {
91
+ if (maxDepth <= 0 || messages.length <= 1) {
92
+ return messages;
93
+ }
94
+ const removed = messages.shift();
95
+ // if the removed message is an assistant with tool calls, we need to delete correspding tool response.
96
+ if (removed?.role === 'assistant' && removed.tool_calls) {
97
+ if (messages.length > 0 && messages[0]?.role === 'tool') {
98
+ messages.shift();
99
+ }
100
+ }
101
+ // keep deleting messages until we are under the limit
102
+ if (this.checkTokenUsageOverLimit(messages)) {
103
+ return this.deleteOldestMessage(messages, maxDepth - 1);
104
+ }
105
+ return messages;
106
+ };
62
107
  loadApiTools = async () => {
63
108
  try {
64
109
  this.apiTools = await loadApiTools();
65
- if (this.mode === AIMode.NAVIGATOR) {
66
- this.tools = [this.changeModeTool, ...navigatorTools, ...this.apiTools];
110
+ if (this.mode === AIMode.API) {
111
+ this.tools = [...this.apiTools];
67
112
  }
68
113
  }
69
114
  catch (err) {
@@ -71,6 +116,20 @@ class AIChatManager {
71
116
  this.apiTools = [];
72
117
  }
73
118
  };
119
+ // Request confirmation from user for a tool call
120
+ requestConfirmation = (toolId) => {
121
+ return new Promise((resolve) => {
122
+ // Store the callback for this specific tool
123
+ this.confirmationCallback = resolve;
124
+ });
125
+ };
126
+ // Handle confirmation response for a specific tool
127
+ handleToolConfirmation = (toolId, confirmed) => {
128
+ if (this.confirmationCallback) {
129
+ this.confirmationCallback(confirmed);
130
+ this.confirmationCallback = undefined;
131
+ }
132
+ };
74
133
  setAiChatInput(aiChatInput) {
75
134
  this.aiChatInput = aiChatInput;
76
135
  }
@@ -96,7 +155,27 @@ class AIChatManager {
96
155
  const lang = this.scriptEditorOptions?.lang ?? 'bun';
97
156
  this.tools = [this.changeModeTool, ...prepareScriptTools(lang, context)];
98
157
  this.helpers = {
99
- getLang: () => lang
158
+ getScriptOptions: () => {
159
+ return {
160
+ code: this.scriptEditorOptions?.code ?? '',
161
+ lang: lang,
162
+ path: this.scriptEditorOptions?.path ?? '',
163
+ args: this.scriptEditorOptions?.args ?? {}
164
+ };
165
+ },
166
+ getLastSuggestedCode: () => {
167
+ const latestMessage = getLatestAssistantMessage(this.displayMessages);
168
+ if (latestMessage) {
169
+ const codeBlocks = extractCodeFromMarkdown(latestMessage);
170
+ if (codeBlocks.length > 0) {
171
+ return codeBlocks[codeBlocks.length - 1];
172
+ }
173
+ }
174
+ return undefined;
175
+ },
176
+ applyCode: (code, applyAll) => {
177
+ this.scriptEditorApplyCode?.(code, applyAll);
178
+ }
100
179
  };
101
180
  if (options?.closeScriptSettings) {
102
181
  const closeComponent = triggerablesByAi['close-script-builder-settings'];
@@ -113,7 +192,7 @@ class AIChatManager {
113
192
  }
114
193
  else if (mode === AIMode.NAVIGATOR) {
115
194
  this.systemMessage = prepareNavigatorSystemMessage();
116
- this.tools = [this.changeModeTool, ...navigatorTools, ...this.apiTools];
195
+ this.tools = [this.changeModeTool, ...navigatorTools];
117
196
  this.helpers = {};
118
197
  }
119
198
  else if (mode === AIMode.ASK) {
@@ -121,6 +200,11 @@ class AIChatManager {
121
200
  this.tools = [...askTools];
122
201
  this.helpers = {};
123
202
  }
203
+ else if (mode === AIMode.API) {
204
+ this.systemMessage = prepareApiSystemMessage();
205
+ this.tools = [...this.apiTools];
206
+ this.helpers = {};
207
+ }
124
208
  }
125
209
  canApplyCode = $derived(this.allowedModes.script && this.mode === AIMode.SCRIPT);
126
210
  changeModeTool = {
@@ -128,14 +212,14 @@ class AIChatManager {
128
212
  type: 'function',
129
213
  function: {
130
214
  name: 'change_mode',
131
- description: 'Change the AI mode to the one specified. Script mode is used to create scripts, and flow mode is used to create flows. Navigator mode is used to navigate the application and help the user find what they are looking for.',
215
+ description: 'Change the AI mode to the one specified. Script mode is used to create scripts. Flow mode is used to create flows. Navigator mode is used to navigate the application and help the user find what they are looking for. API mode is used to make API calls to the Windmill backend.',
132
216
  parameters: {
133
217
  type: 'object',
134
218
  properties: {
135
219
  mode: {
136
220
  type: 'string',
137
221
  description: 'The mode to change to',
138
- enum: ['script', 'flow', 'navigator']
222
+ enum: ['script', 'flow', 'navigator', 'API']
139
223
  },
140
224
  pendingPrompt: {
141
225
  type: 'string',
@@ -148,11 +232,11 @@ class AIChatManager {
148
232
  }
149
233
  },
150
234
  fn: async ({ args, toolId, toolCallbacks }) => {
151
- toolCallbacks.setToolStatus(toolId, 'Switching to ' + args.mode + ' mode...');
235
+ toolCallbacks.setToolStatus(toolId, { content: 'Switching to ' + args.mode + ' mode...' });
152
236
  this.changeMode(args.mode, args.pendingPrompt, {
153
237
  closeScriptSettings: true
154
238
  });
155
- toolCallbacks.setToolStatus(toolId, 'Switched to ' + args.mode + ' mode');
239
+ toolCallbacks.setToolStatus(toolId, { content: 'Switched to ' + args.mode + ' mode' });
156
240
  return 'Mode changed to ' + args.mode;
157
241
  }
158
242
  };
@@ -213,17 +297,23 @@ class AIChatManager {
213
297
  }
214
298
  };
215
299
  chatRequest = async ({ messages, abortController, callbacks, systemMessage: systemMessageOverride }) => {
300
+ let addedMessages = [];
216
301
  try {
217
302
  let completion = null;
218
303
  while (true) {
219
304
  const systemMessage = systemMessageOverride ?? this.systemMessage;
220
- const tools = this.tools;
221
305
  const helpers = this.helpers;
306
+ const tools = this.tools;
307
+ for (const tool of tools) {
308
+ if (tool.setSchema) {
309
+ await tool.setSchema(helpers);
310
+ }
311
+ }
222
312
  let pendingPrompt = this.pendingPrompt;
223
313
  let pendingUserMessage = undefined;
224
314
  if (pendingPrompt) {
225
315
  if (this.mode === AIMode.SCRIPT) {
226
- pendingUserMessage = await prepareScriptUserMessage(pendingPrompt, this.scriptEditorOptions?.lang, this.contextManager.getSelectedContext());
316
+ pendingUserMessage = prepareScriptUserMessage(pendingPrompt, this.scriptEditorOptions?.lang, this.contextManager.getSelectedContext());
227
317
  }
228
318
  else if (this.mode === AIMode.FLOW) {
229
319
  pendingUserMessage = prepareFlowUserMessage(pendingPrompt, this.flowAiChatHelpers.getFlowAndSelectedId());
@@ -283,12 +373,14 @@ class AIChatManager {
283
373
  }
284
374
  }
285
375
  if (answer) {
286
- messages.push({ role: 'assistant', content: answer });
376
+ const toAdd = { role: 'assistant', content: answer };
377
+ addedMessages.push(toAdd);
378
+ messages.push(toAdd);
287
379
  }
288
380
  callbacks.onMessageEnd();
289
381
  const toolCalls = Object.values(finalToolCalls).filter((toolCall) => toolCall.id !== undefined && toolCall.function?.arguments !== undefined);
290
382
  if (toolCalls.length > 0) {
291
- messages.push({
383
+ const toAdd = {
292
384
  role: 'assistant',
293
385
  tool_calls: toolCalls.map((t) => ({
294
386
  ...t,
@@ -297,15 +389,18 @@ class AIChatManager {
297
389
  arguments: t.function.arguments || '{}'
298
390
  }
299
391
  }))
300
- });
392
+ };
393
+ messages.push(toAdd);
394
+ addedMessages.push(toAdd);
301
395
  for (const toolCall of toolCalls) {
302
- await processToolCall({
396
+ const messageToAdd = await processToolCall({
303
397
  tools,
304
398
  toolCall,
305
- messages,
306
399
  helpers,
307
400
  toolCallbacks: callbacks
308
401
  });
402
+ messages.push(messageToAdd);
403
+ addedMessages.push(messageToAdd);
309
404
  }
310
405
  }
311
406
  else {
@@ -313,6 +408,7 @@ class AIChatManager {
313
408
  }
314
409
  }
315
410
  }
411
+ return addedMessages;
316
412
  }
317
413
  catch (err) {
318
414
  callbacks.onMessageEnd();
@@ -345,7 +441,7 @@ class AIChatManager {
345
441
  };
346
442
  let reply = '';
347
443
  try {
348
- const userMessage = await prepareScriptUserMessage(instructions, lang, selectedContext, {
444
+ const userMessage = prepareScriptUserMessage(instructions, lang, selectedContext, {
349
445
  isPreprocessor: false
350
446
  });
351
447
  const messages = [userMessage];
@@ -443,18 +539,38 @@ class AIChatManager {
443
539
  }
444
540
  const lang = this.scriptEditorOptions?.lang ?? options.lang ?? 'bun';
445
541
  const isPreprocessor = this.scriptEditorOptions?.path === 'preprocessor' || options.isPreprocessor;
446
- const userMessage = this.mode === AIMode.FLOW
447
- ? prepareFlowUserMessage(oldInstructions, this.flowAiChatHelpers.getFlowAndSelectedId())
448
- : this.mode === AIMode.NAVIGATOR
449
- ? prepareNavigatorUserMessage(oldInstructions)
450
- : await prepareScriptUserMessage(oldInstructions, lang, oldSelectedContext, {
542
+ let userMessage = {
543
+ role: 'user',
544
+ content: ''
545
+ };
546
+ switch (this.mode) {
547
+ case AIMode.FLOW:
548
+ userMessage = prepareFlowUserMessage(oldInstructions, this.flowAiChatHelpers.getFlowAndSelectedId());
549
+ break;
550
+ case AIMode.NAVIGATOR:
551
+ userMessage = prepareNavigatorUserMessage(oldInstructions);
552
+ break;
553
+ case AIMode.ASK:
554
+ userMessage = prepareAskUserMessage(oldInstructions);
555
+ break;
556
+ case AIMode.SCRIPT:
557
+ userMessage = prepareScriptUserMessage(oldInstructions, lang, oldSelectedContext, {
451
558
  isPreprocessor
452
559
  });
560
+ break;
561
+ case AIMode.API:
562
+ userMessage = prepareApiUserMessage(oldInstructions);
563
+ break;
564
+ }
453
565
  this.messages.push(userMessage);
454
566
  await this.historyManager.saveChat(this.displayMessages, this.messages);
455
567
  this.currentReply = '';
568
+ let trimmedMessages = [...this.messages];
569
+ if (this.checkTokenUsageOverLimit(trimmedMessages)) {
570
+ trimmedMessages = this.deleteOldestMessage(trimmedMessages);
571
+ }
456
572
  const params = {
457
- messages: this.messages,
573
+ messages: trimmedMessages,
458
574
  abortController: this.abortController,
459
575
  callbacks: {
460
576
  onNewToken: (token) => (this.currentReply += token),
@@ -473,23 +589,40 @@ class AIChatManager {
473
589
  }
474
590
  this.currentReply = '';
475
591
  },
476
- setToolStatus: (id, content) => {
592
+ setToolStatus: (id, metadata) => {
477
593
  const existingIdx = this.displayMessages.findIndex((m) => m.role === 'tool' && m.tool_call_id === id);
478
594
  if (existingIdx !== -1) {
479
- this.displayMessages[existingIdx].content = content;
595
+ // Update existing tool message with metadata
596
+ const existing = this.displayMessages[existingIdx];
597
+ if (existing.content.length === 0 && metadata?.error) {
598
+ this.displayMessages[existingIdx].content = metadata.error;
599
+ }
600
+ this.displayMessages[existingIdx] = {
601
+ ...existing,
602
+ ...(metadata || {})
603
+ };
480
604
  }
481
605
  else {
482
- this.displayMessages.push({ role: 'tool', tool_call_id: id, content });
606
+ // Create new tool message with metadata
607
+ const newMessage = {
608
+ role: 'tool',
609
+ tool_call_id: id,
610
+ content: metadata?.content ?? metadata?.error ?? '',
611
+ ...(metadata || {})
612
+ };
613
+ this.displayMessages.push(newMessage);
483
614
  }
484
- }
615
+ },
616
+ requestConfirmation: this.requestConfirmation
485
617
  }
486
618
  };
487
- if (this.mode === AIMode.NAVIGATOR && this.apiTools.length === 0) {
619
+ if (this.mode === AIMode.API && this.apiTools.length === 0) {
488
620
  await this.loadApiTools();
489
621
  }
490
- await this.chatRequest({
622
+ const addedMessages = await this.chatRequest({
491
623
  ...params
492
624
  });
625
+ this.messages = [...this.messages, ...(addedMessages ?? [])];
493
626
  await this.historyManager.saveChat(this.displayMessages, this.messages);
494
627
  }
495
628
  catch (err) {
@@ -507,6 +640,10 @@ class AIChatManager {
507
640
  }
508
641
  };
509
642
  cancel = () => {
643
+ if (this.confirmationCallback) {
644
+ this.confirmationCallback(false);
645
+ this.confirmationCallback = undefined;
646
+ }
510
647
  this.abortController?.abort();
511
648
  };
512
649
  restartGeneration = (displayMessageIndex, newContent) => {
@@ -544,6 +681,7 @@ class AIChatManager {
544
681
  this.focusInput();
545
682
  };
546
683
  saveAndClear = async () => {
684
+ this.cancel();
547
685
  await this.historyManager.save(this.displayMessages, this.messages);
548
686
  this.displayMessages = [];
549
687
  this.messages = [];
@@ -5,6 +5,7 @@ import { aiChatManager } from './AIChatManager.svelte';
5
5
  import { Button } from '../../common';
6
6
  import { RefreshCwIcon, Undo2Icon } from 'lucide-svelte';
7
7
  import AIChatInput from './AIChatInput.svelte';
8
+ import ToolExecutionDisplay from './ToolExecutionDisplay.svelte';
8
9
  let { message, messageIndex, availableContext, selectedContext = $bindable(), editingMessageIndex = $bindable(null) } = $props();
9
10
  function editMessage() {
10
11
  if (message.role !== 'user' || editingMessageIndex !== null || aiChatManager.loading) {
@@ -60,6 +61,8 @@ function editMessage() {
60
61
  >
61
62
  {#if message.role === 'assistant'}
62
63
  <AssistantMessage {message} />
64
+ {:else if message.role === 'tool'}
65
+ <ToolExecutionDisplay message={message as ToolDisplayMessage} />
63
66
  {:else}
64
67
  {message.content}
65
68
  {/if}
@@ -296,7 +296,7 @@ export function focus() {
296
296
  }}
297
297
  {placeholder}
298
298
  class={twMerge(
299
- 'textarea-input resize-none bg-transparent caret-black dark:caret-white',
299
+ 'textarea-input resize-none bg-transparent caret-black dark:caret-white overflow-clip',
300
300
  className
301
301
  )}
302
302
  style={value.length > 0 ? 'color: transparent; -webkit-text-fill-color: transparent;' : ''}
@@ -0,0 +1,84 @@
1
+ <script lang="ts">import { Loader2, Copy, Check } from 'lucide-svelte';
2
+ let { title, content, error, loading, showCopy = true, showWhileLoading = true } = $props();
3
+ let copied = $state(false);
4
+ const hasContent = $derived(content !== undefined && content !== null);
5
+ function formatJson(obj) {
6
+ try {
7
+ if (typeof obj === 'string') {
8
+ try {
9
+ const parsed = JSON.parse(obj);
10
+ return JSON.stringify(parsed, null, 2);
11
+ }
12
+ catch {
13
+ return obj;
14
+ }
15
+ }
16
+ return JSON.stringify(obj, null, 2);
17
+ }
18
+ catch {
19
+ return String(obj);
20
+ }
21
+ }
22
+ async function copyToClipboard() {
23
+ if (!hasContent)
24
+ return;
25
+ try {
26
+ await navigator.clipboard.writeText(formatJson(content));
27
+ copied = true;
28
+ setTimeout(() => (copied = false), 1500);
29
+ }
30
+ catch (err) {
31
+ console.error('Failed to copy:', err);
32
+ }
33
+ }
34
+ </script>
35
+
36
+ {#if showWhileLoading || (!loading && hasContent)}
37
+ <div class="space-y-2">
38
+ <div class="flex items-center justify-between">
39
+ <span class="text-secondary text-2xs font-semibold uppercase tracking-wide">
40
+ {title}:
41
+ </span>
42
+ {#if showCopy && hasContent}
43
+ <button
44
+ class="p-1 rounded hover:bg-surface-secondary text-tertiary hover:text-secondary transition-colors"
45
+ onclick={copyToClipboard}
46
+ title="Copy {title.toLowerCase()}"
47
+ >
48
+ {#if copied}
49
+ <Check class="w-3 h-3 text-green-500" />
50
+ {:else}
51
+ <Copy class="w-3 h-3" />
52
+ {/if}
53
+ </button>
54
+ {/if}
55
+ </div>
56
+
57
+ {#if loading}
58
+ <div
59
+ class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 flex items-center gap-2 text-tertiary"
60
+ >
61
+ <Loader2 class="w-3 h-3 animate-spin" />
62
+ <span class="text-2xs">Executing...</span>
63
+ </div>
64
+ {:else if error}
65
+ <div
66
+ class="bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded p-3 overflow-x-auto max-h-64 overflow-y-auto"
67
+ >
68
+ <pre class="text-2xs text-red-700 dark:text-red-300 whitespace-pre-wrap">{error}</pre>
69
+ </div>
70
+ {:else if hasContent}
71
+ <div
72
+ class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 overflow-x-auto max-h-64 overflow-y-auto"
73
+ >
74
+ <pre class="text-2xs text-primary whitespace-pre-wrap">{formatJson(content)}</pre>
75
+ </div>
76
+ {:else}
77
+ <div
78
+ class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 text-center"
79
+ >
80
+ <span class="text-2xs text-tertiary">No {title.toLowerCase()} yet</span>
81
+ </div>
82
+ {/if}
83
+ </div>
84
+ {/if}
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ title: string;
3
+ content?: any;
4
+ error?: string;
5
+ loading?: boolean;
6
+ showCopy?: boolean;
7
+ showWhileLoading?: boolean;
8
+ }
9
+ declare const ToolContentDisplay: import("svelte").Component<Props, {}, "">;
10
+ type ToolContentDisplay = ReturnType<typeof ToolContentDisplay>;
11
+ export default ToolContentDisplay;
@@ -0,0 +1,105 @@
1
+ <script lang="ts">import { Loader2, ChevronDown, ChevronRight, XCircle, Play } from 'lucide-svelte';
2
+ import { Button } from '../../common';
3
+ import { aiChatManager } from './AIChatManager.svelte';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import ToolContentDisplay from './ToolContentDisplay.svelte';
6
+ let { message } = $props();
7
+ let isExpanded = $state(message.showDetails || (message.isLoading && message.needsConfirmation));
8
+ const hasParameters = $derived(message.parameters !== undefined && Object.keys(message.parameters).length > 0);
9
+ </script>
10
+
11
+ <div
12
+ class="bg-surface border border-gray-200 dark:border-gray-700 rounded-md overflow-hidden font-mono text-xs"
13
+ >
14
+ <!-- Collapsible Header -->
15
+ <button
16
+ class={twMerge(
17
+ "w-full p-3 bg-surface-secondary hover:bg-surface-hover transition-colors flex items-center justify-between text-left border-b border-gray-200 dark:border-gray-700",
18
+ message.needsConfirmation ? "opacity-80" : ""
19
+ )}
20
+ onclick={() => (isExpanded = !isExpanded)}
21
+ disabled={!message.showDetails}
22
+ >
23
+ <div class="flex items-center gap-2 flex-1">
24
+ {#if message.showDetails}
25
+ {#if isExpanded}
26
+ <ChevronDown class="w-3 h-3 text-secondary" />
27
+ {:else}
28
+ <ChevronRight class="w-3 h-3 text-secondary" />
29
+ {/if}
30
+ {/if}
31
+
32
+ {#if message.isLoading && !message.needsConfirmation}
33
+ <Loader2 class="w-3.5 h-3.5 animate-spin text-blue-500" />
34
+ {:else if message.error}
35
+ <span class="text-red-500">✗</span>
36
+ {:else if !message.isLoading && !message.error}
37
+ <span class="text-green-500">✓</span>
38
+ {/if}
39
+ <span class="text-primary font-medium text-2xs">
40
+ {message.content}
41
+ </span>
42
+ </div>
43
+ </button>
44
+
45
+ <!-- Expanded Content -->
46
+ {#if isExpanded}
47
+ <div class="p-3 bg-surface space-y-3">
48
+ <!-- Parameters Section -->
49
+ <div class={message.needsConfirmation ? "opacity-80" : ""}>
50
+ <ToolContentDisplay title="Parameters" content={message.parameters} />
51
+ </div>
52
+
53
+ <!-- Confirmation Footer -->
54
+ {#if message.needsConfirmation}
55
+ <div
56
+ class={twMerge(
57
+ 'mt-3 pt-3 flex flex-row items-center justify-end gap-2',
58
+ hasParameters ? 'border-t border-gray-200 dark:border-gray-700' : ''
59
+ )}
60
+ >
61
+ <Button
62
+ variant="border"
63
+ color="gray"
64
+ size="xs"
65
+ on:click={() => {
66
+ if (message.tool_call_id) {
67
+ aiChatManager.handleToolConfirmation(message.tool_call_id, false)
68
+ }
69
+ }}
70
+ startIcon={{ icon: XCircle }}
71
+ ></Button>
72
+ <Button
73
+ variant="border"
74
+ color="green"
75
+ size="xs"
76
+ on:click={() => {
77
+ if (message.tool_call_id) {
78
+ aiChatManager.handleToolConfirmation(message.tool_call_id, true)
79
+ }
80
+ }}
81
+ startIcon={{ icon: Play }}
82
+ >
83
+ Run
84
+ </Button>
85
+ </div>
86
+
87
+ <!-- Result Section -->
88
+ {:else}
89
+ <ToolContentDisplay
90
+ title="Logs"
91
+ content={message.logs}
92
+ loading={message.isLoading}
93
+ showWhileLoading={false}
94
+ />
95
+
96
+ <ToolContentDisplay
97
+ title="Result"
98
+ content={message.result}
99
+ error={message.error}
100
+ loading={message.isLoading}
101
+ />
102
+ {/if}
103
+ </div>
104
+ {/if}
105
+ </div>
@@ -0,0 +1,7 @@
1
+ import type { ToolDisplayMessage } from './shared';
2
+ interface Props {
3
+ message: ToolDisplayMessage;
4
+ }
5
+ declare const ToolExecutionDisplay: import("svelte").Component<Props, {}, "">;
6
+ type ToolExecutionDisplay = ReturnType<typeof ToolExecutionDisplay>;
7
+ export default ToolExecutionDisplay;
@@ -0,0 +1,7 @@
1
+ import type { ChatCompletionTool } from 'openai/resources/index.mjs';
2
+ import type { Tool } from '../shared';
3
+ export declare function createApiTools(chatTools: ChatCompletionTool[], endpointMap?: Record<string, {
4
+ method: string;
5
+ path: string;
6
+ }>): Tool<{}>[];
7
+ export declare function loadApiTools(): Promise<Tool<{}>[]>;