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
|
@@ -132,12 +132,13 @@ export async function saveSettings() {
|
|
|
132
132
|
return false;
|
|
133
133
|
});
|
|
134
134
|
let shouldReloadPage = false;
|
|
135
|
+
let willRestart = false;
|
|
135
136
|
if ($values) {
|
|
136
137
|
// Trim license key before saving
|
|
137
138
|
if ($values['license_key'] && typeof $values['license_key'] === 'string') {
|
|
138
139
|
$values['license_key'] = $values['license_key'].trim();
|
|
139
140
|
}
|
|
140
|
-
// Check which settings require a page reload
|
|
141
|
+
// Check which settings require a page reload or server restart
|
|
141
142
|
const allSettings = [...Object.values(settings), scimSamlSetting].flat();
|
|
142
143
|
let licenseKeySet = false;
|
|
143
144
|
for (const s of allSettings) {
|
|
@@ -148,6 +149,9 @@ export async function saveSettings() {
|
|
|
148
149
|
if (s.requiresReloadOnChange) {
|
|
149
150
|
shouldReloadPage = true;
|
|
150
151
|
}
|
|
152
|
+
if (s.triggersRestart) {
|
|
153
|
+
willRestart = true;
|
|
154
|
+
}
|
|
151
155
|
}
|
|
152
156
|
}
|
|
153
157
|
// Build the full global_settings object for the bulk PUT
|
|
@@ -181,6 +185,10 @@ export async function saveSettings() {
|
|
|
181
185
|
await sleep(1000);
|
|
182
186
|
window.location.reload();
|
|
183
187
|
}
|
|
188
|
+
else if (willRestart) {
|
|
189
|
+
sendUserToast('Settings updated. Servers are restarting and changes may take up to a minute to fully propagate.', false, [], undefined, 8000);
|
|
190
|
+
dispatch('saved');
|
|
191
|
+
}
|
|
184
192
|
else {
|
|
185
193
|
sendUserToast('Settings updated');
|
|
186
194
|
dispatch('saved');
|
|
@@ -437,6 +445,7 @@ export async function saveCategorySettings(category) {
|
|
|
437
445
|
$values['license_key'] = $values['license_key'].trim();
|
|
438
446
|
}
|
|
439
447
|
let shouldReloadPage = false;
|
|
448
|
+
let willRestart = false;
|
|
440
449
|
const categorySettings = getSettingsForCategory(category);
|
|
441
450
|
let licenseKeySet = false;
|
|
442
451
|
await Promise.all(categorySettings
|
|
@@ -452,6 +461,8 @@ export async function saveCategorySettings(category) {
|
|
|
452
461
|
licenseKeySet = true;
|
|
453
462
|
if (x.requiresReloadOnChange)
|
|
454
463
|
shouldReloadPage = true;
|
|
464
|
+
if (x.triggersRestart)
|
|
465
|
+
willRestart = true;
|
|
455
466
|
let value = $values?.[x.key];
|
|
456
467
|
if (x.fieldType === 'codearea' && typeof value === 'string' && value.trim() === '') {
|
|
457
468
|
value = undefined;
|
|
@@ -505,6 +516,10 @@ export async function saveCategorySettings(category) {
|
|
|
505
516
|
await sleep(1000);
|
|
506
517
|
window.location.reload();
|
|
507
518
|
}
|
|
519
|
+
else if (willRestart) {
|
|
520
|
+
sendUserToast('Settings updated. Servers are restarting and changes may take up to a minute to fully propagate.', false, [], undefined, 8000);
|
|
521
|
+
dispatch('saved');
|
|
522
|
+
}
|
|
508
523
|
else {
|
|
509
524
|
sendUserToast('Settings updated');
|
|
510
525
|
dispatch('saved');
|
|
@@ -525,8 +540,12 @@ const sensitiveKeys = new Set([
|
|
|
525
540
|
'jwt_secret',
|
|
526
541
|
'workspace_registries'
|
|
527
542
|
]);
|
|
528
|
-
// Settings that should never appear in YAML export/import
|
|
529
|
-
|
|
543
|
+
// Settings that should never appear in YAML export/import.
|
|
544
|
+
// `worker_configs` is a legacy ghost key: worker configs live in the `config`
|
|
545
|
+
// table (managed from /workers), not in `global_settings`. Older DBs may
|
|
546
|
+
// still carry a stale `global_settings.worker_configs` row; filter it here
|
|
547
|
+
// so it never round-trips through this editor.
|
|
548
|
+
const excludedKeys = new Set(['worker_configs']);
|
|
530
549
|
// Nested fields inside object-valued settings that contain secrets.
|
|
531
550
|
// Each entry maps a top-level key to its sensitive sub-field names.
|
|
532
551
|
const nestedSensitiveFields = {
|
|
@@ -68,6 +68,7 @@ let showPassword = $state(false);
|
|
|
68
68
|
let logins = $state(undefined);
|
|
69
69
|
let saml = $state(undefined);
|
|
70
70
|
let smtpConfigured = $state(undefined);
|
|
71
|
+
let disablePasswordLogin = $state(false);
|
|
71
72
|
async function login() {
|
|
72
73
|
if (!email || !password) {
|
|
73
74
|
sendUserToast('Please fill in both email and password', true);
|
|
@@ -155,21 +156,32 @@ async function redirectUser() {
|
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
async function loadLogins() {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
const [loginsResult, disabledResult] = await Promise.allSettled([
|
|
160
|
+
OauthService.listOauthLogins(),
|
|
161
|
+
UserService.isPasswordLoginDisabled()
|
|
162
|
+
]);
|
|
163
|
+
if (disabledResult.status === 'fulfilled') {
|
|
164
|
+
disablePasswordLogin = disabledResult.value ?? false;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
disablePasswordLogin = false;
|
|
168
|
+
console.error('Could not load password login setting', disabledResult.reason);
|
|
169
|
+
}
|
|
170
|
+
if (loginsResult.status === 'fulfilled') {
|
|
171
|
+
logins = loginsResult.value.oauth.map((login) => ({
|
|
161
172
|
type: login.type,
|
|
162
173
|
displayName: login.display_name || login.type
|
|
163
174
|
}));
|
|
164
|
-
saml =
|
|
165
|
-
showPassword = (logins.length == 0 && !saml) || (email != undefined && email.length > 0);
|
|
175
|
+
saml = loginsResult.value.saml;
|
|
166
176
|
}
|
|
167
|
-
|
|
177
|
+
else {
|
|
168
178
|
logins = [];
|
|
169
179
|
saml = undefined;
|
|
170
|
-
|
|
171
|
-
console.error('Could not load logins', e);
|
|
180
|
+
console.error('Could not load logins', loginsResult.reason);
|
|
172
181
|
}
|
|
182
|
+
showPassword =
|
|
183
|
+
!disablePasswordLogin &&
|
|
184
|
+
((logins?.length === 0 && !saml) || (email != undefined && email.length > 0));
|
|
173
185
|
}
|
|
174
186
|
loadLogins();
|
|
175
187
|
$effect(() => {
|
|
@@ -323,7 +335,7 @@ $effect(() => {
|
|
|
323
335
|
</Button>
|
|
324
336
|
{/if}
|
|
325
337
|
</div>
|
|
326
|
-
{#if saml || (logins && logins.length > 0)}
|
|
338
|
+
{#if !disablePasswordLogin && (saml || (logins && logins.length > 0))}
|
|
327
339
|
<div class={classNames('center-center', logins && logins.length > 0 ? 'mt-6' : '')}>
|
|
328
340
|
<Button
|
|
329
341
|
size="xs"
|
|
@@ -337,7 +349,7 @@ $effect(() => {
|
|
|
337
349
|
</div>
|
|
338
350
|
{/if}
|
|
339
351
|
|
|
340
|
-
{#if showPassword}
|
|
352
|
+
{#if showPassword && !disablePasswordLogin}
|
|
341
353
|
<div>
|
|
342
354
|
{#if firstTime}
|
|
343
355
|
<p class="text-xs text-center w-full pb-4 text-secondary">
|
|
@@ -85,7 +85,8 @@ function jobDone(testJob) {
|
|
|
85
85
|
...flowStateStore.val[mod.id],
|
|
86
86
|
previewResult: testJob.result,
|
|
87
87
|
previewSuccess: testJob.success,
|
|
88
|
-
previewJobId: testJob.id
|
|
88
|
+
previewJobId: testJob.id,
|
|
89
|
+
previewLogs: testJob['logs']
|
|
89
90
|
};
|
|
90
91
|
}
|
|
91
92
|
stepHistoryLoader?.resetInitial(mod.id);
|
|
@@ -6,5 +6,5 @@ import { Badge } from './common';
|
|
|
6
6
|
{#snippet text()}
|
|
7
7
|
Library script (no exported main function)
|
|
8
8
|
{/snippet}
|
|
9
|
-
<Badge small color="yellow" baseClass="border
|
|
9
|
+
<Badge small color="yellow" baseClass="border">Library</Badge>
|
|
10
10
|
</Popover>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">import { ChevronDown, ChevronRight } from 'lucide-svelte';
|
|
2
|
+
import { flattenPaths, itemHref, kindLabel } from './offboarding-utils';
|
|
3
|
+
let { title, paths, variant = 'default', description, headerExtra } = $props();
|
|
4
|
+
let expanded = $state(false);
|
|
5
|
+
let isWarning = $derived(variant === 'warning');
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div
|
|
9
|
+
class={isWarning
|
|
10
|
+
? 'bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-700/40 rounded-md p-3'
|
|
11
|
+
: 'bg-surface-secondary rounded-md p-3'}
|
|
12
|
+
>
|
|
13
|
+
<div class="flex items-center justify-between gap-2">
|
|
14
|
+
<button class="flex items-center gap-1 text-left" onclick={() => (expanded = !expanded)}>
|
|
15
|
+
{#if expanded}<ChevronDown size={14} />{:else}<ChevronRight size={14} />{/if}
|
|
16
|
+
<span
|
|
17
|
+
class={isWarning
|
|
18
|
+
? 'text-xs font-medium text-yellow-800 dark:text-yellow-100/90'
|
|
19
|
+
: 'text-xs font-medium text-primary'}>{title}</span
|
|
20
|
+
>
|
|
21
|
+
</button>
|
|
22
|
+
{#if headerExtra}
|
|
23
|
+
{@render headerExtra()}
|
|
24
|
+
{/if}
|
|
25
|
+
</div>
|
|
26
|
+
{#if description}
|
|
27
|
+
<p
|
|
28
|
+
class="{isWarning
|
|
29
|
+
? 'text-yellow-700 dark:text-yellow-100/70'
|
|
30
|
+
: 'text-tertiary'} text-xs mt-1 ml-5"
|
|
31
|
+
>
|
|
32
|
+
{description}
|
|
33
|
+
</p>
|
|
34
|
+
{/if}
|
|
35
|
+
{#if expanded}
|
|
36
|
+
<ul
|
|
37
|
+
class="mt-1.5 ml-5 text-xs {isWarning
|
|
38
|
+
? 'text-yellow-800 dark:text-yellow-100/90'
|
|
39
|
+
: 'text-secondary'} max-h-40 overflow-y-auto flex flex-col gap-0.5"
|
|
40
|
+
>
|
|
41
|
+
{#each flattenPaths(paths) as { kind, path }}
|
|
42
|
+
<li class="flex gap-1.5"
|
|
43
|
+
><span
|
|
44
|
+
class="{isWarning
|
|
45
|
+
? 'text-yellow-600 dark:text-yellow-300'
|
|
46
|
+
: 'text-tertiary'} w-24 shrink-0">{kindLabel(kind)}</span
|
|
47
|
+
>{#if itemHref(kind, path)}<a
|
|
48
|
+
href={itemHref(kind, path)}
|
|
49
|
+
target="_blank"
|
|
50
|
+
class="truncate hover:underline text-blue-500 dark:text-blue-400">{path}</a
|
|
51
|
+
>{:else}<span class="truncate">{path}</span>{/if}</li
|
|
52
|
+
>
|
|
53
|
+
{/each}
|
|
54
|
+
</ul>
|
|
55
|
+
{/if}
|
|
56
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OffboardAffectedPaths } from '../gen';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
type Props = {
|
|
4
|
+
title: string;
|
|
5
|
+
paths: OffboardAffectedPaths;
|
|
6
|
+
variant?: 'default' | 'warning';
|
|
7
|
+
description?: string;
|
|
8
|
+
headerExtra?: Snippet;
|
|
9
|
+
};
|
|
10
|
+
declare const OffboardItemsBox: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type OffboardItemsBox = ReturnType<typeof OffboardItemsBox>;
|
|
12
|
+
export default OffboardItemsBox;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script lang="ts">import Select from './select/Select.svelte';
|
|
2
|
+
import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
3
|
+
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
4
|
+
let { username, targetKind = $bindable(), selectedUser = $bindable(), selectedFolder = $bindable(), selectedOperator = $bindable(), users, folders, showTargetSelector = true, size = 'md' } = $props();
|
|
5
|
+
$effect(() => {
|
|
6
|
+
if (targetKind === 'user' && selectedUser && !selectedOperator) {
|
|
7
|
+
selectedOperator = selectedUser;
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#if showTargetSelector}
|
|
13
|
+
<div class={size === 'sm' ? 'mb-2' : ''}>
|
|
14
|
+
<span
|
|
15
|
+
class={size === 'sm'
|
|
16
|
+
? 'text-xs font-medium text-secondary block mb-1'
|
|
17
|
+
: 'text-sm font-medium text-primary block mb-1.5'}>Move u/{username}/* items to</span
|
|
18
|
+
>
|
|
19
|
+
<ToggleButtonGroup
|
|
20
|
+
selected={targetKind}
|
|
21
|
+
onSelected={(value) => {
|
|
22
|
+
targetKind = value
|
|
23
|
+
}}
|
|
24
|
+
class={size === 'sm' ? 'mb-1.5' : 'mb-2'}
|
|
25
|
+
>
|
|
26
|
+
{#snippet children({ item })}
|
|
27
|
+
<ToggleButton value="user" label="User" small {item} />
|
|
28
|
+
<ToggleButton value="folder" label="Folder" small {item} />
|
|
29
|
+
{/snippet}
|
|
30
|
+
</ToggleButtonGroup>
|
|
31
|
+
{#if targetKind === 'user'}
|
|
32
|
+
<Select items={users} bind:value={selectedUser} placeholder="Select a user..." {size} />
|
|
33
|
+
{:else}
|
|
34
|
+
<Select items={folders} bind:value={selectedFolder} placeholder="Select a folder..." {size} />
|
|
35
|
+
{/if}
|
|
36
|
+
</div>
|
|
37
|
+
{/if}
|
|
38
|
+
|
|
39
|
+
<div>
|
|
40
|
+
<span
|
|
41
|
+
class={size === 'sm'
|
|
42
|
+
? 'text-xs font-medium text-secondary block mb-0.5'
|
|
43
|
+
: 'text-sm font-medium text-primary block mb-1.5'}
|
|
44
|
+
>Update triggers/runnables permissions to</span
|
|
45
|
+
>
|
|
46
|
+
<Select items={users} bind:value={selectedOperator} placeholder="Select a user..." {size} />
|
|
47
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
username: string;
|
|
3
|
+
targetKind: 'user' | 'folder';
|
|
4
|
+
selectedUser: string | undefined;
|
|
5
|
+
selectedFolder: string | undefined;
|
|
6
|
+
selectedOperator: string | undefined;
|
|
7
|
+
users: Array<{
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
}>;
|
|
11
|
+
folders: Array<{
|
|
12
|
+
label: string;
|
|
13
|
+
value: string;
|
|
14
|
+
}>;
|
|
15
|
+
showTargetSelector?: boolean;
|
|
16
|
+
size?: 'sm' | 'md';
|
|
17
|
+
};
|
|
18
|
+
declare const OffboardReassignControls: import("svelte").Component<Props, {}, "targetKind" | "selectedUser" | "selectedFolder" | "selectedOperator">;
|
|
19
|
+
type OffboardReassignControls = ReturnType<typeof OffboardReassignControls>;
|
|
20
|
+
export default OffboardReassignControls;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<script lang="ts">import { Alert, Button } from './common';
|
|
2
|
+
import { ChevronDown, ChevronRight, Download } from 'lucide-svelte';
|
|
3
|
+
import OffboardItemsBox from './OffboardItemsBox.svelte';
|
|
4
|
+
import OffboardReassignControls from './OffboardReassignControls.svelte';
|
|
5
|
+
import { countPaths, pl, downloadCsv, flattenPaths } from './offboarding-utils';
|
|
6
|
+
let { preview, username, deleteUser = true, targetKind = $bindable(), selectedUser = $bindable(), selectedFolder = $bindable(), selectedOperator = $bindable(), users, folders, size = 'md', csvFilename = `offboard-${username}.csv`, instanceLevel = false } = $props();
|
|
7
|
+
let ownedCount = $derived(countPaths(preview.owned));
|
|
8
|
+
let onBehalfCount = $derived(countPaths(preview.executing_on_behalf));
|
|
9
|
+
let referencingCount = $derived(countPaths(preview.referencing));
|
|
10
|
+
function downloadAffectedCsv() {
|
|
11
|
+
if (!preview.referencing)
|
|
12
|
+
return;
|
|
13
|
+
const rows = [['type', 'path']];
|
|
14
|
+
for (const { kind, path } of flattenPaths(preview.referencing)) {
|
|
15
|
+
rows.push([kind, path]);
|
|
16
|
+
}
|
|
17
|
+
downloadCsv(rows, csvFilename);
|
|
18
|
+
}
|
|
19
|
+
let tokensExpanded = $state(false);
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<div class="flex flex-col gap-2">
|
|
23
|
+
{#if ownedCount > 0}
|
|
24
|
+
<OffboardItemsBox title="u/{username}/* items ({ownedCount})" paths={preview.owned} />
|
|
25
|
+
{/if}
|
|
26
|
+
{#if onBehalfCount > 0}
|
|
27
|
+
<OffboardItemsBox
|
|
28
|
+
title="Permissioned as u/{username} ({onBehalfCount})"
|
|
29
|
+
paths={preview.executing_on_behalf}
|
|
30
|
+
/>
|
|
31
|
+
{/if}
|
|
32
|
+
{#if deleteUser && (!instanceLevel || (preview.tokens?.length ?? 0) > 0)}
|
|
33
|
+
<div
|
|
34
|
+
class="bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-700/40 rounded-md p-3"
|
|
35
|
+
>
|
|
36
|
+
{#if (preview.tokens?.length ?? 0) > 0}
|
|
37
|
+
<button
|
|
38
|
+
class="flex items-center gap-1 w-full text-left"
|
|
39
|
+
onclick={() => (tokensExpanded = !tokensExpanded)}
|
|
40
|
+
>
|
|
41
|
+
{#if tokensExpanded}<ChevronDown size={14} />{:else}<ChevronRight size={14} />{/if}
|
|
42
|
+
<span class="text-xs font-medium text-yellow-800 dark:text-yellow-100/90"
|
|
43
|
+
>Tokens ({preview.tokens?.length})</span
|
|
44
|
+
>
|
|
45
|
+
</button>
|
|
46
|
+
<p class="text-xs text-yellow-700 dark:text-yellow-100/70 mt-1 ml-5">
|
|
47
|
+
All workspace tokens for this user will be deleted. This may break webhooks and HTTP
|
|
48
|
+
triggers using these tokens.
|
|
49
|
+
</p>
|
|
50
|
+
{:else}
|
|
51
|
+
<p class="text-xs font-medium text-yellow-800 dark:text-yellow-100/90">Tokens</p>
|
|
52
|
+
<p class="text-xs text-yellow-700 dark:text-yellow-100/70 mt-1">
|
|
53
|
+
All workspace tokens for this user will be deleted. This may break webhooks and HTTP
|
|
54
|
+
triggers using these tokens.
|
|
55
|
+
</p>
|
|
56
|
+
{/if}
|
|
57
|
+
{#if tokensExpanded && (preview.tokens?.length ?? 0) > 0}
|
|
58
|
+
<div
|
|
59
|
+
class="flex flex-col gap-0.5 text-xs text-yellow-800 dark:text-yellow-100/90 mt-1.5 ml-5"
|
|
60
|
+
>
|
|
61
|
+
{#each preview.tokens ?? [] as token}
|
|
62
|
+
<span>{token.label || '(no label)'}: {token.scopes?.join(', ') || '(no scopes)'}</span>
|
|
63
|
+
{/each}
|
|
64
|
+
</div>
|
|
65
|
+
{/if}
|
|
66
|
+
</div>
|
|
67
|
+
{/if}
|
|
68
|
+
{#if referencingCount > 0}
|
|
69
|
+
<OffboardItemsBox
|
|
70
|
+
title="Referencing items ({referencingCount})"
|
|
71
|
+
paths={preview.referencing}
|
|
72
|
+
variant="warning"
|
|
73
|
+
description="These items reference u/{username}/* paths and may break after reassignment. Check them and update manually."
|
|
74
|
+
>
|
|
75
|
+
{#snippet headerExtra()}
|
|
76
|
+
<Button
|
|
77
|
+
variant="subtle"
|
|
78
|
+
size="xs2"
|
|
79
|
+
startIcon={{ icon: Download }}
|
|
80
|
+
onclick={downloadAffectedCsv}>CSV</Button
|
|
81
|
+
>
|
|
82
|
+
{/snippet}
|
|
83
|
+
</OffboardItemsBox>
|
|
84
|
+
{/if}
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
{#if preview.http_triggers > 0 || preview.email_triggers > 0}
|
|
88
|
+
<Alert type="warning" title="Webhook and email trigger URLs will change">
|
|
89
|
+
<p class="text-xs">
|
|
90
|
+
{#if preview.http_triggers > 0}{pl(preview.http_triggers, 'HTTP trigger')} will have new webhook
|
|
91
|
+
URLs.
|
|
92
|
+
{/if}
|
|
93
|
+
{#if preview.email_triggers > 0}{pl(preview.email_triggers, 'email trigger')} will have new addresses.
|
|
94
|
+
{/if}
|
|
95
|
+
Update any external integrations that reference these endpoints.
|
|
96
|
+
</p>
|
|
97
|
+
</Alert>
|
|
98
|
+
{/if}
|
|
99
|
+
|
|
100
|
+
<OffboardReassignControls
|
|
101
|
+
{username}
|
|
102
|
+
bind:targetKind
|
|
103
|
+
bind:selectedUser
|
|
104
|
+
bind:selectedFolder
|
|
105
|
+
bind:selectedOperator
|
|
106
|
+
{users}
|
|
107
|
+
{folders}
|
|
108
|
+
showTargetSelector={ownedCount > 0 || onBehalfCount > 0}
|
|
109
|
+
{size}
|
|
110
|
+
/>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OffboardPreview } from '../gen/types.gen';
|
|
2
|
+
type Props = {
|
|
3
|
+
preview: OffboardPreview;
|
|
4
|
+
username: string;
|
|
5
|
+
deleteUser?: boolean;
|
|
6
|
+
targetKind: 'user' | 'folder';
|
|
7
|
+
selectedUser: string | undefined;
|
|
8
|
+
selectedFolder: string | undefined;
|
|
9
|
+
selectedOperator: string | undefined;
|
|
10
|
+
users: Array<{
|
|
11
|
+
label: string;
|
|
12
|
+
value: string;
|
|
13
|
+
}>;
|
|
14
|
+
folders: Array<{
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}>;
|
|
18
|
+
size?: 'sm' | 'md';
|
|
19
|
+
csvFilename?: string;
|
|
20
|
+
instanceLevel?: boolean;
|
|
21
|
+
};
|
|
22
|
+
declare const OffboardWorkspaceSection: import("svelte").Component<Props, {}, "targetKind" | "selectedUser" | "selectedFolder" | "selectedOperator">;
|
|
23
|
+
type OffboardWorkspaceSection = ReturnType<typeof OffboardWorkspaceSection>;
|
|
24
|
+
export default OffboardWorkspaceSection;
|
|
@@ -19,7 +19,7 @@ import Modal from './common/modal/Modal.svelte';
|
|
|
19
19
|
import { userStore } from '../stores';
|
|
20
20
|
import { UserService } from '../gen';
|
|
21
21
|
import TextInput from './text_input/TextInput.svelte';
|
|
22
|
-
let { targetWorkspace, targetValue, selected, onSelect, kind, canPreserve, customValue, isDeployment = true } = $props();
|
|
22
|
+
let { targetWorkspace, targetValue, selected, onSelect, kind, canPreserve, customValue, isDeployment = true, folderDefault = undefined } = $props();
|
|
23
23
|
const isTrigger = $derived(kind === 'trigger');
|
|
24
24
|
let label = $derived(isTrigger
|
|
25
25
|
? 'Set the user this will be permissioned as:'
|
|
@@ -62,12 +62,22 @@ let filteredUsers = $derived(searchQuery
|
|
|
62
62
|
(u.name?.toLowerCase()?.includes(q) ?? false));
|
|
63
63
|
})
|
|
64
64
|
: activeUsers);
|
|
65
|
-
// Preselect "target" when available and user has permission to preserve
|
|
65
|
+
// Preselect "target" when available and user has permission to preserve.
|
|
66
|
+
// When no target is set but a folder default is, preselect that as a custom value.
|
|
67
|
+
// We track `users.length` so the effect re-runs once the async user list loads.
|
|
66
68
|
$effect(() => {
|
|
67
|
-
if (selected
|
|
69
|
+
if (selected !== undefined || !canPreserve)
|
|
70
|
+
return;
|
|
71
|
+
if (targetValue) {
|
|
68
72
|
onSelect('target');
|
|
69
73
|
}
|
|
74
|
+
else if (folderDefault && users.length > 0) {
|
|
75
|
+
const username = folderDefault.startsWith('u/') ? folderDefault.slice(2) : folderDefault;
|
|
76
|
+
const email = users.find((u) => u.username === username)?.email ?? folderDefault;
|
|
77
|
+
onSelect('custom', { email, permissionedAs: folderDefault });
|
|
78
|
+
}
|
|
70
79
|
});
|
|
80
|
+
const isFolderDefaultSelected = $derived(selected === 'custom' && folderDefault !== undefined && customValue === folderDefault);
|
|
71
81
|
function openModal() {
|
|
72
82
|
loadUsers();
|
|
73
83
|
searchQuery = '';
|
|
@@ -95,6 +105,14 @@ let selectedDisplayName = $derived.by(() => {
|
|
|
95
105
|
{#if selectedDisplayName}
|
|
96
106
|
<span class="text-xs truncate max-w-24">{selectedDisplayName}</span>
|
|
97
107
|
{/if}
|
|
108
|
+
{#if isFolderDefaultSelected}
|
|
109
|
+
<span
|
|
110
|
+
class="text-[10px] px-1 py-0.5 rounded bg-blue-50 dark:bg-blue-950/50 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-900"
|
|
111
|
+
title="From this folder's default_permissioned_as rule"
|
|
112
|
+
>
|
|
113
|
+
folder default
|
|
114
|
+
</span>
|
|
115
|
+
{/if}
|
|
98
116
|
</span>
|
|
99
117
|
{/snippet}
|
|
100
118
|
{#snippet content({ close: closePopover })}
|
|
@@ -25,6 +25,13 @@ interface Props {
|
|
|
25
25
|
customValue?: string | undefined;
|
|
26
26
|
/** When false, labels say "current" instead of "target" and modal text refers to "this workspace" */
|
|
27
27
|
isDeployment?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Folder default permissioned_as for this item path — resolved by the parent via
|
|
30
|
+
* `useFolderDefaultPermissionedAs`. When set and no explicit choice has been made,
|
|
31
|
+
* the selector preselects `'custom'` with this value and shows a "folder default"
|
|
32
|
+
* badge so the user sees where the value came from.
|
|
33
|
+
*/
|
|
34
|
+
folderDefault?: string | undefined;
|
|
28
35
|
}
|
|
29
36
|
declare const OnBehalfOfSelector: import("svelte").Component<Props, {}, "">;
|
|
30
37
|
type OnBehalfOfSelector = ReturnType<typeof OnBehalfOfSelector>;
|
|
@@ -7,13 +7,12 @@ import MultiSelect from './select/MultiSelect.svelte';
|
|
|
7
7
|
import { Plus, Edit3, Save, X, Trash, ExternalLink } from 'lucide-svelte';
|
|
8
8
|
import { sendUserToast } from '../toast';
|
|
9
9
|
import { twMerge } from 'tailwind-merge';
|
|
10
|
-
import { ConfigService } from '../gen';
|
|
10
|
+
import { ConfigService, SettingService } from '../gen';
|
|
11
11
|
import Tooltip from './Tooltip.svelte';
|
|
12
12
|
import Badge from './common/badge/Badge.svelte';
|
|
13
13
|
import { enterpriseLicense } from '../stores';
|
|
14
14
|
let queueAlertConfig = $state([]);
|
|
15
15
|
let availableTags = $state([]);
|
|
16
|
-
let configName = 'alert__job_queue_waiting';
|
|
17
16
|
let editingRowIndex = $state(-1);
|
|
18
17
|
let editForm = $state({
|
|
19
18
|
tags_to_monitor: [],
|
|
@@ -37,7 +36,7 @@ onMount(async () => {
|
|
|
37
36
|
});
|
|
38
37
|
async function fetchConfig() {
|
|
39
38
|
try {
|
|
40
|
-
const response = await
|
|
39
|
+
const response = await SettingService.getGlobal({ key: 'alert_job_queue_waiting' });
|
|
41
40
|
queueAlertConfig = response?.alerts || [];
|
|
42
41
|
expandedTagRows = [];
|
|
43
42
|
}
|
|
@@ -47,11 +46,12 @@ async function fetchConfig() {
|
|
|
47
46
|
}
|
|
48
47
|
async function fetchWorkerTags() {
|
|
49
48
|
try {
|
|
50
|
-
const response = await ConfigService.
|
|
49
|
+
const response = await ConfigService.listWorkerGroups();
|
|
51
50
|
const workerTagsSet = new Set();
|
|
52
|
-
response.forEach((
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
response.forEach((wg) => {
|
|
52
|
+
const config = wg.config;
|
|
53
|
+
if (Array.isArray(config?.worker_tags)) {
|
|
54
|
+
config.worker_tags.forEach((tag) => workerTagsSet.add(tag));
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
57
|
return Array.from(workerTagsSet);
|
|
@@ -163,9 +163,9 @@ async function addNewAlert() {
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
async function saveQueueAlertConfig() {
|
|
166
|
-
await
|
|
167
|
-
|
|
168
|
-
requestBody: { alerts: queueAlertConfig }
|
|
166
|
+
await SettingService.setGlobal({
|
|
167
|
+
key: 'alert_job_queue_waiting',
|
|
168
|
+
requestBody: { value: { alerts: queueAlertConfig } }
|
|
169
169
|
});
|
|
170
170
|
}
|
|
171
171
|
function safeSelectItems(items) {
|
|
@@ -70,9 +70,9 @@ async function loadResources(resourceType) {
|
|
|
70
70
|
}));
|
|
71
71
|
if (datatableAsPgResource && resourceType === 'postgresql') {
|
|
72
72
|
try {
|
|
73
|
-
const datatables = await WorkspaceService.listDataTables({
|
|
73
|
+
const datatables = (await WorkspaceService.listDataTables({
|
|
74
74
|
workspace: effectiveWorkspace
|
|
75
|
-
});
|
|
75
|
+
})).map((d) => d.name);
|
|
76
76
|
for (const dt of datatables) {
|
|
77
77
|
nc.push({
|
|
78
78
|
value: `datatable://${dt}`,
|