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,15 +1,16 @@
1
1
  <script lang="ts">import { userWorkspaces, workspaceStore } from '../../stores';
2
- import { Button } from '../common';
2
+ import { Badge, Button } from '../common';
3
3
  import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
4
4
  import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
5
5
  import { triggerableByAI } from '../../actions/triggerableByAI.svelte';
6
6
  import Toggle from '../Toggle.svelte';
7
- import { IntegrationService, UserService } from '../../gen';
8
- import { createEventDispatcher } from 'svelte';
7
+ import { FlowService, IntegrationService, ScriptService, UserService } from '../../gen';
9
8
  import MultiSelect from '../select/MultiSelect.svelte';
10
9
  import { safeSelectItems } from '../select/utils.svelte';
11
10
  import TokenDisplay from './TokenDisplay.svelte';
12
11
  import ScopeSelector from './ScopeSelector.svelte';
12
+ import Alert from '../common/alert/Alert.svelte';
13
+ import FolderPicker from '../FolderPicker.svelte';
13
14
  let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined) } = $props();
14
15
  let newToken = $state(undefined);
15
16
  let newMcpToken = $state(undefined);
@@ -21,9 +22,12 @@ let newMcpScope = $state('favorites');
21
22
  let loadingApps = $state(false);
22
23
  let errorFetchApps = $state(false);
23
24
  let allApps = $state([]);
25
+ let loadingRunnables = $state(false);
26
+ let includedRunnables = $state([]);
27
+ let selectedFolder = $state('');
28
+ let runnablesCache = new Map();
24
29
  let customScopes = $state([]);
25
30
  let showCustomScopes = $state(false);
26
- const dispatch = createEventDispatcher();
27
31
  function ensureCurrentWorkspaceIncluded(workspacesList, currentWorkspace) {
28
32
  if (!currentWorkspace) {
29
33
  return workspacesList;
@@ -42,7 +46,13 @@ async function createToken(mcpMode = false) {
42
46
  }
43
47
  let tokenScopes = scopes;
44
48
  if (mcpMode) {
45
- tokenScopes = [`mcp:${newMcpScope}`];
49
+ if (newMcpScope === 'folder') {
50
+ const folderPath = `f/${selectedFolder}/*`;
51
+ tokenScopes = [`mcp:all:${folderPath}`];
52
+ }
53
+ else {
54
+ tokenScopes = [`mcp:${newMcpScope}`];
55
+ }
46
56
  if (newMcpApps.length > 0) {
47
57
  tokenScopes.push(`mcp:hub:${newMcpApps.join(',')}`);
48
58
  }
@@ -64,10 +74,7 @@ async function createToken(mcpMode = false) {
64
74
  else {
65
75
  newToken = `${createdToken}`;
66
76
  }
67
- dispatch('tokenCreated', newToken ?? newMcpToken);
68
- if (onTokenCreated) {
69
- onTokenCreated(newToken ?? newMcpToken ?? '');
70
- }
77
+ onTokenCreated(newToken ?? newMcpToken ?? '');
71
78
  mcpCreationMode = false;
72
79
  }
73
80
  catch (err) {
@@ -76,6 +83,8 @@ async function createToken(mcpMode = false) {
76
83
  }
77
84
  const workspaces = $derived(ensureCurrentWorkspaceIncluded($userWorkspaces, $workspaceStore));
78
85
  const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorkspace}/sse?token=`);
86
+ const warning = $derived(newMcpScope === 'favorites' ? `You do not have any favorite scripts or flows. You can favorite some scripts and flows to include them, or change the scope to "All scripts/flows" to include all your scripts and flows.` : 'Create your first scripts or flows to make them available via MCP.');
87
+ const noScriptsOrFlowsAvailableWarning = $derived(includedRunnables.length === 0 ? warning : '');
79
88
  $effect(() => {
80
89
  if (mcpCreationMode) {
81
90
  getAllApps();
@@ -103,6 +112,64 @@ async function getAllApps() {
103
112
  loadingApps = false;
104
113
  }
105
114
  }
115
+ async function getScripts(favoriteOnly = false, workspace, folder) {
116
+ if (!workspace) {
117
+ return [];
118
+ }
119
+ const pathStart = folder ? `f/${folder}` : undefined;
120
+ const scripts = await ScriptService.listScripts({
121
+ starredOnly: favoriteOnly,
122
+ workspace,
123
+ pathStart
124
+ });
125
+ return scripts.map((x) => x.path);
126
+ }
127
+ async function getFlows(favoriteOnly = false, workspace, folder) {
128
+ if (!workspace) {
129
+ return [];
130
+ }
131
+ const pathStart = folder ? `f/${folder}` : undefined;
132
+ const flows = await FlowService.listFlows({
133
+ starredOnly: favoriteOnly,
134
+ workspace,
135
+ pathStart
136
+ });
137
+ return flows.map((x) => x.path);
138
+ }
139
+ async function getScriptsAndFlows(favoriteOnly = false, workspace, folder) {
140
+ const cacheKey = `${workspace}-${favoriteOnly}${folder ? `-${folder}` : ''}`;
141
+ if (runnablesCache.has(cacheKey)) {
142
+ includedRunnables = runnablesCache.get(cacheKey) || [];
143
+ return;
144
+ }
145
+ try {
146
+ loadingRunnables = true;
147
+ const [scripts, flows] = await Promise.all([getScripts(favoriteOnly, workspace, folder), getFlows(favoriteOnly, workspace, folder)]);
148
+ const combined = [...scripts, ...flows];
149
+ runnablesCache.set(cacheKey, combined);
150
+ includedRunnables = combined;
151
+ }
152
+ finally {
153
+ loadingRunnables = false;
154
+ }
155
+ }
156
+ $effect(() => {
157
+ if (mcpCreationMode) {
158
+ const workspace = newTokenWorkspace || $workspaceStore;
159
+ if (workspace) {
160
+ const folderParam = selectedFolder.length > 0 ? selectedFolder : undefined;
161
+ getScriptsAndFlows(newMcpScope === 'favorites', workspace, folderParam);
162
+ }
163
+ }
164
+ else {
165
+ includedRunnables = [];
166
+ }
167
+ });
168
+ $effect(() => {
169
+ if (mcpCreationMode && newMcpScope !== 'folder') {
170
+ selectedFolder = '';
171
+ }
172
+ });
106
173
  </script>
107
174
 
108
175
  <div>
@@ -189,10 +256,23 @@ async function getAllApps() {
189
256
  label="All scripts/flows"
190
257
  tooltip="Make all your scripts and flows available as tools"
191
258
  />
259
+ <ToggleButton
260
+ {item}
261
+ value="folder"
262
+ label="Folder"
263
+ tooltip="Make all scripts and flows in the selected folder available as tools"
264
+ />
192
265
  {/snippet}
193
266
  </ToggleButtonGroup>
194
267
  </div>
195
268
 
269
+ {#if newMcpScope === 'folder'}
270
+ <div>
271
+ <span class="block mb-1">Select Folder</span>
272
+ <FolderPicker bind:folderName={selectedFolder} />
273
+ </div>
274
+ {/if}
275
+
196
276
  <div>
197
277
  <span class="block mb-1">Hub scripts (optional)</span>
198
278
  {#if loadingApps}
@@ -241,6 +321,46 @@ async function getAllApps() {
241
321
  </select>
242
322
  </div>
243
323
  {/if}
324
+ {#if mcpCreationMode && (newMcpScope !== 'folder' || selectedFolder.length > 0)}
325
+ {#if loadingRunnables}
326
+ <div class="flex flex-col gap-2 col-span-2 pr-4">
327
+ <span class="block text-xs text-tertiary">Scripts & Flows that will be available via MCP</span>
328
+ <div class="flex flex-wrap gap-1">
329
+ <Badge rounded small color="dark-gray" baseClass="animate-skeleton">Loading...</Badge>
330
+ </div>
331
+ </div>
332
+ {:else}
333
+ <div class="flex flex-col gap-2 col-span-2 pr-4">
334
+ {#if noScriptsOrFlowsAvailableWarning}
335
+ <Alert type="info" title="No scripts or flows available" size="xs">
336
+ {noScriptsOrFlowsAvailableWarning}
337
+ </Alert>
338
+ {:else}
339
+ <span class="block text-xs text-tertiary">Scripts & Flows that will be available via MCP</span>
340
+ <div class="flex flex-wrap gap-1">
341
+
342
+ {#if includedRunnables.length <= 5}
343
+ {#each includedRunnables as scriptOrFlow}
344
+ <Badge rounded small color="blue">{scriptOrFlow}</Badge>
345
+ {/each}
346
+ {:else}
347
+ {#each includedRunnables.slice(0, 3) as scriptOrFlow}
348
+ <Badge rounded small color="blue">{scriptOrFlow}</Badge>
349
+ {/each}
350
+ <Badge
351
+ rounded
352
+ small
353
+ color="dark-gray"
354
+ >
355
+ +{includedRunnables.length - 3} more
356
+ </Badge>
357
+ {/if}
358
+ </div>
359
+ {/if}
360
+ </div>
361
+ {/if}
362
+ {/if}
363
+
244
364
  </div>
245
365
 
246
366
  <div class="mt-4 flex justify-end gap-2 flex-row">
@@ -253,7 +373,7 @@ async function getAllApps() {
253
373
  </Button>
254
374
  <Button
255
375
  on:click={() => createToken(mcpCreationMode)}
256
- disabled={mcpCreationMode && newTokenWorkspace == undefined}
376
+ disabled={mcpCreationMode && (newTokenWorkspace == undefined || (newMcpScope === 'folder' && !selectedFolder))}
257
377
  >
258
378
  New token
259
379
  </Button>
@@ -261,10 +381,10 @@ async function getAllApps() {
261
381
  </div>
262
382
 
263
383
  {#if newToken}
264
- <TokenDisplay token={newToken} type="token" />
384
+ <TokenDisplay token={newToken} />
265
385
  {/if}
266
386
 
267
387
  {#if newMcpToken}
268
- <TokenDisplay token={newMcpToken} type="mcp" mcpUrl={`${mcpBaseUrl}${newMcpToken}`} />
388
+ <TokenDisplay token={newMcpToken} mcpUrl={`${mcpBaseUrl}${newMcpToken}`} />
269
389
  {/if}
270
390
  </div>
@@ -4,26 +4,9 @@ interface Props {
4
4
  newTokenLabel?: string;
5
5
  defaultNewTokenWorkspace?: string;
6
6
  scopes?: string[];
7
- onTokenCreated?: (token: string) => void;
7
+ onTokenCreated: (token: string) => void;
8
8
  displayCreateToken?: boolean;
9
9
  }
10
- 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> {
11
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
12
- $$bindings?: Bindings;
13
- } & Exports;
14
- (internal: unknown, props: Props & {
15
- $$events?: Events;
16
- $$slots?: Slots;
17
- }): Exports & {
18
- $set?: any;
19
- $on?: any;
20
- };
21
- z_$$bindings?: Bindings;
22
- }
23
- declare const CreateToken: $$__sveltets_2_IsomorphicComponent<Props, {
24
- tokenCreated: CustomEvent<any>;
25
- } & {
26
- [evt: string]: CustomEvent<any>;
27
- }, {}, {}, "newTokenLabel">;
28
- type CreateToken = InstanceType<typeof CreateToken>;
10
+ declare const CreateToken: import("svelte").Component<Props, {}, "newTokenLabel">;
11
+ type CreateToken = ReturnType<typeof CreateToken>;
29
12
  export default CreateToken;
@@ -1,13 +1,15 @@
1
1
  <script lang="ts">import { copyToClipboard } from '../../utils';
2
2
  import { Clipboard } from 'lucide-svelte';
3
- import ClipboardPanel from '../details/ClipboardPanel.svelte';
4
3
  import Alert from '../common/alert/Alert.svelte';
5
- let { token, type = 'token', mcpUrl, title, onCopy } = $props();
4
+ let { token, mcpUrl, title, onCopy } = $props();
6
5
  function handleCopyClick() {
7
6
  copyToClipboard(token);
8
7
  onCopy?.();
9
8
  }
10
- const displayTitle = $derived(title || (type === 'mcp' ? 'MCP URL Generated Successfully' : 'Token Created Successfully'));
9
+ const displayTitle = $derived(title || (mcpUrl ? 'MCP URL Generated Successfully' : 'Token Created Successfully'));
10
+ const label = $derived(mcpUrl ? 'Your MCP Server URL' : 'Your Token');
11
+ const info = $derived(`Make sure to copy your ${mcpUrl ? 'MCP Server URL' : 'personal access token'} now. You won\'t be able to see it again!`);
12
+ const tokenOrUrl = $derived(mcpUrl ? mcpUrl : token);
11
13
  const colorScheme = {
12
14
  gradient: 'from-blue-50 to-indigo-50 dark:from-blue-900/20 dark:to-indigo-900/20',
13
15
  border: 'border-blue-200 dark:border-blue-700',
@@ -24,7 +26,7 @@ const colorScheme = {
24
26
  <div class="border rounded-lg mb-6 p-4 bg-gradient-to-r {colorScheme.gradient} {colorScheme.border} shadow-sm">
25
27
  <div class="flex items-start gap-3">
26
28
  <div class="flex-shrink-0 w-8 h-8 {colorScheme.iconBg} rounded-full flex items-center justify-center mt-0.5">
27
- {#if type === 'mcp'}
29
+ {#if mcpUrl}
28
30
  <svg class="w-4 h-4 {colorScheme.iconColor}" fill="none" stroke="currentColor" viewBox="0 0 24 24">
29
31
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path>
30
32
  </svg>
@@ -39,24 +41,16 @@ const colorScheme = {
39
41
  {displayTitle}
40
42
  </h4>
41
43
 
42
- {#if type === 'mcp' && mcpUrl}
43
44
  <div class="space-y-3">
44
45
  <div>
45
46
  <!-- svelte-ignore a11y_label_has_associated_control -->
46
- <label class="block text-xs font-medium {colorScheme.labelColor} mb-1">
47
- Your MCP Server URL:
48
- </label>
49
- <ClipboardPanel content={mcpUrl} />
50
- </div>
51
- <div>
52
- <!-- svelte-ignore a11y_label_has_associated_control -->
53
- <label class="block text-xs font-medium {colorScheme.labelColor} mb-1">
54
- Your Token:
47
+ <label class="block text-xs font-medium {colorScheme.labelColor} mb-1 mt-4">
48
+ {label}
55
49
  </label>
56
50
  <div class="bg-white dark:bg-gray-800 rounded-md p-3 border {colorScheme.border}">
57
51
  <div class="flex items-center justify-between gap-2">
58
52
  <code class="text-sm font-mono text-gray-800 dark:text-gray-200 break-all flex-1">
59
- {token}
53
+ {tokenOrUrl}
60
54
  </code>
61
55
  <button
62
56
  onclick={handleCopyClick}
@@ -69,35 +63,17 @@ const colorScheme = {
69
63
  </div>
70
64
  </div>
71
65
  <Alert type="warning" title="Important" size="xs">
72
- Make sure to copy both the URL and token now. You won't be able to see them again!
73
- </Alert>
74
- <div class="{colorScheme.infoBg} rounded-md p-2 border {colorScheme.infoBorder}">
75
- <p class="text-xs {colorScheme.infoText}">
76
- <strong>Next steps:</strong> Use this URL in your MCP-compatible client (like Claude Desktop) to access your Windmill scripts and flows as tools.
77
- </p>
78
- </div>
79
- </div>
80
- {:else}
81
- <div class="bg-white dark:bg-gray-800 rounded-md p-3 border {colorScheme.border}">
82
- <div class="flex items-center justify-between gap-2">
83
- <code class="text-sm font-mono text-gray-800 dark:text-gray-200 break-all flex-1">
84
- {token}
85
- </code>
86
- <button
87
- onclick={handleCopyClick}
88
- class="flex-shrink-0 p-1.5 text-gray-500 hover:text-gray-400 dark:hover:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors"
89
- title="Copy token"
90
- >
91
- <Clipboard size={16} />
92
- </button>
93
- </div>
94
- </div>
95
- <div class="mt-3">
96
- <Alert type="warning" title="Important" size="xs">
97
- Make sure to copy your personal access token now. You won't be able to see it again!
66
+ {info}
98
67
  </Alert>
68
+ {#if mcpUrl}
69
+ <div class="{colorScheme.infoBg} rounded-md p-2 border {colorScheme.infoBorder}">
70
+ <p class="text-xs {colorScheme.infoText}">
71
+ <strong>Next steps:</strong> Use this URL in your MCP-compatible client (like Claude Desktop) to access your Windmill scripts and flows as tools.
72
+ </p>
73
+ </div>
74
+ {/if}
99
75
  </div>
100
- {/if}
76
+
101
77
  </div>
102
78
  </div>
103
79
  </div>
@@ -1,6 +1,5 @@
1
1
  interface Props {
2
2
  token: string;
3
- type?: 'token' | 'mcp';
4
3
  mcpUrl?: string;
5
4
  title?: string;
6
5
  onCopy?: () => void;
@@ -1,20 +1,18 @@
1
1
  <script lang="ts">import TableCustom from '../TableCustom.svelte';
2
2
  import { displayDate } from '../../utils';
3
3
  import { UserService } from '../../gen';
4
- import { createEventDispatcher } from 'svelte';
5
4
  import { sendUserToast } from '../../toast';
6
5
  import CreateToken from './CreateToken.svelte';
7
- let { showMcpMode = false, openWithMcpMode = false, defaultNewTokenLabel, defaultNewTokenWorkspace, scopes } = $props();
6
+ let { showMcpMode = false, openWithMcpMode = false, defaultNewTokenLabel, defaultNewTokenWorkspace, scopes, onTokenCreated } = $props();
8
7
  // --- Local State ---
9
8
  let tokens = $state([]);
10
9
  let tokenPage = $state(1);
11
10
  let newTokenLabel = $state(defaultNewTokenLabel);
12
- const dispatch = createEventDispatcher();
13
11
  $effect(() => {
14
12
  listTokens();
15
13
  });
16
14
  function handleTokenCreated(token) {
17
- dispatch('tokenCreated', token);
15
+ onTokenCreated(token);
18
16
  listTokens();
19
17
  }
20
18
  async function handleDeleteClick(tokenPrefix) {
@@ -4,24 +4,8 @@ interface Props {
4
4
  defaultNewTokenLabel?: string;
5
5
  defaultNewTokenWorkspace?: string;
6
6
  scopes?: string[];
7
+ onTokenCreated: (token: string) => void;
7
8
  }
8
- 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> {
9
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
10
- $$bindings?: Bindings;
11
- } & Exports;
12
- (internal: unknown, props: Props & {
13
- $$events?: Events;
14
- $$slots?: Slots;
15
- }): Exports & {
16
- $set?: any;
17
- $on?: any;
18
- };
19
- z_$$bindings?: Bindings;
20
- }
21
- declare const TokensTable: $$__sveltets_2_IsomorphicComponent<Props, {
22
- tokenCreated: CustomEvent<any>;
23
- } & {
24
- [evt: string]: CustomEvent<any>;
25
- }, {}, {}, "">;
26
- type TokensTable = InstanceType<typeof TokensTable>;
9
+ declare const TokensTable: import("svelte").Component<Props, {}, "">;
10
+ type TokensTable = ReturnType<typeof TokensTable>;
27
11
  export default TokensTable;