windmill-components 1.596.1 → 1.612.2
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/dist/appPolicy/myFunction.es.js +1337 -0
- package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/dist/sharedUtils/base.d.ts +1 -0
- package/dist/sharedUtils/cloud.d.ts +1 -0
- package/dist/sharedUtils/common.d.ts +108 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +84 -0
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +22 -0
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5305 -0
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
- package/dist/sharedUtils/components/apps/inputType.d.ts +176 -0
- package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +19 -0
- package/dist/sharedUtils/components/apps/types.d.ts +274 -0
- package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
- package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
- package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
- package/dist/sharedUtils/components/common/index.d.ts +24 -0
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
- package/dist/sharedUtils/components/dbTypes.d.ts +11 -0
- package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
- package/dist/sharedUtils/components/ducklake.d.ts +1 -0
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
- package/dist/sharedUtils/components/triggers/utils.d.ts +81 -0
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers.d.ts +20 -0
- package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
- package/dist/sharedUtils/gen/core/request.d.ts +29 -0
- package/dist/sharedUtils/gen/index.d.ts +6 -0
- package/dist/sharedUtils/gen/schemas.gen.d.ts +6192 -0
- package/dist/sharedUtils/gen/services.gen.d.ts +5741 -0
- package/dist/sharedUtils/gen/types.gen.d.ts +20152 -0
- package/dist/sharedUtils/history.svelte.d.ts +9 -0
- package/dist/sharedUtils/hub.d.ts +48 -0
- package/dist/sharedUtils/jsr.json +6 -0
- package/dist/sharedUtils/lib.d.ts +5 -0
- package/dist/sharedUtils/lib.es.js +1426 -0
- package/dist/sharedUtils/package.json +12 -0
- package/dist/sharedUtils/schema.d.ts +3 -0
- package/dist/sharedUtils/stores.d.ts +96 -0
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +49 -0
- package/dist/sharedUtils/toast.d.ts +8 -0
- package/dist/sharedUtils/utils.d.ts +250 -0
- package/package/assets/tokens/tokens.json +11 -1
- package/package/ata/apis.js +78 -5
- package/package/components/AddUser.svelte +1 -1
- package/package/components/CenteredModal.svelte +32 -24
- package/package/components/CenteredModal.svelte.d.ts +7 -27
- package/package/components/CenteredPage.svelte +5 -2
- package/package/components/CenteredPage.svelte.d.ts +2 -0
- package/package/components/ConcurrentJobsChart.svelte +3 -2
- package/package/components/ConcurrentJobsChart.svelte.d.ts +2 -2
- package/package/components/CustomPopover.svelte +20 -23
- package/package/components/CustomPopover.svelte.d.ts +14 -39
- package/package/components/DBManager.svelte +105 -17
- package/package/components/DBManager.svelte.d.ts +2 -1
- package/package/components/DBManagerContent.svelte +4 -3
- package/package/components/DBManagerContent.svelte.d.ts +1 -1
- package/package/components/DBTableEditor.svelte +210 -171
- package/package/components/DBTableEditor.svelte.d.ts +22 -3
- package/package/components/Description.svelte +3 -2
- package/package/components/Dev.svelte +36 -2
- package/package/components/DiffDrawer.svelte +8 -29
- package/package/components/DiffEditor.svelte +32 -2
- package/package/components/DisplayResult.svelte +32 -24
- package/package/components/Editor.svelte +70 -16
- package/package/components/Editor.svelte.d.ts +3 -0
- package/package/components/EditorBar.svelte +1 -1
- package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
- package/package/components/FlowBuilder.svelte +17 -11
- package/package/components/FlowDiffViewer.svelte +37 -0
- package/package/components/FlowDiffViewer.svelte.d.ts +7 -0
- package/package/components/FlowPreviewContent.svelte +3 -2
- package/package/components/FlowPreviewResult.svelte +0 -4
- package/package/components/FlowStatusViewerInner.svelte +50 -33
- package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
- package/package/components/FlowStatusWaitingForEvents.svelte +27 -23
- package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +4 -18
- package/package/components/FlowViewer.svelte +103 -2
- package/package/components/FlowViewer.svelte.d.ts +9 -3
- package/package/components/ForkWorkspaceBanner.svelte +16 -13
- package/package/components/GraphqlSchemaViewer.svelte +8 -1
- package/package/components/HistoricInputs.svelte +25 -27
- package/package/components/HistoricInputs.svelte.d.ts +2 -2
- package/package/components/InstanceSetting.svelte +38 -0
- package/package/components/InviteUser.svelte +16 -42
- package/package/components/InviteUser.svelte.d.ts +4 -18
- package/package/components/JobOtelTraces.svelte +287 -0
- package/package/components/JobOtelTraces.svelte.d.ts +6 -0
- package/package/components/JsonInputs.svelte +6 -8
- package/package/components/JsonInputs.svelte.d.ts +7 -8
- package/package/components/LogViewer.svelte +91 -33
- package/package/components/Login.svelte +21 -0
- package/package/components/ManualPopover.svelte +5 -6
- package/package/components/ManualPopover.svelte.d.ts +9 -35
- package/package/components/MemoryFootprintViewer.svelte +2 -6
- package/package/components/ModulePreview.svelte +23 -21
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/Path.svelte +2 -2
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/ResourcePicker.svelte +3 -0
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/RunButton.svelte +5 -15
- package/package/components/RunButton.svelte.d.ts +7 -19
- package/package/components/RunChart.svelte +8 -4
- package/package/components/RunChart.svelte.d.ts +2 -2
- package/package/components/RunFormAdvancedPopup.svelte +1 -1
- package/package/components/RunsPage.svelte +169 -539
- package/package/components/RunsPage.svelte.d.ts +5 -5
- package/package/components/S3FilePicker.svelte +7 -11
- package/package/components/S3FilePickerInner.svelte +2 -3
- package/package/components/S3FilePickerInner.svelte.d.ts +2 -2
- package/package/components/SchemaForm.svelte +26 -19
- package/package/components/SchemaFormWithArgPicker.svelte +4 -3
- package/package/components/ScriptBuilder.svelte +1 -1
- package/package/components/ScriptEditor.svelte +575 -101
- package/package/components/Section.svelte +3 -1
- package/package/components/ServiceLogsInner.svelte +4 -4
- package/package/components/SimpleEditor.svelte +46 -2
- package/package/components/SuperadminSettingsInner.svelte +1 -1
- package/package/components/TemplateEditor.svelte +54 -29
- package/package/components/TemplateEditor.svelte.d.ts +13 -102
- package/package/components/UserSettings.svelte +1 -1
- package/package/components/WorkerTagPicker.svelte +1 -1
- package/package/components/WorkerTagSelect.svelte +5 -2
- package/package/components/WorkspaceTutorials.svelte +5 -0
- package/package/components/apps/components/buttons/AppButton.svelte +21 -6
- package/package/components/apps/components/buttons/AppForm.svelte +2 -1
- package/package/components/apps/components/buttons/AppFormButton.svelte +2 -1
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +0 -4
- package/package/components/apps/components/display/dbtable/metadata.js +69 -30
- package/package/components/apps/components/display/dbtable/queries/alterTable.d.ts +46 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.js +314 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.test.d.ts +1 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +867 -0
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +2 -24
- package/package/components/apps/components/display/dbtable/queries/createTable.js +11 -25
- package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.js +45 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +47 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +402 -0
- package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +37 -6
- package/package/components/apps/components/display/dbtable/tableEditor.d.ts +35 -0
- package/package/components/apps/components/display/dbtable/tableEditor.js +49 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +10 -1
- package/package/components/apps/components/display/dbtable/utils.js +52 -20
- package/package/components/apps/components/helpers/HiddenComponent.svelte +1 -1
- package/package/components/apps/components/helpers/InputValue.svelte +1 -1
- package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -2
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +8 -1
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +32 -29
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -2
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +4 -4
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +3 -3
- package/package/components/apps/editor/PublicApp.svelte +49 -30
- package/package/components/apps/editor/PublicApp.svelte.d.ts +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +77 -7
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/utils.js +10 -1
- package/package/components/apps/inputType.d.ts +6 -1
- package/package/components/auditLogs/AuditLogsFilters.svelte +9 -17
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/button/model.js +1 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -1
- package/package/components/common/languageIcons/TypeScript.svelte +5 -3
- package/package/components/common/languageIcons/TypeScript.svelte.d.ts +1 -0
- package/package/components/common/modal/Modal.svelte +3 -3
- package/package/components/copilot/autocomplete/Autocompletor.js +3 -2
- package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -1
- package/package/components/copilot/chat/AIButtonStyle.js +2 -1
- package/package/components/copilot/chat/AIChat.svelte +3 -1
- package/package/components/copilot/chat/AIChatDisplay.svelte +89 -4
- package/package/components/copilot/chat/AIChatInput.svelte +275 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +107 -1
- package/package/components/copilot/chat/AiChatLayout.svelte +15 -30
- package/package/components/copilot/chat/AppAvailableContextList.svelte +263 -0
- package/package/components/copilot/chat/AppAvailableContextList.svelte.d.ts +13 -0
- package/package/components/copilot/chat/ContextElementBadge.svelte +44 -0
- package/package/components/copilot/chat/DatatableCreationPolicy.svelte +32 -33
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +3 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +4 -0
- package/package/components/copilot/chat/app/core.d.ts +56 -15
- package/package/components/copilot/chat/app/core.js +141 -22
- package/package/components/copilot/chat/context.d.ts +59 -2
- package/package/components/copilot/chat/context.js +6 -2
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +22 -0
- package/package/components/copilot/chat/flow/core.d.ts +3 -1
- package/package/components/copilot/chat/flow/core.js +29 -2
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.d.ts +1 -0
- package/package/components/copilot/chat/flow/openFlowZod.js +14 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -1
- package/package/components/copilot/chat/script/core.js +38 -2
- package/package/components/copilot/chat/shared.d.ts +10 -0
- package/package/components/copilot/chat/shared.js +24 -0
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/dbOps.d.ts +18 -4
- package/package/components/dbOps.js +25 -3
- package/package/components/debug/DebugConsole.svelte +277 -0
- package/package/components/debug/DebugConsole.svelte.d.ts +13 -0
- package/package/components/debug/DebugPanel.svelte +97 -0
- package/package/components/debug/DebugPanel.svelte.d.ts +11 -0
- package/package/components/debug/DebugToolbar.svelte +148 -0
- package/package/components/debug/DebugToolbar.svelte.d.ts +17 -0
- package/package/components/debug/DebugVariableViewer.svelte +115 -0
- package/package/components/debug/DebugVariableViewer.svelte.d.ts +11 -0
- package/package/components/debug/MonacoDebugger.svelte +384 -0
- package/package/components/debug/MonacoDebugger.svelte.d.ts +15 -0
- package/package/components/debug/dapClient.d.ts +192 -0
- package/package/components/debug/dapClient.js +426 -0
- package/package/components/debug/debugUtils.d.ts +30 -0
- package/package/components/debug/debugUtils.js +131 -0
- package/package/components/debug/index.d.ts +75 -0
- package/package/components/debug/index.js +82 -0
- package/package/components/flows/CreateActionsApp.svelte +6 -4
- package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
- package/package/components/flows/FlowHistoryInner.svelte +15 -4
- package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
- package/package/components/flows/content/FlowEditorDrawer.svelte +124 -0
- package/package/components/flows/content/FlowEditorDrawer.svelte.d.ts +22 -0
- package/package/components/flows/content/FlowInput.svelte +211 -37
- package/package/components/flows/content/FlowModuleComponent.svelte +553 -67
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -10
- package/package/components/flows/content/FlowModuleHeader.svelte +7 -4
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +1 -1
- package/package/components/flows/content/McpOAuthConnect.svelte +217 -0
- package/package/components/flows/content/McpOAuthConnect.svelte.d.ts +7 -0
- package/package/components/flows/content/McpToolEditor.svelte +50 -37
- package/package/components/flows/content/McpToolEditor.svelte.d.ts +0 -1
- package/package/components/flows/conversations/FlowChat.svelte +16 -2
- package/package/components/flows/conversations/FlowChat.svelte.d.ts +2 -1
- package/package/components/flows/conversations/FlowChatInterface.svelte +103 -6
- package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +2 -0
- package/package/components/flows/conversations/FlowChatManager.svelte.js +53 -21
- package/package/components/flows/header/FlowImportExportMenu.svelte +1 -1
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +3 -1
- package/package/components/flows/types.d.ts +2 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +16 -8
- package/package/components/home/ItemsList.svelte +5 -5
- package/package/components/home/TutorialBanner.svelte +34 -18
- package/package/components/icons/CssIcon.svelte +20 -0
- package/package/components/icons/CssIcon.svelte.d.ts +7 -25
- package/package/components/icons/HtmlIcon.svelte +20 -0
- package/package/components/icons/HtmlIcon.svelte.d.ts +8 -0
- package/package/components/icons/JavaScriptIcon.svelte +10 -2
- package/package/components/icons/JavaScriptIcon.svelte.d.ts +1 -0
- package/package/components/icons/JsonIcon.svelte +8 -2
- package/package/components/icons/JsonIcon.svelte.d.ts +1 -0
- package/package/components/icons/LessIcon.svelte +16 -0
- package/package/components/icons/LessIcon.svelte.d.ts +8 -0
- package/package/components/icons/MarkdownIcon.svelte +20 -0
- package/package/components/icons/MarkdownIcon.svelte.d.ts +8 -0
- package/package/components/icons/ReactIcon.svelte +10 -2
- package/package/components/icons/ReactIcon.svelte.d.ts +1 -0
- package/package/components/icons/SassIcon.svelte +28 -0
- package/package/components/icons/SassIcon.svelte.d.ts +8 -0
- package/package/components/icons/SvelteIcon.svelte +10 -2
- package/package/components/icons/SvelteIcon.svelte.d.ts +1 -0
- package/package/components/icons/VueIcon.svelte +10 -2
- package/package/components/icons/VueIcon.svelte.d.ts +1 -0
- package/package/components/icons/YamlIcon.svelte +20 -0
- package/package/components/icons/YamlIcon.svelte.d.ts +8 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte +514 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte.d.ts +8 -0
- package/package/components/instanceSettings.d.ts +2 -1
- package/package/components/instanceSettings.js +32 -1
- package/package/components/jobs/JobPreview.svelte +46 -39
- package/package/components/jobs/JobPreview.svelte.d.ts +1 -0
- package/package/components/monacoLanguagesOptions.js +16 -15
- package/package/components/propertyPicker/PropPicker.svelte +16 -2
- package/package/components/propertyPicker/PropPicker.svelte.d.ts +2 -0
- package/package/components/raw_apps/DefaultDatabaseSelector.svelte +9 -5
- package/package/components/raw_apps/FileEditorIcon.svelte +12 -7
- package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +2 -0
- package/package/components/raw_apps/FileTreeNode.svelte +119 -83
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +88 -8
- package/package/components/raw_apps/RawAppDataTableList.svelte +12 -9
- package/package/components/raw_apps/RawAppEditor.svelte +218 -68
- package/package/components/raw_apps/RawAppEditorHeader.svelte +33 -16
- package/package/components/raw_apps/RawAppHistoryList.svelte +264 -80
- package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +15 -1
- package/package/components/raw_apps/RawAppHistoryManager.svelte.js +46 -12
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +549 -47
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +31 -5
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +25 -18
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +141 -10
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +8 -0
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +2 -1
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +9 -1
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +47 -3
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +2 -2
- package/package/components/raw_apps/RawAppModules.svelte +13 -7
- package/package/components/raw_apps/RawAppPreview.svelte +48 -6
- package/package/components/raw_apps/RawAppSidebar.svelte +194 -125
- package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -0
- package/package/components/raw_apps/RunnableRow.svelte +41 -0
- package/package/components/raw_apps/RunnableRow.svelte.d.ts +11 -0
- package/package/components/raw_apps/utils.d.ts +1 -1
- package/package/components/raw_apps/utils.js +76 -18
- package/package/components/runs/ManuelDatePicker.svelte +3 -3
- package/package/components/runs/ManuelDatePicker.svelte.d.ts +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -1
- package/package/components/runs/RunsFilter.svelte +75 -63
- package/package/components/runs/RunsFilter.svelte.d.ts +35 -4
- package/package/components/runs/RunsQueue.svelte.d.ts +1 -1
- package/package/components/runs/RunsTable.svelte +1 -1
- package/package/components/runs/RunsTable.svelte.d.ts +1 -1
- package/package/components/runs/useJobsLoader.svelte.d.ts +34 -0
- package/package/components/runs/useJobsLoader.svelte.js +507 -0
- package/package/components/scriptEditor/LogPanel.svelte +17 -2
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
- package/package/components/select/SelectDropdown.svelte +2 -2
- package/package/components/settings/AIPromptsModal.svelte +88 -0
- package/package/components/settings/AIPromptsModal.svelte.d.ts +11 -0
- package/package/components/settings/ChangeWorkspaceColor.svelte +4 -3
- package/package/components/settings/ChangeWorkspaceId.svelte +14 -10
- package/package/components/settings/ChangeWorkspaceName.svelte +7 -6
- package/package/components/settings/UserAIPromptsSettings.svelte +56 -15
- package/package/components/settings/WorkspaceOperatorSettings.svelte +68 -85
- package/package/components/settings/WorkspaceUserSettings.svelte +531 -406
- package/package/components/sidebar/MenuButton.svelte +46 -24
- package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
- package/package/components/sidebar/MultiplayerMenu.svelte +3 -3
- package/package/components/sidebar/OperatorMenu.svelte +62 -87
- package/package/components/sidebar/SidebarContent.svelte +7 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +35 -85
- package/package/components/sqlTypeService.js +4 -3
- package/package/components/table/DataTable.svelte +3 -2
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/text_input/TextInput.svelte +3 -0
- package/package/components/text_input/TextInput.svelte.d.ts +2 -0
- package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +6 -35
- package/package/components/tutorials/RunsTutorial.svelte +399 -0
- package/package/components/{schema/SchemaPicker.svelte.d.ts → tutorials/RunsTutorial.svelte.d.ts} +11 -12
- package/package/components/tutorials/TroubleshootFlowTutorial.svelte +5 -20
- package/package/components/tutorials/utils.d.ts +16 -0
- package/package/components/tutorials/utils.js +96 -0
- package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +133 -0
- package/package/components/{SavedInputs.svelte.d.ts → tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte.d.ts} +8 -11
- package/package/components/vscode.js +6 -6
- package/package/components/workspace/WorkspaceCard.svelte +184 -0
- package/package/components/workspace/WorkspaceCard.svelte.d.ts +24 -0
- package/package/components/workspace/WorkspaceIcon.svelte +21 -0
- package/package/components/workspace/WorkspaceIcon.svelte.d.ts +9 -0
- package/package/components/workspace/WorkspaceTreeView.svelte +331 -0
- package/package/components/workspace/WorkspaceTreeView.svelte.d.ts +15 -0
- package/package/components/workspaceSettings/AISettings.svelte +146 -108
- package/package/components/workspaceSettings/CreateWorkspace.svelte +25 -11
- package/package/components/workspaceSettings/DucklakeSettings.svelte +46 -23
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +14 -18
- package/package/components/workspaceSettings/StorageSettings.svelte +280 -241
- package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
- package/package/consts.js +4 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +126 -0
- package/package/gen/schemas.gen.js +126 -0
- package/package/gen/services.gen.d.ts +160 -2
- package/package/gen/services.gen.js +319 -4
- package/package/gen/types.gen.d.ts +607 -2
- package/package/hubPaths.json +3 -2
- package/package/infer.js +2 -0
- package/package/monaco_workers/graphql.worker.bundle.js +121 -121
- package/package/rawAppWmillTs.d.ts +11 -0
- package/package/rawAppWmillTs.js +38 -1
- package/package/svelte5Utils.svelte.d.ts +9 -0
- package/package/svelte5Utils.svelte.js +51 -1
- package/package/tutorialUtils.js +0 -4
- package/package/tutorials/config.js +31 -3
- package/package/tutorials/roleUtils.d.ts +1 -1
- package/package/tutorials/roleUtils.js +6 -2
- package/package/utils.js +159 -1
- package/package.json +16 -17
- package/package/components/SavedInputs.svelte +0 -416
- package/package/components/runs/JobsLoader.svelte +0 -468
- package/package/components/runs/JobsLoader.svelte.d.ts +0 -49
- package/package/components/schema/SchemaPicker.svelte +0 -92
|
@@ -24,8 +24,8 @@ function checkIfBreakableParent(flowStoreValue) {
|
|
|
24
24
|
}
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
|
-
let raise_error_message_stop_after_all_if = $state(flowModule.stop_after_all_iters_if?.error_message
|
|
28
|
-
let raise_error_message_stop_after_if = $state(flowModule.stop_after_if?.error_message
|
|
27
|
+
let raise_error_message_stop_after_all_if = $state(flowModule.stop_after_all_iters_if?.error_message != undefined);
|
|
28
|
+
let raise_error_message_stop_after_if = $state(flowModule.stop_after_if?.error_message != undefined);
|
|
29
29
|
let { isLoop, isParallelLoop } = $derived(flowModule.value.type === 'forloopflow' || flowModule.value.type === 'whileloopflow'
|
|
30
30
|
? { isLoop: true, isParallelLoop: flowModule.value.parallel ?? false }
|
|
31
31
|
: { isLoop: false, isParallelLoop: false });
|
|
@@ -134,8 +134,7 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
|
|
|
134
134
|
<PropPickerWrapper
|
|
135
135
|
noPadding
|
|
136
136
|
notSelectable
|
|
137
|
-
|
|
138
|
-
pickableProperties={undefined}
|
|
137
|
+
pickableProperties={stepPropPicker.pickableProperties}
|
|
139
138
|
result={earlyStopResult}
|
|
140
139
|
extraResults={isLoop ? { all_iters: result } : undefined}
|
|
141
140
|
on:select={({ detail }) => {
|
|
@@ -148,8 +147,8 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
|
|
|
148
147
|
lang="javascript"
|
|
149
148
|
bind:code={flowModule.stop_after_if.expr}
|
|
150
149
|
class="h-full"
|
|
151
|
-
extraLib={`declare const result = ${JSON.stringify(earlyStopResult)}
|
|
152
|
-
|
|
150
|
+
extraLib={`declare const result = ${JSON.stringify(earlyStopResult)};\n` +
|
|
151
|
+
stepPropPicker.extraLib +
|
|
153
152
|
(isLoop ? `\ndeclare const all_iters = ${JSON.stringify(result)};` : '')}
|
|
154
153
|
/>
|
|
155
154
|
</PropPickerWrapper>
|
|
@@ -271,8 +270,7 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
|
|
|
271
270
|
<PropPickerWrapper
|
|
272
271
|
notSelectable
|
|
273
272
|
noPadding
|
|
274
|
-
|
|
275
|
-
pickableProperties={undefined}
|
|
273
|
+
pickableProperties={stepPropPicker.pickableProperties}
|
|
276
274
|
{result}
|
|
277
275
|
on:select={({ detail }) => {
|
|
278
276
|
editor?.insertAtCursor(detail)
|
|
@@ -284,8 +282,8 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
|
|
|
284
282
|
lang="javascript"
|
|
285
283
|
bind:code={flowModule.stop_after_all_iters_if.expr}
|
|
286
284
|
class="h-full"
|
|
287
|
-
extraLib={`declare const result = ${JSON.stringify(result)}
|
|
288
|
-
|
|
285
|
+
extraLib={`declare const result = ${JSON.stringify(result)};\n` +
|
|
286
|
+
stepPropPicker.extraLib}
|
|
289
287
|
/>
|
|
290
288
|
</PropPickerWrapper>
|
|
291
289
|
</div>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<script lang="ts">import Button from '../../common/button/Button.svelte';
|
|
2
2
|
import {} from '../../../gen';
|
|
3
3
|
import { createEventDispatcher, getContext } from 'svelte';
|
|
4
|
-
import { Bed, Database,
|
|
4
|
+
import { Bed, Database, Gauge, GitFork, Pen, PhoneIncoming, RefreshCcw, Repeat, Square, Pin, Save } from 'lucide-svelte';
|
|
5
5
|
import Popover from '../../Popover.svelte';
|
|
6
6
|
import { sendUserToast } from '../../../utils';
|
|
7
7
|
import { getLatestHashForScript } from '../../../scripts';
|
|
8
8
|
import FlowModuleWorkerTagSelect from './FlowModuleWorkerTagSelect.svelte';
|
|
9
9
|
let { module, tag } = $props();
|
|
10
|
-
const { scriptEditorDrawer } = getContext('FlowEditorContext');
|
|
10
|
+
const { scriptEditorDrawer, flowEditorDrawer } = getContext('FlowEditorContext');
|
|
11
11
|
const dispatch = createEventDispatcher();
|
|
12
12
|
let customUi = getContext('customUi');
|
|
13
13
|
let popoverClasses = 'center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600';
|
|
@@ -128,13 +128,16 @@ let popoverClasses = 'center-center rounded p-2 bg-blue-100 text-blue-800 border
|
|
|
128
128
|
variant="subtle"
|
|
129
129
|
on:click={async () => {
|
|
130
130
|
if (module.value.type == 'flow') {
|
|
131
|
-
|
|
131
|
+
$flowEditorDrawer?.openDrawer(module.value.path, () => {
|
|
132
|
+
dispatch('reload')
|
|
133
|
+
sendUserToast('Flow has been updated')
|
|
134
|
+
})
|
|
132
135
|
}
|
|
133
136
|
}}
|
|
134
137
|
startIcon={{ icon: Pen }}
|
|
135
138
|
iconOnly={false}
|
|
136
139
|
>
|
|
137
|
-
Edit
|
|
140
|
+
Edit
|
|
138
141
|
</Button>
|
|
139
142
|
<Button
|
|
140
143
|
unifiedSize="sm"
|
|
@@ -8,7 +8,7 @@ const dispatch = createEventDispatcher();
|
|
|
8
8
|
loadWorkerGroups();
|
|
9
9
|
async function loadWorkerGroups() {
|
|
10
10
|
if (!$workerTags) {
|
|
11
|
-
$workerTags = await WorkerService.
|
|
11
|
+
$workerTags = await WorkerService.getCustomTagsForWorkspace({ workspace: $workspaceStore });
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
</script>
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
<script lang="ts">import { workspaceStore } from '../../../stores';
|
|
2
|
+
import { McpOauthService, OauthService, ResourceService, VariableService } from '../../../gen';
|
|
3
|
+
import { Button } from '../../common';
|
|
4
|
+
import Label from '../../Label.svelte';
|
|
5
|
+
import Path from '../../Path.svelte';
|
|
6
|
+
import { sendUserToast } from '../../../toast';
|
|
7
|
+
import { sameTopDomainOrigin } from '../../../cookies';
|
|
8
|
+
import { onDestroy } from 'svelte';
|
|
9
|
+
let { onConnected, onCancel } = $props();
|
|
10
|
+
let serverUrl = $state('');
|
|
11
|
+
let discoveryResult = $state(null);
|
|
12
|
+
let selectedScopes = $state([]);
|
|
13
|
+
let resourceName = $state('');
|
|
14
|
+
let resourcePath = $state('');
|
|
15
|
+
let pathError = $state('');
|
|
16
|
+
let status = $state('idle');
|
|
17
|
+
let error = $state(null);
|
|
18
|
+
async function discoverOAuth() {
|
|
19
|
+
status = 'discovering';
|
|
20
|
+
error = null;
|
|
21
|
+
try {
|
|
22
|
+
discoveryResult = await McpOauthService.discoverMcpOauth({
|
|
23
|
+
requestBody: { mcp_server_url: serverUrl }
|
|
24
|
+
});
|
|
25
|
+
selectedScopes = discoveryResult?.scopes_supported ?? [];
|
|
26
|
+
try {
|
|
27
|
+
const urlObj = new URL(serverUrl);
|
|
28
|
+
resourceName = urlObj.hostname.replace(/\./g, '_');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
resourceName = 'mcp_server';
|
|
32
|
+
}
|
|
33
|
+
status = 'discovered';
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
console.error('Error discovering OAuth settings', e);
|
|
37
|
+
const errorMessage = e.body?.message || e.body || e.message || 'Unknown error';
|
|
38
|
+
error = `Failed to discover OAuth settings: ${errorMessage}`;
|
|
39
|
+
status = 'idle';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function startOAuth() {
|
|
43
|
+
const url = new URL(`/api/mcp/oauth/start`, window.location.origin);
|
|
44
|
+
url.searchParams.set('mcp_server_url', serverUrl);
|
|
45
|
+
url.searchParams.set('scopes', selectedScopes.join(','));
|
|
46
|
+
const popup = window.open(url.toString(), '_blank', 'popup=true');
|
|
47
|
+
if (!popup) {
|
|
48
|
+
error = 'Popup blocked. Please allow popups for this site.';
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
window.addEventListener('message', handleOAuthMessage);
|
|
52
|
+
window.addEventListener('storage', handleStorageEvent);
|
|
53
|
+
status = 'connecting';
|
|
54
|
+
}
|
|
55
|
+
function handleOAuthMessage(event) {
|
|
56
|
+
if (!sameTopDomainOrigin(event.origin, window.location.origin))
|
|
57
|
+
return;
|
|
58
|
+
if (event.data.type === 'MCP_CONNECTED') {
|
|
59
|
+
cleanup();
|
|
60
|
+
createMcpResource(event.data);
|
|
61
|
+
}
|
|
62
|
+
else if (event.data.type === 'MCP_ERROR') {
|
|
63
|
+
cleanup();
|
|
64
|
+
error = event.data.error;
|
|
65
|
+
status = 'discovered';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function handleStorageEvent(event) {
|
|
69
|
+
if (event.key === 'mcp-oauth-callback') {
|
|
70
|
+
cleanup();
|
|
71
|
+
try {
|
|
72
|
+
const data = JSON.parse(event.newValue || '{}');
|
|
73
|
+
localStorage.removeItem('mcp-oauth-callback');
|
|
74
|
+
if (data.type === 'MCP_CONNECTED') {
|
|
75
|
+
createMcpResource(data);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error('Error parsing MCP OAuth callback', e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function cleanup() {
|
|
84
|
+
window.removeEventListener('message', handleOAuthMessage);
|
|
85
|
+
window.removeEventListener('storage', handleStorageEvent);
|
|
86
|
+
}
|
|
87
|
+
async function createMcpResource(data) {
|
|
88
|
+
try {
|
|
89
|
+
let accountId;
|
|
90
|
+
if (data.expires_in && data.refresh_token) {
|
|
91
|
+
const accountIdStr = await OauthService.createAccount({
|
|
92
|
+
workspace: $workspaceStore,
|
|
93
|
+
requestBody: {
|
|
94
|
+
refresh_token: data.refresh_token,
|
|
95
|
+
expires_in: data.expires_in,
|
|
96
|
+
client: 'mcp',
|
|
97
|
+
mcp_server_url: data.mcp_server_url
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
accountId = Number(accountIdStr);
|
|
101
|
+
}
|
|
102
|
+
await VariableService.createVariable({
|
|
103
|
+
workspace: $workspaceStore,
|
|
104
|
+
requestBody: {
|
|
105
|
+
path: resourcePath,
|
|
106
|
+
value: data.access_token,
|
|
107
|
+
is_secret: true,
|
|
108
|
+
is_oauth: true,
|
|
109
|
+
account: accountId,
|
|
110
|
+
description: `MCP OAuth token for ${data.mcp_server_url}`
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
await ResourceService.createResource({
|
|
114
|
+
workspace: $workspaceStore,
|
|
115
|
+
requestBody: {
|
|
116
|
+
resource_type: 'mcp',
|
|
117
|
+
path: resourcePath,
|
|
118
|
+
value: {
|
|
119
|
+
name: resourceName,
|
|
120
|
+
url: data.mcp_server_url,
|
|
121
|
+
token: `$var:${resourcePath}`
|
|
122
|
+
},
|
|
123
|
+
description: `MCP server connected via OAuth`
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
sendUserToast('Connected to MCP server');
|
|
127
|
+
onConnected(resourcePath, resourceName);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
error = e.body?.message || e.message || 'Failed to create resource';
|
|
131
|
+
status = 'discovered';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
onDestroy(cleanup);
|
|
135
|
+
</script>
|
|
136
|
+
|
|
137
|
+
<div class="border rounded p-4 bg-surface-secondary flex flex-col gap-4">
|
|
138
|
+
<div class="flex justify-between items-center">
|
|
139
|
+
<span class="font-semibold text-sm">Connect MCP Server with OAuth</span>
|
|
140
|
+
<Button size="xs" color="light" onClick={onCancel}>Cancel</Button>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<Label label="MCP Server URL">
|
|
144
|
+
<input
|
|
145
|
+
type="url"
|
|
146
|
+
bind:value={serverUrl}
|
|
147
|
+
placeholder="https://mcp.example.com"
|
|
148
|
+
class="text-sm w-full"
|
|
149
|
+
disabled={status === 'connecting'}
|
|
150
|
+
/>
|
|
151
|
+
</Label>
|
|
152
|
+
|
|
153
|
+
{#if status === 'idle'}
|
|
154
|
+
<Button size="sm" onClick={discoverOAuth} disabled={!serverUrl}>Discover OAuth Settings</Button>
|
|
155
|
+
{:else if status === 'discovering'}
|
|
156
|
+
<div class="text-sm text-secondary">Discovering OAuth settings...</div>
|
|
157
|
+
{:else if status === 'discovered' && discoveryResult}
|
|
158
|
+
<div class="text-xs text-green-600 dark:text-green-400">
|
|
159
|
+
✓ OAuth supported
|
|
160
|
+
{#if discoveryResult.supports_dynamic_registration}
|
|
161
|
+
(Dynamic Client Registration available)
|
|
162
|
+
{/if}
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
{#if discoveryResult.scopes_supported && discoveryResult.scopes_supported.length > 0}
|
|
166
|
+
<Label label="Select Scopes">
|
|
167
|
+
<div class="flex flex-col flex-wrap gap-2">
|
|
168
|
+
{#each discoveryResult.scopes_supported as scope}
|
|
169
|
+
<label class="flex flex-row items-center gap-2 text-xs cursor-pointer">
|
|
170
|
+
<input
|
|
171
|
+
type="checkbox"
|
|
172
|
+
checked={selectedScopes.includes(scope)}
|
|
173
|
+
onchange={(e) => {
|
|
174
|
+
const target = e.target as HTMLInputElement
|
|
175
|
+
if (target.checked) {
|
|
176
|
+
selectedScopes = [...selectedScopes, scope]
|
|
177
|
+
} else {
|
|
178
|
+
selectedScopes = selectedScopes.filter((s) => s !== scope)
|
|
179
|
+
}
|
|
180
|
+
}}
|
|
181
|
+
class="!w-4 !h-4"
|
|
182
|
+
/>
|
|
183
|
+
{scope}
|
|
184
|
+
</label>
|
|
185
|
+
{/each}
|
|
186
|
+
</div>
|
|
187
|
+
</Label>
|
|
188
|
+
{/if}
|
|
189
|
+
|
|
190
|
+
<Label label="Resource Name">
|
|
191
|
+
<input
|
|
192
|
+
type="text"
|
|
193
|
+
bind:value={resourceName}
|
|
194
|
+
placeholder="my-mcp-server"
|
|
195
|
+
class="text-sm w-full"
|
|
196
|
+
/>
|
|
197
|
+
</Label>
|
|
198
|
+
|
|
199
|
+
<Path
|
|
200
|
+
bind:path={resourcePath}
|
|
201
|
+
bind:error={pathError}
|
|
202
|
+
initialPath=""
|
|
203
|
+
namePlaceholder={resourceName}
|
|
204
|
+
kind="resource"
|
|
205
|
+
/>
|
|
206
|
+
|
|
207
|
+
<Button size="sm" onClick={startOAuth} disabled={!resourcePath || pathError !== ''}>
|
|
208
|
+
Connect with OAuth
|
|
209
|
+
</Button>
|
|
210
|
+
{:else if status === 'connecting'}
|
|
211
|
+
<div class="text-sm text-secondary">Complete authentication in popup window...</div>
|
|
212
|
+
{/if}
|
|
213
|
+
|
|
214
|
+
{#if error}
|
|
215
|
+
<div class="text-xs text-red-600 dark:text-red-400">{error}</div>
|
|
216
|
+
{/if}
|
|
217
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
onConnected: (resourcePath: string, resourceName: string) => void;
|
|
3
|
+
onCancel: () => void;
|
|
4
|
+
}
|
|
5
|
+
declare const McpOAuthConnect: import("svelte").Component<Props, {}, "">;
|
|
6
|
+
type McpOAuthConnect = ReturnType<typeof McpOAuthConnect>;
|
|
7
|
+
export default McpOAuthConnect;
|
|
@@ -7,8 +7,7 @@ let loadToolsCached = createCache(({ workspace, path }) => workspace && path &&
|
|
|
7
7
|
: undefined, {
|
|
8
8
|
initial: { workspace: get(workspaceStore), path: undefined, refreshCount: 0 },
|
|
9
9
|
invalidateMs: 1000 * 60
|
|
10
|
-
}
|
|
11
|
-
);
|
|
10
|
+
});
|
|
12
11
|
</script>
|
|
13
12
|
|
|
14
13
|
<script lang="ts">import Section from '../../Section.svelte';
|
|
@@ -21,24 +20,25 @@ import ResourcePicker from '../../ResourcePicker.svelte';
|
|
|
21
20
|
import { usePromise } from '../../../svelte5Utils.svelte';
|
|
22
21
|
import { untrack } from 'svelte';
|
|
23
22
|
import Alert from '../../common/alert/Alert.svelte';
|
|
23
|
+
import McpOAuthConnect from './McpOAuthConnect.svelte';
|
|
24
24
|
let { tool = $bindable() } = $props();
|
|
25
|
+
let showOAuthForm = $state(false);
|
|
25
26
|
let refreshCount = $state(0);
|
|
27
|
+
let resourcePicker = $state();
|
|
26
28
|
let tools = usePromise(async () => await loadToolsCached({
|
|
27
29
|
workspace: $workspaceStore,
|
|
28
30
|
path: tool.value.resource_path,
|
|
29
31
|
refreshCount
|
|
30
32
|
}), { loadInit: false, clearValueOnRefresh: false });
|
|
31
|
-
// Options for the multiselect
|
|
32
33
|
let toolOptions = $derived(safeSelectItems((tools.value ?? []).map((t) => t.name)));
|
|
33
|
-
|
|
34
|
+
let resourcePath = $derived(tool.value.resource_path);
|
|
35
|
+
let error = $derived(tools.error?.body?.message || tools.error?.message);
|
|
34
36
|
$effect(() => {
|
|
35
|
-
|
|
36
|
-
tool.value.resource_path;
|
|
37
|
+
resourcePath;
|
|
37
38
|
$workspaceStore;
|
|
38
39
|
refreshCount;
|
|
39
|
-
// Trigger refresh when resource_path or workspace changes
|
|
40
40
|
untrack(() => {
|
|
41
|
-
if (
|
|
41
|
+
if (resourcePath?.length > 0) {
|
|
42
42
|
tools.refresh();
|
|
43
43
|
}
|
|
44
44
|
});
|
|
@@ -52,14 +52,19 @@ $effect(() => {
|
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
54
|
$effect(() => {
|
|
55
|
-
if (
|
|
55
|
+
if (resourcePath?.length > 0 && tool.summary?.length === 0) {
|
|
56
56
|
tool.summary = `MCP: ${tool.value.resource_path}`;
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
|
+
async function handleOAuthConnected(resourcePath, resourceName) {
|
|
60
|
+
await resourcePicker?.refreshResources();
|
|
61
|
+
tool.value.resource_path = resourcePath;
|
|
62
|
+
tool.summary = `MCP: ${resourceName}`;
|
|
63
|
+
showOAuthForm = false;
|
|
64
|
+
}
|
|
59
65
|
</script>
|
|
60
66
|
|
|
61
67
|
<div class="flex flex-col gap-4 p-4">
|
|
62
|
-
<!-- Explanatory Section -->
|
|
63
68
|
<Alert type="info" title="MCP Client Configuration">
|
|
64
69
|
{#snippet children()}
|
|
65
70
|
<p class="mb-2 text-sm">
|
|
@@ -74,15 +79,26 @@ $effect(() => {
|
|
|
74
79
|
{/snippet}
|
|
75
80
|
</Alert>
|
|
76
81
|
|
|
77
|
-
<!-- Resource Path Section -->
|
|
78
82
|
<div class="w-full">
|
|
79
83
|
<Label label="MCP Resource">
|
|
80
|
-
<ResourcePicker resourceType="mcp" bind:value={tool.value.resource_path} />
|
|
84
|
+
<ResourcePicker bind:this={resourcePicker} resourceType="mcp" bind:value={tool.value.resource_path} />
|
|
81
85
|
</Label>
|
|
82
86
|
</div>
|
|
83
87
|
|
|
84
|
-
{#if
|
|
85
|
-
|
|
88
|
+
{#if !resourcePath}
|
|
89
|
+
{#if !showOAuthForm}
|
|
90
|
+
<Button size="xs" color="light" onClick={() => (showOAuthForm = true)}>
|
|
91
|
+
Connect with OAuth
|
|
92
|
+
</Button>
|
|
93
|
+
{:else}
|
|
94
|
+
<McpOAuthConnect
|
|
95
|
+
onConnected={handleOAuthConnected}
|
|
96
|
+
onCancel={() => (showOAuthForm = false)}
|
|
97
|
+
/>
|
|
98
|
+
{/if}
|
|
99
|
+
{/if}
|
|
100
|
+
|
|
101
|
+
{#if resourcePath?.length > 0}
|
|
86
102
|
<div class="w-full">
|
|
87
103
|
<Label label="Summary">
|
|
88
104
|
<input
|
|
@@ -94,13 +110,12 @@ $effect(() => {
|
|
|
94
110
|
</Label>
|
|
95
111
|
</div>
|
|
96
112
|
|
|
97
|
-
<!-- Available Tools Section -->
|
|
98
113
|
<Section label="Available Tools">
|
|
99
114
|
{#snippet action()}
|
|
100
115
|
<Button
|
|
101
116
|
size="xs"
|
|
102
117
|
color="light"
|
|
103
|
-
|
|
118
|
+
onClick={() => (refreshCount += 1)}
|
|
104
119
|
startIcon={{ icon: RefreshCw }}
|
|
105
120
|
disabled={tools.status === 'loading'}
|
|
106
121
|
>
|
|
@@ -108,39 +123,37 @@ $effect(() => {
|
|
|
108
123
|
</Button>
|
|
109
124
|
{/snippet}
|
|
110
125
|
<div class="w-full flex flex-col gap-2">
|
|
111
|
-
{#if
|
|
112
|
-
<div class="text-xs text-red-600
|
|
113
|
-
{tools
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
{/if}
|
|
118
|
-
<div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
|
|
119
|
-
{#if tools.status === 'loading'}
|
|
126
|
+
{#if error}
|
|
127
|
+
<div class="text-xs text-red-600 dark:text-red-400 mb-4"
|
|
128
|
+
>{`Failed to load tools from MCP server: ${error}`}</div
|
|
129
|
+
>
|
|
130
|
+
{:else if tools.status === 'loading'}
|
|
131
|
+
<div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
|
|
120
132
|
<div class="text-xs text-secondary italic">Loading tools...</div>
|
|
121
|
-
|
|
133
|
+
</div>
|
|
134
|
+
{:else if (tools.value ?? []).length === 0 && !error}
|
|
135
|
+
<div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
|
|
122
136
|
<div class="text-xs text-secondary italic">
|
|
123
|
-
|
|
124
|
-
? 'Failed to load tools. Please check the resource path and try again.'
|
|
125
|
-
: 'No tools loaded yet. Click "Refresh Tools" to fetch tools from the MCP server.'}
|
|
137
|
+
No tools loaded yet. Click "Refresh Tools" to fetch tools from the MCP server.
|
|
126
138
|
</div>
|
|
127
|
-
|
|
139
|
+
</div>
|
|
140
|
+
{:else if (tools.value ?? []).length > 0}
|
|
141
|
+
<div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
|
|
128
142
|
<div class="flex flex-col gap-1">
|
|
129
|
-
{#each tools.value ?? [] as
|
|
143
|
+
{#each tools.value ?? [] as mcpTool}
|
|
130
144
|
<div class="text-xs">
|
|
131
|
-
<span class="font-semibold">{
|
|
132
|
-
{#if
|
|
133
|
-
<span class="text-secondary">— {
|
|
145
|
+
<span class="font-semibold">{mcpTool.name}</span>
|
|
146
|
+
{#if mcpTool.description}
|
|
147
|
+
<span class="text-secondary">— {mcpTool.description}</span>
|
|
134
148
|
{/if}
|
|
135
149
|
</div>
|
|
136
150
|
{/each}
|
|
137
151
|
</div>
|
|
138
|
-
|
|
139
|
-
|
|
152
|
+
</div>
|
|
153
|
+
{/if}
|
|
140
154
|
</div>
|
|
141
155
|
</Section>
|
|
142
156
|
|
|
143
|
-
<!-- Tool Filtering Section -->
|
|
144
157
|
{#if tool.value.include_tools && tool.value.exclude_tools}
|
|
145
158
|
<Section label="Tool Filtering">
|
|
146
159
|
<div class="w-full flex flex-col gap-3">
|
|
@@ -3,7 +3,7 @@ import { createFlowChatManager } from './FlowChatManager.svelte';
|
|
|
3
3
|
import FlowConversationsSidebar from './FlowConversationsSidebar.svelte';
|
|
4
4
|
import FlowChatInterface from './FlowChatInterface.svelte';
|
|
5
5
|
import { untrack } from 'svelte';
|
|
6
|
-
let { onRunFlow, deploymentInProgress = false, useStreaming = false, path, hideSidebar = false } = $props();
|
|
6
|
+
let { onRunFlow, deploymentInProgress = false, useStreaming = false, path, hideSidebar = false, inputSchema = undefined, } = $props();
|
|
7
7
|
const manager = createFlowChatManager();
|
|
8
8
|
// Initialize manager when component mounts
|
|
9
9
|
$effect(() => {
|
|
@@ -22,11 +22,25 @@ $effect(() => {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
+
// Derive additional inputs schema (excluding user_message) for chat mode
|
|
26
|
+
const additionalInputsSchema = $derived.by(() => {
|
|
27
|
+
const props = inputSchema?.properties ?? {};
|
|
28
|
+
const filtered = Object.fromEntries(Object.entries(props).filter(([k]) => k !== 'user_message'));
|
|
29
|
+
if (Object.keys(filtered).length === 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
const required = inputSchema?.required;
|
|
32
|
+
const requiredArray = Array.isArray(required) ? required : [];
|
|
33
|
+
return {
|
|
34
|
+
...inputSchema,
|
|
35
|
+
properties: filtered,
|
|
36
|
+
required: requiredArray.filter((k) => k !== 'user_message')
|
|
37
|
+
};
|
|
38
|
+
});
|
|
25
39
|
</script>
|
|
26
40
|
|
|
27
41
|
<div class="flex border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden flex-1">
|
|
28
42
|
{#if !hideSidebar}
|
|
29
43
|
<FlowConversationsSidebar {manager} />
|
|
30
44
|
{/if}
|
|
31
|
-
<FlowChatInterface {manager} {deploymentInProgress} />
|
|
45
|
+
<FlowChatInterface {manager} {deploymentInProgress} {additionalInputsSchema} {path} />
|
|
32
46
|
</div>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
interface Props {
|
|
2
|
-
onRunFlow: (userMessage: string, conversationId: string) => Promise<string | undefined>;
|
|
2
|
+
onRunFlow: (userMessage: string, conversationId: string, additionalInputs?: Record<string, any>) => Promise<string | undefined>;
|
|
3
3
|
useStreaming?: boolean;
|
|
4
4
|
deploymentInProgress?: boolean;
|
|
5
5
|
path: string;
|
|
6
6
|
hideSidebar?: boolean;
|
|
7
|
+
inputSchema?: Record<string, any>;
|
|
7
8
|
}
|
|
8
9
|
declare const FlowChat: import("svelte").Component<Props, {}, "">;
|
|
9
10
|
type FlowChat = ReturnType<typeof FlowChat>;
|
|
@@ -1,11 +1,85 @@
|
|
|
1
|
-
<script lang="ts">import { Alert } from '../../common';
|
|
2
|
-
import { MessageCircle, Loader2 } from 'lucide-svelte';
|
|
1
|
+
<script lang="ts">import { Alert, Button } from '../../common';
|
|
2
|
+
import { MessageCircle, Loader2, Settings2 } from 'lucide-svelte';
|
|
3
3
|
import ChatMessage from '../../chat/ChatMessage.svelte';
|
|
4
4
|
import ChatInput from '../../chat/ChatInput.svelte';
|
|
5
5
|
import { FlowChatManager } from './FlowChatManager.svelte';
|
|
6
|
-
|
|
6
|
+
import Modal from '../../common/modal/Modal.svelte';
|
|
7
|
+
import SchemaForm from '../../SchemaForm.svelte';
|
|
8
|
+
import {} from '../../../utils';
|
|
9
|
+
let { manager, deploymentInProgress = false, additionalInputsSchema, path } = $props();
|
|
10
|
+
// Derive helperScript for dynamic inputs from schema
|
|
11
|
+
const dynamicInputHelperScript = $derived.by(() => {
|
|
12
|
+
const dynCode = additionalInputsSchema?.['x-windmill-dyn-select-code'];
|
|
13
|
+
const dynLang = additionalInputsSchema?.['x-windmill-dyn-select-lang'];
|
|
14
|
+
if (dynCode && dynLang) {
|
|
15
|
+
return { source: 'inline', code: dynCode, lang: dynLang };
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
});
|
|
19
|
+
// LocalStorage helpers
|
|
20
|
+
const STORAGE_KEY_PREFIX = 'windmill_flow_chat_inputs_';
|
|
21
|
+
// State for additional inputs modal
|
|
22
|
+
let showInputsModal = $state(false);
|
|
23
|
+
let additionalInputsValues = $state(loadInputsFromStorage() ?? undefined);
|
|
24
|
+
function getStorageKey() {
|
|
25
|
+
return `${STORAGE_KEY_PREFIX}${path}`;
|
|
26
|
+
}
|
|
27
|
+
function loadInputsFromStorage() {
|
|
28
|
+
try {
|
|
29
|
+
const stored = localStorage.getItem(getStorageKey());
|
|
30
|
+
return stored ? JSON.parse(stored) : null;
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error('Failed to load inputs from localStorage:', e);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function saveInputsToStorage(values) {
|
|
38
|
+
try {
|
|
39
|
+
localStorage.setItem(getStorageKey(), JSON.stringify(values));
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error('Failed to save inputs to localStorage:', e);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function handleModalConfirm() {
|
|
46
|
+
saveInputsToStorage(additionalInputsValues ?? {});
|
|
47
|
+
showInputsModal = false;
|
|
48
|
+
}
|
|
49
|
+
function handleSendMessage() {
|
|
50
|
+
const inputs = additionalInputsSchema
|
|
51
|
+
? (loadInputsFromStorage() ?? additionalInputsValues)
|
|
52
|
+
: undefined;
|
|
53
|
+
manager.sendMessage(inputs);
|
|
54
|
+
}
|
|
55
|
+
function openInputsModal() {
|
|
56
|
+
const stored = loadInputsFromStorage();
|
|
57
|
+
if (stored)
|
|
58
|
+
additionalInputsValues = stored;
|
|
59
|
+
showInputsModal = true;
|
|
60
|
+
}
|
|
61
|
+
const hasMissingRequired = $derived.by(() => {
|
|
62
|
+
if (!additionalInputsSchema?.required?.length)
|
|
63
|
+
return false;
|
|
64
|
+
const values = additionalInputsValues ?? {};
|
|
65
|
+
return additionalInputsSchema.required.some((field) => values[field] === undefined || values[field] === '' || values[field] === null);
|
|
66
|
+
});
|
|
7
67
|
</script>
|
|
8
68
|
|
|
69
|
+
<!-- Additional Inputs Modal -->
|
|
70
|
+
{#if additionalInputsSchema}
|
|
71
|
+
<Modal title="Configure inputs" bind:open={showInputsModal}>
|
|
72
|
+
<SchemaForm
|
|
73
|
+
schema={additionalInputsSchema}
|
|
74
|
+
bind:args={additionalInputsValues}
|
|
75
|
+
helperScript={dynamicInputHelperScript}
|
|
76
|
+
/>
|
|
77
|
+
{#snippet actions()}
|
|
78
|
+
<Button onClick={handleModalConfirm} variant="accent">Save</Button>
|
|
79
|
+
{/snippet}
|
|
80
|
+
</Modal>
|
|
81
|
+
{/if}
|
|
82
|
+
|
|
9
83
|
<div class="flex flex-col h-full flex-1 min-w-0">
|
|
10
84
|
<!-- Messages Container -->
|
|
11
85
|
<div
|
|
@@ -48,14 +122,37 @@ let { manager, deploymentInProgress = false } = $props();
|
|
|
48
122
|
</div>
|
|
49
123
|
|
|
50
124
|
<!-- Chat Input -->
|
|
51
|
-
<div class="flex flex-
|
|
125
|
+
<div class="flex flex-col items-center p-2 xl:max-w-7xl mx-auto w-full gap-2">
|
|
126
|
+
{#if additionalInputsSchema}
|
|
127
|
+
<div class="flex items-center justify-end w-full">
|
|
128
|
+
<div class="relative">
|
|
129
|
+
<Button
|
|
130
|
+
size="xs"
|
|
131
|
+
variant="default"
|
|
132
|
+
startIcon={{ icon: Settings2 }}
|
|
133
|
+
title="Inputs"
|
|
134
|
+
onClick={openInputsModal}
|
|
135
|
+
>
|
|
136
|
+
Inputs
|
|
137
|
+
</Button>
|
|
138
|
+
{#if hasMissingRequired}
|
|
139
|
+
<span class="absolute -top-1 -right-1 w-2 h-2 bg-yellow-500 rounded-full"></span>
|
|
140
|
+
{/if}
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
{/if}
|
|
52
144
|
<div class="w-full" class:opacity-50={deploymentInProgress}>
|
|
53
145
|
<ChatInput
|
|
54
146
|
bind:value={manager.inputMessage}
|
|
55
147
|
bind:bindTextarea={manager.inputElement}
|
|
56
148
|
disabled={manager.isLoading || deploymentInProgress}
|
|
57
|
-
onSend={
|
|
58
|
-
onKeydown={
|
|
149
|
+
onSend={handleSendMessage}
|
|
150
|
+
onKeydown={(e) => {
|
|
151
|
+
if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) {
|
|
152
|
+
e.preventDefault()
|
|
153
|
+
handleSendMessage()
|
|
154
|
+
}
|
|
155
|
+
}}
|
|
59
156
|
showCancelButton={manager.isWaitingForResponse || manager.isLoading}
|
|
60
157
|
onCancel={() => manager.cancelCurrentJob()}
|
|
61
158
|
sendTitle={deploymentInProgress ? 'Deployment in progress' : 'Send message (Enter)'}
|