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
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
<script lang="ts">import { onMount, untrack } from 'svelte';
|
|
2
|
+
import { Badge, Button } from '../common';
|
|
3
|
+
import Select from '../select/Select.svelte';
|
|
4
|
+
import TextInput from '../text_input/TextInput.svelte';
|
|
5
|
+
import { safeSelectItems } from '../select/utils.svelte';
|
|
6
|
+
import { WorkspaceService } from '../../gen';
|
|
7
|
+
import { sendUserToast } from '../../toast';
|
|
8
|
+
import { Send, Plus, X, ArchiveX } from 'lucide-svelte';
|
|
9
|
+
let { forkWorkspaceId, parentWorkspaceId, currentUsername, isAdmin, onStateChange } = $props();
|
|
10
|
+
let request = $state(null);
|
|
11
|
+
let loading = $state(true);
|
|
12
|
+
let eligibleDeployers = $state([]);
|
|
13
|
+
let showRequestDialog = $state(false);
|
|
14
|
+
let selectedAssignees = $state([]);
|
|
15
|
+
let assigneeToAdd = $state(undefined);
|
|
16
|
+
let newComment = $state('');
|
|
17
|
+
let posting = $state(false);
|
|
18
|
+
let replyParentId = $state(undefined);
|
|
19
|
+
let replyBody = $state('');
|
|
20
|
+
let canCancel = $derived(request != null && (isAdmin || request.requested_by === currentUsername));
|
|
21
|
+
async function load() {
|
|
22
|
+
loading = true;
|
|
23
|
+
try {
|
|
24
|
+
request = await WorkspaceService.getOpenDeploymentRequest({ workspace: forkWorkspaceId });
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
console.error('Failed to load open deployment request', e);
|
|
28
|
+
request = null;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
loading = false;
|
|
32
|
+
onStateChange?.(request != null);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function loadEligibleDeployers() {
|
|
36
|
+
try {
|
|
37
|
+
eligibleDeployers = await WorkspaceService.listDeploymentRequestEligibleDeployers({
|
|
38
|
+
workspace: forkWorkspaceId
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error('Failed to load eligible deployers', e);
|
|
43
|
+
eligibleDeployers = [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
onMount(() => {
|
|
47
|
+
load();
|
|
48
|
+
loadEligibleDeployers();
|
|
49
|
+
});
|
|
50
|
+
$effect(() => {
|
|
51
|
+
if (assigneeToAdd && !selectedAssignees.includes(assigneeToAdd)) {
|
|
52
|
+
const v = assigneeToAdd;
|
|
53
|
+
untrack(() => {
|
|
54
|
+
selectedAssignees = [...selectedAssignees, v];
|
|
55
|
+
assigneeToAdd = undefined;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
async function createRequest() {
|
|
60
|
+
if (selectedAssignees.length === 0) {
|
|
61
|
+
sendUserToast('Pick at least one assignee', true);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
posting = true;
|
|
65
|
+
try {
|
|
66
|
+
request = await WorkspaceService.createDeploymentRequest({
|
|
67
|
+
workspace: forkWorkspaceId,
|
|
68
|
+
requestBody: { assignees: selectedAssignees }
|
|
69
|
+
});
|
|
70
|
+
sendUserToast(`Deployment request sent to ${selectedAssignees.length} assignee(s)`);
|
|
71
|
+
showRequestDialog = false;
|
|
72
|
+
selectedAssignees = [];
|
|
73
|
+
onStateChange?.(true);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
sendUserToast(`Failed to create deployment request: ${e.body || e.message}`, true);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
posting = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function cancelRequest() {
|
|
83
|
+
if (!request)
|
|
84
|
+
return;
|
|
85
|
+
if (!confirm('Cancel the open deployment request? Assignees will be notified.'))
|
|
86
|
+
return;
|
|
87
|
+
try {
|
|
88
|
+
await WorkspaceService.cancelDeploymentRequest({
|
|
89
|
+
workspace: forkWorkspaceId,
|
|
90
|
+
id: request.id
|
|
91
|
+
});
|
|
92
|
+
sendUserToast('Deployment request cancelled');
|
|
93
|
+
request = null;
|
|
94
|
+
onStateChange?.(false);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
sendUserToast(`Failed to cancel: ${e.body || e.message}`, true);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function postComment(body, parentId) {
|
|
101
|
+
if (!request || !body.trim())
|
|
102
|
+
return;
|
|
103
|
+
posting = true;
|
|
104
|
+
try {
|
|
105
|
+
const created = await WorkspaceService.createDeploymentRequestComment({
|
|
106
|
+
workspace: forkWorkspaceId,
|
|
107
|
+
id: request.id,
|
|
108
|
+
requestBody: { body, parent_id: parentId }
|
|
109
|
+
});
|
|
110
|
+
request = {
|
|
111
|
+
...request,
|
|
112
|
+
comments: [...request.comments, created]
|
|
113
|
+
};
|
|
114
|
+
if (parentId == null) {
|
|
115
|
+
newComment = '';
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
replyBody = '';
|
|
119
|
+
replyParentId = undefined;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
sendUserToast(`Failed to post comment: ${e.body || e.message}`, true);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
posting = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
let topLevel = $derived(request?.comments.filter((c) => c.parent_id == null) ?? []);
|
|
130
|
+
function repliesOf(parent) {
|
|
131
|
+
if (!request)
|
|
132
|
+
return [];
|
|
133
|
+
return request.comments.filter((c) => c.parent_id === parent.id);
|
|
134
|
+
}
|
|
135
|
+
function formatTimestamp(iso) {
|
|
136
|
+
return new Date(iso).toLocaleString();
|
|
137
|
+
}
|
|
138
|
+
// Has content to render inline in the deploy panel: dialog open,
|
|
139
|
+
// request open, or still loading.
|
|
140
|
+
let hasContent = $derived(loading || showRequestDialog || request != null);
|
|
141
|
+
export function refresh() {
|
|
142
|
+
load();
|
|
143
|
+
}
|
|
144
|
+
export function openRequestDialog() {
|
|
145
|
+
showRequestDialog = true;
|
|
146
|
+
}
|
|
147
|
+
export function isDialogOpen() {
|
|
148
|
+
return showRequestDialog;
|
|
149
|
+
}
|
|
150
|
+
export function hasOpenRequest() {
|
|
151
|
+
return request != null;
|
|
152
|
+
}
|
|
153
|
+
</script>
|
|
154
|
+
|
|
155
|
+
{#if hasContent}
|
|
156
|
+
<div class="flex flex-col gap-2 mt-3 pt-3 border-t">
|
|
157
|
+
{#if loading}
|
|
158
|
+
<div class="text-secondary text-xs">Loading deployment request…</div>
|
|
159
|
+
{:else if !request}
|
|
160
|
+
<!-- showRequestDialog == true -->
|
|
161
|
+
<div class="flex flex-col gap-2 border rounded-md p-3 bg-surface">
|
|
162
|
+
<div class="text-xs text-secondary">
|
|
163
|
+
Pick one or more assignees. They must be admins or members of <code>wm_deployers</code>
|
|
164
|
+
in <b>{parentWorkspaceId}</b>.
|
|
165
|
+
</div>
|
|
166
|
+
<Select
|
|
167
|
+
bind:value={assigneeToAdd}
|
|
168
|
+
items={safeSelectItems(
|
|
169
|
+
eligibleDeployers
|
|
170
|
+
.filter((d) => !selectedAssignees.includes(d.username))
|
|
171
|
+
.map((d) => ({
|
|
172
|
+
label: `${d.username} <${d.email}>`,
|
|
173
|
+
value: d.username
|
|
174
|
+
}))
|
|
175
|
+
)}
|
|
176
|
+
placeholder="Add assignee…"
|
|
177
|
+
/>
|
|
178
|
+
{#if selectedAssignees.length > 0}
|
|
179
|
+
<div class="flex flex-wrap gap-1">
|
|
180
|
+
{#each selectedAssignees as a (a)}
|
|
181
|
+
<Badge color="blue">
|
|
182
|
+
{a}
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
class="ml-1 hover:text-red-600"
|
|
186
|
+
onclick={() => {
|
|
187
|
+
selectedAssignees = selectedAssignees.filter((s) => s !== a)
|
|
188
|
+
}}
|
|
189
|
+
>
|
|
190
|
+
<X size={12} />
|
|
191
|
+
</button>
|
|
192
|
+
</Badge>
|
|
193
|
+
{/each}
|
|
194
|
+
</div>
|
|
195
|
+
{/if}
|
|
196
|
+
<div class="flex gap-2">
|
|
197
|
+
<Button
|
|
198
|
+
variant="accent"
|
|
199
|
+
size="xs"
|
|
200
|
+
startIcon={{ icon: Send }}
|
|
201
|
+
disabled={posting || selectedAssignees.length === 0}
|
|
202
|
+
onclick={createRequest}
|
|
203
|
+
>
|
|
204
|
+
Send request
|
|
205
|
+
</Button>
|
|
206
|
+
<Button
|
|
207
|
+
variant="default"
|
|
208
|
+
size="xs"
|
|
209
|
+
onclick={() => {
|
|
210
|
+
showRequestDialog = false
|
|
211
|
+
selectedAssignees = []
|
|
212
|
+
}}
|
|
213
|
+
>
|
|
214
|
+
Cancel
|
|
215
|
+
</Button>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
{:else}
|
|
219
|
+
<div class="flex items-center justify-between flex-wrap gap-2 text-xs">
|
|
220
|
+
<div class="flex items-center gap-2 flex-wrap">
|
|
221
|
+
<Badge color="green" size="xs">Deployment request open</Badge>
|
|
222
|
+
<span class="text-secondary">by</span>
|
|
223
|
+
<b>{request.requested_by}</b>
|
|
224
|
+
<span class="text-secondary">at {formatTimestamp(request.requested_at)}</span>
|
|
225
|
+
</div>
|
|
226
|
+
{#if canCancel}
|
|
227
|
+
<Button
|
|
228
|
+
variant="default"
|
|
229
|
+
size="xs"
|
|
230
|
+
startIcon={{ icon: ArchiveX }}
|
|
231
|
+
onclick={cancelRequest}
|
|
232
|
+
>
|
|
233
|
+
Cancel request
|
|
234
|
+
</Button>
|
|
235
|
+
{/if}
|
|
236
|
+
</div>
|
|
237
|
+
<div class="flex items-center gap-1 flex-wrap text-xs">
|
|
238
|
+
<span class="text-secondary">Assignees:</span>
|
|
239
|
+
{#each request.assignees as a (a.username)}
|
|
240
|
+
<Badge color="indigo" size="xs">{a.username}</Badge>
|
|
241
|
+
{/each}
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
<div class="border rounded-md bg-surface p-3 flex flex-col gap-3">
|
|
245
|
+
{#if topLevel.length === 0}
|
|
246
|
+
<div class="text-secondary text-xs">No comments yet. Be the first to leave feedback.</div>
|
|
247
|
+
{/if}
|
|
248
|
+
{#each topLevel as c (c.id)}
|
|
249
|
+
<div class="border rounded-md p-2 flex flex-col gap-1" class:opacity-60={c.obsolete}>
|
|
250
|
+
<div class="flex items-center justify-between gap-2 text-xs">
|
|
251
|
+
<div class="flex items-center gap-2">
|
|
252
|
+
<b>{c.author}</b>
|
|
253
|
+
{#if c.anchor_kind && c.anchor_path}
|
|
254
|
+
<Badge color="blue" size="xs">
|
|
255
|
+
{c.anchor_kind}:{c.anchor_path}
|
|
256
|
+
</Badge>
|
|
257
|
+
{/if}
|
|
258
|
+
{#if c.obsolete}
|
|
259
|
+
<Badge color="gray" size="xs">obsolete</Badge>
|
|
260
|
+
{/if}
|
|
261
|
+
</div>
|
|
262
|
+
<span class="text-tertiary text-2xs">{formatTimestamp(c.created_at)}</span>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="text-sm whitespace-pre-wrap">{c.body}</div>
|
|
265
|
+
|
|
266
|
+
{#each repliesOf(c) as r (r.id)}
|
|
267
|
+
<div
|
|
268
|
+
class="ml-4 border-l pl-2 flex flex-col gap-1"
|
|
269
|
+
class:opacity-60={r.obsolete || c.obsolete}
|
|
270
|
+
>
|
|
271
|
+
<div class="flex items-center justify-between gap-2 text-xs">
|
|
272
|
+
<b>{r.author}</b>
|
|
273
|
+
<span class="text-tertiary text-2xs">{formatTimestamp(r.created_at)}</span>
|
|
274
|
+
</div>
|
|
275
|
+
<div class="text-sm whitespace-pre-wrap">{r.body}</div>
|
|
276
|
+
</div>
|
|
277
|
+
{/each}
|
|
278
|
+
|
|
279
|
+
{#if replyParentId === c.id}
|
|
280
|
+
<div class="ml-4 flex flex-col gap-1 mt-1">
|
|
281
|
+
<TextInput bind:value={replyBody} inputProps={{ placeholder: 'Write a reply…' }} />
|
|
282
|
+
<div class="flex gap-2">
|
|
283
|
+
<Button
|
|
284
|
+
size="xs"
|
|
285
|
+
variant="accent"
|
|
286
|
+
disabled={posting || !replyBody.trim()}
|
|
287
|
+
onclick={() => postComment(replyBody, c.id)}
|
|
288
|
+
>
|
|
289
|
+
Reply
|
|
290
|
+
</Button>
|
|
291
|
+
<Button
|
|
292
|
+
size="xs"
|
|
293
|
+
variant="default"
|
|
294
|
+
onclick={() => {
|
|
295
|
+
replyParentId = undefined
|
|
296
|
+
replyBody = ''
|
|
297
|
+
}}
|
|
298
|
+
>
|
|
299
|
+
Cancel
|
|
300
|
+
</Button>
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
{:else}
|
|
304
|
+
<button
|
|
305
|
+
class="text-xs text-tertiary hover:text-secondary mt-1 self-start"
|
|
306
|
+
onclick={() => {
|
|
307
|
+
replyParentId = c.id
|
|
308
|
+
replyBody = ''
|
|
309
|
+
}}
|
|
310
|
+
>
|
|
311
|
+
Reply
|
|
312
|
+
</button>
|
|
313
|
+
{/if}
|
|
314
|
+
</div>
|
|
315
|
+
{/each}
|
|
316
|
+
|
|
317
|
+
<div class="flex flex-col gap-2 border-t pt-2">
|
|
318
|
+
<TextInput
|
|
319
|
+
bind:value={newComment}
|
|
320
|
+
inputProps={{ placeholder: 'Leave a general comment…' }}
|
|
321
|
+
/>
|
|
322
|
+
<div class="self-end">
|
|
323
|
+
<Button
|
|
324
|
+
size="xs"
|
|
325
|
+
variant="accent"
|
|
326
|
+
startIcon={{ icon: Plus }}
|
|
327
|
+
disabled={posting || !newComment.trim()}
|
|
328
|
+
onclick={() => postComment(newComment)}
|
|
329
|
+
>
|
|
330
|
+
Comment
|
|
331
|
+
</Button>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
{/if}
|
|
336
|
+
</div>
|
|
337
|
+
{/if}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
forkWorkspaceId: string;
|
|
3
|
+
parentWorkspaceId: string;
|
|
4
|
+
currentUsername: string;
|
|
5
|
+
isAdmin: boolean;
|
|
6
|
+
onStateChange?: (hasOpenRequest: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
declare const DeploymentRequestPanel: import("svelte").Component<Props, {
|
|
9
|
+
refresh: () => void;
|
|
10
|
+
openRequestDialog: () => void;
|
|
11
|
+
isDialogOpen: () => boolean;
|
|
12
|
+
hasOpenRequest: () => boolean;
|
|
13
|
+
}, "">;
|
|
14
|
+
type DeploymentRequestPanel = ReturnType<typeof DeploymentRequestPanel>;
|
|
15
|
+
export default DeploymentRequestPanel;
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
<script lang="ts">import { copyToClipboard } from '../../utils';
|
|
2
2
|
import { Copy } from 'lucide-svelte';
|
|
3
3
|
import Highlight from 'svelte-highlight';
|
|
4
|
-
let { code, language, disabled = false, wrap = false } = $props();
|
|
4
|
+
let { code, language, disabled = false, wrap = false, copyOnClick = true } = $props();
|
|
5
|
+
function copyCode(event) {
|
|
6
|
+
if (disabled) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
event?.preventDefault();
|
|
10
|
+
event?.stopPropagation();
|
|
11
|
+
copyToClipboard(code);
|
|
12
|
+
}
|
|
5
13
|
</script>
|
|
6
14
|
|
|
7
15
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
@@ -9,22 +17,24 @@ let { code, language, disabled = false, wrap = false } = $props();
|
|
|
9
17
|
<div
|
|
10
18
|
class="flex flex-col flex-1 border rounded-md relative bg-surface-input"
|
|
11
19
|
class:cursor-not-allowed={disabled}
|
|
20
|
+
class:cursor-pointer={copyOnClick && !disabled}
|
|
21
|
+
class:cursor-text={!copyOnClick && !disabled}
|
|
12
22
|
onclick={(e) => {
|
|
13
|
-
if (
|
|
14
|
-
|
|
23
|
+
if (copyOnClick) {
|
|
24
|
+
copyCode(e)
|
|
15
25
|
}
|
|
16
|
-
e.preventDefault()
|
|
17
|
-
copyToClipboard(code)
|
|
18
26
|
}}
|
|
19
27
|
>
|
|
20
|
-
<div class="absolute top-2 right-1 z-10
|
|
21
|
-
<
|
|
28
|
+
<div class="absolute top-2 right-1 z-10">
|
|
29
|
+
<div class="w-8 cursor-pointer" onclick={copyCode}>
|
|
30
|
+
<Copy size={14} />
|
|
31
|
+
</div>
|
|
22
32
|
</div>
|
|
23
33
|
<div class="p-2 w-full overflow-auto">
|
|
24
34
|
<Highlight
|
|
25
35
|
{language}
|
|
26
36
|
{code}
|
|
27
|
-
class="pointer-events-none {wrap ? 'whitespace-pre-wrap break-all pr-8' : ''}"
|
|
37
|
+
class="{copyOnClick ? 'pointer-events-none' : 'select-text'} {wrap ? 'whitespace-pre-wrap break-all pr-8' : ''}"
|
|
28
38
|
/>
|
|
29
39
|
</div>
|
|
30
40
|
</div>
|
|
@@ -21,13 +21,14 @@
|
|
|
21
21
|
<script lang="ts">import { inferAssets } from '../../infer';
|
|
22
22
|
import { assetEq, getFlowModuleAssets } from '../assets/lib';
|
|
23
23
|
import { getAllModules } from './flowExplorer';
|
|
24
|
-
import { getContext
|
|
24
|
+
import { getContext } from 'svelte';
|
|
25
25
|
import { AssetService, ResourceService } from '../../gen';
|
|
26
26
|
import { deepEqual } from 'fast-equals';
|
|
27
27
|
import { workspaceStore } from '../../stores';
|
|
28
28
|
import S3FilePicker from '../S3FilePicker.svelte';
|
|
29
29
|
import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
|
|
30
30
|
import { watch } from 'runed';
|
|
31
|
+
import { sendUserToast } from '../../toast';
|
|
31
32
|
let { modules, enableParser = false, enableDbExplore = false, enablePathScriptAndFlowAssets = false } = $props();
|
|
32
33
|
const flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
|
|
33
34
|
const { selectionManager } = getContext('FlowEditorContext') || {};
|
|
@@ -88,7 +89,14 @@ $effect(() => {
|
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
});
|
|
91
|
-
|
|
92
|
+
function analyzeEntireFlow() {
|
|
93
|
+
for (const mod of allModules) {
|
|
94
|
+
if (mod.value.type === 'rawscript') {
|
|
95
|
+
parseAndUpdateRawScriptModule(mod.value, mod.id);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function parseAndUpdateRawScriptModule(v, modId, isUserEdit = true) {
|
|
92
100
|
console.log('Parsing assets for RawScript module', modId);
|
|
93
101
|
let inferAssetsResult = await inferAssets(v.language, v.content);
|
|
94
102
|
if (inferAssetsResult.status === 'error')
|
|
@@ -102,25 +110,15 @@ async function parseAndUpdateRawScriptModule(v, modId) {
|
|
|
102
110
|
asset.alt_access_type = old.alt_access_type;
|
|
103
111
|
}
|
|
104
112
|
const normalizedAssets = newAssets.length > 0 ? newAssets : undefined;
|
|
105
|
-
if (!deepEqual(v.assets, normalizedAssets))
|
|
106
|
-
|
|
113
|
+
if (!deepEqual(v.assets, normalizedAssets)) {
|
|
114
|
+
if (!isUserEdit && normalizedAssets && normalizedAssets.length > 0) {
|
|
115
|
+
sendUserToast('Assets were detected in this step. Analyze entire flow for assets?', 'warning', [{ label: 'Analyze entire flow', callback: () => analyzeEntireFlow() }]);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
v.assets = normalizedAssets;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
107
121
|
}
|
|
108
|
-
// Check for raw script modules whose assets were not parsed. Useful for flows created
|
|
109
|
-
// before the assets feature was introduced.
|
|
110
|
-
$effect(() => {
|
|
111
|
-
if (!enableParser)
|
|
112
|
-
return;
|
|
113
|
-
untrack(() => {
|
|
114
|
-
setTimeout(() => {
|
|
115
|
-
for (const mod of allModules) {
|
|
116
|
-
if (mod.value.type === 'rawscript' && mod.value.assets === undefined) {
|
|
117
|
-
console.log('RawScript module', mod.id, 'without assets field, parsing');
|
|
118
|
-
parseAndUpdateRawScriptModule(mod.value, mod.id);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}, 500); // ensure modules are loaded
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
122
|
$effect(() => {
|
|
125
123
|
if (!enableParser)
|
|
126
124
|
return;
|
|
@@ -134,7 +132,7 @@ $effect(() => {
|
|
|
134
132
|
// Also recompute if the module is selected
|
|
135
133
|
watch([() => selectedId === mod.id], () => {
|
|
136
134
|
if (selectedId === mod.id)
|
|
137
|
-
parseAndUpdateRawScriptModule(modValue, mod.id);
|
|
135
|
+
parseAndUpdateRawScriptModule(modValue, mod.id, modValue.assets !== undefined);
|
|
138
136
|
});
|
|
139
137
|
}
|
|
140
138
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FlowModule } from '../../gen';
|
|
2
|
+
import { type AgentTool } from './agentToolUtils';
|
|
3
|
+
export type AgentToolOwner = {
|
|
4
|
+
agentId: string;
|
|
5
|
+
tools: AgentTool[];
|
|
6
|
+
toolIndex: number;
|
|
7
|
+
tool: AgentTool;
|
|
8
|
+
depth: number;
|
|
9
|
+
};
|
|
10
|
+
export type RemovedAgentTool = {
|
|
11
|
+
tool: AgentTool;
|
|
12
|
+
removedIds: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare function findAgentToolOwner(modules: FlowModule[], toolId: string): AgentToolOwner | undefined;
|
|
15
|
+
export declare function removeAgentToolOwner(owner: AgentToolOwner): RemovedAgentTool | undefined;
|
|
16
|
+
export declare function collectFlowNodeIds(module: FlowModule): string[];
|
|
17
|
+
export declare function collectAgentToolIds(tool: AgentTool): string[];
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { isFlowModuleTool } from './agentToolUtils';
|
|
2
|
+
export function findAgentToolOwner(modules, toolId) {
|
|
3
|
+
return findAgentToolOwnerInModules(modules, toolId, 0);
|
|
4
|
+
}
|
|
5
|
+
export function removeAgentToolOwner(owner) {
|
|
6
|
+
const candidate = owner.tools[owner.toolIndex];
|
|
7
|
+
if (!candidate || candidate.id !== owner.tool.id) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
owner.tools.splice(owner.toolIndex, 1);
|
|
11
|
+
return {
|
|
12
|
+
tool: candidate,
|
|
13
|
+
removedIds: collectAgentToolIds(candidate)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function collectFlowNodeIds(module) {
|
|
17
|
+
return collectFlowNodeIdsFromNode(module);
|
|
18
|
+
}
|
|
19
|
+
export function collectAgentToolIds(tool) {
|
|
20
|
+
return collectFlowNodeIdsFromNode(tool);
|
|
21
|
+
}
|
|
22
|
+
function findAgentToolOwnerInModules(modules, toolId, depth) {
|
|
23
|
+
for (const module of modules) {
|
|
24
|
+
const owner = findAgentToolOwnerInNode(module, toolId, depth);
|
|
25
|
+
if (owner) {
|
|
26
|
+
return owner;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
function findAgentToolOwnerInNode(node, toolId, depth) {
|
|
32
|
+
if (node.value.type === 'forloopflow' || node.value.type === 'whileloopflow') {
|
|
33
|
+
return findAgentToolOwnerInModules(node.value.modules, toolId, depth);
|
|
34
|
+
}
|
|
35
|
+
if (node.value.type === 'branchall') {
|
|
36
|
+
for (const branch of node.value.branches) {
|
|
37
|
+
const owner = findAgentToolOwnerInModules(branch.modules, toolId, depth);
|
|
38
|
+
if (owner) {
|
|
39
|
+
return owner;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
if (node.value.type === 'branchone') {
|
|
45
|
+
const defaultOwner = findAgentToolOwnerInModules(node.value.default, toolId, depth);
|
|
46
|
+
if (defaultOwner) {
|
|
47
|
+
return defaultOwner;
|
|
48
|
+
}
|
|
49
|
+
for (const branch of node.value.branches) {
|
|
50
|
+
const owner = findAgentToolOwnerInModules(branch.modules, toolId, depth);
|
|
51
|
+
if (owner) {
|
|
52
|
+
return owner;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
if (node.value.type !== 'aiagent') {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const toolIndex = node.value.tools.findIndex((tool) => tool.id === toolId);
|
|
61
|
+
if (toolIndex !== -1) {
|
|
62
|
+
return {
|
|
63
|
+
agentId: node.id,
|
|
64
|
+
tools: node.value.tools,
|
|
65
|
+
toolIndex,
|
|
66
|
+
tool: node.value.tools[toolIndex],
|
|
67
|
+
depth: depth + 1
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
for (const tool of node.value.tools) {
|
|
71
|
+
if (!isFlowModuleTool(tool)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const owner = findAgentToolOwnerInNode(tool, toolId, depth + 1);
|
|
75
|
+
if (owner) {
|
|
76
|
+
return owner;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
function collectFlowNodeIdsFromNode(node) {
|
|
82
|
+
const ids = [node.id];
|
|
83
|
+
if (node.value.type === 'forloopflow' || node.value.type === 'whileloopflow') {
|
|
84
|
+
for (const module of node.value.modules) {
|
|
85
|
+
ids.push(...collectFlowNodeIds(module));
|
|
86
|
+
}
|
|
87
|
+
return ids;
|
|
88
|
+
}
|
|
89
|
+
if (node.value.type === 'branchall') {
|
|
90
|
+
for (const branch of node.value.branches) {
|
|
91
|
+
for (const module of branch.modules) {
|
|
92
|
+
ids.push(...collectFlowNodeIds(module));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return ids;
|
|
96
|
+
}
|
|
97
|
+
if (node.value.type === 'branchone') {
|
|
98
|
+
for (const module of node.value.default) {
|
|
99
|
+
ids.push(...collectFlowNodeIds(module));
|
|
100
|
+
}
|
|
101
|
+
for (const branch of node.value.branches) {
|
|
102
|
+
for (const module of branch.modules) {
|
|
103
|
+
ids.push(...collectFlowNodeIds(module));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return ids;
|
|
107
|
+
}
|
|
108
|
+
if (node.value.type === 'aiagent') {
|
|
109
|
+
for (const tool of node.value.tools) {
|
|
110
|
+
ids.push(...collectAgentToolIds(tool));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return ids;
|
|
114
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|