windmill-components 1.522.0 → 1.531.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/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/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
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { get } from 'svelte/store';
|
|
2
|
+
import { workspaceStore } from '../../../../stores';
|
|
3
|
+
import { McpService } from '../../../../gen/services.gen';
|
|
4
|
+
function buildApiCallTool(endpointTool) {
|
|
5
|
+
// Build the parameters schema for OpenAI function calling
|
|
6
|
+
const parameters = {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {},
|
|
9
|
+
required: []
|
|
10
|
+
};
|
|
11
|
+
// Add path parameters
|
|
12
|
+
if (endpointTool.path_params_schema?.properties) {
|
|
13
|
+
for (const [key, schema] of Object.entries(endpointTool.path_params_schema.properties)) {
|
|
14
|
+
// Skip workspace parameter as it's auto-filled
|
|
15
|
+
if (key === 'workspace')
|
|
16
|
+
continue;
|
|
17
|
+
parameters.properties[key] = schema;
|
|
18
|
+
if (Array.isArray(endpointTool.path_params_schema.required) && endpointTool.path_params_schema.required.includes(key)) {
|
|
19
|
+
parameters.required.push(key);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Add query parameters
|
|
24
|
+
if (endpointTool.query_params_schema?.properties) {
|
|
25
|
+
for (const [key, schema] of Object.entries(endpointTool.query_params_schema.properties)) {
|
|
26
|
+
parameters.properties[key] = schema;
|
|
27
|
+
if (Array.isArray(endpointTool.query_params_schema.required) && endpointTool.query_params_schema.required.includes(key)) {
|
|
28
|
+
parameters.required.push(key);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Add body parameters
|
|
33
|
+
if (endpointTool.body_schema?.properties) {
|
|
34
|
+
// For body params, we wrap them in a 'body' object
|
|
35
|
+
parameters.properties.body = {
|
|
36
|
+
type: 'object',
|
|
37
|
+
description: 'Request body',
|
|
38
|
+
properties: endpointTool.body_schema.properties,
|
|
39
|
+
required: endpointTool.body_schema.required || []
|
|
40
|
+
};
|
|
41
|
+
if (Array.isArray(endpointTool.body_schema.required) && endpointTool.body_schema.required.length > 0) {
|
|
42
|
+
parameters.required.push('body');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
type: 'function',
|
|
47
|
+
function: {
|
|
48
|
+
name: endpointTool.name,
|
|
49
|
+
description: endpointTool.instructions || endpointTool.description,
|
|
50
|
+
parameters
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function buildToolsFromEndpoints(endpointTools) {
|
|
55
|
+
const tools = [];
|
|
56
|
+
const endpointMap = {};
|
|
57
|
+
for (const endpointTool of endpointTools) {
|
|
58
|
+
const tool = buildApiCallTool(endpointTool);
|
|
59
|
+
tools.push(tool);
|
|
60
|
+
// Store the endpoint info in the map
|
|
61
|
+
endpointMap[endpointTool.name] = {
|
|
62
|
+
method: endpointTool.method,
|
|
63
|
+
path: endpointTool.path
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { tools, endpointMap };
|
|
67
|
+
}
|
|
68
|
+
export function createApiTools(chatTools, endpointMap = {}) {
|
|
69
|
+
return chatTools.map((chatTool) => {
|
|
70
|
+
const toolName = chatTool.function.name;
|
|
71
|
+
const endpoint = endpointMap[toolName];
|
|
72
|
+
const method = endpoint?.method?.toUpperCase() || 'GET';
|
|
73
|
+
// Determine if tool needs confirmation based on method
|
|
74
|
+
const needsConfirmation = ['DELETE', 'POST', 'PUT', 'PATCH'].includes(method);
|
|
75
|
+
return {
|
|
76
|
+
def: chatTool,
|
|
77
|
+
requiresConfirmation: needsConfirmation,
|
|
78
|
+
confirmationMessage: `Run ${toolName}`,
|
|
79
|
+
showDetails: true,
|
|
80
|
+
fn: async ({ args, toolId, toolCallbacks }) => {
|
|
81
|
+
const toolName = chatTool.function.name;
|
|
82
|
+
const endpoint = endpointMap[toolName];
|
|
83
|
+
if (!endpoint) {
|
|
84
|
+
throw new Error(`No endpoint mapping found for tool ${toolName}`);
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const workspace = get(workspaceStore);
|
|
88
|
+
let path = endpoint.path.replace('{workspace}', workspace);
|
|
89
|
+
// Build URL with path parameters
|
|
90
|
+
let url = `/api${path}`;
|
|
91
|
+
const queryParams = {};
|
|
92
|
+
let requestBody = undefined;
|
|
93
|
+
// Process arguments
|
|
94
|
+
for (const [key, value] of Object.entries(args)) {
|
|
95
|
+
if (key === 'body') {
|
|
96
|
+
requestBody = value;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Check if this is a path parameter
|
|
100
|
+
if (url.includes(`{${key}}`)) {
|
|
101
|
+
url = url.replace(`{${key}}`, encodeURIComponent(String(value)));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Assume it's a query parameter
|
|
105
|
+
queryParams[key] = String(value);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Add query parameters to URL if needed
|
|
109
|
+
if (Object.keys(queryParams).length > 0) {
|
|
110
|
+
const searchParams = new URLSearchParams();
|
|
111
|
+
for (const [key, value] of Object.entries(queryParams)) {
|
|
112
|
+
searchParams.append(key, value);
|
|
113
|
+
}
|
|
114
|
+
url += `?${searchParams.toString()}`;
|
|
115
|
+
}
|
|
116
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
117
|
+
content: `Calling ${toolName}...`,
|
|
118
|
+
});
|
|
119
|
+
const fetchOptions = {
|
|
120
|
+
method: endpoint.method
|
|
121
|
+
};
|
|
122
|
+
// Add request body for POST/PUT/PATCH methods
|
|
123
|
+
if (requestBody && ['POST', 'PUT', 'PATCH'].includes(endpoint.method.toUpperCase())) {
|
|
124
|
+
fetchOptions.headers = {
|
|
125
|
+
'Content-Type': 'application/json'
|
|
126
|
+
};
|
|
127
|
+
fetchOptions.body = JSON.stringify(requestBody);
|
|
128
|
+
}
|
|
129
|
+
const response = await fetch(url, fetchOptions);
|
|
130
|
+
if (response.ok) {
|
|
131
|
+
let result = '';
|
|
132
|
+
if (response.headers.get('content-type')?.includes('application/json')) {
|
|
133
|
+
result = await response.json();
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
result = await response.text();
|
|
137
|
+
}
|
|
138
|
+
const jsonResult = JSON.stringify({
|
|
139
|
+
success: true,
|
|
140
|
+
data: result
|
|
141
|
+
});
|
|
142
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
143
|
+
content: `Call to ${toolName} completed`,
|
|
144
|
+
result: jsonResult,
|
|
145
|
+
});
|
|
146
|
+
return jsonResult;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
const text = await response.text();
|
|
150
|
+
const jsonResult = JSON.stringify({
|
|
151
|
+
success: false,
|
|
152
|
+
error: text,
|
|
153
|
+
status: response.status
|
|
154
|
+
});
|
|
155
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
156
|
+
content: `Call to ${toolName} failed`,
|
|
157
|
+
result: jsonResult,
|
|
158
|
+
error: `HTTP ${response.status}: ${text}`,
|
|
159
|
+
});
|
|
160
|
+
return jsonResult;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
const errorMessage = `Error calling API: ${error instanceof Error ? error.message : String(error)}`;
|
|
165
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
166
|
+
content: `Call to ${toolName} failed`,
|
|
167
|
+
error: errorMessage,
|
|
168
|
+
});
|
|
169
|
+
console.error(`Error calling API:`, error);
|
|
170
|
+
return errorMessage;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
export async function loadApiTools() {
|
|
177
|
+
try {
|
|
178
|
+
// Fetch the list of available MCP tools from the backend
|
|
179
|
+
const endpointTools = await McpService.listMcpTools({
|
|
180
|
+
workspace: get(workspaceStore)
|
|
181
|
+
});
|
|
182
|
+
// Build tools from the endpoint definitions
|
|
183
|
+
const { tools: apiTools, endpointMap } = buildToolsFromEndpoints(endpointTools);
|
|
184
|
+
// Create executable tools
|
|
185
|
+
const executableApiTools = createApiTools(apiTools, endpointMap);
|
|
186
|
+
return executableApiTools;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error('Failed to load API tools:', error);
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam } from 'openai/resources/index.mjs';
|
|
2
|
+
import type { Tool } from '../shared';
|
|
3
|
+
export declare const CHAT_SYSTEM_PROMPT: (username: string) => string;
|
|
4
|
+
export declare function getApiTools(): Promise<Tool<{}>[]>;
|
|
5
|
+
export declare const apiTools: Tool<{}>[];
|
|
6
|
+
export declare function prepareApiSystemMessage(): ChatCompletionSystemMessageParam;
|
|
7
|
+
export declare function prepareApiUserMessage(instructions: string): ChatCompletionUserMessageParam;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { loadApiTools } from './apiTools';
|
|
2
|
+
import { getDocumentationTool } from '../navigator/core';
|
|
3
|
+
import { userStore } from '../../../../stores';
|
|
4
|
+
import { get } from 'svelte/store';
|
|
5
|
+
export const CHAT_SYSTEM_PROMPT = (username) => `
|
|
6
|
+
You are Windmill's intelligent assistant, designed to interact with the platform via API endpoints and answer questions about its functionality. Your purpose is to help the user directly query and manipulate Windmill resources through API calls.
|
|
7
|
+
|
|
8
|
+
Windmill is an open-source developer platform for building internal tools, API integrations, background jobs, workflows, and user interfaces. It offers a unified system where scripts are automatically turned into sharable UIs and can be composed into flows or embedded in custom applications.
|
|
9
|
+
|
|
10
|
+
You have access to these tools:
|
|
11
|
+
1. Get documentation for user requests (get_documentation)
|
|
12
|
+
2. A comprehensive list of API endpoints to interact with the Windmill backend
|
|
13
|
+
|
|
14
|
+
INSTRUCTIONS:
|
|
15
|
+
- You can directly query, list, create, update, and delete various Windmill resources like scripts, flows, jobs, resources, variables, schedules, and workers through the provided API tools.
|
|
16
|
+
- When users ask about specific data or want to perform operations, use the appropriate API endpoints to fulfill their requests.
|
|
17
|
+
- Use get_documentation to retrieve accurate information about features, concepts, and best practices when needed.
|
|
18
|
+
- Always present API results in a clear, readable format for the user.
|
|
19
|
+
- If you need to make multiple related API calls to fulfill a request, do so systematically and explain what you're doing.
|
|
20
|
+
- When showing lists of items, provide meaningful summaries rather than overwhelming the user with raw data.
|
|
21
|
+
- If an API call fails, explain the error clearly and suggest alternatives if applicable.
|
|
22
|
+
- If the user cancels the request, do not try again and ask for the user if he wants to make a new request with different instructions.
|
|
23
|
+
- For endpoints other that GET requiring to send a path, ask the user if he wants the path to be on a folder, or to be on its user's folder. Folder path looks like f/{folder_name}/{resource_path}, and user's folder path looks like u/${username}/{resource_path}.
|
|
24
|
+
- If an endpoint requires a resource_type, first fetch the available resourceTypes.
|
|
25
|
+
|
|
26
|
+
API CAPABILITIES:
|
|
27
|
+
- Query jobs, scripts, flows, and their execution history
|
|
28
|
+
- List and manage resources and variables
|
|
29
|
+
- View schedules and worker information
|
|
30
|
+
- Search through job logs (if enterprise features are enabled)
|
|
31
|
+
- Access detailed information about any Windmill resource
|
|
32
|
+
|
|
33
|
+
GENERAL PRINCIPLES:
|
|
34
|
+
- Be direct and action-oriented - use the API tools to fulfill user requests
|
|
35
|
+
- Provide clear summaries of API responses
|
|
36
|
+
- Maintain a helpful, professional tone
|
|
37
|
+
- If you encounter an error or can't complete a request, explain why and suggest alternatives
|
|
38
|
+
- Complete your responses with relevant documentation links when applicable
|
|
39
|
+
|
|
40
|
+
Always use the provided API tools to directly interact with the Windmill platform and provide users with the information they need.
|
|
41
|
+
`;
|
|
42
|
+
let apiToolsCache = null;
|
|
43
|
+
export async function getApiTools() {
|
|
44
|
+
if (apiToolsCache === null) {
|
|
45
|
+
apiToolsCache = await loadApiTools();
|
|
46
|
+
}
|
|
47
|
+
return apiToolsCache;
|
|
48
|
+
}
|
|
49
|
+
export const apiTools = [getDocumentationTool];
|
|
50
|
+
export function prepareApiSystemMessage() {
|
|
51
|
+
return {
|
|
52
|
+
role: 'system',
|
|
53
|
+
content: CHAT_SYSTEM_PROMPT(get(userStore)?.username ?? '')
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function prepareApiUserMessage(instructions) {
|
|
57
|
+
return {
|
|
58
|
+
role: 'user',
|
|
59
|
+
content: instructions
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -175,11 +175,11 @@ const flowHelpers = {
|
|
|
175
175
|
const { input_transforms, schema } = await loadSchemaFromModule(module);
|
|
176
176
|
module.value.input_transforms = input_transforms;
|
|
177
177
|
refreshStateStore(flowStore);
|
|
178
|
-
if (
|
|
179
|
-
|
|
178
|
+
if (flowStateStore.val[id]) {
|
|
179
|
+
flowStateStore.val[id].schema = schema;
|
|
180
180
|
}
|
|
181
181
|
else {
|
|
182
|
-
|
|
182
|
+
flowStateStore.val[id] = {
|
|
183
183
|
schema
|
|
184
184
|
};
|
|
185
185
|
}
|
|
@@ -266,7 +266,6 @@ const flowHelpers = {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
if (location.type === 'preprocessor' || location.type === 'failure') {
|
|
269
|
-
$flowStateStore = $flowStateStore;
|
|
270
269
|
refreshStateStore(flowStore);
|
|
271
270
|
setModuleStatus(location.type, 'added');
|
|
272
271
|
return location.type;
|
|
@@ -279,7 +278,6 @@ const flowHelpers = {
|
|
|
279
278
|
if (['branchone', 'branchall'].includes(step.type)) {
|
|
280
279
|
await flowModuleSchemaMap?.addBranch(newModule.id);
|
|
281
280
|
}
|
|
282
|
-
$flowStateStore = $flowStateStore;
|
|
283
281
|
refreshStateStore(flowStore);
|
|
284
282
|
setModuleStatus(newModule.id, 'added');
|
|
285
283
|
return newModule.id;
|
|
@@ -449,7 +447,7 @@ $effect(() => {
|
|
|
449
447
|
return cleanup;
|
|
450
448
|
});
|
|
451
449
|
$effect(() => {
|
|
452
|
-
const cleanup = aiChatManager.listenForSelectedIdChanges($selectedId, flowStore.val,
|
|
450
|
+
const cleanup = aiChatManager.listenForSelectedIdChanges($selectedId, flowStore.val, flowStateStore.val, $currentEditor);
|
|
453
451
|
return cleanup;
|
|
454
452
|
});
|
|
455
453
|
$effect(() => {
|