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
@@ -0,0 +1,192 @@
1
+ import { get } from 'svelte/store';
2
+ import { workspaceStore } from '../../../../stores';
3
+ import { McpService } from '../../../../gen/services.gen';
4
+ function buildApiCallTool(endpointTool) {
5
+ // Build the parameters schema for OpenAI function calling
6
+ const parameters = {
7
+ type: 'object',
8
+ properties: {},
9
+ required: []
10
+ };
11
+ // Add path parameters
12
+ if (endpointTool.path_params_schema?.properties) {
13
+ for (const [key, schema] of Object.entries(endpointTool.path_params_schema.properties)) {
14
+ // Skip workspace parameter as it's auto-filled
15
+ if (key === 'workspace')
16
+ continue;
17
+ parameters.properties[key] = schema;
18
+ if (Array.isArray(endpointTool.path_params_schema.required) && endpointTool.path_params_schema.required.includes(key)) {
19
+ parameters.required.push(key);
20
+ }
21
+ }
22
+ }
23
+ // Add query parameters
24
+ if (endpointTool.query_params_schema?.properties) {
25
+ for (const [key, schema] of Object.entries(endpointTool.query_params_schema.properties)) {
26
+ parameters.properties[key] = schema;
27
+ if (Array.isArray(endpointTool.query_params_schema.required) && endpointTool.query_params_schema.required.includes(key)) {
28
+ parameters.required.push(key);
29
+ }
30
+ }
31
+ }
32
+ // Add body parameters
33
+ if (endpointTool.body_schema?.properties) {
34
+ // For body params, we wrap them in a 'body' object
35
+ parameters.properties.body = {
36
+ type: 'object',
37
+ description: 'Request body',
38
+ properties: endpointTool.body_schema.properties,
39
+ required: endpointTool.body_schema.required || []
40
+ };
41
+ if (Array.isArray(endpointTool.body_schema.required) && endpointTool.body_schema.required.length > 0) {
42
+ parameters.required.push('body');
43
+ }
44
+ }
45
+ return {
46
+ type: 'function',
47
+ function: {
48
+ name: endpointTool.name,
49
+ description: endpointTool.instructions || endpointTool.description,
50
+ parameters
51
+ }
52
+ };
53
+ }
54
+ function buildToolsFromEndpoints(endpointTools) {
55
+ const tools = [];
56
+ const endpointMap = {};
57
+ for (const endpointTool of endpointTools) {
58
+ const tool = buildApiCallTool(endpointTool);
59
+ tools.push(tool);
60
+ // Store the endpoint info in the map
61
+ endpointMap[endpointTool.name] = {
62
+ method: endpointTool.method,
63
+ path: endpointTool.path
64
+ };
65
+ }
66
+ return { tools, endpointMap };
67
+ }
68
+ export function createApiTools(chatTools, endpointMap = {}) {
69
+ return chatTools.map((chatTool) => {
70
+ const toolName = chatTool.function.name;
71
+ const endpoint = endpointMap[toolName];
72
+ const method = endpoint?.method?.toUpperCase() || 'GET';
73
+ // Determine if tool needs confirmation based on method
74
+ const needsConfirmation = ['DELETE', 'POST', 'PUT', 'PATCH'].includes(method);
75
+ return {
76
+ def: chatTool,
77
+ requiresConfirmation: needsConfirmation,
78
+ confirmationMessage: `Run ${toolName}`,
79
+ showDetails: true,
80
+ fn: async ({ args, toolId, toolCallbacks }) => {
81
+ const toolName = chatTool.function.name;
82
+ const endpoint = endpointMap[toolName];
83
+ if (!endpoint) {
84
+ throw new Error(`No endpoint mapping found for tool ${toolName}`);
85
+ }
86
+ try {
87
+ const workspace = get(workspaceStore);
88
+ let path = endpoint.path.replace('{workspace}', workspace);
89
+ // Build URL with path parameters
90
+ let url = `/api${path}`;
91
+ const queryParams = {};
92
+ let requestBody = undefined;
93
+ // Process arguments
94
+ for (const [key, value] of Object.entries(args)) {
95
+ if (key === 'body') {
96
+ requestBody = value;
97
+ continue;
98
+ }
99
+ // Check if this is a path parameter
100
+ if (url.includes(`{${key}}`)) {
101
+ url = url.replace(`{${key}}`, encodeURIComponent(String(value)));
102
+ }
103
+ else {
104
+ // Assume it's a query parameter
105
+ queryParams[key] = String(value);
106
+ }
107
+ }
108
+ // Add query parameters to URL if needed
109
+ if (Object.keys(queryParams).length > 0) {
110
+ const searchParams = new URLSearchParams();
111
+ for (const [key, value] of Object.entries(queryParams)) {
112
+ searchParams.append(key, value);
113
+ }
114
+ url += `?${searchParams.toString()}`;
115
+ }
116
+ toolCallbacks.setToolStatus(toolId, {
117
+ content: `Calling ${toolName}...`,
118
+ });
119
+ const fetchOptions = {
120
+ method: endpoint.method
121
+ };
122
+ // Add request body for POST/PUT/PATCH methods
123
+ if (requestBody && ['POST', 'PUT', 'PATCH'].includes(endpoint.method.toUpperCase())) {
124
+ fetchOptions.headers = {
125
+ 'Content-Type': 'application/json'
126
+ };
127
+ fetchOptions.body = JSON.stringify(requestBody);
128
+ }
129
+ const response = await fetch(url, fetchOptions);
130
+ if (response.ok) {
131
+ let result = '';
132
+ if (response.headers.get('content-type')?.includes('application/json')) {
133
+ result = await response.json();
134
+ }
135
+ else {
136
+ result = await response.text();
137
+ }
138
+ const jsonResult = JSON.stringify({
139
+ success: true,
140
+ data: result
141
+ });
142
+ toolCallbacks.setToolStatus(toolId, {
143
+ content: `Call to ${toolName} completed`,
144
+ result: jsonResult,
145
+ });
146
+ return jsonResult;
147
+ }
148
+ else {
149
+ const text = await response.text();
150
+ const jsonResult = JSON.stringify({
151
+ success: false,
152
+ error: text,
153
+ status: response.status
154
+ });
155
+ toolCallbacks.setToolStatus(toolId, {
156
+ content: `Call to ${toolName} failed`,
157
+ result: jsonResult,
158
+ error: `HTTP ${response.status}: ${text}`,
159
+ });
160
+ return jsonResult;
161
+ }
162
+ }
163
+ catch (error) {
164
+ const errorMessage = `Error calling API: ${error instanceof Error ? error.message : String(error)}`;
165
+ toolCallbacks.setToolStatus(toolId, {
166
+ content: `Call to ${toolName} failed`,
167
+ error: errorMessage,
168
+ });
169
+ console.error(`Error calling API:`, error);
170
+ return errorMessage;
171
+ }
172
+ }
173
+ };
174
+ });
175
+ }
176
+ export async function loadApiTools() {
177
+ try {
178
+ // Fetch the list of available MCP tools from the backend
179
+ const endpointTools = await McpService.listMcpTools({
180
+ workspace: get(workspaceStore)
181
+ });
182
+ // Build tools from the endpoint definitions
183
+ const { tools: apiTools, endpointMap } = buildToolsFromEndpoints(endpointTools);
184
+ // Create executable tools
185
+ const executableApiTools = createApiTools(apiTools, endpointMap);
186
+ return executableApiTools;
187
+ }
188
+ catch (error) {
189
+ console.error('Failed to load API tools:', error);
190
+ return [];
191
+ }
192
+ }
@@ -0,0 +1,7 @@
1
+ import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam } from 'openai/resources/index.mjs';
2
+ import type { Tool } from '../shared';
3
+ export declare const CHAT_SYSTEM_PROMPT: (username: string) => string;
4
+ export declare function getApiTools(): Promise<Tool<{}>[]>;
5
+ export declare const apiTools: Tool<{}>[];
6
+ export declare function prepareApiSystemMessage(): ChatCompletionSystemMessageParam;
7
+ export declare function prepareApiUserMessage(instructions: string): ChatCompletionUserMessageParam;
@@ -0,0 +1,61 @@
1
+ import { loadApiTools } from './apiTools';
2
+ import { getDocumentationTool } from '../navigator/core';
3
+ import { userStore } from '../../../../stores';
4
+ import { get } from 'svelte/store';
5
+ export const CHAT_SYSTEM_PROMPT = (username) => `
6
+ You are Windmill's intelligent assistant, designed to interact with the platform via API endpoints and answer questions about its functionality. Your purpose is to help the user directly query and manipulate Windmill resources through API calls.
7
+
8
+ Windmill is an open-source developer platform for building internal tools, API integrations, background jobs, workflows, and user interfaces. It offers a unified system where scripts are automatically turned into sharable UIs and can be composed into flows or embedded in custom applications.
9
+
10
+ You have access to these tools:
11
+ 1. Get documentation for user requests (get_documentation)
12
+ 2. A comprehensive list of API endpoints to interact with the Windmill backend
13
+
14
+ INSTRUCTIONS:
15
+ - You can directly query, list, create, update, and delete various Windmill resources like scripts, flows, jobs, resources, variables, schedules, and workers through the provided API tools.
16
+ - When users ask about specific data or want to perform operations, use the appropriate API endpoints to fulfill their requests.
17
+ - Use get_documentation to retrieve accurate information about features, concepts, and best practices when needed.
18
+ - Always present API results in a clear, readable format for the user.
19
+ - If you need to make multiple related API calls to fulfill a request, do so systematically and explain what you're doing.
20
+ - When showing lists of items, provide meaningful summaries rather than overwhelming the user with raw data.
21
+ - If an API call fails, explain the error clearly and suggest alternatives if applicable.
22
+ - If the user cancels the request, do not try again and ask for the user if he wants to make a new request with different instructions.
23
+ - For endpoints other that GET requiring to send a path, ask the user if he wants the path to be on a folder, or to be on its user's folder. Folder path looks like f/{folder_name}/{resource_path}, and user's folder path looks like u/${username}/{resource_path}.
24
+ - If an endpoint requires a resource_type, first fetch the available resourceTypes.
25
+
26
+ API CAPABILITIES:
27
+ - Query jobs, scripts, flows, and their execution history
28
+ - List and manage resources and variables
29
+ - View schedules and worker information
30
+ - Search through job logs (if enterprise features are enabled)
31
+ - Access detailed information about any Windmill resource
32
+
33
+ GENERAL PRINCIPLES:
34
+ - Be direct and action-oriented - use the API tools to fulfill user requests
35
+ - Provide clear summaries of API responses
36
+ - Maintain a helpful, professional tone
37
+ - If you encounter an error or can't complete a request, explain why and suggest alternatives
38
+ - Complete your responses with relevant documentation links when applicable
39
+
40
+ Always use the provided API tools to directly interact with the Windmill platform and provide users with the information they need.
41
+ `;
42
+ let apiToolsCache = null;
43
+ export async function getApiTools() {
44
+ if (apiToolsCache === null) {
45
+ apiToolsCache = await loadApiTools();
46
+ }
47
+ return apiToolsCache;
48
+ }
49
+ export const apiTools = [getDocumentationTool];
50
+ export function prepareApiSystemMessage() {
51
+ return {
52
+ role: 'system',
53
+ content: CHAT_SYSTEM_PROMPT(get(userStore)?.username ?? '')
54
+ };
55
+ }
56
+ export function prepareApiUserMessage(instructions) {
57
+ return {
58
+ role: 'user',
59
+ content: instructions
60
+ };
61
+ }
@@ -175,11 +175,11 @@ const flowHelpers = {
175
175
  const { input_transforms, schema } = await loadSchemaFromModule(module);
176
176
  module.value.input_transforms = input_transforms;
177
177
  refreshStateStore(flowStore);
178
- if ($flowStateStore[id]) {
179
- $flowStateStore[id].schema = schema;
178
+ if (flowStateStore.val[id]) {
179
+ flowStateStore.val[id].schema = schema;
180
180
  }
181
181
  else {
182
- $flowStateStore[id] = {
182
+ flowStateStore.val[id] = {
183
183
  schema
184
184
  };
185
185
  }
@@ -266,7 +266,6 @@ const flowHelpers = {
266
266
  }
267
267
  }
268
268
  if (location.type === 'preprocessor' || location.type === 'failure') {
269
- $flowStateStore = $flowStateStore;
270
269
  refreshStateStore(flowStore);
271
270
  setModuleStatus(location.type, 'added');
272
271
  return location.type;
@@ -279,7 +278,6 @@ const flowHelpers = {
279
278
  if (['branchone', 'branchall'].includes(step.type)) {
280
279
  await flowModuleSchemaMap?.addBranch(newModule.id);
281
280
  }
282
- $flowStateStore = $flowStateStore;
283
281
  refreshStateStore(flowStore);
284
282
  setModuleStatus(newModule.id, 'added');
285
283
  return newModule.id;
@@ -449,7 +447,7 @@ $effect(() => {
449
447
  return cleanup;
450
448
  });
451
449
  $effect(() => {
452
- const cleanup = aiChatManager.listenForSelectedIdChanges($selectedId, flowStore.val, $flowStateStore, $currentEditor);
450
+ const cleanup = aiChatManager.listenForSelectedIdChanges($selectedId, flowStore.val, flowStateStore.val, $currentEditor);
453
451
  return cleanup;
454
452
  });
455
453
  $effect(() => {