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
|
@@ -12,7 +12,7 @@ import { deepEqual } from 'fast-equals';
|
|
|
12
12
|
import { inputBaseClass, inputBorderClass, inputSizeClasses } from '../text_input/TextInput.svelte';
|
|
13
13
|
import { ButtonType } from '../common/button/model';
|
|
14
14
|
import Tooltip from '../Tooltip.svelte';
|
|
15
|
-
let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, error = false, autofocus, RightIcon, createText, noItemsMsg, tooltip, open = $bindable(false), id, itemLabelWrapperClasses, itemButtonWrapperClasses, size = 'md', showPlaceholderOnOpen = false, transformInputSelectedText, groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem, startSnippet, endSnippet, bottomSnippet } = $props();
|
|
15
|
+
let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, error = false, autofocus, RightIcon, createText, noItemsMsg, tooltip, open = $bindable(false), id, itemLabelWrapperClasses, itemButtonWrapperClasses, size = 'md', showPlaceholderOnOpen = false, dropdownClass, transformInputSelectedText, groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem, startSnippet, endSnippet, bottomSnippet } = $props();
|
|
16
16
|
let disabled = $derived(_disabled || (loading && !value));
|
|
17
17
|
let iconSize = $derived(ButtonType.UnifiedIconSizes[size]);
|
|
18
18
|
let inputEl = $state();
|
|
@@ -120,6 +120,7 @@ let inputText = $derived.by(() => {
|
|
|
120
120
|
{id}
|
|
121
121
|
/>
|
|
122
122
|
<SelectDropdown
|
|
123
|
+
class={dropdownClass}
|
|
123
124
|
{disablePortal}
|
|
124
125
|
onSelectValue={setValue}
|
|
125
126
|
{open}
|
|
@@ -31,6 +31,7 @@ declare function $$render<Item extends {
|
|
|
31
31
|
itemButtonWrapperClasses?: string;
|
|
32
32
|
size?: "sm" | "md" | "lg";
|
|
33
33
|
showPlaceholderOnOpen?: boolean;
|
|
34
|
+
dropdownClass?: string;
|
|
34
35
|
transformInputSelectedText?: (text: string, value: Item["value"]) => string;
|
|
35
36
|
groupBy?: (item: Item) => string;
|
|
36
37
|
sortBy?: (a: Item, b: Item) => number;
|
|
@@ -9,13 +9,15 @@ import ScopeSelector from './ScopeSelector.svelte';
|
|
|
9
9
|
import McpScopeSelector from '../mcp/McpScopeSelector.svelte';
|
|
10
10
|
import TextInput from '../text_input/TextInput.svelte';
|
|
11
11
|
import Select from '../select/Select.svelte';
|
|
12
|
-
let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined), displayCreateToken = true } = $props();
|
|
12
|
+
let { showMcpMode = false, openWithMcpMode = false, mcpOnly = false, lockWorkspace = false, title = 'Add a new token', defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined), displayCreateToken = true } = $props();
|
|
13
13
|
let newToken = $state(undefined);
|
|
14
14
|
let newMcpToken = $state(undefined);
|
|
15
15
|
let newTokenExpiration = $state(undefined);
|
|
16
16
|
let newTokenWorkspace = $state(untrack(() => defaultNewTokenWorkspace));
|
|
17
17
|
let mcpCreationMode = $state(false);
|
|
18
18
|
let mcpScope = $state('mcp:favorites');
|
|
19
|
+
let lastRequestedMcpMode = $state(undefined);
|
|
20
|
+
let mcpLabelAutofilled = $state(false);
|
|
19
21
|
let customScopes = $state([]);
|
|
20
22
|
let showCustomScopes = $state(false);
|
|
21
23
|
function ensureCurrentWorkspaceIncluded(workspacesList, currentWorkspace) {
|
|
@@ -28,6 +30,30 @@ function ensureCurrentWorkspaceIncluded(workspacesList, currentWorkspace) {
|
|
|
28
30
|
}
|
|
29
31
|
return [{ id: currentWorkspace, name: currentWorkspace }, ...workspacesList];
|
|
30
32
|
}
|
|
33
|
+
function enterMcpMode() {
|
|
34
|
+
mcpCreationMode = true;
|
|
35
|
+
newTokenExpiration = undefined;
|
|
36
|
+
newTokenWorkspace = defaultNewTokenWorkspace ?? $workspaceStore;
|
|
37
|
+
newToken = undefined;
|
|
38
|
+
newMcpToken = undefined;
|
|
39
|
+
if (!newTokenLabel) {
|
|
40
|
+
newTokenLabel = 'MCP token';
|
|
41
|
+
mcpLabelAutofilled = true;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
mcpLabelAutofilled = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function exitMcpMode() {
|
|
48
|
+
mcpCreationMode = false;
|
|
49
|
+
newTokenExpiration = undefined;
|
|
50
|
+
newTokenWorkspace = defaultNewTokenWorkspace;
|
|
51
|
+
newMcpToken = undefined;
|
|
52
|
+
if (mcpLabelAutofilled) {
|
|
53
|
+
newTokenLabel = undefined;
|
|
54
|
+
}
|
|
55
|
+
mcpLabelAutofilled = false;
|
|
56
|
+
}
|
|
31
57
|
async function createToken(mcpMode = false) {
|
|
32
58
|
try {
|
|
33
59
|
let date;
|
|
@@ -50,13 +76,17 @@ async function createToken(mcpMode = false) {
|
|
|
50
76
|
}
|
|
51
77
|
});
|
|
52
78
|
if (mcpMode) {
|
|
79
|
+
newToken = undefined;
|
|
53
80
|
newMcpToken = `${createdToken}`;
|
|
54
81
|
}
|
|
55
82
|
else {
|
|
83
|
+
newMcpToken = undefined;
|
|
56
84
|
newToken = `${createdToken}`;
|
|
57
85
|
}
|
|
58
|
-
onTokenCreated(
|
|
59
|
-
|
|
86
|
+
onTokenCreated(`${createdToken}`);
|
|
87
|
+
if (!mcpOnly) {
|
|
88
|
+
mcpCreationMode = false;
|
|
89
|
+
}
|
|
60
90
|
}
|
|
61
91
|
catch (err) {
|
|
62
92
|
console.error('Failed to create token:', err);
|
|
@@ -64,13 +94,31 @@ async function createToken(mcpMode = false) {
|
|
|
64
94
|
}
|
|
65
95
|
const workspaces = $derived(ensureCurrentWorkspaceIncluded($userWorkspaces, $workspaceStore));
|
|
66
96
|
const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorkspace}/mcp?token=`);
|
|
97
|
+
$effect(() => {
|
|
98
|
+
const requestedMcpMode = mcpOnly || openWithMcpMode;
|
|
99
|
+
if (requestedMcpMode === lastRequestedMcpMode) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (requestedMcpMode) {
|
|
103
|
+
enterMcpMode();
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
exitMcpMode();
|
|
107
|
+
}
|
|
108
|
+
lastRequestedMcpMode = requestedMcpMode;
|
|
109
|
+
});
|
|
110
|
+
$effect(() => {
|
|
111
|
+
if (mcpLabelAutofilled && newTokenLabel !== 'MCP token') {
|
|
112
|
+
mcpLabelAutofilled = false;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
67
115
|
</script>
|
|
68
116
|
|
|
69
117
|
<div>
|
|
70
118
|
<div class="p-4 rounded-md mb-6 min-w-min bg-surface-tertiary">
|
|
71
|
-
<h3 class="pb-2 font-semibold text-emphasis text-sm">
|
|
119
|
+
<h3 class="pb-2 font-semibold text-emphasis text-sm">{title}</h3>
|
|
72
120
|
|
|
73
|
-
{#if showMcpMode}
|
|
121
|
+
{#if showMcpMode && !mcpOnly}
|
|
74
122
|
<div
|
|
75
123
|
class="mb-4 flex flex-row flex-shrink-0"
|
|
76
124
|
use:triggerableByAI={{
|
|
@@ -80,15 +128,10 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
|
|
|
80
128
|
>
|
|
81
129
|
<Toggle
|
|
82
130
|
on:change={(e) => {
|
|
83
|
-
mcpCreationMode = e.detail
|
|
84
131
|
if (e.detail) {
|
|
85
|
-
|
|
86
|
-
newTokenExpiration = undefined
|
|
87
|
-
newTokenWorkspace = $workspaceStore
|
|
132
|
+
enterMcpMode()
|
|
88
133
|
} else {
|
|
89
|
-
|
|
90
|
-
newTokenExpiration = undefined
|
|
91
|
-
newTokenWorkspace = defaultNewTokenWorkspace
|
|
134
|
+
exitMcpMode()
|
|
92
135
|
}
|
|
93
136
|
}}
|
|
94
137
|
checked={mcpCreationMode}
|
|
@@ -133,70 +176,76 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
|
|
|
133
176
|
{/if}
|
|
134
177
|
|
|
135
178
|
<div class="mt-2 grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
179
|
+
{#if mcpCreationMode}
|
|
180
|
+
<div class="col-span-2">
|
|
181
|
+
<McpScopeSelector
|
|
182
|
+
workspaceId={newTokenWorkspace || $workspaceStore || ''}
|
|
183
|
+
bind:scope={mcpScope}
|
|
184
|
+
/>
|
|
185
|
+
</div>
|
|
143
186
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
187
|
+
{#if !lockWorkspace}
|
|
188
|
+
<div>
|
|
189
|
+
<span class="block mb-1 text-emphasis text-xs font-semibold">Workspace</span>
|
|
190
|
+
<Select
|
|
191
|
+
bind:value={newTokenWorkspace}
|
|
192
|
+
items={workspaces.map((w) => ({ label: w.name, value: w.id, subtitle: w.id }))}
|
|
193
|
+
/>
|
|
194
|
+
</div>
|
|
195
|
+
{/if}
|
|
196
|
+
{/if}
|
|
152
197
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
198
|
+
{#if !mcpOnly}
|
|
199
|
+
<div>
|
|
200
|
+
<span class="block mb-1 text-emphasis text-xs font-semibold"
|
|
201
|
+
>Label <span class="text-xs text-primary">(optional)</span></span
|
|
202
|
+
>
|
|
203
|
+
<TextInput inputProps={{ type: 'text' }} bind:value={newTokenLabel} class="w-full" />
|
|
204
|
+
</div>
|
|
205
|
+
{/if}
|
|
159
206
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
207
|
+
{#if !mcpCreationMode}
|
|
208
|
+
<div>
|
|
209
|
+
<span class="block mb-1 text-xs text-emphasis font-semibold"
|
|
210
|
+
>Expires In <span class="text-xs text-primary">(optional)</span></span
|
|
211
|
+
>
|
|
212
|
+
<Select
|
|
213
|
+
bind:value={newTokenExpiration}
|
|
214
|
+
placeholder="No expiration"
|
|
215
|
+
inputClass="w-full"
|
|
216
|
+
items={[
|
|
217
|
+
{ label: 'No expiration', value: undefined },
|
|
218
|
+
{ label: '15 minutes', value: 15 * 60 },
|
|
219
|
+
{ label: '30 minutes', value: 30 * 60 },
|
|
220
|
+
{ label: '1 hour', value: 1 * 60 * 60 },
|
|
221
|
+
{ label: '1 day', value: 1 * 24 * 60 * 60 },
|
|
222
|
+
{ label: '7 days', value: 7 * 24 * 60 * 60 },
|
|
223
|
+
{ label: '30 days', value: 30 * 24 * 60 * 60 },
|
|
224
|
+
{ label: '90 days', value: 90 * 24 * 60 * 60 }
|
|
225
|
+
]}
|
|
226
|
+
/>
|
|
227
|
+
</div>
|
|
228
|
+
{/if}
|
|
182
229
|
</div>
|
|
183
230
|
|
|
184
231
|
<div class="mt-4 flex justify-end gap-2 flex-row">
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
232
|
+
{#if !mcpOnly}
|
|
233
|
+
<Button
|
|
234
|
+
on:click={() => {
|
|
235
|
+
exitMcpMode()
|
|
236
|
+
}}
|
|
237
|
+
variant="default"
|
|
238
|
+
>
|
|
239
|
+
Cancel
|
|
240
|
+
</Button>
|
|
241
|
+
{/if}
|
|
193
242
|
<Button
|
|
194
243
|
on:click={() => createToken(mcpCreationMode)}
|
|
195
244
|
disabled={mcpCreationMode &&
|
|
196
245
|
(newTokenWorkspace == undefined || !mcpScope || mcpScope.trim().length === 0)}
|
|
197
246
|
variant="accent"
|
|
198
247
|
>
|
|
199
|
-
New token
|
|
248
|
+
{mcpCreationMode ? 'Generate MCP URL' : 'New token'}
|
|
200
249
|
</Button>
|
|
201
250
|
</div>
|
|
202
251
|
</div>
|
|
@@ -19,10 +19,14 @@ import SearchItems from '../SearchItems.svelte';
|
|
|
19
19
|
import Cell from '../table/Cell.svelte';
|
|
20
20
|
import Row from '../table/Row.svelte';
|
|
21
21
|
import ConfirmationModal from '../common/confirmationModal/ConfirmationModal.svelte';
|
|
22
|
+
import UserOffboardingModal from '../UserOffboardingModal.svelte';
|
|
22
23
|
import { isCloudHosted } from '../../cloud';
|
|
23
24
|
import { truncate } from '../../utils';
|
|
24
25
|
import { onDestroy, untrack } from 'svelte';
|
|
25
26
|
import { goto } from '../../navigation';
|
|
27
|
+
import { ArrowRightLeft } from 'lucide-svelte';
|
|
28
|
+
let offboardingUser = $state(undefined);
|
|
29
|
+
let offboardingReassignOnly = $state(false);
|
|
26
30
|
let users = $state(undefined);
|
|
27
31
|
let invites = $state([]);
|
|
28
32
|
let filteredUsers = $state(undefined);
|
|
@@ -219,7 +223,6 @@ onDestroy(() => {
|
|
|
219
223
|
console.warn(e);
|
|
220
224
|
}
|
|
221
225
|
});
|
|
222
|
-
let deleteConfirmedCallback = $state(undefined);
|
|
223
226
|
let removeInstanceGroupConfirmedCallback = $state(undefined);
|
|
224
227
|
let convertConfirmedCallback = $state(undefined);
|
|
225
228
|
// Auto-add/invite confirmation modal states
|
|
@@ -896,14 +899,8 @@ const isAdminsWorkspaceWithoutEE = $derived($workspaceStore === 'admins' && !$en
|
|
|
896
899
|
destructive
|
|
897
900
|
{disabled}
|
|
898
901
|
onClick={() => {
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
workspace: $workspaceStore ?? '',
|
|
902
|
-
username
|
|
903
|
-
})
|
|
904
|
-
sendUserToast('User removed')
|
|
905
|
-
listUsers()
|
|
906
|
-
}
|
|
902
|
+
offboardingUser = username
|
|
903
|
+
offboardingReassignOnly = false
|
|
907
904
|
}}
|
|
908
905
|
startIcon={{ icon: UserMinus }}
|
|
909
906
|
>
|
|
@@ -932,7 +929,20 @@ const isAdminsWorkspaceWithoutEE = $derived($workspaceStore === 'admins' && !$en
|
|
|
932
929
|
Convert
|
|
933
930
|
</Button>
|
|
934
931
|
{:else}
|
|
935
|
-
|
|
932
|
+
<div class="flex items-center gap-1">
|
|
933
|
+
<Button
|
|
934
|
+
unifiedSize="sm"
|
|
935
|
+
variant="subtle"
|
|
936
|
+
onClick={() => {
|
|
937
|
+
offboardingUser = username
|
|
938
|
+
offboardingReassignOnly = true
|
|
939
|
+
}}
|
|
940
|
+
startIcon={{ icon: ArrowRightLeft }}
|
|
941
|
+
>
|
|
942
|
+
Reassign
|
|
943
|
+
</Button>
|
|
944
|
+
{@render removeUserButton(false)}
|
|
945
|
+
</div>
|
|
936
946
|
{/if}
|
|
937
947
|
</div>
|
|
938
948
|
</Cell>
|
|
@@ -1073,24 +1083,20 @@ const isAdminsWorkspaceWithoutEE = $derived($workspaceStore === 'admins' && !$en
|
|
|
1073
1083
|
{/if}
|
|
1074
1084
|
</Section>
|
|
1075
1085
|
{/if}
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
<div class="flex flex-col w-full space-y-4">
|
|
1091
|
-
<span>Are you sure you want to remove ?</span>
|
|
1092
|
-
</div>
|
|
1093
|
-
</ConfirmationModal>
|
|
1086
|
+
{#if offboardingUser}
|
|
1087
|
+
<UserOffboardingModal
|
|
1088
|
+
open={offboardingUser != null}
|
|
1089
|
+
username={offboardingUser}
|
|
1090
|
+
reassignOnly={offboardingReassignOnly}
|
|
1091
|
+
onClose={() => {
|
|
1092
|
+
offboardingUser = undefined
|
|
1093
|
+
}}
|
|
1094
|
+
onComplete={() => {
|
|
1095
|
+
offboardingUser = undefined
|
|
1096
|
+
listUsers()
|
|
1097
|
+
}}
|
|
1098
|
+
/>
|
|
1099
|
+
{/if}
|
|
1094
1100
|
|
|
1095
1101
|
<div class="[&>div]:!z-[5002]">
|
|
1096
1102
|
<ConfirmationModal
|
|
@@ -8,6 +8,7 @@ import DiscordIcon from '../icons/brands/Discord.svelte';
|
|
|
8
8
|
import { WorkspaceService } from '../../gen';
|
|
9
9
|
import { sendUserToast } from '../../toast';
|
|
10
10
|
import { clearStores } from '../../storeUtils';
|
|
11
|
+
import Toggle from '../Toggle.svelte';
|
|
11
12
|
import { goto } from '../../navigation';
|
|
12
13
|
import ConfirmationModal from '../common/confirmationModal/ConfirmationModal.svelte';
|
|
13
14
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -30,8 +31,39 @@ async function leaveWorkspace() {
|
|
|
30
31
|
clearStores();
|
|
31
32
|
goto('/user/workspaces');
|
|
32
33
|
}
|
|
34
|
+
let forkedDatatables = $state([]);
|
|
35
|
+
async function loadForkedDatatables() {
|
|
36
|
+
if (!$workspaceStore)
|
|
37
|
+
return;
|
|
38
|
+
try {
|
|
39
|
+
const settings = await WorkspaceService.getSettings({ workspace: $workspaceStore });
|
|
40
|
+
const datatables = settings.datatable?.datatables ?? {};
|
|
41
|
+
forkedDatatables = Object.entries(datatables)
|
|
42
|
+
.filter(([_, dt]) => dt.forked_from != null)
|
|
43
|
+
.map(([name, dt]) => ({
|
|
44
|
+
name,
|
|
45
|
+
resourceType: dt.database.resource_type ?? 'instance',
|
|
46
|
+
resourcePath: dt.database.resource_path ?? '',
|
|
47
|
+
dropOnDelete: true
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
forkedDatatables = [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
33
54
|
async function deleteFork() {
|
|
34
|
-
|
|
55
|
+
const workspace = $workspaceStore ?? '';
|
|
56
|
+
const dbsToDrop = forkedDatatables.filter((dt) => dt.dropOnDelete).map((dt) => dt.name);
|
|
57
|
+
if (dbsToDrop.length > 0) {
|
|
58
|
+
const errors = await WorkspaceService.dropForkedDatatableDatabases({
|
|
59
|
+
workspace,
|
|
60
|
+
requestBody: { datatable_names: dbsToDrop }
|
|
61
|
+
});
|
|
62
|
+
for (const err of errors) {
|
|
63
|
+
sendUserToast(err, true);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
await WorkspaceService.deleteWorkspace({ workspace });
|
|
35
67
|
sendUserToast('You deleted the workspace');
|
|
36
68
|
clearStores();
|
|
37
69
|
goto('/user/workspaces');
|
|
@@ -359,7 +391,8 @@ let secondaryMenuLinks = $derived([
|
|
|
359
391
|
? [
|
|
360
392
|
{
|
|
361
393
|
label: 'Delete Forked Workspace',
|
|
362
|
-
action: () => {
|
|
394
|
+
action: async () => {
|
|
395
|
+
await loadForkedDatatables();
|
|
363
396
|
deleteWorkspaceForkModal = true;
|
|
364
397
|
},
|
|
365
398
|
icon: Trash2,
|
|
@@ -675,6 +708,29 @@ let secondaryMenuLinks = $derived([
|
|
|
675
708
|
>
|
|
676
709
|
<div class="flex flex-col w-full space-y-4">
|
|
677
710
|
<span>Are you sure you want to delete this workspace fork? (deleting {$workspaceStore})</span>
|
|
711
|
+
{#if forkedDatatables.length > 0}
|
|
712
|
+
<div class="border rounded-md divide-y">
|
|
713
|
+
<div class="px-4 py-2 text-xs font-semibold text-secondary"> Forked databases </div>
|
|
714
|
+
{#each forkedDatatables as dt}
|
|
715
|
+
<div class="flex items-center justify-between px-4 py-2">
|
|
716
|
+
<div class="flex flex-col">
|
|
717
|
+
<span class="text-xs font-medium text-secondary">{dt.name}</span>
|
|
718
|
+
<span class="text-3xs text-hint">
|
|
719
|
+
{dt.resourceType === 'instance'
|
|
720
|
+
? dt.resourcePath
|
|
721
|
+
: `${$workspaceStore?.replace(/-/g, '_')}__${dt.name}`}
|
|
722
|
+
</span>
|
|
723
|
+
</div>
|
|
724
|
+
<Toggle
|
|
725
|
+
class="shrink-0"
|
|
726
|
+
size="xs"
|
|
727
|
+
bind:checked={dt.dropOnDelete}
|
|
728
|
+
options={{ right: 'Drop database' }}
|
|
729
|
+
/>
|
|
730
|
+
</div>
|
|
731
|
+
{/each}
|
|
732
|
+
</div>
|
|
733
|
+
{/if}
|
|
678
734
|
</div>
|
|
679
735
|
</ConfirmationModal>
|
|
680
736
|
{/if}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts">import { isPremiumStore, superadmin, userStore, userWorkspaces, workspaceStore, workspaceUsageStore, workspaceColor, clearWorkspaceFromStorage } from '../../stores';
|
|
1
|
+
<script lang="ts">import { isPremiumStore, superadmin, userStore, userWorkspaces, workspaceStore, workspaceUsageStore, workspaceColor, clearWorkspaceFromStorage, globalForkModal } from '../../stores';
|
|
2
2
|
import { isRuleActive } from '../../workspaceProtectionRules.svelte';
|
|
3
3
|
import { Building, Plus, Settings, GitFork } from 'lucide-svelte';
|
|
4
4
|
import MenuButton from './MenuButton.svelte';
|
|
@@ -63,7 +63,7 @@ const groupedWorkspaces = $derived.by(() => {
|
|
|
63
63
|
return [];
|
|
64
64
|
return buildWorkspaceHierarchy($userWorkspaces);
|
|
65
65
|
});
|
|
66
|
-
const itemClass = 'text-primary flex flex-row gap-2 px-4 py-2 text-xs hover:bg-surface-hover hover:text-primary data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary';
|
|
66
|
+
const itemClass = 'text-primary w-full flex flex-row gap-2 px-4 py-2 text-xs hover:bg-surface-hover hover:text-primary data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary';
|
|
67
67
|
</script>
|
|
68
68
|
|
|
69
69
|
<Menu {createMenu} usePointerDownOutside>
|
|
@@ -155,9 +155,13 @@ const itemClass = 'text-primary flex flex-row gap-2 px-4 py-2 text-xs hover:bg-s
|
|
|
155
155
|
</MenuItem>
|
|
156
156
|
</div>
|
|
157
157
|
{/if}
|
|
158
|
-
{#if !strictWorkspaceSelect && !isCloudHosted() && !isRuleActive('DisableWorkspaceForking')}
|
|
158
|
+
{#if !strictWorkspaceSelect && !isCloudHosted() && !isRuleActive('DisableWorkspaceForking') && $workspaceStore !== 'admins'}
|
|
159
159
|
<div class="py-1" role="none">
|
|
160
|
-
<MenuItem
|
|
160
|
+
<MenuItem
|
|
161
|
+
class={itemClass}
|
|
162
|
+
{item}
|
|
163
|
+
onClick={() => (globalForkModal.val = { opened: true })}
|
|
164
|
+
>
|
|
161
165
|
<GitFork size={16} />
|
|
162
166
|
Fork current workspace
|
|
163
167
|
</MenuItem>
|
|
@@ -10,14 +10,19 @@ let dropdown;
|
|
|
10
10
|
const cloudHosted = isCloudHosted();
|
|
11
11
|
let nextcloudAvailable = $state(false);
|
|
12
12
|
let googleAvailable = $state(false);
|
|
13
|
+
let githubAvailable = $state(false);
|
|
13
14
|
async function setNextcloudState() {
|
|
14
15
|
nextcloudAvailable = await isServiceAvailable('nextcloud', $workspaceStore);
|
|
15
16
|
}
|
|
16
17
|
async function setGoogleState() {
|
|
17
18
|
googleAvailable = await isServiceAvailable('google', $workspaceStore);
|
|
18
19
|
}
|
|
20
|
+
async function setGithubState() {
|
|
21
|
+
githubAvailable = await isServiceAvailable('github', $workspaceStore);
|
|
22
|
+
}
|
|
19
23
|
setNextcloudState();
|
|
20
24
|
setGoogleState();
|
|
25
|
+
setGithubState();
|
|
21
26
|
const addTriggerItems = $derived([
|
|
22
27
|
{
|
|
23
28
|
displayName: 'Schedule',
|
|
@@ -93,6 +98,12 @@ const addTriggerItems = $derived([
|
|
|
93
98
|
action: () => onAddDraftTrigger?.('google'),
|
|
94
99
|
icon: triggerIconMap.google,
|
|
95
100
|
hidden: !googleAvailable
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
displayName: 'GitHub',
|
|
104
|
+
action: () => onAddDraftTrigger?.('github'),
|
|
105
|
+
icon: triggerIconMap.github,
|
|
106
|
+
hidden: !githubAvailable
|
|
96
107
|
}
|
|
97
108
|
].filter((item) => !item.hidden));
|
|
98
109
|
let triggersButtonWidth = $state(0);
|
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
<script lang="ts">import OnBehalfOfSelector, {} from '../OnBehalfOfSelector.svelte';
|
|
2
|
+
import { useFolderDefaultPermissionedAs } from '../useFolderDefaultPermissionedAs.svelte';
|
|
2
3
|
import { userStore, workspaceStore } from '../../stores';
|
|
3
4
|
import { AlertTriangle } from 'lucide-svelte';
|
|
4
|
-
let { permissionedAs, onPermissionedAsChange } = $props();
|
|
5
|
+
let { permissionedAs, onPermissionedAsChange, path = undefined } = $props();
|
|
5
6
|
const canPreserve = $derived($userStore?.is_admin || ($userStore?.groups ?? []).includes('wm_deployers'));
|
|
6
7
|
const myPermissionedAs = $derived($userStore?.username ? `u/${$userStore.username}` : undefined);
|
|
8
|
+
const folderDefault = useFolderDefaultPermissionedAs(() => path);
|
|
7
9
|
let onBehalfOfChoice = $state(undefined);
|
|
8
10
|
let customPermissionedAs = $state(undefined);
|
|
11
|
+
let userHasSelected = $state(false);
|
|
12
|
+
// Full reset when permissionedAs changes (e.g. switching between edit/create).
|
|
13
|
+
$effect(() => {
|
|
14
|
+
permissionedAs;
|
|
15
|
+
userHasSelected = false;
|
|
16
|
+
customPermissionedAs = undefined;
|
|
17
|
+
onBehalfOfChoice = undefined;
|
|
18
|
+
});
|
|
19
|
+
// On creation with no folder default, default to "me". When the folder default
|
|
20
|
+
// loads async, transition to undefined so OnBehalfOfSelector's auto-select applies
|
|
21
|
+
// the folder default. Skip if the user has already made an explicit selection.
|
|
22
|
+
$effect(() => {
|
|
23
|
+
if (userHasSelected)
|
|
24
|
+
return;
|
|
25
|
+
if (permissionedAs === undefined && !folderDefault.value) {
|
|
26
|
+
onBehalfOfChoice = 'me';
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
onBehalfOfChoice = undefined;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
9
32
|
const effectivePermissionedAs = $derived.by(() => {
|
|
10
33
|
if (onBehalfOfChoice === 'target')
|
|
11
34
|
return permissionedAs;
|
|
@@ -16,7 +39,17 @@ const effectivePermissionedAs = $derived.by(() => {
|
|
|
16
39
|
const willChange = $derived(permissionedAs !== undefined &&
|
|
17
40
|
effectivePermissionedAs !== undefined &&
|
|
18
41
|
permissionedAs !== effectivePermissionedAs);
|
|
42
|
+
const shouldRender = $derived(!!$workspaceStore && (permissionedAs !== undefined || canPreserve));
|
|
43
|
+
// For non-admin users editing a trigger owned by someone else: signal that
|
|
44
|
+
// permissioned_as will change to the current user (backend ignores preserve for non-admins).
|
|
45
|
+
// Only fires when there's an actual change (DB value differs from current user).
|
|
46
|
+
$effect(() => {
|
|
47
|
+
if (!canPreserve && permissionedAs !== undefined && permissionedAs !== myPermissionedAs) {
|
|
48
|
+
onPermissionedAsChange(undefined, false);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
19
51
|
function handleSelect(choice, details) {
|
|
52
|
+
userHasSelected = true;
|
|
20
53
|
onBehalfOfChoice = choice;
|
|
21
54
|
if (choice === 'target') {
|
|
22
55
|
customPermissionedAs = undefined;
|
|
@@ -33,7 +66,7 @@ function handleSelect(choice, details) {
|
|
|
33
66
|
}
|
|
34
67
|
</script>
|
|
35
68
|
|
|
36
|
-
{#if
|
|
69
|
+
{#if shouldRender && $workspaceStore}
|
|
37
70
|
<div class="flex items-center gap-1.5 text-2xs text-tertiary mb-4">
|
|
38
71
|
<span>Permissioned as</span>
|
|
39
72
|
{#if canPreserve}
|
|
@@ -46,6 +79,7 @@ function handleSelect(choice, details) {
|
|
|
46
79
|
{canPreserve}
|
|
47
80
|
customValue={customPermissionedAs}
|
|
48
81
|
isDeployment={false}
|
|
82
|
+
folderDefault={folderDefault.value}
|
|
49
83
|
/>
|
|
50
84
|
{#if willChange}
|
|
51
85
|
<AlertTriangle class="w-3.5 h-3.5 text-yellow-500" />
|
|
@@ -53,7 +87,7 @@ function handleSelect(choice, details) {
|
|
|
53
87
|
>will change from <strong>{permissionedAs}</strong> on save</span
|
|
54
88
|
>
|
|
55
89
|
{/if}
|
|
56
|
-
{:else}
|
|
90
|
+
{:else if permissionedAs}
|
|
57
91
|
<strong class="text-secondary">{permissionedAs}</strong>
|
|
58
92
|
{#if willChange}
|
|
59
93
|
<AlertTriangle class="w-3.5 h-3.5 text-yellow-500" />
|
|
@@ -3,6 +3,12 @@ interface Props {
|
|
|
3
3
|
permissionedAs: string | undefined;
|
|
4
4
|
/** Callback when user changes the permissioned_as selection */
|
|
5
5
|
onPermissionedAsChange: (permissionedAs: string | undefined, preserve: boolean) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Item path (e.g. `f/prod/my_trigger`). When provided and the user is an
|
|
8
|
+
* admin/wm_deployers member, the component fetches the parent folder's
|
|
9
|
+
* `default_permissioned_as` rules and preselects the matching default.
|
|
10
|
+
*/
|
|
11
|
+
path?: string | undefined;
|
|
6
12
|
}
|
|
7
13
|
declare const PermissionedAsLine: import("svelte").Component<Props, {}, "">;
|
|
8
14
|
type PermissionedAsLine = ReturnType<typeof PermissionedAsLine>;
|
|
@@ -54,7 +54,8 @@ async function deleteDeployedTrigger(triggerIndex) {
|
|
|
54
54
|
};
|
|
55
55
|
const nativeTriggerServices = {
|
|
56
56
|
nextcloud: 'nextcloud',
|
|
57
|
-
google: 'google'
|
|
57
|
+
google: 'google',
|
|
58
|
+
github: 'github'
|
|
58
59
|
};
|
|
59
60
|
const deleteHandler = deleteHandlers[triggerType];
|
|
60
61
|
const nativeServiceName = nativeTriggerServices[triggerType];
|
|
@@ -143,6 +144,9 @@ async function handleUpdate(trigger, path) {
|
|
|
143
144
|
else if (triggerType === 'google') {
|
|
144
145
|
await triggersState.fetchNativeTriggers(triggersCount, 'google', $workspaceStore, currentPath, isFlow, $userStore);
|
|
145
146
|
}
|
|
147
|
+
else if (triggerType === 'github') {
|
|
148
|
+
await triggersState.fetchNativeTriggers(triggersCount, 'github', $workspaceStore, currentPath, isFlow, $userStore);
|
|
149
|
+
}
|
|
146
150
|
triggersState.selectedTriggerIndex = triggersState.triggers.findIndex((t) => t.path === path && t.type === triggerType);
|
|
147
151
|
loading = false;
|
|
148
152
|
onDeployTrigger?.({ type: triggerType, id: triggerId, path: triggerPath });
|
|
@@ -155,6 +155,16 @@ $effect(() => {
|
|
|
155
155
|
{customLabel}
|
|
156
156
|
{...props}
|
|
157
157
|
/>
|
|
158
|
+
{:else if selectedTrigger.type === 'github'}
|
|
159
|
+
<NativeTriggersPanel
|
|
160
|
+
service="github"
|
|
161
|
+
{isFlow}
|
|
162
|
+
path={initialPath || fakeInitialPath}
|
|
163
|
+
{selectedTrigger}
|
|
164
|
+
defaultValues={selectedTrigger.draftConfig ?? selectedTrigger.captureConfig ?? undefined}
|
|
165
|
+
{customLabel}
|
|
166
|
+
{...props}
|
|
167
|
+
/>
|
|
158
168
|
{:else if selectedTrigger.type === 'cli'}
|
|
159
169
|
<div class="py-1 flex flex-col gap-6">
|
|
160
170
|
<ClipboardPanel content={selectedTrigger.extra?.cliCommand ?? ''} />
|