From e197456b0603f98cc08918988b4100f64b979636 Mon Sep 17 00:00:00 2001 From: centdix <40307056+centdix@users.noreply.github.com> Date: Tue, 2 Sep 2025 08:50:14 +0200 Subject: [PATCH 1/5] fix(mcp): fix path transformation (#6508) * fix path transformation * fix mcp url copy * safer code --- backend/windmill-api/src/mcp/server.rs | 7 +++--- .../windmill-api/src/mcp/utils/transform.rs | 25 ++++++------------- .../components/settings/TokenDisplay.svelte | 2 +- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/backend/windmill-api/src/mcp/server.rs b/backend/windmill-api/src/mcp/server.rs index 8bfe35a009..e51d008e3c 100644 --- a/backend/windmill-api/src/mcp/server.rs +++ b/backend/windmill-api/src/mcp/server.rs @@ -190,9 +190,10 @@ impl ServerHandler for Runner { } // Continue with script/flow logic - let (tool_type, path, is_hub) = - reverse_transform(&request.name).unwrap_or_default(); - + let (tool_type, path, is_hub) = reverse_transform(&request.name).map_err(|e| { + Error::internal_error(format!("Failed to reverse transform path: {}", e), None) + })?; + let item_schema = if is_hub { get_hub_script_schema(&format!("hub/{}", path), db).await? } else { diff --git a/backend/windmill-api/src/mcp/utils/transform.rs b/backend/windmill-api/src/mcp/utils/transform.rs index 6574173bc4..c40fe37263 100644 --- a/backend/windmill-api/src/mcp/utils/transform.rs +++ b/backend/windmill-api/src/mcp/utils/transform.rs @@ -12,16 +12,9 @@ use super::models::SchemaType; /// have names with slashes. Because we replace slashes with underscores, /// we also need to escape underscores. pub fn transform_path(path: &str, type_str: &str) -> String { - // Only apply special underscore escaping for paths starting with "f/" - let transformed = if path.starts_with("f/") { - let escaped_path = path.replace('_', "__"); - escaped_path.replace('/', "_") - } else { - path.replace('/', "_") - }; - + let escaped_path = path.replace('_', "__").replace('/', "_"); // first letter of type_str is used as prefix, only one letter to avoid reaching 60 char name limit - format!("{}-{}", &type_str[..1], transformed) + format!("{}-{}", &type_str[..1], escaped_path) } /// Reverse the transformation of a path @@ -53,19 +46,15 @@ pub fn reverse_transform(transformed_path: &str) -> Result<(&str, String, bool), let mangled_path = &transformed_path[2..]; - // Check if this path was previously transformed with special underscore handling - let is_special_path = mangled_path.starts_with("f_"); - let original_path = if is_hub { let parts = mangled_path.split("-").collect::>(); + if parts.is_empty() { + return Err(format!("Invalid transformed path: {}", transformed_path)); + } parts[0].to_string() - } else if is_special_path { - const TEMP_PLACEHOLDER: &str = "@@UNDERSCORE@@"; - let path_with_placeholder = mangled_path.replace("__", TEMP_PLACEHOLDER); - let path_with_slashes = path_with_placeholder.replace('_', "/"); - path_with_slashes.replace(TEMP_PLACEHOLDER, "_") } else { - mangled_path.replacen('_', "/", 2) + const TEMP_PLACEHOLDER: &str = "@@UNDERSCORE@@"; + mangled_path.replace("__", TEMP_PLACEHOLDER).replace('_', "/").replace(TEMP_PLACEHOLDER, "_") }; Ok((type_str, original_path, is_hub)) diff --git a/frontend/src/lib/components/settings/TokenDisplay.svelte b/frontend/src/lib/components/settings/TokenDisplay.svelte index cc24d50718..1a29fab407 100644 --- a/frontend/src/lib/components/settings/TokenDisplay.svelte +++ b/frontend/src/lib/components/settings/TokenDisplay.svelte @@ -18,7 +18,7 @@ }: Props = $props() function handleCopyClick() { - copyToClipboard(token) + copyToClipboard(mcpUrl || token) onCopy?.() } From 561bda2cce1ab69a9f6d1d9b1b76996347857ca8 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Tue, 2 Sep 2025 07:52:18 +0100 Subject: [PATCH 2/5] fix(frontend): improve flow step buttons layout (#6507) * improve flow step buttons layout * nit * nit * harmonize branche delete --- .../flows/map/FlowModuleSchemaItem.svelte | 117 ++++++++++-------- .../map/FlowModuleSchemaItemViewer.svelte | 2 +- .../renderers/nodes/BranchAllStart.svelte | 5 +- .../renderers/nodes/BranchOneStart.svelte | 5 +- 4 files changed, 67 insertions(+), 62 deletions(-) diff --git a/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte b/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte index 819765403d..59be11236b 100644 --- a/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte +++ b/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte @@ -4,7 +4,6 @@ import Popover from '$lib/components/Popover.svelte' import { classNames, type StateStore } from '$lib/utils' import { - AlertTriangle, Bed, Database, Gauge, @@ -16,7 +15,8 @@ Pin, X, Play, - Loader2 + Loader2, + TriangleAlert } from 'lucide-svelte' import { createEventDispatcher, getContext } from 'svelte' import { fade } from 'svelte/transition' @@ -460,60 +460,67 @@ {#if deletable && !action} - - - {#if id !== 'preprocessor'} + {#if id !== 'preprocessor'} + + {/if} - {/if} + {#if (id && Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}).length > 0) || Boolean(warningMessage)} -
- - {#snippet text()} -
    - {#if id} - {#each Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}) as m} -
  • - {m.message} -
  • - {/each} - {/if} -
- {/snippet} -
x.type === 'error' - ) - ? 'border-red-600 text-red-600 bg-red-100 hover:bg-red-300' - : 'border-yellow-600 text-yellow-600 bg-yellow-100 hover:bg-yellow-300' - )} - > - -
-
-
+ x.type === 'error' + ) + ? 'border-red-600 text-red-600 bg-red-100 hover:bg-red-300' + : ' text-yellow-600 bg-yellow-100 hover:bg-yellow-300' + )} + > + {#snippet text()} +
    + {#if id} + {#each Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}) as m} +
  • + {m.message} +
  • + {/each} + {/if} +
+ {/snippet} + + +
{/if} {/if} @@ -521,7 +528,7 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration {#if editMode && enableTestRun && flowJob?.type !== 'QueuedJob'}
(hover = true)} onmouseleave={() => (hover = false)} > @@ -529,11 +536,11 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
{#if !testIsLoading} {/if} {:else if id?.startsWith('subflow:')} diff --git a/frontend/src/lib/components/graph/renderers/nodes/BranchAllStart.svelte b/frontend/src/lib/components/graph/renderers/nodes/BranchAllStart.svelte index 923a82b13c..09ba0d81d8 100644 --- a/frontend/src/lib/components/graph/renderers/nodes/BranchAllStart.svelte +++ b/frontend/src/lib/components/graph/renderers/nodes/BranchAllStart.svelte @@ -40,9 +40,8 @@ {#if data.insertable}
{/if} + {#if Object.keys(aiProviders).length > 0} +
+

Custom system prompts

+
+ + + +
+
+ {/if} +