windmill-components 1.522.0 → 1.531.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/AIAgentLogViewer.svelte +123 -0
- package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
- package/package/components/AppConnectInner.svelte +10 -10
- package/package/components/AutoscalingConfigEditor.svelte +76 -2
- package/package/components/Dev.svelte +12 -28
- package/package/components/DiffEditor.svelte +6 -3
- package/package/components/DiffEditor.svelte.d.ts +1 -0
- package/package/components/DisplayResult.svelte +16 -10
- package/package/components/DisplayResult.svelte.d.ts +1 -0
- package/package/components/EditableSchemaForm.svelte +5 -2
- package/package/components/Editor.svelte +26 -8
- package/package/components/Editor.svelte.d.ts +1 -1
- package/package/components/EditorBar.svelte +25 -5
- package/package/components/EditorSettings.svelte +6 -0
- package/package/components/FirstStepInputs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +18 -36
- package/package/components/FlowGraphViewerStep.svelte +7 -0
- package/package/components/FlowJobResult.svelte +15 -63
- package/package/components/FlowJobResult.svelte.d.ts +10 -4
- package/package/components/FlowLogViewer.svelte +660 -0
- package/package/components/FlowLogViewer.svelte.d.ts +34 -0
- package/package/components/FlowLogViewerWrapper.svelte +52 -0
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
- package/package/components/FlowLoopIterationPreview.svelte +3 -3
- package/package/components/FlowPreviewContent.svelte +4 -5
- package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
- package/package/components/FlowPreviewResult.svelte +4 -5
- package/package/components/FlowPreviewResult.svelte.d.ts +3 -5
- package/package/components/FlowStatusViewer.svelte +28 -16
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
- package/package/components/FlowStatusViewerInner.svelte +483 -296
- package/package/components/FlowStatusViewerInner.svelte.d.ts +27 -33
- package/package/components/FlowTimeline.svelte +11 -13
- package/package/components/FlowTimeline.svelte.d.ts +6 -5
- package/package/components/FlowWrapper.svelte +3 -2
- package/package/components/HighlightCode.svelte +4 -1
- package/package/components/IconedResourceType.svelte +9 -5
- package/package/components/JobLoader.svelte +61 -8
- package/package/components/JobLoader.svelte.d.ts +9 -1
- package/package/components/LogViewer.svelte +8 -2
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/LogViewerHeader.svelte +32 -0
- package/package/components/LogViewerHeader.svelte.d.ts +8 -0
- package/package/components/ModulePreviewForm.svelte +10 -6
- package/package/components/ModulePreviewResultViewer.svelte +16 -0
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
- package/package/components/ModuleTest.svelte +59 -16
- package/package/components/RelativeLineNumbers.svelte +16 -0
- package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
- package/package/components/ResourceEditor.svelte +9 -4
- package/package/components/ScriptBuilder.svelte +13 -11
- package/package/components/ScriptEditor.svelte +2 -2
- package/package/components/SimpleEditor.svelte +10 -4
- package/package/components/SimpleEditor.svelte.d.ts +1 -0
- package/package/components/TemplateEditor.svelte +1 -1
- package/package/components/UserSettings.svelte +4 -4
- package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
- package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
- package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
- package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
- package/package/components/apps/components/helpers/InputValue.svelte +6 -1
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
- package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
- package/package/components/apps/components/layout/AppContainer.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
- package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
- package/package/components/apps/components/layout/AppList.svelte +9 -8
- package/package/components/apps/components/layout/AppModal.svelte +1 -1
- package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
- package/package/components/apps/components/layout/AppStepper.svelte +9 -5
- package/package/components/apps/components/layout/AppTabs.svelte +2 -2
- package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
- package/package/components/apps/editor/GridEditor.svelte +24 -19
- package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
- package/package/components/apps/editor/GridViewer.svelte +1 -1
- package/package/components/apps/editor/SubGridEditor.svelte +7 -11
- package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
- package/package/components/apps/editor/appUtils.js +17 -68
- package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
- package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
- package/package/components/apps/svelte-grid/Grid.svelte +23 -25
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
- package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
- package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
- package/package/components/apps/utils.d.ts +2 -0
- package/package/components/apps/utils.js +22 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/fileDownload/FileDownload.svelte +1 -3
- package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
- package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
- package/package/components/copilot/MetadataGen.svelte +19 -1
- package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
- package/package/components/copilot/ScriptGen.svelte +23 -31
- package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
- package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
- package/package/components/copilot/chat/AIChatInput.svelte +29 -6
- package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
- package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
- package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
- package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.js +192 -0
- package/package/components/copilot/chat/api/core.d.ts +7 -0
- package/package/components/copilot/chat/api/core.js +61 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
- package/package/components/copilot/chat/flow/core.js +213 -42
- package/package/components/copilot/chat/flow/utils.js +3 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
- package/package/components/copilot/chat/monaco-adapter.js +10 -4
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +20 -22
- package/package/components/copilot/chat/script/core.d.ts +11 -3
- package/package/components/copilot/chat/script/core.js +92 -15
- package/package/components/copilot/chat/shared.d.ts +30 -3
- package/package/components/copilot/chat/shared.js +228 -9
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/copilot/lib.js +15 -6
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/details/DetailPageLayout.svelte +34 -33
- package/package/components/flow_builder.d.ts +1 -2
- package/package/components/flows/FlowEditor.svelte +3 -3
- package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
- package/package/components/flows/common/FlowCard.svelte +2 -2
- package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCardHeader.svelte +13 -4
- package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
- package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
- package/package/components/flows/content/FlowConstants.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
- package/package/components/flows/content/FlowLoop.svelte +2 -2
- package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
- package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
- package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowResult.svelte +2 -3
- package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
- package/package/components/flows/dfs.d.ts +3 -1
- package/package/components/flows/dfs.js +5 -1
- package/package/components/flows/flowInfers.js +78 -0
- package/package/components/flows/flowState.d.ts +2 -3
- package/package/components/flows/flowState.js +2 -2
- package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
- package/package/components/flows/flowStateUtils.svelte.js +14 -13
- package/package/components/flows/flowStore.d.ts +3 -4
- package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
- package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
- package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
- package/package/components/flows/map/InsertModuleInner.svelte +9 -1
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +4 -2
- package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
- package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
- package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
- package/package/components/flows/testSteps.svelte.d.ts +3 -2
- package/package/components/flows/testSteps.svelte.js +26 -23
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/flows/utils.d.ts +3 -5
- package/package/components/flows/utils.js +3 -4
- package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
- package/package/components/graph/FlowGraphV2.svelte +44 -24
- package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
- package/package/components/graph/graphBuilder.svelte.js +30 -14
- package/package/components/graph/model.d.ts +9 -6
- package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
- package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
- package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
- package/package/components/icons/RubyIcon.svelte +656 -0
- package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
- package/package/components/instanceSettings.js +9 -0
- package/package/components/modulesTest.svelte.d.ts +6 -3
- package/package/components/modulesTest.svelte.js +32 -0
- package/package/components/preview/FlowPreviewStatus.svelte +3 -1
- package/package/components/raw_apps/RawAppEditor.svelte +27 -26
- package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
- package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
- package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
- package/package/components/runs/RunRow.svelte +5 -1
- package/package/components/schema/AddProperty.svelte +41 -36
- package/package/components/schema/AddProperty.svelte.d.ts +2 -2
- package/package/components/schema/AddPropertyV2.svelte +41 -37
- package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +8 -6
- package/package/components/search/RunsSearch.svelte +1 -1
- package/package/components/settings/CreateToken.svelte +132 -12
- package/package/components/settings/CreateToken.svelte.d.ts +3 -20
- package/package/components/settings/TokenDisplay.svelte +18 -42
- package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
- package/package/components/settings/TokensTable.svelte +2 -4
- package/package/components/settings/TokensTable.svelte.d.ts +3 -19
- package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
- package/package/components/sidebar/MenuButton.svelte +12 -10
- package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
- package/package/components/stepHistoryLoader.svelte.js +7 -12
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
- package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
- package/package/components/tutorials/utils.js +3 -0
- package/package/components/worker_group.d.ts +4 -1
- package/package/components/worker_group.js +3 -2
- package/package/editorLangUtils.d.ts +1 -1
- package/package/editorLangUtils.js +2 -0
- package/package/editorUtils.d.ts +2 -1
- package/package/editorUtils.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +296 -8
- package/package/gen/schemas.gen.js +364 -70
- package/package/gen/services.gen.d.ts +118 -16
- package/package/gen/services.gen.js +226 -19
- package/package/gen/types.gen.d.ts +660 -16
- package/package/hubPaths.json +7 -4
- package/package/infer.js +10 -1
- package/package/monaco_workers/graphql.worker.bundle.js +144 -110
- package/package/script_helpers.d.ts +3 -0
- package/package/script_helpers.js +58 -3
- package/package/scripts.d.ts +1 -1
- package/package/scripts.js +3 -2
- package/package/stores.d.ts +2 -0
- package/package/stores.js +2 -0
- package/package/svelte5Utils.svelte.d.ts +16 -0
- package/package/svelte5Utils.svelte.js +26 -0
- package/package/utils.d.ts +1 -1
- package/package.json +20 -19
- package/package/components/AllFlowLogs.svelte +0 -31
- package/package/components/AllFlowLogs.svelte.d.ts +0 -8
- package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
- package/package/components/copilot/chat/navigator/apiTools.js +0 -258
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { FlowModule, Job, RawScript, Script } from '../../gen';
|
|
1
|
+
import type { FlowModule, Job, PathScript, RawScript, Script } from '../../gen';
|
|
2
2
|
import { type Edge } from '@xyflow/svelte';
|
|
3
3
|
import type { GraphModuleState } from './model';
|
|
4
4
|
import { type AssetWithAltAccessType } from '../assets/lib';
|
|
5
|
-
import type {
|
|
6
|
-
export type InsertKind = 'script' | 'forloop' | 'whileloop' | 'branchone' | 'branchall' | 'flow' | 'trigger' | 'approval' | 'end';
|
|
5
|
+
import type { ModulesTestStates, ModuleTestState } from '../modulesTest.svelte';
|
|
6
|
+
export type InsertKind = 'script' | 'forloop' | 'whileloop' | 'branchone' | 'branchall' | 'flow' | 'trigger' | 'approval' | 'end' | 'aiagent';
|
|
7
7
|
export type InlineScript = {
|
|
8
8
|
language: RawScript['language'];
|
|
9
9
|
kind: Script['kind'];
|
|
@@ -22,6 +22,7 @@ export type onSelectedIteration = (detail: {
|
|
|
22
22
|
}) => void;
|
|
23
23
|
export type GraphEventHandlers = {
|
|
24
24
|
insert: (detail: {
|
|
25
|
+
agentId?: string;
|
|
25
26
|
sourceId?: string;
|
|
26
27
|
targetId?: string;
|
|
27
28
|
branch?: {
|
|
@@ -30,8 +31,8 @@ export type GraphEventHandlers = {
|
|
|
30
31
|
};
|
|
31
32
|
index: number;
|
|
32
33
|
kind: string;
|
|
33
|
-
inlineScript?:
|
|
34
|
-
script?:
|
|
34
|
+
inlineScript?: InlineScript;
|
|
35
|
+
script?: PathScript;
|
|
35
36
|
isPreprocessor?: boolean;
|
|
36
37
|
}) => void;
|
|
37
38
|
deleteBranch: (detail: {
|
|
@@ -70,8 +71,11 @@ export declare function buildPrefix(prefix: string | undefined, id: string): str
|
|
|
70
71
|
export type NodeLayout = {
|
|
71
72
|
id: string;
|
|
72
73
|
parentIds?: string[];
|
|
74
|
+
data: {
|
|
75
|
+
offset?: number;
|
|
76
|
+
};
|
|
73
77
|
} & FlowNode;
|
|
74
|
-
export type FlowNode = InputN | ModuleN | BranchAllStartN | BranchAllEndN | ForLoopEndN | ForLoopStartN | ResultN | WhileLoopStartN | WhileLoopEndN | BranchOneStartN | BranchOneEndN | SubflowBoundN | NoBranchN | TriggerN | AssetN | AssetsOverflowedN;
|
|
78
|
+
export type FlowNode = InputN | ModuleN | BranchAllStartN | BranchAllEndN | ForLoopEndN | ForLoopStartN | ResultN | WhileLoopStartN | WhileLoopEndN | BranchOneStartN | BranchOneEndN | SubflowBoundN | NoBranchN | TriggerN | AssetN | AssetsOverflowedN | AiToolN | NewAiToolN;
|
|
75
79
|
export type InputN = {
|
|
76
80
|
type: 'input2';
|
|
77
81
|
data: {
|
|
@@ -100,7 +104,8 @@ export type ModuleN = {
|
|
|
100
104
|
parentIds: string[];
|
|
101
105
|
eventHandlers: GraphEventHandlers;
|
|
102
106
|
moving: string | undefined;
|
|
103
|
-
|
|
107
|
+
flowModuleState: GraphModuleState | undefined;
|
|
108
|
+
testModuleState: ModuleTestState | undefined;
|
|
104
109
|
insertable: boolean;
|
|
105
110
|
editMode: boolean;
|
|
106
111
|
flowJob: Job | undefined;
|
|
@@ -116,7 +121,7 @@ export type BranchAllStartN = {
|
|
|
116
121
|
id: string;
|
|
117
122
|
branchIndex: number;
|
|
118
123
|
eventHandlers: GraphEventHandlers;
|
|
119
|
-
|
|
124
|
+
flowModuleState: GraphModuleState | undefined;
|
|
120
125
|
insertable: boolean;
|
|
121
126
|
branchOne: boolean;
|
|
122
127
|
};
|
|
@@ -127,7 +132,7 @@ export type BranchAllEndN = {
|
|
|
127
132
|
offset: number;
|
|
128
133
|
id: string;
|
|
129
134
|
eventHandlers: GraphEventHandlers;
|
|
130
|
-
|
|
135
|
+
flowModuleState: GraphModuleState | undefined;
|
|
131
136
|
};
|
|
132
137
|
};
|
|
133
138
|
export type ForLoopEndN = {
|
|
@@ -137,7 +142,7 @@ export type ForLoopEndN = {
|
|
|
137
142
|
id: string;
|
|
138
143
|
eventHandlers: GraphEventHandlers;
|
|
139
144
|
simplifiedTriggerView: boolean;
|
|
140
|
-
|
|
145
|
+
flowModuleState: GraphModuleState | undefined;
|
|
141
146
|
};
|
|
142
147
|
};
|
|
143
148
|
export type ForLoopStartN = {
|
|
@@ -146,7 +151,7 @@ export type ForLoopStartN = {
|
|
|
146
151
|
offset: number;
|
|
147
152
|
id: string;
|
|
148
153
|
eventHandlers: GraphEventHandlers;
|
|
149
|
-
|
|
154
|
+
flowModuleState: GraphModuleState | undefined;
|
|
150
155
|
selectedId: string | undefined;
|
|
151
156
|
editMode: boolean;
|
|
152
157
|
simplifiedTriggerView: boolean;
|
|
@@ -182,7 +187,7 @@ export type BranchOneStartN = {
|
|
|
182
187
|
offset: number;
|
|
183
188
|
id: string;
|
|
184
189
|
eventHandlers: GraphEventHandlers;
|
|
185
|
-
|
|
190
|
+
flowModuleState: GraphModuleState | undefined;
|
|
186
191
|
selected: boolean;
|
|
187
192
|
insertable: boolean;
|
|
188
193
|
label: string;
|
|
@@ -197,7 +202,7 @@ export type BranchOneEndN = {
|
|
|
197
202
|
offset: number;
|
|
198
203
|
id: string;
|
|
199
204
|
eventHandlers: GraphEventHandlers;
|
|
200
|
-
|
|
205
|
+
flowModuleState: GraphModuleState | undefined;
|
|
201
206
|
};
|
|
202
207
|
};
|
|
203
208
|
export type SubflowBoundN = {
|
|
@@ -218,7 +223,7 @@ export type NoBranchN = {
|
|
|
218
223
|
offset: number;
|
|
219
224
|
id: string;
|
|
220
225
|
eventHandlers: GraphEventHandlers;
|
|
221
|
-
|
|
226
|
+
flowModuleState: GraphModuleState | undefined;
|
|
222
227
|
branchOne: boolean;
|
|
223
228
|
label: string;
|
|
224
229
|
branchIndex: number;
|
|
@@ -247,10 +252,35 @@ export type AssetsOverflowedN = {
|
|
|
247
252
|
overflowedAssets: AssetWithAltAccessType[];
|
|
248
253
|
};
|
|
249
254
|
};
|
|
255
|
+
export type AiToolN = {
|
|
256
|
+
type: 'aiTool';
|
|
257
|
+
data: {
|
|
258
|
+
tool: string;
|
|
259
|
+
eventHandlers: GraphEventHandlers;
|
|
260
|
+
moduleId: string;
|
|
261
|
+
insertable: boolean;
|
|
262
|
+
flowModuleStates: Record<string, GraphModuleState> | undefined;
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
export type NewAiToolN = {
|
|
266
|
+
type: 'newAiTool';
|
|
267
|
+
data: {
|
|
268
|
+
eventHandlers: GraphEventHandlers;
|
|
269
|
+
agentModuleId: string;
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
export declare function topologicalSort(nodes: {
|
|
273
|
+
id: string;
|
|
274
|
+
parentIds?: string[];
|
|
275
|
+
}[]): {
|
|
276
|
+
id: string;
|
|
277
|
+
parentIds?: string[];
|
|
278
|
+
}[];
|
|
250
279
|
export declare function graphBuilder(modules: FlowModule[] | undefined, extra: {
|
|
251
280
|
disableAi: boolean;
|
|
252
281
|
insertable: boolean;
|
|
253
282
|
flowModuleStates: Record<string, GraphModuleState> | undefined;
|
|
283
|
+
testModuleStates: ModulesTestStates | undefined;
|
|
254
284
|
selectedId: string | undefined;
|
|
255
285
|
path: string | undefined;
|
|
256
286
|
newFlow: boolean;
|
|
@@ -262,14 +292,16 @@ export declare function graphBuilder(modules: FlowModule[] | undefined, extra: {
|
|
|
262
292
|
individualStepTests: boolean;
|
|
263
293
|
flowJob: Job | undefined;
|
|
264
294
|
showJobStatus: boolean;
|
|
265
|
-
suspendStatus:
|
|
295
|
+
suspendStatus: Record<string, {
|
|
266
296
|
job: Job;
|
|
267
297
|
nb: number;
|
|
268
|
-
}
|
|
298
|
+
}>;
|
|
269
299
|
flowHasChanged: boolean;
|
|
270
300
|
additionalAssetsMap?: Record<string, AssetWithAltAccessType[]>;
|
|
271
301
|
}, failureModule: FlowModule | undefined, preprocessorModule: FlowModule | undefined, eventHandlers: GraphEventHandlers, success: boolean | undefined, useDataflow: boolean | undefined, selectedId: string | undefined, moving: string | undefined, simplifiableFlow: SimplifiableFlow | undefined, flowPathForTriggerNode: string | undefined, expandedSubflows: Record<string, FlowModule[]>): {
|
|
272
|
-
nodes:
|
|
302
|
+
nodes: {
|
|
303
|
+
[key: string]: NodeLayout;
|
|
304
|
+
};
|
|
273
305
|
edges: Edge[];
|
|
274
306
|
error?: string | undefined;
|
|
275
307
|
};
|
|
@@ -12,6 +12,21 @@ export function isTriggerStep(module) {
|
|
|
12
12
|
export function buildPrefix(prefix, id) {
|
|
13
13
|
return (prefix ?? '') + id + ':';
|
|
14
14
|
}
|
|
15
|
+
export function topologicalSort(nodes) {
|
|
16
|
+
const nodeMap = new Map(nodes.map((n) => [n.id, n]));
|
|
17
|
+
const result = [];
|
|
18
|
+
const visited = new Set();
|
|
19
|
+
function visit(id) {
|
|
20
|
+
if (visited.has(id))
|
|
21
|
+
return;
|
|
22
|
+
visited.add(id);
|
|
23
|
+
const node = nodeMap.get(id);
|
|
24
|
+
node.parentIds?.forEach(visit);
|
|
25
|
+
result.push(node);
|
|
26
|
+
}
|
|
27
|
+
nodes.forEach((n) => visit(n.id));
|
|
28
|
+
return result.reverse();
|
|
29
|
+
}
|
|
15
30
|
// input2: InputNode,
|
|
16
31
|
// module: ModuleNode,
|
|
17
32
|
// branchAllStart: BranchAllStart,
|
|
@@ -33,12 +48,12 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
33
48
|
// }
|
|
34
49
|
) {
|
|
35
50
|
console.debug('Building graph');
|
|
36
|
-
const nodes = [];
|
|
37
|
-
const edges = [];
|
|
38
51
|
try {
|
|
39
52
|
if (!modules) {
|
|
40
|
-
return { nodes, edges };
|
|
53
|
+
return { nodes: {}, edges: [] };
|
|
41
54
|
}
|
|
55
|
+
const nodes = [];
|
|
56
|
+
const edges = [];
|
|
42
57
|
function addNode(module, offset) {
|
|
43
58
|
const duplicated = nodes.find((n) => n.id === module.id);
|
|
44
59
|
if (duplicated) {
|
|
@@ -57,7 +72,8 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
57
72
|
parentIds: [],
|
|
58
73
|
eventHandlers: eventHandlers,
|
|
59
74
|
moving: moving,
|
|
60
|
-
|
|
75
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
76
|
+
testModuleState: extra.testModuleStates?.states?.[module.id],
|
|
61
77
|
insertable: extra.insertable,
|
|
62
78
|
editMode: extra.editMode,
|
|
63
79
|
isOwner: extra.isOwner,
|
|
@@ -231,7 +247,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
231
247
|
offset: currentOffset,
|
|
232
248
|
id: module.id,
|
|
233
249
|
eventHandlers: eventHandlers,
|
|
234
|
-
|
|
250
|
+
flowModuleState: extra.flowModuleStates?.[module.id]
|
|
235
251
|
},
|
|
236
252
|
type: 'branchAllEnd'
|
|
237
253
|
};
|
|
@@ -245,7 +261,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
245
261
|
id: module.id,
|
|
246
262
|
branchIndex: -1,
|
|
247
263
|
eventHandlers: eventHandlers,
|
|
248
|
-
|
|
264
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
249
265
|
branchOne: false,
|
|
250
266
|
label: 'No branches'
|
|
251
267
|
},
|
|
@@ -270,7 +286,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
270
286
|
id: module.id,
|
|
271
287
|
branchIndex: branchIndex,
|
|
272
288
|
eventHandlers: eventHandlers,
|
|
273
|
-
|
|
289
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
274
290
|
insertable: extra.insertable,
|
|
275
291
|
branchOne: false
|
|
276
292
|
},
|
|
@@ -298,7 +314,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
298
314
|
simplifiedTriggerView,
|
|
299
315
|
eventHandlers: eventHandlers,
|
|
300
316
|
editMode: extra.editMode,
|
|
301
|
-
|
|
317
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
302
318
|
selectedId: extra.selectedId
|
|
303
319
|
},
|
|
304
320
|
type: 'forLoopStart'
|
|
@@ -320,7 +336,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
320
336
|
id: module.id,
|
|
321
337
|
eventHandlers: eventHandlers,
|
|
322
338
|
simplifiedTriggerView,
|
|
323
|
-
|
|
339
|
+
flowModuleState: extra.flowModuleStates?.[module.id]
|
|
324
340
|
},
|
|
325
341
|
type: 'forLoopEnd'
|
|
326
342
|
};
|
|
@@ -365,7 +381,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
365
381
|
data: {
|
|
366
382
|
offset: currentOffset,
|
|
367
383
|
eventHandlers: eventHandlers,
|
|
368
|
-
|
|
384
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
369
385
|
id: module.id
|
|
370
386
|
},
|
|
371
387
|
type: 'branchOneEnd'
|
|
@@ -395,7 +411,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
395
411
|
eventHandlers: eventHandlers,
|
|
396
412
|
insertable: extra.insertable,
|
|
397
413
|
preLabel: undefined,
|
|
398
|
-
|
|
414
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
399
415
|
selected: false,
|
|
400
416
|
modules: module.value.default
|
|
401
417
|
},
|
|
@@ -418,7 +434,7 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
418
434
|
branchIndex: branchIndex,
|
|
419
435
|
eventHandlers: eventHandlers,
|
|
420
436
|
insertable: extra.insertable,
|
|
421
|
-
|
|
437
|
+
flowModuleState: extra.flowModuleStates?.[module.id],
|
|
422
438
|
selected: false,
|
|
423
439
|
modules: branch.modules
|
|
424
440
|
},
|
|
@@ -564,11 +580,11 @@ export function graphBuilder(modules, extra, failureModule, preprocessorModule,
|
|
|
564
580
|
});
|
|
565
581
|
}
|
|
566
582
|
}
|
|
567
|
-
return { nodes, edges };
|
|
583
|
+
return { nodes: Object.fromEntries(nodes.map((n) => [n.id, n])), edges };
|
|
568
584
|
}
|
|
569
585
|
catch (e) {
|
|
570
586
|
return {
|
|
571
|
-
nodes:
|
|
587
|
+
nodes: {},
|
|
572
588
|
edges: [],
|
|
573
589
|
error: e
|
|
574
590
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FlowStatusModule, Job } from '../../gen';
|
|
2
|
-
import type {
|
|
2
|
+
import type { StateStore } from '../../utils';
|
|
3
3
|
import type { FlowState } from '../flows/flowState';
|
|
4
4
|
export type ModuleHost = 'workspace' | 'inline' | 'hub';
|
|
5
5
|
export type Loop = {
|
|
@@ -18,18 +18,20 @@ export type GraphModuleStates = {
|
|
|
18
18
|
states: Record<string, GraphModuleState>;
|
|
19
19
|
};
|
|
20
20
|
export type DurationStatus = {
|
|
21
|
-
iteration_from?: number;
|
|
22
|
-
iteration_total?: number;
|
|
23
21
|
byJob: Record<string, {
|
|
24
22
|
created_at?: number;
|
|
25
23
|
started_at?: number;
|
|
26
24
|
duration_ms?: number;
|
|
27
25
|
}>;
|
|
28
26
|
};
|
|
27
|
+
export type GlobalIterationBounds = {
|
|
28
|
+
iteration_from?: number;
|
|
29
|
+
iteration_total?: number;
|
|
30
|
+
};
|
|
29
31
|
export type FlowStatusViewerContext = {
|
|
30
|
-
flowStateStore?:
|
|
31
|
-
retryStatus:
|
|
32
|
-
suspendStatus:
|
|
32
|
+
flowStateStore?: FlowState;
|
|
33
|
+
retryStatus: StateStore<Record<string, number | undefined>>;
|
|
34
|
+
suspendStatus: StateStore<Record<string, {
|
|
33
35
|
nb: number;
|
|
34
36
|
job: Job;
|
|
35
37
|
}>>;
|
|
@@ -62,6 +64,7 @@ export type GraphModuleState = {
|
|
|
62
64
|
suspend_count?: number;
|
|
63
65
|
isListJob?: boolean;
|
|
64
66
|
skipped?: boolean;
|
|
67
|
+
agent_actions?: FlowStatusModule['agent_actions'];
|
|
65
68
|
};
|
|
66
69
|
export type NestedNodes = GraphItem[];
|
|
67
70
|
export declare function isNode(item: GraphItem | NestedNodes | undefined): item is Node;
|
|
@@ -29,7 +29,7 @@ let completeEdge = $derived(targetY - sourceY > 100
|
|
|
29
29
|
// and handle the edge state in the graph builder
|
|
30
30
|
let waitingForEvents = $derived(data?.flowModuleStates?.[data.targetId]?.type === 'WaitingForEvents' ||
|
|
31
31
|
data?.flowModuleStates?.[`${data.sourceId}-v`]?.type === 'WaitingForEvents');
|
|
32
|
-
|
|
32
|
+
let suspendStatus = $derived(data?.suspendStatus);
|
|
33
33
|
</script>
|
|
34
34
|
|
|
35
35
|
<EdgeLabel
|
|
@@ -130,9 +130,9 @@ const suspendStatus = $derived(data?.suspendStatus);
|
|
|
130
130
|
isOwner={data.isOwner}
|
|
131
131
|
light
|
|
132
132
|
/>
|
|
133
|
-
{:else if
|
|
133
|
+
{:else if suspendStatus && Object.keys(suspendStatus).length > 0}
|
|
134
134
|
<div class="flex gap-2 flex-col">
|
|
135
|
-
{#each Object.values(
|
|
135
|
+
{#each Object.values(suspendStatus) as suspendCount (suspendCount.job.id)}
|
|
136
136
|
<FlowStatusWaitingForEvents
|
|
137
137
|
job={suspendCount.job}
|
|
138
138
|
workspaceId={$workspaceStore!}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BaseEdge, type EdgeProps } from '@xyflow/svelte';
|
|
2
|
-
import type { Writable } from 'svelte/store';
|
|
3
2
|
import type { GraphEventHandlers } from '../../graphBuilder.svelte';
|
|
4
3
|
import type { Job } from '../../../../gen';
|
|
5
4
|
import type { GraphModuleState } from '../../model';
|
|
@@ -18,10 +17,10 @@ type $$ComponentProps = EdgeProps & {
|
|
|
18
17
|
flowModuleStates: Record<string, GraphModuleState> | undefined;
|
|
19
18
|
isOwner: boolean;
|
|
20
19
|
flowJob: Job | undefined;
|
|
21
|
-
suspendStatus?:
|
|
20
|
+
suspendStatus?: Record<string, {
|
|
22
21
|
job: Job;
|
|
23
22
|
nb: number;
|
|
24
|
-
}
|
|
23
|
+
}>;
|
|
25
24
|
shouldOffsetInsertBtnDueToAssetNode?: boolean;
|
|
26
25
|
};
|
|
27
26
|
};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
<script module lang="ts">export function validateToolName(name) {
|
|
2
|
+
return /^[a-zA-Z0-9_]+$/.test(name);
|
|
3
|
+
}
|
|
4
|
+
export const AI_TOOL_BASE_OFFSET = 5;
|
|
5
|
+
export const AI_TOOL_ROW_OFFSET = 30;
|
|
6
|
+
export const BELOW_ADDITIONAL_OFFSET = 19;
|
|
7
|
+
export const AI_TOOL_CALL_PREFIX = '_wm_ai_agent_tool_call';
|
|
8
|
+
export const AI_TOOL_MESSAGE_PREFIX = '_wm_ai_agent_message';
|
|
9
|
+
const ROW_WIDTH = 275;
|
|
10
|
+
const NEW_TOOL_NODE_WIDTH = 40;
|
|
11
|
+
const MAX_TOOLS_PER_ROW = 2;
|
|
12
|
+
let computeAIToolNodesCache;
|
|
13
|
+
export function getToolCallId(idx, agentModuleId, moduleId) {
|
|
14
|
+
return moduleId
|
|
15
|
+
? AI_TOOL_CALL_PREFIX + '-' + agentModuleId + '-' + idx + '-' + moduleId
|
|
16
|
+
: AI_TOOL_MESSAGE_PREFIX + '-' + agentModuleId + '-' + idx;
|
|
17
|
+
}
|
|
18
|
+
function getComparableNode(node) {
|
|
19
|
+
if (node.type === 'module' && node.data.module.value.type === 'aiagent') {
|
|
20
|
+
return {
|
|
21
|
+
...node,
|
|
22
|
+
data: {
|
|
23
|
+
...node.data,
|
|
24
|
+
module: $state.snapshot(node.data.module) // module is a proxy object so we need to snapshot to be able to compare
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return node;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function computeAIToolNodes(nodes, eventHandlers, insertable, flowModuleStates) {
|
|
33
|
+
if (computeAIToolNodesCache &&
|
|
34
|
+
!!flowModuleStates === computeAIToolNodesCache.hasFlowModuleStates &&
|
|
35
|
+
deepEqual(nodes.map(getComparableNode), computeAIToolNodesCache.nodes)) {
|
|
36
|
+
return computeAIToolNodesCache.ret;
|
|
37
|
+
}
|
|
38
|
+
const allToolNodes = [];
|
|
39
|
+
const allToolEdges = [];
|
|
40
|
+
const yPosMap = {};
|
|
41
|
+
for (const node of nodes) {
|
|
42
|
+
if (node.type !== 'module' || node.data.module.value.type !== 'aiagent')
|
|
43
|
+
continue;
|
|
44
|
+
// by default we assume we will show tools above
|
|
45
|
+
let baseOffset = -AI_TOOL_BASE_OFFSET;
|
|
46
|
+
let rowOffset = -AI_TOOL_ROW_OFFSET;
|
|
47
|
+
let tools = node.data.module.value.tools.map((t) => ({
|
|
48
|
+
id: t.id,
|
|
49
|
+
name: t.summary ?? ''
|
|
50
|
+
}));
|
|
51
|
+
const agentActions = !insertable && flowModuleStates?.[node.id]?.agent_actions;
|
|
52
|
+
if (agentActions) {
|
|
53
|
+
// should show tools below
|
|
54
|
+
baseOffset = BELOW_ADDITIONAL_OFFSET + AI_TOOL_BASE_OFFSET;
|
|
55
|
+
rowOffset = AI_TOOL_ROW_OFFSET;
|
|
56
|
+
tools = agentActions.map((a, idx) => {
|
|
57
|
+
if (a.type === 'tool_call') {
|
|
58
|
+
const id = getToolCallId(idx, node.id, a.module_id);
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
name: a.function_name
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return {
|
|
66
|
+
id: getToolCallId(idx, node.id),
|
|
67
|
+
name: 'Message'
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const totalRows = Math.ceil(tools.length / MAX_TOOLS_PER_ROW) + (insertable ? 1 : 0); // + 1 for add tool node when insertable
|
|
73
|
+
if (agentActions) {
|
|
74
|
+
yPosMap[node.position.y] = {
|
|
75
|
+
rows: totalRows,
|
|
76
|
+
placement: 'below'
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
yPosMap[node.position.y] = {
|
|
81
|
+
rows: totalRows,
|
|
82
|
+
placement: 'above'
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const toolNodes = tools.map((tool, i) => {
|
|
86
|
+
let inputToolXGap = 12;
|
|
87
|
+
let inputToolWidth = (ROW_WIDTH - inputToolXGap) / 2;
|
|
88
|
+
const row = Math.floor(i / MAX_TOOLS_PER_ROW) + 1;
|
|
89
|
+
const isLastRow = insertable ? row === totalRows - 1 : row === totalRows;
|
|
90
|
+
return {
|
|
91
|
+
type: 'aiTool',
|
|
92
|
+
parentId: node.id,
|
|
93
|
+
data: {
|
|
94
|
+
tool: tool.name,
|
|
95
|
+
eventHandlers,
|
|
96
|
+
moduleId: tool.id,
|
|
97
|
+
insertable,
|
|
98
|
+
flowModuleStates
|
|
99
|
+
},
|
|
100
|
+
id: `${node.id}-tool-${tool.id}`,
|
|
101
|
+
width: inputToolWidth,
|
|
102
|
+
position: {
|
|
103
|
+
x: tools.length === 1
|
|
104
|
+
? (ROW_WIDTH - inputToolWidth) / 2
|
|
105
|
+
: (i + 1) % 2 === 0
|
|
106
|
+
? inputToolWidth + inputToolXGap
|
|
107
|
+
: isLastRow && tools.length % 2 === 1
|
|
108
|
+
? (ROW_WIDTH - inputToolWidth) / 2
|
|
109
|
+
: 0,
|
|
110
|
+
y: baseOffset +
|
|
111
|
+
rowOffset *
|
|
112
|
+
(agentActions
|
|
113
|
+
? Math.floor(i / MAX_TOOLS_PER_ROW) + 1
|
|
114
|
+
: totalRows - Math.floor(i / MAX_TOOLS_PER_ROW))
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
const toolEdges = toolNodes?.map((n) => ({
|
|
119
|
+
id: `${n.id}-edge`,
|
|
120
|
+
source: agentActions ? (n.parentId ?? '') : (n.id ?? ''),
|
|
121
|
+
target: agentActions ? (n.id ?? '') : (n.parentId ?? ''),
|
|
122
|
+
type: 'empty',
|
|
123
|
+
data: { class: '!opacity-35 dark:!opacity-20' }
|
|
124
|
+
}));
|
|
125
|
+
allToolEdges.push(...(toolEdges ?? []));
|
|
126
|
+
allToolNodes.push(...(toolNodes ?? []));
|
|
127
|
+
if (insertable) {
|
|
128
|
+
allToolNodes.push({
|
|
129
|
+
type: 'newAiTool',
|
|
130
|
+
data: { eventHandlers, agentModuleId: node.data.module.id },
|
|
131
|
+
id: `${node.id}-tools-overflowed-in`,
|
|
132
|
+
parentId: node.id,
|
|
133
|
+
width: NEW_TOOL_NODE_WIDTH,
|
|
134
|
+
position: {
|
|
135
|
+
x: (ROW_WIDTH - NEW_TOOL_NODE_WIDTH) / 2,
|
|
136
|
+
y: baseOffset + rowOffset
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const sortedNewNodes = clone(nodes)
|
|
142
|
+
.filter((n) => n.type !== 'asset')
|
|
143
|
+
.sort((a, b) => a.position.y - b.position.y);
|
|
144
|
+
let currentYOffset = 0;
|
|
145
|
+
let prevYPos = NaN;
|
|
146
|
+
for (const node of sortedNewNodes) {
|
|
147
|
+
if (node.position.y !== prevYPos) {
|
|
148
|
+
// if agent actions, we need to shift the node above
|
|
149
|
+
if (yPosMap[prevYPos]?.placement === 'below') {
|
|
150
|
+
currentYOffset += AI_TOOL_BASE_OFFSET + AI_TOOL_ROW_OFFSET * yPosMap[prevYPos].rows;
|
|
151
|
+
}
|
|
152
|
+
if (yPosMap[node.position.y]?.placement === 'above') {
|
|
153
|
+
currentYOffset += AI_TOOL_BASE_OFFSET + AI_TOOL_ROW_OFFSET * yPosMap[node.position.y].rows;
|
|
154
|
+
}
|
|
155
|
+
prevYPos = node.position.y;
|
|
156
|
+
}
|
|
157
|
+
node.position.y += currentYOffset;
|
|
158
|
+
}
|
|
159
|
+
let ret = {
|
|
160
|
+
toolNodes: allToolNodes,
|
|
161
|
+
toolEdges: allToolEdges,
|
|
162
|
+
newNodePositions: Object.fromEntries(sortedNewNodes.map((n) => {
|
|
163
|
+
return [n.id, n.position];
|
|
164
|
+
}))
|
|
165
|
+
};
|
|
166
|
+
computeAIToolNodesCache = {
|
|
167
|
+
nodes: nodes.map(getComparableNode),
|
|
168
|
+
hasFlowModuleStates: !!flowModuleStates,
|
|
169
|
+
ret
|
|
170
|
+
};
|
|
171
|
+
return ret;
|
|
172
|
+
}
|
|
173
|
+
</script>
|
|
174
|
+
|
|
175
|
+
<script lang="ts">import NodeWrapper from './NodeWrapper.svelte';
|
|
176
|
+
import { MessageCircle, Play, Wrench, X } from 'lucide-svelte';
|
|
177
|
+
import { twMerge } from 'tailwind-merge';
|
|
178
|
+
import { getContext } from 'svelte';
|
|
179
|
+
import { clone } from '../../../../utils';
|
|
180
|
+
import { getStateColor, getStateHoverColor } from '../../util';
|
|
181
|
+
import { deepEqual } from 'fast-equals';
|
|
182
|
+
let hover = $state(false);
|
|
183
|
+
let { data } = $props();
|
|
184
|
+
const { selectedId } = getContext('FlowGraphContext');
|
|
185
|
+
const flowModuleState = $derived(data.flowModuleStates?.[data.moduleId]);
|
|
186
|
+
</script>
|
|
187
|
+
|
|
188
|
+
<NodeWrapper>
|
|
189
|
+
{#snippet children({ darkMode })}
|
|
190
|
+
{@const bgColor = getStateColor(flowModuleState?.type, darkMode, true, false)}
|
|
191
|
+
{@const bgHoverColor = getStateHoverColor(flowModuleState?.type, darkMode, true, false)}
|
|
192
|
+
|
|
193
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
194
|
+
<div class="relative" onmouseenter={() => (hover = true)} onmouseleave={() => (hover = false)}>
|
|
195
|
+
<button
|
|
196
|
+
class={twMerge(
|
|
197
|
+
'text-left bg-surface h-6 flex items-center gap-1.5 rounded-sm text-secondary overflow-clip w-full outline-offset-0 outline-slate-500 dark:outline-gray-400',
|
|
198
|
+
$selectedId === data.moduleId ? 'outline outline-1' : 'active:outline active:outline-1'
|
|
199
|
+
)}
|
|
200
|
+
style={`background-color: ${hover ? bgHoverColor : bgColor};`}
|
|
201
|
+
onclick={() => data.eventHandlers.select(data.moduleId)}
|
|
202
|
+
>
|
|
203
|
+
{#if data.moduleId.startsWith(AI_TOOL_MESSAGE_PREFIX)}
|
|
204
|
+
<MessageCircle size={16} class="ml-1 shrink-0" />
|
|
205
|
+
{:else if data.moduleId.startsWith(AI_TOOL_CALL_PREFIX)}
|
|
206
|
+
<Play size={16} class="ml-1 shrink-0" />
|
|
207
|
+
{:else}
|
|
208
|
+
<Wrench size={16} class="ml-1 shrink-0" />
|
|
209
|
+
{/if}
|
|
210
|
+
|
|
211
|
+
<span
|
|
212
|
+
class={twMerge(
|
|
213
|
+
'text-3xs truncate flex-1',
|
|
214
|
+
!validateToolName(data.tool) && 'text-red-400'
|
|
215
|
+
)}
|
|
216
|
+
>
|
|
217
|
+
{data.tool || 'No tool name'}
|
|
218
|
+
</span>
|
|
219
|
+
</button>
|
|
220
|
+
{#if data.insertable}
|
|
221
|
+
<button
|
|
222
|
+
class={twMerge(
|
|
223
|
+
'absolute -top-[8px] -right-[8px] rounded-full h-[16px] w-[16px] center-center text-secondary outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-0 hover:bg-red-400 hover:text-white !hidden',
|
|
224
|
+
$selectedId === data.moduleId || hover ? '!flex' : ''
|
|
225
|
+
)}
|
|
226
|
+
title="Delete"
|
|
227
|
+
onclick={() => data.eventHandlers.delete({ id: data.moduleId }, '')}
|
|
228
|
+
>
|
|
229
|
+
<X size={12} strokeWidth={2} />
|
|
230
|
+
</button>
|
|
231
|
+
{/if}
|
|
232
|
+
</div>
|
|
233
|
+
{/snippet}
|
|
234
|
+
</NodeWrapper>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare function validateToolName(name: string): boolean;
|
|
2
|
+
export declare const AI_TOOL_BASE_OFFSET = 5;
|
|
3
|
+
export declare const AI_TOOL_ROW_OFFSET = 30;
|
|
4
|
+
export declare const BELOW_ADDITIONAL_OFFSET = 19;
|
|
5
|
+
export declare const AI_TOOL_CALL_PREFIX = "_wm_ai_agent_tool_call";
|
|
6
|
+
export declare const AI_TOOL_MESSAGE_PREFIX = "_wm_ai_agent_message";
|
|
7
|
+
export declare function getToolCallId(idx: number, agentModuleId: string, moduleId?: string): string;
|
|
8
|
+
export declare function computeAIToolNodes(nodes: (Node & NodeLayout)[], eventHandlers: GraphEventHandlers, insertable: boolean, flowModuleStates: Record<string, GraphModuleState> | undefined): {
|
|
9
|
+
toolNodes: (Node & NodeLayout)[];
|
|
10
|
+
toolEdges: Edge[];
|
|
11
|
+
newNodePositions: Record<string, {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
import type { AiToolN, GraphEventHandlers, NodeLayout } from '../../graphBuilder.svelte';
|
|
17
|
+
import type { Edge, Node } from '@xyflow/svelte';
|
|
18
|
+
import type { GraphModuleState } from '../../model';
|
|
19
|
+
interface Props {
|
|
20
|
+
data: AiToolN['data'];
|
|
21
|
+
}
|
|
22
|
+
declare const AiToolNode: import("svelte").Component<Props, {}, "">;
|
|
23
|
+
type AiToolNode = ReturnType<typeof AiToolNode>;
|
|
24
|
+
export default AiToolNode;
|