windmill-components 1.677.0 → 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/flowStore.svelte.d.ts +1 -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/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- 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/MqttEditorConfigSection.svelte.d.ts +1 -1
- 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 +1172 -164
- package/package/gen/schemas.gen.js +1168 -157
- package/package/gen/services.gen.d.ts +511 -6
- package/package/gen/services.gen.js +1023 -23
- package/package/gen/types.gen.d.ts +2278 -151
- 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_deployable.d.ts +11 -7
- package/package/utils_workspace_deploy.d.ts +8 -8
- package/package/utils_workspace_deploy.js +86 -420
- package/package.json +4 -4
- 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
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
<script lang="ts">import { run } from 'svelte/legacy';
|
|
2
|
+
import { JobService, ResourceService, SettingService, UserService, VariableService, WorkspaceService } from '../../gen';
|
|
3
|
+
import { validateUsername } from '../../utils';
|
|
4
|
+
import { logoutWithRedirect } from '../../logoutKit';
|
|
5
|
+
import { page } from '$app/state';
|
|
6
|
+
import { usersWorkspaceStore, workspaceStore } from '../../stores';
|
|
7
|
+
import { Button } from '../common';
|
|
8
|
+
import Toggle from '../Toggle.svelte';
|
|
9
|
+
import Tooltip from '../Tooltip.svelte';
|
|
10
|
+
import { onMount } from 'svelte';
|
|
11
|
+
import { sendUserToast } from '../../toast';
|
|
12
|
+
import TestAIKey from '../copilot/TestAIKey.svelte';
|
|
13
|
+
import { switchWorkspace } from '../../storeUtils';
|
|
14
|
+
import { isCloudHosted } from '../../cloud';
|
|
15
|
+
import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
16
|
+
import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
|
|
17
|
+
import { AI_PROVIDERS } from '../copilot/lib';
|
|
18
|
+
import { LoaderCircle } from 'lucide-svelte';
|
|
19
|
+
import PrefixedInput from '../PrefixedInput.svelte';
|
|
20
|
+
import TextInput from '../text_input/TextInput.svelte';
|
|
21
|
+
import { jobManager } from '../../services/JobManager';
|
|
22
|
+
import Alert from '../common/alert/Alert.svelte';
|
|
23
|
+
import { base } from '../../base';
|
|
24
|
+
import Label from '../Label.svelte';
|
|
25
|
+
import ForkDatatableSection from './ForkDatatableSection.svelte';
|
|
26
|
+
let { isFork = false, onFinish } = $props();
|
|
27
|
+
let id = $state('');
|
|
28
|
+
let name = $state('');
|
|
29
|
+
let username = $state('');
|
|
30
|
+
let errorId = $state('');
|
|
31
|
+
let errorUser = $state('');
|
|
32
|
+
let aiKey = $state('');
|
|
33
|
+
let codeCompletionEnabled = $state(true);
|
|
34
|
+
let checking = $state(false);
|
|
35
|
+
let forkDatatableSection = $state(undefined);
|
|
36
|
+
let workspaceColor = $state(undefined);
|
|
37
|
+
let colorEnabled = $state(false);
|
|
38
|
+
function generateRandomColor() {
|
|
39
|
+
const randomColor = '#' +
|
|
40
|
+
Math.floor(Math.random() * 16777215)
|
|
41
|
+
.toString(16)
|
|
42
|
+
.padStart(6, '0');
|
|
43
|
+
workspaceColor = randomColor;
|
|
44
|
+
}
|
|
45
|
+
async function validateName(id) {
|
|
46
|
+
checking = true;
|
|
47
|
+
let exists = await WorkspaceService.existsWorkspace({ requestBody: { id } });
|
|
48
|
+
if (exists) {
|
|
49
|
+
errorId = 'ID already exists';
|
|
50
|
+
}
|
|
51
|
+
else if (id != '' && !/^\w+(-\w+)*$/.test(id)) {
|
|
52
|
+
errorId = 'ID can only contain letters, numbers and dashes and must not finish by a dash';
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
errorId = '';
|
|
56
|
+
}
|
|
57
|
+
checking = false;
|
|
58
|
+
}
|
|
59
|
+
const WM_FORK_PREFIX = 'wm-fork-';
|
|
60
|
+
let forkCreationLoading = $state(false);
|
|
61
|
+
let forkCreationError = $state('');
|
|
62
|
+
let errorMsgs = $state([]);
|
|
63
|
+
let failedSyncJobs = $state([]);
|
|
64
|
+
async function fetchFailedSyncJobs(jobs) {
|
|
65
|
+
let ret = [];
|
|
66
|
+
for (const job of jobs) {
|
|
67
|
+
let j = await JobService.getCompletedJob({
|
|
68
|
+
id: job,
|
|
69
|
+
workspace: $workspaceStore
|
|
70
|
+
});
|
|
71
|
+
ret.push(j);
|
|
72
|
+
}
|
|
73
|
+
return ret;
|
|
74
|
+
}
|
|
75
|
+
function isPathVersionLessThan(path, version) {
|
|
76
|
+
if (!path || !path.startsWith('hub/')) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const parts = path.split('/');
|
|
80
|
+
if (parts.length < 2) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const embeddedVersion = parseInt(parts[1], 10);
|
|
84
|
+
if (isNaN(embeddedVersion)) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return embeddedVersion < version;
|
|
88
|
+
}
|
|
89
|
+
async function createOrForkWorkspace() {
|
|
90
|
+
const prefixed_id = `${WM_FORK_PREFIX}${id}`;
|
|
91
|
+
if (isFork) {
|
|
92
|
+
await forkWorkspace(prefixed_id);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await createWorkspace();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function forkWorkspace(prefixed_id) {
|
|
99
|
+
if ($workspaceStore) {
|
|
100
|
+
forkCreationLoading = true;
|
|
101
|
+
errorMsgs = [];
|
|
102
|
+
failedSyncJobs = [];
|
|
103
|
+
forkCreationError = '';
|
|
104
|
+
// Clone datatables BEFORE creating the workspace fork
|
|
105
|
+
if (forkDatatableSection) {
|
|
106
|
+
const queue = forkDatatableSection.buildCloneQueue(prefixed_id);
|
|
107
|
+
if (queue.length > 0) {
|
|
108
|
+
forkDatatableSection.startCloning(queue);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
await completeFork(prefixed_id);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
sendUserToast('No workspace selected, cannot fork non-existent workspace', true);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function completeFork(prefixed_id) {
|
|
119
|
+
let gitSyncJobIds = await WorkspaceService.createWorkspaceForkGitBranch({
|
|
120
|
+
workspace: $workspaceStore,
|
|
121
|
+
requestBody: {
|
|
122
|
+
id: prefixed_id,
|
|
123
|
+
name,
|
|
124
|
+
color: colorEnabled && workspaceColor ? workspaceColor : undefined
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
try {
|
|
128
|
+
await Promise.all(gitSyncJobIds.map((jobId) => jobManager.runWithProgress(() => Promise.resolve(jobId), {
|
|
129
|
+
workspace: $workspaceStore,
|
|
130
|
+
timeout: 60000,
|
|
131
|
+
timeoutMessage: `Deploy fork job timed out after 60s`,
|
|
132
|
+
onProgress: (status) => {
|
|
133
|
+
if (status.status === 'failure') {
|
|
134
|
+
errorMsgs.push(status.error ?? 'Deploy fork job failed');
|
|
135
|
+
failedSyncJobs.push(jobId);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
})));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
forkCreationLoading = false;
|
|
142
|
+
sendUserToast(`Could not fork workspace ${$workspaceStore} because branch creation failed: ${errorMsgs} - ${error}`, true);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (errorMsgs.length != 0) {
|
|
146
|
+
forkCreationError = 'Failed to create a branch for this fork on the git sync repo(s)';
|
|
147
|
+
forkCreationLoading = false;
|
|
148
|
+
sendUserToast(`Could not fork workspace ${$workspaceStore} because branch creation failed: ${errorMsgs}`, true);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Build forked_datatables info from completed clone jobs
|
|
152
|
+
const forkedDatatables = forkDatatableSection
|
|
153
|
+
? forkDatatableSection.getCompletedCloneJobs().map((job) => ({
|
|
154
|
+
name: job.name,
|
|
155
|
+
new_dbname: job._newDbName
|
|
156
|
+
}))
|
|
157
|
+
: [];
|
|
158
|
+
try {
|
|
159
|
+
await WorkspaceService.createWorkspaceFork({
|
|
160
|
+
workspace: $workspaceStore,
|
|
161
|
+
requestBody: {
|
|
162
|
+
id: prefixed_id,
|
|
163
|
+
name,
|
|
164
|
+
color: colorEnabled && workspaceColor ? workspaceColor : undefined,
|
|
165
|
+
forked_datatables: forkedDatatables
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
forkCreationError = `Failed to create fork '${prefixed_id}'`;
|
|
171
|
+
errorMsgs.push(e?.body ?? e ?? 'Unknown error');
|
|
172
|
+
forkCreationLoading = false;
|
|
173
|
+
sendUserToast(`Could not create fork '${prefixed_id}' ${e}`, true);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
forkCreationLoading = false;
|
|
177
|
+
sendUserToast(`Successfully forked workspace ${$workspaceStore} as: wm-fork-${id}`);
|
|
178
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
179
|
+
switchWorkspace(prefixed_id);
|
|
180
|
+
onFinish?.();
|
|
181
|
+
}
|
|
182
|
+
async function createWorkspace() {
|
|
183
|
+
await WorkspaceService.createWorkspace({
|
|
184
|
+
requestBody: {
|
|
185
|
+
id,
|
|
186
|
+
name,
|
|
187
|
+
color: colorEnabled && workspaceColor ? workspaceColor : undefined,
|
|
188
|
+
username: automateUsernameCreation ? undefined : username
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
if (auto_invite) {
|
|
192
|
+
await WorkspaceService.editAutoInvite({
|
|
193
|
+
workspace: id,
|
|
194
|
+
requestBody: { operator: operatorOnly, invite_all: !isCloudHosted(), auto_add: autoAdd }
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (aiKey != '') {
|
|
198
|
+
let actualUsername = username;
|
|
199
|
+
if (automateUsernameCreation) {
|
|
200
|
+
const user = await UserService.whoami({
|
|
201
|
+
workspace: id
|
|
202
|
+
});
|
|
203
|
+
actualUsername = user.username;
|
|
204
|
+
}
|
|
205
|
+
let path = `u/${actualUsername}/${selected}_windmill_codegen`;
|
|
206
|
+
await VariableService.createVariable({
|
|
207
|
+
workspace: id,
|
|
208
|
+
requestBody: {
|
|
209
|
+
path,
|
|
210
|
+
value: aiKey,
|
|
211
|
+
is_secret: true,
|
|
212
|
+
description: 'Ai token'
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
await ResourceService.createResource({
|
|
216
|
+
workspace: id,
|
|
217
|
+
requestBody: {
|
|
218
|
+
path,
|
|
219
|
+
value: {
|
|
220
|
+
api_key: '$var:' + path
|
|
221
|
+
},
|
|
222
|
+
resource_type: selected
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
await WorkspaceService.editCopilotConfig({
|
|
226
|
+
workspace: id,
|
|
227
|
+
requestBody: aiKey
|
|
228
|
+
? {
|
|
229
|
+
providers: {
|
|
230
|
+
[selected]: {
|
|
231
|
+
resource_path: path,
|
|
232
|
+
models: [AI_PROVIDERS[selected].defaultModels[0]]
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
default_model: {
|
|
236
|
+
model: AI_PROVIDERS[selected].defaultModels[0],
|
|
237
|
+
provider: selected
|
|
238
|
+
},
|
|
239
|
+
code_completion_model: codeCompletionEnabled
|
|
240
|
+
? { model: AI_PROVIDERS[selected].defaultModels[0], provider: selected }
|
|
241
|
+
: undefined
|
|
242
|
+
}
|
|
243
|
+
: {}
|
|
244
|
+
});
|
|
245
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
246
|
+
switchWorkspace(id);
|
|
247
|
+
}
|
|
248
|
+
sendUserToast(`Created workspace id: ${id}`);
|
|
249
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
250
|
+
switchWorkspace(id);
|
|
251
|
+
onFinish?.();
|
|
252
|
+
}
|
|
253
|
+
function handleKeyUp(event) {
|
|
254
|
+
const key = event.key;
|
|
255
|
+
if (key === 'Enter') {
|
|
256
|
+
event.preventDefault();
|
|
257
|
+
createWorkspace();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function loadWorkspaces() {
|
|
261
|
+
if (!$usersWorkspaceStore) {
|
|
262
|
+
try {
|
|
263
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
264
|
+
}
|
|
265
|
+
catch { }
|
|
266
|
+
}
|
|
267
|
+
if (!$usersWorkspaceStore) {
|
|
268
|
+
const url = page.url;
|
|
269
|
+
console.log('logout 2');
|
|
270
|
+
await logoutWithRedirect(url.href.replace(url.origin, ''));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
let automateUsernameCreation = $state(true);
|
|
274
|
+
async function getAutomateUsernameCreationSetting() {
|
|
275
|
+
automateUsernameCreation =
|
|
276
|
+
(await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? true;
|
|
277
|
+
if (!automateUsernameCreation) {
|
|
278
|
+
UserService.globalWhoami().then((x) => {
|
|
279
|
+
let uname = '';
|
|
280
|
+
if (x.name) {
|
|
281
|
+
uname = x.name.split(' ')[0];
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
uname = x.email.split('@')[0];
|
|
285
|
+
}
|
|
286
|
+
uname = uname.replace(/\./gi, '');
|
|
287
|
+
username = uname.toLowerCase();
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
getAutomateUsernameCreationSetting();
|
|
292
|
+
onMount(() => {
|
|
293
|
+
loadWorkspaces();
|
|
294
|
+
WorkspaceService.isDomainAllowed().then((x) => {
|
|
295
|
+
isDomainAllowed = x;
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
let isDomainAllowed = $state(undefined);
|
|
299
|
+
let auto_invite = $state(false);
|
|
300
|
+
let operatorOnly = $state(false);
|
|
301
|
+
let autoAdd = $state(true);
|
|
302
|
+
let selected = $state('openai');
|
|
303
|
+
run(() => {
|
|
304
|
+
id = name.toLowerCase().replace(/\s/gi, '-');
|
|
305
|
+
});
|
|
306
|
+
run(() => {
|
|
307
|
+
validateName(id);
|
|
308
|
+
});
|
|
309
|
+
run(() => {
|
|
310
|
+
errorUser = validateUsername(username);
|
|
311
|
+
});
|
|
312
|
+
run(() => {
|
|
313
|
+
colorEnabled && !workspaceColor && generateRandomColor();
|
|
314
|
+
});
|
|
315
|
+
let domain = $derived($usersWorkspaceStore?.email.split('@')[1]);
|
|
316
|
+
</script>
|
|
317
|
+
|
|
318
|
+
<div class="flex flex-col flex-1">
|
|
319
|
+
<div class="flex-1 relative min-h-[32rem]">
|
|
320
|
+
<div class="flex flex-col gap-8 absolute inset-0 overflow-y-auto">
|
|
321
|
+
{#if errorMsgs.length != 0}
|
|
322
|
+
<Alert class="p-2" title={forkCreationError} type="error">
|
|
323
|
+
<ul class="pl-2 pr-4 break-words pb-5">
|
|
324
|
+
{#each errorMsgs as errorMsg}
|
|
325
|
+
<li><pre class="whitespace-pre-wrap">- {errorMsg}</pre></li>
|
|
326
|
+
{/each}
|
|
327
|
+
</ul>
|
|
328
|
+
{#if failedSyncJobs.length != 0}
|
|
329
|
+
More details on the jobs that failed:
|
|
330
|
+
{#await fetchFailedSyncJobs(failedSyncJobs)}
|
|
331
|
+
<LoaderCircle class="animate-spin" />
|
|
332
|
+
{:then failedJobs}
|
|
333
|
+
<ul class="pl-2 pr-4 break-words">
|
|
334
|
+
{#each failedJobs as job}
|
|
335
|
+
<li>
|
|
336
|
+
-
|
|
337
|
+
<a
|
|
338
|
+
target="_blank"
|
|
339
|
+
class="underline"
|
|
340
|
+
href={`/run/${job.id}?workspace=${$workspaceStore}`}
|
|
341
|
+
>
|
|
342
|
+
{job.id}
|
|
343
|
+
</a>
|
|
344
|
+
</li>
|
|
345
|
+
<!-- This 28073 is the version where git sync on fork was introduced -->
|
|
346
|
+
{#if isPathVersionLessThan(job.script_path, 28073)}
|
|
347
|
+
<div class="font-bold">
|
|
348
|
+
This job was not running the latest version of the git sync script available
|
|
349
|
+
on the hub. You might be able to solve this issue by going to `Workspace
|
|
350
|
+
Settings` -> `Git Sync` and updating the script.
|
|
351
|
+
</div>
|
|
352
|
+
{/if}
|
|
353
|
+
{/each}
|
|
354
|
+
</ul>
|
|
355
|
+
{:catch error}
|
|
356
|
+
Tried to fetch jobs to get more information, but failed: {error}. Here are the failed
|
|
357
|
+
job ids:
|
|
358
|
+
<ul class="pl-2 pr-4 break-words">
|
|
359
|
+
{#each failedSyncJobs as jobId}
|
|
360
|
+
<li>
|
|
361
|
+
-
|
|
362
|
+
<a
|
|
363
|
+
target="_blank"
|
|
364
|
+
class="underline"
|
|
365
|
+
href={`/run/${jobId}?workspace=${$workspaceStore}`}
|
|
366
|
+
>
|
|
367
|
+
{jobId}
|
|
368
|
+
</a>
|
|
369
|
+
</li>
|
|
370
|
+
{/each}
|
|
371
|
+
</ul>
|
|
372
|
+
{/await}
|
|
373
|
+
{/if}
|
|
374
|
+
</Alert>
|
|
375
|
+
{/if}
|
|
376
|
+
<label class="flex flex-col gap-1">
|
|
377
|
+
{#if isFork}
|
|
378
|
+
<span class="text-xs font-semibold text-emphasis">Fork name</span>
|
|
379
|
+
<span class="text-xs text-secondary">Displayable name of the forked workspace</span>
|
|
380
|
+
{:else}
|
|
381
|
+
<span class="text-xs font-semibold text-emphasis">Workspace name</span>
|
|
382
|
+
<span class="text-xs text-secondary">Displayable name</span>
|
|
383
|
+
{/if}
|
|
384
|
+
<!-- svelte-ignore a11y_autofocus -->
|
|
385
|
+
<TextInput inputProps={{ autofocus: true }} bind:value={name} />
|
|
386
|
+
</label>
|
|
387
|
+
<label class="flex flex-col gap-1">
|
|
388
|
+
<span class="text-xs font-semibold text-emphasis">Workspace ID</span>
|
|
389
|
+
{#if isFork}
|
|
390
|
+
<span class="text-xs text-secondary"
|
|
391
|
+
>Slug to uniquely identify your fork (this will also set the branch name)</span
|
|
392
|
+
>
|
|
393
|
+
{:else}
|
|
394
|
+
<span class="text-xs text-secondary">Slug to uniquely identify your workspace</span>
|
|
395
|
+
{/if}
|
|
396
|
+
|
|
397
|
+
{#if isFork}
|
|
398
|
+
<PrefixedInput
|
|
399
|
+
prefix={WM_FORK_PREFIX}
|
|
400
|
+
type="text"
|
|
401
|
+
bind:value={id}
|
|
402
|
+
placeholder="example.com"
|
|
403
|
+
class={errorId != '' ? 'input-error' : ''}
|
|
404
|
+
/>
|
|
405
|
+
{:else}
|
|
406
|
+
<TextInput bind:value={id} error={errorId} />
|
|
407
|
+
{/if}
|
|
408
|
+
{#if errorId}
|
|
409
|
+
<span class="text-red-500 text-2xs font-normal">{errorId}</span>
|
|
410
|
+
{/if}
|
|
411
|
+
</label>
|
|
412
|
+
<Label label="Workspace color">
|
|
413
|
+
<span class="text-xs text-secondary">
|
|
414
|
+
Color to identify the current workspace in the list of workspaces
|
|
415
|
+
</span>
|
|
416
|
+
<div class="flex items-center gap-4">
|
|
417
|
+
<Toggle bind:checked={colorEnabled} options={{ right: 'Enable' }} />
|
|
418
|
+
{#if colorEnabled}
|
|
419
|
+
<div class="flex items-center gap-1 grow">
|
|
420
|
+
<input
|
|
421
|
+
class="grow min-w-10"
|
|
422
|
+
type="color"
|
|
423
|
+
bind:value={workspaceColor}
|
|
424
|
+
disabled={!colorEnabled}
|
|
425
|
+
/>
|
|
426
|
+
|
|
427
|
+
<TextInput
|
|
428
|
+
class="w-24"
|
|
429
|
+
bind:value={workspaceColor}
|
|
430
|
+
inputProps={{ disabled: !colorEnabled }}
|
|
431
|
+
/>
|
|
432
|
+
<Button
|
|
433
|
+
on:click={generateRandomColor}
|
|
434
|
+
size="xs"
|
|
435
|
+
variant="default"
|
|
436
|
+
disabled={!colorEnabled}>Random</Button
|
|
437
|
+
>
|
|
438
|
+
</div>
|
|
439
|
+
{/if}
|
|
440
|
+
</div>
|
|
441
|
+
</Label>
|
|
442
|
+
{#if isFork}
|
|
443
|
+
<ForkDatatableSection
|
|
444
|
+
bind:this={forkDatatableSection}
|
|
445
|
+
onAllDone={() => {
|
|
446
|
+
completeFork(`${WM_FORK_PREFIX}${id}`)
|
|
447
|
+
}}
|
|
448
|
+
onCanceled={() => {
|
|
449
|
+
forkCreationLoading = false
|
|
450
|
+
}}
|
|
451
|
+
/>
|
|
452
|
+
{/if}
|
|
453
|
+
{#if !automateUsernameCreation}
|
|
454
|
+
<Label label="Your username in that workspace">
|
|
455
|
+
<TextInput
|
|
456
|
+
bind:value={username}
|
|
457
|
+
inputProps={{ onkeyup: handleKeyUp }}
|
|
458
|
+
error={errorUser}
|
|
459
|
+
/>
|
|
460
|
+
{#if errorUser}
|
|
461
|
+
<span class="text-red-500 text-2xs">{errorUser}</span>
|
|
462
|
+
{/if}
|
|
463
|
+
</Label>
|
|
464
|
+
{/if}
|
|
465
|
+
{#if !isFork}
|
|
466
|
+
<div class="block">
|
|
467
|
+
<div class="flex flex-col gap-1">
|
|
468
|
+
<label for="ai-key" class="flex flex-row gap-2">
|
|
469
|
+
<span class="text-xs font-semibold text-emphasis">
|
|
470
|
+
AI key for Windmill AI
|
|
471
|
+
<Tooltip>
|
|
472
|
+
Find out how it can help you <a
|
|
473
|
+
href="https://www.windmill.dev/docs/core_concepts/ai_generation"
|
|
474
|
+
target="_blank"
|
|
475
|
+
rel="noopener noreferrer">in the docs</a
|
|
476
|
+
>
|
|
477
|
+
</Tooltip>
|
|
478
|
+
</span>
|
|
479
|
+
<span class="text-2xs text-secondary">(optional but recommended)</span>
|
|
480
|
+
</label>
|
|
481
|
+
|
|
482
|
+
<ToggleButtonGroup bind:selected>
|
|
483
|
+
{#snippet children({ item })}
|
|
484
|
+
<ToggleButton value="openai" label="OpenAI" {item} />
|
|
485
|
+
<ToggleButton value="anthropic" label="Anthropic" {item} />
|
|
486
|
+
<ToggleButton value="mistral" label="Mistral" {item} />
|
|
487
|
+
<ToggleButton value="deepseek" label="DeepSeek" {item} />
|
|
488
|
+
{/snippet}
|
|
489
|
+
</ToggleButtonGroup>
|
|
490
|
+
<div class="flex flex-row gap-1">
|
|
491
|
+
<input
|
|
492
|
+
id="ai-key"
|
|
493
|
+
type="password"
|
|
494
|
+
autocomplete="new-password"
|
|
495
|
+
bind:value={aiKey}
|
|
496
|
+
onkeyup={handleKeyUp}
|
|
497
|
+
/>
|
|
498
|
+
<TestAIKey
|
|
499
|
+
apiKey={aiKey}
|
|
500
|
+
disabled={!aiKey}
|
|
501
|
+
aiProvider={selected}
|
|
502
|
+
model={AI_PROVIDERS[selected].defaultModels[0]}
|
|
503
|
+
/>
|
|
504
|
+
</div>
|
|
505
|
+
</div>
|
|
506
|
+
|
|
507
|
+
{#if aiKey}
|
|
508
|
+
<div class="flex flex-col gap-2 mt-2">
|
|
509
|
+
<Toggle
|
|
510
|
+
disabled={!aiKey}
|
|
511
|
+
bind:checked={codeCompletionEnabled}
|
|
512
|
+
options={{ right: 'Enable code completion' }}
|
|
513
|
+
/>
|
|
514
|
+
</div>
|
|
515
|
+
{/if}
|
|
516
|
+
</div>
|
|
517
|
+
<div class="flex flex-col gap-1">
|
|
518
|
+
<label for="auto-invite" class="text-xs font-semibold text-emphasis"
|
|
519
|
+
>{isCloudHosted()
|
|
520
|
+
? `Auto-${autoAdd ? 'add' : 'invite'} anyone from ${domain}`
|
|
521
|
+
: `Auto-${autoAdd ? 'add' : 'invite'} anyone joining the instance`}</label
|
|
522
|
+
>
|
|
523
|
+
<Toggle
|
|
524
|
+
id="auto-invite"
|
|
525
|
+
disabled={isCloudHosted() && !isDomainAllowed}
|
|
526
|
+
bind:checked={auto_invite}
|
|
527
|
+
/>
|
|
528
|
+
{#if isCloudHosted() && isDomainAllowed == false}
|
|
529
|
+
<div class="text-secondary text-2xs">{domain} domain not allowed for auto-invite</div>
|
|
530
|
+
{/if}
|
|
531
|
+
|
|
532
|
+
{#if auto_invite}
|
|
533
|
+
<div class="bg-surface-tertiary p-4 rounded-md flex flex-col gap-8">
|
|
534
|
+
<!-- svelte-ignore a11y_label_has_associated_control -->
|
|
535
|
+
{#if isCloudHosted()}
|
|
536
|
+
<label class="flex flex-col gap-1">
|
|
537
|
+
<span class="text-xs font-semibold text-emphasis">Mode</span>
|
|
538
|
+
<span class="text-xs text-secondary font-normal"
|
|
539
|
+
>Whether to invite or add users directly to the workspace.</span
|
|
540
|
+
>
|
|
541
|
+
<ToggleButtonGroup
|
|
542
|
+
selected={autoAdd ? 'add' : 'invite'}
|
|
543
|
+
on:selected={async (e) => {
|
|
544
|
+
autoAdd = e.detail === 'add'
|
|
545
|
+
}}
|
|
546
|
+
>
|
|
547
|
+
{#snippet children({ item })}
|
|
548
|
+
<ToggleButton value="invite" label="Auto-invite" {item} />
|
|
549
|
+
<ToggleButton value="add" label="Auto-add" {item} />
|
|
550
|
+
{/snippet}
|
|
551
|
+
</ToggleButtonGroup>
|
|
552
|
+
</label>
|
|
553
|
+
{/if}
|
|
554
|
+
|
|
555
|
+
<label class="font-semibold flex flex-col gap-1">
|
|
556
|
+
<span class="text-xs font-semibold text-emphasis">Role</span>
|
|
557
|
+
<span class="text-xs text-secondary font-normal"
|
|
558
|
+
>Role of the auto-invited users</span
|
|
559
|
+
>
|
|
560
|
+
<ToggleButtonGroup
|
|
561
|
+
selected={operatorOnly ? 'operator' : 'developer'}
|
|
562
|
+
on:selected={(e) => {
|
|
563
|
+
operatorOnly = e.detail == 'operator'
|
|
564
|
+
}}
|
|
565
|
+
>
|
|
566
|
+
{#snippet children({ item })}
|
|
567
|
+
<ToggleButton value="operator" label="Operator" {item} />
|
|
568
|
+
<ToggleButton value="developer" label="Developer" {item} />
|
|
569
|
+
{/snippet}
|
|
570
|
+
</ToggleButtonGroup>
|
|
571
|
+
</label>
|
|
572
|
+
</div>
|
|
573
|
+
{/if}
|
|
574
|
+
</div>
|
|
575
|
+
{/if}
|
|
576
|
+
</div>
|
|
577
|
+
</div>
|
|
578
|
+
<div class="flex flex-wrap flex-row justify-between gap-4 pt-4">
|
|
579
|
+
<Button disabled={forkCreationLoading} variant="default" size="sm" href="{base}/user/workspaces"
|
|
580
|
+
>← Back to workspaces</Button
|
|
581
|
+
>
|
|
582
|
+
{#if !forkCreationLoading}
|
|
583
|
+
<Button
|
|
584
|
+
variant="accent"
|
|
585
|
+
disabled={checking ||
|
|
586
|
+
errorId != '' ||
|
|
587
|
+
!name ||
|
|
588
|
+
(!automateUsernameCreation && (errorUser != '' || !username)) ||
|
|
589
|
+
!id}
|
|
590
|
+
on:click={createOrForkWorkspace}
|
|
591
|
+
>
|
|
592
|
+
{#if isFork}
|
|
593
|
+
Fork workspace
|
|
594
|
+
{:else}
|
|
595
|
+
Create workspace
|
|
596
|
+
{/if}
|
|
597
|
+
</Button>
|
|
598
|
+
{:else}
|
|
599
|
+
<Button variant="accent" disabled={true}>
|
|
600
|
+
<LoaderCircle class="animate-spin" /> Creating branch
|
|
601
|
+
</Button>
|
|
602
|
+
{/if}
|
|
603
|
+
</div>
|
|
604
|
+
</div>
|
|
@@ -5,17 +5,17 @@ import Button from '../common/button/Button.svelte';
|
|
|
5
5
|
import CustomInstanceDbWizardModal from './CustomInstanceDbWizardModal.svelte';
|
|
6
6
|
import { ArrowRight, TriangleAlert } from 'lucide-svelte';
|
|
7
7
|
let { value = $bindable(), customInstanceDbs, confirmationModal, wizardBottomHint, class: className, tag } = $props();
|
|
8
|
-
let openedDbNameWizard = $state(
|
|
9
|
-
let status = $derived(customInstanceDbs.current?.[value ?? '']);
|
|
8
|
+
let openedDbNameWizard = $state(undefined);
|
|
10
9
|
let onlySelectedTags = $derived(safeSelectItems(Object.entries(customInstanceDbs.current ?? {})
|
|
11
10
|
.filter(([_, db]) => !tag || db.tag === tag)
|
|
12
11
|
.map(([name, _]) => name)));
|
|
13
|
-
let
|
|
12
|
+
let open = $state(false);
|
|
14
13
|
</script>
|
|
15
14
|
|
|
16
15
|
<div class="flex relative items-center {className}">
|
|
17
16
|
<Select
|
|
18
17
|
class="flex-1"
|
|
18
|
+
bind:open
|
|
19
19
|
bind:value
|
|
20
20
|
onCreateItem={(i) => (value = i)}
|
|
21
21
|
placeholder="Search or create..."
|
|
@@ -25,27 +25,40 @@ let currentIsAlreadyUsedElsewhere = $derived(tag && status && status.tag !== tag
|
|
|
25
25
|
disabled={!$isCustomInstanceDbEnabled}
|
|
26
26
|
>
|
|
27
27
|
{#snippet endSnippet({ item })}
|
|
28
|
-
{
|
|
29
|
-
<div class="w-1.5 h-1.5 rounded-full bg-red-400"></div>
|
|
30
|
-
{:else}
|
|
31
|
-
<div class="w-1.5 h-1.5 rounded-full bg-green-400"></div>
|
|
32
|
-
{/if}
|
|
28
|
+
{@render customInstanceDbWizardButton(item.value)}
|
|
33
29
|
{/snippet}
|
|
34
30
|
</Select>
|
|
31
|
+
{#if value}
|
|
32
|
+
{@render customInstanceDbWizardButton(value, 'absolute right-1.5')}
|
|
33
|
+
{/if}
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<CustomInstanceDbWizardModal
|
|
37
|
+
{customInstanceDbs}
|
|
38
|
+
{confirmationModal}
|
|
39
|
+
{tag}
|
|
40
|
+
bottomHint={wizardBottomHint}
|
|
41
|
+
bind:opened={
|
|
42
|
+
() =>
|
|
43
|
+
openedDbNameWizard
|
|
44
|
+
? { dbname: openedDbNameWizard, status: customInstanceDbs.current?.[openedDbNameWizard] }
|
|
45
|
+
: undefined,
|
|
46
|
+
(v) => !v && (openedDbNameWizard = undefined)
|
|
47
|
+
}
|
|
48
|
+
/>
|
|
35
49
|
|
|
50
|
+
{#snippet customInstanceDbWizardButton(dbname: string, clazz: string = '')}
|
|
51
|
+
{@const status = customInstanceDbs.current?.[dbname]}
|
|
36
52
|
<Button
|
|
37
53
|
spacingSize="xs2"
|
|
38
54
|
variant="default"
|
|
39
|
-
wrapperClasses=
|
|
40
|
-
onClick={() => (openedDbNameWizard =
|
|
41
|
-
disabled={currentIsAlreadyUsedElsewhere}
|
|
55
|
+
wrapperClasses="bg-surface-input h-6 -my-2 {clazz}"
|
|
56
|
+
onClick={() => ((openedDbNameWizard = dbname), (open = false))}
|
|
42
57
|
>
|
|
43
58
|
{#if !status}
|
|
44
59
|
<span class="text-yellow-600 dark:text-yellow-400">
|
|
45
60
|
Setup <ArrowRight class="inline" size={14} />
|
|
46
61
|
</span>
|
|
47
|
-
{:else if currentIsAlreadyUsedElsewhere}
|
|
48
|
-
<span class="text-red-400 flex gap-1">Already used as {status.tag}</span>
|
|
49
62
|
{:else if !status.success}
|
|
50
63
|
<span class="text-red-400 flex gap-1">
|
|
51
64
|
Error <TriangleAlert class="inline" size={16} />
|
|
@@ -54,15 +67,4 @@ let currentIsAlreadyUsedElsewhere = $derived(tag && status && status.tag !== tag
|
|
|
54
67
|
<div class="w-1.5 h-1.5 rounded-full bg-green-400"></div>
|
|
55
68
|
{/if}
|
|
56
69
|
</Button>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
<CustomInstanceDbWizardModal
|
|
60
|
-
{customInstanceDbs}
|
|
61
|
-
{confirmationModal}
|
|
62
|
-
{tag}
|
|
63
|
-
bottomHint={wizardBottomHint}
|
|
64
|
-
bind:opened={
|
|
65
|
-
() => (openedDbNameWizard ? { dbname: value ?? '', status: status! } : undefined),
|
|
66
|
-
(v) => !v && (openedDbNameWizard = false)
|
|
67
|
-
}
|
|
68
|
-
/>
|
|
70
|
+
{/snippet}
|