windmill-components 1.677.1 → 1.687.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AppConnectInner.svelte +6 -0
- package/package/components/CiTestResults.svelte +64 -0
- package/package/components/CiTestResults.svelte.d.ts +7 -0
- package/package/components/CompareWorkspaces.svelte +626 -418
- package/package/components/DBManager.svelte +35 -4
- package/package/components/DBManager.svelte.d.ts +2 -0
- package/package/components/DBManagerContent.svelte +3 -1
- package/package/components/DBManagerContent.svelte.d.ts +3 -0
- package/package/components/DBManagerDrawer.svelte +145 -3
- package/package/components/DBTableEditor.svelte +14 -4
- package/package/components/DatatablePicker.svelte +2 -5
- package/package/components/DatatableSchemaDiff.svelte +531 -0
- package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
- package/package/components/DedicatedWorkersSelector.svelte +4 -2
- package/package/components/DefaultTagsInner.svelte +42 -2
- package/package/components/DeployWorkspaceDrawer.svelte +1 -1
- package/package/components/Dev.svelte +20 -3
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +1 -1
- package/package/components/EditorBar.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewerInner.svelte +269 -220
- package/package/components/FlowTimeline.svelte +1 -1
- package/package/components/FolderEditor.svelte +189 -4
- package/package/components/ForkWorkspaceBanner.svelte +82 -11
- package/package/components/GlobalUserOffboardingModal.svelte +293 -0
- package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/InstanceSettings.svelte +22 -3
- package/package/components/Login.svelte +22 -10
- package/package/components/ModuleTest.svelte +2 -1
- package/package/components/NoMainFuncBadge.svelte +1 -1
- package/package/components/OffboardItemsBox.svelte +56 -0
- package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
- package/package/components/OffboardReassignControls.svelte +47 -0
- package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
- package/package/components/OffboardWorkspaceSection.svelte +110 -0
- package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
- package/package/components/OnBehalfOfSelector.svelte +21 -3
- package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
- package/package/components/QueueAlerts.svelte +10 -10
- package/package/components/ResourcePicker.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +52 -11
- package/package/components/ScriptEditor.svelte +1 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ShareModal.svelte +236 -98
- package/package/components/SuperadminSettingsInner.svelte +362 -315
- package/package/components/UserOffboardingModal.svelte +238 -0
- package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/WorkspaceDeployLayout.svelte +3 -3
- package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
- package/package/components/common/table/AppRow.svelte +3 -3
- package/package/components/common/table/FlowRow.svelte +3 -3
- package/package/components/common/table/RawAppRow.svelte +4 -4
- package/package/components/common/table/Row.svelte +6 -2
- package/package/components/common/table/ScriptRow.svelte +11 -3
- package/package/components/copilot/chat/AIChatManager.svelte.js +2 -2
- package/package/components/copilot/chat/anthropic.d.ts +7 -1
- package/package/components/copilot/chat/anthropic.js +5 -2
- package/package/components/copilot/chat/app/core.js +129 -1
- package/package/components/copilot/chat/app/core.test.js +192 -0
- package/package/components/copilot/chat/chatLoop.d.ts +3 -0
- package/package/components/copilot/chat/chatLoop.js +13 -5
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +55 -76
- package/package/components/copilot/chat/flow/core.d.ts +13 -3
- package/package/components/copilot/chat/flow/core.js +467 -116
- package/package/components/copilot/chat/flow/helperUtils.d.ts +19 -0
- package/package/components/copilot/chat/flow/helperUtils.js +68 -0
- package/package/components/copilot/chat/flow/helperUtils.test.js +116 -0
- package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
- package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
- package/package/components/copilot/chat/flow/utils.test.js +59 -0
- package/package/components/copilot/chat/openai-responses.d.ts +7 -1
- package/package/components/copilot/chat/openai-responses.js +5 -2
- package/package/components/copilot/chat/shared.d.ts +1 -2
- package/package/components/copilot/chat/shared.js +94 -52
- package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
- package/package/components/copilot/chat/tokenUsage.js +42 -0
- package/package/components/copilot/lib.d.ts +5 -1
- package/package/components/copilot/lib.js +21 -5
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
- package/package/components/details/CopyableCodeBlock.svelte +18 -8
- package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +19 -21
- package/package/components/flows/agentToolTree.d.ts +17 -0
- package/package/components/flows/agentToolTree.js +114 -0
- package/package/components/flows/agentToolTree.test.d.ts +1 -0
- package/package/components/flows/agentToolTree.test.js +86 -0
- package/package/components/flows/agentToolUtils.d.ts +0 -5
- package/package/components/flows/agentToolUtils.js +0 -49
- package/package/components/flows/content/FlowLoop.svelte +7 -4
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
- package/package/components/flows/content/FlowSettings.svelte +29 -0
- package/package/components/flows/dfs.d.ts +6 -2
- package/package/components/flows/dfs.js +19 -11
- package/package/components/flows/flowDeleteController.d.ts +32 -0
- package/package/components/flows/flowDeleteController.js +54 -0
- package/package/components/flows/flowDeleteController.test.d.ts +1 -0
- package/package/components/flows/flowDeleteController.test.js +121 -0
- package/package/components/flows/flowDeleteUtils.d.ts +48 -0
- package/package/components/flows/flowDeleteUtils.js +150 -0
- package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
- package/package/components/flows/flowDeleteUtils.test.js +131 -0
- package/package/components/flows/flowDiff.d.ts +2 -47
- package/package/components/flows/flowDiff.js +16 -293
- package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
- package/package/components/flows/flowDiff.testUtils.js +26 -0
- package/package/components/flows/flowDiffManager.svelte.js +20 -75
- package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
- package/package/components/flows/flowExplorer.d.ts +4 -0
- package/package/components/flows/flowExplorer.js +7 -30
- package/package/components/flows/flowState.d.ts +1 -0
- package/package/components/flows/flowStateUtils.svelte.js +6 -1
- package/package/components/flows/flowTree.d.ts +91 -0
- package/package/components/flows/flowTree.js +326 -0
- package/package/components/flows/flowTree.test.d.ts +1 -0
- package/package/components/flows/flowTree.test.js +236 -0
- package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
- package/package/components/flows/previousResults.js +13 -41
- package/package/components/flows/previousResults.test.d.ts +1 -0
- package/package/components/flows/previousResults.test.js +65 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
- package/package/components/flows/propPicker/StepHistory.svelte +9 -1
- package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
- package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
- package/package/components/graph/FlowGraphV2.svelte +2 -2
- package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
- package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
- package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
- package/package/components/home/HomeConnectDrawer.svelte +125 -0
- package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
- package/package/components/icons/GithubIcon.svelte +4 -4
- package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
- package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
- package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
- package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
- package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
- package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
- package/package/components/instanceSettings.d.ts +1 -0
- package/package/components/instanceSettings.js +42 -8
- package/package/components/offboarding-utils.d.ts +11 -0
- package/package/components/offboarding-utils.js +100 -0
- package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
- package/package/components/raw_apps/RawAppEditor.svelte +27 -0
- package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
- package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
- package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
- package/package/components/runs/runsFilter.d.ts +1 -1
- package/package/components/script_builder.d.ts +1 -1
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +1 -0
- package/package/components/settings/CreateToken.svelte +113 -64
- package/package/components/settings/CreateToken.svelte.d.ts +3 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
- package/package/components/sidebar/SidebarContent.svelte +58 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
- package/package/components/triggers/AddTriggersButton.svelte +11 -0
- package/package/components/triggers/PermissionedAsLine.svelte +37 -3
- package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
- package/package/components/triggers/TriggersEditor.svelte +5 -1
- package/package/components/triggers/TriggersWrapper.svelte +10 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
- package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
- package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
- package/package/components/triggers/http/RoutesPanel.svelte +1 -1
- package/package/components/triggers/http/utils.d.ts +1 -1
- package/package/components/triggers/http/utils.js +2 -2
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
- package/package/components/triggers/native/utils.js +14 -0
- package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
- package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/triggers.svelte.js +1 -0
- package/package/components/triggers/utils.js +27 -6
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
- package/package/components/triggers.d.ts +1 -1
- package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
- package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
- package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
- package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
- package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
- package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
- package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
- package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
- package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
- package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
- package/package/consts.d.ts +3 -0
- package/package/consts.js +10 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +485 -19
- package/package/gen/schemas.gen.js +489 -20
- package/package/gen/services.gen.d.ts +229 -2
- package/package/gen/services.gen.js +463 -1
- package/package/gen/types.gen.d.ts +866 -29
- package/package/githubApp.js +5 -1
- package/package/hubPaths.json +1 -4
- package/package/infer.js +13 -1
- package/package/infer.svelte.js +10 -1
- package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
- package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
- package/package/script_helpers.d.ts +8 -2
- package/package/script_helpers.js +14 -0
- package/package/stores.d.ts +4 -0
- package/package/stores.js +1 -0
- package/package/system_prompts/prompts.d.ts +4 -3
- package/package/system_prompts/prompts.js +270 -20
- package/package/templates/ci_test_bun.ts.template +19 -0
- package/package/templates/ci_test_python.py.template +18 -0
- package/package/utils_workspace_deploy.d.ts +8 -8
- package/package/utils_workspace_deploy.js +86 -420
- package/package.json +3 -3
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
- package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
- package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
- package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
- package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
- package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
- package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
- package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
- package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
- package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
- package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
- package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
- package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
- package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
- package/package/components/copilot/chat/flow/utils.d.ts +0 -14
- package/package/components/copilot/chat/flow/utils.js +0 -108
- package/package/components/flows/agentToolUtils.test.js +0 -55
- /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
- /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
- /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
|
@@ -7,12 +7,13 @@ import Button from '../common/button/Button.svelte';
|
|
|
7
7
|
import { sendUserToast } from '../../toast';
|
|
8
8
|
import { isCustomInstanceDbEnabled } from './utils.svelte';
|
|
9
9
|
import ExploreAssetButton from '../ExploreAssetButton.svelte';
|
|
10
|
-
import { ArrowRight, InfoIcon } from 'lucide-svelte';
|
|
10
|
+
import { ArrowRight, InfoIcon, Trash2 } from 'lucide-svelte';
|
|
11
11
|
import { truncate } from '../../utils';
|
|
12
12
|
import Tooltip from '../meltComponents/Tooltip.svelte';
|
|
13
13
|
import { superadmin } from '../../stores';
|
|
14
14
|
let { customInstanceDbs, confirmationModal, bottomHint, opened = $bindable(), tag } = $props();
|
|
15
15
|
let customInstanceDbSetupIsRunning = $state(false);
|
|
16
|
+
let dropIsRunning = $state(false);
|
|
16
17
|
let preventClose = false;
|
|
17
18
|
</script>
|
|
18
19
|
|
|
@@ -45,13 +46,50 @@ let preventClose = false;
|
|
|
45
46
|
{@render bottomHint()}
|
|
46
47
|
</div>
|
|
47
48
|
{/if}
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
<div class="flex gap-2">
|
|
50
|
+
<ExploreAssetButton
|
|
51
|
+
class="flex-1"
|
|
52
|
+
asset={{ kind: 'resource', path: 'CUSTOM_INSTANCE_DB/' + dbname }}
|
|
53
|
+
_resourceMetadata={{ resource_type: 'postgresql' }}
|
|
54
|
+
disabled={!$isCustomInstanceDbEnabled || !enableManageButton}
|
|
55
|
+
onClick={() => (opened = undefined)}
|
|
56
|
+
/>
|
|
57
|
+
{#if $superadmin}
|
|
58
|
+
<Button
|
|
59
|
+
size="sm"
|
|
60
|
+
destructive
|
|
61
|
+
iconOnly
|
|
62
|
+
variant="accent"
|
|
63
|
+
startIcon={{ icon: Trash2 }}
|
|
64
|
+
loading={dropIsRunning}
|
|
65
|
+
onClick={async () => {
|
|
66
|
+
preventClose = true
|
|
67
|
+
let confirm = await confirmationModal.ask({
|
|
68
|
+
title: 'Drop database',
|
|
69
|
+
children: `This will permanently drop the database "${dbname}". All data will be lost. This action is irreversible.`,
|
|
70
|
+
confirmationText: 'Drop database'
|
|
71
|
+
})
|
|
72
|
+
preventClose = false
|
|
73
|
+
if (!confirm) return
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
dropIsRunning = true
|
|
77
|
+
await SettingService.dropCustomInstanceDb({ name: dbname })
|
|
78
|
+
await customInstanceDbs.refetch()
|
|
79
|
+
sendUserToast(`Database "${dbname}" dropped successfully`)
|
|
80
|
+
opened = undefined
|
|
81
|
+
} catch (e) {
|
|
82
|
+
sendUserToast(`Failed to drop database: ${e}`, true)
|
|
83
|
+
console.error('Error dropping custom instance database', e)
|
|
84
|
+
} finally {
|
|
85
|
+
dropIsRunning = false
|
|
86
|
+
}
|
|
87
|
+
}}
|
|
88
|
+
>
|
|
89
|
+
Drop database
|
|
90
|
+
</Button>
|
|
91
|
+
{/if}
|
|
92
|
+
</div>
|
|
55
93
|
</div>
|
|
56
94
|
</div>
|
|
57
95
|
<div class="flex-1 shrink-0 flex flex-col pl-4 gap-2">
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
const s = { dataTables: [] };
|
|
3
3
|
if (settings?.datatables) {
|
|
4
4
|
for (const [name, rest] of Object.entries(settings.datatables)) {
|
|
5
|
-
s.dataTables.push({
|
|
5
|
+
s.dataTables.push({
|
|
6
|
+
name,
|
|
7
|
+
...rest
|
|
8
|
+
});
|
|
6
9
|
}
|
|
7
10
|
}
|
|
8
11
|
return s;
|
|
@@ -77,7 +80,7 @@ function onNewDataTable() {
|
|
|
77
80
|
}
|
|
78
81
|
});
|
|
79
82
|
}
|
|
80
|
-
const customInstanceDbs = resource([], SettingService.listCustomInstanceDbs);
|
|
83
|
+
const customInstanceDbs = resource([() => $workspaceStore], SettingService.listCustomInstanceDbs);
|
|
81
84
|
async function onSave() {
|
|
82
85
|
try {
|
|
83
86
|
if ($isCustomInstanceDbEnabled &&
|
|
@@ -213,27 +216,29 @@ let hasUnsavedChanges = $derived.by(() => {
|
|
|
213
216
|
</div>
|
|
214
217
|
</div>
|
|
215
218
|
</Cell>
|
|
219
|
+
|
|
216
220
|
<Cell class="w-12">
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
221
|
+
<div class="flex gap-2">
|
|
222
|
+
{#if dirtyMap[dataTable.name]}
|
|
223
|
+
<Popover
|
|
224
|
+
openOnHover
|
|
225
|
+
contentClasses="p-2 text-sm text-secondary italic"
|
|
226
|
+
class="cursor-not-allowed"
|
|
227
|
+
>
|
|
228
|
+
{#snippet trigger()}
|
|
229
|
+
<ExploreAssetButton
|
|
230
|
+
asset={{ kind: 'datatable', path: dataTable.name }}
|
|
231
|
+
disabled
|
|
232
|
+
/>
|
|
233
|
+
{/snippet}
|
|
234
|
+
{#snippet content()}
|
|
235
|
+
Please save settings first
|
|
236
|
+
{/snippet}
|
|
237
|
+
</Popover>
|
|
238
|
+
{:else}
|
|
239
|
+
<ExploreAssetButton asset={{ kind: 'datatable', path: dataTable.name }} />
|
|
240
|
+
{/if}
|
|
241
|
+
</div>
|
|
237
242
|
</Cell>
|
|
238
243
|
<Cell class="w-12">
|
|
239
244
|
<CloseButton small on:close={() => removeDataTable(dataTableIndex)} />
|
|
@@ -85,7 +85,7 @@ const ducklakeIsDirty = $derived(Object.fromEntries(ducklakeSettings.ducklakes.m
|
|
|
85
85
|
})));
|
|
86
86
|
let hasUnsavedChanges = $derived(ducklakeSavedSettings.ducklakes.length !== ducklakeSettings.ducklakes.length ||
|
|
87
87
|
!Object.values(ducklakeIsDirty).every((v) => v === false));
|
|
88
|
-
const customInstanceDbs = resource([], SettingService.listCustomInstanceDbs);
|
|
88
|
+
const customInstanceDbs = resource([() => $workspaceStore], SettingService.listCustomInstanceDbs);
|
|
89
89
|
async function onSave() {
|
|
90
90
|
try {
|
|
91
91
|
if ($isCustomInstanceDbEnabled &&
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
<script module lang="ts">export {};
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<script lang="ts">import { WorkspaceService } from '../../gen';
|
|
5
|
+
import { workspaceStore, userStore } from '../../stores';
|
|
6
|
+
import { isCloudHosted } from '../../cloud';
|
|
7
|
+
import { resource } from 'runed';
|
|
8
|
+
import Select from '../select/Select.svelte';
|
|
9
|
+
import Label from '../Label.svelte';
|
|
10
|
+
import Alert from '../common/alert/Alert.svelte';
|
|
11
|
+
import ConfirmationModal from '../common/confirmationModal/ConfirmationModal.svelte';
|
|
12
|
+
import { Check, X, Loader2 } from 'lucide-svelte';
|
|
13
|
+
let { onAllDone, onCanceled } = $props();
|
|
14
|
+
let allDatatables = resource([], async () => $workspaceStore
|
|
15
|
+
? WorkspaceService.listDataTables({ workspace: $workspaceStore ?? '' })
|
|
16
|
+
: undefined);
|
|
17
|
+
let datatableBehaviors = $state({});
|
|
18
|
+
let cloneModalOpen = $state(false);
|
|
19
|
+
let currentCloneJob = $state(undefined);
|
|
20
|
+
let cloneQueue = $state([]);
|
|
21
|
+
let cloneRunning = $state(false);
|
|
22
|
+
export function hasDatatables() {
|
|
23
|
+
return (allDatatables.current?.length ?? 0) > 0;
|
|
24
|
+
}
|
|
25
|
+
export function buildCloneQueue(targetWorkspaceId) {
|
|
26
|
+
return (allDatatables.current ?? [])
|
|
27
|
+
.filter((dt) => {
|
|
28
|
+
const behavior = datatableBehaviors[dt.name] ?? 'keep_original';
|
|
29
|
+
return behavior !== 'keep_original';
|
|
30
|
+
})
|
|
31
|
+
.map((dt) => {
|
|
32
|
+
const behavior = datatableBehaviors[dt.name];
|
|
33
|
+
const isInstance = dt.resource_type === 'instance';
|
|
34
|
+
const newDbName = `${targetWorkspaceId.replace(/-/g, '_')}__${dt.name}`;
|
|
35
|
+
const steps = [
|
|
36
|
+
{
|
|
37
|
+
label: `CREATE DATABASE "${newDbName}"`,
|
|
38
|
+
status: 'pending'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: `pg_dump → pg_import (${behavior === 'schema_only' ? 'schema only' : 'schema + data'})`,
|
|
42
|
+
status: 'pending'
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
return {
|
|
46
|
+
name: dt.name,
|
|
47
|
+
resourceType: dt.resource_type,
|
|
48
|
+
behavior,
|
|
49
|
+
steps,
|
|
50
|
+
_newDbName: newDbName,
|
|
51
|
+
_isInstance: isInstance,
|
|
52
|
+
_sourceWorkspace: $workspaceStore,
|
|
53
|
+
_targetWorkspace: targetWorkspaceId,
|
|
54
|
+
_resourcePath: dt.resource_path
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
let completedJobs = $state([]);
|
|
59
|
+
export function startCloning(queue) {
|
|
60
|
+
completedJobs = [];
|
|
61
|
+
cloneQueue = queue;
|
|
62
|
+
currentCloneJob = cloneQueue[0];
|
|
63
|
+
cloneModalOpen = true;
|
|
64
|
+
}
|
|
65
|
+
export function getCompletedCloneJobs() {
|
|
66
|
+
return completedJobs;
|
|
67
|
+
}
|
|
68
|
+
async function executeCloneJob(job) {
|
|
69
|
+
cloneRunning = true;
|
|
70
|
+
let stepIdx = 0;
|
|
71
|
+
// Step 1: Create the database
|
|
72
|
+
job.steps[stepIdx].status = 'running';
|
|
73
|
+
try {
|
|
74
|
+
await WorkspaceService.createPgDatabase({
|
|
75
|
+
workspace: job._sourceWorkspace,
|
|
76
|
+
requestBody: {
|
|
77
|
+
source: `datatable://${job.name}`,
|
|
78
|
+
target_dbname: job._newDbName
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
job.steps[stepIdx].status = 'done';
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
job.steps[stepIdx].status = 'error';
|
|
85
|
+
job.steps[stepIdx].error = e?.body ?? e?.message ?? String(e);
|
|
86
|
+
cloneRunning = false;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
stepIdx++;
|
|
90
|
+
// Step 2: Import data
|
|
91
|
+
job.steps[stepIdx].status = 'running';
|
|
92
|
+
try {
|
|
93
|
+
await WorkspaceService.importPgDatabase({
|
|
94
|
+
workspace: job._sourceWorkspace,
|
|
95
|
+
requestBody: {
|
|
96
|
+
source: `datatable://${job.name}`,
|
|
97
|
+
target: `datatable://${job.name}`,
|
|
98
|
+
target_dbname_override: job._newDbName,
|
|
99
|
+
fork_behavior: job.behavior
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
job.steps[stepIdx].status = 'done';
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
job.steps[stepIdx].status = 'error';
|
|
106
|
+
job.steps[stepIdx].error = e?.body ?? e?.message ?? String(e);
|
|
107
|
+
cloneRunning = false;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
stepIdx++;
|
|
111
|
+
cloneRunning = false;
|
|
112
|
+
}
|
|
113
|
+
function advanceCloneQueue() {
|
|
114
|
+
if (currentCloneJob) {
|
|
115
|
+
completedJobs.push(currentCloneJob);
|
|
116
|
+
}
|
|
117
|
+
const idx = cloneQueue.indexOf(currentCloneJob);
|
|
118
|
+
if (idx < cloneQueue.length - 1) {
|
|
119
|
+
currentCloneJob = cloneQueue[idx + 1];
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
cloneModalOpen = false;
|
|
123
|
+
currentCloneJob = undefined;
|
|
124
|
+
cloneQueue = [];
|
|
125
|
+
onAllDone?.();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
</script>
|
|
129
|
+
|
|
130
|
+
{#if allDatatables.current && allDatatables.current.length > 0}
|
|
131
|
+
<Label label="Data table behavior">
|
|
132
|
+
<span class="text-xs text-secondary"> Choose how to handle each datatable when forking </span>
|
|
133
|
+
<div class="border rounded-md divide-y">
|
|
134
|
+
{#each allDatatables.current as dt}
|
|
135
|
+
<div class="flex items-center gap-2 justify-between px-4 py-1.5">
|
|
136
|
+
<div class="flex flex-col">
|
|
137
|
+
<span class="text-xs font-medium">{dt.name}</span>
|
|
138
|
+
<span class="text-2xs text-tertiary"
|
|
139
|
+
>{dt.resource_type === 'instance' ? 'Instance DB' : 'Resource DB'}</span
|
|
140
|
+
>
|
|
141
|
+
</div>
|
|
142
|
+
<Select
|
|
143
|
+
dropdownClass="max-w-96"
|
|
144
|
+
bind:value={
|
|
145
|
+
() => datatableBehaviors[dt.name] ?? 'keep_original',
|
|
146
|
+
(v) => (datatableBehaviors[dt.name] = v)
|
|
147
|
+
}
|
|
148
|
+
items={[
|
|
149
|
+
{ value: 'keep_original', label: 'Keep original' },
|
|
150
|
+
{ value: 'schema_only', label: 'Clone schema only' },
|
|
151
|
+
...(!isCloudHosted() && $userStore?.is_admin
|
|
152
|
+
? [{ value: 'schema_and_data', label: 'Clone schema and data' }]
|
|
153
|
+
: [])
|
|
154
|
+
]}
|
|
155
|
+
/>
|
|
156
|
+
</div>
|
|
157
|
+
{/each}
|
|
158
|
+
</div>
|
|
159
|
+
</Label>
|
|
160
|
+
{/if}
|
|
161
|
+
|
|
162
|
+
{#if cloneModalOpen && currentCloneJob}
|
|
163
|
+
<ConfirmationModal
|
|
164
|
+
title="Clone datatable: {currentCloneJob.name}"
|
|
165
|
+
confirmationText={cloneRunning ? 'Running...' : 'Start'}
|
|
166
|
+
open={cloneModalOpen}
|
|
167
|
+
loading={cloneRunning}
|
|
168
|
+
onConfirmed={async () => {
|
|
169
|
+
await executeCloneJob(currentCloneJob!)
|
|
170
|
+
advanceCloneQueue()
|
|
171
|
+
}}
|
|
172
|
+
onCanceled={() => {
|
|
173
|
+
cloneModalOpen = false
|
|
174
|
+
currentCloneJob = undefined
|
|
175
|
+
cloneQueue = []
|
|
176
|
+
onCanceled?.()
|
|
177
|
+
}}
|
|
178
|
+
>
|
|
179
|
+
{#if currentCloneJob.behavior === 'schema_and_data'}
|
|
180
|
+
<Alert type="error" title="Heavy operation">
|
|
181
|
+
This will copy the <b>entire database</b> including all data. The pg_dump output is temporarily
|
|
182
|
+
stored on disk and may consume significant server disk space during the operation.
|
|
183
|
+
</Alert>
|
|
184
|
+
{:else}
|
|
185
|
+
<Alert type="info" title="Schema only">
|
|
186
|
+
This will copy the database schema only. All tables will be empty. This is a lightweight
|
|
187
|
+
operation.
|
|
188
|
+
</Alert>
|
|
189
|
+
{/if}
|
|
190
|
+
|
|
191
|
+
{#if currentCloneJob.resourceType === 'instance'}
|
|
192
|
+
<p class="text-xs text-secondary mt-2">
|
|
193
|
+
This will run <code
|
|
194
|
+
>CREATE DATABASE {currentCloneJob.steps[0]?.label.match(/"([^"]+)"/)?.[1] ?? ''}</code
|
|
195
|
+
> on the Windmill PostgreSQL instance.
|
|
196
|
+
</p>
|
|
197
|
+
{:else}
|
|
198
|
+
<p class="text-xs text-secondary mt-2">
|
|
199
|
+
This will run <code>CREATE DATABASE</code> on the resource's PostgreSQL server.
|
|
200
|
+
</p>
|
|
201
|
+
{/if}
|
|
202
|
+
|
|
203
|
+
<div class="mt-4 flex flex-col gap-2">
|
|
204
|
+
{#each currentCloneJob.steps as step}
|
|
205
|
+
<div class="flex items-center gap-2 text-xs">
|
|
206
|
+
{#if step.status === 'done'}
|
|
207
|
+
<Check class="w-4 h-4 shrink-0 text-green-500" />
|
|
208
|
+
{:else if step.status === 'running'}
|
|
209
|
+
<Loader2 class="w-4 h-4 shrink-0 animate-spin text-blue-500" />
|
|
210
|
+
{:else if step.status === 'error'}
|
|
211
|
+
<X class="w-4 h-4 shrink-0 text-red-500" />
|
|
212
|
+
{:else}
|
|
213
|
+
<div class="w-4 h-4 shrink-0 rounded-full border border-gray-300"></div>
|
|
214
|
+
{/if}
|
|
215
|
+
<span
|
|
216
|
+
class:text-tertiary={step.status === 'pending'}
|
|
217
|
+
class:font-medium={step.status === 'running'}
|
|
218
|
+
>
|
|
219
|
+
{step.label}
|
|
220
|
+
</span>
|
|
221
|
+
</div>
|
|
222
|
+
{#if step.error}
|
|
223
|
+
<p class="text-2xs text-red-500 ml-6">{step.error}</p>
|
|
224
|
+
{/if}
|
|
225
|
+
{/each}
|
|
226
|
+
</div>
|
|
227
|
+
</ConfirmationModal>
|
|
228
|
+
{/if}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type ForkStep = {
|
|
2
|
+
label: string;
|
|
3
|
+
status: 'pending' | 'running' | 'done' | 'error';
|
|
4
|
+
error?: string;
|
|
5
|
+
};
|
|
6
|
+
export type DatatableCloneJob = {
|
|
7
|
+
name: string;
|
|
8
|
+
resourceType: string;
|
|
9
|
+
behavior: 'schema_only' | 'schema_and_data';
|
|
10
|
+
steps: ForkStep[];
|
|
11
|
+
_newDbName: string;
|
|
12
|
+
_isInstance: boolean;
|
|
13
|
+
_sourceWorkspace: string;
|
|
14
|
+
_targetWorkspace: string;
|
|
15
|
+
_resourcePath: string;
|
|
16
|
+
};
|
|
17
|
+
interface Props {
|
|
18
|
+
onAllDone?: () => void;
|
|
19
|
+
onCanceled?: () => void;
|
|
20
|
+
}
|
|
21
|
+
declare const ForkDatatableSection: import("svelte").Component<Props, {
|
|
22
|
+
hasDatatables: () => boolean;
|
|
23
|
+
buildCloneQueue: (targetWorkspaceId: string) => DatatableCloneJob[];
|
|
24
|
+
startCloning: (queue: DatatableCloneJob[]) => void;
|
|
25
|
+
getCompletedCloneJobs: () => DatatableCloneJob[];
|
|
26
|
+
}, "">;
|
|
27
|
+
type ForkDatatableSection = ReturnType<typeof ForkDatatableSection>;
|
|
28
|
+
export default ForkDatatableSection;
|
|
@@ -6,7 +6,13 @@ import { Tabs, Tab, Button, Section } from '../common';
|
|
|
6
6
|
import { workspaceStore } from '../../stores';
|
|
7
7
|
import { twMerge } from 'tailwind-merge';
|
|
8
8
|
import { slide } from 'svelte/transition';
|
|
9
|
-
let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable([
|
|
9
|
+
let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable([
|
|
10
|
+
'script',
|
|
11
|
+
'flow',
|
|
12
|
+
'app',
|
|
13
|
+
'folder',
|
|
14
|
+
'workspacedependencies'
|
|
15
|
+
]), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false } = $props();
|
|
10
16
|
// Component state
|
|
11
17
|
let collapsed = $state(false);
|
|
12
18
|
// Determine if component should be editable or read-only
|
|
@@ -381,7 +387,7 @@ git push
|
|
|
381
387
|
> file:</div
|
|
382
388
|
>
|
|
383
389
|
<pre class="text-xs bg-surface p-2 rounded mt-2 overflow-x-auto"
|
|
384
|
-
>
|
|
390
|
+
>workspaces:
|
|
385
391
|
main:
|
|
386
392
|
promotionOverrides:
|
|
387
393
|
# Add your promotion-specific settings here</pre
|
|
@@ -19,12 +19,14 @@ const hasRule = (ruleKind) => rule?.rules?.includes(ruleKind) ?? false;
|
|
|
19
19
|
let name = $state(untrack(() => rule)?.name ?? '');
|
|
20
20
|
let disableDirectDeployment = $state(hasRule('DisableDirectDeployment'));
|
|
21
21
|
let disableFork = $state(hasRule('DisableWorkspaceForking'));
|
|
22
|
+
let restrictDeployToDeployers = $state(hasRule('RestrictDeployToDeployers'));
|
|
22
23
|
let selectedGroups = $state(untrack(() => rule)?.bypass_groups?.map((g) => g.replace('g/', '')) ?? []);
|
|
23
24
|
let selectedUsers = $state(untrack(() => rule)?.bypass_users?.map((u) => u.replace('u/', '')) ?? []);
|
|
24
25
|
// Initial state for unsaved changes tracking
|
|
25
26
|
let initialName = $state(untrack(() => rule)?.name ?? '');
|
|
26
27
|
let initialDisableDirectDeployment = $state(hasRule('DisableDirectDeployment'));
|
|
27
28
|
let initialDisableFork = $state(hasRule('DisableWorkspaceForking'));
|
|
29
|
+
let initialRestrictDeployToDeployers = $state(hasRule('RestrictDeployToDeployers'));
|
|
28
30
|
let initialSelectedGroups = $state(untrack(() => rule)?.bypass_groups
|
|
29
31
|
? untrack(() => rule).bypass_groups.map((g) => g.replace('g/', ''))
|
|
30
32
|
: []);
|
|
@@ -77,11 +79,13 @@ const hasUnsavedChanges = $derived(isCreateMode
|
|
|
77
79
|
? name.trim() !== '' ||
|
|
78
80
|
disableDirectDeployment ||
|
|
79
81
|
disableFork ||
|
|
82
|
+
restrictDeployToDeployers ||
|
|
80
83
|
selectedGroups.length > 0 ||
|
|
81
84
|
selectedUsers.length > 0
|
|
82
85
|
: name !== initialName ||
|
|
83
86
|
disableDirectDeployment !== initialDisableDirectDeployment ||
|
|
84
87
|
disableFork !== initialDisableFork ||
|
|
88
|
+
restrictDeployToDeployers !== initialRestrictDeployToDeployers ||
|
|
85
89
|
JSON.stringify([...selectedGroups].sort()) !==
|
|
86
90
|
JSON.stringify([...initialSelectedGroups].sort()) ||
|
|
87
91
|
JSON.stringify([...selectedUsers].sort()) !==
|
|
@@ -116,7 +120,10 @@ async function create() {
|
|
|
116
120
|
name,
|
|
117
121
|
rules: [
|
|
118
122
|
...(disableDirectDeployment ? ['DisableDirectDeployment'] : []),
|
|
119
|
-
...(disableFork ? ['DisableWorkspaceForking'] : [])
|
|
123
|
+
...(disableFork ? ['DisableWorkspaceForking'] : []),
|
|
124
|
+
...(restrictDeployToDeployers
|
|
125
|
+
? ['RestrictDeployToDeployers']
|
|
126
|
+
: [])
|
|
120
127
|
],
|
|
121
128
|
bypass_groups: selectedGroups,
|
|
122
129
|
bypass_users: selectedUsers
|
|
@@ -140,7 +147,10 @@ async function save() {
|
|
|
140
147
|
requestBody: {
|
|
141
148
|
rules: [
|
|
142
149
|
...(disableDirectDeployment ? ['DisableDirectDeployment'] : []),
|
|
143
|
-
...(disableFork ? ['DisableWorkspaceForking'] : [])
|
|
150
|
+
...(disableFork ? ['DisableWorkspaceForking'] : []),
|
|
151
|
+
...(restrictDeployToDeployers
|
|
152
|
+
? ['RestrictDeployToDeployers']
|
|
153
|
+
: [])
|
|
144
154
|
],
|
|
145
155
|
bypass_groups: selectedGroups,
|
|
146
156
|
bypass_users: selectedUsers
|
|
@@ -151,6 +161,7 @@ async function save() {
|
|
|
151
161
|
initialName = name;
|
|
152
162
|
initialDisableDirectDeployment = disableDirectDeployment;
|
|
153
163
|
initialDisableFork = disableFork;
|
|
164
|
+
initialRestrictDeployToDeployers = restrictDeployToDeployers;
|
|
154
165
|
initialSelectedGroups = clone(selectedGroups);
|
|
155
166
|
initialSelectedUsers = clone(selectedUsers);
|
|
156
167
|
onUpdate?.();
|
|
@@ -270,6 +281,20 @@ async function save() {
|
|
|
270
281
|
/>
|
|
271
282
|
<div class="text-xs text-secondary ml-6">Users cannot create forks of this workspace.</div>
|
|
272
283
|
</div>
|
|
284
|
+
|
|
285
|
+
<!-- Restrict deploy to deployers -->
|
|
286
|
+
<div class="flex flex-col gap-2">
|
|
287
|
+
<Toggle
|
|
288
|
+
bind:checked={restrictDeployToDeployers}
|
|
289
|
+
options={{
|
|
290
|
+
right: 'Restrict deployment to wm_deployers'
|
|
291
|
+
}}
|
|
292
|
+
/>
|
|
293
|
+
<div class="text-xs text-secondary ml-6">
|
|
294
|
+
Only workspace admins and members of <code>wm_deployers</code> can deploy to this workspace.
|
|
295
|
+
Non-deployers can still fork, browse, and request a review.
|
|
296
|
+
</div>
|
|
297
|
+
</div>
|
|
273
298
|
</div>
|
|
274
299
|
</Section>
|
|
275
300
|
|
|
@@ -45,7 +45,7 @@ function goToStorageSettings() {
|
|
|
45
45
|
<SettingsPageHeader
|
|
46
46
|
title="Volume storage"
|
|
47
47
|
description="Select which storage volumes should use. If disabled, scripts with volumes will fail with an error."
|
|
48
|
-
link="https://www.windmill.dev/docs/core_concepts/
|
|
48
|
+
link="https://www.windmill.dev/docs/core_concepts/volumes"
|
|
49
49
|
/>
|
|
50
50
|
{#if s3ResourceSettings}
|
|
51
51
|
{#if hasAvailableStorage}
|
|
@@ -4,7 +4,7 @@ import { Button, Alert } from '../common';
|
|
|
4
4
|
import Skeleton from '../common/skeleton/Skeleton.svelte';
|
|
5
5
|
import SettingsPageHeader from '../settings/SettingsPageHeader.svelte';
|
|
6
6
|
import { Check, X, ExternalLink, Cog, Plug } from 'lucide-svelte';
|
|
7
|
-
import { NextcloudIcon } from '../icons';
|
|
7
|
+
import { NextcloudIcon, GithubIcon } from '../icons';
|
|
8
8
|
import GoogleIcon from '../icons/GoogleIcon.svelte';
|
|
9
9
|
import { WorkspaceIntegrationService } from '../../gen';
|
|
10
10
|
import ClipboardPanel from '../details/ClipboardPanel.svelte';
|
|
@@ -43,6 +43,22 @@ const supportedServices = {
|
|
|
43
43
|
'Enable the <a href="https://console.cloud.google.com/apis/library/drive.googleapis.com" target="_blank" rel="noopener" class="underline">Google Drive API</a> and <a href="https://console.cloud.google.com/apis/library/calendar-json.googleapis.com" target="_blank" rel="noopener" class="underline">Google Calendar API</a> in your project',
|
|
44
44
|
'Enter the client credentials below'
|
|
45
45
|
]
|
|
46
|
+
},
|
|
47
|
+
github: {
|
|
48
|
+
name: 'github',
|
|
49
|
+
displayName: 'GitHub',
|
|
50
|
+
description: 'Connect to GitHub for repository webhook triggers',
|
|
51
|
+
icon: GithubIcon,
|
|
52
|
+
docsUrl: 'https://www.windmill.dev/docs/core_concepts/native_triggers#github-triggers',
|
|
53
|
+
requiresBaseUrl: false,
|
|
54
|
+
clientIdPlaceholder: 'GitHub OAuth App Client ID',
|
|
55
|
+
clientSecretPlaceholder: 'GitHub OAuth App Client Secret',
|
|
56
|
+
setupInstructions: [
|
|
57
|
+
'Go to <a href="https://github.com/settings/developers" target="_blank" rel="noopener" class="underline">GitHub Developer Settings</a>',
|
|
58
|
+
'Create a new OAuth App (not a GitHub App)',
|
|
59
|
+
'Set the "Authorization callback URL" to the redirect URI shown below',
|
|
60
|
+
'Enter the Client ID and Client Secret below'
|
|
61
|
+
]
|
|
46
62
|
}
|
|
47
63
|
};
|
|
48
64
|
let integrations = $state([]);
|
package/package/consts.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare const WORKER_S3_BUCKET_SYNC_SETTING = "worker_s3_bucket_sync";
|
|
|
22
22
|
export declare const CUSTOM_TAGS_SETTING = "custom_tags";
|
|
23
23
|
export declare const DEFAULT_TAGS_PER_WORKSPACE_SETTING = "default_tags_per_workspace";
|
|
24
24
|
export declare const DEFAULT_TAGS_WORKSPACES_SETTING = "default_tags_workspaces";
|
|
25
|
+
export declare const FORK_WORKSPACE_TAG_APPEND_FORK_SUFFIX_SETTING = "fork_workspace_tag_append_fork_suffix";
|
|
25
26
|
export declare const PREVIEW_TAGS_OVERRIDE_SETTING = "preview_tags_override";
|
|
26
27
|
export declare const WORKSPACE_SLACK_BOT_TOKEN_PATH = "f/slack_bot/bot_token";
|
|
27
28
|
export declare const POSTGRES_TYPES: string[];
|
|
@@ -31,4 +32,6 @@ export declare const BIGQUERY_TYPES: string[];
|
|
|
31
32
|
export declare const SNOWFLAKE_TYPES: string[];
|
|
32
33
|
export declare const MSSQL_TYPES: string[];
|
|
33
34
|
export declare const DUCKDB_TYPES: string[];
|
|
35
|
+
/** Types that are only valid for new columns (CREATE TABLE / ADD COLUMN), not for altering existing ones. */
|
|
36
|
+
export declare const NEW_COLUMN_ONLY_TYPES: string[];
|
|
34
37
|
export declare const DB_TYPES: Record<DbType, string[]>;
|
package/package/consts.js
CHANGED
|
@@ -23,6 +23,7 @@ export const WORKER_S3_BUCKET_SYNC_SETTING = 'worker_s3_bucket_sync';
|
|
|
23
23
|
export const CUSTOM_TAGS_SETTING = 'custom_tags';
|
|
24
24
|
export const DEFAULT_TAGS_PER_WORKSPACE_SETTING = 'default_tags_per_workspace';
|
|
25
25
|
export const DEFAULT_TAGS_WORKSPACES_SETTING = 'default_tags_workspaces';
|
|
26
|
+
export const FORK_WORKSPACE_TAG_APPEND_FORK_SUFFIX_SETTING = 'fork_workspace_tag_append_fork_suffix';
|
|
26
27
|
export const PREVIEW_TAGS_OVERRIDE_SETTING = 'preview_tags_override';
|
|
27
28
|
export const WORKSPACE_SLACK_BOT_TOKEN_PATH = 'f/slack_bot/bot_token';
|
|
28
29
|
export const POSTGRES_TYPES = [
|
|
@@ -231,6 +232,15 @@ export const DUCKDB_TYPES = [
|
|
|
231
232
|
'TEXT',
|
|
232
233
|
'STRING'
|
|
233
234
|
];
|
|
235
|
+
/** Types that are only valid for new columns (CREATE TABLE / ADD COLUMN), not for altering existing ones. */
|
|
236
|
+
export const NEW_COLUMN_ONLY_TYPES = [
|
|
237
|
+
'SMALLSERIAL',
|
|
238
|
+
'SMALLSERIAL[]',
|
|
239
|
+
'SERIAL',
|
|
240
|
+
'SERIAL[]',
|
|
241
|
+
'BIGSERIAL',
|
|
242
|
+
'BIGSERIAL[]'
|
|
243
|
+
];
|
|
234
244
|
export const DB_TYPES = {
|
|
235
245
|
bigquery: BIGQUERY_TYPES,
|
|
236
246
|
ms_sql_server: MSSQL_TYPES,
|