windmill-components 1.655.2 → 1.665.1
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/ApiConnectForm.svelte +6 -6
- package/package/components/ApiConnectForm.svelte.d.ts +3 -2
- package/package/components/AppConnectDrawer.svelte +3 -1
- package/package/components/AppConnectDrawer.svelte.d.ts +2 -0
- package/package/components/AppConnectInner.svelte +137 -72
- package/package/components/AppConnectInner.svelte.d.ts +1 -0
- package/package/components/CompareWorkspaces.svelte +32 -24
- package/package/components/DBManager.svelte +7 -13
- package/package/components/DBTable.svelte +2 -2
- package/package/components/DBTableEditor.svelte +39 -31
- package/package/components/DBTableEditor.svelte.d.ts +2 -2
- package/package/components/DedicatedWorkersSelector.svelte +292 -85
- package/package/components/DeployWorkspace.svelte +30 -26
- package/package/components/Dev.svelte +7 -2
- package/package/components/Dev.svelte.d.ts +3 -0
- package/package/components/Editor.svelte +17 -13
- package/package/components/EditorBar.svelte.d.ts +1 -1
- package/package/components/FilterSearchbar.svelte +1 -1
- package/package/components/FirstStepInputs.svelte +0 -1
- package/package/components/FlowBuilder.svelte +5 -0
- package/package/components/FlowGraphDiffViewer.svelte +3 -0
- package/package/components/FlowGraphViewer.svelte +7 -4
- package/package/components/FlowGraphViewer.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewerStep.svelte +3 -3
- package/package/components/FlowGraphViewerStep.svelte.d.ts +1 -0
- package/package/components/FlowPreviewContent.svelte +11 -1
- package/package/components/FlowStatusViewer.svelte +4 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -1
- package/package/components/FlowStatusViewerInner.svelte +46 -11
- package/package/components/FlowStatusViewerInner.svelte.d.ts +4 -1
- package/package/components/FlowStatusWaitingForEvents.svelte +48 -103
- package/package/components/FlowTimeline.svelte +76 -84
- package/package/components/FlowViewer.svelte +40 -22
- package/package/components/FlowViewer.svelte.d.ts +8 -2
- package/package/components/GroupEditor.svelte +7 -9
- package/package/components/HistoricList.svelte +12 -4
- package/package/components/InstanceGroupEditor.svelte +92 -19
- package/package/components/InstanceSetting.svelte +16 -6
- package/package/components/InstanceSettings.svelte +51 -7
- package/package/components/InstanceSettings.svelte.d.ts +2 -1
- package/package/components/JobLoader.svelte +5 -4
- package/package/components/JobLoader.svelte.d.ts +1 -1
- package/package/components/Login.svelte +9 -1
- package/package/components/NoMainFuncBadge.svelte +2 -2
- package/package/components/OnBehalfOfSelector.svelte +49 -37
- package/package/components/OnBehalfOfSelector.svelte.d.ts +16 -6
- package/package/components/ResourceEditor.svelte +16 -11
- package/package/components/ResourceEditor.svelte.d.ts +1 -0
- package/package/components/ResourceEditorDrawer.svelte +3 -1
- package/package/components/ResourceEditorDrawer.svelte.d.ts +6 -2
- package/package/components/ResourcePicker.svelte +10 -5
- package/package/components/ResourcePicker.svelte.d.ts +2 -0
- package/package/components/S3FilePickerInner.svelte +12 -4
- package/package/components/SchemaForm.svelte +20 -14
- package/package/components/SchemaForm.svelte.d.ts +2 -2
- package/package/components/ScriptBuilder.svelte +158 -18
- package/package/components/ScriptEditor.svelte +674 -150
- package/package/components/ScriptEditor.svelte.d.ts +7 -3
- package/package/components/SuperadminSettings.svelte +4 -1
- package/package/components/SuperadminSettingsInner.svelte +176 -67
- package/package/components/SuperadminSettingsInner.svelte.d.ts +3 -1
- package/package/components/SyncResourceTypes.svelte +31 -0
- package/package/components/SyncResourceTypes.svelte.d.ts +6 -0
- package/package/components/TimelineBar.svelte +14 -8
- package/package/components/TimelineBar.svelte.d.ts +1 -0
- package/package/components/WorkerGroup.svelte +11 -4
- package/package/components/WorkflowTimeline.svelte +386 -58
- package/package/components/WorkflowTimeline.svelte.d.ts +6 -1
- package/package/components/WorkspaceDependenciesEditor.svelte +32 -2
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte +2 -2
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +2 -2
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte +2 -2
- package/package/components/apps/components/display/dbtable/metadata.js +44 -222
- package/package/components/apps/components/display/dbtable/queries/count.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/delete.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/insert.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +7 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +1 -1
- package/package/components/apps/components/display/dbtable/queries/select.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/update.d.ts +9 -0
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +11 -9
- package/package/components/apps/editor/appUtilsS3.js +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +53 -10
- package/package/components/common/clearableInput/ClearableInput.svelte +3 -7
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +7 -1
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +1 -0
- package/package/components/common/drawer/Disposable.svelte +24 -2
- package/package/components/common/drawer/Disposable.svelte.d.ts +5 -0
- package/package/components/common/modal/Modal.svelte +84 -58
- package/package/components/common/table/AppRow.svelte.d.ts +1 -1
- package/package/components/common/table/FlowRow.svelte.d.ts +1 -1
- package/package/components/common/table/ScriptRow.svelte +31 -3
- package/package/components/common/table/ScriptRow.svelte.d.ts +1 -1
- package/package/components/copilot/MetadataGen.svelte +8 -5
- package/package/components/copilot/MetadataGen.svelte.d.ts +1 -0
- package/package/components/copilot/TestAIKey.svelte +2 -1
- package/package/components/copilot/TestAIKey.svelte.d.ts +1 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +62 -80
- package/package/components/copilot/chat/HistoryManager.svelte.d.ts +1 -0
- package/package/components/copilot/chat/HistoryManager.svelte.js +3 -0
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +47 -31
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +1 -6
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +18 -13
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +14 -5
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +13 -12
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +46 -29
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +1 -4
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +14 -5
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +13 -12
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +5 -8
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +82 -108
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +4 -7
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +19 -11
- package/package/components/copilot/chat/__tests__/shared/types.d.ts +3 -0
- package/package/components/copilot/chat/anthropic.d.ts +9 -2
- package/package/components/copilot/chat/anthropic.js +12 -6
- package/package/components/copilot/chat/app/core.js +5 -12
- package/package/components/copilot/chat/chatLoop.d.ts +40 -0
- package/package/components/copilot/chat/chatLoop.js +97 -0
- package/package/components/copilot/chat/openai-responses.d.ts +8 -2
- package/package/components/copilot/chat/openai-responses.js +17 -17
- package/package/components/copilot/chat/shared.d.ts +2 -1
- package/package/components/copilot/chat/shared.js +2 -2
- package/package/components/copilot/lib.d.ts +14 -5
- package/package/components/copilot/lib.js +68 -48
- package/package/components/dbOps.d.ts +2 -2
- package/package/components/dbOps.js +129 -53
- package/package/components/debug/debugUtils.d.ts +5 -0
- package/package/components/debug/debugUtils.js +20 -0
- package/package/components/debug/index.d.ts +1 -1
- package/package/components/debug/index.js +3 -7
- package/package/components/flows/CreateActionsFlow.svelte +221 -43
- package/package/components/flows/DebounceLimit.svelte +42 -9
- package/package/components/flows/common/FlowCard.svelte +2 -1
- package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCardHeader.svelte +14 -10
- package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/AgentToolWrapper.svelte +2 -1
- package/package/components/flows/content/AgentToolWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +32 -18
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleDebounce.svelte +46 -0
- package/package/components/flows/content/FlowModuleDebounce.svelte.d.ts +8 -0
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +26 -5
- package/package/components/flows/content/FlowModuleWrapper.svelte +1 -0
- package/package/components/flows/content/FlowRetries.svelte +57 -57
- package/package/components/flows/content/FlowSelectionPanel.svelte +9 -14
- package/package/components/flows/content/FlowSelectionPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowSettings.svelte +6 -6
- package/package/components/flows/content/ScriptEditorDrawer.svelte +1 -1
- package/package/components/flows/content/SuspendDrawer.svelte +0 -18
- package/package/components/flows/header/FlowYamlEditor.svelte +20 -4
- package/package/components/flows/map/FlowErrorHandlerItem.svelte +32 -14
- package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -10
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -8
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte.d.ts +0 -2
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +343 -137
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowStickyNode.svelte +24 -16
- package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
- package/package/components/flows/map/VirtualItemWrapper.svelte +1 -1
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +5 -1
- package/package/components/flows/scheduleUtils.js +3 -1
- package/package/components/flows/utils.svelte.js +6 -1
- package/package/components/git_sync/GitSyncContext.svelte.js +13 -2
- package/package/components/git_sync/GitSyncSection.svelte +135 -99
- package/package/components/graph/DragGhost.svelte +11 -2
- package/package/components/graph/FlowGraphV2.svelte +138 -42
- package/package/components/graph/FlowGraphV2.svelte.d.ts +15 -1
- package/package/components/graph/GroupActionBar.svelte +124 -0
- package/package/components/graph/GroupActionBar.svelte.d.ts +20 -0
- package/package/components/graph/GroupHeader.svelte +98 -0
- package/package/components/graph/GroupHeader.svelte.d.ts +11 -0
- package/package/components/graph/GroupHeaderBlock.svelte +58 -0
- package/package/components/graph/GroupHeaderBlock.svelte.d.ts +13 -0
- package/package/components/graph/GroupModuleIcons.svelte +163 -0
- package/package/components/graph/GroupModuleIcons.svelte.d.ts +11 -0
- package/package/components/graph/GroupNodeCard.svelte +127 -0
- package/package/components/graph/GroupNodeCard.svelte.d.ts +18 -0
- package/package/components/graph/GroupNoteArea.svelte +132 -0
- package/package/components/graph/GroupNoteArea.svelte.d.ts +11 -0
- package/package/components/graph/GroupOverlay.svelte +71 -0
- package/package/components/graph/GroupOverlay.svelte.d.ts +12 -0
- package/package/components/graph/MiniFlowGraph.svelte +17 -2
- package/package/components/graph/SelectionBoundingBox.svelte +14 -14
- package/package/components/graph/compoundLayout.d.ts +17 -1
- package/package/components/graph/compoundLayout.js +129 -14
- package/package/components/graph/flowStructure.d.ts +63 -0
- package/package/components/graph/flowStructure.js +422 -0
- package/package/components/graph/flowStructure.test.d.ts +1 -0
- package/package/components/graph/flowStructure.test.js +205 -0
- package/package/components/graph/graphBuilder.svelte.d.ts +52 -3
- package/package/components/graph/graphBuilder.svelte.js +170 -67
- package/package/components/graph/graphContext.d.ts +7 -0
- package/package/components/graph/groupDetectionUtils.d.ts +24 -1
- package/package/components/graph/groupDetectionUtils.js +101 -1
- package/package/components/graph/groupEditor.svelte.d.ts +105 -0
- package/package/components/graph/groupEditor.svelte.js +253 -0
- package/package/components/graph/groupedModulesProxy.svelte.d.ts +55 -0
- package/package/components/graph/groupedModulesProxy.svelte.js +130 -0
- package/package/components/graph/model.d.ts +2 -1
- package/package/components/graph/moveManager.svelte.js +0 -3
- package/package/components/graph/nodeExtraSpace.d.ts +32 -0
- package/package/components/graph/nodeExtraSpace.js +113 -0
- package/package/components/graph/noteColors.d.ts +1 -0
- package/package/components/graph/noteColors.js +20 -10
- package/package/components/graph/noteUtils.svelte.d.ts +0 -18
- package/package/components/graph/noteUtils.svelte.js +6 -41
- package/package/components/graph/renderers/edges/BaseEdge.svelte +26 -11
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +24 -49
- package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +1 -4
- package/package/components/graph/renderers/nodes/AssetNode.svelte +1 -27
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +0 -4
- package/package/components/graph/renderers/nodes/CollapsedGroupNode.svelte +85 -0
- package/package/components/graph/renderers/nodes/CollapsedGroupNode.svelte.d.ts +8 -0
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +3 -2
- package/package/components/graph/renderers/nodes/GroupEndNode.svelte +9 -0
- package/package/components/graph/renderers/nodes/GroupEndNode.svelte.d.ts +6 -0
- package/package/components/graph/renderers/nodes/GroupHeadNode.svelte +20 -0
- package/package/components/graph/renderers/nodes/GroupHeadNode.svelte.d.ts +8 -0
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +8 -5
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +1 -1
- package/package/components/graph/util.d.ts +5 -1
- package/package/components/graph/util.js +7 -5
- package/package/components/home/Item.svelte +1 -0
- package/package/components/home/ItemsList.svelte +1 -1
- package/package/components/icons/ActiveCampaignIcon.svelte +10 -0
- package/package/components/icons/ActiveCampaignIcon.svelte.d.ts +7 -0
- package/package/components/icons/AlgoliaIcon.svelte +7 -0
- package/package/components/icons/AlgoliaIcon.svelte.d.ts +7 -0
- package/package/components/icons/ApolloIcon.svelte +7 -0
- package/package/components/icons/ApolloIcon.svelte.d.ts +7 -0
- package/package/components/icons/BambooHrIcon.svelte +7 -0
- package/package/components/icons/BambooHrIcon.svelte.d.ts +7 -0
- package/package/components/icons/BaremetricsIcon.svelte +7 -0
- package/package/components/icons/BaremetricsIcon.svelte.d.ts +7 -0
- package/package/components/icons/BitlyIcon.svelte +7 -0
- package/package/components/icons/BitlyIcon.svelte.d.ts +7 -0
- package/package/components/icons/BloggerIcon.svelte +7 -0
- package/package/components/icons/BloggerIcon.svelte.d.ts +7 -0
- package/package/components/icons/BlueskyIcon.svelte +7 -0
- package/package/components/icons/BlueskyIcon.svelte.d.ts +7 -0
- package/package/components/icons/BoxIcon.svelte +7 -0
- package/package/components/icons/BoxIcon.svelte.d.ts +7 -0
- package/package/components/icons/BrevoIcon.svelte +7 -0
- package/package/components/icons/BrevoIcon.svelte.d.ts +7 -0
- package/package/components/icons/BrexIcon.svelte +7 -0
- package/package/components/icons/BrexIcon.svelte.d.ts +7 -0
- package/package/components/icons/BrowserlessIcon.svelte +7 -0
- package/package/components/icons/BrowserlessIcon.svelte.d.ts +7 -0
- package/package/components/icons/BubbleIcon.svelte +11 -0
- package/package/components/icons/BubbleIcon.svelte.d.ts +7 -0
- package/package/components/icons/BuildkiteIcon.svelte +7 -0
- package/package/components/icons/BuildkiteIcon.svelte.d.ts +7 -0
- package/package/components/icons/CalcomIcon.svelte +1 -1
- package/package/components/icons/CalendlyIcon.svelte +7 -0
- package/package/components/icons/CalendlyIcon.svelte.d.ts +7 -0
- package/package/components/icons/CircleCiIcon.svelte +7 -0
- package/package/components/icons/CircleCiIcon.svelte.d.ts +7 -0
- package/package/components/icons/CiscoIcon.svelte +7 -0
- package/package/components/icons/CiscoIcon.svelte.d.ts +7 -0
- package/package/components/icons/ClearbitIcon.svelte +7 -0
- package/package/components/icons/ClearbitIcon.svelte.d.ts +7 -0
- package/package/components/icons/ClerkIcon.svelte +7 -0
- package/package/components/icons/ClerkIcon.svelte.d.ts +7 -0
- package/package/components/icons/CloseIcon.svelte +37 -0
- package/package/components/icons/CloseIcon.svelte.d.ts +7 -0
- package/package/components/icons/CloudinaryIcon.svelte +7 -0
- package/package/components/icons/CloudinaryIcon.svelte.d.ts +7 -0
- package/package/components/icons/CockroachDbIcon.svelte +7 -0
- package/package/components/icons/CockroachDbIcon.svelte.d.ts +7 -0
- package/package/components/icons/CodaIcon.svelte +7 -0
- package/package/components/icons/CodaIcon.svelte.d.ts +7 -0
- package/package/components/icons/CohereIcon.svelte +16 -0
- package/package/components/icons/CohereIcon.svelte.d.ts +7 -0
- package/package/components/icons/CoinMarketCapIcon.svelte +7 -0
- package/package/components/icons/CoinMarketCapIcon.svelte.d.ts +7 -0
- package/package/components/icons/CoinbaseIcon.svelte +7 -0
- package/package/components/icons/CoinbaseIcon.svelte.d.ts +7 -0
- package/package/components/icons/ConfluenceIcon.svelte +7 -0
- package/package/components/icons/ConfluenceIcon.svelte.d.ts +7 -0
- package/package/components/icons/ContentfulIcon.svelte +7 -0
- package/package/components/icons/ContentfulIcon.svelte.d.ts +7 -0
- package/package/components/icons/ConvertKitIcon.svelte +7 -0
- package/package/components/icons/ConvertKitIcon.svelte.d.ts +7 -0
- package/package/components/icons/DatoCmsIcon.svelte +7 -0
- package/package/components/icons/DatoCmsIcon.svelte.d.ts +7 -0
- package/package/components/icons/DeelIcon.svelte +7 -0
- package/package/components/icons/DeelIcon.svelte.d.ts +7 -0
- package/package/components/icons/DeepLIcon.svelte +7 -0
- package/package/components/icons/DeepLIcon.svelte.d.ts +7 -0
- package/package/components/icons/DigitalOceanIcon.svelte +7 -0
- package/package/components/icons/DigitalOceanIcon.svelte.d.ts +7 -0
- package/package/components/icons/DiscourseIcon.svelte +7 -0
- package/package/components/icons/DiscourseIcon.svelte.d.ts +7 -0
- package/package/components/icons/DocusignIcon.svelte +7 -0
- package/package/components/icons/DocusignIcon.svelte.d.ts +7 -0
- package/package/components/icons/DropboxIcon.svelte +7 -0
- package/package/components/icons/DropboxIcon.svelte.d.ts +7 -0
- package/package/components/icons/EdgeDbIcon.svelte +16 -20
- package/package/components/icons/EventbriteIcon.svelte +10 -0
- package/package/components/icons/EventbriteIcon.svelte.d.ts +7 -0
- package/package/components/icons/FigmaIcon.svelte +7 -0
- package/package/components/icons/FigmaIcon.svelte.d.ts +7 -0
- package/package/components/icons/FlyIcon.svelte +7 -0
- package/package/components/icons/FlyIcon.svelte.d.ts +7 -0
- package/package/components/icons/FreshdeskIcon.svelte +7 -0
- package/package/components/icons/FreshdeskIcon.svelte.d.ts +7 -0
- package/package/components/icons/FrontAppIcon.svelte +7 -0
- package/package/components/icons/FrontAppIcon.svelte.d.ts +7 -0
- package/package/components/icons/GhostCmsIcon.svelte +7 -0
- package/package/components/icons/GhostCmsIcon.svelte.d.ts +7 -0
- package/package/components/icons/GiphyIcon.svelte +7 -0
- package/package/components/icons/GiphyIcon.svelte.d.ts +7 -0
- package/package/components/icons/GitBookIcon.svelte +7 -0
- package/package/components/icons/GitBookIcon.svelte.d.ts +7 -0
- package/package/components/icons/GroqIcon.svelte +7 -0
- package/package/components/icons/GroqIcon.svelte.d.ts +7 -0
- package/package/components/icons/HoneybadgerIcon.svelte +7 -0
- package/package/components/icons/HoneybadgerIcon.svelte.d.ts +7 -0
- package/package/components/icons/HttpIcon.svelte +1 -0
- package/package/components/icons/IftttIcon.svelte +7 -0
- package/package/components/icons/IftttIcon.svelte.d.ts +7 -0
- package/package/components/icons/IntercomIcon.svelte +7 -0
- package/package/components/icons/IntercomIcon.svelte.d.ts +7 -0
- package/package/components/icons/JoomlaIcon.svelte +7 -0
- package/package/components/icons/JoomlaIcon.svelte.d.ts +7 -0
- package/package/components/icons/LineIcon.svelte +7 -0
- package/package/components/icons/LineIcon.svelte.d.ts +7 -0
- package/package/components/icons/LinearIcon.svelte +7 -0
- package/package/components/icons/LinearIcon.svelte.d.ts +7 -0
- package/package/components/icons/LinodeIcon.svelte +7 -0
- package/package/components/icons/LinodeIcon.svelte.d.ts +7 -0
- package/package/components/icons/LumaAiIcon.svelte +39 -0
- package/package/components/icons/LumaAiIcon.svelte.d.ts +7 -0
- package/package/components/icons/MSTeamsIcon.svelte +20 -38
- package/package/components/icons/MSTeamsIcon.svelte.d.ts +2 -0
- package/package/components/icons/MagentoIcon.svelte +7 -0
- package/package/components/icons/MagentoIcon.svelte.d.ts +7 -0
- package/package/components/icons/MailchimpIcon.svelte +25 -13
- package/package/components/icons/MandrillIcon.svelte +7 -0
- package/package/components/icons/MandrillIcon.svelte.d.ts +7 -0
- package/package/components/icons/MauticIcon.svelte +7 -0
- package/package/components/icons/MauticIcon.svelte.d.ts +7 -0
- package/package/components/icons/MediumIcon.svelte +7 -0
- package/package/components/icons/MediumIcon.svelte.d.ts +7 -0
- package/package/components/icons/MiroIcon.svelte +7 -0
- package/package/components/icons/MiroIcon.svelte.d.ts +7 -0
- package/package/components/icons/MistralIcon.svelte +7 -0
- package/package/components/icons/MistralIcon.svelte.d.ts +7 -0
- package/package/components/icons/MixpanelIcon.svelte +7 -0
- package/package/components/icons/MixpanelIcon.svelte.d.ts +7 -0
- package/package/components/icons/MondayIcon.svelte +7 -0
- package/package/components/icons/MondayIcon.svelte.d.ts +7 -0
- package/package/components/icons/NeonDbIcon.svelte +23 -0
- package/package/components/icons/NeonDbIcon.svelte.d.ts +7 -0
- package/package/components/icons/NetlifyIcon.svelte +7 -0
- package/package/components/icons/NetlifyIcon.svelte.d.ts +7 -0
- package/package/components/icons/OneSignalIcon.svelte +9 -0
- package/package/components/icons/OneSignalIcon.svelte.d.ts +7 -0
- package/package/components/icons/OpenWeatherIcon.svelte +7 -0
- package/package/components/icons/OpenWeatherIcon.svelte.d.ts +7 -0
- package/package/components/icons/PagerDutyIcon.svelte +7 -0
- package/package/components/icons/PagerDutyIcon.svelte.d.ts +7 -0
- package/package/components/icons/PandaDocIcon.svelte +7 -0
- package/package/components/icons/PandaDocIcon.svelte.d.ts +7 -0
- package/package/components/icons/PaypalIcon.svelte +7 -0
- package/package/components/icons/PaypalIcon.svelte.d.ts +7 -0
- package/package/components/icons/PersonioIcon.svelte +7 -0
- package/package/components/icons/PersonioIcon.svelte.d.ts +7 -0
- package/package/components/icons/PinterestIcon.svelte +7 -0
- package/package/components/icons/PinterestIcon.svelte.d.ts +7 -0
- package/package/components/icons/PipedriveIcon.svelte +11 -0
- package/package/components/icons/PipedriveIcon.svelte.d.ts +7 -0
- package/package/components/icons/PlanetScaleIcon.svelte +7 -0
- package/package/components/icons/PlanetScaleIcon.svelte.d.ts +7 -0
- package/package/components/icons/PostmarkIcon.svelte +7 -0
- package/package/components/icons/PostmarkIcon.svelte.d.ts +7 -0
- package/package/components/icons/PusherIcon.svelte +7 -0
- package/package/components/icons/PusherIcon.svelte.d.ts +7 -0
- package/package/components/icons/QuickbooksIcon.svelte +13 -1
- package/package/components/icons/RaindropIcon.svelte +27 -0
- package/package/components/icons/RaindropIcon.svelte.d.ts +7 -0
- package/package/components/icons/ReadwiseIcon.svelte +12 -0
- package/package/components/icons/ReadwiseIcon.svelte.d.ts +7 -0
- package/package/components/icons/RenderIcon.svelte +7 -0
- package/package/components/icons/RenderIcon.svelte.d.ts +7 -0
- package/package/components/icons/ReplicateIcon.svelte +7 -0
- package/package/components/icons/ReplicateIcon.svelte.d.ts +7 -0
- package/package/components/icons/ResendIcon.svelte +1 -1
- package/package/components/icons/RestIcon.svelte +1 -0
- package/package/components/icons/RingCentralIcon.svelte +7 -0
- package/package/components/icons/RingCentralIcon.svelte.d.ts +7 -0
- package/package/components/icons/RocketChatIcon.svelte +7 -0
- package/package/components/icons/RocketChatIcon.svelte.d.ts +7 -0
- package/package/components/icons/RunPodIcon.svelte +8 -0
- package/package/components/icons/RunPodIcon.svelte.d.ts +7 -0
- package/package/components/icons/RustIcon.svelte +74 -56
- package/package/components/icons/SalesforceIcon.svelte +7 -0
- package/package/components/icons/SalesforceIcon.svelte.d.ts +7 -0
- package/package/components/icons/SegmentIcon.svelte +7 -0
- package/package/components/icons/SegmentIcon.svelte.d.ts +7 -0
- package/package/components/icons/SentryIcon.svelte +7 -0
- package/package/components/icons/SentryIcon.svelte.d.ts +7 -0
- package/package/components/icons/ServiceNowIcon.svelte +7 -0
- package/package/components/icons/ServiceNowIcon.svelte.d.ts +7 -0
- package/package/components/icons/ShortcutIcon.svelte +7 -0
- package/package/components/icons/ShortcutIcon.svelte.d.ts +7 -0
- package/package/components/icons/SigNozIcon.svelte +8 -0
- package/package/components/icons/SigNozIcon.svelte.d.ts +7 -0
- package/package/components/icons/SmartsheetIcon.svelte +7 -0
- package/package/components/icons/SmartsheetIcon.svelte.d.ts +7 -0
- package/package/components/icons/SpeechifyIcon.svelte +7 -0
- package/package/components/icons/SpeechifyIcon.svelte.d.ts +7 -0
- package/package/components/icons/SplitwiseIcon.svelte +7 -0
- package/package/components/icons/SplitwiseIcon.svelte.d.ts +7 -0
- package/package/components/icons/StravaIcon.svelte +7 -0
- package/package/components/icons/StravaIcon.svelte.d.ts +7 -0
- package/package/components/icons/TallyIcon.svelte +7 -0
- package/package/components/icons/TallyIcon.svelte.d.ts +7 -0
- package/package/components/icons/TelnyxIcon.svelte +19 -0
- package/package/components/icons/TelnyxIcon.svelte.d.ts +7 -0
- package/package/components/icons/ThreadsIcon.svelte +7 -0
- package/package/components/icons/ThreadsIcon.svelte.d.ts +7 -0
- package/package/components/icons/TodoistIcon.svelte +7 -0
- package/package/components/icons/TodoistIcon.svelte.d.ts +7 -0
- package/package/components/icons/TogetherAiIcon.svelte +23 -0
- package/package/components/icons/TogetherAiIcon.svelte.d.ts +7 -0
- package/package/components/icons/TrelloIcon.svelte +22 -1
- package/package/components/icons/TursoIcon.svelte +7 -0
- package/package/components/icons/TursoIcon.svelte.d.ts +7 -0
- package/package/components/icons/TwitchIcon.svelte +7 -0
- package/package/components/icons/TwitchIcon.svelte.d.ts +7 -0
- package/package/components/icons/TwitterIcon.svelte +7 -0
- package/package/components/icons/TwitterIcon.svelte.d.ts +7 -0
- package/package/components/icons/TypeformIcon.svelte +1 -1
- package/package/components/icons/VercelIcon.svelte +7 -0
- package/package/components/icons/VercelIcon.svelte.d.ts +7 -0
- package/package/components/icons/WebflowIcon.svelte +7 -0
- package/package/components/icons/WebflowIcon.svelte.d.ts +7 -0
- package/package/components/icons/WooCommerceIcon.svelte +7 -0
- package/package/components/icons/WooCommerceIcon.svelte.d.ts +7 -0
- package/package/components/icons/WordpressIcon.svelte +7 -0
- package/package/components/icons/WordpressIcon.svelte.d.ts +7 -0
- package/package/components/icons/XataIcon.svelte +13 -0
- package/package/components/icons/XataIcon.svelte.d.ts +7 -0
- package/package/components/icons/YelpIcon.svelte +7 -0
- package/package/components/icons/YelpIcon.svelte.d.ts +7 -0
- package/package/components/icons/YnabIcon.svelte +7 -0
- package/package/components/icons/YnabIcon.svelte.d.ts +7 -0
- package/package/components/icons/YoutubeIcon.svelte +7 -0
- package/package/components/icons/YoutubeIcon.svelte.d.ts +7 -0
- package/package/components/icons/ZendeskIcon.svelte +1 -1
- package/package/components/icons/ZeroTierIcon.svelte +7 -0
- package/package/components/icons/ZeroTierIcon.svelte.d.ts +7 -0
- package/package/components/icons/ZoomIcon.svelte +7 -0
- package/package/components/icons/ZoomIcon.svelte.d.ts +7 -0
- package/package/components/icons/index.d.ts +111 -1
- package/package/components/icons/index.js +225 -2
- package/package/components/instanceSettings/GhesAppSettings.svelte +161 -0
- package/package/components/instanceSettings/GhesAppSettings.svelte.d.ts +8 -0
- package/package/components/instanceSettings/IndexerMemorySettings.svelte +19 -8
- package/package/components/instanceSettings/InstanceAISettings.svelte +132 -0
- package/package/components/instanceSettings/InstanceAISettings.svelte.d.ts +10 -0
- package/package/components/instanceSettings/WorkspaceRegistries.svelte +293 -0
- package/package/components/instanceSettings/WorkspaceRegistries.svelte.d.ts +8 -0
- package/package/components/instanceSettings/WsConnectivityTest.svelte +177 -0
- package/package/components/instanceSettings/WsConnectivityTest.svelte.d.ts +7 -0
- package/package/components/instanceSettings.d.ts +3 -1
- package/package/components/instanceSettings.js +92 -2
- package/package/components/mcp/McpScopeSelector.svelte +408 -0
- package/package/components/mcp/McpScopeSelector.svelte.d.ts +7 -0
- package/package/components/meltComponents/Popover.svelte +0 -1
- package/package/components/raw_apps/RawAppPreview.svelte +6 -2
- package/package/components/recording/FlowRecordingReplay.svelte +94 -52
- package/package/components/recording/FlowRecordingReplay.svelte.d.ts +10 -1
- package/package/components/recording/ScriptRecordingReplay.svelte +139 -76
- package/package/components/recording/ScriptRecordingReplay.svelte.d.ts +10 -1
- package/package/components/runs/JobRunsPreview.svelte +8 -1
- package/package/components/runs/TimeframeSelect.svelte +0 -1
- package/package/components/schema/JobSchemaPicker.svelte +8 -2
- package/package/components/schema/JobSchemaPicker.svelte.d.ts +1 -0
- package/package/components/schema/SchemaFormDND.svelte +15 -3
- package/package/components/scriptEditor/LogPanel.svelte +78 -68
- package/package/components/script_builder.d.ts +1 -1
- package/package/components/scripts/CreateActionsScript.svelte +3 -3
- package/package/components/scripts/WacExportDrawer.svelte +127 -0
- package/package/components/scripts/WacExportDrawer.svelte.d.ts +8 -0
- package/package/components/scripts/scriptStore.svelte.d.ts +2 -0
- package/package/components/scripts/scriptStore.svelte.js +2 -0
- package/package/components/select/SelectDropdown.svelte +1 -1
- package/package/components/settings/AIPromptsModal.svelte +5 -2
- package/package/components/settings/AIPromptsModal.svelte.d.ts +1 -1
- package/package/components/settings/CloudQuotas.svelte +152 -0
- package/package/components/settings/CloudQuotas.svelte.d.ts +3 -0
- package/package/components/settings/CreateToken.svelte +15 -430
- package/package/components/settings/Trashbin.svelte +248 -0
- package/package/components/settings/Trashbin.svelte.d.ts +3 -0
- package/package/components/sidebar/MultiplayerMenu.svelte +14 -4
- package/package/components/triggers/DeleteTriggerButton.svelte +1 -0
- package/package/components/triggers/PermissionedAsLine.svelte +66 -0
- package/package/components/triggers/PermissionedAsLine.svelte.d.ts +9 -0
- package/package/components/triggers/TriggerEditorToolbar.svelte +2 -2
- package/package/components/triggers/TriggerTokens.svelte +3 -3
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +19 -1
- package/package/components/triggers/email/utils.js +3 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +24 -4
- package/package/components/triggers/gcp/utils.js +2 -0
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +22 -3
- package/package/components/triggers/http/RouteEditorInner.svelte +28 -6
- package/package/components/triggers/http/RoutesGenerator.svelte +13 -2
- package/package/components/triggers/http/utils.js +3 -1
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +23 -6
- package/package/components/triggers/kafka/utils.js +3 -1
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +27 -5
- package/package/components/triggers/mqtt/utils.js +2 -0
- package/package/components/triggers/native/NativeTriggerEditor.svelte +23 -1
- package/package/components/triggers/native/NativeTriggerTable.svelte +14 -3
- package/package/components/triggers/native/utils.js +3 -2
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +19 -1
- package/package/components/triggers/nats/utils.js +2 -0
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +19 -1
- package/package/components/triggers/postgres/utils.js +2 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +29 -7
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +19 -1
- package/package/components/triggers/sqs/utils.js +2 -0
- package/package/components/triggers/utils.js +9 -2
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +24 -4
- package/package/components/triggers/websocket/utils.js +3 -1
- package/package/components/workspaceSettings/AISettings.svelte +342 -214
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +18 -10
- package/package/components/workspaceSettings/CreateWorkspace.svelte +304 -196
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +1 -2
- package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
- package/package/components/workspaceSettings/InstanceFallbackSettings.svelte +75 -0
- package/package/components/workspaceSettings/InstanceFallbackSettings.svelte.d.ts +9 -0
- package/package/components/workspaceSettings/StorageSettings.svelte +4 -35
- package/package/components/workspaceSettings/VolumeStorageSettings.svelte +80 -0
- package/package/components/workspaceSettings/VolumeStorageSettings.svelte.d.ts +10 -0
- package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +4 -1
- package/package/forLater.js +4 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +294 -94
- package/package/gen/schemas.gen.js +294 -94
- package/package/gen/services.gen.d.ts +121 -5
- package/package/gen/services.gen.js +237 -5
- package/package/gen/types.gen.d.ts +715 -91
- package/package/githubApp.js +19 -1
- package/package/hubPaths.json +8 -4
- package/package/infer.d.ts +1 -1
- package/package/infer.js +5 -1
- package/package/logoutRedirect.d.ts +1 -0
- package/package/logoutRedirect.js +24 -0
- package/package/script_helpers.d.ts +8 -2
- package/package/script_helpers.js +15 -1
- package/package/services/trashService.d.ts +28 -0
- package/package/services/trashService.js +47 -0
- package/package/stores.d.ts +1 -0
- package/package/stores.js +1 -0
- package/package/system_prompts/index.d.ts +1 -0
- package/package/system_prompts/index.js +7 -0
- package/package/system_prompts/prompts.d.ts +7 -5
- package/package/system_prompts/prompts.js +182 -11
- package/package/templates/wac_python.py.template +42 -0
- package/package/templates/wac_typescript.ts.template +48 -0
- package/package/utils_deployable.d.ts +22 -21
- package/package/utils_deployable.js +58 -25
- package/package/utils_workspace_deploy.d.ts +15 -4
- package/package/utils_workspace_deploy.js +19 -15
- package/package/wsUrl.d.ts +1 -0
- package/package/wsUrl.js +15 -0
- package/package.json +13 -5
- package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
- package/dist/sharedUtils/base.d.ts +0 -1
- package/dist/sharedUtils/cloud.d.ts +0 -1
- package/dist/sharedUtils/common.d.ts +0 -111
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
- package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
- package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
- package/dist/sharedUtils/components/apps/types.d.ts +0 -274
- package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
- package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
- package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
- package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
- package/dist/sharedUtils/components/common/index.d.ts +0 -24
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
- package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
- package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
- package/dist/sharedUtils/components/ducklake.d.ts +0 -1
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
- package/dist/sharedUtils/components/icons/index.d.ts +0 -101
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
- package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers.d.ts +0 -20
- package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
- package/dist/sharedUtils/gen/core/request.d.ts +0 -29
- package/dist/sharedUtils/gen/index.d.ts +0 -6
- package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
- package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
- package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
- package/dist/sharedUtils/history.svelte.d.ts +0 -9
- package/dist/sharedUtils/hub.d.ts +0 -49
- package/dist/sharedUtils/jsr.json +0 -6
- package/dist/sharedUtils/lib.d.ts +0 -5
- package/dist/sharedUtils/lib.es.js +0 -1588
- package/dist/sharedUtils/package.json +0 -12
- package/dist/sharedUtils/schema.d.ts +0 -3
- package/dist/sharedUtils/stores.d.ts +0 -97
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
- package/dist/sharedUtils/toast.d.ts +0 -8
- package/dist/sharedUtils/utils.d.ts +0 -265
- package/package/components/graph/NodeContextMenu.svelte +0 -36
- package/package/components/graph/NodeContextMenu.svelte.d.ts +0 -8
- package/package/svelte5Utils.svelte.d.ts +0 -184
|
@@ -6,50 +6,66 @@ import { loadAppFixtureForEval } from './appFixtureLoader';
|
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
7
|
// @ts-ignore - Node.js url
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
|
-
// Get API
|
|
9
|
+
// Get API keys from environment - tests will be skipped if none are set
|
|
10
10
|
// @ts-ignore
|
|
11
|
-
const
|
|
12
|
-
//
|
|
13
|
-
const
|
|
11
|
+
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
|
|
14
|
+
const hasAnyKey = OPENAI_API_KEY || ANTHROPIC_API_KEY;
|
|
15
|
+
const describeWithApiKey = hasAnyKey ? describe : describe.skip;
|
|
14
16
|
// Get __dirname equivalent for ES modules
|
|
15
17
|
const __filename = fileURLToPath(import.meta.url);
|
|
16
18
|
const __dirname = dirname(__filename);
|
|
17
|
-
const
|
|
19
|
+
const MODEL_VARIANTS = [
|
|
20
|
+
...(OPENAI_API_KEY
|
|
21
|
+
? [{ model: 'gpt-4o', provider: 'openai', apiKey: OPENAI_API_KEY }]
|
|
22
|
+
: []),
|
|
23
|
+
...(ANTHROPIC_API_KEY
|
|
24
|
+
? [
|
|
25
|
+
{
|
|
26
|
+
model: 'claude-haiku-4-5-20241022',
|
|
27
|
+
provider: 'anthropic',
|
|
28
|
+
apiKey: ANTHROPIC_API_KEY
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
: [])
|
|
32
|
+
];
|
|
18
33
|
const VARIANTS = [
|
|
19
|
-
...
|
|
34
|
+
...MODEL_VARIANTS.map((mv) => ({
|
|
20
35
|
...BASELINE_VARIANT,
|
|
21
|
-
model,
|
|
22
|
-
name: `baseline-${
|
|
36
|
+
model: mv.model,
|
|
37
|
+
name: `baseline-${mv.provider}-${mv.model}`,
|
|
38
|
+
_provider: mv.provider,
|
|
39
|
+
_apiKey: mv.apiKey
|
|
23
40
|
})),
|
|
24
|
-
...
|
|
41
|
+
...MODEL_VARIANTS.map((mv) => ({
|
|
25
42
|
...STREAMLINED_VARIANT,
|
|
26
|
-
model,
|
|
27
|
-
name: `streamlined-${
|
|
43
|
+
model: mv.model,
|
|
44
|
+
name: `streamlined-${mv.provider}-${mv.model}`,
|
|
45
|
+
_provider: mv.provider,
|
|
46
|
+
_apiKey: mv.apiKey
|
|
28
47
|
}))
|
|
29
48
|
];
|
|
30
49
|
describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
31
50
|
const TEST_TIMEOUT = 120_000;
|
|
32
|
-
if (!
|
|
33
|
-
console.warn('
|
|
51
|
+
if (!hasAnyKey) {
|
|
52
|
+
console.warn('No API keys set (OPENAI_API_KEY or ANTHROPIC_API_KEY), skipping tests');
|
|
34
53
|
}
|
|
35
54
|
it('test1: creates a simple counter app', async () => {
|
|
36
55
|
const USER_PROMPT = `Create a counter app with increment/decrement buttons`;
|
|
37
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
38
|
-
// Write results to files
|
|
56
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, undefined, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
39
57
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
40
58
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
41
59
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
42
60
|
expect(true).toBe(true);
|
|
43
61
|
}, TEST_TIMEOUT);
|
|
44
62
|
it('test2: modifies existing counter app to add reset button', async () => {
|
|
45
|
-
// Load initial app from fixture folder
|
|
46
63
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'test1_counter_app'));
|
|
47
64
|
const USER_PROMPT = `Add a reset button that sets the counter back to 0`;
|
|
48
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
65
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
49
66
|
initialFrontend,
|
|
50
67
|
initialBackend
|
|
51
|
-
});
|
|
52
|
-
// Write results to files
|
|
68
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
53
69
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
54
70
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
55
71
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -59,10 +75,10 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
59
75
|
it('test3: shopping cart - add quantity selector', async () => {
|
|
60
76
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'shopping_cart'));
|
|
61
77
|
const USER_PROMPT = `Add a quantity selector (+ and - buttons) to each cart item so users can adjust quantities without removing and re-adding items`;
|
|
62
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
78
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
63
79
|
initialFrontend,
|
|
64
80
|
initialBackend
|
|
65
|
-
});
|
|
81
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
66
82
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
67
83
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
68
84
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -71,10 +87,10 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
71
87
|
it('test4: shopping cart - add discount code', async () => {
|
|
72
88
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'shopping_cart'));
|
|
73
89
|
const USER_PROMPT = `Add a discount code input field in the cart. When the code "SAVE10" is entered, apply a 10% discount to the total`;
|
|
74
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
90
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
75
91
|
initialFrontend,
|
|
76
92
|
initialBackend
|
|
77
|
-
});
|
|
93
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
78
94
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
79
95
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
80
96
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -84,10 +100,10 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
84
100
|
it('test5: file manager - add search bar', async () => {
|
|
85
101
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'file_manager'));
|
|
86
102
|
const USER_PROMPT = `Add a search bar in the toolbar that filters files and folders by name as the user types`;
|
|
87
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
103
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
88
104
|
initialFrontend,
|
|
89
105
|
initialBackend
|
|
90
|
-
});
|
|
106
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
91
107
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
92
108
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
93
109
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -96,10 +112,10 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
96
112
|
it('test6: file manager - show file details', async () => {
|
|
97
113
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'file_manager'));
|
|
98
114
|
const USER_PROMPT = `Show file size (formatted as KB/MB) and modified date in the file list for each item`;
|
|
99
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
115
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
100
116
|
initialFrontend,
|
|
101
117
|
initialBackend
|
|
102
|
-
});
|
|
118
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
103
119
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
104
120
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
105
121
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -108,10 +124,10 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
108
124
|
it('test7: file manager - add select all checkbox', async () => {
|
|
109
125
|
const { initialFrontend, initialBackend } = await loadAppFixtureForEval(join(__dirname, 'initial', 'file_manager'));
|
|
110
126
|
const USER_PROMPT = `Add a "Select All" checkbox in the file list header and individual checkboxes for each file. Add a "Delete Selected" button that appears when items are selected`;
|
|
111
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
127
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
112
128
|
initialFrontend,
|
|
113
129
|
initialBackend
|
|
114
|
-
});
|
|
130
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
115
131
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
116
132
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
117
133
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -120,7 +136,7 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
120
136
|
// ==================== From-Scratch Creation Tests ====================
|
|
121
137
|
it('test8: create quiz app from scratch', async () => {
|
|
122
138
|
const USER_PROMPT = `Create a multiple choice quiz app with 5 questions about general knowledge. Show one question at a time with 4 answer options. Track the score and show results at the end with percentage correct.`;
|
|
123
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
139
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, undefined, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
124
140
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
125
141
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
126
142
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -128,7 +144,7 @@ describeWithApiKey('App Chat LLM Evaluation', () => {
|
|
|
128
144
|
}, TEST_TIMEOUT);
|
|
129
145
|
it('test9: create recipe book from scratch', async () => {
|
|
130
146
|
const USER_PROMPT = `Create a recipe book app where users can add recipes with a name, ingredients list, and instructions. Include a search bar to filter recipes by name and the ability to delete recipes.`;
|
|
131
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
147
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, undefined, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
132
148
|
const { summaryPath, appPaths } = await writeAppComparisonResults(USER_PROMPT, results);
|
|
133
149
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
134
150
|
console.log(`App files: ${appPaths.join(', ')}`);
|
|
@@ -16,11 +16,6 @@ export interface InitialApp {
|
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Evaluates how well a generated app fulfills the user's request, considering any initial app state.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @param userPrompt The original user request
|
|
22
|
-
* @param generatedApp The app generated by the AI
|
|
23
|
-
* @param initialApp Optional initial app state (what the app looked like before AI changes)
|
|
24
|
-
* @returns Evaluation result with score, statement, and missing requirements
|
|
19
|
+
* Uses Anthropic API directly.
|
|
25
20
|
*/
|
|
26
21
|
export declare function evaluateAppGeneration(userPrompt: string, generatedApp: AppFiles, initialApp?: InitialApp): Promise<EvaluationResult>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
2
|
import { BASE_EVALUATOR_RESPONSE_FORMAT } from '../shared';
|
|
3
3
|
/**
|
|
4
4
|
* System prompt for evaluating app generation without a reference expected app.
|
|
@@ -51,17 +51,20 @@ const APP_GENERATION_EVALUATOR_SYSTEM_PROMPT = `You are an expert evaluator for
|
|
|
51
51
|
${BASE_EVALUATOR_RESPONSE_FORMAT}`;
|
|
52
52
|
/**
|
|
53
53
|
* Evaluates how well a generated app fulfills the user's request, considering any initial app state.
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* @param userPrompt The original user request
|
|
57
|
-
* @param generatedApp The app generated by the AI
|
|
58
|
-
* @param initialApp Optional initial app state (what the app looked like before AI changes)
|
|
59
|
-
* @returns Evaluation result with score, statement, and missing requirements
|
|
54
|
+
* Uses Anthropic API directly.
|
|
60
55
|
*/
|
|
61
56
|
export async function evaluateAppGeneration(userPrompt, generatedApp, initialApp) {
|
|
62
57
|
// @ts-ignore
|
|
63
|
-
const apiKey = process.env.
|
|
64
|
-
|
|
58
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
59
|
+
if (!apiKey) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
resemblanceScore: 0,
|
|
63
|
+
statement: 'No API key available for evaluation',
|
|
64
|
+
error: 'ANTHROPIC_API_KEY not set'
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const client = new Anthropic({ apiKey });
|
|
65
68
|
let userMessage = `## User's Original Request
|
|
66
69
|
${userPrompt}
|
|
67
70
|
|
|
@@ -89,15 +92,17 @@ Please evaluate how well the generated app:
|
|
|
89
92
|
1. Fulfills ALL requirements from the user's original request
|
|
90
93
|
2. ${initialApp ? 'Makes appropriate modifications to the initial app state' : 'Implements a complete and correct new app'}`;
|
|
91
94
|
try {
|
|
92
|
-
const response = await client.
|
|
93
|
-
model: '
|
|
95
|
+
const response = await client.messages.create({
|
|
96
|
+
model: 'claude-sonnet-4-5-20250514',
|
|
97
|
+
max_tokens: 2048,
|
|
98
|
+
system: APP_GENERATION_EVALUATOR_SYSTEM_PROMPT,
|
|
94
99
|
messages: [
|
|
95
|
-
{ role: 'system', content: APP_GENERATION_EVALUATOR_SYSTEM_PROMPT },
|
|
96
100
|
{ role: 'user', content: userMessage }
|
|
97
101
|
],
|
|
98
102
|
temperature: 0
|
|
99
103
|
});
|
|
100
|
-
const
|
|
104
|
+
const textBlock = response.content.find((block) => block.type === 'text');
|
|
105
|
+
const content = textBlock?.text;
|
|
101
106
|
if (!content) {
|
|
102
107
|
return {
|
|
103
108
|
success: false,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AppFiles, BackendRunnable } from '../../app/core';
|
|
2
2
|
import { type VariantConfig, type BaseEvalResult } from '../shared';
|
|
3
|
+
import type { AIProvider } from '../../../../../gen/types.gen';
|
|
3
4
|
export type { InitialApp } from './appEvalComparison';
|
|
4
5
|
/**
|
|
5
6
|
* App-specific evaluation result.
|
|
@@ -20,17 +21,25 @@ export interface AppEvalOptions {
|
|
|
20
21
|
variant?: VariantConfig;
|
|
21
22
|
/** Whether to evaluate the generated app with LLM. Default: true. Set to false to skip evaluation. */
|
|
22
23
|
evaluateWithLLM?: boolean;
|
|
24
|
+
/** AI provider (inferred from model name if omitted) */
|
|
25
|
+
provider?: AIProvider;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
|
-
* Runs an app chat evaluation
|
|
26
|
-
* Executes tool calls using the actual app tools from core.ts or variant-configured tools.
|
|
28
|
+
* Runs an app chat evaluation using the shared chat loop (same code path as production).
|
|
27
29
|
*/
|
|
28
|
-
export declare function runAppEval(userPrompt: string,
|
|
30
|
+
export declare function runAppEval(userPrompt: string, apiKey: string, options?: AppEvalOptions): Promise<AppEvalResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Per-variant provider override.
|
|
33
|
+
*/
|
|
34
|
+
export interface VariantProviderOverride {
|
|
35
|
+
provider: AIProvider;
|
|
36
|
+
apiKey: string;
|
|
37
|
+
}
|
|
29
38
|
/**
|
|
30
39
|
* Runs the same prompt against multiple variants sequentially for comparison.
|
|
31
|
-
*
|
|
40
|
+
* Accepts optional per-variant provider/apiKey overrides.
|
|
32
41
|
*/
|
|
33
|
-
export declare function runVariantComparison(userPrompt: string, variants: VariantConfig[],
|
|
42
|
+
export declare function runVariantComparison(userPrompt: string, variants: VariantConfig[], defaultApiKey: string, baseOptions?: Omit<AppEvalOptions, 'variant'>, providerOverrides?: VariantProviderOverride[]): Promise<AppEvalResult[]>;
|
|
34
43
|
/**
|
|
35
44
|
* Writes app comparison results to a folder-based structure.
|
|
36
45
|
* Each variant gets its own folder with frontend/, backend/, and details.json.
|
|
@@ -11,15 +11,14 @@ const appDefaults = {
|
|
|
11
11
|
tools: getAppTools()
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
|
-
* Runs an app chat evaluation
|
|
15
|
-
* Executes tool calls using the actual app tools from core.ts or variant-configured tools.
|
|
14
|
+
* Runs an app chat evaluation using the shared chat loop (same code path as production).
|
|
16
15
|
*/
|
|
17
|
-
export async function runAppEval(userPrompt,
|
|
16
|
+
export async function runAppEval(userPrompt, apiKey, options) {
|
|
18
17
|
const { helpers, getFiles } = createAppEvalHelpers(options?.initialFrontend ?? {}, options?.initialBackend ?? {});
|
|
19
18
|
// Resolve variant configuration
|
|
20
19
|
const variantName = options?.variant?.name ?? 'baseline';
|
|
21
20
|
const systemMessage = resolveSystemPrompt(options?.variant, appDefaults, options?.customSystemPrompt);
|
|
22
|
-
const {
|
|
21
|
+
const { tools } = resolveTools(options?.variant, appDefaults);
|
|
23
22
|
const model = resolveModel(options?.variant, options?.model);
|
|
24
23
|
// Build user message
|
|
25
24
|
const userMessage = prepareAppUserMessage(userPrompt, helpers.getSelectedContext());
|
|
@@ -28,15 +27,15 @@ export async function runAppEval(userPrompt, openaiApiKey, options) {
|
|
|
28
27
|
userPrompt,
|
|
29
28
|
systemMessage,
|
|
30
29
|
userMessage,
|
|
31
|
-
toolDefs,
|
|
32
30
|
tools,
|
|
33
31
|
helpers,
|
|
34
|
-
apiKey
|
|
32
|
+
apiKey,
|
|
35
33
|
getOutput: getFiles,
|
|
36
34
|
options: {
|
|
37
35
|
maxIterations: options?.maxIterations,
|
|
38
36
|
model,
|
|
39
|
-
workspace: 'test-workspace'
|
|
37
|
+
workspace: 'test-workspace',
|
|
38
|
+
provider: options?.provider
|
|
40
39
|
}
|
|
41
40
|
});
|
|
42
41
|
// Run LLM evaluation unless explicitly disabled
|
|
@@ -60,13 +59,15 @@ export async function runAppEval(userPrompt, openaiApiKey, options) {
|
|
|
60
59
|
}
|
|
61
60
|
/**
|
|
62
61
|
* Runs the same prompt against multiple variants sequentially for comparison.
|
|
63
|
-
*
|
|
62
|
+
* Accepts optional per-variant provider/apiKey overrides.
|
|
64
63
|
*/
|
|
65
|
-
export async function runVariantComparison(userPrompt, variants,
|
|
66
|
-
const results = await Promise.all(variants.map(async (variant) => {
|
|
67
|
-
|
|
64
|
+
export async function runVariantComparison(userPrompt, variants, defaultApiKey, baseOptions, providerOverrides) {
|
|
65
|
+
const results = await Promise.all(variants.map(async (variant, i) => {
|
|
66
|
+
const override = providerOverrides?.[i];
|
|
67
|
+
return await runAppEval(userPrompt, override?.apiKey ?? defaultApiKey, {
|
|
68
68
|
...baseOptions,
|
|
69
|
-
variant
|
|
69
|
+
variant,
|
|
70
|
+
provider: override?.provider ?? baseOptions?.provider
|
|
70
71
|
});
|
|
71
72
|
}));
|
|
72
73
|
return results;
|
|
@@ -21,30 +21,47 @@ import initialTest5 from './initial/test5_initial.json';
|
|
|
21
21
|
import initialTest6 from './initial/test6_initial.json';
|
|
22
22
|
// @ts-ignore - JSON import
|
|
23
23
|
import initialTest7 from './initial/test7_initial.json';
|
|
24
|
-
// Get API
|
|
24
|
+
// Get API keys from environment - tests will be skipped if none are set
|
|
25
25
|
// @ts-ignore
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const describeWithApiKey =
|
|
31
|
-
const
|
|
26
|
+
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
|
|
29
|
+
const hasAnyKey = OPENAI_API_KEY || ANTHROPIC_API_KEY;
|
|
30
|
+
const describeWithApiKey = hasAnyKey ? describe : describe.skip;
|
|
31
|
+
const MODEL_VARIANTS = [
|
|
32
|
+
...(OPENAI_API_KEY
|
|
33
|
+
? [{ model: 'gpt-4o', provider: 'openai', apiKey: OPENAI_API_KEY }]
|
|
34
|
+
: []),
|
|
35
|
+
...(ANTHROPIC_API_KEY
|
|
36
|
+
? [
|
|
37
|
+
{
|
|
38
|
+
model: 'claude-haiku-4-5-20241022',
|
|
39
|
+
provider: 'anthropic',
|
|
40
|
+
apiKey: ANTHROPIC_API_KEY
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
: [])
|
|
44
|
+
];
|
|
32
45
|
const VARIANTS = [
|
|
33
|
-
...
|
|
46
|
+
...MODEL_VARIANTS.map((mv) => ({
|
|
34
47
|
...BASELINE_VARIANT,
|
|
35
|
-
model,
|
|
36
|
-
name: `baseline-${
|
|
48
|
+
model: mv.model,
|
|
49
|
+
name: `baseline-${mv.provider}-${mv.model}`,
|
|
50
|
+
_provider: mv.provider,
|
|
51
|
+
_apiKey: mv.apiKey
|
|
37
52
|
})),
|
|
38
|
-
...
|
|
53
|
+
...MODEL_VARIANTS.map((mv) => ({
|
|
39
54
|
...MINIMAL_SINGLE_TOOL_VARIANT,
|
|
40
|
-
model,
|
|
41
|
-
name: `minimal-single-tool-${
|
|
55
|
+
model: mv.model,
|
|
56
|
+
name: `minimal-single-tool-${mv.provider}-${mv.model}`,
|
|
57
|
+
_provider: mv.provider,
|
|
58
|
+
_apiKey: mv.apiKey
|
|
42
59
|
}))
|
|
43
60
|
];
|
|
44
61
|
describeWithApiKey('Flow Chat LLM Evaluation', () => {
|
|
45
62
|
const TEST_TIMEOUT = 120_000;
|
|
46
|
-
if (!
|
|
47
|
-
console.warn('
|
|
63
|
+
if (!hasAnyKey) {
|
|
64
|
+
console.warn('No API keys set (OPENAI_API_KEY or ANTHROPIC_API_KEY), skipping tests');
|
|
48
65
|
}
|
|
49
66
|
it('test1: user role-based actions with loop and branches', async () => {
|
|
50
67
|
const USER_PROMPT = `
|
|
@@ -56,9 +73,9 @@ STEP 3: Loop on all users
|
|
|
56
73
|
STEP 4: Do branches based on user's role, do different action based on that. Roles are admin, user, moderator
|
|
57
74
|
STEP 5: Return action taken for each user
|
|
58
75
|
`;
|
|
59
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
76
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
60
77
|
expectedFlow: expectedTest1
|
|
61
|
-
});
|
|
78
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
62
79
|
// Write results to files
|
|
63
80
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
64
81
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
@@ -89,9 +106,9 @@ STEP 5: Branch based on inventory - if all items available, create shipment reco
|
|
|
89
106
|
STEP 6: Send confirmation (mock email to customer_email)
|
|
90
107
|
STEP 7: Return final order summary with status
|
|
91
108
|
`;
|
|
92
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
109
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
93
110
|
expectedFlow: expectedTest2
|
|
94
|
-
});
|
|
111
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
95
112
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
96
113
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
97
114
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -124,9 +141,9 @@ STEP 5: Branch based on quality score:
|
|
|
124
141
|
- If score < 70: Store in quarantine and send alert
|
|
125
142
|
STEP 6: Return processing report with statistics (total records, quality score, destination)
|
|
126
143
|
`;
|
|
127
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
144
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
128
145
|
expectedFlow: expectedTest3
|
|
129
|
-
});
|
|
146
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
130
147
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
131
148
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
132
149
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -159,9 +176,9 @@ STEP 3: Use an AI agent to handle the customer query. The agent should have acce
|
|
|
159
176
|
STEP 4: Log the interaction to audit trail (customer_id, query, response summary)
|
|
160
177
|
STEP 5: Return the agent's response and any actions taken
|
|
161
178
|
`;
|
|
162
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
179
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
163
180
|
expectedFlow: expectedTest4
|
|
164
|
-
});
|
|
181
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
165
182
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
166
183
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
167
184
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -190,11 +207,11 @@ Modify this existing flow to add error handling:
|
|
|
190
207
|
- If validation passes, return the data for the next step
|
|
191
208
|
- Update save_results to handle the validation result appropriately
|
|
192
209
|
`;
|
|
193
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
210
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
194
211
|
initialModules: initialTest5.value.modules,
|
|
195
212
|
initialSchema: initialTest5.schema,
|
|
196
213
|
expectedFlow: expectedTest5
|
|
197
|
-
});
|
|
214
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
198
215
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
199
216
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
200
217
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -222,11 +239,11 @@ Modify the order processing loop to handle different order types:
|
|
|
222
239
|
- Move the original process_order step to the default branch for unknown order types
|
|
223
240
|
- Each branch step should return the orderId, shipping cost, and shipping type
|
|
224
241
|
`;
|
|
225
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
242
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
226
243
|
initialModules: initialTest6.value.modules,
|
|
227
244
|
initialSchema: initialTest6.schema,
|
|
228
245
|
expectedFlow: expectedTest6
|
|
229
|
-
});
|
|
246
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
230
247
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
231
248
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
232
249
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -254,11 +271,11 @@ Refactor this flow for better performance by parallelizing the enrichment steps:
|
|
|
254
271
|
- The combine_data step should check if any enrichment used a fallback value and set a hasFallbacks flag
|
|
255
272
|
- Keep get_item as the first step and return_result as the last step unchanged
|
|
256
273
|
`;
|
|
257
|
-
const results = await runVariantComparison(USER_PROMPT, VARIANTS,
|
|
274
|
+
const results = await runVariantComparison(USER_PROMPT, VARIANTS, VARIANTS[0]._apiKey, {
|
|
258
275
|
initialModules: initialTest7.value.modules,
|
|
259
276
|
initialSchema: initialTest7.schema,
|
|
260
277
|
expectedFlow: expectedTest7
|
|
261
|
-
});
|
|
278
|
+
}, VARIANTS.map((v) => ({ provider: v._provider, apiKey: v._apiKey })));
|
|
262
279
|
const { summaryPath, flowPaths } = await writeFlowComparisonResults(USER_PROMPT, results);
|
|
263
280
|
console.log(`\nResults written to: ${summaryPath}`);
|
|
264
281
|
console.log(`Flow files: ${flowPaths.join(', ')}`);
|
|
@@ -40,13 +40,10 @@ ${BASE_EVALUATOR_RESPONSE_FORMAT}`;
|
|
|
40
40
|
* Returns a resemblance score (0-100), a qualitative statement, and any missing requirements.
|
|
41
41
|
*/
|
|
42
42
|
export async function evaluateFlowComparison(generatedFlow, expectedFlow, userPrompt) {
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
45
43
|
return evaluateWithLLM({
|
|
46
44
|
userPrompt,
|
|
47
45
|
generatedOutput: generatedFlow,
|
|
48
46
|
expectedOutput: expectedFlow,
|
|
49
|
-
evaluatorSystemPrompt: FLOW_EVALUATOR_SYSTEM_PROMPT
|
|
50
|
-
apiKey
|
|
47
|
+
evaluatorSystemPrompt: FLOW_EVALUATOR_SYSTEM_PROMPT
|
|
51
48
|
});
|
|
52
49
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FlowModule } from '../../../../../gen';
|
|
2
|
+
import type { AIProvider } from '../../../../../gen/types.gen';
|
|
2
3
|
import type { ExtendedOpenFlow } from '../../../../flows/types';
|
|
3
4
|
import { type ExpectedFlow } from './flowEvalComparison';
|
|
4
5
|
import { type VariantConfig, type BaseEvalResult } from '../shared';
|
|
@@ -21,17 +22,25 @@ export interface FlowEvalOptions {
|
|
|
21
22
|
maxIterations?: number;
|
|
22
23
|
variant?: VariantConfig;
|
|
23
24
|
expectedFlow?: ExpectedFlow;
|
|
25
|
+
/** AI provider (inferred from model name if omitted) */
|
|
26
|
+
provider?: AIProvider;
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
26
|
-
* Runs a flow chat evaluation
|
|
27
|
-
* Executes tool calls using the actual flowTools from core.ts or variant-configured tools.
|
|
29
|
+
* Runs a flow chat evaluation using the shared chat loop (same code path as production).
|
|
28
30
|
*/
|
|
29
|
-
export declare function runFlowEval(userPrompt: string,
|
|
31
|
+
export declare function runFlowEval(userPrompt: string, apiKey: string, options?: FlowEvalOptions): Promise<FlowEvalResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Per-variant provider override.
|
|
34
|
+
*/
|
|
35
|
+
export interface VariantProviderOverride {
|
|
36
|
+
provider: AIProvider;
|
|
37
|
+
apiKey: string;
|
|
38
|
+
}
|
|
30
39
|
/**
|
|
31
40
|
* Runs the same prompt against multiple variants sequentially for comparison.
|
|
32
|
-
*
|
|
41
|
+
* Accepts optional per-variant provider/apiKey overrides.
|
|
33
42
|
*/
|
|
34
|
-
export declare function runVariantComparison(userPrompt: string, variants: VariantConfig[],
|
|
43
|
+
export declare function runVariantComparison(userPrompt: string, variants: VariantConfig[], defaultApiKey: string, baseOptions?: Omit<FlowEvalOptions, 'variant'>, providerOverrides?: VariantProviderOverride[]): Promise<FlowEvalResult[]>;
|
|
35
44
|
/**
|
|
36
45
|
* Writes flow comparison results to files.
|
|
37
46
|
*/
|
|
@@ -10,15 +10,14 @@ const flowDefaults = {
|
|
|
10
10
|
tools: flowTools
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
|
-
* Runs a flow chat evaluation
|
|
14
|
-
* Executes tool calls using the actual flowTools from core.ts or variant-configured tools.
|
|
13
|
+
* Runs a flow chat evaluation using the shared chat loop (same code path as production).
|
|
15
14
|
*/
|
|
16
|
-
export async function runFlowEval(userPrompt,
|
|
15
|
+
export async function runFlowEval(userPrompt, apiKey, options) {
|
|
17
16
|
const { helpers, getFlow } = createFlowEvalHelpers(options?.initialModules ?? [], options?.initialSchema);
|
|
18
17
|
// Resolve variant configuration
|
|
19
18
|
const variantName = options?.variant?.name ?? 'baseline';
|
|
20
19
|
const systemMessage = resolveSystemPrompt(options?.variant, flowDefaults, options?.customSystemPrompt);
|
|
21
|
-
const {
|
|
20
|
+
const { tools } = resolveTools(options?.variant, flowDefaults);
|
|
22
21
|
const model = resolveModel(options?.variant, options?.model);
|
|
23
22
|
// Build user message
|
|
24
23
|
const userMessage = prepareFlowUserMessage(userPrompt, helpers.getFlowAndSelectedId(), []);
|
|
@@ -27,15 +26,15 @@ export async function runFlowEval(userPrompt, openaiApiKey, options) {
|
|
|
27
26
|
userPrompt,
|
|
28
27
|
systemMessage,
|
|
29
28
|
userMessage,
|
|
30
|
-
toolDefs,
|
|
31
29
|
tools,
|
|
32
30
|
helpers,
|
|
33
|
-
apiKey
|
|
31
|
+
apiKey,
|
|
34
32
|
getOutput: getFlow,
|
|
35
33
|
options: {
|
|
36
34
|
maxIterations: options?.maxIterations,
|
|
37
35
|
model,
|
|
38
|
-
workspace: 'test-workspace'
|
|
36
|
+
workspace: 'test-workspace',
|
|
37
|
+
provider: options?.provider
|
|
39
38
|
}
|
|
40
39
|
});
|
|
41
40
|
// Run evaluation if expected flow is provided
|
|
@@ -57,13 +56,15 @@ export async function runFlowEval(userPrompt, openaiApiKey, options) {
|
|
|
57
56
|
}
|
|
58
57
|
/**
|
|
59
58
|
* Runs the same prompt against multiple variants sequentially for comparison.
|
|
60
|
-
*
|
|
59
|
+
* Accepts optional per-variant provider/apiKey overrides.
|
|
61
60
|
*/
|
|
62
|
-
export async function runVariantComparison(userPrompt, variants,
|
|
63
|
-
const results = await Promise.all(variants.map(async (variant) => {
|
|
64
|
-
|
|
61
|
+
export async function runVariantComparison(userPrompt, variants, defaultApiKey, baseOptions, providerOverrides) {
|
|
62
|
+
const results = await Promise.all(variants.map(async (variant, i) => {
|
|
63
|
+
const override = providerOverrides?.[i];
|
|
64
|
+
return await runFlowEval(userPrompt, override?.apiKey ?? defaultApiKey, {
|
|
65
65
|
...baseOptions,
|
|
66
|
-
variant
|
|
66
|
+
variant,
|
|
67
|
+
provider: override?.provider ?? baseOptions?.provider
|
|
67
68
|
});
|
|
68
69
|
}));
|
|
69
70
|
return results;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ChatCompletionMessageParam, ChatCompletionSystemMessageParam } from 'openai/resources/chat/completions.mjs';
|
|
2
|
-
import type { ChatCompletionTool } from 'openai/resources/chat/completions.mjs';
|
|
3
2
|
import type { TokenUsage, ToolCallDetail, EvalRunnerOptions } from './types';
|
|
4
3
|
import type { Tool } from './baseVariants';
|
|
5
4
|
/**
|
|
@@ -26,13 +25,13 @@ export interface RunEvalParams<THelpers, TOutput> {
|
|
|
26
25
|
systemMessage: ChatCompletionSystemMessageParam;
|
|
27
26
|
/** User message for the LLM */
|
|
28
27
|
userMessage: ChatCompletionMessageParam;
|
|
29
|
-
/** Tool definitions for the LLM API */
|
|
30
|
-
toolDefs
|
|
28
|
+
/** Tool definitions for the LLM API (unused — derived from tools) */
|
|
29
|
+
toolDefs?: unknown;
|
|
31
30
|
/** Full tool implementations for execution */
|
|
32
31
|
tools: Tool<THelpers>[];
|
|
33
32
|
/** Domain-specific helpers for tool execution */
|
|
34
33
|
helpers: THelpers;
|
|
35
|
-
/** API key for
|
|
34
|
+
/** API key for the provider */
|
|
36
35
|
apiKey: string;
|
|
37
36
|
/** Function to get the current output state */
|
|
38
37
|
getOutput: () => TOutput;
|
|
@@ -40,9 +39,7 @@ export interface RunEvalParams<THelpers, TOutput> {
|
|
|
40
39
|
options?: EvalRunnerOptions;
|
|
41
40
|
}
|
|
42
41
|
/**
|
|
43
|
-
* Runs a generic evaluation
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* This is the core execution loop shared across all chat eval tests.
|
|
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.
|
|
47
44
|
*/
|
|
48
45
|
export declare function runEval<THelpers, TOutput>(params: RunEvalParams<THelpers, TOutput>): Promise<RawEvalResult<TOutput>>;
|