windmill-components 1.677.0 → 1.687.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AppConnectInner.svelte +6 -0
- package/package/components/CiTestResults.svelte +64 -0
- package/package/components/CiTestResults.svelte.d.ts +7 -0
- package/package/components/CompareWorkspaces.svelte +626 -418
- package/package/components/DBManager.svelte +35 -4
- package/package/components/DBManager.svelte.d.ts +2 -0
- package/package/components/DBManagerContent.svelte +3 -1
- package/package/components/DBManagerContent.svelte.d.ts +3 -0
- package/package/components/DBManagerDrawer.svelte +145 -3
- package/package/components/DBTableEditor.svelte +14 -4
- package/package/components/DatatablePicker.svelte +2 -5
- package/package/components/DatatableSchemaDiff.svelte +531 -0
- package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
- package/package/components/DedicatedWorkersSelector.svelte +4 -2
- package/package/components/DefaultTagsInner.svelte +42 -2
- package/package/components/DeployWorkspaceDrawer.svelte +1 -1
- package/package/components/Dev.svelte +20 -3
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +1 -1
- package/package/components/EditorBar.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewerInner.svelte +269 -220
- package/package/components/FlowTimeline.svelte +1 -1
- package/package/components/FolderEditor.svelte +189 -4
- package/package/components/ForkWorkspaceBanner.svelte +82 -11
- package/package/components/GlobalUserOffboardingModal.svelte +293 -0
- package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/InstanceSettings.svelte +22 -3
- package/package/components/Login.svelte +22 -10
- package/package/components/ModuleTest.svelte +2 -1
- package/package/components/NoMainFuncBadge.svelte +1 -1
- package/package/components/OffboardItemsBox.svelte +56 -0
- package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
- package/package/components/OffboardReassignControls.svelte +47 -0
- package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
- package/package/components/OffboardWorkspaceSection.svelte +110 -0
- package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
- package/package/components/OnBehalfOfSelector.svelte +21 -3
- package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
- package/package/components/QueueAlerts.svelte +10 -10
- package/package/components/ResourcePicker.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +52 -11
- package/package/components/ScriptEditor.svelte +1 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ShareModal.svelte +236 -98
- package/package/components/SuperadminSettingsInner.svelte +362 -315
- package/package/components/UserOffboardingModal.svelte +238 -0
- package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/WorkspaceDeployLayout.svelte +3 -3
- package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
- package/package/components/common/table/AppRow.svelte +3 -3
- package/package/components/common/table/FlowRow.svelte +3 -3
- package/package/components/common/table/RawAppRow.svelte +4 -4
- package/package/components/common/table/Row.svelte +6 -2
- package/package/components/common/table/ScriptRow.svelte +11 -3
- package/package/components/copilot/chat/AIChatManager.svelte.js +2 -2
- package/package/components/copilot/chat/anthropic.d.ts +7 -1
- package/package/components/copilot/chat/anthropic.js +5 -2
- package/package/components/copilot/chat/app/core.js +129 -1
- package/package/components/copilot/chat/app/core.test.js +192 -0
- package/package/components/copilot/chat/chatLoop.d.ts +3 -0
- package/package/components/copilot/chat/chatLoop.js +13 -5
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +55 -76
- package/package/components/copilot/chat/flow/core.d.ts +13 -3
- package/package/components/copilot/chat/flow/core.js +467 -116
- package/package/components/copilot/chat/flow/helperUtils.d.ts +19 -0
- package/package/components/copilot/chat/flow/helperUtils.js +68 -0
- package/package/components/copilot/chat/flow/helperUtils.test.js +116 -0
- package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
- package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
- package/package/components/copilot/chat/flow/utils.test.js +59 -0
- package/package/components/copilot/chat/openai-responses.d.ts +7 -1
- package/package/components/copilot/chat/openai-responses.js +5 -2
- package/package/components/copilot/chat/shared.d.ts +1 -2
- package/package/components/copilot/chat/shared.js +94 -52
- package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
- package/package/components/copilot/chat/tokenUsage.js +42 -0
- package/package/components/copilot/lib.d.ts +5 -1
- package/package/components/copilot/lib.js +21 -5
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
- package/package/components/details/CopyableCodeBlock.svelte +18 -8
- package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +19 -21
- package/package/components/flows/agentToolTree.d.ts +17 -0
- package/package/components/flows/agentToolTree.js +114 -0
- package/package/components/flows/agentToolTree.test.d.ts +1 -0
- package/package/components/flows/agentToolTree.test.js +86 -0
- package/package/components/flows/agentToolUtils.d.ts +0 -5
- package/package/components/flows/agentToolUtils.js +0 -49
- package/package/components/flows/content/FlowLoop.svelte +7 -4
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
- package/package/components/flows/content/FlowSettings.svelte +29 -0
- package/package/components/flows/dfs.d.ts +6 -2
- package/package/components/flows/dfs.js +19 -11
- package/package/components/flows/flowDeleteController.d.ts +32 -0
- package/package/components/flows/flowDeleteController.js +54 -0
- package/package/components/flows/flowDeleteController.test.d.ts +1 -0
- package/package/components/flows/flowDeleteController.test.js +121 -0
- package/package/components/flows/flowDeleteUtils.d.ts +48 -0
- package/package/components/flows/flowDeleteUtils.js +150 -0
- package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
- package/package/components/flows/flowDeleteUtils.test.js +131 -0
- package/package/components/flows/flowDiff.d.ts +2 -47
- package/package/components/flows/flowDiff.js +16 -293
- package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
- package/package/components/flows/flowDiff.testUtils.js +26 -0
- package/package/components/flows/flowDiffManager.svelte.js +20 -75
- package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
- package/package/components/flows/flowExplorer.d.ts +4 -0
- package/package/components/flows/flowExplorer.js +7 -30
- package/package/components/flows/flowState.d.ts +1 -0
- package/package/components/flows/flowStateUtils.svelte.js +6 -1
- package/package/components/flows/flowStore.svelte.d.ts +1 -1
- package/package/components/flows/flowTree.d.ts +91 -0
- package/package/components/flows/flowTree.js +326 -0
- package/package/components/flows/flowTree.test.d.ts +1 -0
- package/package/components/flows/flowTree.test.js +236 -0
- package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/previousResults.js +13 -41
- package/package/components/flows/previousResults.test.d.ts +1 -0
- package/package/components/flows/previousResults.test.js +65 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
- package/package/components/flows/propPicker/StepHistory.svelte +9 -1
- package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
- package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
- package/package/components/graph/FlowGraphV2.svelte +2 -2
- package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
- package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
- package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
- package/package/components/home/HomeConnectDrawer.svelte +125 -0
- package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
- package/package/components/icons/GithubIcon.svelte +4 -4
- package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
- package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
- package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
- package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
- package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
- package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
- package/package/components/instanceSettings.d.ts +1 -0
- package/package/components/instanceSettings.js +42 -8
- package/package/components/offboarding-utils.d.ts +11 -0
- package/package/components/offboarding-utils.js +100 -0
- package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
- package/package/components/raw_apps/RawAppEditor.svelte +27 -0
- package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
- package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
- package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
- package/package/components/runs/runsFilter.d.ts +1 -1
- package/package/components/script_builder.d.ts +1 -1
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +1 -0
- package/package/components/settings/CreateToken.svelte +113 -64
- package/package/components/settings/CreateToken.svelte.d.ts +3 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
- package/package/components/sidebar/SidebarContent.svelte +58 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
- package/package/components/triggers/AddTriggersButton.svelte +11 -0
- package/package/components/triggers/PermissionedAsLine.svelte +37 -3
- package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
- package/package/components/triggers/TriggersEditor.svelte +5 -1
- package/package/components/triggers/TriggersWrapper.svelte +10 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
- package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
- package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
- package/package/components/triggers/http/RoutesPanel.svelte +1 -1
- package/package/components/triggers/http/utils.d.ts +1 -1
- package/package/components/triggers/http/utils.js +2 -2
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +1 -1
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
- package/package/components/triggers/native/utils.js +14 -0
- package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
- package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
- package/package/components/triggers/triggers.svelte.js +1 -0
- package/package/components/triggers/utils.js +27 -6
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
- package/package/components/triggers.d.ts +1 -1
- package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
- package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
- package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
- package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
- package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
- package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
- package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
- package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
- package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
- package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
- package/package/consts.d.ts +3 -0
- package/package/consts.js +10 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +1172 -164
- package/package/gen/schemas.gen.js +1168 -157
- package/package/gen/services.gen.d.ts +511 -6
- package/package/gen/services.gen.js +1023 -23
- package/package/gen/types.gen.d.ts +2278 -151
- package/package/githubApp.js +5 -1
- package/package/hubPaths.json +1 -4
- package/package/infer.js +13 -1
- package/package/infer.svelte.js +10 -1
- package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
- package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
- package/package/script_helpers.d.ts +8 -2
- package/package/script_helpers.js +14 -0
- package/package/stores.d.ts +4 -0
- package/package/stores.js +1 -0
- package/package/system_prompts/prompts.d.ts +4 -3
- package/package/system_prompts/prompts.js +270 -20
- package/package/templates/ci_test_bun.ts.template +19 -0
- package/package/templates/ci_test_python.py.template +18 -0
- package/package/utils_deployable.d.ts +11 -7
- package/package/utils_workspace_deploy.d.ts +8 -8
- package/package/utils_workspace_deploy.js +86 -420
- package/package.json +4 -4
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
- package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
- package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
- package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
- package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
- package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
- package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
- package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
- package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
- package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
- package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
- package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
- package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
- package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
- package/package/components/copilot/chat/flow/utils.d.ts +0 -14
- package/package/components/copilot/chat/flow/utils.js +0 -108
- package/package/components/flows/agentToolUtils.test.js +0 -55
- /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
- /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
- /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
import { flowTools } from '../../../flow/core';
|
|
2
|
-
import openFlowSchema from '../../../flow/openFlow.json';
|
|
3
|
-
/**
|
|
4
|
-
* IDs of the granular flow editing tools that should be replaced by set_flow_json.
|
|
5
|
-
*/
|
|
6
|
-
const FLOW_EDITING_TOOL_NAMES = [
|
|
7
|
-
'add_module',
|
|
8
|
-
'remove_module',
|
|
9
|
-
'remove_branch',
|
|
10
|
-
'modify_module',
|
|
11
|
-
'set_flow_schema'
|
|
12
|
-
];
|
|
13
|
-
/**
|
|
14
|
-
* A single tool that sets the entire flow JSON at once.
|
|
15
|
-
* This replaces the granular flow editing tools (add_module, remove_module, modify_module, etc.)
|
|
16
|
-
*/
|
|
17
|
-
export const setFlowJsonTool = {
|
|
18
|
-
def: {
|
|
19
|
-
type: 'function',
|
|
20
|
-
function: {
|
|
21
|
-
name: 'set_flow_json',
|
|
22
|
-
description: 'Set the entire flow by providing the complete flow object. This replaces all existing modules and schema.',
|
|
23
|
-
strict: false,
|
|
24
|
-
parameters: {
|
|
25
|
-
type: 'object',
|
|
26
|
-
properties: {
|
|
27
|
-
modules: {
|
|
28
|
-
type: 'array',
|
|
29
|
-
description: 'Array of flow modules',
|
|
30
|
-
items: {
|
|
31
|
-
type: 'object'
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
schema: {
|
|
35
|
-
type: 'object',
|
|
36
|
-
description: 'Flow input schema (JSON Schema format) defining parameters the flow accepts'
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
required: ['modules']
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
fn: async ({ args, helpers }) => {
|
|
44
|
-
const { modules, schema } = args;
|
|
45
|
-
await helpers.setFlowJson(modules, schema);
|
|
46
|
-
return `Flow updated with ${modules.length} module(s): [${modules.map((m) => m.id).join(', ')}]`;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Build the tools array for the minimal-single-tool variant.
|
|
51
|
-
* Keeps all utility tools (search, resource type, test run, db schema, code generation instructions)
|
|
52
|
-
* but replaces all flow editing tools with a single set_flow_json tool.
|
|
53
|
-
*/
|
|
54
|
-
function buildMinimalSingleToolTools() {
|
|
55
|
-
// Get all production tools except flow editing tools
|
|
56
|
-
const utilityTools = flowTools.filter((t) => !FLOW_EDITING_TOOL_NAMES.includes(t.def.function.name));
|
|
57
|
-
return [...utilityTools, setFlowJsonTool];
|
|
58
|
-
}
|
|
59
|
-
const MINIMAL_SINGLE_TOOL_SYSTEM_PROMPT = `You are a helpful assistant that creates and edits workflows on the Windmill platform.
|
|
60
|
-
|
|
61
|
-
## IMPORTANT RULES
|
|
62
|
-
|
|
63
|
-
**Reserved IDs - Do NOT use these module IDs:**
|
|
64
|
-
- \`failure\` - Reserved for failure handler module
|
|
65
|
-
- \`preprocessor\` - Reserved for preprocessor module
|
|
66
|
-
- \`Input\` - Reserved for flow input reference
|
|
67
|
-
|
|
68
|
-
## Tool Selection Guide
|
|
69
|
-
|
|
70
|
-
**Flow Modification:**
|
|
71
|
-
- **Create or modify the entire flow** → \`set_flow_json\` (provide complete modules array and optional schema)
|
|
72
|
-
|
|
73
|
-
**Code & Scripts:**
|
|
74
|
-
- **Get language-specific coding instructions** → \`get_instructions_for_code_generation\` (call BEFORE writing code)
|
|
75
|
-
- **Find workspace scripts and flows** → \`search_workspace\`
|
|
76
|
-
- **Get details of a specific script or flow** → \`get_runnable_details\`
|
|
77
|
-
- **Find Windmill Hub scripts** → \`search_hub_scripts\`
|
|
78
|
-
|
|
79
|
-
**Testing:**
|
|
80
|
-
- **Test entire flow** → \`test_run_flow\`
|
|
81
|
-
- **Test single step** → \`test_run_step\`
|
|
82
|
-
|
|
83
|
-
**Resources & Schema:**
|
|
84
|
-
- **Search resource types** → \`resource_type\`
|
|
85
|
-
- **Get database schema** → \`get_db_schema\`
|
|
86
|
-
|
|
87
|
-
## Common Mistakes to Avoid
|
|
88
|
-
|
|
89
|
-
- **Don't forget \`input_transforms\`** - Rawscript parameters won't receive values without them
|
|
90
|
-
- **Don't use spaces in module IDs** - Use underscores (e.g., \`fetch_data\` not \`fetch data\`)
|
|
91
|
-
- **Don't reference future steps** - \`results.step_id\` only works for steps that execute before the current one
|
|
92
|
-
- **Don't create duplicate IDs** - Each module ID must be unique in the flow
|
|
93
|
-
|
|
94
|
-
## Flow Modification with set_flow_json
|
|
95
|
-
|
|
96
|
-
Use the \`set_flow_json\` tool to set the entire flow structure at once. Provide the complete modules array and optionally the flow input schema.
|
|
97
|
-
|
|
98
|
-
**Parameters:**
|
|
99
|
-
- \`modules\`: Array of flow modules (required)
|
|
100
|
-
- \`schema\`: Flow input schema in JSON Schema format (optional)
|
|
101
|
-
|
|
102
|
-
**Example - Simple flow:**
|
|
103
|
-
\`\`\`javascript
|
|
104
|
-
set_flow_json({
|
|
105
|
-
modules: [
|
|
106
|
-
{
|
|
107
|
-
id: "fetch_data",
|
|
108
|
-
summary: "Fetch user data from API",
|
|
109
|
-
value: {
|
|
110
|
-
type: "rawscript",
|
|
111
|
-
language: "bun",
|
|
112
|
-
content: "export async function main(userId: string) { return { id: userId, name: 'John' }; }",
|
|
113
|
-
input_transforms: {
|
|
114
|
-
userId: { type: "javascript", expr: "flow_input.user_id" }
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: "process_data",
|
|
120
|
-
summary: "Process the fetched data",
|
|
121
|
-
value: {
|
|
122
|
-
type: "rawscript",
|
|
123
|
-
language: "bun",
|
|
124
|
-
content: "export async function main(data: any) { return { processed: true, ...data }; }",
|
|
125
|
-
input_transforms: {
|
|
126
|
-
data: { type: "javascript", expr: "results.fetch_data" }
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
],
|
|
131
|
-
schema: {
|
|
132
|
-
type: "object",
|
|
133
|
-
properties: {
|
|
134
|
-
user_id: { type: "string", description: "User ID to fetch" }
|
|
135
|
-
},
|
|
136
|
-
required: ["user_id"]
|
|
137
|
-
}
|
|
138
|
-
})
|
|
139
|
-
\`\`\`
|
|
140
|
-
|
|
141
|
-
**Example - Flow with for loop:**
|
|
142
|
-
\`\`\`javascript
|
|
143
|
-
set_flow_json({
|
|
144
|
-
modules: [
|
|
145
|
-
{
|
|
146
|
-
id: "get_items",
|
|
147
|
-
summary: "Get list of items",
|
|
148
|
-
value: {
|
|
149
|
-
type: "rawscript",
|
|
150
|
-
language: "bun",
|
|
151
|
-
content: "export async function main() { return [1, 2, 3]; }",
|
|
152
|
-
input_transforms: {}
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
id: "loop_items",
|
|
157
|
-
summary: "Process each item",
|
|
158
|
-
value: {
|
|
159
|
-
type: "forloopflow",
|
|
160
|
-
iterator: { type: "javascript", expr: "results.get_items" },
|
|
161
|
-
skip_failures: false,
|
|
162
|
-
parallel: true,
|
|
163
|
-
modules: [
|
|
164
|
-
{
|
|
165
|
-
id: "process_item",
|
|
166
|
-
summary: "Process single item",
|
|
167
|
-
value: {
|
|
168
|
-
type: "rawscript",
|
|
169
|
-
language: "bun",
|
|
170
|
-
content: "export async function main(item: number) { return item * 2; }",
|
|
171
|
-
input_transforms: {
|
|
172
|
-
item: { type: "javascript", expr: "flow_input.iter.value" }
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
]
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
]
|
|
180
|
-
})
|
|
181
|
-
\`\`\`
|
|
182
|
-
|
|
183
|
-
**Example - Flow with branches (branchone):**
|
|
184
|
-
\`\`\`javascript
|
|
185
|
-
set_flow_json({
|
|
186
|
-
modules: [
|
|
187
|
-
{
|
|
188
|
-
id: "get_value",
|
|
189
|
-
summary: "Get a value to branch on",
|
|
190
|
-
value: {
|
|
191
|
-
type: "rawscript",
|
|
192
|
-
language: "bun",
|
|
193
|
-
content: "export async function main() { return 50; }",
|
|
194
|
-
input_transforms: {}
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
id: "branch_on_value",
|
|
199
|
-
summary: "Branch based on value",
|
|
200
|
-
value: {
|
|
201
|
-
type: "branchone",
|
|
202
|
-
branches: [
|
|
203
|
-
{
|
|
204
|
-
summary: "High value",
|
|
205
|
-
expr: "results.get_value > 75",
|
|
206
|
-
modules: [
|
|
207
|
-
{
|
|
208
|
-
id: "high_handler",
|
|
209
|
-
value: {
|
|
210
|
-
type: "rawscript",
|
|
211
|
-
language: "bun",
|
|
212
|
-
content: "export async function main() { return 'high'; }",
|
|
213
|
-
input_transforms: {}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
]
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
summary: "Medium value",
|
|
220
|
-
expr: "results.get_value > 25",
|
|
221
|
-
modules: [
|
|
222
|
-
{
|
|
223
|
-
id: "medium_handler",
|
|
224
|
-
value: {
|
|
225
|
-
type: "rawscript",
|
|
226
|
-
language: "bun",
|
|
227
|
-
content: "export async function main() { return 'medium'; }",
|
|
228
|
-
input_transforms: {}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
]
|
|
232
|
-
}
|
|
233
|
-
],
|
|
234
|
-
default: [
|
|
235
|
-
{
|
|
236
|
-
id: "low_handler",
|
|
237
|
-
value: {
|
|
238
|
-
type: "rawscript",
|
|
239
|
-
language: "bun",
|
|
240
|
-
content: "export async function main() { return 'low'; }",
|
|
241
|
-
input_transforms: {}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
]
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
]
|
|
248
|
-
})
|
|
249
|
-
\`\`\`
|
|
250
|
-
|
|
251
|
-
Follow the user instructions carefully.
|
|
252
|
-
At the end of your changes, explain precisely what you did and what the flow does now.
|
|
253
|
-
ALWAYS test your modifications using the \`test_run_flow\` tool. If the user cancels the test run, do not try again and wait for the next user instruction.
|
|
254
|
-
When testing steps that are sql scripts, the arguments to be passed are { database: $res:<db_resource> }.
|
|
255
|
-
|
|
256
|
-
### Input Transforms for Rawscripts
|
|
257
|
-
|
|
258
|
-
Rawscript modules use \`input_transforms\` to map function parameters to values. Each key in \`input_transforms\` corresponds to a parameter name in your script's \`main\` function.
|
|
259
|
-
|
|
260
|
-
**Transform Types:**
|
|
261
|
-
- \`static\`: Fixed value passed directly
|
|
262
|
-
- \`javascript\`: Dynamic expression evaluated at runtime
|
|
263
|
-
|
|
264
|
-
**Available Variables in JavaScript Expressions:**
|
|
265
|
-
- \`flow_input.{property}\` - Access flow input parameters
|
|
266
|
-
- \`results.{step_id}\` - Access output from a previous step
|
|
267
|
-
- \`flow_input.iter.value\` - Current item when inside a for-loop
|
|
268
|
-
- \`flow_input.iter.index\` - Current index when inside a for-loop
|
|
269
|
-
|
|
270
|
-
**Example - Rawscript using flow input and previous step result:**
|
|
271
|
-
\`\`\`json
|
|
272
|
-
{
|
|
273
|
-
"id": "step_b",
|
|
274
|
-
"value": {
|
|
275
|
-
"type": "rawscript",
|
|
276
|
-
"language": "bun",
|
|
277
|
-
"content": "export async function main(userId: string, data: any[]) { return 'Hello, world!'; }",
|
|
278
|
-
"input_transforms": {
|
|
279
|
-
"userId": { "type": "javascript", "expr": "flow_input.user_id" },
|
|
280
|
-
"data": { "type": "javascript", "expr": "results.step_a" }
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
\`\`\`
|
|
285
|
-
|
|
286
|
-
**Important:** The parameter names in \`input_transforms\` must match the function parameter names in your script.
|
|
287
|
-
|
|
288
|
-
### Other Key Concepts
|
|
289
|
-
- **Resources**: For flow inputs, use type "object" with format "resource-<type>". For step inputs, use "$res:path/to/resource"
|
|
290
|
-
- **Module IDs**: Must be unique and valid identifiers. Used to reference results via \`results.step_id\`
|
|
291
|
-
- **Module types**: Use 'bun' as default language for rawscript if unspecified
|
|
292
|
-
|
|
293
|
-
### Writing Code for Modules
|
|
294
|
-
|
|
295
|
-
**IMPORTANT: Before writing any code for a rawscript module, you MUST call the \`get_instructions_for_code_generation\` tool with the target language.** This tool provides essential language-specific instructions.
|
|
296
|
-
|
|
297
|
-
Example: Before writing TypeScript/Bun code, call \`get_instructions_for_code_generation({ language: "bun" })\`
|
|
298
|
-
|
|
299
|
-
### Creating Flows
|
|
300
|
-
|
|
301
|
-
1. **Search for existing scripts first** (unless user explicitly asks to write from scratch):
|
|
302
|
-
- First: \`search_workspace\` to find workspace scripts and flows
|
|
303
|
-
- Use \`get_runnable_details\` to inspect a specific script or flow (inputs, description, code)
|
|
304
|
-
- Then: \`search_hub_scripts\` (only consider highly relevant results)
|
|
305
|
-
- Only create raw scripts if no suitable script is found
|
|
306
|
-
|
|
307
|
-
2. **Build the complete flow using \`set_flow_json\`:**
|
|
308
|
-
- If using existing script: use \`type: "script"\` with \`path\`
|
|
309
|
-
- If creating rawscript: use \`type: "rawscript"\` with \`language\` and \`content\`
|
|
310
|
-
- **First call \`get_instructions_for_code_generation\` to get the correct code format**
|
|
311
|
-
- Always define \`input_transforms\` to connect parameters to flow inputs or previous step results
|
|
312
|
-
|
|
313
|
-
### AI Agent Modules
|
|
314
|
-
|
|
315
|
-
AI agents can use tools to accomplish tasks. When creating an AI agent module:
|
|
316
|
-
|
|
317
|
-
\`\`\`javascript
|
|
318
|
-
{
|
|
319
|
-
id: "support_agent",
|
|
320
|
-
summary: "AI agent for customer support",
|
|
321
|
-
value: {
|
|
322
|
-
type: "aiagent",
|
|
323
|
-
input_transforms: {
|
|
324
|
-
provider: { type: "static", value: "$res:f/ai_providers/openai" },
|
|
325
|
-
output_type: { type: "static", value: "text" },
|
|
326
|
-
user_message: { type: "javascript", expr: "flow_input.query" },
|
|
327
|
-
system_prompt: { type: "static", value: "You are a helpful assistant." }
|
|
328
|
-
},
|
|
329
|
-
tools: [
|
|
330
|
-
{
|
|
331
|
-
id: "search_docs",
|
|
332
|
-
summary: "Search_documentation",
|
|
333
|
-
value: {
|
|
334
|
-
tool_type: "flowmodule",
|
|
335
|
-
type: "rawscript",
|
|
336
|
-
language: "bun",
|
|
337
|
-
content: "export async function main(query: string) { return ['doc1', 'doc2']; }",
|
|
338
|
-
input_transforms: { query: { type: "static", value: "" } }
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
]
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
\`\`\`
|
|
345
|
-
|
|
346
|
-
- **Tool IDs**: Cannot contain spaces - use underscores
|
|
347
|
-
- **Tool summaries**: Cannot contain spaces - use underscores
|
|
348
|
-
- **Tool types**: \`flowmodule\` for scripts/flows, \`mcp\` for MCP server tools
|
|
349
|
-
|
|
350
|
-
## Resource Types
|
|
351
|
-
On Windmill, credentials and configuration are stored in resources. Resource types define the format of the resource.
|
|
352
|
-
- Use the \`resource_type\` tool to search for available resource types (e.g. stripe, google, postgresql, etc.)
|
|
353
|
-
- If the user needs a resource as flow input, set the property type in the schema to "object" and add a key called "format" set to "resource-nameofresourcetype" (e.g. "resource-stripe")
|
|
354
|
-
- If the user wants a specific resource as step input, set the step value to a static string in the format: "$res:path/to/resource"
|
|
355
|
-
|
|
356
|
-
### OpenFlow Schema Reference
|
|
357
|
-
Below is the complete OpenAPI schema for OpenFlow. All field descriptions and behaviors are defined here. Refer to this as the authoritative reference when generating flow JSON:
|
|
358
|
-
|
|
359
|
-
\`\`\`json
|
|
360
|
-
${JSON.stringify(openFlowSchema, null, 2)}
|
|
361
|
-
\`\`\`
|
|
362
|
-
|
|
363
|
-
The schema includes detailed descriptions for:
|
|
364
|
-
- **FlowModuleValue types**: rawscript, script, flow, forloopflow, whileloopflow, branchone, branchall, identity, aiagent
|
|
365
|
-
- **Module configuration**: stop_after_if, skip_if, suspend, sleep, cache_ttl, retry, mock, timeout
|
|
366
|
-
- **InputTransform**: static vs javascript, available variables (results, flow_input, flow_input.iter)
|
|
367
|
-
- **Special modules**: preprocessor_module, failure_module
|
|
368
|
-
- **Loop options**: iterator, parallel, parallelism, skip_failures
|
|
369
|
-
- **Branch types**: BranchOne (first match), BranchAll (all execute)
|
|
370
|
-
`;
|
|
371
|
-
/**
|
|
372
|
-
* Minimal single-tool variant.
|
|
373
|
-
* Replaces granular flow editing tools (add_module, remove_module, modify_module, etc.)
|
|
374
|
-
* with a single set_flow_json tool, while keeping all other utility tools.
|
|
375
|
-
* Uses the default system prompt.
|
|
376
|
-
*/
|
|
377
|
-
export const MINIMAL_SINGLE_TOOL_VARIANT = {
|
|
378
|
-
name: 'minimal-single-tool',
|
|
379
|
-
description: 'Default prompt with set_flow_json instead of granular flow editing tools, keeps all utility tools',
|
|
380
|
-
systemPrompt: {
|
|
381
|
-
type: 'custom',
|
|
382
|
-
content: MINIMAL_SINGLE_TOOL_SYSTEM_PROMPT
|
|
383
|
-
},
|
|
384
|
-
tools: {
|
|
385
|
-
type: 'custom',
|
|
386
|
-
tools: buildMinimalSingleToolTools()
|
|
387
|
-
}
|
|
388
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { ChatCompletionMessageParam, ChatCompletionSystemMessageParam } from 'openai/resources/chat/completions.mjs';
|
|
2
|
-
import type { TokenUsage, ToolCallDetail, EvalRunnerOptions } from './types';
|
|
3
|
-
import type { Tool } from './baseVariants';
|
|
4
|
-
/**
|
|
5
|
-
* Result from a single eval run (before domain-specific evaluation).
|
|
6
|
-
*/
|
|
7
|
-
export interface RawEvalResult<TOutput> {
|
|
8
|
-
success: boolean;
|
|
9
|
-
output: TOutput;
|
|
10
|
-
error?: string;
|
|
11
|
-
tokenUsage: TokenUsage;
|
|
12
|
-
toolCallsCount: number;
|
|
13
|
-
toolsCalled: string[];
|
|
14
|
-
toolCallDetails: ToolCallDetail[];
|
|
15
|
-
iterations: number;
|
|
16
|
-
messages: ChatCompletionMessageParam[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Parameters for running a base evaluation.
|
|
20
|
-
*/
|
|
21
|
-
export interface RunEvalParams<THelpers, TOutput> {
|
|
22
|
-
/** The user's prompt/instruction */
|
|
23
|
-
userPrompt: string;
|
|
24
|
-
/** System message for the LLM */
|
|
25
|
-
systemMessage: ChatCompletionSystemMessageParam;
|
|
26
|
-
/** User message for the LLM */
|
|
27
|
-
userMessage: ChatCompletionMessageParam;
|
|
28
|
-
/** Tool definitions for the LLM API (unused — derived from tools) */
|
|
29
|
-
toolDefs?: unknown;
|
|
30
|
-
/** Full tool implementations for execution */
|
|
31
|
-
tools: Tool<THelpers>[];
|
|
32
|
-
/** Domain-specific helpers for tool execution */
|
|
33
|
-
helpers: THelpers;
|
|
34
|
-
/** API key for the provider */
|
|
35
|
-
apiKey: string;
|
|
36
|
-
/** Function to get the current output state */
|
|
37
|
-
getOutput: () => TOutput;
|
|
38
|
-
/** Optional configuration */
|
|
39
|
-
options?: EvalRunnerOptions;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Runs a generic evaluation using the shared chat loop (same code path as production).
|
|
43
|
-
* Uses streaming via real provider SDKs instead of OpenRouter non-streaming.
|
|
44
|
-
*/
|
|
45
|
-
export declare function runEval<THelpers, TOutput>(params: RunEvalParams<THelpers, TOutput>): Promise<RawEvalResult<TOutput>>;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import OpenAI from 'openai';
|
|
2
|
-
import Anthropic from '@anthropic-ai/sdk';
|
|
3
|
-
import { runChatLoop } from '../../chatLoop';
|
|
4
|
-
/**
|
|
5
|
-
* Creates SDK clients for the given provider.
|
|
6
|
-
*/
|
|
7
|
-
function createEvalClients(provider, apiKey) {
|
|
8
|
-
if (provider === 'anthropic') {
|
|
9
|
-
return {
|
|
10
|
-
openai: new OpenAI({ apiKey: 'unused' }),
|
|
11
|
-
anthropic: new Anthropic({ apiKey })
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
openai: new OpenAI({ apiKey }),
|
|
16
|
-
anthropic: new Anthropic({ apiKey: 'unused' })
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Resolves model string to AIProviderModel.
|
|
21
|
-
*/
|
|
22
|
-
function resolveModelProvider(model, provider) {
|
|
23
|
-
if (provider)
|
|
24
|
-
return { provider, model };
|
|
25
|
-
if (model.startsWith('claude'))
|
|
26
|
-
return { provider: 'anthropic', model };
|
|
27
|
-
if (model.startsWith('gpt') || model.startsWith('o'))
|
|
28
|
-
return { provider: 'openai', model };
|
|
29
|
-
return { provider: 'openai', model };
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Runs a generic evaluation using the shared chat loop (same code path as production).
|
|
33
|
-
* Uses streaming via real provider SDKs instead of OpenRouter non-streaming.
|
|
34
|
-
*/
|
|
35
|
-
export async function runEval(params) {
|
|
36
|
-
const { systemMessage, userMessage, tools, helpers, apiKey, getOutput, options } = params;
|
|
37
|
-
const model = options?.model ?? 'gpt-4o';
|
|
38
|
-
const maxIterations = options?.maxIterations ?? 20;
|
|
39
|
-
const workspace = options?.workspace ?? 'test-workspace';
|
|
40
|
-
const provider = options?.provider;
|
|
41
|
-
const modelProvider = resolveModelProvider(model, provider);
|
|
42
|
-
const clients = createEvalClients(modelProvider.provider, apiKey);
|
|
43
|
-
const messages = [userMessage];
|
|
44
|
-
let toolCallsCount = 0;
|
|
45
|
-
const toolsCalled = [];
|
|
46
|
-
const toolCallDetails = [];
|
|
47
|
-
// Wrap tools to intercept fn calls for tracking.
|
|
48
|
-
// Cast to ProductionTool since the eval Tool has a narrower toolCallbacks type
|
|
49
|
-
// but the actual callbacks passed at runtime will satisfy both interfaces.
|
|
50
|
-
const wrappedTools = tools.map((tool) => ({
|
|
51
|
-
...tool,
|
|
52
|
-
fn: async (p) => {
|
|
53
|
-
toolCallsCount++;
|
|
54
|
-
toolsCalled.push(tool.def.function.name);
|
|
55
|
-
try {
|
|
56
|
-
const args = typeof p.args === 'string' ? JSON.parse(p.args) : p.args;
|
|
57
|
-
toolCallDetails.push({ name: tool.def.function.name, arguments: args });
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
toolCallDetails.push({
|
|
61
|
-
name: tool.def.function.name,
|
|
62
|
-
arguments: p.args
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return tool.fn(p);
|
|
66
|
-
}
|
|
67
|
-
}));
|
|
68
|
-
// No-op callbacks for eval
|
|
69
|
-
const callbacks = {
|
|
70
|
-
setToolStatus: () => { },
|
|
71
|
-
removeToolStatus: () => { },
|
|
72
|
-
onNewToken: () => { },
|
|
73
|
-
onMessageEnd: () => { }
|
|
74
|
-
};
|
|
75
|
-
const abortController = new AbortController();
|
|
76
|
-
try {
|
|
77
|
-
const result = await runChatLoop({
|
|
78
|
-
messages,
|
|
79
|
-
systemMessage,
|
|
80
|
-
tools: wrappedTools,
|
|
81
|
-
helpers,
|
|
82
|
-
abortController,
|
|
83
|
-
callbacks,
|
|
84
|
-
modelProvider,
|
|
85
|
-
clients,
|
|
86
|
-
workspace,
|
|
87
|
-
maxIterations,
|
|
88
|
-
skipResponsesApi: modelProvider.provider !== 'openai' && modelProvider.provider !== 'azure_openai'
|
|
89
|
-
});
|
|
90
|
-
return {
|
|
91
|
-
success: true,
|
|
92
|
-
output: getOutput(),
|
|
93
|
-
tokenUsage: { prompt: 0, completion: 0, total: 0 },
|
|
94
|
-
toolCallsCount,
|
|
95
|
-
toolsCalled,
|
|
96
|
-
toolCallDetails,
|
|
97
|
-
iterations: Math.max(1, result.addedMessages.filter((m) => m.role === 'assistant').length),
|
|
98
|
-
messages
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
let errorMessage;
|
|
103
|
-
if (err instanceof Error) {
|
|
104
|
-
errorMessage = err.stack ?? err.message;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
errorMessage = String(err);
|
|
108
|
-
}
|
|
109
|
-
return {
|
|
110
|
-
success: false,
|
|
111
|
-
output: getOutput(),
|
|
112
|
-
error: errorMessage,
|
|
113
|
-
tokenUsage: { prompt: 0, completion: 0, total: 0 },
|
|
114
|
-
toolCallsCount,
|
|
115
|
-
toolsCalled,
|
|
116
|
-
toolCallDetails,
|
|
117
|
-
iterations: 0,
|
|
118
|
-
messages
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { EvaluationResult } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Parameters for LLM-based evaluation.
|
|
4
|
-
*/
|
|
5
|
-
export interface EvaluateParams {
|
|
6
|
-
/** The user's original request/prompt */
|
|
7
|
-
userPrompt: string;
|
|
8
|
-
/** The generated output to evaluate */
|
|
9
|
-
generatedOutput: unknown;
|
|
10
|
-
/** The expected/reference output */
|
|
11
|
-
expectedOutput: unknown;
|
|
12
|
-
/** Domain-specific system prompt for the evaluator */
|
|
13
|
-
evaluatorSystemPrompt: string;
|
|
14
|
-
/** Anthropic API key for evaluation */
|
|
15
|
-
apiKey?: string;
|
|
16
|
-
/** Model to use for evaluation (default: 'claude-sonnet-4-5-20250514') */
|
|
17
|
-
model?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Base evaluator system prompt template.
|
|
21
|
-
* Domain-specific evaluators should build on this structure.
|
|
22
|
-
*/
|
|
23
|
-
export declare const BASE_EVALUATOR_RESPONSE_FORMAT = "\n## Response Format\nYou MUST respond with valid JSON only, no additional text:\n{\n \"resemblanceScore\": <0-100 integer>,\n \"statement\": \"<brief 1-2 sentence summary of how well the output matches the user request and expected output>\",\n \"missingRequirements\": [\"<list any requirements from user prompt that are missing or incorrectly implemented>\"]\n}\n\nScore guidelines:\n- 90-100: Fully addresses user request, functionally equivalent to expected output\n- 70-89: Addresses most user requirements, same overall structure with minor differences\n- 50-69: Partially addresses user request, achieves similar goal but different approach\n- 30-49: Missing significant requirements from user request\n- 0-29: Does not address user request or significantly incorrect";
|
|
24
|
-
/**
|
|
25
|
-
* Evaluates how well a generated output matches an expected output using an LLM.
|
|
26
|
-
* Uses Anthropic API directly instead of OpenRouter.
|
|
27
|
-
*/
|
|
28
|
-
export declare function evaluateWithLLM(params: EvaluateParams): Promise<EvaluationResult>;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
/**
|
|
3
|
-
* Base evaluator system prompt template.
|
|
4
|
-
* Domain-specific evaluators should build on this structure.
|
|
5
|
-
*/
|
|
6
|
-
export const BASE_EVALUATOR_RESPONSE_FORMAT = `
|
|
7
|
-
## Response Format
|
|
8
|
-
You MUST respond with valid JSON only, no additional text:
|
|
9
|
-
{
|
|
10
|
-
"resemblanceScore": <0-100 integer>,
|
|
11
|
-
"statement": "<brief 1-2 sentence summary of how well the output matches the user request and expected output>",
|
|
12
|
-
"missingRequirements": ["<list any requirements from user prompt that are missing or incorrectly implemented>"]
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
Score guidelines:
|
|
16
|
-
- 90-100: Fully addresses user request, functionally equivalent to expected output
|
|
17
|
-
- 70-89: Addresses most user requirements, same overall structure with minor differences
|
|
18
|
-
- 50-69: Partially addresses user request, achieves similar goal but different approach
|
|
19
|
-
- 30-49: Missing significant requirements from user request
|
|
20
|
-
- 0-29: Does not address user request or significantly incorrect`;
|
|
21
|
-
/**
|
|
22
|
-
* Evaluates how well a generated output matches an expected output using an LLM.
|
|
23
|
-
* Uses Anthropic API directly instead of OpenRouter.
|
|
24
|
-
*/
|
|
25
|
-
export async function evaluateWithLLM(params) {
|
|
26
|
-
const { userPrompt, generatedOutput, expectedOutput, evaluatorSystemPrompt, apiKey, model = 'claude-sonnet-4-5-20250514' } = params;
|
|
27
|
-
// @ts-ignore - process.env
|
|
28
|
-
const anthropicKey = apiKey ?? process.env.ANTHROPIC_API_KEY;
|
|
29
|
-
if (!anthropicKey) {
|
|
30
|
-
return {
|
|
31
|
-
success: false,
|
|
32
|
-
resemblanceScore: 0,
|
|
33
|
-
statement: 'No API key available for evaluation',
|
|
34
|
-
error: 'ANTHROPIC_API_KEY not set and no apiKey provided'
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const client = new Anthropic({ apiKey: anthropicKey });
|
|
38
|
-
const userMessage = `## User's Original Request
|
|
39
|
-
${userPrompt}
|
|
40
|
-
|
|
41
|
-
## Expected Reference Output
|
|
42
|
-
\`\`\`json
|
|
43
|
-
${JSON.stringify(expectedOutput, null, 2)}
|
|
44
|
-
\`\`\`
|
|
45
|
-
|
|
46
|
-
## Generated Output
|
|
47
|
-
\`\`\`json
|
|
48
|
-
${JSON.stringify(generatedOutput, null, 2)}
|
|
49
|
-
\`\`\`
|
|
50
|
-
|
|
51
|
-
Please evaluate how well the generated output:
|
|
52
|
-
1. Fulfills ALL requirements from the user's original request
|
|
53
|
-
2. Matches the structure and logic of the expected reference output`;
|
|
54
|
-
try {
|
|
55
|
-
const response = await client.messages.create({
|
|
56
|
-
model,
|
|
57
|
-
max_tokens: 2048,
|
|
58
|
-
system: evaluatorSystemPrompt,
|
|
59
|
-
messages: [
|
|
60
|
-
{ role: 'user', content: userMessage }
|
|
61
|
-
],
|
|
62
|
-
temperature: 0
|
|
63
|
-
});
|
|
64
|
-
const textBlock = response.content.find((block) => block.type === 'text');
|
|
65
|
-
const content = textBlock?.text;
|
|
66
|
-
if (!content) {
|
|
67
|
-
return {
|
|
68
|
-
success: false,
|
|
69
|
-
resemblanceScore: 0,
|
|
70
|
-
statement: 'No response from evaluator',
|
|
71
|
-
error: 'Empty response from LLM'
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
// Parse JSON response - handle potential markdown code blocks
|
|
75
|
-
let jsonContent = content.trim();
|
|
76
|
-
if (jsonContent.startsWith('```')) {
|
|
77
|
-
jsonContent = jsonContent.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
78
|
-
}
|
|
79
|
-
const parsed = JSON.parse(jsonContent);
|
|
80
|
-
return {
|
|
81
|
-
success: true,
|
|
82
|
-
resemblanceScore: Math.max(0, Math.min(100, Math.round(parsed.resemblanceScore))),
|
|
83
|
-
statement: parsed.statement,
|
|
84
|
-
missingRequirements: parsed.missingRequirements ?? []
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
89
|
-
return {
|
|
90
|
-
success: false,
|
|
91
|
-
resemblanceScore: 0,
|
|
92
|
-
statement: 'Evaluation failed',
|
|
93
|
-
error: errorMessage
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
}
|