windmill-components 1.532.0 → 1.542.4
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.
- package/package/components/AIProviderPicker.svelte +181 -0
- package/package/components/AIProviderPicker.svelte.d.ts +15 -0
- package/package/components/ArgInfo.svelte +2 -2
- package/package/components/ArgInput.svelte +60 -27
- package/package/components/ArgInput.svelte.d.ts +3 -3
- package/package/components/AssignableTagsInner.svelte +89 -3
- package/package/components/Auth0Setting.svelte +8 -3
- package/package/components/ConcurrentJobsChart.svelte +36 -48
- package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
- package/package/components/CustomPopover.svelte.d.ts +1 -1
- package/package/components/Dev.svelte +5 -4
- package/package/components/DiffDrawer.svelte +2 -2
- package/package/components/DiffEditor.svelte +34 -37
- package/package/components/DiffEditor.svelte.d.ts +23 -39
- package/package/components/DropdownSelect.svelte +26 -0
- package/package/components/DropdownSelect.svelte.d.ts +11 -0
- package/package/components/DropdownV2Inner.svelte +1 -1
- package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
- package/package/components/DynamicInput.svelte.d.ts +11 -0
- package/package/components/EditableSchemaForm.svelte +155 -140
- package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
- package/package/components/Editor.svelte +101 -87
- package/package/components/Editor.svelte.d.ts +7 -1
- package/package/components/EditorBar.svelte +2 -5
- package/package/components/FlowBuilder.svelte +10 -7
- package/package/components/FlowLogRow.svelte +64 -0
- package/package/components/FlowLogRow.svelte.d.ts +15 -0
- package/package/components/FlowLogViewer.svelte +406 -373
- package/package/components/FlowLogViewer.svelte.d.ts +5 -1
- package/package/components/FlowLogViewerWrapper.svelte +44 -1
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowPreviewContent.svelte +3 -3
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewer.svelte +28 -0
- package/package/components/FlowStatusViewerInner.svelte +106 -23
- package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
- package/package/components/FolderPicker.svelte +1 -1
- package/package/components/InputTransformForm.svelte +20 -10
- package/package/components/JobArgs.svelte +1 -1
- package/package/components/JobLoader.svelte.d.ts +1 -1
- package/package/components/JobStatus.svelte +2 -0
- package/package/components/LogSnippetViewer.svelte +3 -3
- package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
- package/package/components/LogViewer.svelte +87 -71
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/ModulePreview.svelte +2 -1
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/ModulePreviewForm.svelte +72 -65
- package/package/components/ModulePreviewResultViewer.svelte +13 -18
- package/package/components/ModuleTest.svelte +6 -5
- package/package/components/ModuleTest.svelte.d.ts +1 -0
- package/package/components/OktaSetting.svelte +8 -3
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/Portal.svelte +11 -7
- package/package/components/Portal.svelte.d.ts +19 -39
- package/package/components/PrefixedInput.svelte +120 -0
- package/package/components/PrefixedInput.svelte.d.ts +8 -0
- package/package/components/QueuePosition.svelte +81 -0
- package/package/components/QueuePosition.svelte.d.ts +8 -0
- package/package/components/ResourceNarrowing.svelte +13 -0
- package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
- package/package/components/ResourceTypePicker.svelte +49 -74
- package/package/components/RunChart.svelte +74 -89
- package/package/components/RunChart.svelte.d.ts +10 -22
- package/package/components/RunForm.svelte +2 -2
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/RunFormAdvancedPopup.svelte +13 -1
- package/package/components/S3FilePicker.svelte +1 -1
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -2
- package/package/components/ScriptBuilder.svelte +3 -2
- package/package/components/ScriptEditor.svelte +25 -10
- package/package/components/ScriptEditor.svelte.d.ts +2 -1
- package/package/components/ServiceLogsInner.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleEditor.svelte +4 -68
- package/package/components/StringTypeNarrowing.svelte +5 -10
- package/package/components/TemplateEditor.svelte +2 -16
- package/package/components/TimeAgo.svelte +1 -1
- package/package/components/TimeAgo.svelte.d.ts +1 -0
- package/package/components/Toggle.svelte +2 -1
- package/package/components/Toggle.svelte.d.ts +2 -1
- package/package/components/WorkerRepl.svelte +1 -1
- package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
- package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
- package/package/components/apps/components/display/table/utils.js +36 -5
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
- package/package/components/apps/components/layout/AppModal.svelte +2 -2
- package/package/components/apps/editor/AppEditor.svelte +4 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
- package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
- package/package/components/apps/editor/SettingsPanel.svelte +2 -2
- package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
- package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
- package/package/components/assets/JobAssetsViewer.svelte +28 -24
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
- package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
- package/package/components/common/OnChange.svelte.d.ts +11 -4
- package/package/components/common/badge/Badge.svelte +9 -2
- package/package/components/common/badge/Badge.svelte.d.ts +2 -1
- package/package/components/common/button/model.d.ts +1 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
- package/package/components/common/drawer/Disposable.svelte +45 -26
- package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
- package/package/components/common/drawer/Drawer.svelte +17 -14
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -1
- package/package/components/common/tabs/TabContent.svelte +2 -7
- package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
- package/package/components/copilot/MetadataGen.svelte +14 -3
- package/package/components/copilot/chat/AIChatInput.svelte +0 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
- package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
- package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
- package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
- package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
- package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
- package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
- package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
- package/package/components/copilot/chat/anthropic.d.ts +15 -0
- package/package/components/copilot/chat/anthropic.js +208 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
- package/package/components/copilot/chat/api/apiTools.js +10 -7
- package/package/components/copilot/chat/api/core.d.ts +1 -1
- package/package/components/copilot/chat/api/core.js +7 -2
- package/package/components/copilot/chat/ask/core.d.ts +1 -1
- package/package/components/copilot/chat/ask/core.js +7 -2
- package/package/components/copilot/chat/context.d.ts +7 -2
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
- package/package/components/copilot/chat/flow/core.d.ts +12 -1
- package/package/components/copilot/chat/flow/core.js +133 -5
- package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
- package/package/components/copilot/chat/flow/uiIntents.js +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
- package/package/components/copilot/chat/monaco-adapter.js +55 -16
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +7 -2
- package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
- package/package/components/copilot/chat/script/core.d.ts +5 -4
- package/package/components/copilot/chat/script/core.js +134 -21
- package/package/components/copilot/chat/shared.d.ts +10 -9
- package/package/components/copilot/chat/shared.js +24 -12
- package/package/components/copilot/lib.d.ts +29 -8
- package/package/components/copilot/lib.js +211 -31
- package/package/components/copilot/shared.d.ts +1 -1
- package/package/components/copilot/shared.js +16 -10
- package/package/components/flows/FlowEditor.svelte +4 -2
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/FlowModuleIcon.svelte +8 -8
- package/package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +36 -39
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
- package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowRetries.svelte +108 -3
- package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
- package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
- package/package/components/flows/dfs.d.ts +1 -1
- package/package/components/flows/dfs.js +6 -6
- package/package/components/flows/flowInfers.js +15 -42
- package/package/components/flows/flowStateUtils.svelte.js +1 -2
- package/package/components/flows/flowStore.d.ts +45 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +1 -0
- package/package/components/flows/map/InsertModuleInner.svelte +12 -15
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
- package/package/components/flows/map/MapItem.svelte +8 -4
- package/package/components/flows/map/VirtualItem.svelte +1 -1
- package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
- package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
- package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
- package/package/components/flows/types.d.ts +16 -3
- package/package/components/flows/utils.js +3 -0
- package/package/components/git_sync/DetectionFlow.svelte +15 -17
- package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
- package/package/components/graph/FlowGraphV2.svelte +1 -1
- package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
- package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
- package/package/components/home/ItemsList.svelte +17 -13
- package/package/components/home/TreeView.svelte +21 -27
- package/package/components/home/TreeView.svelte.d.ts +2 -29
- package/package/components/home/TreeViewRoot.svelte +11 -23
- package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
- package/package/components/icons/GitIcon.svelte +10 -2
- package/package/components/icons/GitIcon.svelte.d.ts +1 -0
- package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
- package/package/components/meltComponents/Popover.svelte +23 -3
- package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
- package/package/components/monacoLanguagesOptions.d.ts +3 -0
- package/package/components/monacoLanguagesOptions.js +109 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
- package/package/components/propertyPicker/PropPicker.svelte +1 -1
- package/package/components/propertyPicker/utils.js +14 -7
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
- package/package/components/runs/JobRunsPreview.svelte +212 -177
- package/package/components/runs/JobsLoader.svelte +2 -2
- package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
- package/package/components/runs/RunBadges.svelte +100 -0
- package/package/components/runs/RunBadges.svelte.d.ts +12 -0
- package/package/components/runs/RunLabels.svelte +86 -0
- package/package/components/runs/RunLabels.svelte.d.ts +10 -0
- package/package/components/runs/RunOption.svelte +20 -0
- package/package/components/runs/RunOption.svelte.d.ts +10 -0
- package/package/components/runs/RunRow.svelte +239 -151
- package/package/components/runs/RunRow.svelte.d.ts +12 -9
- package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
- package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
- package/package/components/runs/RunsFilter.svelte +369 -243
- package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
- package/package/components/runs/RunsQueue.svelte +96 -25
- package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
- package/package/components/runs/RunsTable.svelte +62 -71
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/runs/runs-grid.css +95 -0
- package/package/components/schema/AddPropertyV2.svelte +2 -7
- package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
- package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
- package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
- package/package/components/schema/FlowPropertyEditor.svelte +195 -236
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +33 -35
- package/package/components/schema/SchemaFormDND.svelte +11 -10
- package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
- package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/DraggableTags.svelte.d.ts +17 -7
- package/package/components/select/MultiSelect.svelte.d.ts +21 -11
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +25 -13
- package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
- package/package/components/settings/PremiumInfo.svelte +7 -2
- package/package/components/settings/TokenDisplay.svelte +1 -1
- package/package/components/sidebar/OperatorMenu.svelte +5 -0
- package/package/components/sidebar/SidebarContent.svelte +48 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
- package/package/components/toast.js +6 -3
- package/package/components/triggers/AddTriggersButton.svelte +7 -6
- package/package/components/triggers/CaptureWrapper.svelte +21 -16
- package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
- package/package/components/triggers/TriggerLabel.svelte +8 -0
- package/package/components/triggers/TriggerTokens.svelte +1 -1
- package/package/components/triggers/TriggersEditor.svelte +9 -5
- package/package/components/triggers/TriggersTable.svelte +2 -2
- package/package/components/triggers/TriggersWrapper.svelte +17 -5
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
- package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
- package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
- package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailCapture.svelte +39 -0
- package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
- package/package/components/triggers/email/utils.d.ts +4 -0
- package/package/components/triggers/email/utils.js +52 -0
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
- package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +24 -2
- package/package/components/triggers/utils.js +19 -5
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
- package/package/components/triggers.d.ts +1 -1
- package/package/components/triggers.js +2 -0
- package/package/components/wizards/AgGridWizard.svelte +85 -80
- package/package/components/workspaceSettings/AISettings.svelte +74 -22
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
- package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +142 -3
- package/package/gen/schemas.gen.js +144 -3
- package/package/gen/services.gen.d.ts +129 -1
- package/package/gen/services.gen.js +267 -1
- package/package/gen/types.gen.d.ts +434 -8
- package/package/hubPaths.json +6 -2
- package/package/infer.js +1 -1
- package/package/keyboardChain.d.ts +5 -0
- package/package/keyboardChain.js +40 -0
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +2 -0
- package/package/services/JobManager.js +2 -2
- package/package/stores.d.ts +4 -1
- package/package/stores.js +16 -6
- package/package/utils/workspaceHierarchy.d.ts +27 -0
- package/package/utils/workspaceHierarchy.js +101 -0
- package/package/utils.d.ts +6 -3
- package/package/utils.js +30 -15
- package/package/workspace_settings.js +2 -3
- package/package.json +10 -12
- package/package/components/DynSelect.svelte.d.ts +0 -11
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
- package/package/components/ObjectTypeNarrowing.svelte +0 -18
- package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
- package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
- package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
- package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
- package/package/components/details/EmailTriggerPanel.svelte +0 -76
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
|
@@ -9,7 +9,7 @@ import { loadSchemaFromModule } from '../../../flows/flowInfers';
|
|
|
9
9
|
import { aiChatManager } from '../AIChatManager.svelte';
|
|
10
10
|
import { refreshStateStore } from '../../../../svelte5Utils.svelte';
|
|
11
11
|
import DiffDrawer from '../../../DiffDrawer.svelte';
|
|
12
|
-
let { flowModuleSchemaMap
|
|
12
|
+
let { flowModuleSchemaMap } = $props();
|
|
13
13
|
const { flowStore, flowStateStore, selectedId, currentEditor } = getContext('FlowEditorContext');
|
|
14
14
|
const { exprsToSet } = getContext('FlowCopilotContext') ?? {};
|
|
15
15
|
let affectedModules = $state({});
|
|
@@ -71,13 +71,10 @@ const flowHelpers = {
|
|
|
71
71
|
hasDiff: () => {
|
|
72
72
|
return Object.keys(affectedModules).length > 0;
|
|
73
73
|
},
|
|
74
|
-
acceptAllModuleActions
|
|
75
|
-
for (const
|
|
76
|
-
|
|
77
|
-
deleteStep(id);
|
|
78
|
-
}
|
|
74
|
+
acceptAllModuleActions() {
|
|
75
|
+
for (const id of Object.keys(affectedModules)) {
|
|
76
|
+
this.acceptModuleAction(id);
|
|
79
77
|
}
|
|
80
|
-
affectedModules = {};
|
|
81
78
|
},
|
|
82
79
|
rejectAllModuleActions() {
|
|
83
80
|
for (const id of Object.keys(affectedModules)) {
|
|
@@ -151,7 +148,18 @@ const flowHelpers = {
|
|
|
151
148
|
if (!newModule) {
|
|
152
149
|
throw new Error('Module not found');
|
|
153
150
|
}
|
|
154
|
-
|
|
151
|
+
// Apply the old code to the editor and hide diff editor if the reverted module is a rawscript
|
|
152
|
+
if (newModule.value.type === 'rawscript' &&
|
|
153
|
+
$currentEditor?.type === 'script' &&
|
|
154
|
+
$currentEditor.stepId === id) {
|
|
155
|
+
const aiChatEditorHandler = $currentEditor.editor.getAiChatEditorHandler();
|
|
156
|
+
if (aiChatEditorHandler) {
|
|
157
|
+
aiChatEditorHandler.revertAll({ disableReviewCallback: true });
|
|
158
|
+
$currentEditor.hideDiffMode();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
Object.keys(newModule).forEach((k) => delete newModule[k]);
|
|
162
|
+
Object.assign(newModule, $state.snapshot(oldModule));
|
|
155
163
|
}
|
|
156
164
|
refreshStateStore(flowStore);
|
|
157
165
|
delete affectedModules[id];
|
|
@@ -162,6 +170,15 @@ const flowHelpers = {
|
|
|
162
170
|
if (affectedModules[id]?.action === 'removed') {
|
|
163
171
|
deleteStep(id);
|
|
164
172
|
}
|
|
173
|
+
if (affectedModules[id]?.action === 'modified' &&
|
|
174
|
+
$currentEditor &&
|
|
175
|
+
$currentEditor.type === 'script' &&
|
|
176
|
+
$currentEditor.stepId === id) {
|
|
177
|
+
const aiChatEditorHandler = $currentEditor.editor.getAiChatEditorHandler();
|
|
178
|
+
if (aiChatEditorHandler) {
|
|
179
|
+
aiChatEditorHandler.keepAll({ disableReviewCallback: true });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
165
182
|
delete affectedModules[id];
|
|
166
183
|
},
|
|
167
184
|
// ai chat tools
|
|
@@ -416,6 +433,72 @@ const flowHelpers = {
|
|
|
416
433
|
refreshStateStore(flowStore);
|
|
417
434
|
}
|
|
418
435
|
setModuleStatus(id, 'modified');
|
|
436
|
+
},
|
|
437
|
+
setForLoopOptions: async (id, opts) => {
|
|
438
|
+
const module = getModule(id);
|
|
439
|
+
if (!module) {
|
|
440
|
+
throw new Error('Module not found');
|
|
441
|
+
}
|
|
442
|
+
if (module.value.type !== 'forloopflow') {
|
|
443
|
+
throw new Error('Module is not a forloopflow');
|
|
444
|
+
}
|
|
445
|
+
// Apply skip_failures if provided
|
|
446
|
+
if (typeof opts.skip_failures === 'boolean') {
|
|
447
|
+
module.value.skip_failures = opts.skip_failures;
|
|
448
|
+
}
|
|
449
|
+
// Apply parallel if provided
|
|
450
|
+
if (typeof opts.parallel === 'boolean') {
|
|
451
|
+
module.value.parallel = opts.parallel;
|
|
452
|
+
}
|
|
453
|
+
// Handle parallelism
|
|
454
|
+
if (opts.parallel === false) {
|
|
455
|
+
// If parallel is disabled, clear parallelism
|
|
456
|
+
module.value.parallelism = undefined;
|
|
457
|
+
}
|
|
458
|
+
else if (opts.parallelism !== undefined) {
|
|
459
|
+
if (opts.parallelism === null) {
|
|
460
|
+
// Explicitly clear parallelism
|
|
461
|
+
module.value.parallelism = undefined;
|
|
462
|
+
}
|
|
463
|
+
else if (module.value.parallel || opts.parallel === true) {
|
|
464
|
+
// Only set parallelism if parallel is enabled
|
|
465
|
+
const n = Math.max(1, Math.floor(Math.abs(opts.parallelism)));
|
|
466
|
+
module.value.parallelism = n;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
refreshStateStore(flowStore);
|
|
470
|
+
setModuleStatus(id, 'modified');
|
|
471
|
+
},
|
|
472
|
+
setModuleControlOptions: async (id, opts) => {
|
|
473
|
+
const module = getModule(id);
|
|
474
|
+
if (!module) {
|
|
475
|
+
throw new Error('Module not found');
|
|
476
|
+
}
|
|
477
|
+
// Handle stop_after_if
|
|
478
|
+
if (typeof opts.stop_after_if === 'boolean') {
|
|
479
|
+
if (opts.stop_after_if === false) {
|
|
480
|
+
module.stop_after_if = undefined;
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
module.stop_after_if = {
|
|
484
|
+
expr: opts.stop_after_if_expr ?? '',
|
|
485
|
+
skip_if_stopped: opts.stop_after_if
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// Handle skip_if
|
|
490
|
+
if (typeof opts.skip_if === 'boolean') {
|
|
491
|
+
if (opts.skip_if === false) {
|
|
492
|
+
module.skip_if = undefined;
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
module.skip_if = {
|
|
496
|
+
expr: opts.skip_if_expr ?? ''
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
refreshStateStore(flowStore);
|
|
501
|
+
setModuleStatus(id, 'modified');
|
|
419
502
|
}
|
|
420
503
|
};
|
|
421
504
|
function deleteStep(id) {
|
|
@@ -454,6 +537,25 @@ $effect(() => {
|
|
|
454
537
|
const cleanup = aiChatManager.listenForCurrentEditorChanges($currentEditor);
|
|
455
538
|
return cleanup;
|
|
456
539
|
});
|
|
540
|
+
// Automatically show revert review when selecting a rawscript module with pending changes
|
|
541
|
+
$effect(() => {
|
|
542
|
+
if ($currentEditor?.type === 'script' &&
|
|
543
|
+
$selectedId &&
|
|
544
|
+
affectedModules[$selectedId] &&
|
|
545
|
+
$currentEditor.editor.getAiChatEditorHandler()) {
|
|
546
|
+
const moduleLastSnapshot = getModule($selectedId, lastSnapshot);
|
|
547
|
+
const content = moduleLastSnapshot?.value.type === 'rawscript' ? moduleLastSnapshot.value.content : '';
|
|
548
|
+
if (content.length > 0) {
|
|
549
|
+
untrack(() => $currentEditor.editor.reviewAppliedCode(content, {
|
|
550
|
+
onFinishedReview: () => {
|
|
551
|
+
const id = $selectedId;
|
|
552
|
+
flowHelpers.acceptModuleAction(id);
|
|
553
|
+
$currentEditor.hideDiffMode();
|
|
554
|
+
}
|
|
555
|
+
}));
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
});
|
|
457
559
|
let diffDrawer = $state(undefined);
|
|
458
560
|
</script>
|
|
459
561
|
|
|
@@ -33,6 +33,17 @@ export interface FlowAIChatHelpers {
|
|
|
33
33
|
addBranch: (id: string) => Promise<void>;
|
|
34
34
|
removeBranch: (id: string, branchIndex: number) => Promise<void>;
|
|
35
35
|
setForLoopIteratorExpression: (id: string, expression: string) => Promise<void>;
|
|
36
|
+
setForLoopOptions: (id: string, opts: {
|
|
37
|
+
skip_failures?: boolean | null;
|
|
38
|
+
parallel?: boolean | null;
|
|
39
|
+
parallelism?: number | null;
|
|
40
|
+
}) => Promise<void>;
|
|
41
|
+
setModuleControlOptions: (id: string, opts: {
|
|
42
|
+
stop_after_if?: boolean | null;
|
|
43
|
+
stop_after_if_expr?: string | null;
|
|
44
|
+
skip_if?: boolean | null;
|
|
45
|
+
skip_if_expr?: string | null;
|
|
46
|
+
}) => Promise<void>;
|
|
36
47
|
setCode: (id: string, code: string) => Promise<void>;
|
|
37
48
|
}
|
|
38
49
|
declare const newStepSchema: z.ZodUnion<[z.ZodObject<{
|
|
@@ -127,7 +138,7 @@ declare const insertLocationSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
127
138
|
}>]>;
|
|
128
139
|
type InsertLocation = z.infer<typeof insertLocationSchema>;
|
|
129
140
|
export declare const flowTools: Tool<FlowAIChatHelpers>[];
|
|
130
|
-
export declare function prepareFlowSystemMessage(): ChatCompletionSystemMessageParam;
|
|
141
|
+
export declare function prepareFlowSystemMessage(customPrompt?: string): ChatCompletionSystemMessageParam;
|
|
131
142
|
export declare function prepareFlowUserMessage(instructions: string, flowAndSelectedId?: {
|
|
132
143
|
flow: ExtendedOpenFlow;
|
|
133
144
|
selectedId: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ScriptService, JobService } from '../../../../gen';
|
|
2
|
+
import { emitUiIntent } from './uiIntents';
|
|
2
3
|
import YAML from 'yaml';
|
|
3
4
|
import { z } from 'zod';
|
|
4
5
|
import uFuzzy from '@leeoniya/ufuzzy';
|
|
@@ -98,6 +99,51 @@ const setForLoopIteratorExpressionSchema = z.object({
|
|
|
98
99
|
expression: z.string().describe('The JavaScript expression to set for the iterator')
|
|
99
100
|
});
|
|
100
101
|
const setForLoopIteratorExpressionToolDef = createToolDef(setForLoopIteratorExpressionSchema, 'set_forloop_iterator_expression', 'Set the iterator JavaScript expression for the given forloop step');
|
|
102
|
+
const setForLoopOptionsSchema = z.object({
|
|
103
|
+
id: z.string().describe('The id of the forloop step to configure'),
|
|
104
|
+
skip_failures: z
|
|
105
|
+
.boolean()
|
|
106
|
+
.nullable()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Whether to skip failures in the loop (null to not change)'),
|
|
109
|
+
parallel: z
|
|
110
|
+
.boolean()
|
|
111
|
+
.nullable()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe('Whether to run iterations in parallel (null to not change)'),
|
|
114
|
+
parallelism: z
|
|
115
|
+
.number()
|
|
116
|
+
.int()
|
|
117
|
+
.min(1)
|
|
118
|
+
.nullable()
|
|
119
|
+
.optional()
|
|
120
|
+
.describe('Maximum number of parallel iterations (null to not change)')
|
|
121
|
+
});
|
|
122
|
+
const setForLoopOptionsToolDef = createToolDef(setForLoopOptionsSchema, 'set_forloop_options', 'Set advanced options for a forloop step: skip_failures, parallel, and parallelism');
|
|
123
|
+
const setModuleControlOptionsSchema = z.object({
|
|
124
|
+
id: z.string().describe('The id of the module to configure'),
|
|
125
|
+
stop_after_if: z
|
|
126
|
+
.boolean()
|
|
127
|
+
.nullable()
|
|
128
|
+
.optional()
|
|
129
|
+
.describe('Early stop condition (true to set, false to clear, null to not change)'),
|
|
130
|
+
stop_after_if_expr: z
|
|
131
|
+
.string()
|
|
132
|
+
.nullable()
|
|
133
|
+
.optional()
|
|
134
|
+
.describe('JavaScript expression for early stop condition. Can use `flow_input` or `result`. `result` is the result of the step. `results.<step_id>` is not supported, do not use it. Only used if stop_after_if is true. Example: `flow_input.x > 10` or `result === "failure"`'),
|
|
135
|
+
skip_if: z
|
|
136
|
+
.boolean()
|
|
137
|
+
.nullable()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe('Skip condition (true to set, false to clear, null to not change)'),
|
|
140
|
+
skip_if_expr: z
|
|
141
|
+
.string()
|
|
142
|
+
.nullable()
|
|
143
|
+
.optional()
|
|
144
|
+
.describe('JavaScript expression for skip condition. Can use `flow_input` or `results.<step_id>`. Only used if skip_if is true. Example: `flow_input.x > 10` or `results.a === "failure"`')
|
|
145
|
+
});
|
|
146
|
+
const setModuleControlOptionsToolDef = createToolDef(setModuleControlOptionsSchema, 'set_module_control_options', 'Set control options for any module: stop_after_if (early stop) and skip_if (conditional skip)');
|
|
101
147
|
const setBranchPredicateSchema = z.object({
|
|
102
148
|
id: z.string().describe('The id of the branchone step to set the predicates for'),
|
|
103
149
|
branchIndex: z
|
|
@@ -378,6 +424,70 @@ export const flowTools = [
|
|
|
378
424
|
return `Forloop '${parsedArgs.id}' iterator expression set`;
|
|
379
425
|
}
|
|
380
426
|
},
|
|
427
|
+
{
|
|
428
|
+
def: {
|
|
429
|
+
...setForLoopOptionsToolDef,
|
|
430
|
+
function: { ...setForLoopOptionsToolDef.function, strict: false }
|
|
431
|
+
},
|
|
432
|
+
fn: async ({ args, helpers, toolId, toolCallbacks }) => {
|
|
433
|
+
const parsedArgs = setForLoopOptionsSchema.parse(args);
|
|
434
|
+
await helpers.setForLoopOptions(parsedArgs.id, {
|
|
435
|
+
skip_failures: parsedArgs.skip_failures,
|
|
436
|
+
parallel: parsedArgs.parallel,
|
|
437
|
+
parallelism: parsedArgs.parallelism
|
|
438
|
+
});
|
|
439
|
+
helpers.selectStep(parsedArgs.id);
|
|
440
|
+
const message = `Set forloop '${parsedArgs.id}' options`;
|
|
441
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
442
|
+
content: message
|
|
443
|
+
});
|
|
444
|
+
return `${message}: ${JSON.stringify(parsedArgs)}`;
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
def: {
|
|
449
|
+
...setModuleControlOptionsToolDef,
|
|
450
|
+
function: { ...setModuleControlOptionsToolDef.function, strict: false }
|
|
451
|
+
},
|
|
452
|
+
fn: async ({ args, helpers, toolId, toolCallbacks }) => {
|
|
453
|
+
const parsedArgs = setModuleControlOptionsSchema.parse(args);
|
|
454
|
+
await helpers.setModuleControlOptions(parsedArgs.id, {
|
|
455
|
+
stop_after_if: parsedArgs.stop_after_if,
|
|
456
|
+
stop_after_if_expr: parsedArgs.stop_after_if_expr,
|
|
457
|
+
skip_if: parsedArgs.skip_if,
|
|
458
|
+
skip_if_expr: parsedArgs.skip_if_expr
|
|
459
|
+
});
|
|
460
|
+
helpers.selectStep(parsedArgs.id);
|
|
461
|
+
// Emit UI intent to show early-stop tab when stop_after_if is configured
|
|
462
|
+
const modules = helpers.getModules();
|
|
463
|
+
const module = findModuleById(modules, parsedArgs.id);
|
|
464
|
+
if (!module) {
|
|
465
|
+
throw new Error(`Module with id '${parsedArgs.id}' not found in flow.`);
|
|
466
|
+
}
|
|
467
|
+
const moduleType = module?.value.type;
|
|
468
|
+
const hasSpecificComponents = ['forloopflow', 'whileloopflow', 'branchall', 'branchone'];
|
|
469
|
+
const prefix = hasSpecificComponents.includes(moduleType) ? `${moduleType}` : 'flow';
|
|
470
|
+
if (typeof parsedArgs.stop_after_if === 'boolean') {
|
|
471
|
+
emitUiIntent({
|
|
472
|
+
kind: 'open_module_tab',
|
|
473
|
+
componentId: `${prefix}-${parsedArgs.id}`,
|
|
474
|
+
tab: 'early-stop'
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
if (typeof parsedArgs.skip_if === 'boolean') {
|
|
478
|
+
emitUiIntent({
|
|
479
|
+
kind: 'open_module_tab',
|
|
480
|
+
componentId: `${prefix}-${parsedArgs.id}`,
|
|
481
|
+
tab: 'skip'
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
const message = `Set module '${parsedArgs.id}' control options`;
|
|
485
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
486
|
+
content: message
|
|
487
|
+
});
|
|
488
|
+
return `${message}: ${JSON.stringify(parsedArgs)}`;
|
|
489
|
+
}
|
|
490
|
+
},
|
|
381
491
|
{
|
|
382
492
|
def: resourceTypeToolDef,
|
|
383
493
|
fn: async ({ args, toolId, workspace, toolCallbacks }) => {
|
|
@@ -532,8 +642,8 @@ export const flowTools = [
|
|
|
532
642
|
showDetails: true
|
|
533
643
|
}
|
|
534
644
|
];
|
|
535
|
-
export function prepareFlowSystemMessage() {
|
|
536
|
-
|
|
645
|
+
export function prepareFlowSystemMessage(customPrompt) {
|
|
646
|
+
let content = `You are a helpful assistant that creates and edits workflows on the Windmill platform. You're provided with a bunch of tools to help you edit the flow.
|
|
537
647
|
Follow the user instructions carefully.
|
|
538
648
|
Go step by step, and explain what you're doing as you're doing it.
|
|
539
649
|
DO NOT wait for user confirmation before performing an action. Only do it if the user explicitly asks you to wait in their initial instructions.
|
|
@@ -584,10 +694,17 @@ When creating new steps, follow this process for EACH step:
|
|
|
584
694
|
|
|
585
695
|
### Special Step Types
|
|
586
696
|
For special step types, follow these additional steps:
|
|
587
|
-
- For forloop steps:
|
|
697
|
+
- For forloop steps:
|
|
698
|
+
- Set the iterator expression using set_forloop_iterator_expression
|
|
699
|
+
- Set advanced options (parallel, parallelism, skip_failures) using set_forloop_options
|
|
588
700
|
- For branchone steps: Set the predicates for each branch using set_branch_predicate
|
|
589
701
|
- For branchall steps: No additional setup needed
|
|
590
702
|
|
|
703
|
+
### Module Control Options
|
|
704
|
+
For any module type, you can set control flow options using set_module_control_options:
|
|
705
|
+
- **stop_after_if**: Early stop condition - stops the module if expression evaluates to true. Can use "flow_input" or "result". "result" is the result of the step. "results.<step_id>" is not supported, do not use it. Example: "flow_input.x > 10" or "result === "failure""
|
|
706
|
+
- **skip_if**: Skip condition - skips the module entirely if expression evaluates to true. Can use "flow_input" or "results.<step_id>". Example: "flow_input.x > 10" or "results.a === "failure""
|
|
707
|
+
|
|
591
708
|
### Step Insertion Rules
|
|
592
709
|
When adding steps, carefully consider the execution order:
|
|
593
710
|
1. Steps are executed in the order they appear in the flow definition, not in the order they were added
|
|
@@ -608,6 +725,7 @@ When adding steps, carefully consider the execution order:
|
|
|
608
725
|
### JavaScript Expressions
|
|
609
726
|
For step inputs, forloop iterator expressions and branch predicates, use JavaScript expressions with these variables:
|
|
610
727
|
- Step results: results.stepid or results.stepid.property_name
|
|
728
|
+
- Break condition (stop_after_if) in for loops: result (contains the result of the last iteration)
|
|
611
729
|
- Loop iterator: flow_input.iter.value (inside loops)
|
|
612
730
|
- Flow inputs: flow_input.property_name
|
|
613
731
|
- Static values: Use JavaScript syntax (e.g., "hello", true, 3)
|
|
@@ -616,6 +734,12 @@ Note: These variables are only accessible in step inputs, forloop iterator expre
|
|
|
616
734
|
|
|
617
735
|
For truly static values in step inputs (those not linked to previous steps or loop iterations), prefer using flow inputs by default unless explicitly specified otherwise. This makes the flow more configurable and reusable. For example, instead of hardcoding an email address in a step input, create a flow input for it.
|
|
618
736
|
|
|
737
|
+
### For Loop Advanced Options
|
|
738
|
+
When configuring for-loop steps, consider these options:
|
|
739
|
+
- **parallel: true** - Run iterations in parallel for independent operations (significantly faster for I/O bound tasks)
|
|
740
|
+
- **parallelism: N** - Limit concurrent iterations (only applies when parallel=true). Use to prevent overwhelming external APIs
|
|
741
|
+
- **skip_failures: true** - Continue processing remaining iterations even if some fail. Failed iterations return error objects as results
|
|
742
|
+
|
|
619
743
|
### Special Modules
|
|
620
744
|
- Preprocessor: Runs before the first step when triggered externally
|
|
621
745
|
- ID: 'preprocessor'
|
|
@@ -644,12 +768,16 @@ On Windmill, credentials and configuration are stored in resources. Resource typ
|
|
|
644
768
|
If the user needs a resource as flow input, you should set the property type in the schema to "object" as well as add a key called "format" and set it to "resource-nameofresourcetype" (e.g. "resource-stripe").
|
|
645
769
|
If the user wants a specific resource as step input, you should set the step value to a static string in the following format: "$res:path/to/resource".
|
|
646
770
|
`;
|
|
771
|
+
// If there's a custom prompt, append it to the system prompt
|
|
772
|
+
if (customPrompt?.trim()) {
|
|
773
|
+
content = `${content}\n\nUSER GIVEN INSTRUCTIONS:\n${customPrompt.trim()}`;
|
|
774
|
+
}
|
|
647
775
|
return {
|
|
648
776
|
role: 'system',
|
|
649
777
|
content
|
|
650
778
|
};
|
|
651
779
|
}
|
|
652
|
-
export function prepareFlowUserMessage(instructions, flowAndSelectedId, selectedContext) {
|
|
780
|
+
export function prepareFlowUserMessage(instructions, flowAndSelectedId, selectedContext = []) {
|
|
653
781
|
const flow = flowAndSelectedId?.flow;
|
|
654
782
|
const selectedId = flowAndSelectedId?.selectedId;
|
|
655
783
|
// Handle context elements
|
|
@@ -662,7 +790,7 @@ ${instructions}`;
|
|
|
662
790
|
content: userMessage
|
|
663
791
|
};
|
|
664
792
|
}
|
|
665
|
-
const codePieces = selectedContext
|
|
793
|
+
const codePieces = selectedContext.filter((c) => c.type === 'flow_module_code_piece');
|
|
666
794
|
const flowModulesYaml = applyCodePiecesToFlowModules(codePieces, flow.value.modules);
|
|
667
795
|
let flowContent = `## FLOW:
|
|
668
796
|
flow_input schema:
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Writable } from 'svelte/store';
|
|
2
|
+
export type UiIntent = {
|
|
3
|
+
kind: 'open_module_tab';
|
|
4
|
+
componentId: string;
|
|
5
|
+
tab: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const uiIntentStore: Writable<UiIntent | null>;
|
|
8
|
+
export declare function emitUiIntent(intent: UiIntent): void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { uiIntentStore } from './uiIntents';
|
|
2
|
+
import { onDestroy } from 'svelte';
|
|
3
|
+
export function useUiIntent(componentId, handlers) {
|
|
4
|
+
const unsub = uiIntentStore.subscribe((intent) => {
|
|
5
|
+
if (!intent || intent.componentId !== componentId)
|
|
6
|
+
return;
|
|
7
|
+
if (intent.kind === 'open_module_tab')
|
|
8
|
+
handlers.openTab?.(intent.tab);
|
|
9
|
+
uiIntentStore.set(null);
|
|
10
|
+
});
|
|
11
|
+
onDestroy(() => unsub());
|
|
12
|
+
}
|
|
@@ -5,6 +5,11 @@ type ExcludeVariant<T, K extends keyof T, V> = T extends Record<K, V> ? never :
|
|
|
5
5
|
type VisualChangeWithDiffIndex = ExcludeVariant<VisualChange, 'type', 'added_inline'> & {
|
|
6
6
|
diffIndex: number;
|
|
7
7
|
};
|
|
8
|
+
export interface ReviewChangesOpts {
|
|
9
|
+
applyAll?: boolean;
|
|
10
|
+
mode?: 'apply' | 'revert';
|
|
11
|
+
onFinishedReview?: () => void;
|
|
12
|
+
}
|
|
8
13
|
export declare class AIChatEditorHandler {
|
|
9
14
|
editor: meditor.IStandaloneCodeEditor;
|
|
10
15
|
viewZoneIds: string[];
|
|
@@ -15,18 +20,32 @@ export declare class AIChatEditorHandler {
|
|
|
15
20
|
changes: VisualChangeWithDiffIndex[];
|
|
16
21
|
groupIndex: number;
|
|
17
22
|
}[];
|
|
23
|
+
private reviewState;
|
|
18
24
|
constructor(editor: meditor.IStandaloneCodeEditor);
|
|
19
25
|
clear(): void;
|
|
20
26
|
preventWriting(): void;
|
|
21
27
|
allowWriting(): void;
|
|
22
|
-
finish(
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
finish(opts?: {
|
|
29
|
+
disableReviewCallback?: boolean;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
getReviewMode(): 'apply' | 'revert' | null;
|
|
32
|
+
acceptAll(opts?: {
|
|
33
|
+
disableReviewCallback?: boolean;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
rejectAll(opts?: {
|
|
36
|
+
disableReviewCallback?: boolean;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
keepAll(opts?: {
|
|
39
|
+
disableReviewCallback?: boolean;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
revertAll(opts?: {
|
|
42
|
+
disableReviewCallback?: boolean;
|
|
43
|
+
}): Promise<void>;
|
|
25
44
|
applyGroup(group: {
|
|
26
45
|
changes: VisualChangeWithDiffIndex[];
|
|
27
46
|
groupIndex: number;
|
|
28
47
|
}): void;
|
|
29
48
|
private calculateVisualChanges;
|
|
30
|
-
|
|
49
|
+
reviewChanges(targetCode: string, opts?: ReviewChangesOpts): Promise<void>;
|
|
31
50
|
}
|
|
32
51
|
export {};
|
|
@@ -10,6 +10,8 @@ export class AIChatEditorHandler {
|
|
|
10
10
|
readOnlyDisposable = undefined;
|
|
11
11
|
reviewingChanges = writable(false);
|
|
12
12
|
groupChanges = [];
|
|
13
|
+
// Track review decisions
|
|
14
|
+
reviewState = null;
|
|
13
15
|
constructor(editor) {
|
|
14
16
|
this.editor = editor;
|
|
15
17
|
}
|
|
@@ -48,7 +50,14 @@ export class AIChatEditorHandler {
|
|
|
48
50
|
this.readOnlyDisposable.dispose();
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
async finish() {
|
|
53
|
+
async finish(opts) {
|
|
54
|
+
// expose mode getter relies on reviewState
|
|
55
|
+
// Call completion callback if we're tracking review state
|
|
56
|
+
if (this.reviewState?.onFinishedReview && !opts?.disableReviewCallback) {
|
|
57
|
+
this.reviewState.onFinishedReview();
|
|
58
|
+
}
|
|
59
|
+
// Reset review state
|
|
60
|
+
this.reviewState = null;
|
|
52
61
|
this.clear();
|
|
53
62
|
this.allowWriting();
|
|
54
63
|
this.reviewingChanges.set(false);
|
|
@@ -56,15 +65,26 @@ export class AIChatEditorHandler {
|
|
|
56
65
|
scrollBeyondLastLine: false
|
|
57
66
|
});
|
|
58
67
|
}
|
|
59
|
-
|
|
68
|
+
getReviewMode() {
|
|
69
|
+
return this.reviewState?.mode ?? null;
|
|
70
|
+
}
|
|
71
|
+
async acceptAll(opts) {
|
|
60
72
|
this.groupChanges.reverse();
|
|
61
73
|
for (const group of this.groupChanges) {
|
|
62
74
|
this.applyGroup(group);
|
|
63
75
|
}
|
|
64
|
-
this.finish();
|
|
76
|
+
this.finish(opts);
|
|
77
|
+
}
|
|
78
|
+
async rejectAll(opts) {
|
|
79
|
+
this.finish(opts);
|
|
80
|
+
}
|
|
81
|
+
// Keep all changes, used in revert mode
|
|
82
|
+
async keepAll(opts) {
|
|
83
|
+
this.finish(opts);
|
|
65
84
|
}
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
// Revert all changes, used in revert mode
|
|
86
|
+
async revertAll(opts) {
|
|
87
|
+
this.acceptAll(opts);
|
|
68
88
|
}
|
|
69
89
|
applyGroup(group) {
|
|
70
90
|
// maximum of 2 changes per group with the deletion first
|
|
@@ -147,23 +167,30 @@ export class AIChatEditorHandler {
|
|
|
147
167
|
}
|
|
148
168
|
return changedLines;
|
|
149
169
|
}
|
|
150
|
-
async
|
|
151
|
-
if (aiChatManager.pendingNewCode ===
|
|
170
|
+
async reviewChanges(targetCode, opts) {
|
|
171
|
+
if (aiChatManager.pendingNewCode === targetCode && opts?.mode === 'apply') {
|
|
152
172
|
this.acceptAll();
|
|
153
173
|
return;
|
|
154
174
|
}
|
|
155
175
|
else if (aiChatManager.pendingNewCode) {
|
|
156
176
|
this.clear();
|
|
157
177
|
}
|
|
158
|
-
aiChatManager.pendingNewCode =
|
|
159
|
-
const changedLines = await this.calculateVisualChanges(
|
|
178
|
+
aiChatManager.pendingNewCode = targetCode;
|
|
179
|
+
const changedLines = await this.calculateVisualChanges(targetCode);
|
|
160
180
|
if (changedLines.length === 0)
|
|
161
181
|
return;
|
|
182
|
+
// Initialize review state for tracking
|
|
183
|
+
this.reviewState = {
|
|
184
|
+
mode: opts?.mode ?? 'apply',
|
|
185
|
+
onFinishedReview: opts?.onFinishedReview
|
|
186
|
+
};
|
|
162
187
|
let indicesOfRejectedLineChanges = [];
|
|
163
188
|
for (const [groupIndex, group] of this.groupChanges.entries()) {
|
|
164
189
|
let collection = undefined;
|
|
165
190
|
let ids = [];
|
|
166
|
-
const
|
|
191
|
+
const isRevert = opts?.mode === 'revert';
|
|
192
|
+
// Apply this group and continue with remaining changes
|
|
193
|
+
const onApply = () => {
|
|
167
194
|
this.applyGroup(group);
|
|
168
195
|
this.clear();
|
|
169
196
|
let newCodeWithRejects = '';
|
|
@@ -178,9 +205,11 @@ export class AIChatEditorHandler {
|
|
|
178
205
|
newCodeWithRejects += change.value;
|
|
179
206
|
}
|
|
180
207
|
}
|
|
181
|
-
this.
|
|
208
|
+
this.reviewChanges(newCodeWithRejects, opts);
|
|
182
209
|
};
|
|
183
|
-
|
|
210
|
+
// Discard this group and continue with remaining changes
|
|
211
|
+
const onDiscard = () => {
|
|
212
|
+
// This group was not applied (not reverted in revert mode)
|
|
184
213
|
indicesOfRejectedLineChanges.push(...group.changes.map((c) => c.diffIndex));
|
|
185
214
|
collection?.clear();
|
|
186
215
|
this.editor.changeViewZones((acc) => {
|
|
@@ -193,25 +222,35 @@ export class AIChatEditorHandler {
|
|
|
193
222
|
this.finish();
|
|
194
223
|
}
|
|
195
224
|
};
|
|
225
|
+
// In revert mode: Accept = keep current code, Reject = revert to targetCode
|
|
226
|
+
// In apply mode: Accept = apply changes, Reject = discard changes
|
|
227
|
+
const acceptFn = isRevert ? onDiscard : onApply;
|
|
228
|
+
const rejectFn = isRevert ? onApply : onDiscard;
|
|
196
229
|
const changes = group.changes.map((c, i) => {
|
|
197
230
|
if (i === group.changes.length - 1) {
|
|
198
231
|
return {
|
|
199
232
|
...c,
|
|
200
|
-
options: {
|
|
233
|
+
options: {
|
|
234
|
+
...(c.options ?? {}),
|
|
235
|
+
review: {
|
|
236
|
+
acceptFn,
|
|
237
|
+
rejectFn
|
|
238
|
+
}
|
|
239
|
+
}
|
|
201
240
|
};
|
|
202
241
|
}
|
|
203
242
|
else {
|
|
204
243
|
return c;
|
|
205
244
|
}
|
|
206
245
|
});
|
|
207
|
-
if (!applyAll) {
|
|
246
|
+
if (!opts?.applyAll) {
|
|
208
247
|
;
|
|
209
|
-
({ collection, ids } = await displayVisualChanges('editor-windmill-chat-style', this.editor, changes));
|
|
248
|
+
({ collection, ids } = await displayVisualChanges('editor-windmill-chat-style', this.editor, changes, isRevert));
|
|
210
249
|
this.decorationsCollections.push(collection);
|
|
211
250
|
this.viewZoneIds.push(...ids);
|
|
212
251
|
}
|
|
213
252
|
}
|
|
214
|
-
if (applyAll) {
|
|
253
|
+
if (opts?.applyAll) {
|
|
215
254
|
this.acceptAll();
|
|
216
255
|
}
|
|
217
256
|
}
|
|
@@ -3,5 +3,5 @@ import type { Tool } from '../shared';
|
|
|
3
3
|
export declare const CHAT_SYSTEM_PROMPT = "\nYou are Windmill's intelligent assistant, designed to help users navigate the application and answer questions about its functionality. It is your only purpose to help the user in the context of the windmill application.\nWindmill 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.\n\nYou have access to these tools:\n1. View current buttons and inputs on the page (get_triggerable_components)\n2. Execute buttons and inputs (trigger_component) \n3. Get documentation for user requests (get_documentation)\n4. Change the AI mode to the one specified (change_mode)\n\nINSTRUCTIONS:\n- When users ask about application features or concepts, first use get_documentation internally to retrieve accurate information about how to fulfill the user's request.\n- Then immediately use the available tools to guide the user through the application. Do not wait for the user's confirmation before taking action.\n- If you detect a confirmation modal that needs user confirmation, stop the navigation and let the user know that the action is pending confirmation.\n- Use get_triggerable_components to understand available options, and then trigger the components using trigger_component. Then wait a moment before rescanning the current page, and then continue with the next step. Do this 5 times max.\n- Make sure you navigated as far as possible before responding to the user. Always use get_triggerable_components one last time to make sure you didn't miss anything.\n- If you are not able to fulfill the user's request after 5 attempts, redirect the user to the documentation.\n- If you are asked to fill a form or act on an input, input the existing json object and change the fields the user asked you to change. Take into account the prompt_for_ai field of the schema to know what and how to do changes. Then tell the user that you have updated the form, and ask him to review the changes before running the script or flow.\n- For form inputs where format starts with \"resource-\" and is not \"resource-obj\", fetch the available resources using get_available_resources, and then use the resource_path prefixed with \"$res:\" to fill the input.\n- If you are not sure about an input, set the ones you are sure about, and then ask the user for the value of the input you are not sure about.\n- If the user asks you to make an API call, switch to API mode with the change_mode tool before using the new tools you'll have access to to make the API call.\n\nGENERAL PRINCIPLES:\n- Be concise but thorough\n- Focus on taking action and completing the user's goals\n- Maintain a friendly, professional tone\n- If you encounter an error or can't complete a request, explain why and suggest alternatives\n- When asked about a specific script, flow or app, first check components directly related to the mentioned entity, before checking the other components.\n- When you do not find what you are looking for on the current page, go to the home page by looking for the \"Home\" component, then scan the components again.\n\nIMPORTANT CONSIDERATIONS:\n- The user might have changed the page in the middle of the conversation, so make sure you rescan the page on each user request instead of just responding that you cannot find what the user is asking for.\n- If you navigate to a script creation page, consider this:\n - The page opens with the settings drawer open. After doing the changes mentioned by the user, close the settings drawer.\n - Then if the user has described what he wanted the script to do, switch to script mode with the change_mode tool, and use the new tools you'll have access to to edit the script.\n- If you navigate to a flow creation page, consider this:\n - If the user has described what he wanted the flow to do, switch to flow mode with the change_mode tool before using the new tools you'll have access to to edit the flow.\n\nAlways use the provided tools purposefully and appropriately to achieve the user's goals.\nYour actions only allow you to navigate the application through the provided tools.\nWhen you complete the user's request, do not say \"I created...\" or \"I updated...\" or \"I deleted...\", but rather complete your response with precisions about how it works based on the documentation. Also drop a link to the relevant documentation if possible.\n\nExample of good behavior:\n- User: \"How can I set my AI providers?\"\n- You: <call get_documentation and fetch relevant documentation>\n- You: <call get_triggerable_components to find relevant components>\n- You: <trigger the components>\n- You: \"<precisions about the request based on the documentation>\"\n";
|
|
4
4
|
export declare const getDocumentationTool: Tool<{}>;
|
|
5
5
|
export declare const navigatorTools: Tool<{}>[];
|
|
6
|
-
export declare function prepareNavigatorSystemMessage(): ChatCompletionSystemMessageParam;
|
|
6
|
+
export declare function prepareNavigatorSystemMessage(customPrompt?: string): ChatCompletionSystemMessageParam;
|
|
7
7
|
export declare function prepareNavigatorUserMessage(instructions: string): ChatCompletionUserMessageParam;
|
|
@@ -319,10 +319,15 @@ export const navigatorTools = [
|
|
|
319
319
|
getCurrentPageNameTool,
|
|
320
320
|
getAvailableResourcesTool
|
|
321
321
|
];
|
|
322
|
-
export function prepareNavigatorSystemMessage() {
|
|
322
|
+
export function prepareNavigatorSystemMessage(customPrompt) {
|
|
323
|
+
let content = CHAT_SYSTEM_PROMPT;
|
|
324
|
+
// If there's a custom prompt, append it to the system prompt
|
|
325
|
+
if (customPrompt?.trim()) {
|
|
326
|
+
content = `${content}\n\nUSER GIVEN INSTRUCTIONS:\n${customPrompt.trim()}`;
|
|
327
|
+
}
|
|
323
328
|
return {
|
|
324
329
|
role: 'system',
|
|
325
|
-
content
|
|
330
|
+
content
|
|
326
331
|
};
|
|
327
332
|
}
|
|
328
333
|
export function prepareNavigatorUserMessage(instructions) {
|