From 2458c5d2f0eef0f9fa064e5bf3b54003bd2d68cf Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Thu, 12 Feb 2026 15:55:39 -0800 Subject: [PATCH 1/6] enabled draft functionality --- Localize/lang/strings.json | 422 ++++++++++++++++++ .../openDesignerForLocalProject.ts | 54 +++ .../src/app/utils/codeless/draftManager.ts | 90 ++++ apps/vs-code-designer/src/constants.ts | 3 + .../designer/DesignerCommandBar/indexV2.tsx | 250 +++++++++-- apps/vs-code-react/src/app/designer/appV2.tsx | 121 ++++- apps/vs-code-react/src/intl/messages.ts | 85 ++++ apps/vs-code-react/src/run-service/types.ts | 19 + apps/vs-code-react/src/state/DesignerSlice.ts | 97 ++++ .../src/webviewCommunication.tsx | 16 +- .../src/lib/models/extensioncommand.ts | 4 + 11 files changed, 1119 insertions(+), 42 deletions(-) create mode 100644 apps/vs-code-designer/src/app/utils/codeless/draftManager.ts diff --git a/Localize/lang/strings.json b/Localize/lang/strings.json index 52f06cc79b7..77cfeb55565 100644 --- a/Localize/lang/strings.json +++ b/Localize/lang/strings.json @@ -5,6 +5,7 @@ "+3rROX": "Protected", "+64+eE": "Cancel", "+7+u4y": "Failed to initialize the following operations. Please try again later.", + "+AFyLk": "Finish", "+DmIHG": "Built-in", "+EREVh": "Name", "+FcXe9": "Faulted", @@ -15,6 +16,7 @@ "+M72+a": "Overview", "+M7bC6": "Succeeded with retries", "+Oshid": "Select Type", + "+P+nuy": "Workflow that supports natural language, human interaction, and agents connected to LLMs", "+QFwA1": "Key-based", "+QUFXQ": "OK", "+R82zZ": "No results found", @@ -29,6 +31,7 @@ "+gBLFF": "Your template has been saved.", "+iPg27": "Delete", "+ijo/2": "Paste last used expression", + "+itf/D": "Save", "+l5XmZ": "Enter a positive integer between {min} and {max}", "+mAJR3": "(UTC+08:00) Kuala Lumpur, Singapore", "+mNJQl": "Create a logic app", @@ -37,8 +40,10 @@ "+oelX4": "Required. The string to examine.", "+powfX": "Time zone", "+tCJ2g": "On", + "+u2tgz": "Create workspace", "+xXHdp": "No outputs", "+yTsXQ": "Add workflows for this template", + "+zIx77": "Choose your target subscription and location", "/21RuK": "Workflow name must start with a letter and can contain letters, numbers (0-9), dashes ('-'), and underscores ('_').", "/2V8bQ": "Timed out", "/4vNBB": "Search logic apps...", @@ -61,6 +66,8 @@ "/csbOB": "Retry policy count is invalid (must be from {min} to {max})", "/doURb": "Convert the input to an array", "/km5eO": "(UTC-04:00) Asuncion", + "/kz09u": "Function folder name cannot be the same as the logic app name.", + "/ld6GS": "Logic app type", "/mjH84": "Show raw outputs", "/n13VL": "Properties", "/qCaDo": "Indicates to template users whether the parameter must be filled to proceed", @@ -79,6 +86,7 @@ "00xlpa": "Shared", "03RO5d": "Edit parameter", "04AwK7": "Error code: ''{errorCode}'', Message: ''{message}''.", + "06T/X8": "Export custom API actions to API management", "06zKZg": "(UTC+04:00) Tbilisi", "07ZsoY": "Returns the start of the hour to a string timestamp passed in", "07oZoX": "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky", @@ -93,6 +101,7 @@ "0FzNJV": "Required. The base64 encoded string.", "0G6CfM": "Model", "0GT0SI": "Cancel", + "0H5p4k": "Select workflow type", "0IRUjM": "Select a target schema node to start mapping", "0JIDLK": "There are multiple consecutive Initialize Variable actions in this workflow. Would you like to combine them into a single action?", "0JTHTZ": "Show run menu", @@ -112,10 +121,13 @@ "0l+F9w": "Description", "0m0zNa": "Connector Type", "0m2Y1/": "Value", + "0n/bOI": "The name can contain only alphanumeric characters or the following symbols: . _ - ( )", "0oebOm": "Outputs", "0p+pJq": "Returns the remainder after dividing the two numbers (modulo)", "0qV0Qe": "Required. The string that may contain the value.", + "0rJ6RJ": "Loading...", "0sbIhI": "Production", + "0uiwQZ": "Complete export", "0uj1Li": "Returns a binary representation of an input data URI string", "0upuCv": "Hour", "0uuxAX": "Delete mapping", @@ -126,6 +138,7 @@ "0xLWzG": "The name already exists or is invalid. Update the name before you continue.", "0y5eia": "More commands", "0zMOIe": "Connector Name", + "1+JO/G": "Designer view", "1+Z8n9": "Required. The data URI to convert to String representation.", "109OPL": "Returns the port from a URI. If port is not specified, returns the default port for the protocol", "10b+jL": "Parameters", @@ -149,6 +162,7 @@ "1Xke9D": "open functions drawer", "1YUi9I": "Add a hand-off agent", "1ZrOYn": "AI Foundry Project", + "1b4sPR": "Review + create", "1dlfUe": "Actions perform operations on data, communicate between systems, or run other tasks.", "1eKQwo": "(UTC+08:00) Perth", "1f7LG4": "Fixed interval", @@ -157,6 +171,7 @@ "1hPZqe": "The number of times to retry the request", "1htSs7": "Off", "1i3RKp": "Published for Testing", + "1jaOSf": "Logic app name cannot be the same as the function folder name.", "1jf3Dq": "Z to A, descending", "1jhzOM": "Required. The object to check if it is less than value being compared to.", "1lLI6H": "Workflow summary is required for publish.", @@ -167,11 +182,13 @@ "1tmN2o": "Workflow version", "1uGBLP": "5", "1x5IuY": "No connectors found", + "1xa4kY": "No details available", "20oqsp": "Add children (recursive)", "23fENy": "Returns a binary representation of a base 64 encoded string", "23szE+": "Required. The value to convert to data URI.", "23uZn1": "Global search", "27Nhhv": "Select an API from an API Management instance", + "29Wg4P": "Select all", "2CGfiU": "Download template", "2CXCOt": "Select a file to upload", "2DmMb7": "Chat Availability", @@ -190,6 +207,7 @@ "2On4Xu": "Code view tab", "2P1Ap0": "Existing", "2TMGk7": "Managed identity", + "2XH9oW": "Back", "2ZfzaY": "Select existing", "2aC0Xh": "Saving workflow...", "2adqQ4": "Maximum interval", @@ -211,6 +229,7 @@ "2xQWRt": "Search Functions", "2y24a/": "Save", "2yCDJd": "Test is not supported for your current operating system", + "2yO/M6": "Include connection configurations in export", "2z5HGT": "Optional. The RFC 4646 locale code to use. If not specified, default locale is used. If locale isn't a valid value, an error is generated that the provided locale isn't valid or doesn't have an associated locale.", "3+TQMa": "Loading connection...", "33+WHG": "Identifier", @@ -225,6 +244,7 @@ "3DEbi3": "Generate MCP API key", "3ERi+E": "Terms of Service", "3GINhd": "Triggers", + "3H+PIM": "Overview", "3Hl3r2": "Published by", "3JEC7U": "Error type", "3KPLpx": "Remove all mappings within source element `{nodeName}` first.", @@ -237,6 +257,7 @@ "3QXY3z": "Replacing an existing schema with an incompatible schema might create errors in your map.", "3RoD4h": "Returns the collection in reverse order", "3ST5oT": "You're creating an accelerator template!", + "3Wcqsy": "Next", "3X4FHS": "Choose the type of user input", "3Xf/4S": "Swagger endpoint", "3Y8a6G": "Required parameters {parameters} not set or invalid", @@ -277,6 +298,7 @@ "4D7H4R": "Runs {onDays}", "4E69aV": "Background color", "4Ekn9t": "Undo", + "4IV3/7": "Step {current} of {total}", "4LQwvg": "Cancel", "4Levd5": "Send me an email when", "4Q7WzU": "Add a new connection", @@ -296,11 +318,13 @@ "4iyEAY": "💾 Saving this flow...", "4izAMi": "Enter a value to respond with", "4mxRH9": "All", + "4rIMVu": "Additional steps", "4rVVyW": "Retry history", "4rdY7D": "Run ID", "4vcnOA": "Returns the minimum value in the input array of numbers", "4vmGh0": "Service request ID", "4wjJs0": "14", + "4y9tHO": "Use left and right arrow keys to navigate between commands", "4yDTpq": "Copy URL", "4yQ6LA": "Loading...", "5+P3ef": "(UTC+08:45) Eucla", @@ -314,6 +338,7 @@ "5E66mK": "Remove parameter", "5G/VKd": "This action doesn't have parameters that need setup.", "5GHXCP": "Select all", + "5GWxTc": "Function workspace", "5HY9F4": "Storage account", "5J9jne": "Tell Microsoft what you liked about this feature", "5L2vIX": "Subscription", @@ -354,11 +379,14 @@ "63CC7M": "Error loading inputs", "63fQWE": "Show all advanced parameters", "6776lH": "Processing...", + "67FI5P": "Integration service environment", "68UJHa": "This list shows the new resources to create for your logic app and existing resources if any.", + "69+CIW": "View workflow", "6D5fAm": "Trigger", "6DZp5H": "Search", "6DsS1M": "Duration (days)", "6ELsbA": "Profile", + "6HztdX": "Summary", "6JfSVt": "Cancel", "6LJZ7n": "Retry policy", "6OCUKm": "Configure", @@ -388,6 +416,7 @@ "6qPgjN": "Description", "6qkBwz": "Required. The number to multiply Multiplicand 2 with.", "6rJ+Fj": "Delete workflow graph", + "6sEsIN": "Conversational agents", "6sGj3J": "Create flow", "6sSPNb": "{connectorName} connector", "6u6CS+": "Required. The value for which to find the index.", @@ -399,6 +428,7 @@ "6yFUar": "Outputs are required when status is \"Succeeded\"", "6ylGHb": "For each loops run in parallel by default. Use this setting to control how many items are processed in parallel, or set the limit to 1 to run the loop sequentially.", "7+ZxCU": "Invalid authentication value", + "70cHmm": "OK", "73iM9+": "Update source schema", "74e2xB": "Create a new connection", "75zXUl": "Cancel", @@ -425,6 +455,7 @@ "7ZR1xr": "Add an action", "7aJqIH": "Optional. The locale to be used when formatting (defaults to 'en-us').", "7adnmH": "Back to template library", + "7bhWPe": "A project with this name already exists in the workspace.", "7cPLnJ": "Do you want to stop the agent chat? This will cancel the workflow.", "7fZkLA": "Disable static result", "7gUE8h": "This will revert your workflow to the state it was in before Copilot's edit. If you made additional edits to the workflow after Copilot's, you will lose them. This action cannot be undone. Do you want to continue?", @@ -470,7 +501,9 @@ "8U/Kek": "Retry", "8U0KPg": "Required. The string to be URI encoded.", "8UfIAk": "Enter secret as plain text or use a secure parameter", + "8VlCa0": "Discard", "8Y5xpK": "Thursday", + "8YVpN7": "Logic app created successfully!", "8ZfbyZ": "(UTC+06:00) Astana", "8cgUrz": "Close", "8d3lmL": "Storage account", @@ -482,6 +515,7 @@ "8iX8Yu": "Create", "8j+a0n": "With the asynchronous pattern, if the remote server indicates that the request is accepted for processing with a 202 (Accepted) response, the Logic Apps engine will keep polling the URL specified in the response's location header until reaching a terminal state.", "8lZGy+": "Chat is only available in production when authentication is enabled on the app. This ensures secure access to your workflow.", + "8m5+M9": "No subscriptions available", "8mDG0V": "The workflow has parameter validation errors in the following operations: {invalidNodes}", "8nnC5o": "The user-friendly name displayed for the workflow in the Azure portal.", "8opHew": "Combine Initialize Variables (preview)", @@ -535,15 +569,18 @@ "9klmbJ": "Save", "9lP2zW": "Please select tool", "9mjZIW": "Delete handoff", + "9nAAU/": "Connections", "9sRgCm": "The server {serverName} has been updated.", "9u/Ae3": "Returns true if both parameters are true", "9uv02q": "Set the tracking ID for the run. For split-on this tracking ID is for the initiating request", "9wX3u9": "Send feedback", "9yLPwo": "For more detailed information, you can refer to the following resources", "9yq5lv": "Create as per-user connection?", + "9z/8Jn": "Selected apps", "A0Kk9V": "Review details for the source Consumption logic app. Provide details for the destination Standard logic app.", "A5/IqS": "Run identifier", "A5Ferh": "Source element removed from view.", + "A7wxg0": "Validating...", "A8T1X/": "Whitespaces must be encoded for URIs.", "AB+yPQ": "Connection details", "AEguAy": "Empty value", @@ -554,6 +591,7 @@ "APKdYG": "Enter a valid double number.", "APfopx": "Manage authentication for your MCP servers.", "AQ7Zxc": "Returns the index for a value's n-th occurrence in a string (case-insensitive, invariant culture).", + "AQqOMB": "Workflow name", "Ae8T94": "View issues", "Af+Ve0": "(UTC+11:00) Bougainville Island", "AfJvdR": "Key access duration", @@ -565,10 +603,16 @@ "AlWFOS": "Collapse chat panel", "Alq4/3": "Hybrid connector", "AmSRsf": "Name this parameter", + "AmlQmq": "Create unit test from run", "AnX5yC": "Username", "Ap0SOB": "Deleting workflows will remove them from this template. The template will be unpublished and won't appear in the template library until it is republished. Do you want to delete the workflow(s) and unpublish?", "ArTh0/": "Required. The string to encode into base64 representation.", + "As1Hou": "Autosaved 1 hour ago", + "AsHour": "Autosaved {count} hours ago", + "AsMins": "Autosaved a few minutes ago", + "AsSeco": "Autosaved a few seconds ago", "Aui3Mq": "{title} operation", + "Av2j9p": "Advanced options", "Az0QvG": "Automatic", "B/JzwK": "{actionCount, plural, one {# Action} =0 {0 Actions} other {# Actions}}", "B/gCWM": "Error", @@ -601,6 +645,8 @@ "BYrP8F": "Number", "BYsNzz": "Your template has been unpublished.", "Bewmet": "Array", + "BfGFkk": "Test icon", + "Bft/H3": "All the benefits of Stateful, plus the option to build AI agents in your workflow to automate complex tasks.", "BjrVzW": "Resource group", "Bkc/+3": "Retry policy minimum interval is invalid, must match ISO 8601 duration format", "Bl4Iv0": "(UTC+08:00) Ulaanbaatar", @@ -622,6 +668,7 @@ "C3taj3": "Set up your MCP server with existing workflows. Select them from this logic app.", "C4NQ1J": "Retrieve items to meet the specified threshold by following the continuation token. Due to connector's page size, the number returned may exceed the threshold.", "CAsrZ8": "When an HTTP request is received", + "CBcl2V": "Logic app name cannot be empty.", "CBzSJo": "True", "CCpPpu": "Parameters", "CDET7A": "This list shows the new resources to create for your logic app and existing resources if any.", @@ -636,20 +683,24 @@ "Cb8pv0": "(UTC-02:00) Mid-Atlantic - Old", "Ccbm2Y": "Multi-select list of options", "CcuFEN": "Report error", + "Cd1Tab": "Code", "CdyJ6f": "Recurrence", "CeF40t": "Authentication type", "CemHmO": "Loading...", + "CfXSvL": "Standard logic app with built-in connectors and triggers", "ChhFFp": "Close", "Ci41Od": "(UTC+12:00) Auckland, Wellington", "Ciol6I": "Output", "Cj3/LJ": "Must provide the parameter name.", "ClZW2r": "Value", "ClowJ/": "Authentication type", + "CnRu/U": "Package setup", "Cnymq/": "Review all the values you've added to this template. This read-only summary lets you quickly scan your template setup.", "Cosbik": "Create connection", "CqN0oM": "Customize parameter", "CrlPhs": "Edit", "CvoqQ6": "Please enter or select a date (YYYY-MM-DD)", + "CwAnpR": "Rules engine configuration", "Cx7E/L": "Creating...", "Cy0pyB": "(UTC+09:30) Adelaide", "Cy4+KL": "Redo", @@ -669,6 +720,7 @@ "DEu7oK": "(UTC-07:00) Arizona", "DGMwU4": "Use sample payload to generate schema", "DGPz3M": "Copied!", + "DHI56r": "Rules engine location", "DIDL6K": "Standard logic app", "DIwFTo": "To generate and test with the latest XSLT, please save the map first.", "DJW8RE": "Select a value", @@ -690,13 +742,17 @@ "DabKOm": "API keys", "DbxZhS": "Remove list of options", "DcJBUx": "Trigger type", + "DdAlJ9": "Function name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "DeM/yz": "Start time", + "DfSvAt": "Draft autosaved at: {time}", "DfXxoX": "Select an existing connection or create a new one", "Dhu3IS": "Show mini-map", "DjbVKU": "OAuth", "Dm0zAO": "The maximum duration on a single outbound request from this action. If the request doesn't finish within this limit after running retries, the action fails", "DoX1Qb": "Add MCP server", "DsPDVB": "Trigger condition cannot be empty", + "DscDft": "Discard draft (revert to published)", + "DscSsn": "Discard session changes", "DserLU": "Connecting to Agent", "DuoHXI": "Add an input", "DvKGRc": "Learn more about authentication setup", @@ -711,6 +767,7 @@ "E7jFWU": "Logic App", "E8iqLl": "(UTC+11:00) Sakhalin", "EAAlZ9": "Delete agent", + "ECHpxE": "Your logic app has been created and is ready to use.", "ECZC6Y": "Converts the parameter to a decimal number", "EE1vyH": "Update workflow before using this trigger", "EFQ56R": "Source code", @@ -737,6 +794,7 @@ "EptZhD": "Enter a valid table.", "EqNkZN": "Application Insights", "EqX3Mi": "Set up these connections to use them in your flow.", + "ErAsDf": "Error autosaving draft", "EurkzL": "Please select yes or no", "EvgBRe": "Choose a Model Context Protocol (MCP) server to invoke.", "Eyxa6q": "The number of workflow instances that can wait to run when your current workflow instance is already running the maximum concurrent instances.", @@ -781,6 +839,7 @@ "FiyQjU": "2", "Fmt/E7": "{actionCount, plural, one {# Tool} =0 {0 Tools} other {# Tools}}", "FoUzpc": "Display name is required for Save.", + "Fsc9ZE": "Logic app with built-in business rules engine for complex decision logic", "FslNgF": "Status", "Fx/6sv": "Go to operation", "FxQ2Ts": "(UTC+02:00) Tripoli", @@ -852,8 +911,10 @@ "Heod+8": "Add an action", "HfinO2": "Switch to detail inputs for array item", "HfmDk9": "Edit Flow", + "Hggv59": "Project setup", "HkIZ7P": "Name", "HmcHoE": "Error fetching manifest", + "HuWIbw": "Package warning", "HzS2gJ": "Dynamic content not supported as properties in authentication.", "I+85NV": "Submit from this action", "I1CYNA": "Invalid property ''{invalidProperties}'' for authentication type ''{authType}''.", @@ -863,7 +924,9 @@ "I3mifR": "Is skipped", "I41vZ/": "(UTC-11:00) Coordinated Universal Time-11", "I8lbqy": "Deleted MCP server", + "I9O2NQ": "Function name", "IA+Ogm": "22", + "IACzZz": "Validation", "IAmvpa": "(UTC-08:00) Coordinated Universal Time-08", "IBFBR2": "Remove loop", "IG4XXf": "State", @@ -876,6 +939,7 @@ "IOQVnL": "Workflow display name is required for Save.", "IPwWgu": "(UTC+02:00) Jerusalem", "IQyOth": "If available, dynamic content is automatically generated from the connectors and actions you choose for your flow.", + "IRW6v7": "Integration account source", "IS4vNX": "(UTC-12:00) International Date Line West", "ISaPr+": "Create, manage Logic Apps parameters, give it a default value.", "IUbVFR": "Search", @@ -884,12 +948,14 @@ "Iasy6i": "Do not allow channels", "IdOhPY": "{label} To add dynamic data, press the Alt + '/' keys.", "If+p6C": "(UTC+09:00) Yakutsk", + "Ih40n5": "Custom code folder name", "IhVOVF": "How to use MCP server?", "IjoW0x": "Dynamic Parameters", "IjvmvR": "Dismiss trigger info message", "IlyNs0": "{overflowItemsLength} more item", "Iov0/J": "MCP server name", "IpD27y": "Logic app instance", + "IpUfon": "Location", "IqNEui": "Specify download chunk size between {minimumSize} and {maximumSize} Mb. Example: 10", "IsVhkH": "No properties", "IsbbsG": "When a new item", @@ -909,6 +975,7 @@ "J9wWry": "Parameters", "JAIV0h": "The current map contains {numOfIssues} {issue}.", "JASGDy": "Loading API Management accounts...", + "JBRP7/": "Chat with AI", "JBa1qe": "Workflow display name", "JCmWdL": "Default settings", "JErLDT": "Delete", @@ -919,8 +986,10 @@ "JKZpcd": "Copilot chat canceled", "JKfEGS": "Create new", "JNQHws": "Required. A string that contains the time.", + "JO3aZv": "Select subscription and location", "JQBEOg": "Review + create", "JRsTtp": "Task timeline", + "JS4ajl": "Configure your logic app workspace settings", "JSbDfI": "Expand nested", "JSfWJ0": "Required. The value that is converted to a boolean.", "JU3q4H": "Review + create", @@ -930,6 +999,7 @@ "JWl/LD": "Add new item", "JYpccF": "App Service plan name", "Jaz3EC": "Converts a string timestamp passed in from a source time zone to a target time zone", + "JeAp3Z": "Logic app with custom code", "Ji6663": "Returns true if a dictionary contains a key, if an array contains a value, or if a string contains a substring", "JiCr7D": "A to Z, ascending", "Jil/Wa": "Invalid settings", @@ -938,7 +1008,9 @@ "Jk2B0i": "Prerequisites", "JnlcZQ": "Name:", "Jq2Y/o": "Required. The numeric format string.", + "JqiwYx": "Review + create", "JrAqnE": "Run with payload", + "JrDiMJ": "Package path cannot be empty", "JsUu6b": "Workflow", "Jx88eq": "MCP API key", "JyYLq1": "Zoom out", @@ -951,6 +1023,7 @@ "K9ORYo": "Schema ID", "KBaGkS": "Change connection reference", "KGvXUc": "Update", + "KJLHaU": "Not specified", "KKBCUX": "Validation failed", "KO2eUv": "Connectors", "KV+9pl": "Run published workflow", @@ -968,6 +1041,7 @@ "KnjcUV": "Ignored", "KqJ14/": "Edit schema", "KsoxUQ": "Access keys", + "KtGlzI": "A resource group with the same name already exists in the selected subscription.", "Kv+Pa3": "Testing", "KwGA+K": "Select a Function App resource", "KwYMAL": "Stop chat", @@ -980,11 +1054,13 @@ "LBlM+D": "Not specified", "LCRHQ9": "(UTC+12:00) Fiji", "LElaX3": "Next flow suggestion", + "LG7hSo": "Assertions", "LGUiVk": "Public access", "LLJrOT": "Description", "LMB8am": "Creating...", "LNA+DZ": "Model", "LPzAHC": "Loading files…", + "LQG4qS": "Workflow configuration", "LR/3Lr": "Configure", "LRAhSA": "When enabled, this action will run with the user from the \"Run as\" setting in the Dataverse trigger", "LS8rfZ": "Returns the scheme from a URI", @@ -992,6 +1068,7 @@ "LULjJn": "Additional context or help text for the parameter.", "LV3k48": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", "LX3q/+": "Running draft workflow...", + "LZYI4N": "Select workflows", "LZm3ze": "Add a parallel branch", "LaFlFh": "Removed this action", "Ld62T8": "Delete", @@ -999,6 +1076,7 @@ "LdITnG": "(UTC-03:00) Cayenne, Fortaleza", "LeR+TX": "Zoom in", "Lft/is": "Add new", + "LgCmeY": "The specified path does not exist or is not accessible.", "Lnqh6h": "Bold (Ctrl+B)", "LoGUT3": "When used inside for-each loop, this function returns the current item of the specified loop.", "LpPNAD": "Add", @@ -1007,6 +1085,7 @@ "LuIkbo": "Expanding actions...", "Lub7NN": "Required. The expressions that may be true.", "LvLksz": "Loading outputs", + "Lx7xjr": "Export connections", "Lx8HRl": "(UTC+02:00) Damascus", "LzgX0P": "Search resources...", "M+nnq6": "Failed", @@ -1026,6 +1105,7 @@ "MAX7xS": "Show more", "MCzWDc": "Preview", "MDbmMw": "Required. The collections to evaluate. An object must be in all collections passed in to appear in the result.", + "MDmYah": "Filter by resource group", "MFg+49": "Loading...", "MGZRu4": "Add an action", "MGq28G": "Trigger", @@ -1036,6 +1116,7 @@ "MLCQzX": "Managed identity", "MLckJz": "Required. A string that contains the start time.", "MLwQFB": "Confirm", + "MMtjUW": "Search logic app", "MOsuw2": "(UTC+10:00) Guam, Port Moresby", "MPPyI6": "(UTC+04:00) Baku", "MQ0ODD": "Validation failed for parameters:", @@ -1046,6 +1127,7 @@ "MXTnCr": "Favorite", "MYgKHu": "Actions", "Mb/Vp8": "Next failed", + "MbFszg": "Function name cannot be empty.", "MbrpMM": "Configure channels for your agent", "Mc6ITJ": "Search", "MdtNYy": "Learn more about authentication", @@ -1059,6 +1141,7 @@ "MoCBWG": "No connections found", "MpULcW": "Connection", "MqZCAn": "Host", + "MrActn": "More", "Mrge1g": "Failed", "MrvtIU": "Running workflow...", "MzVpzv": "Agent log panel", @@ -1070,6 +1153,7 @@ "N7E9hd": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", "N7zEUZ": "Copy", "N8LgJq": "Distinct tracking ID for each split-on instance", + "NBHheX": "Open in file explorer", "NE54Uu": "Copied!", "NE9wXx": "Description must be less than 1024 characters.", "NFgfP4": "item", @@ -1098,22 +1182,27 @@ "NnrHK3": "(UTC+10:00) Vladivostok", "No6CS+": "Enter tenant", "NoXs0l": "Please select an identity", + "NqZqpl": "Custom code folder", "Nr8FbX": "Connections", "NtoWaY": "Value should be less than {max}", "NuG1jf": "Manage your MCP servers here. You can create, edit, and delete servers as needed.", + "NuL2rJ": "New resource group", "NvJDn/": "Tuesday", "NzPnFS": "Example:", "NziQUu": "Provide your workflow image in the Azure dark theme. Upload the image to Azure Blob Storage and share the shared access signature (SAS) link.", "O+3Y9f": "Has failed", "O+8vRv": "Returns a binary representation of a value", + "O/QVI8": "Create unit test", "O0HlIg": "Log", "O0tSvb": "🖊️ Working on it...", "O1tedM": "No errors found.", + "O2IxHR": "Workspace name cannot be empty.", "O4TSC3": "Edit handoff", "O5svoh": "The author or publisher of the template.", "O6VHe0": "Operation warnings", "O7HhyP": "to configure it", "O8Qy7k": "Close panel", + "O96/e9": "Package setup", "OA8qkc": "Cancel", "ODQCKj": "Converts the input to a JSON type value.", "ODWD97": "Edit connection", @@ -1135,6 +1224,7 @@ "OZ42O1": "Must provide value for description.", "OaUode": "Select Update to update this workflow based on this template, no configuration required.", "OdNhwc": "Ungroup", + "OdrYKo": "Your logic app workspace has been created and is ready to use.", "OeSQhS": "Create a new Azure Storage Account", "Oep6va": "Submit", "OgJ9eG": "(UTC+08:00) Taipei", @@ -1144,12 +1234,14 @@ "OjGJ8Y": "Returns the host from a URI", "OkFPf3": "Option 2: Chat Client", "OkGMwC": "Monitoring tab", + "Oku9Tr": "Workspace created successfully!", "Om9qyd": "Transform, parse, and manipulate data", "OnrO5/": "Select a managed identity", "OqpFYV": "Choose workflows", "OrPVcU": "Invalid split on format in ''{splitOn}''.", "Os4sgu": "Select to expand", "Ov7Ckz": "Missing required property ''{missingProperties}'' for authentication type ''{authType}''", + "Oz2Kvh": "Workspace file", "P+7G62": "Heading 3", "P+mWgV": "Pfx", "P/S+q5": "Required. One of the strings to combine into a single string.", @@ -1180,6 +1272,10 @@ "PYku3O": "Shared", "Pa+UkC": "Returns the UTF-8 byte length of an input string", "Pa1oRq": "Failed to validate the logic app details. Please check your selections.", + "PbAuUZ": "Select location", + "Pbl1sh": "Publish", + "Pblshg": "Publishing...", + "Pe0eMX": "The name can't end with a period.", "Peg6ZT": "Setting errors", "PfCJlN": "Workflow functions", "PhBS5+": "Enter name", @@ -1222,9 +1318,11 @@ "QT4IaP": "Filtered!", "QVtqAn": "Description", "QZBPUx": "Returns a single value matching the key name from form-data or form-encoded trigger output", + "QZnOGQ": "Managed connections", "QZrxUk": "String functions", "QbJDi7": "Item", "QctOyt": "Authentication", + "Qd804l": "Project setup", "QdJUaS": "Pencil icon", "QdRn5z": "Not authenticated", "QecW1y": "Loading more...", @@ -1245,6 +1343,7 @@ "QxEQwD": "Status", "R/aiRy": "(UTC+12:00) Coordinated Universal Time+12", "R7VvvJ": "Workflows", + "R7gB/3": "Stateless", "RA4TUH": "Expand action", "RDsZrd": "Template type", "RFjYpH": "Name", @@ -1256,16 +1355,22 @@ "RM72rC": "Server name must be less than 80 characters.", "RO1UJU": "This is a note. You can use **Markdown** to format the text.", "ROC+1+": "Line position", + "RRuHNc": "Workspace name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "RSsqSm": "Server updated successfully", + "RT8KNi": "Save", "RTfra/": "Edit connector", "RWd2ii": "Parameter display name is required for Save.", "RX2Shm": "Required. The string that is split.", "RXZ+9a": "Version", "RXj9tF": "Details", + "RYUUQU": "Code view", "RZNabt": "Create a new workflow from template", + "RZZxs+": "Create logic app workspace from package", "RatwOB": "In-app", + "Rb/a5t": "Workspace from package created successfully!", "RbJNVk": "Schema", "RhH4pF": "{minutes, plural, one {# minute} other {# minutes}}", + "RhTb01": "Run history", "Rj/V1x": "{fileContent} (content)", "RjvpD+": "Insert a new step in {parentSubgraphName}", "RkgScy": "6", @@ -1275,12 +1380,14 @@ "Rq2U5n": "Unrecognized expression ''{expression}''", "RqYHs0": "No resources found", "Rs7j3V": "Required. The expressions that must be true.", + "Rtnnx8": "A folder named \"{name}\" already exists in the selected location.", "RvpHdu": "(UTC+11:00) Solomon Is., New Caledonia", "RxGxr+": "Line number", "RxbkcI": "Unsupported token type: {controls}", "S0N/tx": "Resubmit a workflow run from this action", "S138/4": "Format text as bold. Shortcut: ⌘B", "S2KtbJ": "Select date and time", + "S4Bx4M": "Review your export configuration", "S5kFNK": "Paste your sample data to test the mapping", "SC5XB0": "Create Parameter", "SCCE6s": "Password", @@ -1303,6 +1410,7 @@ "SbCUKw": "Outputs should not be provided when status is \"Failed\"", "SbHBIZ": "No runs found", "SbIePr": "Human in the loop", + "Sc6upt": ".NET Version", "Se0HAU": "Changing the trigger name updates the callback URL when you save the workflow.", "SgiTAh": "Please enter your input", "Sh10cw": "Save", @@ -1310,6 +1418,9 @@ "Smo/VO": "Enter a name", "Sr8PcK": "No operations found", "SvQyvs": "Done", + "Svg1ng": "Saving...", + "SwDrft": "Switch to draft version", + "SwPbld": "Switch to published version", "SwWaHa": "Enter a valid run identifier", "Sy4cFC": "Concurrency control", "Sy5Gcz": "Using a chat message trigger means your workflow will be conversational, which doesn't support actions running after an agent. Delete any actions running after an agent to use this trigger.", @@ -1317,12 +1428,14 @@ "Sz8KN3": "Test", "T/7b2y": "Duration", "T1q9LE": "Name", + "T2zwDL": "Custom code configuration", "T7aD3v": "Secondary key", "TBagKD": "No operation selected", "TEN+cR": "Give feedback", "TEYRnv": "Save + unpublish template", "TG23yI": "Logic app created", "TIiSqe": "Switch to v2", + "TJ2HKX": "Package path does not exist", "TNEttQ": "Friday", "TO7qos": "Returns the start of the month of a string timestamp", "TQd85R": "Edit in basic mode", @@ -1354,6 +1467,7 @@ "TnwRGo": "Connections included in this template", "To3RNy": "Workflow parameter errors", "TpWNAE": "Select a parameter", + "Tpkwuu": "File a bug", "Ts5Pzr": "Note", "TsJbGH": "Disconnected", "Ttc0SM": "Heading 1", @@ -1367,6 +1481,7 @@ "Tzq5ot": "Search for an action", "U086AA": "Target schema element", "U0I10w": "(UTC+05:00) Ekaterinburg", + "U16F4a": "Package path", "U1Tti2": "Trigger", "U2juKb": "Filter actions", "U3iWVd": "Generates an array of integers starting from a certain number", @@ -1376,12 +1491,14 @@ "U82s8v": "Select a subscription, resource group and Logic App instance to find the workflows you want to convert to templates. Your changes apply only to this template and won't affect the original workflows.", "U9SHxw": "Code", "UCNM4L": "To reference a parameter, use the dynamic content list.", + "UCYBt4": "Use left and right arrow keys to navigate between commands", "UD330h": "Copy action", "UHCVNK": "Replaces a string with a given string", "UJGUnc": "Off", "UJho0j": "(Optional) Password for PFX file", "UMPuUJ": "Delete {expressionValue}", "UNXQDI": "Loading API Management service instances...", + "UOUMSB": "Deploy managed connections", "UOv1L6": "The name of the Logic App", "UPk1dq": "Provide details for the destination Standard logic app resource.", "UPsZSw": "The entered identity is not associated with this logic app.", @@ -1416,6 +1533,7 @@ "Uxckds": "Suggested flow", "V+/c21": "General", "V0ZbQO": "Show less", + "V3DWT4": "Workflow name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "V3vpin": "''{parameterName}'' is no longer present in the operation schema. It should be removed before the workflow is re-saved.", "V5f3ha": "Week", "V7NT3q": "Connected", @@ -1429,11 +1547,15 @@ "VIU+CM": "Features", "VKAk5g": "The provided workflow run name is not valid.", "VL9wOu": "Must provide value for parameter.", + "VLHQ4L": "Use the traditional .NET Framework for legacy compatibility", "VLc3FV": "Source schema", "VLn4Dz": "Add images of this workflow as it appears in the designer in the original logic app. Take a screenshot in both light-mode and dar-mode versions. Upload files to Azure Blob Storage, then create a shared access signature (SAS) URL for each.", "VOk0Eh": "Request", + "VPcN7p": "Enter the logic app name and select the type of logic app to create", "VPh9Jo": "(UTC+06:00) Novosibirsk", "VQ1BxQ": "Optional parameters", + "VSeZW4": "Project path", + "VT6UoA": "Workspace parent folder path cannot be empty.", "VTMWCv": "Chat message", "VUH9aj": "23", "VUN/Gj": "Error loading tools. Please try again.", @@ -1448,11 +1570,14 @@ "VatSVE": "Consumption", "VbMYd8": "Triggers tell your app when to start running. Each workflow needs at least one trigger.", "VchR9d": "Headers", + "Vecdzb": "Logic app details", + "VfUtlo": "Save unit test definition", "Vfa/1M": "Set how long this key should be valid. This key will be shown only once and cannot be retrieved later. The key is not stored on Azure, save it securely. You will need to regenerate the key if lost.", "VgIOTh": "Provide the details about your MCP server.", "Vi5TIV": "No warnings found.", "ViOMjt": "Use the chat client to talk to your agent.", "VjvWve": "Microsoft Authored", + "Vk1TBl": "Function folder name cannot be empty.", "VlvlX1": "Certificate", "VptXzY": "Use \"{value}\" as a custom value", "Vq9q5J": "Built-in", @@ -1488,9 +1613,12 @@ "WbPW+Q": "No tasks", "WcnIF8": "Remove", "WeF48H": "Azure API Management Service APIs", + "Wf1Tab": "Workflow", "WgChTm": "(Custom value)", "WgJsL1": "Loading", + "WgY5vK": "Workspace name", "WgoP7R": "Returns the result from multiplying the two numbers", + "WkfjIG": "Resubmit", "WkqAOm": "Learn more about creating a new Azure OpenAI resource", "Wmc3Ux": "Run draft", "WnHWrD": "Workflow display name (title) is required.", @@ -1501,10 +1629,13 @@ "WtieWd": "Next task", "Wvnl/V": "Delete the static result configuration", "WvvJYw": "Actions", + "Wwf+Ju": "Status", "WxJJcQ": "Not connected", + "Wxan/5": "Create project", "WxcmZr": "This action has testing configured.", "WyH1wr": "Searching for results...", "X/7je+": "Minute", + "X/QTGw": "Workspace parent folder path", "X02GGK": "Tags", "X1TOAH": "Enter operation description", "X2idLs": "(UTC-03:00) Montevideo", @@ -1515,6 +1646,7 @@ "X8pCBI": "Run draft with payload", "XCuJUu": "Provide the purpose for this task.", "XCunbR": "Shorthand for actions('actionName').outputs", + "XEetXV": "Select .NET version", "XEuptL": "Combines any number of strings together", "XFFpu/": "Retry", "XFzzaw": "Advanced parameters", @@ -1522,10 +1654,12 @@ "XHQwyJ": "Error executing the API - {url}", "XIUFQz": "Cancel", "XJkBrZ": "Specify one or more expressions that must be true for the trigger to fire", + "XKQ/Lw": "Create new", "XLhNNP": "Add connector", "XOAcjQ": "(UTC+03:00) Nairobi", "XOMMsL": "Save MCP API key information in a secure location, it will not be available later. The old API keys will still work based on their expiration date. If access keys are regenerated that would invalidate all access keys.", "XOzn/3": "Connection name", + "XPBoDw": "Select an option", "XQ4OCV": "(UTC+03:00) Baghdad", "XR4Sd/": "Like", "XR5izH": "Connected", @@ -1539,6 +1673,7 @@ "XY5SKM": "More info", "XZrMGZ": "Content transfer", "XbtEq9": "Count", + "XepQZn": "Review your configuration and create your Logic App workspace.", "Xg1UDw": "Learn more", "Xj/wPS": "Agent chat", "Xj4xwI": "The managed identity used with this operation no longer exists. To continue, select an available identity or change the connection.", @@ -1550,6 +1685,7 @@ "XsCwp/": "At least one workflow must be selected.", "XsgpXt": "Allow both input and output channels", "XsktQ/": "Limit Logic Apps to not include workflow metadata headers in the response.", + "XtVOMn": "Something went wrong", "XtVXqm": "Save changes", "XtuP5e": "Math functions", "XulI0a": "Describe the goal or purpose for this workflow. To edit this description later, open the trigger details pane.", @@ -1583,6 +1719,7 @@ "YRW3/2": "Delete workflows", "YRk271": "Authentication", "YTJ78g": "Learn how to assign it", + "YTj0Xv": "Autonomous agents (Preview)", "YUbSFS": "Yes/No", "YV6qd0": "Agent activity", "YW1rx0": "Add new", @@ -1599,6 +1736,7 @@ "Ybzoim": "Required. The name of the action that has the values you want.", "YdQw4/": "Format text as italic. Shortcut: ⌘I", "YgU88A": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", + "YgfV/C": "Status", "YiOybp": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", "YjU9OY": "See more ({count})", "YlesUQ": "Your map is in perfect condition", @@ -1614,6 +1752,7 @@ "Yuu5CD": "Zoom out", "Yuxprm": "Welcome to the workflow assistant!", "YxH2JT": "When a message is received", + "Yyy/Zl": "Package path", "Yz9o1k": "Not connected.", "Yzw97z": "Choose a connection to use for this MCP server", "Z1p3Yh": "An error occurred while updating authentication settings. Error details: {errorMessage}", @@ -1630,11 +1769,14 @@ "ZHmzsA": "Modified", "ZIEl3/": "Copy your agent api key", "ZME5hh": "Returns the day of month component of a string timestamp", + "ZSRPr2": "Function folder name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", + "ZU4Gis": "Instance selection", "ZUCTVP": "Paste an action", "ZUaz3Y": "Shorthand for trigger().outputs.body", "ZWnmOv": "Next", "ZXc10N": "Add group", "ZXha+w": "Error message", + "ZY5ygq": "Function namespace cannot be empty.", "ZYSWRU": "Close", "Za33CQ": "Provide your workflow image in the Azure light theme. Upload the image to Azure Blob Storage and share the shared access signature (SAS) link.", "ZaIeDG": "Required. The value the string may start with.", @@ -1648,6 +1790,7 @@ "ZkjTbp": "Learn more about dynamic content.", "ZmAy4U": "Manually allow tools to this MCP server", "ZmSjQV": "Learn how to set up a logic app", + "ZtLSVc": "Search", "ZyDq4/": "Show a different suggestion", "ZyntX1": "Add a description", "_++ZVe/.comment": "Title for testing section", @@ -1656,6 +1799,7 @@ "_+3rROX.comment": "Label in the chatbot header stating that the users information is protected in this chatbot", "_+64+eE.comment": "Label for the cancel button", "_+7+u4y.comment": "Title for operations error message", + "_+AFyLk.comment": "Finish button", "_+DmIHG.comment": "Label for built-in connectors", "_+EREVh.comment": "Column name for workflow name", "_+FcXe9.comment": "The status message to show in monitoring view.", @@ -1666,6 +1810,7 @@ "_+M72+a.comment": "Button text for whole overview", "_+M7bC6.comment": "The status message to show succeeeded retries in monitoring view.. This refers to the succeeded status of a previous action.", "_+Oshid.comment": "Type dropdown placeholder", + "_+P+nuy.comment": "Conversational agents workflow description", "_+QFwA1.comment": "Label for key-based authentication method", "_+QUFXQ.comment": "Label for the ok button", "_+R82zZ.comment": "Text displayed when no options match the search query", @@ -1680,6 +1825,7 @@ "_+gBLFF.comment": "Title for the toaster after saving template.", "_+iPg27.comment": "Confirmation text for delete button", "_+ijo/2.comment": "Token picker for 'Paste last used expression'", + "_+itf/D.comment": "Save button", "_+l5XmZ.comment": "description of maximum waiting runs setting", "_+mAJR3.comment": "Time zone value ", "_+mNJQl.comment": "Create new logic app link", @@ -1688,8 +1834,10 @@ "_+oelX4.comment": "Required string parameter to check if is integer using isInt function", "_+powfX.comment": "Label for timezone", "_+tCJ2g.comment": "Value for the public access field when enabled", + "_+u2tgz.comment": "Create workspace button", "_+xXHdp.comment": "No outputs text", "_+yTsXQ.comment": "Empty state title for workflows list", + "_+zIx77.comment": "Selection description", "_/21RuK.comment": "Error message when the workflow name is invalid regex.", "_/2V8bQ.comment": "Timed out run", "_/4vNBB.comment": "Placeholder text for logic app search", @@ -1712,6 +1860,8 @@ "_/csbOB.comment": "error message for invalid retry count", "_/doURb.comment": "Label for description of custom array Function", "_/km5eO.comment": "Time zone value ", + "_/kz09u.comment": "Function folder name same as logic app name text", + "_/ld6GS.comment": "Logic app type label", "_/mjH84.comment": "Show outputs text", "_/n13VL.comment": "Properties text", "_/qCaDo.comment": "Description for the required field", @@ -1730,6 +1880,7 @@ "_00xlpa.comment": "Filter by Shared category of connectors", "_03RO5d.comment": "Edit Button Tooltip Text", "_04AwK7.comment": "Dynamic call error message. Do not remove the double single quotes around the placeholder texts, as it is needed to wrap the placeholder text in single quotes.", + "_06T/X8.comment": "Export custom API actions label", "_06zKZg.comment": "Time zone value ", "_07ZsoY.comment": "Label for description of custom startOfHour Function", "_07oZoX.comment": "Time zone value ", @@ -1744,6 +1895,7 @@ "_0FzNJV.comment": "Required base64 string parameter to be converted to binary using base64ToBinary function", "_0G6CfM.comment": "Deployment model resource label", "_0GT0SI.comment": "Cancel button label", + "_0H5p4k.comment": "Select workflow type placeholder", "_0IRUjM.comment": "Breadcrumb message shown in overview", "_0JIDLK.comment": "Description for the combine variable dialog.", "_0JTHTZ.comment": "Button text to show run menu", @@ -1763,10 +1915,13 @@ "_0l+F9w.comment": "Label for the MCP server description field", "_0m0zNa.comment": "The label for the connector type", "_0m2Y1/.comment": "The title of the value field in the static result parseJson action", + "_0n/bOI.comment": "Resource group name - invalid characters error", "_0oebOm.comment": "Outputs text", "_0p+pJq.comment": "Label for description of custom mod Function", "_0qV0Qe.comment": "Required text parameter to apply indexOf function on", + "_0rJ6RJ.comment": "Shimmer loading label", "_0sbIhI.comment": "The text for the production environment", + "_0uiwQZ.comment": "Complete export title", "_0uj1Li.comment": "Label for description of custom decodeDataUri Function", "_0upuCv.comment": "Frequency value ", "_0uuxAX.comment": "Delete mapping", @@ -1777,6 +1932,7 @@ "_0xLWzG.comment": "Text for invalid operation title name", "_0y5eia.comment": "Label for commands in panel header", "_0zMOIe.comment": "The label for the connector name", + "_1+JO/G.comment": "Designer view label", "_1+Z8n9.comment": "Required dataUri string parameter to be converted using dataUriToString function", "_109OPL.comment": "Label for description of custom uriPort Function", "_10b+jL.comment": "Label for step 2 in wizard indicator", @@ -1800,6 +1956,7 @@ "_1Xke9D.comment": "aria label to open functions drawer", "_1YUi9I.comment": "Text for button to add an agent", "_1ZrOYn.comment": "AI Foundry Project", + "_1b4sPR.comment": "Review and create step label", "_1dlfUe.comment": "Description of what Actions are, on a tooltip about Actions", "_1eKQwo.comment": "Time zone value ", "_1f7LG4.comment": "title for retry policy fixed interval setting", @@ -1808,6 +1965,7 @@ "_1hPZqe.comment": "description of retry count setting", "_1htSs7.comment": "label when setting is off", "_1i3RKp.comment": "Label for template published for testing", + "_1jaOSf.comment": "Logic app name same as function folder name text", "_1jf3Dq.comment": "Sort by dropdown option of Z to A descending", "_1jhzOM.comment": "Required object parameter to compare to in greater function", "_1lLI6H.comment": "Error message when the workflow description is empty", @@ -1818,11 +1976,13 @@ "_1tmN2o.comment": "Workflow version text", "_1uGBLP.comment": "Hour of the day", "_1x5IuY.comment": "No items to select text", + "_1xa4kY.comment": "No details message", "_20oqsp.comment": "Add the current node and its children to the map", "_23fENy.comment": "Label for description of custom base64ToBinary Function", "_23szE+.comment": "Required string parameter to be converted using dataUri function", "_23uZn1.comment": "Button text for global search", "_27Nhhv.comment": "Label for API selection", + "_29Wg4P.comment": "Select all label", "_2CGfiU.comment": "The description for button text of downloading the template", "_2CXCOt.comment": "Placeholder for input to load a schema file", "_2DmMb7.comment": "Section label for chat availability", @@ -1841,6 +2001,7 @@ "_2On4Xu.comment": "An accessibility label that describes the code view tab", "_2P1Ap0.comment": "Label for the existing resource status", "_2TMGk7.comment": "Managed Identity Label", + "_2XH9oW.comment": "Back button", "_2ZfzaY.comment": "Select existing option", "_2aC0Xh.comment": "Status message displayed when the workflow is being saved", "_2adqQ4.comment": "title for retry maximum interval setting", @@ -1862,6 +2023,7 @@ "_2xQWRt.comment": "Search Functions", "_2y24a/.comment": "Save button label", "_2yCDJd.comment": "Tooltip for disabled test button for the os", + "_2yO/M6.comment": "Export connection description", "_2z5HGT.comment": "Optional locale parameter to check locale code in isFloat function", "_3+TQMa.comment": "Text to show when the connection is loading", "_33+WHG.comment": "Column header text for identifier", @@ -1876,6 +2038,7 @@ "_3DEbi3.comment": "Title for the MCP generate keys panel", "_3ERi+E.comment": "Title for terms of service iframe.", "_3GINhd.comment": "Heading for a tooltip explaining Triggers", + "_3H+PIM.comment": "Overview page title", "_3Hl3r2.comment": "Published by label", "_3JEC7U.comment": "The title of the error type field in the static result parseJson action", "_3KPLpx.comment": "Message informing that mapping to child elements need to be deleted prior to selected one.", @@ -1888,6 +2051,7 @@ "_3QXY3z.comment": "Message bar warning about replacing existing schema", "_3RoD4h.comment": "Label for description of custom reverse Function", "_3ST5oT.comment": "Title for the toaster after adding workflows.", + "_3Wcqsy.comment": "Next button", "_3X4FHS.comment": "Button to choose data type of the dynamically added parameter", "_3Xf/4S.comment": "Swagger endpoint input label", "_3Y8a6G.comment": "Error message to show when required parameters are not set or invalid", @@ -1928,6 +2092,7 @@ "_4D7H4R.comment": "Recurrence schedule description on days of week at times", "_4E69aV.comment": "label to set background color", "_4Ekn9t.comment": "Undo", + "_4IV3/7.comment": "Step indicator text", "_4LQwvg.comment": "Button text for cancelling deleting workflows", "_4Levd5.comment": "Chatbot input start of sentence for creating a flow that the user should complete. Trailing space is intentional.", "_4Q7WzU.comment": "Aria label description for add button", @@ -1947,11 +2112,13 @@ "_4iyEAY.comment": "Chatbot card telling user that the workflow is being saved", "_4izAMi.comment": "Placeholder for output value field", "_4mxRH9.comment": "Filter by All category of connectors", + "_4rIMVu.comment": "Additional steps label", "_4rVVyW.comment": "The tab label for the retry history tab on the operation panel", "_4rdY7D.comment": "Run ID filter label", "_4vcnOA.comment": "Label for description of custom min Function", "_4vmGh0.comment": "Label text for retry service request ID", "_4wjJs0.comment": "Hour of the day", + "_4y9tHO.comment": "Keyboard navigation hint", "_4yDTpq.comment": "Label for the copying the endpoint URL button", "_4yQ6LA.comment": "Text for loading connections", "_5+P3ef.comment": "Time zone value ", @@ -1965,6 +2132,7 @@ "_5E66mK.comment": "Tooltip for remove parameter button", "_5G/VKd.comment": "Message displayed when there are no parameters configured for the operation", "_5GHXCP.comment": "Label for select all checkbox", + "_5GWxTc.comment": "Function workspace label", "_5HY9F4.comment": "Label for the storage account field", "_5J9jne.comment": "Chatbot feedback card link asking what user liked about the feature", "_5L2vIX.comment": "Label for subscription id field", @@ -2005,11 +2173,14 @@ "_63CC7M.comment": "The text for the loading inputs error.", "_63fQWE.comment": "Button tooltip to add all advanced parameters", "_6776lH.comment": "Processing message in the chatbot", + "_67FI5P.comment": "ISE divider label", "_68UJHa.comment": "The aria label for the resources table", + "_69+CIW.comment": "View workflow button text", "_6D5fAm.comment": "Tag for trigger operations", "_6DZp5H.comment": "Placeholder text for search connectors", "_6DsS1M.comment": "Label for the key duration input field", "_6ELsbA.comment": "The tab label for the monitoring profile tab on the configure template wizard", + "_6HztdX.comment": "Summary step title", "_6JfSVt.comment": "Button text for canceling MCP Server creation", "_6LJZ7n.comment": "title for retry policy setting", "_6OCUKm.comment": "Tab label for configure tab in clone to standard experience", @@ -2039,6 +2210,7 @@ "_6qPgjN.comment": "The label for the tool description column", "_6qkBwz.comment": "Required number parameter to be multiplied in mul function", "_6rJ+Fj.comment": "Title for graph node", + "_6sEsIN.comment": "Conversational agent workflow option", "_6sGj3J.comment": "Chatbot create a flow text", "_6sSPNb.comment": "Alt text on action/trigger card when there is a connector name but no operation name", "_6u6CS+.comment": "Required text parameter to search nthIndexOf function with", @@ -2050,6 +2222,7 @@ "_6yFUar.comment": "Error message for when status is succeded and outputs are not provided", "_6ylGHb.comment": "description of concurrency setting", "_7+ZxCU.comment": "Error message for invalid Auth in authentication editor", + "_70cHmm.comment": "OK button", "_73iM9+.comment": "Header to update source schema", "_74e2xB.comment": "General description for creating a new connection.", "_75zXUl.comment": "Button text for closing the panel", @@ -2076,6 +2249,7 @@ "_7ZR1xr.comment": "Text on example action node", "_7aJqIH.comment": "Optional locale parameter to apply formatNumber function with", "_7adnmH.comment": "Button to navigate back to the template library", + "_7bhWPe.comment": "Function folder name exists in workspace text", "_7cPLnJ.comment": "Stop chat message", "_7fZkLA.comment": "Label for toggle to disable static result", "_7gUE8h.comment": "Warning description of what undoing operation will do to the workflow", @@ -2121,7 +2295,9 @@ "_8U/Kek.comment": "Retry button text", "_8U0KPg.comment": "Required string parameter to be encoded using uriComponent function", "_8UfIAk.comment": "Secret Placeholder Text", + "_8VlCa0.comment": "Discard button", "_8Y5xpK.comment": "Day of the week", + "_8YVpN7.comment": "Logic app creation success message", "_8ZfbyZ.comment": "Time zone value ", "_8cgUrz.comment": "Button text for closing MCP Server creation", "_8d3lmL.comment": "The type for storage account resource", @@ -2133,6 +2309,7 @@ "_8iX8Yu.comment": "Button text for creating a new server", "_8j+a0n.comment": "description of asynchronous pattern setting", "_8lZGy+.comment": "Production section description in info dialog", + "_8m5+M9.comment": "Empty subscription message", "_8mDG0V.comment": "Error message to show when there are invalid connections in the nodes.", "_8nnC5o.comment": "Description for workflow display name field", "_8opHew.comment": "Title for the combine variable dialog. This is a preview feature.", @@ -2186,15 +2363,18 @@ "_9klmbJ.comment": "Button text for saving changes for parameter in the customize parameter panel", "_9lP2zW.comment": "Placeholder text for tool selection dropdown", "_9mjZIW.comment": "Text for button to delete a handoff", + "_9nAAU/.comment": "Connections button", "_9sRgCm.comment": "Content for the toaster after updating a server", "_9u/Ae3.comment": "Label for description of custom and Function", "_9uv02q.comment": "description for client tracking id setting", "_9wX3u9.comment": "Chatbot feedback card title", "_9yLPwo.comment": "Message instructing to follow below links for more detailed information", "_9yq5lv.comment": "Dynamic connection checkbox text for consumption SKU", + "_9z/8Jn.comment": "Selected apps label", "_A0Kk9V.comment": "Tab label for configure tab in clone to standard experience", "_A5/IqS.comment": "Run identifier text", "_A5Ferh.comment": "Message on removing source node", + "_A7wxg0.comment": "Validating folder button", "_A8T1X/.comment": "Error validation message for URIs with whitespace", "_AB+yPQ.comment": "Header for popup containing connection details", "_AEguAy.comment": "Error message on expression evaluation", @@ -2205,6 +2385,7 @@ "_APKdYG.comment": "Error validation message for doubles", "_APfopx.comment": "Description for the authentication section", "_AQ7Zxc.comment": "Label for description of custom nthIndexOf Function", + "_AQqOMB.comment": "Workflow name label", "_Ae8T94.comment": "Button to see issues", "_Af+Ve0.comment": "Time zone value ", "_AfJvdR.comment": "Title for the MCP generate keys details section", @@ -2216,10 +2397,16 @@ "_AlWFOS.comment": "Collapse button title", "_Alq4/3.comment": "Resource group title", "_AmSRsf.comment": "Name input placeholder", + "_AmlQmq.comment": "Create unit test from run button", "_AnX5yC.comment": "Username Label Display Name", "_Ap0SOB.comment": "Body text for informing users this action is deleting selected workflows and unpublishing the template", "_ArTh0/.comment": "Required base64 string parameter to be converted using base64 function", + "_As1Hou.comment": "Autosaved one hour ago text", + "_AsHour.comment": "Autosaved multiple hours ago text", + "_AsMins.comment": "Autosaved a few minutes ago text", + "_AsSeco.comment": "Autosaved a few seconds ago text", "_Aui3Mq.comment": "Alt text on action card including the operation name", + "_Av2j9p.comment": "Advanced options label", "_Az0QvG.comment": "Option text for table column type in table editor", "_B/JzwK.comment": "This is the number of actions to be completed in a group", "_B/gCWM.comment": "The title of the error property in the static result schema", @@ -2252,6 +2439,8 @@ "_BYrP8F.comment": "Placeholder title for a newly inserted Number parameter", "_BYsNzz.comment": "Title for the toaster after unpublishing template.", "_Bewmet.comment": "Title for array dropdown input setting", + "_BfGFkk.comment": "Test icon aria label", + "_Bft/H3.comment": "Autonomous agents workflow description", "_BjrVzW.comment": "Label for choosing resource group", "_Bkc/+3.comment": "error message for invalid minimum retry interval", "_Bl4Iv0.comment": "Time zone value ", @@ -2273,6 +2462,7 @@ "_C3taj3.comment": "Description for using existing workflows as tools", "_C4NQ1J.comment": "description for pagination setting", "_CAsrZ8.comment": "Manual trigger category", + "_CBcl2V.comment": "Logic app name empty text", "_CBzSJo.comment": "Short label to represent when a condition is met.", "_CCpPpu.comment": "Title for the parameters section", "_CDET7A.comment": "Description for the resources section", @@ -2287,20 +2477,24 @@ "_Cb8pv0.comment": "Time zone value ", "_Ccbm2Y.comment": "Multi-select list of options", "_CcuFEN.comment": "Label to report error", + "_Cd1Tab.comment": "Code view tab label", "_CdyJ6f.comment": "Trigger belongs to Recurrence category", "_CeF40t.comment": "Label for Authentication Type dropdown", "_CemHmO.comment": "Text displayed when the monitoring timeline is loading.", + "_CfXSvL.comment": "Standard logic app description", "_ChhFFp.comment": "Label for the close button", "_Ci41Od.comment": "Time zone value ", "_Ciol6I.comment": "Output", "_Cj3/LJ.comment": "Error message when the workflow parameter name is empty.", "_ClZW2r.comment": "Parameter Field Value Title", "_ClowJ/.comment": "Label for multi auth options", + "_CnRu/U.comment": "Package setup section title", "_Cnymq/.comment": "The dscription for review tab", "_Cosbik.comment": "The tab label for the create connection tab on the connector panel", "_CqN0oM.comment": "Panel header title for customizing parameters", "_CrlPhs.comment": "Button text for editing a server", "_CvoqQ6.comment": "Placeholder description for a newly inserted Date parameter", + "_CwAnpR.comment": "Rules engine configuration step title", "_Cx7E/L.comment": "Button text while creating the logic app.", "_Cy0pyB.comment": "Time zone value ", "_Cy4+KL.comment": "Label for redoing a change which was undone in a text input", @@ -2320,6 +2514,7 @@ "_DEu7oK.comment": "Time zone value ", "_DGMwU4.comment": "Button Label for allowing users to generate from schema", "_DGPz3M.comment": "Copied button text", + "_DHI56r.comment": "Rules Engine location path label", "_DIDL6K.comment": "Subtitle for the MCP server creation panel", "_DIwFTo.comment": "Save map info", "_DJW8RE.comment": "Placeholder for dropdown", @@ -2341,13 +2536,17 @@ "_DabKOm.comment": "Label for the API keys", "_DbxZhS.comment": "Remove the drop-down list of options for the text input dynamic parameter", "_DcJBUx.comment": "Type of the trigger in the template", + "_DdAlJ9.comment": "Function name validation message text", "_DeM/yz.comment": "Start time column header", + "_DfSvAt.comment": "Draft autosaved tooltip showing exact time", "_DfXxoX.comment": "Select an existing connection or create a new one.", "_Dhu3IS.comment": "Label to show the mini-map", "_DjbVKU.comment": "Dropdown text for OAuth connection", "_Dm0zAO.comment": "description of request options duration setting", "_DoX1Qb.comment": "Button text for adding custom MCP server", "_DsPDVB.comment": "error message for empty trigger condition", + "_DscDft.comment": "Discard draft and revert to published menu item", + "_DscSsn.comment": "Discard session changes menu item", "_DserLU.comment": "Connecting to agent section header in info dialog", "_DuoHXI.comment": "Button to add a dynamically added parameter", "_DvKGRc.comment": "Link text for authentication setup guide", @@ -2362,6 +2561,7 @@ "_E7jFWU.comment": "Label for choosing logic app instance", "_E8iqLl.comment": "Time zone value ", "_EAAlZ9.comment": "Title for agent node", + "_ECHpxE.comment": "Logic app creation success description", "_ECZC6Y.comment": "Label for description of custom decimal Function", "_EE1vyH.comment": "Title for dialog that appears when changing the kind of a node", "_EFQ56R.comment": "Link to the source code of the template", @@ -2388,6 +2588,7 @@ "_EptZhD.comment": "Error validation message for JSONs", "_EqNkZN.comment": "Label for the Application Insights field", "_EqX3Mi.comment": "Chatbot connections set up description text", + "_ErAsDf.comment": "Draft auto-save error badge text", "_EurkzL.comment": "Placeholder description for a newly inserted Boolean parameter", "_EvgBRe.comment": "Description text for MCP server selection", "_Eyxa6q.comment": "tooltip of maximum waiting runs setting", @@ -2432,6 +2633,7 @@ "_FiyQjU.comment": "Hour of the day", "_Fmt/E7.comment": "This is the number of tools to be completed in a group", "_FoUzpc.comment": "Hint message for display name is required for save.", + "_Fsc9ZE.comment": "Logic app with rules engine description", "_FslNgF.comment": "Column header text for status", "_Fx/6sv.comment": "Header for a search panel that searches for and allows direct navigation to a specific node", "_FxQ2Ts.comment": "Time zone value ", @@ -2503,8 +2705,10 @@ "_Heod+8.comment": "Title text for browse/search experience", "_HfinO2.comment": "Label for editor toggle button when in collapsed mode", "_HfmDk9.comment": "Chatbot prompt to edit the workflow", + "_Hggv59.comment": "Project setup step label", "_HkIZ7P.comment": "The label for the tool column", "_HmcHoE.comment": "Error message when manifest fails to load", + "_HuWIbw.comment": "Package warning message", "_HzS2gJ.comment": "Error message for when putting token in authentication property", "_I+85NV.comment": "Button label for submitting a workflow to rerun from this action", "_I1CYNA.comment": "Error message when having an invalid authentication property", @@ -2514,7 +2718,9 @@ "_I3mifR.comment": "Skipped run", "_I41vZ/.comment": "Time zone value ", "_I8lbqy.comment": "Title for the delete server confirmation", + "_I9O2NQ.comment": "Function name label", "_IA+Ogm.comment": "Hour of the day", + "_IACzZz.comment": "Validation step title", "_IAmvpa.comment": "Time zone value ", "_IBFBR2.comment": "Remove loop for the connection", "_IG4XXf.comment": "Label for workflow state", @@ -2527,6 +2733,7 @@ "_IOQVnL.comment": "Hint message for workflow display name is required for save.", "_IPwWgu.comment": "Time zone value ", "_IQyOth.comment": "Section 1 of text for including dynamic content section", + "_IRW6v7.comment": "Integration account source label", "_IS4vNX.comment": "Time zone value ", "_ISaPr+.comment": "Description for Workflow Parameters Part 1 for Legacy Parameters mode.", "_IUbVFR.comment": "Placeholder text for search templates", @@ -2535,12 +2742,14 @@ "_Iasy6i.comment": "No channel selected.", "_IdOhPY.comment": "This is an a11y message meant to help screen reader users figure out how to insert dynamic data", "_If+p6C.comment": "Time zone value ", + "_Ih40n5.comment": "Custom code folder name input label", "_IhVOVF.comment": "Text for the learn more link", "_IjoW0x.comment": "Title for dynamic inputs error message", "_IjvmvR.comment": "Dismiss button label for trigger info", "_IlyNs0.comment": "Message to show when exactly 1 item is present in the overflow menu", "_Iov0/J.comment": "Label for the MCP server name field", "_IpD27y.comment": "Label field for logic app instance", + "_IpUfon.comment": "Location label", "_IqNEui.comment": "tooltip for download chunk size setting", "_IsVhkH.comment": "No properties text", "_IsbbsG.comment": "Chatbot input start of sentence for creating a flow that the user should complete. Trailing space is intentional.", @@ -2560,6 +2769,7 @@ "_J9wWry.comment": "Heading section for Parameter tokens", "_JAIV0h.comment": "Message when failing to save due to errors", "_JASGDy.comment": "Loading API Management accounts...", + "_JBRP7/.comment": "Chat button tooltip content", "_JBa1qe.comment": "The label for the workflow display name", "_JCmWdL.comment": "Title for the default settings section", "_JErLDT.comment": "Delete label", @@ -2570,8 +2780,10 @@ "_JKZpcd.comment": "Chatbot card telling user that the AI response is being canceled", "_JKfEGS.comment": "Button to add a new connection", "_JNQHws.comment": "Required string parameter that contains the time", + "_JO3aZv.comment": "Selection title", "_JQBEOg.comment": "The tab label for the monitoring review and create tab on the create workflow panel", "_JRsTtp.comment": "Title for the monitoring timeline component.", + "_JS4ajl.comment": "Project setup step description", "_JSbDfI.comment": "Expand text", "_JSfWJ0.comment": "Required parameter to be converted using bool function", "_JU3q4H.comment": "The tab label for review tab for quick app create panel", @@ -2581,6 +2793,7 @@ "_JWl/LD.comment": "Label to add item to array editor", "_JYpccF.comment": "Title for the app service plan name input", "_Jaz3EC.comment": "Label for description of custom convertTimeZone Function", + "_JeAp3Z.comment": "Logic app with custom code option", "_Ji6663.comment": "Label for description of custom contains Function", "_JiCr7D.comment": "Sort option A to Z", "_Jil/Wa.comment": "Text to explain that there are invalid settings for this node", @@ -2589,7 +2802,9 @@ "_Jk2B0i.comment": "Title for the prerequisites section in the template overview tab", "_JnlcZQ.comment": "Label text for workflow name", "_Jq2Y/o.comment": "Required format parameter to apply formatNumber function with", + "_JqiwYx.comment": "Review and create step title", "_JrAqnE.comment": "Tooltip for Run with payload button", + "_JrDiMJ.comment": "Package path empty validation message", "_JsUu6b.comment": "Label for workflow template which contains single workflow", "_Jx88eq.comment": "Title for the MCP Server workflows section", "_JyYLq1.comment": "Aria label for a button that zooms out on the workflow", @@ -2602,6 +2817,7 @@ "_K9ORYo.comment": "The title of the schema id field in the static result parseJson action", "_KBaGkS.comment": "Button text to take the user to the 'change connection' component while in xrm connection reference mode", "_KGvXUc.comment": "Button text for updating the MCP Server", + "_KJLHaU.comment": "Missing value indicator", "_KKBCUX.comment": "Title shown when there is an error in the template", "_KO2eUv.comment": "Label text for connectors filter", "_KV+9pl.comment": "Tooltip for Run button when published workflow is shown", @@ -2619,6 +2835,7 @@ "_KnjcUV.comment": "The status message to show in monitoring view.", "_KqJ14/.comment": "Edit scehma", "_KsoxUQ.comment": "Label for the access keys", + "_KtGlzI.comment": "Resource group existing name error", "_Kv+Pa3.comment": "Label text for testing publish state", "_KwGA+K.comment": "Select a Function App resource", "_KwYMAL.comment": "Refresh button title", @@ -2631,11 +2848,13 @@ "_LBlM+D.comment": "The status message to show not specified in monitoring view.", "_LCRHQ9.comment": "Time zone value ", "_LElaX3.comment": "Text for button that shows the next flow suggestion", + "_LG7hSo.comment": "Unit test assertions button", "_LGUiVk.comment": "Label for the public access field", "_LLJrOT.comment": "Label for the operation description field", "_LMB8am.comment": "Button text to show a connection is being created", "_LNA+DZ.comment": "Label for parameter to use model input type", "_LPzAHC.comment": "Loading indicator message showing that the UX is getting the next list of files", + "_LQG4qS.comment": "Workflow configuration step title", "_LR/3Lr.comment": "Configure", "_LRAhSA.comment": "Description of invoker connection setting", "_LS8rfZ.comment": "Label for description of custom uriScheme Function", @@ -2643,6 +2862,7 @@ "_LULjJn.comment": "Description for parameter description field", "_LV3k48.comment": "Time zone value ", "_LX3q/+.comment": "Status message displayed when the draft workflow is being run", + "_LZYI4N.comment": "Select workflow label", "_LZm3ze.comment": "Text for button to add a parallel branch", "_LaFlFh.comment": "Chatbot removed operation sentence format", "_Ld62T8.comment": "Button text for deleting selected workflows", @@ -2650,6 +2870,7 @@ "_LdITnG.comment": "Time zone value ", "_LeR+TX.comment": "Aria label for a button that zooms in on the workflow", "_Lft/is.comment": "Button to add a new connection", + "_LgCmeY.comment": "Specified path does not exist or is not accessible message text", "_Lnqh6h.comment": "Command for bold text for non-mac users", "_LoGUT3.comment": "Label for description of custom item Function", "_LpPNAD.comment": "label to add a condition", @@ -2658,6 +2879,7 @@ "_LuIkbo.comment": "This is the text that is displayed when the user is expanding collapsed actions", "_Lub7NN.comment": "Required expression parameters to apply or function", "_LvLksz.comment": "Loading outputs text", + "_Lx7xjr.comment": "Export connection label", "_Lx8HRl.comment": "Time zone value ", "_LzgX0P.comment": "Placeholder text for resource search", "_M+nnq6.comment": "Label for the failed status", @@ -2677,6 +2899,7 @@ "_MAX7xS.comment": "Label for show more text.", "_MCzWDc.comment": "Recurrence preview title", "_MDbmMw.comment": "Required collection parameters to check intersection function on", + "_MDmYah.comment": "Filter resource groups label", "_MFg+49.comment": "Loading text for the dropdown", "_MGZRu4.comment": "Chatbot prompt to add action", "_MGq28G.comment": "Column name for trigger type", @@ -2687,6 +2910,7 @@ "_MLCQzX.comment": "Managed Identity Label Display Name", "_MLckJz.comment": "Required string parameter for start time", "_MLwQFB.comment": "Confirm button label", + "_MMtjUW.comment": "Search logic app placeholder", "_MOsuw2.comment": "Time zone value ", "_MPPyI6.comment": "Time zone value ", "_MQ0ODD.comment": "The error title for the parameters tab", @@ -2697,6 +2921,7 @@ "_MXTnCr.comment": "Favorite button text", "_MYgKHu.comment": "Heading for a tooltip explaining Actions", "_Mb/Vp8.comment": "Button indicating to go to the next page with failed options", + "_MbFszg.comment": "Function name empty text", "_MbrpMM.comment": "Channels tab description", "_Mc6ITJ.comment": "Placeholder text to search token picker", "_MdtNYy.comment": "Link text for authentication documentation", @@ -2710,6 +2935,7 @@ "_MoCBWG.comment": "Aria label for empty connections state", "_MpULcW.comment": "Label for step 1 in wizard indicator", "_MqZCAn.comment": "Host", + "_MrActn.comment": "More actions overflow button aria label", "_Mrge1g.comment": "Failed status", "_MrvtIU.comment": "Status message displayed when the workflow is being run", "_MzVpzv.comment": "Agent log panel aria label text", @@ -2721,6 +2947,7 @@ "_N7E9hd.comment": "Time zone value ", "_N7zEUZ.comment": "Chatbot copy button title", "_N8LgJq.comment": "Description of tracking id input field of split on setting", + "_NBHheX.comment": "Open file explorer button", "_NE54Uu.comment": "Copied text", "_NE9wXx.comment": "Error message when the server description exceeds maximum length.", "_NFgfP4.comment": "Label for users to know which item they are on in the dictionary", @@ -2749,22 +2976,27 @@ "_NnrHK3.comment": "Time zone value ", "_No6CS+.comment": "Tenant Placeholder Text", "_NoXs0l.comment": "MSI Identity Placeholder Text", + "_NqZqpl.comment": "Custom code folder label", "_Nr8FbX.comment": "Title for the connections section in the template overview tab", "_NtoWaY.comment": "Error message for number input being lower than max", "_NuG1jf.comment": "Description for the servers section", + "_NuL2rJ.comment": "New resource group label", "_NvJDn/.comment": "Day of the week", "_NzPnFS.comment": "Placeholder text for an example input field", "_NziQUu.comment": "Dark mode image description", "_O+3Y9f.comment": "Failed run", "_O+8vRv.comment": "Label for description of custom binary Function", + "_O/QVI8.comment": "Create unit test button", "_O0HlIg.comment": "Tree view tab title", "_O0tSvb.comment": "Chatbot card telling user that the AI response is being generated", "_O1tedM.comment": "Text to show when no errors exist", + "_O2IxHR.comment": "Workspace name empty text", "_O4TSC3.comment": "Text for button to edit a handoff", "_O5svoh.comment": "Description for By field", "_O6VHe0.comment": "Header for the operation warnings category", "_O7HhyP.comment": "Second part of the Copilot Get Started description for Suggested Flow section", "_O8Qy7k.comment": "Aria label for the close button on the workflow parameters panel", + "_O96/e9.comment": "Package setup step title", "_OA8qkc.comment": "Button text for closing the wizard without saving", "_ODQCKj.comment": "Label for description of custom json Function", "_ODWD97.comment": "The tab label for the selection panel on the connector panel for editing connection", @@ -2786,6 +3018,7 @@ "_OZ42O1.comment": "Error message when the description is empty.", "_OaUode.comment": "Accessibility label for no configuration required", "_OdNhwc.comment": "Ungroup button", + "_OdrYKo.comment": "Workspace creation success description", "_OeSQhS.comment": "Description for the Azure Storage Account create popup", "_Oep6va.comment": "Submit button", "_OgJ9eG.comment": "Time zone value ", @@ -2795,12 +3028,14 @@ "_OjGJ8Y.comment": "Label for description of custom uriHost Function", "_OkFPf3.comment": "Option 2 header in info dialog", "_OkGMwC.comment": "An accessibility label that describes the monitoring tab", + "_Oku9Tr.comment": "Workspace creation success message", "_Om9qyd.comment": "Data transformation category description", "_OnrO5/.comment": "A placeholder for the managed identity dropdown", "_OqpFYV.comment": "The tab label for the monitoring choosing workflows tab on the configure template wizard", "_OrPVcU.comment": "Error message for invalid split on value.", "_Os4sgu.comment": "An accessible label for button to expand setting section", "_Ov7Ckz.comment": "Error message when missing a required authentication property", + "_Oz2Kvh.comment": "Workspace file path label", "_P+7G62.comment": "Heading 3 text", "_P+mWgV.comment": "Client Certificate Pfx Label Display Name", "_P/S+q5.comment": "Required string parameter required to combine strings", @@ -2831,6 +3066,10 @@ "_PYku3O.comment": "The label for shared connector kind", "_Pa+UkC.comment": "Label for description of custom utf8Length Function", "_Pa1oRq.comment": "Error message shown when validation of new logic app details fails", + "_PbAuUZ.comment": "Select location label", + "_Pbl1sh.comment": "Publish workflow button text", + "_Pblshg.comment": "Publishing workflow in progress text", + "_Pe0eMX.comment": "Resource group name ending error", "_Peg6ZT.comment": "Header for the setting errors subsection", "_PfCJlN.comment": "Label for workflow functions", "_PhBS5+.comment": "Assertion field name placeholder", @@ -2873,9 +3112,11 @@ "_QT4IaP.comment": "Filtered text", "_QVtqAn.comment": "Label for description column.", "_QZBPUx.comment": "Label for description of custom triggerFormDataValue Function", + "_QZnOGQ.comment": "Managed connections label", "_QZrxUk.comment": "Label for string functions", "_QbJDi7.comment": "Label for single item inside an array.", "_QctOyt.comment": "Title for the authentication section", + "_Qd804l.comment": "Project setup step title", "_QdJUaS.comment": "Pencil icon aria label", "_QdRn5z.comment": "Connection not authenticated text", "_QecW1y.comment": "Loading more text", @@ -2896,6 +3137,7 @@ "_QxEQwD.comment": "Status filter label", "_R/aiRy.comment": "Time zone value ", "_R7VvvJ.comment": "The tab label for the monitoring workflows tab on the configure template wizard", + "_R7gB/3.comment": "Stateless workflow option", "_RA4TUH.comment": "Text indicating a menu button to expand an action in the designer", "_RDsZrd.comment": "Template type label", "_RFjYpH.comment": "Name of current node", @@ -2907,16 +3149,22 @@ "_RM72rC.comment": "Error message when the server name exceeds maximum length.", "_RO1UJU.comment": "Placeholder text for an empty note node", "_ROC+1+.comment": "The title of the line position field in the static result parseJson action", + "_RRuHNc.comment": "Workspace name validation message text", "_RSsqSm.comment": "Title for the toaster after updating a server", + "_RT8KNi.comment": "Save button text", "_RTfra/.comment": "Label for the edit connector button", "_RWd2ii.comment": "Hint message for parameter display name is required for save.", "_RX2Shm.comment": "Required text parameter to apply split function on", "_RXZ+9a.comment": "Mode filter label", "_RXj9tF.comment": "Details tab title", + "_RYUUQU.comment": "Code view label", "_RZNabt.comment": "Panel header title for creating the workflow", + "_RZZxs+.comment": "Create logic app workspace from package text.", "_RatwOB.comment": "In-app category name text", + "_Rb/a5t.comment": "Workspace from package creation success message", "_RbJNVk.comment": "The title of the schema field in the static result parseJson action", "_RhH4pF.comment": "A duration of time shown in minutes", + "_RhTb01.comment": "Run history view tab label", "_Rj/V1x.comment": "Title for file name parameter", "_RjvpD+.comment": "Tooltip for the button to add a new step under subgraph", "_RkgScy.comment": "Hour of the day", @@ -2926,12 +3174,14 @@ "_Rq2U5n.comment": "Error message on invalid expression", "_RqYHs0.comment": "Text for no resources found", "_Rs7j3V.comment": "Required. The expression parameters on which to apply the 'and' function.", + "_Rtnnx8.comment": "Folder already exists in selected location text.", "_RvpHdu.comment": "Time zone value ", "_RxGxr+.comment": "The title of the line number field in the static result parseJson action", "_RxbkcI.comment": "Exception for unsupported token types", "_S0N/tx.comment": "accessibility text for the resubmit button", "_S138/4.comment": "label to make bold text for Mac users", "_S2KtbJ.comment": "Label for custom date time picker", + "_S4Bx4M.comment": "Review description", "_S5kFNK.comment": "Sample test data placeholder", "_SC5XB0.comment": "label to add a parameter", "_SCCE6s.comment": "Basic Password Label Display Name", @@ -2954,6 +3204,7 @@ "_SbCUKw.comment": "Error message for when status is failed and outputs are provided", "_SbHBIZ.comment": "No runs found text", "_SbIePr.comment": "Filter by Human in the loop category of connectors", + "_Sc6upt.comment": ".NET version dropdown label", "_Se0HAU.comment": "Trigger name update information message", "_SgiTAh.comment": "Placeholder description for a newly inserted Text parameter", "_Sh10cw.comment": "Button text for save the changes", @@ -2961,6 +3212,9 @@ "_Smo/VO.comment": "Placeholder for output title field", "_Sr8PcK.comment": "Message to show when no operations are found", "_SvQyvs.comment": "confirmation text", + "_Svg1ng.comment": "Draft saving in progress text", + "_SwDrft.comment": "Switch to draft version menu item", + "_SwPbld.comment": "Switch to published version menu item", "_SwWaHa.comment": "Invalid run identifier error message", "_Sy4cFC.comment": "title for concurrency setting", "_Sy5Gcz.comment": "Description for dialog that appears when changing the kind of a node", @@ -2968,12 +3222,14 @@ "_Sz8KN3.comment": "Test", "_T/7b2y.comment": "Duration column header", "_T1q9LE.comment": "The label for the connector column", + "_T2zwDL.comment": "Custom code configuration step title", "_T7aD3v.comment": "Text for secondary access key", "_TBagKD.comment": "Message displayed when no operation is selected in the edit operation panel", "_TEN+cR.comment": "Button text for submitting feedback", "_TEYRnv.comment": "The description for button text of saving the template rolling back to development status", "_TG23yI.comment": "Title for the success toast when a Logic App is created", "_TIiSqe.comment": "Button text to switch to Data Mapper v2", + "_TJ2HKX.comment": "Package path not exists validation message", "_TNEttQ.comment": "Day of the week", "_TO7qos.comment": "Label for description of custom startOfMonth Function", "_TQd85R.comment": "Button label to show when selecting switch to advanced editor", @@ -3005,6 +3261,7 @@ "_TnwRGo.comment": "Title for the connections section in the template overview tab", "_To3RNy.comment": "Header for the workflow parameter errors category", "_TpWNAE.comment": "Placeholder text for adding new optional parameters in the dropdown", + "_Tpkwuu.comment": "File a bug button", "_Ts5Pzr.comment": "Note text", "_TsJbGH.comment": "Text to show when a connection is disconnected", "_Ttc0SM.comment": "Heading 1 text", @@ -3018,6 +3275,7 @@ "_Tzq5ot.comment": "Placeholder text for Action search bar", "_U086AA.comment": "Label for target schema node", "_U0I10w.comment": "Time zone value ", + "_U16F4a.comment": "Package path label", "_U1Tti2.comment": "Trigger label", "_U2juKb.comment": "Filter Actions", "_U3iWVd.comment": "Label for description of custom range Function", @@ -3027,12 +3285,14 @@ "_U82s8v.comment": "Label for the logic app resource selection description", "_U9SHxw.comment": "Code view title", "_UCNM4L.comment": "Description for Workflow Parameters Part 2", + "_UCYBt4.comment": "Command bar aria label", "_UD330h.comment": "Copy Action text", "_UHCVNK.comment": "Label for description of custom replace Function", "_UJGUnc.comment": "Label for the disabled switch", "_UJho0j.comment": "Placeholder for the optional password field for the selected certificate file", "_UMPuUJ.comment": "Label to delete a value", "_UNXQDI.comment": "Text for loading apim service instances", + "_UOUMSB.comment": "Deploy managed connections label", "_UOv1L6.comment": "Description for the Logic App name field", "_UPk1dq.comment": "Description for the destination section", "_UPsZSw.comment": "error message for invalid user", @@ -3067,6 +3327,7 @@ "_Uxckds.comment": "Title for the suggested flow section", "_V+/c21.comment": "title for general setting section", "_V0ZbQO.comment": "Toggle button text for hiding advanced parameters", + "_V3DWT4.comment": "Workflow name validation message text", "_V3vpin.comment": "Unknown Parameter error message. Do not remove the double single quotes around the display name, as it is needed to wrap the placeholder text.", "_V5f3ha.comment": "Frequency value ", "_V7NT3q.comment": "Text indicating a connector is connected", @@ -3080,11 +3341,15 @@ "_VIU+CM.comment": "Features label", "_VKAk5g.comment": "Message text for an invalid run ID", "_VL9wOu.comment": "Error message when the workflow parameter value is empty.", + "_VLHQ4L.comment": ".NET Framework description", "_VLc3FV.comment": "Source schema", "_VLn4Dz.comment": "Description for the workflow images section", "_VOk0Eh.comment": "Trigger belongs to Request category", + "_VPcN7p.comment": "Logic app details step description", "_VPh9Jo.comment": "Time zone value ", "_VQ1BxQ.comment": "Label for the section to configure optional parameters", + "_VSeZW4.comment": "Project path label", + "_VT6UoA.comment": "Workspace parent folder path cannot be empty message text", "_VTMWCv.comment": "Chat message trigger category", "_VUH9aj.comment": "Hour of the day", "_VUN/Gj.comment": "Error message when tools fail to load", @@ -3099,11 +3364,14 @@ "_VatSVE.comment": "The text for the consumption sku", "_VbMYd8.comment": "Description of what Triggers are, on a tooltip about Triggers", "_VchR9d.comment": "Headers", + "_Vecdzb.comment": "Logic app details step title", + "_VfUtlo.comment": "Save unit test button", "_Vfa/1M.comment": "Description for the MCP generate keys section", "_VgIOTh.comment": "Description for the MCP Server details section", "_Vi5TIV.comment": "Text to show when no warnings exist", "_ViOMjt.comment": "Option 2 description when auth is enabled", "_VjvWve.comment": "Label text for Microsoft authored templates tab", + "_Vk1TBl.comment": "Function folder name empty text", "_VlvlX1.comment": "Authentication OAuth Certificate Type Label", "_VptXzY.comment": "Label for button to allow user to create custom value in combobox from current input", "_Vq9q5J.comment": "Filter by In App category of connectors", @@ -3139,9 +3407,12 @@ "_WbPW+Q.comment": "Text displayed when there are no transitions in the monitoring timeline.", "_WcnIF8.comment": "Remove card from canvas", "_WeF48H.comment": "Azure API Management Service APIs label", + "_Wf1Tab.comment": "Workflow view tab label", "_WgChTm.comment": "Suffix for a custom value drop down value.", "_WgJsL1.comment": "Loading text", + "_WgY5vK.comment": "Workspace name field label", "_WgoP7R.comment": "Label for description of custom mul Function", + "_WkfjIG.comment": "Resubmit button", "_WkqAOm.comment": "info text for create", "_Wmc3Ux.comment": "Run draft button text", "_WnHWrD.comment": "Error message when the workflow display name field which is title is empty", @@ -3152,10 +3423,13 @@ "_WtieWd.comment": "Text for the next task button in the monitoring timeline.", "_Wvnl/V.comment": "Label for button to delete static result", "_WvvJYw.comment": "Header for the connected actions section", + "_Wwf+Ju.comment": "Export status title", "_WxJJcQ.comment": "Not Connected text", + "_Wxan/5.comment": "Create logic app project text.", "_WxcmZr.comment": "This is a tooltip for the Status results badge shown on a card. It's shown when the baged is hovered over.", "_WyH1wr.comment": "Message to show when loading search results", "_X/7je+.comment": "Frequency value ", + "_X/QTGw.comment": "Workspace Parent Folder path input label", "_X02GGK.comment": "Title for the tags section in the template overview tab", "_X1TOAH.comment": "Placeholder text for operation description field", "_X2idLs.comment": "Time zone value ", @@ -3166,6 +3440,7 @@ "_X8pCBI.comment": "Run draft with payload button text", "_XCuJUu.comment": "Description for the operation description field", "_XCunbR.comment": "Label for description of custom outputs Function", + "_XEetXV.comment": "Select .NET version placeholder text", "_XEuptL.comment": "Label for combining strings together", "_XFFpu/.comment": "Header text for retry history", "_XFzzaw.comment": "The label for advanced parameters", @@ -3173,10 +3448,12 @@ "_XHQwyJ.comment": "Error message to show on dynamic call failure", "_XIUFQz.comment": "Button text for cancelling changes to authentication settings", "_XJkBrZ.comment": "The description for the trigger condition expression setting.", + "_XKQ/Lw.comment": "Create new text", "_XLhNNP.comment": "Message displayed when no connectors are available", "_XOAcjQ.comment": "Time zone value ", "_XOMMsL.comment": "Description for the MCP Server workflows section", "_XOzn/3.comment": "This is for a label for a badge, it is used for screen readers and not shown on the screen.", + "_XPBoDw.comment": "Select option placeholder", "_XQ4OCV.comment": "Time zone value ", "_XR4Sd/.comment": "Chatbot user feedback like button title", "_XR5izH.comment": "Label text to connected status", @@ -3190,6 +3467,7 @@ "_XY5SKM.comment": "Shown as an aria label on button and as the tooltip shown after you select the button.", "_XZrMGZ.comment": "title for content transfer setting", "_XbtEq9.comment": "title for retry count setting", + "_XepQZn.comment": "Review step description", "_Xg1UDw.comment": "Link to learn more about state type", "_Xj/wPS.comment": "Agent chat title", "_Xj4xwI.comment": "Erorr mesade when managed identity is not present in logic apps", @@ -3201,6 +3479,7 @@ "_XsCwp/.comment": "Error message when no workflows are selected for the MCP server", "_XsgpXt.comment": "Channel input/output.", "_XsktQ/.comment": "description of workflow headers on response setting", + "_XtVOMn.comment": "Something went wrong text", "_XtVXqm.comment": "Button text for saving operation changes", "_XtuP5e.comment": "Label for math functions", "_XulI0a.comment": "Description for the trigger description dialog.", @@ -3234,6 +3513,7 @@ "_YRW3/2.comment": "Title text for deleting selected workflows", "_YRk271.comment": "Label for legacy multi auth dropdown", "_YTJ78g.comment": "Link text to learn how to assign the required role for the session pool in Azure Container Apps", + "_YTj0Xv.comment": "Autonomous agents workflow option", "_YUbSFS.comment": "Placeholder title for a newly inserted Boolean parameter", "_YV6qd0.comment": "Chat view tab title", "_YW1rx0.comment": "Link text to add a new connection", @@ -3250,6 +3530,7 @@ "_Ybzoim.comment": "Required string parameter to determine action wanted", "_YdQw4/.comment": "label to make italic text for Mac users", "_YgU88A.comment": "Time zone value ", + "_YgfV/C.comment": "Status step title", "_YiOybp.comment": "Time zone value ", "_YjU9OY.comment": "Select to view more token options. Number of total tokens available: {count}.", "_YlesUQ.comment": "Message displayed when map checker has no errors or warnings", @@ -3265,6 +3546,7 @@ "_Yuu5CD.comment": "Label to zoom the canvas out", "_Yuxprm.comment": "Chatbot greeting message from existing flow", "_YxH2JT.comment": "Chat message trigger category description", + "_Yyy/Zl.comment": "Package path input label", "_Yz9o1k.comment": "Text to show that no connection is connected to the node", "_Yzw97z.comment": "Description for connection selection step", "_Z1p3Yh.comment": "General error message for authentication settings update failure", @@ -3281,11 +3563,14 @@ "_ZHmzsA.comment": "Badge text for modified state", "_ZIEl3/.comment": "Label for API key copy button", "_ZME5hh.comment": "Label for description of custom dayOfMonth Function", + "_ZSRPr2.comment": "Function folder name validation message text", + "_ZU4Gis.comment": "Instance selection step title", "_ZUCTVP.comment": "Text for button to paste an action from clipboard", "_ZUaz3Y.comment": "Label for description of custom triggerBody Function", "_ZWnmOv.comment": "Button text for moving to the next tab in the connector panel", "_ZXc10N.comment": "Button to add group", "_ZXha+w.comment": "The title of the error message property within Error in the static result schema", + "_ZY5ygq.comment": "Function namespace empty text", "_ZYSWRU.comment": "Text of Tooltip to close", "_Za33CQ.comment": "Light mode image description", "_ZaIeDG.comment": "Required text parameter to search startsWith function with", @@ -3299,6 +3584,7 @@ "_ZkjTbp.comment": "Text for dynamic content link", "_ZmAy4U.comment": "Radio option for allowing only selected tools", "_ZmSjQV.comment": "Title for the setup instructions link", + "_ZtLSVc.comment": "Search label", "_ZyDq4/.comment": "Text for the show different suggestion flow button", "_ZyntX1.comment": "Text that tells you to select for adding a description", "_a1fbm6.comment": "Tooltip for info button", @@ -3310,6 +3596,7 @@ "_a7qE4l.comment": "Loading text for workflows", "_aAXnqw.comment": "Required number of occurrences to get nthIndexOf function with", "_aE+2gr.comment": "Short label to represent when a condition is not met.", + "_aExfWG.comment": "Package setup step description", "_aFZRms.comment": "HTTP body label", "_aGxYMY.comment": "Label to clear editor", "_aGyVJT.comment": "Required number parameter to get number of objects to remove for skip function", @@ -3341,6 +3628,8 @@ "_auUI93.comment": "label to inform to upload or select source schema to be used", "_auci7r.comment": "Error validation message for CSVs", "_aurgrg.comment": "Authentication type", + "_az+QCK.comment": "Logic app name validation message text", + "_b0wO2+.comment": "Stateless workflow description", "_b2aL+f.comment": "Text indicating a menu button to pin an action to the side panel", "_b6G9bq.comment": "Label for description of custom encodeUriComponent Function", "_b7BQdu.comment": "Error validation message", @@ -3367,7 +3656,9 @@ "_bXFGpe.comment": "Info section title", "_bZtnLw.comment": "This is an option in a dropdown where users can select type Integer for their parameter.", "_ba9yGJ.comment": "Button text for loading more runs", + "_bbFMfd.comment": "Workflow group display name", "_bcaiap.comment": "Button text for refreshing the server list", + "_beWWW0.comment": "Function name input label", "_bf7078.comment": "Label for description of custom max Function", "_bg00eY.comment": "Numbered List text", "_bkuRuS.comment": "Text to show when there are no operations with the given filters", @@ -3401,12 +3692,15 @@ "_cMvmv5.comment": "Error validation message for invalid JSON array. Do not remove the double single quotes around the display name, as it is needed to wrap the placeholder text.", "_cNXS5n.comment": "Dropdown option for stateless type", "_cQ/Ocu.comment": "Filter by AI Agent category of connectors", + "_cR0MlP.comment": "Browse folder button", "_cR9RtV.comment": "Title for discard modal", "_cWpWiU.comment": "Diagnostics information for error message. Don't remove the double single quotes around the placeholder text, which is needed to wrap the placeholder text in single quotes.", + "_cWrYnn.comment": "Workspace folder path label", "_cZ60Tk.comment": "Loading text", "_cZqrL1.comment": "All run modes", "_cZv9J0.comment": "Tooltip for the button to reassign actions", "_cd+qhI.comment": "Text for invalid agent tool name", + "_ceM0tn.comment": "Logic app name field placeholder", "_ceVB5l.comment": "Label for the description of the custom 'multipartBody' function", "_cfUHfs.comment": "Label for description of custom dateDifference Function", "_cgq/+y.comment": "Placehodler text for dropdown", @@ -3423,6 +3717,7 @@ "_cscezV.comment": "Required collection parameter to apply skip function on", "_ctI9Pp.comment": "Message on missing XSLT and attempting to test maps", "_cuKbLw.comment": "Premium category name text", + "_cuLdXe.comment": "Subscription label", "_cvp9VP.comment": "The title of the error code property within Error in the static result schema", "_cw9FiJ.comment": "The title of the schema base uri field in the static result parseJson action", "_cwHxwb.comment": "Text for create connection button", @@ -3440,6 +3735,7 @@ "_dCFP4g.comment": "Collapse all", "_dD8y1n.comment": "Label for editor toggle button when in collapsed mode", "_dDYCuU.comment": "Link text to open URL", + "_dE23PQ.comment": "Logic app location path label", "_dEe6Ob.comment": "Error validation message", "_dIYzFU.comment": "Tooltip text for the \"...\" menu that you select to show more items", "_dKCp2j.comment": "Chatbot query start of sentence for asking for more explaination on an item that the user can should complete.", @@ -3461,6 +3757,7 @@ "_dgPMsl.comment": "Completed status message in mock card.", "_dhlB0s.comment": "Loading aria-label for workflows list", "_dhvk0u.comment": "Label for description of custom base64ToString Function", + "_dkgivo.comment": "Workflows selection step title", "_doABYk.comment": "Title for no agent parameters found", "_dqgt9y.comment": "Label for description of custom bool Function", "_drM9Sl.comment": "Label for description of custom formDataMultiValues Function", @@ -3474,6 +3771,7 @@ "_e1+Gqi.comment": "Description for resource location section.", "_e4JZEY.comment": "Time zone value ", "_e8JCcn.comment": "Tooltip label for the button that allows user to group search results by connector.", + "_e8iBzO.comment": "Creating workspace from package in progress", "_e9OvzW.comment": "Clear", "_e9bIKh.comment": "Message on failed generation", "_eDiMaf.comment": "Error message when tool name is empty", @@ -3499,8 +3797,10 @@ "_eXWIo2.comment": "Description for parameter default value field", "_eXcejw.comment": "Running status", "_eaEXYa.comment": "Checkbox text for the filter representing all items", + "_eagv8j.comment": "Create logic app workspace text.", "_eb91v1.comment": "Header for the change connection panel", "_ec13/p.comment": "Link text to learn more about Independent Publisher connectors", + "_edTuPs.comment": "Split view label", "_egLI8P.comment": "Required start index parameter required to obtain substring", "_ehIBkh.comment": "Placeholder for integer text field", "_ekM77J.comment": "Label for workflow Name", @@ -3514,6 +3814,7 @@ "_epi+zR.comment": "Describes X button to close the map checker panel", "_er6O+w.comment": "Label for parameter Name", "_erwucR.comment": "Description for category field", + "_esTnYd.comment": "Custom code configuration step description", "_evyGYj.comment": "Tooltip for the button to reassign actions", "_ewGciu.comment": "Title for authentication parameter", "_f/lWTW.comment": "Required object parameters to check for null in coalesce function", @@ -3529,6 +3830,7 @@ "_fElufw.comment": "Select an API Management resource", "_fGKmXs.comment": "Load more text", "_fKYuwf.comment": "Placeholder description for a newly inserted File parameter", + "_fKghDg.comment": "Resource group description text", "_fLchIJ.comment": "Title for the error message shown when creation of logic app fails", "_fNE/hg.comment": "Text for if image does not show up", "_fNlJSh.comment": "Error message to show when all connections are not connected", @@ -3536,6 +3838,7 @@ "_fRrZKS.comment": "Light mode image label", "_fSMyDJ.comment": "title for request options setting", "_fVG5aD.comment": "Time zone value ", + "_fZJWBR.comment": "Loading designer text", "_fa8xG1.comment": "The information for the error message", "_faPcYk.comment": "Answer no to combine button label", "_faUrud.comment": "Message to show under the loading icon when loading connection parameters", @@ -3545,12 +3848,14 @@ "_fp8Ry3.comment": "Time zone value ", "_fsRie2.comment": "Description for workflow summary field", "_ft8BH8.comment": "Seconds", + "_fuBVBE.comment": "Logic app name field label", "_fvGvnA.comment": "Chatbot error message", "_g076bL.comment": "Placeholder title for a newly inserted Email parameter", "_g1zwch.comment": "Label to zoom the canvas in", "_g3DKT8.comment": "The tab label for basics tab for quick app create panel", "_g4igOR.comment": "Button text for publish", "_g7/EKC.comment": "sublabel for concurrency limit toggle button", + "_g7eU6A.comment": "Workspace name input label", "_g7my78.comment": "Run test", "_g8eDXe.comment": "description of action count setting", "_gA1dde.comment": "Label used for the toolbar button which switches between raw HTML (code) view and WYSIWIG (rich text) view", @@ -3559,6 +3864,7 @@ "_gDDfek.comment": "Label for description of custom getFutureTime Function", "_gDW6Bd.comment": "Placeholder text for trigger description", "_gDY9xk.comment": "Label for description of custom div Function", + "_gHm7zV.comment": "Errors button", "_gIK0WG.comment": "Required boolean parameter to determine which value if function should return", "_gIx5ys.comment": "label to make italic text for nonMac users", "_gKq3Jv.comment": "Label of a button to go to the previous failed page option", @@ -3593,6 +3899,7 @@ "_gvDMuq.comment": "Select a Batch Workflow resource", "_gvo1S7.comment": "Warning message when agent is disconnected from the flow", "_gwEKLM.comment": "This is a message shown while loading. This announced text is read aloud with screen readers. Not shown in text.", + "_gxHe8n.comment": "Empty location message", "_h+W3VW.comment": "Label for Number type dynamically added parameter", "_h+ZYip.comment": "Option to install a new gateway, links to new page", "_h0WB5b.comment": "Others tab label for custom MCP server connections", @@ -3663,6 +3970,7 @@ "_iCni1C.comment": "Accessbility text to indicate no search results found", "_iE2+sy.comment": "Button to choose data type of the dynamically added parameter", "_iEy9pT.comment": "Token picker mode to insert dynamic content", + "_iFcpYH.comment": "Logic App setup step label", "_iFdKPk.comment": "Label for input type dropdown section in parameter editor", "_iGxL1E.comment": "Issues ith the map", "_iHVVTl.comment": "Text for delete node modal body", @@ -3682,6 +3990,7 @@ "_iXW+2l.comment": "Chatbot input start of sentence for adding an action that the user should complete. Trailing space is intentional.", "_id4DBb.comment": "First part of the Copilot Get Started description for Suggested Flow section", "_idQjOP.comment": "Label for properties tab", + "_idw/7j.comment": "Export logic app text.", "_ifZ8ok.comment": "Description for the MCP server registration wizard", "_ihCdw4.comment": "Required. The number parameter to sum in the 'add' function.", "_im0GMa.comment": "Label for show less text.", @@ -3699,11 +4008,13 @@ "_ixoJF3.comment": "Content for the empty workflows modal", "_iy8rNf.comment": "Button text for running test", "_izS5yQ.comment": "Learn more link text", + "_izUiSp.comment": "Parameters button", "_j/Pssm.comment": "Label for description of custom formatTimeSpan Function", "_j1FtOw.comment": "Aria label for add new tag", "_j2v8BE.comment": "Text to show no connections present in the template.", "_j4OKkU.comment": "label to set text color", "_j5z8Vd.comment": "Label for array connection", + "_j6RrLt.comment": "Project setup section title", "_j7HEKm.comment": "Text for days", "_jA6Wrp.comment": "label to inform to upload or select target schema to be used", "_jDYilS.comment": "Description for dialog that appears when changing the kind of a node from stateless", @@ -3727,7 +4038,9 @@ "_jfInxm.comment": "Parameter Link Text", "_jfQPGz.comment": "Label for delete button", "_jfU6pn.comment": "description of the secure inputs setting", + "_jfWu9H.comment": "Workflow name empty text", "_jgOaTX.comment": "Error Message on generating schema based on payload", + "_jheId9.comment": "Workspace name label", "_jjIhsG.comment": "Button text for deleting the MCP server group", "_jk2rY+.comment": "Button text for saving authentication settings", "_jlcMGg.comment": "Chatbot prompt to add action description", @@ -3741,6 +4054,7 @@ "_k/oqFL.comment": "Required base64 string parameter to be converted using base64ToString function", "_k2a8ry.comment": "The tab label for the summary tab on the configure template wizard", "_k5tGEr.comment": "This is the boolean value for Yes", + "_k6MqI+.comment": "Creating workspace in progress", "_k8cbQ1.comment": "Header for the node parameter errors subsection", "_k8fofe.comment": "Error message shown when app creation fails", "_kAJqcb.comment": "Description for parameters step", @@ -3769,6 +4083,7 @@ "_kfmLTY.comment": "Body text for a function missing a required input card", "_khmfg3.comment": "See all actions text for the spotlight section", "_kkFPeq.comment": "Handoff tab title", + "_kkKTEH.comment": "Logic app with custom code description", "_kkx2qd.comment": "Label for the Virtual network field", "_klY9UN.comment": "This announced text is read aloud with screen readers. Not shown in text.", "_koft/j.comment": "Title for the default parameters section", @@ -3776,6 +4091,7 @@ "_kuFK3E.comment": "Invalid authentication without type property", "_kuMOqt.comment": "Badge text for saved state", "_kuzT1s.comment": "Button text for moving back to configure tab in the clone wizard", + "_kv8ROl.comment": "Dot net framework label", "_kvFOza.comment": "Error message when the workflow parameter display name is empty.", "_kxv92S.comment": "Confirmation message for deleting a server", "_l/3yJr.comment": "Text to show when there is an error with the connection", @@ -3826,6 +4142,7 @@ "_m+/AXv.comment": "Description for the validation errors bar", "_m/jJ/5.comment": "Map checker", "_m0e5px.comment": "Link text for learn more", + "_m3H+gL.comment": "New text", "_m4qt/b.comment": "Error while creating acl", "_m5InJc.comment": "status code", "_m6vIDU.comment": "Required parameter for name in encodeXmlName function", @@ -3843,6 +4160,7 @@ "_mGpKsl.comment": "Label for description of custom dataUriToString Function", "_mILANb.comment": "Placeholder text for resource selection", "_mIbBgK.comment": "Current connection title", + "_mMivmV.comment": "Regions divider label", "_mMysmk.comment": "Workflow execution trigger category description", "_mNaBPE.comment": "Error message for invalid JSON in authentication editor", "_mPuXlv.comment": "Error message for when split on array is invalid. Do not remove the double single quotes around the placeholder text, as it is needed to wrap the placeholder text in single quotes.", @@ -3854,6 +4172,7 @@ "_maP1K/.comment": "Minutes", "_marivS.comment": "Create connection button text", "_mb1XDD.comment": "Parameter Field Actual Value Title", + "_mbQ+Js.comment": "Workspace file already exists text.", "_mc9MCq.comment": "Description for the MCP server workflows section", "_mca3Ml.comment": "Aria label description for sign in button.", "_meVkB6.comment": "Empty property name error message", @@ -3865,11 +4184,13 @@ "_mnuwWm.comment": "Warning body for when unable to parse schema", "_mpFlLc.comment": "Mainframe Modernization category", "_mqVL/E.comment": "The tab label for the add actions tab on the connector panel", + "_mr/BC/.comment": "Function namespace input label", "_mvrlkP.comment": "OAuth Password Placeholder Text", "_mvu5xN.comment": "Accessibility Label for the dictionary text value field", "_mwEHSX.comment": "Label for function node", "_mx2IMJ.comment": "Hour of the day", "_mxSILx.comment": "Queries", + "_mygEMn.comment": "No workflows message", "_mzxUwl.comment": "Description for new workflow name", "_n+F7e2.comment": "Hour of the day", "_n+sJ5W.comment": "Name of the organization that published this template", @@ -3901,6 +4222,7 @@ "_nTA155.comment": "Required string parameter to identify which property to remove", "_nV2Spt.comment": "label for operation details panel component", "_nVDG00.comment": "Time zone value ", + "_nVhDGu.comment": "Workflow name field placeholder", "_nX3iRl.comment": "Error message for parameter is empty", "_nZ4nLn.comment": "title for suppress workflow headers setting", "_ncW1Sw.comment": "Alt text on action/trigger card when there are both an operation name and connector name", @@ -3915,6 +4237,7 @@ "_nmhiR6.comment": "The text for the standard sku", "_no+blV.comment": "Button text for cancel the dialog", "_no/SMg.comment": "Time zone value ", + "_ntW6su.comment": "Package path field label", "_nuNBYE.comment": "Path", "_nwLd4b.comment": "Label of the file path selection box", "_nwTyEd.comment": "Edit parameter", @@ -3929,6 +4252,7 @@ "_o3SfI4.comment": "Label to fit the whole canvas in view", "_o5fYVy.comment": "Chatbot suggestion message to describe the workflow", "_o7bd1o.comment": "Time zone value ", + "_o7s/JG.comment": "Standard logic app option", "_oA5+TG.comment": "Message when connector has no triggers available", "_oAFcW6.comment": "Required string parameter to be decoded using decodeDataUri function", "_oBAL2F.comment": "Days", @@ -3945,6 +4269,7 @@ "_oPKLDZ.comment": "Title for switch case", "_oQjIWf.comment": "The title of the errors field in the static result parseJson action", "_oR2x4N.comment": "Error message for invalid integer value", + "_oRm/MY.comment": "Custom code location path label", "_oTBkbU.comment": "The title of the output field in the static result query action", "_oTmqLo.comment": "The tab label for the selection panel on the connector panel for adding connector", "_oU4UD8.comment": "Label for the dropdown to select the target agent for handoff", @@ -3963,9 +4288,11 @@ "_olgoo5.comment": "Title for step 2 - tools selection", "_om43/8.comment": "Aria label for workflows list table", "_oo72Za.comment": "Description displayed when no MCP servers are found", + "_ooIa6F.comment": "Limit info message", "_opvqoT.comment": "Tooltip for Run button when draft workflow is shown", "_or0uUQ.comment": "Details tab description", "_osln7P.comment": "Label for description of custom decodeUriComponent Function", + "_otRX33.comment": "Stateful workflow description", "_owpAI/.comment": "Description of handoffs", "_ox2Ou7.comment": "Placeholder for empty collapsed dictionary", "_oxCSqB.comment": "An accessibility label that describes the objective of parameters tab", @@ -3980,6 +4307,7 @@ "_p0BE2D.comment": "Button text to trigger clone in the create workflow panel", "_p1IEXb.comment": "Label for button to open dynamic content token picker", "_p2eSD1.comment": "Button text for opening panel for editing workflows", + "_p4Mgce.comment": "Stateful workflow option", "_p5ZID0.comment": "Time zone value ", "_p8AKOz.comment": "Label for the description textfield", "_pC2nr2.comment": "Placeholder text for Key", @@ -3987,6 +4315,8 @@ "_pH2uak.comment": "Label to collapse", "_pH6ubt.comment": "Column header for accessing connection-related details", "_pJJ3x8.comment": "Seach source or target nodes", + "_pK0Ir8.comment": "Export with warnings button", + "_pO1Zvz.comment": "Package path cannot be empty message text", "_pOTcUO.comment": "Required object parameter to be converted to array using createArray function", "_pOVDll.comment": "Error validation message for Integers", "_pRJny7.comment": "Placeholder text for the handoff description input field", @@ -4013,6 +4343,7 @@ "_pykp8c.comment": "Title text for the card that lets users start from a blank workflow", "_q/+Uex.comment": "Label for description of custom xpath Function", "_q/DRBW.comment": "Required string parameter to be sized using utf8Length function", + "_q1dxkD.comment": ".NET 8 description", "_q1gfIs.comment": "Text on example trigger node", "_q2OCEx.comment": "Required parameter for new property value in addProperty function", "_q2w8Sk.comment": "Label for description of custom string Function", @@ -4030,11 +4361,13 @@ "_qJpnIL.comment": "Label for description of custom endsWith Function", "_qKVOwV.comment": "Placeholder text for the MCP server name field", "_qMFpNH.comment": "Loading dynamic data", + "_qNh5t2.comment": "Rules engine folder name input label", "_qSejoi.comment": "Label for description of custom lessOrEquals Function", "_qSt0Sb.comment": "Accessibility prefix for the input label", "_qUWBUX.comment": "A duration of time shown in days", "_qUq/6N.comment": "Text between button name and license link", "_qVgQfW.comment": "Search box placeholder text", + "_qXL3lS.comment": "A project with name already exists message text", "_qc5S69.comment": "Label for description of custom length Function", "_qiIs4V.comment": "placeholder for retry interval setting", "_qif1I+.comment": "Description for the main section", @@ -4050,6 +4383,8 @@ "_qwZaWJ.comment": "Text showing how many operations are selected out of total available", "_qxw9UO.comment": "Column header for connection valid/invalid status", "_qy5WqY.comment": "Text for button that shows the previous flow suggestion", + "_qyW34i.comment": "Rules engine folder label", + "_qz9XeG.comment": "Cancel button", "_qzaoRR.comment": "description of action timeout setting", "_r/P4gM.comment": "Answer yes to combine button label", "_r/n6/9.comment": "Placeholder for text field", @@ -4066,11 +4401,14 @@ "_rDDPpJ.comment": "Authentication OAuth Secret Type Label", "_rDQmGU.comment": "Label for API key copyable field", "_rEQceE.comment": "Label text for Microsoft authored templates", + "_rGQ0Qx.comment": "After export label", + "_rGWwuB.comment": "Workspace package creation success description", "_rGw0g0.comment": "Loading text", "_rHySVF.comment": "Error message when missing information for workflows creation", "_rMYBfw.comment": "Make the dynamic parameter corresponding to this row optional", "_rNi5Y3.comment": "Tooltip for the on-premises data gateway connection checkbox", "_rPw0Hp.comment": "No actions available text", + "_rREwxg.comment": "Refresh button", "_rSIBjh.comment": "Parameter Field Value Placeholder Text", "_rSa1Id.comment": "Files could not be found in specified path", "_raBiud.comment": "Require parameters to find maximum using max function", @@ -4109,6 +4447,7 @@ "_sRpETS.comment": "Warning message for when custom value does not match schema node type", "_sVQe34.comment": "The description for the test tab parameters.", "_sVcvcG.comment": "The tab label for the monitoring name and state tab on the create workflow panel", + "_sXNnlg.comment": "Logic app with rules engine option", "_sYQDN+.comment": "Label for Font family dropdown", "_sZ0G/Z.comment": "Required string parameter to represent the unit of time", "_sZHTQV.comment": "Time zone value ", @@ -4137,6 +4476,7 @@ "_sv+IcU.comment": "Message to display when the data map definition can't be generated", "_svaqnp.comment": "Error message for when status is succeded and error is provided", "_sw6EXK.comment": "The title of the status property in the static result schema", + "_swjISX.comment": "Browse button text", "_swt55B.comment": "Suggested triggers accordion title", "_syFW9c.comment": "Panel header title for managing workflows", "_syiNc+.comment": "Browse for file", @@ -4147,6 +4487,7 @@ "_t/aciw.comment": "Error message when the workflow light image is empty", "_t0tN4J.comment": "The tab label for the code view tab on the operation panel", "_t1cE+t.comment": "Description for display name field", + "_t2nswK.comment": ".NET 8 option", "_t5ECPm.comment": "Placeholder text when no tools are selected", "_t7ytOJ.comment": "Column name for connection status", "_t9RwOi.comment": "Invalid expression alert", @@ -4199,7 +4540,9 @@ "_tw6oMS.comment": "Placeholder text for Connector search bar", "_twr0pi.comment": "Copy Trigger text", "_tzeDPE.comment": "Accessibility label for state kind", + "_u+VFmh.comment": "Create logic app project button", "_u0xUtD.comment": "Button text to open URL in new tab", + "_u2mduv.comment": "Export page title", "_u2z3kg.comment": "The aria label for the parameters table", "_u60lSZ.comment": "Error message title for duplicate workflow ids", "_u7p0Dp.comment": "Empty state message when no connections are found in the workflow", @@ -4279,6 +4622,7 @@ "_vT0DCP.comment": "Display name for operation outputs", "_vWR0op.comment": "General error message for name availability check failure", "_vX9WYS.comment": "Audience Label Display Name", + "_vXqIg+.comment": "Export location label", "_va40BJ.comment": "Required string parameter to determine action's output wanted", "_vdtKjT.comment": "Error message to show when logic app does not have managed identity when creating azure connection", "_vhNDi9.comment": "Add button text", @@ -4293,9 +4637,11 @@ "_vp016T.comment": "Placeholder for the agent parameter type", "_vr70Gn.comment": "Create a connection for selected connector", "_vrYqUF.comment": "Label for button to allow user to create custom value in combobox", + "_vv8WR4.comment": "Generate infrastructure label", "_vvSHR8.comment": "Change context of the canvas to view that element's children", "_vwH/XV.comment": "Create Parameter Text", "_vxOc/M.comment": "Error message for duplicate integer array", + "_vyBSec.comment": ".NET framework label", "_vyddjn.comment": "Label indicating how many items are currently displayed in the browse grid", "_vz+t4/.comment": "Description for dialog that appears when changing the kind of a node to a stateful kind", "_vzXXFP.comment": "Workflow version filter label", @@ -4324,6 +4670,7 @@ "_wPi8wS.comment": "Accessibility label indicating that the value is not set", "_wPjnM9.comment": "Text for button to paste a parallel action from clipboard", "_wPlTDB.comment": "Full path of current node", + "_wPzyvX.comment": "Export button", "_wQcEXt.comment": "Required parameters for the custom Replace Function", "_wQsEwc.comment": "Required length parameter to obtain substring", "_wT/gMB.comment": "Description for featured connectors field", @@ -4361,6 +4708,7 @@ "_x74tKg.comment": "Text for hours", "_x7IYBg.comment": "The status message to show in monitoring view.", "_x7XKH0.comment": "Description for template type field", + "_xBIh0S.comment": "Workflow type label", "_xC1zg3.comment": "Section header for the schema section", "_xDHpeS.comment": "An accessibility label that describes the objective of review and create tab", "_xFQXAI.comment": "Button text for the control-Z button combination to undo the last action", @@ -4373,6 +4721,7 @@ "_xMgLd8.comment": "title for retry minimum interval setting", "_xN3GEX.comment": "Client Certificate Password Placeholder Text", "_xPO/1M.comment": "Description for the MCP server registration wizard", + "_xQHAPW.comment": ".NET Framework option", "_xQQ9ko.comment": "title for pagination user input", "_xSMbKr.comment": "Show inputs text", "_xSSfKC.comment": "Time zone value ", @@ -4389,6 +4738,7 @@ "_xfXUGz.comment": "Minute", "_xgV4pp.comment": "Text for the \"Select All\" option in a multiselect dropdown", "_xhBvXj.comment": "Button text for opening test panel", + "_xhJqo7.comment": "Resource group label", "_xi2tn6.comment": "The tab label for the monitoring parameters tab on the operation panel", "_xkCRtu.comment": "Label text for status filter", "_xt5TeT.comment": "Description for Workflow Parameters Part 1", @@ -4415,12 +4765,15 @@ "_yOyeBT.comment": "Turn the minimap on or off", "_yQ6+nV.comment": "Link to create a connection", "_yRDuqj.comment": "Button text to add all advanced parameters", + "_yRZ2Qm.comment": "Clone connections label", "_yUNdJN.comment": "Label for the run version", "_yVFIAQ.comment": "Time zone value ", "_yVh9kr.comment": "Hour of the day", + "_yZ9m4I.comment": "Logic app name label", "_yc0GcM.comment": "Label for description of custom chunk Function", "_ydqOly.comment": "placeholder text for row values", "_yeagrz.comment": "Second bullet point of stateless type", + "_yen5zR.comment": "Review title", "_yjierd.comment": "Error message on invalid expression type during building. Do not remove the double single quotes around the placeholder text, as it is needed to wrap the placeholder text in single quotes.", "_yjjXCQ.comment": "Aria label for the close button in the Add Action Panel", "_yk7L+4.comment": "Chatbot user feedback dislike button title", @@ -4453,6 +4806,7 @@ "_zOq84J.comment": "Delete agent last parameter label", "_zOvGF8.comment": "Time zone value ", "_zPRSM9.comment": "Error message when no app identity is added in environment variables", + "_zTdffa.comment": "Workflow name field label", "_zUWAsJ.comment": "Label for description of custom isInt Function", "_zUgja+.comment": "Label for button to clear the editor", "_zViEGr.comment": "Time zone value ", @@ -4484,6 +4838,7 @@ "a7qE4l": "Loading workflows...", "aAXnqw": "Required. The number of the occurrence of the substring to find.", "aE+2gr": "False", + "aExfWG": "Package", "aFZRms": "Body", "aGxYMY": "Clear editor", "aGyVJT": "Required. The number of objects to remove from the front of Collection. Must be a positive integer.", @@ -4515,6 +4870,8 @@ "auUI93": "Add or select a source schema to use for your map.", "auci7r": "Enter a valid comma-separated string.", "aurgrg": "Managed identity", + "az+QCK": "Logic app name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", + "b0wO2+": "Optimized for low latency, ideal for request-response and processing IoT events.", "b2aL+f": "Pin action", "b6G9bq": "URL encodes the input string", "b7BQdu": "Enter a valid Boolean.", @@ -4541,7 +4898,9 @@ "bXFGpe": "Info", "bZtnLw": "Integer", "ba9yGJ": "Load more", + "bbFMfd": "Workflows", "bcaiap": "Refresh", + "beWWW0": "Function name", "bf7078": "Returns the maximum value in the input array of numbers", "bg00eY": "Numbered list", "bkuRuS": "No operations found", @@ -4575,12 +4934,15 @@ "cMvmv5": "''Value'' must be a valid JSON array", "cNXS5n": "Stateless", "cQ/Ocu": "AI Agent", + "cR0MlP": "Browse...", "cR9RtV": "Discard changes", "cWpWiU": "More diagnostic information: x-ms-client-request-id is ''{clientRequestId}''.", + "cWrYnn": "Workspace folder", "cZ60Tk": "Loading....", "cZqrL1": "All", "cZv9J0": "Connection is valid", "cd+qhI": "Enter a valid tool name using only alphanumeric characters, starting with a letter (max 48 characters).", + "ceM0tn": "Enter logic app name", "ceVB5l": "Returns the body for a part in a multipart output from an action.", "cfUHfs": "Returns the difference between two dates as a timespan string", "cgq/+y": "Please select an identity", @@ -4597,6 +4959,7 @@ "cscezV": "Required. The collection to skip the first Count objects from.", "ctI9Pp": "Generate XSLT first before attempting to test mappings.", "cuKbLw": "Premium", + "cuLdXe": "Subscription", "cvp9VP": "Error code", "cw9FiJ": "Schema URI", "cwHxwb": "Add connection", @@ -4614,6 +4977,7 @@ "dCFP4g": "Collapse all", "dD8y1n": "Switch to key value mode", "dDYCuU": "Learn more", + "dE23PQ": "Logic app location", "dEe6Ob": "Enter a valid JSON.", "dIYzFU": "More…", "dKCp2j": "Tell me more about", @@ -4635,6 +4999,7 @@ "dgPMsl": "Completed", "dhlB0s": "Loading workflows aria label", "dhvk0u": "Returns a string representation of a base 64 encoded string", + "dkgivo": "Workflows selection", "doABYk": "No agent parameters are available to display.", "dqgt9y": "Convert the parameter to a Boolean", "drM9Sl": "Returns an array of values matching the key name from form-data or form-encoded action output", @@ -4648,6 +5013,7 @@ "e1+Gqi": "Select the resource location for your workflow", "e4JZEY": "(UTC+07:00) Tomsk", "e8JCcn": "Group actions by connector", + "e8iBzO": "Creating...", "e9OvzW": "Clear", "e9bIKh": "Failed to generate XSLT.", "eDiMaf": "Tool name is required", @@ -4673,8 +5039,10 @@ "eXWIo2": "Pre-filled value used if the user doesn't enter anything.", "eXcejw": "In progress", "eaEXYa": "All", + "eagv8j": "Create logic app workspace", "eb91v1": "Change connection", "ec13/p": "Learn more", + "edTuPs": "Split view", "egLI8P": "Required. The index of where the substring begins in parameter 1.", "ehIBkh": "Enter an integer", "ekM77J": "Workflow name", @@ -4688,6 +5056,7 @@ "epi+zR": "Close map checker", "er6O+w": "Name", "erwucR": "The group or domain the template belongs to (e.g., automation, data).", + "esTnYd": "Configure the settings for your custom code logic app", "evyGYj": "Reassign all connected actions to a new connection", "ewGciu": "Authentication", "f/lWTW": "Required. The objects to check for null.", @@ -4703,6 +5072,7 @@ "fElufw": "Select an API Management resource", "fGKmXs": "Load more", "fKYuwf": "Please select file or image", + "fKghDg": "A resource group is a container that holds related resources for an Azure solution.", "fLchIJ": "Creation failed", "fNE/hg": "Button to add dynamic content if token picker is hidden", "fNlJSh": "All connections must be connected for workflow creation", @@ -4710,6 +5080,7 @@ "fRrZKS": "Light-mode SAS URL", "fSMyDJ": "Request options - Timeout", "fVG5aD": "(UTC-05:00) Haiti", + "fZJWBR": "Loading designer", "fa8xG1": "Template validation failed. Please check the tabs for more details to fix the errors", "faPcYk": "No", "faUrud": "Loading connection data...", @@ -4719,12 +5090,14 @@ "fp8Ry3": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "fsRie2": "A short overview of what the template does.", "ft8BH8": "{count} Seconds", + "fuBVBE": "Logic app name", "fvGvnA": "Sorry, something went wrong. Please try again.", "g076bL": "Email", "g1zwch": "Zoom in", "g3DKT8": "Basics", "g4igOR": "Publish", "g7/EKC": "Limit", + "g7eU6A": "Workspace name", "g7my78": "Run test", "g8eDXe": "Limit the maximum iterations for this action.", "gA1dde": "Toggle code view", @@ -4733,6 +5106,7 @@ "gDDfek": "Returns a timestamp that is the current time plus the specified time interval.", "gDW6Bd": "Description of the trigger", "gDY9xk": "Returns the result from dividing the two numbers", + "gHm7zV": "Errors", "gIK0WG": "Required. A boolean value that determines which value the expression should return.", "gIx5ys": "Format text as italic. Shortcut: Ctrl+I", "gKq3Jv": "Previous failed", @@ -4767,6 +5141,7 @@ "gvDMuq": "Select a Batch Workflow resource", "gvo1S7": "Agent is unreachable in flow structure", "gwEKLM": "Loading...", + "gxHe8n": "No locations available", "h+W3VW": "Number", "h+ZYip": "{addIcon} Install gateway", "h0WB5b": "Others", @@ -4837,6 +5212,7 @@ "iCni1C": "Can't find any search results", "iE2+sy": "Choose the type of output", "iEy9pT": "Dynamic content", + "iFcpYH": "Logic app setup", "iFdKPk": "Provided by", "iGxL1E": "Issues", "iHVVTl": "Are you sure you want to delete {nodeId}?", @@ -4856,6 +5232,7 @@ "iXW+2l": "Add an action", "id4DBb": "After you review this AI generated flow suggestion, select", "idQjOP": "Properties", + "idw/7j": "Export logic app", "ifZ8ok": "Register an MCP server that you create, starting with a logic app. Create tools that run connector actions so your server can perform tasks. Available logic apps depend on your current Azure subscription.", "ihCdw4": "Required. The number to add to Summand 2.", "im0GMa": "Show less", @@ -4873,11 +5250,13 @@ "ixoJF3": "You need at least one workflow in this logic app to create an MCP server from existing workflows. Select the 'Create new workflows' to build tools from connector actions on your server.", "iy8rNf": "Test", "izS5yQ": "Learn more", + "izUiSp": "Parameters", "j/Pssm": "Formats a timespan value according to the specified format string and optional culture.", "j1FtOw": "Add new tag", "j2v8BE": "No connections are needed in this template", "j4OKkU": "Text color", "j5z8Vd": "Repeating", + "j6RrLt": "Project setup", "j7HEKm": "days", "jA6Wrp": "Add or select a target schema to use for your map.", "jDYilS": "This preview version of logic apps does not yet support stateless logic apps using the chat message trigger.", @@ -4901,7 +5280,9 @@ "jfInxm": "Edit in JSON", "jfQPGz": "Select to delete item", "jfU6pn": "Enabling secure inputs will automatically secure outputs.", + "jfWu9H": "Workflow name cannot be empty.", "jgOaTX": "Unable to generate schema", + "jheId9": "Workspace name", "jjIhsG": "Delete", "jk2rY+": "Save", "jlcMGg": "Describe something your flow should do. Add details where possible, including the connector to use and if any content should be included.", @@ -4915,6 +5296,7 @@ "k/oqFL": "Required. The base64 encoded string.", "k2a8ry": "Review + publish", "k5tGEr": "Yes", + "k6MqI+": "Creating...", "k8cbQ1": "Parameter errors", "k8fofe": "An error occurred while creating the app. Unknown error.", "kAJqcb": "Configure the parameters for this MCP tool", @@ -4943,6 +5325,7 @@ "kfmLTY": "Function ''{functionName}'' is missing required inputs", "khmfg3": "See all {count} actions", "kkFPeq": "Handoffs", + "kkKTEH": "Logic app that allows custom code integration and advanced scenarios", "kkx2qd": "Virtual network integration", "klY9UN": "{count, plural, one {# item matched.} =0 {no items matched.} other {# items matched.}}", "koft/j": "Default parameters", @@ -4950,6 +5333,7 @@ "kuFK3E": "Missing authentication type property: 'type'.", "kuMOqt": "Saved", "kuzT1s": "Previous", + "kv8ROl": ".NET Framework", "kvFOza": "Display name is required.", "kxv92S": "Successfully deleted MCP server: ''{serverName}''.", "l/3yJr": "Invalid connection", @@ -5000,6 +5384,7 @@ "m+/AXv": "Please fix the errors and try again.", "m/jJ/5": "Map checker", "m0e5px": "Learn more", + "m3H+gL": "New", "m4qt/b": "ACL creation failed for connection. Deleting the connection.", "m5InJc": "Status Code", "m6vIDU": "Required. The string to be encoded as a valid XML element or attribute name.", @@ -5017,6 +5402,7 @@ "mGpKsl": "Returns a string representation of a data URI", "mILANb": "Select a resource", "mIbBgK": "Connected to", + "mMivmV": "Regions", "mMysmk": "When another logic app calls this workflow", "mNaBPE": "Enter a valid JSON.", "mPuXlv": "Invalid type on split on value ''{splitOn}'', split on not in array.", @@ -5028,6 +5414,7 @@ "maP1K/": "{count} Minutes", "marivS": "Authenticate", "mb1XDD": "Actual value", + "mbQ+Js": "A workspace file \"{name}.code-workspace\" already exists.", "mc9MCq": "This list shows only workflows with actions and request triggers. Select the workflows you want to use.", "mca3Ml": "Sign in to connector", "meVkB6": "Empty property name", @@ -5039,11 +5426,13 @@ "mnuwWm": "This error might mean that the agent parameter schema is incorrectly set up.", "mpFlLc": "Mainframe Modernization", "mqVL/E": "Select actions", + "mr/BC/": "Function namespace", "mvrlkP": "Enter password as plain text or use a secure parameter", "mvu5xN": "{name} Value", "mwEHSX": "Function", "mx2IMJ": "13", "mxSILx": "Queries", + "mygEMn": "No workflows available", "mzxUwl": "Keep or edit the default name for the destination workflow in the Standard logic app.", "n+F7e2": "15", "n+sJ5W": "Published by", @@ -5075,6 +5464,7 @@ "nTA155": "Required. The name of the property to remove.", "nV2Spt": "Operation details panel", "nVDG00": "(UTC+14:00) Kiritimati Island", + "nVhDGu": "Enter workflow name", "nX3iRl": "User input must not be empty.", "nZ4nLn": "Suppress workflow headers", "ncW1Sw": "{operationName} operation, {connectorName} connector", @@ -5089,6 +5479,7 @@ "nmhiR6": "Standard", "no+blV": "Cancel", "no/SMg": "(UTC+10:00) Brisbane", + "ntW6su": "Package path", "nuNBYE": "Path", "nwLd4b": "Dropdown to select filepath", "nwTyEd": "Edit agent parameter", @@ -5103,6 +5494,7 @@ "o3SfI4": "Zoom to fit", "o5fYVy": "Describe this workflow.", "o7bd1o": "(UTC+03:30) Tehran", + "o7s/JG": "Logic app (Standard)", "oA5+TG": "This connector has no triggers available. Users often combine the following triggers with actions.", "oAFcW6": "Required. The dataURI to decode into a binary representation.", "oBAL2F": "{count} Days", @@ -5119,6 +5511,7 @@ "oPKLDZ": "Delete switch case", "oQjIWf": "Errors", "oR2x4N": "Invalid integer value", + "oRm/MY": "Custom code location", "oTBkbU": "Output", "oTmqLo": "Add connector", "oU4UD8": "Target agent", @@ -5137,9 +5530,11 @@ "olgoo5": "Select allowed tools", "om43/8": "Workflows list tabel", "oo72Za": "Start by choosing or creating workflows as tools for agents to perform tasks.", + "ooIa6F": "Limit reached", "opvqoT": "Run draft workflow", "or0uUQ": "Configure details for this node", "osln7P": "URL decodes the input string", + "otRX33": "Optimized for high reliability, ideal for process business transitional data.", "owpAI/": "Handoffs specify which agents can control the workflow after the current agent. Add a description to help the next agent understand the handoff purpose. You can send optional extra content or data to the next agent.", "ox2Ou7": "Enter a valid JSON", "oxCSqB": "You can edit parameters here or in designer.", @@ -5154,6 +5549,7 @@ "p0BE2D": "Clone", "p1IEXb": "Enter the data from previous step. You can also add data by typing the '/' character.", "p2eSD1": "Edit", + "p4Mgce": "Stateful", "p5ZID0": "(UTC+03:00) Kuwait, Riyadh", "p8AKOz": "Description", "pC2nr2": "Enter key", @@ -5161,6 +5557,8 @@ "pH2uak": "Collapse", "pH6ubt": "Details", "pJJ3x8": "Search nodes", + "pK0Ir8": "Export with warnings", + "pO1Zvz": "Package path cannot be empty.", "pOTcUO": "Required. The values to combine into an array.", "pOVDll": "Enter a valid integer.", "pRJny7": "Enter the handoff purpose.", @@ -5187,6 +5585,7 @@ "pykp8c": "Blank workflow", "q/+Uex": "Returns an XML node, nodeset or value as JSON from the provided XPath expression", "q/DRBW": "Required. The string to calculate UTF-8 length from.", + "q1dxkD": "Use the latest .NET 8 for modern development and performance", "q1gfIs": "Add a trigger", "q2OCEx": "Required. The value to assign to the property.", "q2w8Sk": "Convert the parameter to a string", @@ -5204,11 +5603,13 @@ "qJpnIL": "Checks if the string ends with a value (case-insensitive, invariant culture)", "qKVOwV": "Enter a name for the MCP server", "qMFpNH": "Loading dynamic data", + "qNh5t2": "Rules engine folder name", "qSejoi": "Returns true if the first argument is less than or equal to the second", "qSt0Sb": "Required", "qUWBUX": "{days, plural, one {# day} other {# days}}", "qUq/6N": "you agree to the", "qVgQfW": "Search", + "qXL3lS": "A project with this name already exists in the workspace.", "qc5S69": "Returns the number of elements in an array or string", "qiIs4V": "Example: {example}", "qif1I+": "Build tools for your MCP server by selecting connectors and their actions.", @@ -5224,6 +5625,8 @@ "qwZaWJ": "{selectedCount} of {totalCount} selected", "qxw9UO": "Status", "qy5WqY": "Previous flow suggestion", + "qyW34i": "Rules engine folder", + "qz9XeG": "Cancel", "qzaoRR": "Limit the maximum duration between the retries and asynchronous responses for this action. Note: This does not alter the request timeout of a single request", "r/P4gM": "Yes", "r/n6/9": "Enter a value", @@ -5240,11 +5643,14 @@ "rDDPpJ": "Secret", "rDQmGU": "Agent API key (valid for 24 hours)", "rEQceE": "Microsoft Authored", + "rGQ0Qx": "After export", + "rGWwuB": "Your logic app workspace from package has been created is ready to use.", "rGw0g0": "Loading action description...", "rHySVF": "Missing information for workflows creation", "rMYBfw": "Make the field optional", "rNi5Y3": "Select this checkbox if you're setting up an on-premises connection.", "rPw0Hp": "No Favorite actions or connectors found. Use the Star icon next to existing actions to add them to your favorites.", + "rREwxg": "Refresh", "rSIBjh": "Enter value for parameter.", "rSa1Id": "No files found in {filePath}, please save XSLT to specified path to use this function", "raBiud": "Required. Either an array of values to find the maximum value, or the first value of a set.", @@ -5283,6 +5689,7 @@ "sRpETS": "Warning: custom value does not match the schema node's type", "sVQe34": "Provide parameters to test the output.", "sVcvcG": "Basics", + "sXNnlg": "Logic app with rules engine", "sYQDN+": "Formatting options for font family", "sZ0G/Z": "Required. A string containing the unit of time specified in the interval to add.", "sZHTQV": "(UTC+09:00) Chita", @@ -5311,6 +5718,7 @@ "sv+IcU": "Unable to generate data map definition", "svaqnp": "Error should not be provided when status is \"Succeeded\"", "sw6EXK": "Status", + "swjISX": "Browse", "swt55B": "Suggested Triggers", "syFW9c": "Manage workflows in this template", "syiNc+": "Browse", @@ -5321,6 +5729,7 @@ "t/aciw": "The light image version of the workflow is required for publish.", "t0tN4J": "Code view", "t1cE+t": "The name users see when browsing templates in the gallery.", + "t2nswK": ".NET 8", "t5ECPm": "Search and select tools", "t7ytOJ": "Status", "t9RwOi": "The expression is invalid.", @@ -5373,7 +5782,9 @@ "tw6oMS": "Search for a connector", "twr0pi": "Copy trigger", "tzeDPE": "State type", + "u+VFmh": "Create project", "u0xUtD": "Open Chat in New Tab", + "u2mduv": "Export", "u2z3kg": "List of parameters in the template", "u60lSZ": "Name must be unique.", "u7p0Dp": "No connections found in this workflow", @@ -5453,6 +5864,7 @@ "vT0DCP": "Outputs", "vWR0op": "An error occurred while checking the name availability. Please try again later.", "vX9WYS": "Audience", + "vXqIg+": "Export location", "va40BJ": "Required. The name of the action whose outputs you want.", "vdtKjT": "To create and use an API connection, you must have a managed identity configured on this logic app.", "vhNDi9": "Add", @@ -5467,9 +5879,11 @@ "vp016T": "Select the agent parameter type", "vr70Gn": "Create a connection for {connectorName}.", "vrYqUF": "Enter custom value", + "vv8WR4": "Generate infrastructure files", "vvSHR8": "Navigate to element and view children", "vwH/XV": "Create parameter", "vxOc/M": "This contains a duplicate value", + "vyBSec": ".NET Framework", "vyddjn": "Showing {count} of {total}", "vz+t4/": "Using this trigger changes your workflow to a type that doesn’t support handoffs. Delete any handoffs to use this trigger.", "vzXXFP": "Workflow version", @@ -5498,6 +5912,7 @@ "wPi8wS": "----", "wPjnM9": "Paste a parallel action", "wPlTDB": "Full path", + "wPzyvX": "Export", "wQcEXt": "Required. The string that is searched for parameter 2 and updated with parameter 3, when parameter 2 is found in parameter 1.", "wQsEwc": "Required. The length of the substring.", "wT/gMB": "Key services this template integrates with.", @@ -5535,6 +5950,7 @@ "x74tKg": "hours", "x7IYBg": "Aborted", "x7XKH0": "Template classification. A single workflow creates a workflow template; multiple workflows create an accelerator template.", + "xBIh0S": "Workflow type", "xC1zg3": "Schemas", "xDHpeS": "Review your settings, ensure everything is correctly set up, and create your workflow.", "xFQXAI": "Ctrl + Z", @@ -5547,6 +5963,7 @@ "xMgLd8": "Minimum interval", "xN3GEX": "Enter password as plain text or use a secure parameter", "xPO/1M": "Register an MCP server that you create, starting with an empty logic app. Create tools that run connector actions so your server can perform tasks. Available logic apps depend on the Azure subscription for your API Center resource.", + "xQHAPW": ".NET Framework", "xQQ9ko": "Threshold", "xSMbKr": "Show raw inputs", "xSSfKC": "(UTC-03:00) Saint Pierre and Miquelon", @@ -5563,6 +5980,7 @@ "xfXUGz": "{count} Minute", "xgV4pp": "Select all", "xhBvXj": "Open test panel", + "xhJqo7": "Resource group", "xi2tn6": "Parameters", "xkCRtu": "Status", "xt5TeT": "Parameters are shared across workflows in a Logic App.", @@ -5589,12 +6007,15 @@ "yOyeBT": "Toggle minimap", "yQ6+nV": "Connect", "yRDuqj": "Show all", + "yRZ2Qm": "Clone connections", "yUNdJN": "Version: {version}", "yVFIAQ": "(UTC-01:00) Cabo Verde Is.", "yVh9kr": "8", + "yZ9m4I": "Logic app name", "yc0GcM": "Split a string or array into chunks of equal length", "ydqOly": "Choose a value", "yeagrz": "Ideal for request-response and processing IoT events", + "yen5zR": "Review and Validate", "yjierd": "Invalid expression type ''{type}''.", "yjjXCQ": "Close panel", "yk7L+4": "Dislike", @@ -5627,6 +6048,7 @@ "zOq84J": "Can't delete the last agent parameter.", "zOvGF8": "(UTC+02:00) Athens, Bucharest", "zPRSM9": "App identity is not configured on the logic app environment variables.", + "zTdffa": "Workflow name", "zUWAsJ": "Returns a boolean that indicates whether a string is an integer", "zUgja+": "Clear custom value", "zViEGr": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", diff --git a/apps/vs-code-designer/src/app/commands/workflows/openDesigner/openDesignerForLocalProject.ts b/apps/vs-code-designer/src/app/commands/workflows/openDesigner/openDesignerForLocalProject.ts index e487ebdac08..2ce7d279f82 100644 --- a/apps/vs-code-designer/src/app/commands/workflows/openDesigner/openDesignerForLocalProject.ts +++ b/apps/vs-code-designer/src/app/commands/workflows/openDesigner/openDesignerForLocalProject.ts @@ -52,6 +52,7 @@ import { createUnitTest } from '../unitTest/codefulUnitTest/createUnitTest'; import { createHttpHeaders } from '@azure/core-rest-pipeline'; import { getBundleVersionNumber } from '../../../utils/bundleFeed'; import { saveUnitTestDefinition } from '../../../utils/unitTest/codelessUnitTest'; +import * as DraftManager from '../../../utils/codeless/draftManager'; export default class OpenDesignerForLocalProject extends OpenDesignerBase { private readonly workflowFilePath: string; @@ -203,6 +204,9 @@ export default class OpenDesignerForLocalProject extends OpenDesignerBase { } }, 3000); + // Check for existing draft before sending init data + const draftResult = DraftManager.loadDraft(this.workflowFilePath); + this.sendMsgToWebview({ command: ExtensionCommand.initialize_frame, data: { @@ -222,6 +226,14 @@ export default class OpenDesignerForLocalProject extends OpenDesignerBase { isUnitTest: this.isUnitTest, unitTestDefinition: this.unitTestDefinition, runId: this.runId, + draftInfo: draftResult.hasDraft + ? { + hasDraft: true, + draftWorkflow: draftResult.draftWorkflow, + draftConnections: draftResult.draftConnections, + draftParameters: draftResult.draftParameters, + } + : undefined, }, }); @@ -233,6 +245,46 @@ export default class OpenDesignerForLocalProject extends OpenDesignerBase { // }); break; } + case ExtensionCommand.saveDraft: { + try { + DraftManager.saveDraft(this.workflowFilePath, { + definition: msg.definition, + connectionReferences: msg.connectionReferences, + parameters: msg.parameters, + }); + this.sendMsgToWebview({ + command: ExtensionCommand.draftSaveResult, + data: { + success: true, + timestamp: Date.now(), + }, + }); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Unknown error saving draft'; + this.sendMsgToWebview({ + command: ExtensionCommand.draftSaveResult, + data: { + success: false, + error: errorMessage, + timestamp: Date.now(), + }, + }); + } + break; + } + case ExtensionCommand.discardDraft: { + DraftManager.discardDraft(this.workflowFilePath); + this.panelMetadata = await this._getDesignerPanelMetadata(this.migrationOptions); + this.sendMsgToWebview({ + command: ExtensionCommand.update_panel_metadata, + data: { + panelMetadata: this.panelMetadata, + connectionData: this.connectionData, + apiHubServiceDetails: this.apiHubServiceDetails, + }, + }); + break; + } case ExtensionCommand.save: { await callWithTelemetryAndErrorHandling('SaveWorkflowFromDesigner', async (activateContext: IActionContext) => { // TODO(aeldridge): Temporarily removed validation due to 500 responses from validatePartial endpoint. Re-add once fixed. @@ -247,6 +299,8 @@ export default class OpenDesignerForLocalProject extends OpenDesignerBase { this.panelMetadata.azureDetails?.tenantId, this.panelMetadata.azureDetails?.workflowManagementBaseUrl ); + // Clean up draft files after successful publish + DraftManager.discardDraft(this.workflowFilePath); // const savedLocalSettingsValues = (await getLocalSettingsJson(activateContext, localSettingsPath, true)).Values || {}; // let savedWorkflow: any; diff --git a/apps/vs-code-designer/src/app/utils/codeless/draftManager.ts b/apps/vs-code-designer/src/app/utils/codeless/draftManager.ts new file mode 100644 index 00000000000..e291b5e0ac9 --- /dev/null +++ b/apps/vs-code-designer/src/app/utils/codeless/draftManager.ts @@ -0,0 +1,90 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import { draftWorkflowFileName, draftConnectionsFileName, draftParametersFileName } from '../../../constants'; +import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'fs'; +import * as path from 'path'; + +export interface DraftData { + definition: any; + connectionReferences?: any; + parameters?: any; +} + +export interface LoadDraftResult { + hasDraft: boolean; + draftWorkflow?: any; + draftConnections?: any; + draftParameters?: any; +} + +export function getDraftWorkflowPath(workflowFilePath: string): string { + return path.join(path.dirname(workflowFilePath), draftWorkflowFileName); +} + +export function getDraftConnectionsPath(workflowFilePath: string): string { + return path.join(path.dirname(workflowFilePath), draftConnectionsFileName); +} + +export function getDraftParametersPath(workflowFilePath: string): string { + return path.join(path.dirname(workflowFilePath), draftParametersFileName); +} + +export function hasDraft(workflowFilePath: string): boolean { + return existsSync(getDraftWorkflowPath(workflowFilePath)); +} + +export function saveDraft(workflowFilePath: string, data: DraftData): void { + const dir = path.dirname(workflowFilePath); + mkdirSync(dir, { recursive: true }); + + writeFileSync(getDraftWorkflowPath(workflowFilePath), JSON.stringify(data.definition, null, 4), 'utf8'); + + if (data.connectionReferences) { + writeFileSync(getDraftConnectionsPath(workflowFilePath), JSON.stringify(data.connectionReferences, null, 4), 'utf8'); + } + + if (data.parameters) { + writeFileSync(getDraftParametersPath(workflowFilePath), JSON.stringify(data.parameters, null, 4), 'utf8'); + } +} + +export function loadDraft(workflowFilePath: string): LoadDraftResult { + const draftWorkflowPath = getDraftWorkflowPath(workflowFilePath); + + if (!existsSync(draftWorkflowPath)) { + return { hasDraft: false }; + } + + const result: LoadDraftResult = { + hasDraft: true, + draftWorkflow: JSON.parse(readFileSync(draftWorkflowPath, 'utf8')), + }; + + const draftConnectionsPath = getDraftConnectionsPath(workflowFilePath); + if (existsSync(draftConnectionsPath)) { + result.draftConnections = JSON.parse(readFileSync(draftConnectionsPath, 'utf8')); + } + + const draftParametersPath = getDraftParametersPath(workflowFilePath); + if (existsSync(draftParametersPath)) { + result.draftParameters = JSON.parse(readFileSync(draftParametersPath, 'utf8')); + } + + return result; +} + +export function discardDraft(workflowFilePath: string): void { + const filesToDelete = [ + getDraftWorkflowPath(workflowFilePath), + getDraftConnectionsPath(workflowFilePath), + getDraftParametersPath(workflowFilePath), + ]; + + for (const filePath of filesToDelete) { + if (existsSync(filePath)) { + unlinkSync(filePath); + } + } +} diff --git a/apps/vs-code-designer/src/constants.ts b/apps/vs-code-designer/src/constants.ts index aa6349043d1..8ded39d4c61 100644 --- a/apps/vs-code-designer/src/constants.ts +++ b/apps/vs-code-designer/src/constants.ts @@ -18,6 +18,9 @@ export const launchFileName = 'launch.json'; export const settingsFileName = 'settings.json'; export const extensionsFileName = 'extensions.json'; export const workflowFileName = 'workflow.json'; +export const draftWorkflowFileName = 'workflow.draft.json'; +export const draftConnectionsFileName = 'connections.draft.json'; +export const draftParametersFileName = 'parameters.draft.json'; export const codefulWorkflowFileName = 'workflow.cs'; export const funcIgnoreFileName = '.funcignore'; export const unitTestsFileName = '.unit-test.json'; diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx b/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx index 6598e226486..76d749a1a60 100644 --- a/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx @@ -17,12 +17,14 @@ import { type RootState, resetDesignerView, collapsePanel, + useChangeCount, } from '@microsoft/logic-apps-designer-v2'; -import { isNullOrEmpty, type Workflow } from '@microsoft/logic-apps-shared'; +import { isNullOrEmpty, useThrottledEffect, type Workflow } from '@microsoft/logic-apps-shared'; import { ExtensionCommand } from '@microsoft/vscode-extension-logic-apps'; -import { useContext, useMemo } from 'react'; +import { useContext, useEffect, useMemo, useState } from 'react'; import { useMutation } from '@tanstack/react-query'; import { + Badge, Button, Card, Divider, @@ -36,6 +38,7 @@ import { Spinner, Toolbar, ToolbarButton, + Tooltip, } from '@fluentui/react-components'; import { SaveRegular, @@ -57,10 +60,16 @@ import { CheckmarkFilled, ArrowUndoFilled, ArrowUndoRegular, + ArrowSyncFilled, + CheckmarkCircleRegular, + DocumentOnePageAddFilled, + DocumentOnePageAddRegular, + DocumentOnePageColumnsFilled, + DocumentOnePageColumnsRegular, } from '@fluentui/react-icons'; import { useCommandBarStyles } from './styles'; import { useSelector } from 'react-redux'; -import { useIntlMessages, designerMessages } from '../../../intl'; +import { useIntlMessages, useIntlFormatters, designerMessages } from '../../../intl'; // Designer icons const SaveIcon = bundleIcon(SaveFilled, SaveRegular); @@ -77,6 +86,10 @@ const MoreHorizontalIcon = bundleIcon(MoreHorizontalFilled, MoreHorizontalRegula // Unit test icons const AssertionsIcon = bundleIcon(CheckmarkFilled, CheckmarkRegular); +// Draft/publish icons +const DocumentOnePageAddIcon = bundleIcon(DocumentOnePageAddFilled, DocumentOnePageAddRegular); +const DocumentOnePageColumnsIcon = bundleIcon(DocumentOnePageColumnsFilled, DocumentOnePageColumnsRegular); + export interface DesignerCommandBarProps { isDarkMode: boolean; isUnitTest: boolean; @@ -91,6 +104,14 @@ export interface DesignerCommandBarProps { switchToDesignerView: () => void; switchToCodeView: () => void; switchToMonitoringView: () => void; + isDraftMode: boolean; + saveDraftWorkflow: (definition: any, parameters: any, connectionReferences: any) => void; + discardDraft: () => void; + switchWorkflowMode: (toDraftMode: boolean) => void; + lastDraftSaveTime: number | null; + draftSaveError: string | null; + isDraftSaving: boolean; + hasDraft: boolean; } export const DesignerCommandBar: React.FC = ({ @@ -107,15 +128,27 @@ export const DesignerCommandBar: React.FC = ({ switchToDesignerView, switchToCodeView, switchToMonitoringView, + isDraftMode, + saveDraftWorkflow, + discardDraft, + switchWorkflowMode, + lastDraftSaveTime, + draftSaveError, + isDraftSaving, + hasDraft, }) => { const vscode = useContext(VSCodeContext); const dispatch = DesignerStore.dispatch; const styles = useCommandBarStyles(); const intlText = useIntlMessages(designerMessages); + const formatters = useIntlFormatters(designerMessages); const designerIsDirty = useIsDesignerDirty(); + const [autoSaving, setAutoSaving] = useState(false); + const [autosaveError, setAutosaveError] = useState(); + const { isLoading: isSaving, mutate: saveWorkflowMutate } = useMutation(async () => { try { const designerState = DesignerStore.getState(); @@ -152,6 +185,48 @@ export const DesignerCommandBar: React.FC = ({ } }); + // Auto-save draft mutation + const { mutate: autoSaveMutate } = useMutation(async () => { + try { + setAutoSaving(true); + setAutosaveError(undefined); + const designerState = DesignerStore.getState(); + const serializedWorkflow = await serializeBJSWorkflow(designerState, { + skipValidation: true, + ignoreNonCriticalErrors: true, + }); + saveDraftWorkflow(serializedWorkflow.definition, serializedWorkflow.parameters, serializedWorkflow.connectionReferences); + } catch (error: any) { + console.error('Error auto-saving draft:', error); + setAutosaveError(error?.message ?? 'Unknown error during auto-save'); + } finally { + setAutoSaving(false); + } + }); + + // When any change is made, set needsSaved to true + const changeCount = useChangeCount(); + const [needsSaved, setNeedsSaved] = useState(false); + useEffect(() => { + if (changeCount === 0) { + return; + } + setNeedsSaved(true); + }, [changeCount]); + + // Auto-save every 5 seconds if needed + useThrottledEffect( + () => { + if (!needsSaved || !isDraftMode || isSaving || isMonitoringView) { + return; + } + setNeedsSaved(false); + autoSaveMutate(); + }, + [isDraftMode, isSaving, isMonitoringView, needsSaved, autoSaveMutate], + 5000 + ); + const { mutate: saveWorkflowFromCode, isLoading: isSavingFromCode } = useMutation(async () => { _saveWorkflowFromCode(() => dispatch(resetDesignerDirtyState(undefined))); }); @@ -233,8 +308,8 @@ export const DesignerCommandBar: React.FC = ({ ); const isSaveDisabled = useMemo( - () => isMonitoringView || isSaving || isSavingFromCode || haveErrors || !designerIsDirty, - [isMonitoringView, isSaving, isSavingFromCode, haveErrors, designerIsDirty] + () => isMonitoringView || isSaving || isSavingFromCode || haveErrors || (!designerIsDirty && !hasDraft) || !isDraftMode, + [isMonitoringView, isSaving, isSavingFromCode, haveErrors, designerIsDirty, hasDraft, isDraftMode] ); const ViewModeSelect = () => ( @@ -249,7 +324,7 @@ export const DesignerCommandBar: React.FC = ({ switchToDesignerView(); }} > - Workflow + {intlText.WORKFLOW_TAB} ); - const SaveButton = () => ( - { - if (isDesignerView) { - saveWorkflowMutate(); - } else { - saveWorkflowFromCode(); - } - }} - icon={isSaving ? : undefined} - > - {isSaving ? 'Saving' : 'Save'} - - ); + const SaveButton = () => { + const publishLoading = !autoSaving && isSaving; + return ( + { + if (isDesignerView) { + saveWorkflowMutate(); + } else { + saveWorkflowFromCode(); + } + }} + icon={publishLoading ? : undefined} + > + {publishLoading ? intlText.PUBLISHING : intlText.PUBLISH} + + ); + }; - const DiscardButton = () => ( - } - onClick={discard} - disabled={isSaving || isMonitoringView || !designerIsDirty} - /> - ); + const DiscardButton = () => { + if (hasDraft) { + return ( + + + } disabled={isSaving || isMonitoringView} /> + + + + + {intlText.DISCARD_SESSION_CHANGES} + + {intlText.DISCARD_DRAFT} + + + + ); + } + + return ( + } + onClick={discard} + disabled={isSaving || isMonitoringView || !designerIsDirty} + /> + ); + }; + + const DraftSaveNotification = () => { + const [, setTick] = useState(0); + + useEffect(() => { + if (isDraftMode && lastDraftSaveTime) { + const interval = setInterval(() => { + setTick((prev) => prev + 1); + }, 2000); + + return () => clearInterval(interval); + } + return undefined; + }, []); + + if (isDraftMode && (isDesignerView || isCodeView)) { + const style = { fontStyle: 'italic' as const, fontSize: '12px' }; + const iconStyle = { fontSize: '16px' }; + + if (isDraftSaving || autoSaving || needsSaved) { + return ( + }> + {intlText.SAVING_DRAFT} + + ); + } + + const savedTime = lastDraftSaveTime ? new Date(lastDraftSaveTime) : null; + + return savedTime ? ( + + }> + {getRelativeTimeString(savedTime, { + secondsAgo: intlText.AUTOSAVED_SECONDS_AGO, + minutesAgo: intlText.AUTOSAVED_MINUTES_AGO, + oneHourAgo: intlText.AUTOSAVED_ONE_HOUR_AGO, + hoursAgo: formatters.AUTOSAVED_HOURS_AGO, + })} + + + ) : draftSaveError || autosaveError ? ( + + }> + {intlText.ERROR_AUTOSAVING_DRAFT} + + + ) : null; + } + return null; + }; const UnitTestItems = () => ( <> @@ -356,10 +504,21 @@ export const DesignerCommandBar: React.FC = ({ const OverflowMenu = () => ( - } /> + } /> + {hasDraft && isDraftMode && ( + switchWorkflowMode(false)} icon={}> + {intlText.SWITCH_TO_PUBLISHED} + + )} + {hasDraft && !isDraftMode && ( + switchWorkflowMode(true)} icon={}> + {intlText.SWITCH_TO_DRAFT} + + )} + {hasDraft && } {isLocal && ( }> {intlText.CREATE_UNIT_TEST_FROM_RUN} @@ -395,6 +554,7 @@ export const DesignerCommandBar: React.FC = ({ >
+ @@ -402,3 +562,27 @@ export const DesignerCommandBar: React.FC = ({ ); }; + +const getRelativeTimeString = ( + savedTime: Date, + messages: { + secondsAgo: string; + minutesAgo: string; + oneHourAgo: string; + hoursAgo: (values?: Record) => string; + } +) => { + const now = new Date(); + const diffMs = now.getTime() - savedTime.getTime(); + const diffSeconds = Math.floor(diffMs / 1000); + const diffMinutes = Math.floor(diffSeconds / 60); + const diffHours = Math.floor(diffMinutes / 60); + + if (diffHours > 0) { + return diffHours === 1 ? messages.oneHourAgo : messages.hoursAgo({ count: diffHours }); + } + if (diffMinutes > 0) { + return messages.minutesAgo; + } + return messages.secondsAgo; +}; diff --git a/apps/vs-code-react/src/app/designer/appV2.tsx b/apps/vs-code-react/src/app/designer/appV2.tsx index 586056d2b55..66bc9e597ce 100644 --- a/apps/vs-code-react/src/app/designer/appV2.tsx +++ b/apps/vs-code-react/src/app/designer/appV2.tsx @@ -1,4 +1,13 @@ -import { createFileSystemConnection, updateUnitTestDefinition } from '../../state/DesignerSlice'; +import { + createFileSystemConnection, + updateUnitTestDefinition, + clearDraftState, + setDraftMode, + setDraftSaving, + updateDraftWorkflow, + updateDraftConnections, + updateDraftParameters, +} from '../../state/DesignerSlice'; import type { AppDispatch, RootState } from '../../state/store'; import { VSCodeContext } from '../../webviewCommunication'; import { DesignerCommandBar } from './DesignerCommandBar/indexV2'; @@ -48,6 +57,14 @@ export const DesignerApp = () => { isUnitTest, unitTestDefinition, workflowRuntimeBaseUrl, + isDraftMode, + hasDraft, + draftWorkflow, + draftConnections, + draftParameters, + lastDraftSaveTime, + draftSaveError, + isDraftSaving, } = vscodeState; const [currentView, setCurrentView] = useState(_isMonitoringView ? DesignerViewType.Monitoring : DesignerViewType.Workflow); @@ -86,6 +103,55 @@ export const DesignerApp = () => { setDesignerID(guid()); }, []); + const saveDraftWorkflow = useCallback( + (definition: any, parameters: any, connectionReferences: any) => { + dispatch(setDraftSaving(true)); + // Keep all draft artifacts in Redux so switchWorkflowMode has fresh data + dispatch(updateDraftWorkflow(definition)); + dispatch(updateDraftConnections(connectionReferences)); + dispatch(updateDraftParameters(parameters)); + vscode.postMessage({ + command: ExtensionCommand.saveDraft, + definition, + parameters, + connectionReferences, + }); + }, + [vscode, dispatch] + ); + + const discardDraft = useCallback(() => { + vscode.postMessage({ + command: ExtensionCommand.discardDraft, + }); + dispatch(clearDraftState()); + setWorkflow(initialWorkflow); + setDesignerID(guid()); + }, [vscode, dispatch, initialWorkflow]); + + const switchWorkflowMode = useCallback( + (toDraftMode: boolean) => { + dispatch(setDraftMode(toDraftMode)); + if (toDraftMode) { + // Switching to draft: restore latest draft workflow from Redux + const currentDraftWorkflow = vscodeState.draftWorkflow; + if (vscodeState.hasDraft && currentDraftWorkflow && panelMetaData?.standardApp) { + const draftApp = { + ...panelMetaData.standardApp, + definition: currentDraftWorkflow, + } as StandardApp; + setWorkflow(draftApp); + } + } else { + // Switching to published: restore initial (published) workflow + setWorkflow(initialWorkflow); + } + setWorkflowDefinitionId(guid()); + setDesignerID(guid()); + }, + [dispatch, vscodeState, panelMetaData?.standardApp, initialWorkflow] + ); + const services = useMemo(() => { const fileSystemConnectionCreate = async ( connectionInfo: FileSystemConnectionInfo, @@ -134,8 +200,20 @@ export const DesignerApp = () => { ]); const connectionReferences: ConnectionReferences = useMemo(() => { + // Draft connections are already in ConnectionReferences format (from serialization). + // Published connections need conversion from ConnectionsData format. + if (isDraftMode && hasDraft && draftConnections) { + return draftConnections; + } return convertConnectionsDataToReferences(connectionData); - }, [connectionData]); + }, [connectionData, isDraftMode, hasDraft, draftConnections]); + + const parametersData = useMemo(() => { + if (isDraftMode && hasDraft && draftParameters) { + return draftParameters; + } + return panelMetaData?.parametersData; + }, [panelMetaData?.parametersData, isDraftMode, hasDraft, draftParameters]); const isMultiVariableSupportEnabled = useMemo( () => isVersionSupported(panelMetaData?.extensionBundleVersion ?? '', BundleVersionRequirements.MULTI_VARIABLE), @@ -170,9 +248,27 @@ export const DesignerApp = () => { }, [runInstance, isMonitoringView, isUnitTest, unitTestDefinition, services, dispatch]); useEffect(() => { - setWorkflow(panelMetaData?.standardApp); - setCustomCode(panelMetaData?.customCodeData); - }, [panelMetaData]); + if (!panelMetaData?.standardApp) { + return; + } + const publishedApp = panelMetaData.standardApp; + setInitialWorkflow(publishedApp); + setCustomCode(panelMetaData.customCodeData); + + // If a draft exists and we're in draft mode, show the draft workflow. + // Draft data arrives atomically with panelMetaData (via initializeDesigner), + // so hasDraft and draftWorkflow are already set when this effect runs. + if (hasDraft && draftWorkflow && isDraftMode) { + const draftApp = { + ...publishedApp, + definition: draftWorkflow, + } as StandardApp; + setWorkflow(draftApp); + } else { + setWorkflow(publishedApp); + } + setWorkflowDefinitionId(guid()); + }, [panelMetaData]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { if (runInstance) { @@ -206,6 +302,7 @@ export const DesignerApp = () => { setWorkflow(newWorkflow); setInitialWorkflow(newWorkflow); clearDirtyState?.(); + dispatch(clearDraftState()); return { definition, parameters, @@ -213,7 +310,7 @@ export const DesignerApp = () => { customCodeData, }; }, - [vscode, workflow] + [vscode, workflow, dispatch] ); const validateAndSaveCodeView = useCallback( @@ -317,7 +414,7 @@ export const DesignerApp = () => { isDarkMode: theme === Theme.Dark, isVSCode: true, isUnitTest, - readOnly: readOnly || isMonitoringView, + readOnly: readOnly || isMonitoringView || (hasDraft && !isDraftMode), isMonitoringView, services: services, hostOptions: { @@ -332,7 +429,7 @@ export const DesignerApp = () => { workflow={{ definition: workflow.definition, connectionReferences, - parameters: panelMetaData?.parametersData, + parameters: parametersData, kind: workflow.kind, }} workflowId={workflowDefinitionId} @@ -355,6 +452,14 @@ export const DesignerApp = () => { switchToDesignerView={switchToDesignerView} switchToCodeView={switchToCodeView} switchToMonitoringView={switchToMonitoringView} + isDraftMode={isDraftMode} + saveDraftWorkflow={saveDraftWorkflow} + discardDraft={discardDraft} + switchWorkflowMode={switchWorkflowMode} + lastDraftSaveTime={lastDraftSaveTime} + draftSaveError={draftSaveError} + isDraftSaving={isDraftSaving} + hasDraft={hasDraft} /> {!isCodeView && ( diff --git a/apps/vs-code-react/src/intl/messages.ts b/apps/vs-code-react/src/intl/messages.ts index e74ee2d9e2e..8e0796fb913 100644 --- a/apps/vs-code-react/src/intl/messages.ts +++ b/apps/vs-code-react/src/intl/messages.ts @@ -1044,6 +1044,91 @@ export const designerMessages = defineMessages({ id: 'JBRP7/', description: 'Chat button tooltip content', }, + WORKFLOW_TAB: { + defaultMessage: 'Workflow', + id: 'eBUll8', + description: 'Workflow view tab label', + }, + CODE_TAB: { + defaultMessage: 'Code', + id: '51R+Yi', + description: 'Code view tab label', + }, + RUN_HISTORY_TAB: { + defaultMessage: 'Run history', + id: 'VX+NSO', + description: 'Run history view tab label', + }, + PUBLISH: { + defaultMessage: 'Publish', + id: '/G2PKx', + description: 'Publish workflow button text', + }, + PUBLISHING: { + defaultMessage: 'Publishing...', + id: 't+O3cA', + description: 'Publishing workflow in progress text', + }, + DISCARD_SESSION_CHANGES: { + defaultMessage: 'Discard session changes', + id: 'G/cgpt', + description: 'Discard session changes menu item', + }, + DISCARD_DRAFT: { + defaultMessage: 'Discard draft (revert to published)', + id: '/Z4h+e', + description: 'Discard draft and revert to published menu item', + }, + SAVING_DRAFT: { + defaultMessage: 'Saving...', + id: 'WX0qjz', + description: 'Draft saving in progress text', + }, + ERROR_AUTOSAVING_DRAFT: { + defaultMessage: 'Error autosaving draft', + id: 'qPTkCH', + description: 'Draft auto-save error badge text', + }, + SWITCH_TO_PUBLISHED: { + defaultMessage: 'Switch to published version', + id: 'pEYjPM', + description: 'Switch to published version menu item', + }, + SWITCH_TO_DRAFT: { + defaultMessage: 'Switch to draft version', + id: 'WcfWf+', + description: 'Switch to draft version menu item', + }, + MORE_ACTIONS: { + defaultMessage: 'More', + id: 'RJt+Xc', + description: 'More actions overflow button aria label', + }, + AUTOSAVED_SECONDS_AGO: { + defaultMessage: 'Autosaved a few seconds ago', + id: 'eQH2yV', + description: 'Autosaved a few seconds ago text', + }, + AUTOSAVED_MINUTES_AGO: { + defaultMessage: 'Autosaved a few minutes ago', + id: 'PLsANU', + description: 'Autosaved a few minutes ago text', + }, + AUTOSAVED_ONE_HOUR_AGO: { + defaultMessage: 'Autosaved 1 hour ago', + id: 'usAOQT', + description: 'Autosaved one hour ago text', + }, + AUTOSAVED_HOURS_AGO: { + defaultMessage: 'Autosaved {count} hours ago', + id: 'PdiacD', + description: 'Autosaved multiple hours ago text', + }, + DRAFT_AUTOSAVED_AT: { + defaultMessage: 'Draft autosaved at: {time}', + id: '2EPQQD', + description: 'Draft autosaved tooltip showing exact time', + }, }); export const overviewMessages = defineMessages({ diff --git a/apps/vs-code-react/src/run-service/types.ts b/apps/vs-code-react/src/run-service/types.ts index 217877f4d53..43212d76f4f 100644 --- a/apps/vs-code-react/src/run-service/types.ts +++ b/apps/vs-code-react/src/run-service/types.ts @@ -295,6 +295,25 @@ export interface UpdatePanelMetadataMessage { }; } +export interface DraftLoadedMessage { + command: typeof ExtensionCommand.draftLoaded; + data: { + hasDraft: boolean; + draftWorkflow?: any; + draftConnections?: any; + draftParameters?: any; + }; +} + +export interface DraftSaveResultMessage { + command: typeof ExtensionCommand.draftSaveResult; + data: { + success: boolean; + timestamp: number; + error?: string; + }; +} + // Rest of Message Interfaces export interface InjectValuesMessage { command: typeof ExtensionCommand.initialize_frame; diff --git a/apps/vs-code-react/src/state/DesignerSlice.ts b/apps/vs-code-react/src/state/DesignerSlice.ts index 56f8886e6a2..4664d6b90b8 100644 --- a/apps/vs-code-react/src/state/DesignerSlice.ts +++ b/apps/vs-code-react/src/state/DesignerSlice.ts @@ -26,6 +26,14 @@ export interface DesignerState { hostVersion: string; isUnitTest: boolean; unitTestDefinition: UnitTestDefinition | null; + isDraftMode: boolean; + hasDraft: boolean; + draftWorkflow: any | null; + draftConnections: any | null; + draftParameters: any | null; + lastDraftSaveTime: number | null; + draftSaveError: string | null; + isDraftSaving: boolean; } const initialState: DesignerState = { @@ -57,6 +65,14 @@ const initialState: DesignerState = { hostVersion: '', isUnitTest: false, unitTestDefinition: null, + isDraftMode: true, + hasDraft: false, + draftWorkflow: null, + draftConnections: null, + draftParameters: null, + lastDraftSaveTime: null, + draftSaveError: null, + isDraftSaving: false, }; export const designerSlice = createSlice({ @@ -80,6 +96,7 @@ export const designerSlice = createSlice({ isUnitTest, unitTestDefinition, workflowRuntimeBaseUrl, + draftInfo, } = action.payload; state.panelMetaData = panelMetadata; @@ -96,6 +113,22 @@ export const designerSlice = createSlice({ state.hostVersion = hostVersion; state.isUnitTest = isUnitTest; state.unitTestDefinition = unitTestDefinition; + + // Process draft info if included in initialization + if (draftInfo?.hasDraft) { + state.hasDraft = true; + state.isDraftMode = true; + state.draftWorkflow = draftInfo.draftWorkflow ?? null; + state.draftConnections = draftInfo.draftConnections ?? null; + state.draftParameters = draftInfo.draftParameters ?? null; + } else { + // No draft exists - still in draft mode (editable) but no draft files + state.hasDraft = false; + state.isDraftMode = true; + state.draftWorkflow = null; + state.draftConnections = null; + state.draftParameters = null; + } }, updateRuntimeBaseUrl: (state, action: PayloadAction) => { state.workflowRuntimeBaseUrl = action.payload ?? ''; @@ -135,6 +168,62 @@ export const designerSlice = createSlice({ const { unitTestDefinition } = action.payload; state.unitTestDefinition = unitTestDefinition; }, + loadDraftState: ( + state, + action: PayloadAction<{ + hasDraft: boolean; + draftWorkflow?: any; + draftConnections?: any; + draftParameters?: any; + }> + ) => { + state.hasDraft = action.payload.hasDraft; + state.draftWorkflow = action.payload.draftWorkflow ?? null; + state.draftConnections = action.payload.draftConnections ?? null; + state.draftParameters = action.payload.draftParameters ?? null; + }, + updateDraftSaveResult: ( + state, + action: PayloadAction<{ + success: boolean; + timestamp: number; + error?: string; + }> + ) => { + state.isDraftSaving = false; + if (action.payload.success) { + state.lastDraftSaveTime = action.payload.timestamp; + state.draftSaveError = null; + state.hasDraft = true; + } else { + state.draftSaveError = action.payload.error ?? 'Unknown error'; + } + }, + setDraftSaving: (state, action: PayloadAction) => { + state.isDraftSaving = action.payload; + }, + updateDraftWorkflow: (state, action: PayloadAction) => { + state.draftWorkflow = action.payload; + }, + updateDraftConnections: (state, action: PayloadAction) => { + state.draftConnections = action.payload; + }, + updateDraftParameters: (state, action: PayloadAction) => { + state.draftParameters = action.payload; + }, + setDraftMode: (state, action: PayloadAction) => { + state.isDraftMode = action.payload; + }, + clearDraftState: (state) => { + state.hasDraft = false; + state.draftWorkflow = null; + state.draftConnections = null; + state.draftParameters = null; + state.lastDraftSaveTime = null; + state.draftSaveError = null; + state.isDraftSaving = false; + state.isDraftMode = true; + }, }, }); @@ -146,4 +235,12 @@ export const { updateFileSystemConnection, updatePanelMetadata, updateUnitTestDefinition, + loadDraftState, + updateDraftSaveResult, + setDraftSaving, + updateDraftWorkflow, + updateDraftConnections, + updateDraftParameters, + setDraftMode, + clearDraftState, } = designerSlice.actions; diff --git a/apps/vs-code-react/src/webviewCommunication.tsx b/apps/vs-code-react/src/webviewCommunication.tsx index 1b70e586977..1cbc7eb02bb 100644 --- a/apps/vs-code-react/src/webviewCommunication.tsx +++ b/apps/vs-code-react/src/webviewCommunication.tsx @@ -19,6 +19,8 @@ import type { GetTestFeatureEnablementStatus, GetAvailableCustomXsltPathsMessageV2, ResetDesignerDirtyStateMessage, + DraftLoadedMessage, + DraftSaveResultMessage, UpdateWorkspacePathMessage, UpdateWorkspacePackageMessage, ValidateWorkspacePathMessage, @@ -59,6 +61,8 @@ import { updateFileSystemConnection, updatePanelMetadata, updateRuntimeBaseUrl, + loadDraftState, + updateDraftSaveResult, } from './state/DesignerSlice'; import type { InitializePayload } from './state/WorkflowSlice'; import { @@ -97,7 +101,9 @@ type DesignerMessageType = | ReceiveCallbackMessage | ResetDesignerDirtyStateMessage | CompleteFileSystemConnectionMessage - | UpdatePanelMetadataMessage; + | UpdatePanelMetadataMessage + | DraftLoadedMessage + | DraftSaveResultMessage; type DataMapperMessageType = | FetchSchemaMessage | LoadDataMapMessage @@ -187,6 +193,14 @@ export const WebViewCommunication: React.FC<{ children: ReactNode }> = ({ childr designerDispatch(resetDesignerDirtyState(undefined)); break; } + case ExtensionCommand.draftLoaded: { + dispatch(loadDraftState(message.data)); + break; + } + case ExtensionCommand.draftSaveResult: { + dispatch(updateDraftSaveResult(message.data)); + break; + } case ExtensionCommand.getDesignerVersion: { dispatch(changeDesignerVersion(message.data)); break; diff --git a/libs/vscode-extension/src/lib/models/extensioncommand.ts b/libs/vscode-extension/src/lib/models/extensioncommand.ts index ad9b4e7648a..1ecd19facb6 100644 --- a/libs/vscode-extension/src/lib/models/extensioncommand.ts +++ b/libs/vscode-extension/src/lib/models/extensioncommand.ts @@ -54,6 +54,10 @@ export const ExtensionCommand = { isTestDisabledForOS: 'isTestDisabledForOS', fileABug: 'fileABug', resetDesignerDirtyState: 'resetDesignerDirtyState', + saveDraft: 'SaveDraft', + draftLoaded: 'DraftLoaded', + draftSaveResult: 'DraftSaveResult', + discardDraft: 'DiscardDraft', switchToDataMapperV2: 'switchToDataMapperV2', pickProcess: 'pickProcess', createWorkspace: 'createWorkspace', From deb6921845a136c3dbc23d29b76251582ce36f5c Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Thu, 12 Feb 2026 16:19:26 -0800 Subject: [PATCH 2/6] added tests --- Localize/lang/strings.json | 422 ------------------ .../codeless/__test__/draftManager.test.ts | 225 ++++++++++ .../src/state/__test__/DesignerSlice.test.ts | 296 ++++++++++++ 3 files changed, 521 insertions(+), 422 deletions(-) create mode 100644 apps/vs-code-designer/src/app/utils/codeless/__test__/draftManager.test.ts create mode 100644 apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts diff --git a/Localize/lang/strings.json b/Localize/lang/strings.json index 77cfeb55565..52f06cc79b7 100644 --- a/Localize/lang/strings.json +++ b/Localize/lang/strings.json @@ -5,7 +5,6 @@ "+3rROX": "Protected", "+64+eE": "Cancel", "+7+u4y": "Failed to initialize the following operations. Please try again later.", - "+AFyLk": "Finish", "+DmIHG": "Built-in", "+EREVh": "Name", "+FcXe9": "Faulted", @@ -16,7 +15,6 @@ "+M72+a": "Overview", "+M7bC6": "Succeeded with retries", "+Oshid": "Select Type", - "+P+nuy": "Workflow that supports natural language, human interaction, and agents connected to LLMs", "+QFwA1": "Key-based", "+QUFXQ": "OK", "+R82zZ": "No results found", @@ -31,7 +29,6 @@ "+gBLFF": "Your template has been saved.", "+iPg27": "Delete", "+ijo/2": "Paste last used expression", - "+itf/D": "Save", "+l5XmZ": "Enter a positive integer between {min} and {max}", "+mAJR3": "(UTC+08:00) Kuala Lumpur, Singapore", "+mNJQl": "Create a logic app", @@ -40,10 +37,8 @@ "+oelX4": "Required. The string to examine.", "+powfX": "Time zone", "+tCJ2g": "On", - "+u2tgz": "Create workspace", "+xXHdp": "No outputs", "+yTsXQ": "Add workflows for this template", - "+zIx77": "Choose your target subscription and location", "/21RuK": "Workflow name must start with a letter and can contain letters, numbers (0-9), dashes ('-'), and underscores ('_').", "/2V8bQ": "Timed out", "/4vNBB": "Search logic apps...", @@ -66,8 +61,6 @@ "/csbOB": "Retry policy count is invalid (must be from {min} to {max})", "/doURb": "Convert the input to an array", "/km5eO": "(UTC-04:00) Asuncion", - "/kz09u": "Function folder name cannot be the same as the logic app name.", - "/ld6GS": "Logic app type", "/mjH84": "Show raw outputs", "/n13VL": "Properties", "/qCaDo": "Indicates to template users whether the parameter must be filled to proceed", @@ -86,7 +79,6 @@ "00xlpa": "Shared", "03RO5d": "Edit parameter", "04AwK7": "Error code: ''{errorCode}'', Message: ''{message}''.", - "06T/X8": "Export custom API actions to API management", "06zKZg": "(UTC+04:00) Tbilisi", "07ZsoY": "Returns the start of the hour to a string timestamp passed in", "07oZoX": "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky", @@ -101,7 +93,6 @@ "0FzNJV": "Required. The base64 encoded string.", "0G6CfM": "Model", "0GT0SI": "Cancel", - "0H5p4k": "Select workflow type", "0IRUjM": "Select a target schema node to start mapping", "0JIDLK": "There are multiple consecutive Initialize Variable actions in this workflow. Would you like to combine them into a single action?", "0JTHTZ": "Show run menu", @@ -121,13 +112,10 @@ "0l+F9w": "Description", "0m0zNa": "Connector Type", "0m2Y1/": "Value", - "0n/bOI": "The name can contain only alphanumeric characters or the following symbols: . _ - ( )", "0oebOm": "Outputs", "0p+pJq": "Returns the remainder after dividing the two numbers (modulo)", "0qV0Qe": "Required. The string that may contain the value.", - "0rJ6RJ": "Loading...", "0sbIhI": "Production", - "0uiwQZ": "Complete export", "0uj1Li": "Returns a binary representation of an input data URI string", "0upuCv": "Hour", "0uuxAX": "Delete mapping", @@ -138,7 +126,6 @@ "0xLWzG": "The name already exists or is invalid. Update the name before you continue.", "0y5eia": "More commands", "0zMOIe": "Connector Name", - "1+JO/G": "Designer view", "1+Z8n9": "Required. The data URI to convert to String representation.", "109OPL": "Returns the port from a URI. If port is not specified, returns the default port for the protocol", "10b+jL": "Parameters", @@ -162,7 +149,6 @@ "1Xke9D": "open functions drawer", "1YUi9I": "Add a hand-off agent", "1ZrOYn": "AI Foundry Project", - "1b4sPR": "Review + create", "1dlfUe": "Actions perform operations on data, communicate between systems, or run other tasks.", "1eKQwo": "(UTC+08:00) Perth", "1f7LG4": "Fixed interval", @@ -171,7 +157,6 @@ "1hPZqe": "The number of times to retry the request", "1htSs7": "Off", "1i3RKp": "Published for Testing", - "1jaOSf": "Logic app name cannot be the same as the function folder name.", "1jf3Dq": "Z to A, descending", "1jhzOM": "Required. The object to check if it is less than value being compared to.", "1lLI6H": "Workflow summary is required for publish.", @@ -182,13 +167,11 @@ "1tmN2o": "Workflow version", "1uGBLP": "5", "1x5IuY": "No connectors found", - "1xa4kY": "No details available", "20oqsp": "Add children (recursive)", "23fENy": "Returns a binary representation of a base 64 encoded string", "23szE+": "Required. The value to convert to data URI.", "23uZn1": "Global search", "27Nhhv": "Select an API from an API Management instance", - "29Wg4P": "Select all", "2CGfiU": "Download template", "2CXCOt": "Select a file to upload", "2DmMb7": "Chat Availability", @@ -207,7 +190,6 @@ "2On4Xu": "Code view tab", "2P1Ap0": "Existing", "2TMGk7": "Managed identity", - "2XH9oW": "Back", "2ZfzaY": "Select existing", "2aC0Xh": "Saving workflow...", "2adqQ4": "Maximum interval", @@ -229,7 +211,6 @@ "2xQWRt": "Search Functions", "2y24a/": "Save", "2yCDJd": "Test is not supported for your current operating system", - "2yO/M6": "Include connection configurations in export", "2z5HGT": "Optional. The RFC 4646 locale code to use. If not specified, default locale is used. If locale isn't a valid value, an error is generated that the provided locale isn't valid or doesn't have an associated locale.", "3+TQMa": "Loading connection...", "33+WHG": "Identifier", @@ -244,7 +225,6 @@ "3DEbi3": "Generate MCP API key", "3ERi+E": "Terms of Service", "3GINhd": "Triggers", - "3H+PIM": "Overview", "3Hl3r2": "Published by", "3JEC7U": "Error type", "3KPLpx": "Remove all mappings within source element `{nodeName}` first.", @@ -257,7 +237,6 @@ "3QXY3z": "Replacing an existing schema with an incompatible schema might create errors in your map.", "3RoD4h": "Returns the collection in reverse order", "3ST5oT": "You're creating an accelerator template!", - "3Wcqsy": "Next", "3X4FHS": "Choose the type of user input", "3Xf/4S": "Swagger endpoint", "3Y8a6G": "Required parameters {parameters} not set or invalid", @@ -298,7 +277,6 @@ "4D7H4R": "Runs {onDays}", "4E69aV": "Background color", "4Ekn9t": "Undo", - "4IV3/7": "Step {current} of {total}", "4LQwvg": "Cancel", "4Levd5": "Send me an email when", "4Q7WzU": "Add a new connection", @@ -318,13 +296,11 @@ "4iyEAY": "💾 Saving this flow...", "4izAMi": "Enter a value to respond with", "4mxRH9": "All", - "4rIMVu": "Additional steps", "4rVVyW": "Retry history", "4rdY7D": "Run ID", "4vcnOA": "Returns the minimum value in the input array of numbers", "4vmGh0": "Service request ID", "4wjJs0": "14", - "4y9tHO": "Use left and right arrow keys to navigate between commands", "4yDTpq": "Copy URL", "4yQ6LA": "Loading...", "5+P3ef": "(UTC+08:45) Eucla", @@ -338,7 +314,6 @@ "5E66mK": "Remove parameter", "5G/VKd": "This action doesn't have parameters that need setup.", "5GHXCP": "Select all", - "5GWxTc": "Function workspace", "5HY9F4": "Storage account", "5J9jne": "Tell Microsoft what you liked about this feature", "5L2vIX": "Subscription", @@ -379,14 +354,11 @@ "63CC7M": "Error loading inputs", "63fQWE": "Show all advanced parameters", "6776lH": "Processing...", - "67FI5P": "Integration service environment", "68UJHa": "This list shows the new resources to create for your logic app and existing resources if any.", - "69+CIW": "View workflow", "6D5fAm": "Trigger", "6DZp5H": "Search", "6DsS1M": "Duration (days)", "6ELsbA": "Profile", - "6HztdX": "Summary", "6JfSVt": "Cancel", "6LJZ7n": "Retry policy", "6OCUKm": "Configure", @@ -416,7 +388,6 @@ "6qPgjN": "Description", "6qkBwz": "Required. The number to multiply Multiplicand 2 with.", "6rJ+Fj": "Delete workflow graph", - "6sEsIN": "Conversational agents", "6sGj3J": "Create flow", "6sSPNb": "{connectorName} connector", "6u6CS+": "Required. The value for which to find the index.", @@ -428,7 +399,6 @@ "6yFUar": "Outputs are required when status is \"Succeeded\"", "6ylGHb": "For each loops run in parallel by default. Use this setting to control how many items are processed in parallel, or set the limit to 1 to run the loop sequentially.", "7+ZxCU": "Invalid authentication value", - "70cHmm": "OK", "73iM9+": "Update source schema", "74e2xB": "Create a new connection", "75zXUl": "Cancel", @@ -455,7 +425,6 @@ "7ZR1xr": "Add an action", "7aJqIH": "Optional. The locale to be used when formatting (defaults to 'en-us').", "7adnmH": "Back to template library", - "7bhWPe": "A project with this name already exists in the workspace.", "7cPLnJ": "Do you want to stop the agent chat? This will cancel the workflow.", "7fZkLA": "Disable static result", "7gUE8h": "This will revert your workflow to the state it was in before Copilot's edit. If you made additional edits to the workflow after Copilot's, you will lose them. This action cannot be undone. Do you want to continue?", @@ -501,9 +470,7 @@ "8U/Kek": "Retry", "8U0KPg": "Required. The string to be URI encoded.", "8UfIAk": "Enter secret as plain text or use a secure parameter", - "8VlCa0": "Discard", "8Y5xpK": "Thursday", - "8YVpN7": "Logic app created successfully!", "8ZfbyZ": "(UTC+06:00) Astana", "8cgUrz": "Close", "8d3lmL": "Storage account", @@ -515,7 +482,6 @@ "8iX8Yu": "Create", "8j+a0n": "With the asynchronous pattern, if the remote server indicates that the request is accepted for processing with a 202 (Accepted) response, the Logic Apps engine will keep polling the URL specified in the response's location header until reaching a terminal state.", "8lZGy+": "Chat is only available in production when authentication is enabled on the app. This ensures secure access to your workflow.", - "8m5+M9": "No subscriptions available", "8mDG0V": "The workflow has parameter validation errors in the following operations: {invalidNodes}", "8nnC5o": "The user-friendly name displayed for the workflow in the Azure portal.", "8opHew": "Combine Initialize Variables (preview)", @@ -569,18 +535,15 @@ "9klmbJ": "Save", "9lP2zW": "Please select tool", "9mjZIW": "Delete handoff", - "9nAAU/": "Connections", "9sRgCm": "The server {serverName} has been updated.", "9u/Ae3": "Returns true if both parameters are true", "9uv02q": "Set the tracking ID for the run. For split-on this tracking ID is for the initiating request", "9wX3u9": "Send feedback", "9yLPwo": "For more detailed information, you can refer to the following resources", "9yq5lv": "Create as per-user connection?", - "9z/8Jn": "Selected apps", "A0Kk9V": "Review details for the source Consumption logic app. Provide details for the destination Standard logic app.", "A5/IqS": "Run identifier", "A5Ferh": "Source element removed from view.", - "A7wxg0": "Validating...", "A8T1X/": "Whitespaces must be encoded for URIs.", "AB+yPQ": "Connection details", "AEguAy": "Empty value", @@ -591,7 +554,6 @@ "APKdYG": "Enter a valid double number.", "APfopx": "Manage authentication for your MCP servers.", "AQ7Zxc": "Returns the index for a value's n-th occurrence in a string (case-insensitive, invariant culture).", - "AQqOMB": "Workflow name", "Ae8T94": "View issues", "Af+Ve0": "(UTC+11:00) Bougainville Island", "AfJvdR": "Key access duration", @@ -603,16 +565,10 @@ "AlWFOS": "Collapse chat panel", "Alq4/3": "Hybrid connector", "AmSRsf": "Name this parameter", - "AmlQmq": "Create unit test from run", "AnX5yC": "Username", "Ap0SOB": "Deleting workflows will remove them from this template. The template will be unpublished and won't appear in the template library until it is republished. Do you want to delete the workflow(s) and unpublish?", "ArTh0/": "Required. The string to encode into base64 representation.", - "As1Hou": "Autosaved 1 hour ago", - "AsHour": "Autosaved {count} hours ago", - "AsMins": "Autosaved a few minutes ago", - "AsSeco": "Autosaved a few seconds ago", "Aui3Mq": "{title} operation", - "Av2j9p": "Advanced options", "Az0QvG": "Automatic", "B/JzwK": "{actionCount, plural, one {# Action} =0 {0 Actions} other {# Actions}}", "B/gCWM": "Error", @@ -645,8 +601,6 @@ "BYrP8F": "Number", "BYsNzz": "Your template has been unpublished.", "Bewmet": "Array", - "BfGFkk": "Test icon", - "Bft/H3": "All the benefits of Stateful, plus the option to build AI agents in your workflow to automate complex tasks.", "BjrVzW": "Resource group", "Bkc/+3": "Retry policy minimum interval is invalid, must match ISO 8601 duration format", "Bl4Iv0": "(UTC+08:00) Ulaanbaatar", @@ -668,7 +622,6 @@ "C3taj3": "Set up your MCP server with existing workflows. Select them from this logic app.", "C4NQ1J": "Retrieve items to meet the specified threshold by following the continuation token. Due to connector's page size, the number returned may exceed the threshold.", "CAsrZ8": "When an HTTP request is received", - "CBcl2V": "Logic app name cannot be empty.", "CBzSJo": "True", "CCpPpu": "Parameters", "CDET7A": "This list shows the new resources to create for your logic app and existing resources if any.", @@ -683,24 +636,20 @@ "Cb8pv0": "(UTC-02:00) Mid-Atlantic - Old", "Ccbm2Y": "Multi-select list of options", "CcuFEN": "Report error", - "Cd1Tab": "Code", "CdyJ6f": "Recurrence", "CeF40t": "Authentication type", "CemHmO": "Loading...", - "CfXSvL": "Standard logic app with built-in connectors and triggers", "ChhFFp": "Close", "Ci41Od": "(UTC+12:00) Auckland, Wellington", "Ciol6I": "Output", "Cj3/LJ": "Must provide the parameter name.", "ClZW2r": "Value", "ClowJ/": "Authentication type", - "CnRu/U": "Package setup", "Cnymq/": "Review all the values you've added to this template. This read-only summary lets you quickly scan your template setup.", "Cosbik": "Create connection", "CqN0oM": "Customize parameter", "CrlPhs": "Edit", "CvoqQ6": "Please enter or select a date (YYYY-MM-DD)", - "CwAnpR": "Rules engine configuration", "Cx7E/L": "Creating...", "Cy0pyB": "(UTC+09:30) Adelaide", "Cy4+KL": "Redo", @@ -720,7 +669,6 @@ "DEu7oK": "(UTC-07:00) Arizona", "DGMwU4": "Use sample payload to generate schema", "DGPz3M": "Copied!", - "DHI56r": "Rules engine location", "DIDL6K": "Standard logic app", "DIwFTo": "To generate and test with the latest XSLT, please save the map first.", "DJW8RE": "Select a value", @@ -742,17 +690,13 @@ "DabKOm": "API keys", "DbxZhS": "Remove list of options", "DcJBUx": "Trigger type", - "DdAlJ9": "Function name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "DeM/yz": "Start time", - "DfSvAt": "Draft autosaved at: {time}", "DfXxoX": "Select an existing connection or create a new one", "Dhu3IS": "Show mini-map", "DjbVKU": "OAuth", "Dm0zAO": "The maximum duration on a single outbound request from this action. If the request doesn't finish within this limit after running retries, the action fails", "DoX1Qb": "Add MCP server", "DsPDVB": "Trigger condition cannot be empty", - "DscDft": "Discard draft (revert to published)", - "DscSsn": "Discard session changes", "DserLU": "Connecting to Agent", "DuoHXI": "Add an input", "DvKGRc": "Learn more about authentication setup", @@ -767,7 +711,6 @@ "E7jFWU": "Logic App", "E8iqLl": "(UTC+11:00) Sakhalin", "EAAlZ9": "Delete agent", - "ECHpxE": "Your logic app has been created and is ready to use.", "ECZC6Y": "Converts the parameter to a decimal number", "EE1vyH": "Update workflow before using this trigger", "EFQ56R": "Source code", @@ -794,7 +737,6 @@ "EptZhD": "Enter a valid table.", "EqNkZN": "Application Insights", "EqX3Mi": "Set up these connections to use them in your flow.", - "ErAsDf": "Error autosaving draft", "EurkzL": "Please select yes or no", "EvgBRe": "Choose a Model Context Protocol (MCP) server to invoke.", "Eyxa6q": "The number of workflow instances that can wait to run when your current workflow instance is already running the maximum concurrent instances.", @@ -839,7 +781,6 @@ "FiyQjU": "2", "Fmt/E7": "{actionCount, plural, one {# Tool} =0 {0 Tools} other {# Tools}}", "FoUzpc": "Display name is required for Save.", - "Fsc9ZE": "Logic app with built-in business rules engine for complex decision logic", "FslNgF": "Status", "Fx/6sv": "Go to operation", "FxQ2Ts": "(UTC+02:00) Tripoli", @@ -911,10 +852,8 @@ "Heod+8": "Add an action", "HfinO2": "Switch to detail inputs for array item", "HfmDk9": "Edit Flow", - "Hggv59": "Project setup", "HkIZ7P": "Name", "HmcHoE": "Error fetching manifest", - "HuWIbw": "Package warning", "HzS2gJ": "Dynamic content not supported as properties in authentication.", "I+85NV": "Submit from this action", "I1CYNA": "Invalid property ''{invalidProperties}'' for authentication type ''{authType}''.", @@ -924,9 +863,7 @@ "I3mifR": "Is skipped", "I41vZ/": "(UTC-11:00) Coordinated Universal Time-11", "I8lbqy": "Deleted MCP server", - "I9O2NQ": "Function name", "IA+Ogm": "22", - "IACzZz": "Validation", "IAmvpa": "(UTC-08:00) Coordinated Universal Time-08", "IBFBR2": "Remove loop", "IG4XXf": "State", @@ -939,7 +876,6 @@ "IOQVnL": "Workflow display name is required for Save.", "IPwWgu": "(UTC+02:00) Jerusalem", "IQyOth": "If available, dynamic content is automatically generated from the connectors and actions you choose for your flow.", - "IRW6v7": "Integration account source", "IS4vNX": "(UTC-12:00) International Date Line West", "ISaPr+": "Create, manage Logic Apps parameters, give it a default value.", "IUbVFR": "Search", @@ -948,14 +884,12 @@ "Iasy6i": "Do not allow channels", "IdOhPY": "{label} To add dynamic data, press the Alt + '/' keys.", "If+p6C": "(UTC+09:00) Yakutsk", - "Ih40n5": "Custom code folder name", "IhVOVF": "How to use MCP server?", "IjoW0x": "Dynamic Parameters", "IjvmvR": "Dismiss trigger info message", "IlyNs0": "{overflowItemsLength} more item", "Iov0/J": "MCP server name", "IpD27y": "Logic app instance", - "IpUfon": "Location", "IqNEui": "Specify download chunk size between {minimumSize} and {maximumSize} Mb. Example: 10", "IsVhkH": "No properties", "IsbbsG": "When a new item", @@ -975,7 +909,6 @@ "J9wWry": "Parameters", "JAIV0h": "The current map contains {numOfIssues} {issue}.", "JASGDy": "Loading API Management accounts...", - "JBRP7/": "Chat with AI", "JBa1qe": "Workflow display name", "JCmWdL": "Default settings", "JErLDT": "Delete", @@ -986,10 +919,8 @@ "JKZpcd": "Copilot chat canceled", "JKfEGS": "Create new", "JNQHws": "Required. A string that contains the time.", - "JO3aZv": "Select subscription and location", "JQBEOg": "Review + create", "JRsTtp": "Task timeline", - "JS4ajl": "Configure your logic app workspace settings", "JSbDfI": "Expand nested", "JSfWJ0": "Required. The value that is converted to a boolean.", "JU3q4H": "Review + create", @@ -999,7 +930,6 @@ "JWl/LD": "Add new item", "JYpccF": "App Service plan name", "Jaz3EC": "Converts a string timestamp passed in from a source time zone to a target time zone", - "JeAp3Z": "Logic app with custom code", "Ji6663": "Returns true if a dictionary contains a key, if an array contains a value, or if a string contains a substring", "JiCr7D": "A to Z, ascending", "Jil/Wa": "Invalid settings", @@ -1008,9 +938,7 @@ "Jk2B0i": "Prerequisites", "JnlcZQ": "Name:", "Jq2Y/o": "Required. The numeric format string.", - "JqiwYx": "Review + create", "JrAqnE": "Run with payload", - "JrDiMJ": "Package path cannot be empty", "JsUu6b": "Workflow", "Jx88eq": "MCP API key", "JyYLq1": "Zoom out", @@ -1023,7 +951,6 @@ "K9ORYo": "Schema ID", "KBaGkS": "Change connection reference", "KGvXUc": "Update", - "KJLHaU": "Not specified", "KKBCUX": "Validation failed", "KO2eUv": "Connectors", "KV+9pl": "Run published workflow", @@ -1041,7 +968,6 @@ "KnjcUV": "Ignored", "KqJ14/": "Edit schema", "KsoxUQ": "Access keys", - "KtGlzI": "A resource group with the same name already exists in the selected subscription.", "Kv+Pa3": "Testing", "KwGA+K": "Select a Function App resource", "KwYMAL": "Stop chat", @@ -1054,13 +980,11 @@ "LBlM+D": "Not specified", "LCRHQ9": "(UTC+12:00) Fiji", "LElaX3": "Next flow suggestion", - "LG7hSo": "Assertions", "LGUiVk": "Public access", "LLJrOT": "Description", "LMB8am": "Creating...", "LNA+DZ": "Model", "LPzAHC": "Loading files…", - "LQG4qS": "Workflow configuration", "LR/3Lr": "Configure", "LRAhSA": "When enabled, this action will run with the user from the \"Run as\" setting in the Dataverse trigger", "LS8rfZ": "Returns the scheme from a URI", @@ -1068,7 +992,6 @@ "LULjJn": "Additional context or help text for the parameter.", "LV3k48": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", "LX3q/+": "Running draft workflow...", - "LZYI4N": "Select workflows", "LZm3ze": "Add a parallel branch", "LaFlFh": "Removed this action", "Ld62T8": "Delete", @@ -1076,7 +999,6 @@ "LdITnG": "(UTC-03:00) Cayenne, Fortaleza", "LeR+TX": "Zoom in", "Lft/is": "Add new", - "LgCmeY": "The specified path does not exist or is not accessible.", "Lnqh6h": "Bold (Ctrl+B)", "LoGUT3": "When used inside for-each loop, this function returns the current item of the specified loop.", "LpPNAD": "Add", @@ -1085,7 +1007,6 @@ "LuIkbo": "Expanding actions...", "Lub7NN": "Required. The expressions that may be true.", "LvLksz": "Loading outputs", - "Lx7xjr": "Export connections", "Lx8HRl": "(UTC+02:00) Damascus", "LzgX0P": "Search resources...", "M+nnq6": "Failed", @@ -1105,7 +1026,6 @@ "MAX7xS": "Show more", "MCzWDc": "Preview", "MDbmMw": "Required. The collections to evaluate. An object must be in all collections passed in to appear in the result.", - "MDmYah": "Filter by resource group", "MFg+49": "Loading...", "MGZRu4": "Add an action", "MGq28G": "Trigger", @@ -1116,7 +1036,6 @@ "MLCQzX": "Managed identity", "MLckJz": "Required. A string that contains the start time.", "MLwQFB": "Confirm", - "MMtjUW": "Search logic app", "MOsuw2": "(UTC+10:00) Guam, Port Moresby", "MPPyI6": "(UTC+04:00) Baku", "MQ0ODD": "Validation failed for parameters:", @@ -1127,7 +1046,6 @@ "MXTnCr": "Favorite", "MYgKHu": "Actions", "Mb/Vp8": "Next failed", - "MbFszg": "Function name cannot be empty.", "MbrpMM": "Configure channels for your agent", "Mc6ITJ": "Search", "MdtNYy": "Learn more about authentication", @@ -1141,7 +1059,6 @@ "MoCBWG": "No connections found", "MpULcW": "Connection", "MqZCAn": "Host", - "MrActn": "More", "Mrge1g": "Failed", "MrvtIU": "Running workflow...", "MzVpzv": "Agent log panel", @@ -1153,7 +1070,6 @@ "N7E9hd": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", "N7zEUZ": "Copy", "N8LgJq": "Distinct tracking ID for each split-on instance", - "NBHheX": "Open in file explorer", "NE54Uu": "Copied!", "NE9wXx": "Description must be less than 1024 characters.", "NFgfP4": "item", @@ -1182,27 +1098,22 @@ "NnrHK3": "(UTC+10:00) Vladivostok", "No6CS+": "Enter tenant", "NoXs0l": "Please select an identity", - "NqZqpl": "Custom code folder", "Nr8FbX": "Connections", "NtoWaY": "Value should be less than {max}", "NuG1jf": "Manage your MCP servers here. You can create, edit, and delete servers as needed.", - "NuL2rJ": "New resource group", "NvJDn/": "Tuesday", "NzPnFS": "Example:", "NziQUu": "Provide your workflow image in the Azure dark theme. Upload the image to Azure Blob Storage and share the shared access signature (SAS) link.", "O+3Y9f": "Has failed", "O+8vRv": "Returns a binary representation of a value", - "O/QVI8": "Create unit test", "O0HlIg": "Log", "O0tSvb": "🖊️ Working on it...", "O1tedM": "No errors found.", - "O2IxHR": "Workspace name cannot be empty.", "O4TSC3": "Edit handoff", "O5svoh": "The author or publisher of the template.", "O6VHe0": "Operation warnings", "O7HhyP": "to configure it", "O8Qy7k": "Close panel", - "O96/e9": "Package setup", "OA8qkc": "Cancel", "ODQCKj": "Converts the input to a JSON type value.", "ODWD97": "Edit connection", @@ -1224,7 +1135,6 @@ "OZ42O1": "Must provide value for description.", "OaUode": "Select Update to update this workflow based on this template, no configuration required.", "OdNhwc": "Ungroup", - "OdrYKo": "Your logic app workspace has been created and is ready to use.", "OeSQhS": "Create a new Azure Storage Account", "Oep6va": "Submit", "OgJ9eG": "(UTC+08:00) Taipei", @@ -1234,14 +1144,12 @@ "OjGJ8Y": "Returns the host from a URI", "OkFPf3": "Option 2: Chat Client", "OkGMwC": "Monitoring tab", - "Oku9Tr": "Workspace created successfully!", "Om9qyd": "Transform, parse, and manipulate data", "OnrO5/": "Select a managed identity", "OqpFYV": "Choose workflows", "OrPVcU": "Invalid split on format in ''{splitOn}''.", "Os4sgu": "Select to expand", "Ov7Ckz": "Missing required property ''{missingProperties}'' for authentication type ''{authType}''", - "Oz2Kvh": "Workspace file", "P+7G62": "Heading 3", "P+mWgV": "Pfx", "P/S+q5": "Required. One of the strings to combine into a single string.", @@ -1272,10 +1180,6 @@ "PYku3O": "Shared", "Pa+UkC": "Returns the UTF-8 byte length of an input string", "Pa1oRq": "Failed to validate the logic app details. Please check your selections.", - "PbAuUZ": "Select location", - "Pbl1sh": "Publish", - "Pblshg": "Publishing...", - "Pe0eMX": "The name can't end with a period.", "Peg6ZT": "Setting errors", "PfCJlN": "Workflow functions", "PhBS5+": "Enter name", @@ -1318,11 +1222,9 @@ "QT4IaP": "Filtered!", "QVtqAn": "Description", "QZBPUx": "Returns a single value matching the key name from form-data or form-encoded trigger output", - "QZnOGQ": "Managed connections", "QZrxUk": "String functions", "QbJDi7": "Item", "QctOyt": "Authentication", - "Qd804l": "Project setup", "QdJUaS": "Pencil icon", "QdRn5z": "Not authenticated", "QecW1y": "Loading more...", @@ -1343,7 +1245,6 @@ "QxEQwD": "Status", "R/aiRy": "(UTC+12:00) Coordinated Universal Time+12", "R7VvvJ": "Workflows", - "R7gB/3": "Stateless", "RA4TUH": "Expand action", "RDsZrd": "Template type", "RFjYpH": "Name", @@ -1355,22 +1256,16 @@ "RM72rC": "Server name must be less than 80 characters.", "RO1UJU": "This is a note. You can use **Markdown** to format the text.", "ROC+1+": "Line position", - "RRuHNc": "Workspace name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "RSsqSm": "Server updated successfully", - "RT8KNi": "Save", "RTfra/": "Edit connector", "RWd2ii": "Parameter display name is required for Save.", "RX2Shm": "Required. The string that is split.", "RXZ+9a": "Version", "RXj9tF": "Details", - "RYUUQU": "Code view", "RZNabt": "Create a new workflow from template", - "RZZxs+": "Create logic app workspace from package", "RatwOB": "In-app", - "Rb/a5t": "Workspace from package created successfully!", "RbJNVk": "Schema", "RhH4pF": "{minutes, plural, one {# minute} other {# minutes}}", - "RhTb01": "Run history", "Rj/V1x": "{fileContent} (content)", "RjvpD+": "Insert a new step in {parentSubgraphName}", "RkgScy": "6", @@ -1380,14 +1275,12 @@ "Rq2U5n": "Unrecognized expression ''{expression}''", "RqYHs0": "No resources found", "Rs7j3V": "Required. The expressions that must be true.", - "Rtnnx8": "A folder named \"{name}\" already exists in the selected location.", "RvpHdu": "(UTC+11:00) Solomon Is., New Caledonia", "RxGxr+": "Line number", "RxbkcI": "Unsupported token type: {controls}", "S0N/tx": "Resubmit a workflow run from this action", "S138/4": "Format text as bold. Shortcut: ⌘B", "S2KtbJ": "Select date and time", - "S4Bx4M": "Review your export configuration", "S5kFNK": "Paste your sample data to test the mapping", "SC5XB0": "Create Parameter", "SCCE6s": "Password", @@ -1410,7 +1303,6 @@ "SbCUKw": "Outputs should not be provided when status is \"Failed\"", "SbHBIZ": "No runs found", "SbIePr": "Human in the loop", - "Sc6upt": ".NET Version", "Se0HAU": "Changing the trigger name updates the callback URL when you save the workflow.", "SgiTAh": "Please enter your input", "Sh10cw": "Save", @@ -1418,9 +1310,6 @@ "Smo/VO": "Enter a name", "Sr8PcK": "No operations found", "SvQyvs": "Done", - "Svg1ng": "Saving...", - "SwDrft": "Switch to draft version", - "SwPbld": "Switch to published version", "SwWaHa": "Enter a valid run identifier", "Sy4cFC": "Concurrency control", "Sy5Gcz": "Using a chat message trigger means your workflow will be conversational, which doesn't support actions running after an agent. Delete any actions running after an agent to use this trigger.", @@ -1428,14 +1317,12 @@ "Sz8KN3": "Test", "T/7b2y": "Duration", "T1q9LE": "Name", - "T2zwDL": "Custom code configuration", "T7aD3v": "Secondary key", "TBagKD": "No operation selected", "TEN+cR": "Give feedback", "TEYRnv": "Save + unpublish template", "TG23yI": "Logic app created", "TIiSqe": "Switch to v2", - "TJ2HKX": "Package path does not exist", "TNEttQ": "Friday", "TO7qos": "Returns the start of the month of a string timestamp", "TQd85R": "Edit in basic mode", @@ -1467,7 +1354,6 @@ "TnwRGo": "Connections included in this template", "To3RNy": "Workflow parameter errors", "TpWNAE": "Select a parameter", - "Tpkwuu": "File a bug", "Ts5Pzr": "Note", "TsJbGH": "Disconnected", "Ttc0SM": "Heading 1", @@ -1481,7 +1367,6 @@ "Tzq5ot": "Search for an action", "U086AA": "Target schema element", "U0I10w": "(UTC+05:00) Ekaterinburg", - "U16F4a": "Package path", "U1Tti2": "Trigger", "U2juKb": "Filter actions", "U3iWVd": "Generates an array of integers starting from a certain number", @@ -1491,14 +1376,12 @@ "U82s8v": "Select a subscription, resource group and Logic App instance to find the workflows you want to convert to templates. Your changes apply only to this template and won't affect the original workflows.", "U9SHxw": "Code", "UCNM4L": "To reference a parameter, use the dynamic content list.", - "UCYBt4": "Use left and right arrow keys to navigate between commands", "UD330h": "Copy action", "UHCVNK": "Replaces a string with a given string", "UJGUnc": "Off", "UJho0j": "(Optional) Password for PFX file", "UMPuUJ": "Delete {expressionValue}", "UNXQDI": "Loading API Management service instances...", - "UOUMSB": "Deploy managed connections", "UOv1L6": "The name of the Logic App", "UPk1dq": "Provide details for the destination Standard logic app resource.", "UPsZSw": "The entered identity is not associated with this logic app.", @@ -1533,7 +1416,6 @@ "Uxckds": "Suggested flow", "V+/c21": "General", "V0ZbQO": "Show less", - "V3DWT4": "Workflow name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", "V3vpin": "''{parameterName}'' is no longer present in the operation schema. It should be removed before the workflow is re-saved.", "V5f3ha": "Week", "V7NT3q": "Connected", @@ -1547,15 +1429,11 @@ "VIU+CM": "Features", "VKAk5g": "The provided workflow run name is not valid.", "VL9wOu": "Must provide value for parameter.", - "VLHQ4L": "Use the traditional .NET Framework for legacy compatibility", "VLc3FV": "Source schema", "VLn4Dz": "Add images of this workflow as it appears in the designer in the original logic app. Take a screenshot in both light-mode and dar-mode versions. Upload files to Azure Blob Storage, then create a shared access signature (SAS) URL for each.", "VOk0Eh": "Request", - "VPcN7p": "Enter the logic app name and select the type of logic app to create", "VPh9Jo": "(UTC+06:00) Novosibirsk", "VQ1BxQ": "Optional parameters", - "VSeZW4": "Project path", - "VT6UoA": "Workspace parent folder path cannot be empty.", "VTMWCv": "Chat message", "VUH9aj": "23", "VUN/Gj": "Error loading tools. Please try again.", @@ -1570,14 +1448,11 @@ "VatSVE": "Consumption", "VbMYd8": "Triggers tell your app when to start running. Each workflow needs at least one trigger.", "VchR9d": "Headers", - "Vecdzb": "Logic app details", - "VfUtlo": "Save unit test definition", "Vfa/1M": "Set how long this key should be valid. This key will be shown only once and cannot be retrieved later. The key is not stored on Azure, save it securely. You will need to regenerate the key if lost.", "VgIOTh": "Provide the details about your MCP server.", "Vi5TIV": "No warnings found.", "ViOMjt": "Use the chat client to talk to your agent.", "VjvWve": "Microsoft Authored", - "Vk1TBl": "Function folder name cannot be empty.", "VlvlX1": "Certificate", "VptXzY": "Use \"{value}\" as a custom value", "Vq9q5J": "Built-in", @@ -1613,12 +1488,9 @@ "WbPW+Q": "No tasks", "WcnIF8": "Remove", "WeF48H": "Azure API Management Service APIs", - "Wf1Tab": "Workflow", "WgChTm": "(Custom value)", "WgJsL1": "Loading", - "WgY5vK": "Workspace name", "WgoP7R": "Returns the result from multiplying the two numbers", - "WkfjIG": "Resubmit", "WkqAOm": "Learn more about creating a new Azure OpenAI resource", "Wmc3Ux": "Run draft", "WnHWrD": "Workflow display name (title) is required.", @@ -1629,13 +1501,10 @@ "WtieWd": "Next task", "Wvnl/V": "Delete the static result configuration", "WvvJYw": "Actions", - "Wwf+Ju": "Status", "WxJJcQ": "Not connected", - "Wxan/5": "Create project", "WxcmZr": "This action has testing configured.", "WyH1wr": "Searching for results...", "X/7je+": "Minute", - "X/QTGw": "Workspace parent folder path", "X02GGK": "Tags", "X1TOAH": "Enter operation description", "X2idLs": "(UTC-03:00) Montevideo", @@ -1646,7 +1515,6 @@ "X8pCBI": "Run draft with payload", "XCuJUu": "Provide the purpose for this task.", "XCunbR": "Shorthand for actions('actionName').outputs", - "XEetXV": "Select .NET version", "XEuptL": "Combines any number of strings together", "XFFpu/": "Retry", "XFzzaw": "Advanced parameters", @@ -1654,12 +1522,10 @@ "XHQwyJ": "Error executing the API - {url}", "XIUFQz": "Cancel", "XJkBrZ": "Specify one or more expressions that must be true for the trigger to fire", - "XKQ/Lw": "Create new", "XLhNNP": "Add connector", "XOAcjQ": "(UTC+03:00) Nairobi", "XOMMsL": "Save MCP API key information in a secure location, it will not be available later. The old API keys will still work based on their expiration date. If access keys are regenerated that would invalidate all access keys.", "XOzn/3": "Connection name", - "XPBoDw": "Select an option", "XQ4OCV": "(UTC+03:00) Baghdad", "XR4Sd/": "Like", "XR5izH": "Connected", @@ -1673,7 +1539,6 @@ "XY5SKM": "More info", "XZrMGZ": "Content transfer", "XbtEq9": "Count", - "XepQZn": "Review your configuration and create your Logic App workspace.", "Xg1UDw": "Learn more", "Xj/wPS": "Agent chat", "Xj4xwI": "The managed identity used with this operation no longer exists. To continue, select an available identity or change the connection.", @@ -1685,7 +1550,6 @@ "XsCwp/": "At least one workflow must be selected.", "XsgpXt": "Allow both input and output channels", "XsktQ/": "Limit Logic Apps to not include workflow metadata headers in the response.", - "XtVOMn": "Something went wrong", "XtVXqm": "Save changes", "XtuP5e": "Math functions", "XulI0a": "Describe the goal or purpose for this workflow. To edit this description later, open the trigger details pane.", @@ -1719,7 +1583,6 @@ "YRW3/2": "Delete workflows", "YRk271": "Authentication", "YTJ78g": "Learn how to assign it", - "YTj0Xv": "Autonomous agents (Preview)", "YUbSFS": "Yes/No", "YV6qd0": "Agent activity", "YW1rx0": "Add new", @@ -1736,7 +1599,6 @@ "Ybzoim": "Required. The name of the action that has the values you want.", "YdQw4/": "Format text as italic. Shortcut: ⌘I", "YgU88A": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", - "YgfV/C": "Status", "YiOybp": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", "YjU9OY": "See more ({count})", "YlesUQ": "Your map is in perfect condition", @@ -1752,7 +1614,6 @@ "Yuu5CD": "Zoom out", "Yuxprm": "Welcome to the workflow assistant!", "YxH2JT": "When a message is received", - "Yyy/Zl": "Package path", "Yz9o1k": "Not connected.", "Yzw97z": "Choose a connection to use for this MCP server", "Z1p3Yh": "An error occurred while updating authentication settings. Error details: {errorMessage}", @@ -1769,14 +1630,11 @@ "ZHmzsA": "Modified", "ZIEl3/": "Copy your agent api key", "ZME5hh": "Returns the day of month component of a string timestamp", - "ZSRPr2": "Function folder name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", - "ZU4Gis": "Instance selection", "ZUCTVP": "Paste an action", "ZUaz3Y": "Shorthand for trigger().outputs.body", "ZWnmOv": "Next", "ZXc10N": "Add group", "ZXha+w": "Error message", - "ZY5ygq": "Function namespace cannot be empty.", "ZYSWRU": "Close", "Za33CQ": "Provide your workflow image in the Azure light theme. Upload the image to Azure Blob Storage and share the shared access signature (SAS) link.", "ZaIeDG": "Required. The value the string may start with.", @@ -1790,7 +1648,6 @@ "ZkjTbp": "Learn more about dynamic content.", "ZmAy4U": "Manually allow tools to this MCP server", "ZmSjQV": "Learn how to set up a logic app", - "ZtLSVc": "Search", "ZyDq4/": "Show a different suggestion", "ZyntX1": "Add a description", "_++ZVe/.comment": "Title for testing section", @@ -1799,7 +1656,6 @@ "_+3rROX.comment": "Label in the chatbot header stating that the users information is protected in this chatbot", "_+64+eE.comment": "Label for the cancel button", "_+7+u4y.comment": "Title for operations error message", - "_+AFyLk.comment": "Finish button", "_+DmIHG.comment": "Label for built-in connectors", "_+EREVh.comment": "Column name for workflow name", "_+FcXe9.comment": "The status message to show in monitoring view.", @@ -1810,7 +1666,6 @@ "_+M72+a.comment": "Button text for whole overview", "_+M7bC6.comment": "The status message to show succeeeded retries in monitoring view.. This refers to the succeeded status of a previous action.", "_+Oshid.comment": "Type dropdown placeholder", - "_+P+nuy.comment": "Conversational agents workflow description", "_+QFwA1.comment": "Label for key-based authentication method", "_+QUFXQ.comment": "Label for the ok button", "_+R82zZ.comment": "Text displayed when no options match the search query", @@ -1825,7 +1680,6 @@ "_+gBLFF.comment": "Title for the toaster after saving template.", "_+iPg27.comment": "Confirmation text for delete button", "_+ijo/2.comment": "Token picker for 'Paste last used expression'", - "_+itf/D.comment": "Save button", "_+l5XmZ.comment": "description of maximum waiting runs setting", "_+mAJR3.comment": "Time zone value ", "_+mNJQl.comment": "Create new logic app link", @@ -1834,10 +1688,8 @@ "_+oelX4.comment": "Required string parameter to check if is integer using isInt function", "_+powfX.comment": "Label for timezone", "_+tCJ2g.comment": "Value for the public access field when enabled", - "_+u2tgz.comment": "Create workspace button", "_+xXHdp.comment": "No outputs text", "_+yTsXQ.comment": "Empty state title for workflows list", - "_+zIx77.comment": "Selection description", "_/21RuK.comment": "Error message when the workflow name is invalid regex.", "_/2V8bQ.comment": "Timed out run", "_/4vNBB.comment": "Placeholder text for logic app search", @@ -1860,8 +1712,6 @@ "_/csbOB.comment": "error message for invalid retry count", "_/doURb.comment": "Label for description of custom array Function", "_/km5eO.comment": "Time zone value ", - "_/kz09u.comment": "Function folder name same as logic app name text", - "_/ld6GS.comment": "Logic app type label", "_/mjH84.comment": "Show outputs text", "_/n13VL.comment": "Properties text", "_/qCaDo.comment": "Description for the required field", @@ -1880,7 +1730,6 @@ "_00xlpa.comment": "Filter by Shared category of connectors", "_03RO5d.comment": "Edit Button Tooltip Text", "_04AwK7.comment": "Dynamic call error message. Do not remove the double single quotes around the placeholder texts, as it is needed to wrap the placeholder text in single quotes.", - "_06T/X8.comment": "Export custom API actions label", "_06zKZg.comment": "Time zone value ", "_07ZsoY.comment": "Label for description of custom startOfHour Function", "_07oZoX.comment": "Time zone value ", @@ -1895,7 +1744,6 @@ "_0FzNJV.comment": "Required base64 string parameter to be converted to binary using base64ToBinary function", "_0G6CfM.comment": "Deployment model resource label", "_0GT0SI.comment": "Cancel button label", - "_0H5p4k.comment": "Select workflow type placeholder", "_0IRUjM.comment": "Breadcrumb message shown in overview", "_0JIDLK.comment": "Description for the combine variable dialog.", "_0JTHTZ.comment": "Button text to show run menu", @@ -1915,13 +1763,10 @@ "_0l+F9w.comment": "Label for the MCP server description field", "_0m0zNa.comment": "The label for the connector type", "_0m2Y1/.comment": "The title of the value field in the static result parseJson action", - "_0n/bOI.comment": "Resource group name - invalid characters error", "_0oebOm.comment": "Outputs text", "_0p+pJq.comment": "Label for description of custom mod Function", "_0qV0Qe.comment": "Required text parameter to apply indexOf function on", - "_0rJ6RJ.comment": "Shimmer loading label", "_0sbIhI.comment": "The text for the production environment", - "_0uiwQZ.comment": "Complete export title", "_0uj1Li.comment": "Label for description of custom decodeDataUri Function", "_0upuCv.comment": "Frequency value ", "_0uuxAX.comment": "Delete mapping", @@ -1932,7 +1777,6 @@ "_0xLWzG.comment": "Text for invalid operation title name", "_0y5eia.comment": "Label for commands in panel header", "_0zMOIe.comment": "The label for the connector name", - "_1+JO/G.comment": "Designer view label", "_1+Z8n9.comment": "Required dataUri string parameter to be converted using dataUriToString function", "_109OPL.comment": "Label for description of custom uriPort Function", "_10b+jL.comment": "Label for step 2 in wizard indicator", @@ -1956,7 +1800,6 @@ "_1Xke9D.comment": "aria label to open functions drawer", "_1YUi9I.comment": "Text for button to add an agent", "_1ZrOYn.comment": "AI Foundry Project", - "_1b4sPR.comment": "Review and create step label", "_1dlfUe.comment": "Description of what Actions are, on a tooltip about Actions", "_1eKQwo.comment": "Time zone value ", "_1f7LG4.comment": "title for retry policy fixed interval setting", @@ -1965,7 +1808,6 @@ "_1hPZqe.comment": "description of retry count setting", "_1htSs7.comment": "label when setting is off", "_1i3RKp.comment": "Label for template published for testing", - "_1jaOSf.comment": "Logic app name same as function folder name text", "_1jf3Dq.comment": "Sort by dropdown option of Z to A descending", "_1jhzOM.comment": "Required object parameter to compare to in greater function", "_1lLI6H.comment": "Error message when the workflow description is empty", @@ -1976,13 +1818,11 @@ "_1tmN2o.comment": "Workflow version text", "_1uGBLP.comment": "Hour of the day", "_1x5IuY.comment": "No items to select text", - "_1xa4kY.comment": "No details message", "_20oqsp.comment": "Add the current node and its children to the map", "_23fENy.comment": "Label for description of custom base64ToBinary Function", "_23szE+.comment": "Required string parameter to be converted using dataUri function", "_23uZn1.comment": "Button text for global search", "_27Nhhv.comment": "Label for API selection", - "_29Wg4P.comment": "Select all label", "_2CGfiU.comment": "The description for button text of downloading the template", "_2CXCOt.comment": "Placeholder for input to load a schema file", "_2DmMb7.comment": "Section label for chat availability", @@ -2001,7 +1841,6 @@ "_2On4Xu.comment": "An accessibility label that describes the code view tab", "_2P1Ap0.comment": "Label for the existing resource status", "_2TMGk7.comment": "Managed Identity Label", - "_2XH9oW.comment": "Back button", "_2ZfzaY.comment": "Select existing option", "_2aC0Xh.comment": "Status message displayed when the workflow is being saved", "_2adqQ4.comment": "title for retry maximum interval setting", @@ -2023,7 +1862,6 @@ "_2xQWRt.comment": "Search Functions", "_2y24a/.comment": "Save button label", "_2yCDJd.comment": "Tooltip for disabled test button for the os", - "_2yO/M6.comment": "Export connection description", "_2z5HGT.comment": "Optional locale parameter to check locale code in isFloat function", "_3+TQMa.comment": "Text to show when the connection is loading", "_33+WHG.comment": "Column header text for identifier", @@ -2038,7 +1876,6 @@ "_3DEbi3.comment": "Title for the MCP generate keys panel", "_3ERi+E.comment": "Title for terms of service iframe.", "_3GINhd.comment": "Heading for a tooltip explaining Triggers", - "_3H+PIM.comment": "Overview page title", "_3Hl3r2.comment": "Published by label", "_3JEC7U.comment": "The title of the error type field in the static result parseJson action", "_3KPLpx.comment": "Message informing that mapping to child elements need to be deleted prior to selected one.", @@ -2051,7 +1888,6 @@ "_3QXY3z.comment": "Message bar warning about replacing existing schema", "_3RoD4h.comment": "Label for description of custom reverse Function", "_3ST5oT.comment": "Title for the toaster after adding workflows.", - "_3Wcqsy.comment": "Next button", "_3X4FHS.comment": "Button to choose data type of the dynamically added parameter", "_3Xf/4S.comment": "Swagger endpoint input label", "_3Y8a6G.comment": "Error message to show when required parameters are not set or invalid", @@ -2092,7 +1928,6 @@ "_4D7H4R.comment": "Recurrence schedule description on days of week at times", "_4E69aV.comment": "label to set background color", "_4Ekn9t.comment": "Undo", - "_4IV3/7.comment": "Step indicator text", "_4LQwvg.comment": "Button text for cancelling deleting workflows", "_4Levd5.comment": "Chatbot input start of sentence for creating a flow that the user should complete. Trailing space is intentional.", "_4Q7WzU.comment": "Aria label description for add button", @@ -2112,13 +1947,11 @@ "_4iyEAY.comment": "Chatbot card telling user that the workflow is being saved", "_4izAMi.comment": "Placeholder for output value field", "_4mxRH9.comment": "Filter by All category of connectors", - "_4rIMVu.comment": "Additional steps label", "_4rVVyW.comment": "The tab label for the retry history tab on the operation panel", "_4rdY7D.comment": "Run ID filter label", "_4vcnOA.comment": "Label for description of custom min Function", "_4vmGh0.comment": "Label text for retry service request ID", "_4wjJs0.comment": "Hour of the day", - "_4y9tHO.comment": "Keyboard navigation hint", "_4yDTpq.comment": "Label for the copying the endpoint URL button", "_4yQ6LA.comment": "Text for loading connections", "_5+P3ef.comment": "Time zone value ", @@ -2132,7 +1965,6 @@ "_5E66mK.comment": "Tooltip for remove parameter button", "_5G/VKd.comment": "Message displayed when there are no parameters configured for the operation", "_5GHXCP.comment": "Label for select all checkbox", - "_5GWxTc.comment": "Function workspace label", "_5HY9F4.comment": "Label for the storage account field", "_5J9jne.comment": "Chatbot feedback card link asking what user liked about the feature", "_5L2vIX.comment": "Label for subscription id field", @@ -2173,14 +2005,11 @@ "_63CC7M.comment": "The text for the loading inputs error.", "_63fQWE.comment": "Button tooltip to add all advanced parameters", "_6776lH.comment": "Processing message in the chatbot", - "_67FI5P.comment": "ISE divider label", "_68UJHa.comment": "The aria label for the resources table", - "_69+CIW.comment": "View workflow button text", "_6D5fAm.comment": "Tag for trigger operations", "_6DZp5H.comment": "Placeholder text for search connectors", "_6DsS1M.comment": "Label for the key duration input field", "_6ELsbA.comment": "The tab label for the monitoring profile tab on the configure template wizard", - "_6HztdX.comment": "Summary step title", "_6JfSVt.comment": "Button text for canceling MCP Server creation", "_6LJZ7n.comment": "title for retry policy setting", "_6OCUKm.comment": "Tab label for configure tab in clone to standard experience", @@ -2210,7 +2039,6 @@ "_6qPgjN.comment": "The label for the tool description column", "_6qkBwz.comment": "Required number parameter to be multiplied in mul function", "_6rJ+Fj.comment": "Title for graph node", - "_6sEsIN.comment": "Conversational agent workflow option", "_6sGj3J.comment": "Chatbot create a flow text", "_6sSPNb.comment": "Alt text on action/trigger card when there is a connector name but no operation name", "_6u6CS+.comment": "Required text parameter to search nthIndexOf function with", @@ -2222,7 +2050,6 @@ "_6yFUar.comment": "Error message for when status is succeded and outputs are not provided", "_6ylGHb.comment": "description of concurrency setting", "_7+ZxCU.comment": "Error message for invalid Auth in authentication editor", - "_70cHmm.comment": "OK button", "_73iM9+.comment": "Header to update source schema", "_74e2xB.comment": "General description for creating a new connection.", "_75zXUl.comment": "Button text for closing the panel", @@ -2249,7 +2076,6 @@ "_7ZR1xr.comment": "Text on example action node", "_7aJqIH.comment": "Optional locale parameter to apply formatNumber function with", "_7adnmH.comment": "Button to navigate back to the template library", - "_7bhWPe.comment": "Function folder name exists in workspace text", "_7cPLnJ.comment": "Stop chat message", "_7fZkLA.comment": "Label for toggle to disable static result", "_7gUE8h.comment": "Warning description of what undoing operation will do to the workflow", @@ -2295,9 +2121,7 @@ "_8U/Kek.comment": "Retry button text", "_8U0KPg.comment": "Required string parameter to be encoded using uriComponent function", "_8UfIAk.comment": "Secret Placeholder Text", - "_8VlCa0.comment": "Discard button", "_8Y5xpK.comment": "Day of the week", - "_8YVpN7.comment": "Logic app creation success message", "_8ZfbyZ.comment": "Time zone value ", "_8cgUrz.comment": "Button text for closing MCP Server creation", "_8d3lmL.comment": "The type for storage account resource", @@ -2309,7 +2133,6 @@ "_8iX8Yu.comment": "Button text for creating a new server", "_8j+a0n.comment": "description of asynchronous pattern setting", "_8lZGy+.comment": "Production section description in info dialog", - "_8m5+M9.comment": "Empty subscription message", "_8mDG0V.comment": "Error message to show when there are invalid connections in the nodes.", "_8nnC5o.comment": "Description for workflow display name field", "_8opHew.comment": "Title for the combine variable dialog. This is a preview feature.", @@ -2363,18 +2186,15 @@ "_9klmbJ.comment": "Button text for saving changes for parameter in the customize parameter panel", "_9lP2zW.comment": "Placeholder text for tool selection dropdown", "_9mjZIW.comment": "Text for button to delete a handoff", - "_9nAAU/.comment": "Connections button", "_9sRgCm.comment": "Content for the toaster after updating a server", "_9u/Ae3.comment": "Label for description of custom and Function", "_9uv02q.comment": "description for client tracking id setting", "_9wX3u9.comment": "Chatbot feedback card title", "_9yLPwo.comment": "Message instructing to follow below links for more detailed information", "_9yq5lv.comment": "Dynamic connection checkbox text for consumption SKU", - "_9z/8Jn.comment": "Selected apps label", "_A0Kk9V.comment": "Tab label for configure tab in clone to standard experience", "_A5/IqS.comment": "Run identifier text", "_A5Ferh.comment": "Message on removing source node", - "_A7wxg0.comment": "Validating folder button", "_A8T1X/.comment": "Error validation message for URIs with whitespace", "_AB+yPQ.comment": "Header for popup containing connection details", "_AEguAy.comment": "Error message on expression evaluation", @@ -2385,7 +2205,6 @@ "_APKdYG.comment": "Error validation message for doubles", "_APfopx.comment": "Description for the authentication section", "_AQ7Zxc.comment": "Label for description of custom nthIndexOf Function", - "_AQqOMB.comment": "Workflow name label", "_Ae8T94.comment": "Button to see issues", "_Af+Ve0.comment": "Time zone value ", "_AfJvdR.comment": "Title for the MCP generate keys details section", @@ -2397,16 +2216,10 @@ "_AlWFOS.comment": "Collapse button title", "_Alq4/3.comment": "Resource group title", "_AmSRsf.comment": "Name input placeholder", - "_AmlQmq.comment": "Create unit test from run button", "_AnX5yC.comment": "Username Label Display Name", "_Ap0SOB.comment": "Body text for informing users this action is deleting selected workflows and unpublishing the template", "_ArTh0/.comment": "Required base64 string parameter to be converted using base64 function", - "_As1Hou.comment": "Autosaved one hour ago text", - "_AsHour.comment": "Autosaved multiple hours ago text", - "_AsMins.comment": "Autosaved a few minutes ago text", - "_AsSeco.comment": "Autosaved a few seconds ago text", "_Aui3Mq.comment": "Alt text on action card including the operation name", - "_Av2j9p.comment": "Advanced options label", "_Az0QvG.comment": "Option text for table column type in table editor", "_B/JzwK.comment": "This is the number of actions to be completed in a group", "_B/gCWM.comment": "The title of the error property in the static result schema", @@ -2439,8 +2252,6 @@ "_BYrP8F.comment": "Placeholder title for a newly inserted Number parameter", "_BYsNzz.comment": "Title for the toaster after unpublishing template.", "_Bewmet.comment": "Title for array dropdown input setting", - "_BfGFkk.comment": "Test icon aria label", - "_Bft/H3.comment": "Autonomous agents workflow description", "_BjrVzW.comment": "Label for choosing resource group", "_Bkc/+3.comment": "error message for invalid minimum retry interval", "_Bl4Iv0.comment": "Time zone value ", @@ -2462,7 +2273,6 @@ "_C3taj3.comment": "Description for using existing workflows as tools", "_C4NQ1J.comment": "description for pagination setting", "_CAsrZ8.comment": "Manual trigger category", - "_CBcl2V.comment": "Logic app name empty text", "_CBzSJo.comment": "Short label to represent when a condition is met.", "_CCpPpu.comment": "Title for the parameters section", "_CDET7A.comment": "Description for the resources section", @@ -2477,24 +2287,20 @@ "_Cb8pv0.comment": "Time zone value ", "_Ccbm2Y.comment": "Multi-select list of options", "_CcuFEN.comment": "Label to report error", - "_Cd1Tab.comment": "Code view tab label", "_CdyJ6f.comment": "Trigger belongs to Recurrence category", "_CeF40t.comment": "Label for Authentication Type dropdown", "_CemHmO.comment": "Text displayed when the monitoring timeline is loading.", - "_CfXSvL.comment": "Standard logic app description", "_ChhFFp.comment": "Label for the close button", "_Ci41Od.comment": "Time zone value ", "_Ciol6I.comment": "Output", "_Cj3/LJ.comment": "Error message when the workflow parameter name is empty.", "_ClZW2r.comment": "Parameter Field Value Title", "_ClowJ/.comment": "Label for multi auth options", - "_CnRu/U.comment": "Package setup section title", "_Cnymq/.comment": "The dscription for review tab", "_Cosbik.comment": "The tab label for the create connection tab on the connector panel", "_CqN0oM.comment": "Panel header title for customizing parameters", "_CrlPhs.comment": "Button text for editing a server", "_CvoqQ6.comment": "Placeholder description for a newly inserted Date parameter", - "_CwAnpR.comment": "Rules engine configuration step title", "_Cx7E/L.comment": "Button text while creating the logic app.", "_Cy0pyB.comment": "Time zone value ", "_Cy4+KL.comment": "Label for redoing a change which was undone in a text input", @@ -2514,7 +2320,6 @@ "_DEu7oK.comment": "Time zone value ", "_DGMwU4.comment": "Button Label for allowing users to generate from schema", "_DGPz3M.comment": "Copied button text", - "_DHI56r.comment": "Rules Engine location path label", "_DIDL6K.comment": "Subtitle for the MCP server creation panel", "_DIwFTo.comment": "Save map info", "_DJW8RE.comment": "Placeholder for dropdown", @@ -2536,17 +2341,13 @@ "_DabKOm.comment": "Label for the API keys", "_DbxZhS.comment": "Remove the drop-down list of options for the text input dynamic parameter", "_DcJBUx.comment": "Type of the trigger in the template", - "_DdAlJ9.comment": "Function name validation message text", "_DeM/yz.comment": "Start time column header", - "_DfSvAt.comment": "Draft autosaved tooltip showing exact time", "_DfXxoX.comment": "Select an existing connection or create a new one.", "_Dhu3IS.comment": "Label to show the mini-map", "_DjbVKU.comment": "Dropdown text for OAuth connection", "_Dm0zAO.comment": "description of request options duration setting", "_DoX1Qb.comment": "Button text for adding custom MCP server", "_DsPDVB.comment": "error message for empty trigger condition", - "_DscDft.comment": "Discard draft and revert to published menu item", - "_DscSsn.comment": "Discard session changes menu item", "_DserLU.comment": "Connecting to agent section header in info dialog", "_DuoHXI.comment": "Button to add a dynamically added parameter", "_DvKGRc.comment": "Link text for authentication setup guide", @@ -2561,7 +2362,6 @@ "_E7jFWU.comment": "Label for choosing logic app instance", "_E8iqLl.comment": "Time zone value ", "_EAAlZ9.comment": "Title for agent node", - "_ECHpxE.comment": "Logic app creation success description", "_ECZC6Y.comment": "Label for description of custom decimal Function", "_EE1vyH.comment": "Title for dialog that appears when changing the kind of a node", "_EFQ56R.comment": "Link to the source code of the template", @@ -2588,7 +2388,6 @@ "_EptZhD.comment": "Error validation message for JSONs", "_EqNkZN.comment": "Label for the Application Insights field", "_EqX3Mi.comment": "Chatbot connections set up description text", - "_ErAsDf.comment": "Draft auto-save error badge text", "_EurkzL.comment": "Placeholder description for a newly inserted Boolean parameter", "_EvgBRe.comment": "Description text for MCP server selection", "_Eyxa6q.comment": "tooltip of maximum waiting runs setting", @@ -2633,7 +2432,6 @@ "_FiyQjU.comment": "Hour of the day", "_Fmt/E7.comment": "This is the number of tools to be completed in a group", "_FoUzpc.comment": "Hint message for display name is required for save.", - "_Fsc9ZE.comment": "Logic app with rules engine description", "_FslNgF.comment": "Column header text for status", "_Fx/6sv.comment": "Header for a search panel that searches for and allows direct navigation to a specific node", "_FxQ2Ts.comment": "Time zone value ", @@ -2705,10 +2503,8 @@ "_Heod+8.comment": "Title text for browse/search experience", "_HfinO2.comment": "Label for editor toggle button when in collapsed mode", "_HfmDk9.comment": "Chatbot prompt to edit the workflow", - "_Hggv59.comment": "Project setup step label", "_HkIZ7P.comment": "The label for the tool column", "_HmcHoE.comment": "Error message when manifest fails to load", - "_HuWIbw.comment": "Package warning message", "_HzS2gJ.comment": "Error message for when putting token in authentication property", "_I+85NV.comment": "Button label for submitting a workflow to rerun from this action", "_I1CYNA.comment": "Error message when having an invalid authentication property", @@ -2718,9 +2514,7 @@ "_I3mifR.comment": "Skipped run", "_I41vZ/.comment": "Time zone value ", "_I8lbqy.comment": "Title for the delete server confirmation", - "_I9O2NQ.comment": "Function name label", "_IA+Ogm.comment": "Hour of the day", - "_IACzZz.comment": "Validation step title", "_IAmvpa.comment": "Time zone value ", "_IBFBR2.comment": "Remove loop for the connection", "_IG4XXf.comment": "Label for workflow state", @@ -2733,7 +2527,6 @@ "_IOQVnL.comment": "Hint message for workflow display name is required for save.", "_IPwWgu.comment": "Time zone value ", "_IQyOth.comment": "Section 1 of text for including dynamic content section", - "_IRW6v7.comment": "Integration account source label", "_IS4vNX.comment": "Time zone value ", "_ISaPr+.comment": "Description for Workflow Parameters Part 1 for Legacy Parameters mode.", "_IUbVFR.comment": "Placeholder text for search templates", @@ -2742,14 +2535,12 @@ "_Iasy6i.comment": "No channel selected.", "_IdOhPY.comment": "This is an a11y message meant to help screen reader users figure out how to insert dynamic data", "_If+p6C.comment": "Time zone value ", - "_Ih40n5.comment": "Custom code folder name input label", "_IhVOVF.comment": "Text for the learn more link", "_IjoW0x.comment": "Title for dynamic inputs error message", "_IjvmvR.comment": "Dismiss button label for trigger info", "_IlyNs0.comment": "Message to show when exactly 1 item is present in the overflow menu", "_Iov0/J.comment": "Label for the MCP server name field", "_IpD27y.comment": "Label field for logic app instance", - "_IpUfon.comment": "Location label", "_IqNEui.comment": "tooltip for download chunk size setting", "_IsVhkH.comment": "No properties text", "_IsbbsG.comment": "Chatbot input start of sentence for creating a flow that the user should complete. Trailing space is intentional.", @@ -2769,7 +2560,6 @@ "_J9wWry.comment": "Heading section for Parameter tokens", "_JAIV0h.comment": "Message when failing to save due to errors", "_JASGDy.comment": "Loading API Management accounts...", - "_JBRP7/.comment": "Chat button tooltip content", "_JBa1qe.comment": "The label for the workflow display name", "_JCmWdL.comment": "Title for the default settings section", "_JErLDT.comment": "Delete label", @@ -2780,10 +2570,8 @@ "_JKZpcd.comment": "Chatbot card telling user that the AI response is being canceled", "_JKfEGS.comment": "Button to add a new connection", "_JNQHws.comment": "Required string parameter that contains the time", - "_JO3aZv.comment": "Selection title", "_JQBEOg.comment": "The tab label for the monitoring review and create tab on the create workflow panel", "_JRsTtp.comment": "Title for the monitoring timeline component.", - "_JS4ajl.comment": "Project setup step description", "_JSbDfI.comment": "Expand text", "_JSfWJ0.comment": "Required parameter to be converted using bool function", "_JU3q4H.comment": "The tab label for review tab for quick app create panel", @@ -2793,7 +2581,6 @@ "_JWl/LD.comment": "Label to add item to array editor", "_JYpccF.comment": "Title for the app service plan name input", "_Jaz3EC.comment": "Label for description of custom convertTimeZone Function", - "_JeAp3Z.comment": "Logic app with custom code option", "_Ji6663.comment": "Label for description of custom contains Function", "_JiCr7D.comment": "Sort option A to Z", "_Jil/Wa.comment": "Text to explain that there are invalid settings for this node", @@ -2802,9 +2589,7 @@ "_Jk2B0i.comment": "Title for the prerequisites section in the template overview tab", "_JnlcZQ.comment": "Label text for workflow name", "_Jq2Y/o.comment": "Required format parameter to apply formatNumber function with", - "_JqiwYx.comment": "Review and create step title", "_JrAqnE.comment": "Tooltip for Run with payload button", - "_JrDiMJ.comment": "Package path empty validation message", "_JsUu6b.comment": "Label for workflow template which contains single workflow", "_Jx88eq.comment": "Title for the MCP Server workflows section", "_JyYLq1.comment": "Aria label for a button that zooms out on the workflow", @@ -2817,7 +2602,6 @@ "_K9ORYo.comment": "The title of the schema id field in the static result parseJson action", "_KBaGkS.comment": "Button text to take the user to the 'change connection' component while in xrm connection reference mode", "_KGvXUc.comment": "Button text for updating the MCP Server", - "_KJLHaU.comment": "Missing value indicator", "_KKBCUX.comment": "Title shown when there is an error in the template", "_KO2eUv.comment": "Label text for connectors filter", "_KV+9pl.comment": "Tooltip for Run button when published workflow is shown", @@ -2835,7 +2619,6 @@ "_KnjcUV.comment": "The status message to show in monitoring view.", "_KqJ14/.comment": "Edit scehma", "_KsoxUQ.comment": "Label for the access keys", - "_KtGlzI.comment": "Resource group existing name error", "_Kv+Pa3.comment": "Label text for testing publish state", "_KwGA+K.comment": "Select a Function App resource", "_KwYMAL.comment": "Refresh button title", @@ -2848,13 +2631,11 @@ "_LBlM+D.comment": "The status message to show not specified in monitoring view.", "_LCRHQ9.comment": "Time zone value ", "_LElaX3.comment": "Text for button that shows the next flow suggestion", - "_LG7hSo.comment": "Unit test assertions button", "_LGUiVk.comment": "Label for the public access field", "_LLJrOT.comment": "Label for the operation description field", "_LMB8am.comment": "Button text to show a connection is being created", "_LNA+DZ.comment": "Label for parameter to use model input type", "_LPzAHC.comment": "Loading indicator message showing that the UX is getting the next list of files", - "_LQG4qS.comment": "Workflow configuration step title", "_LR/3Lr.comment": "Configure", "_LRAhSA.comment": "Description of invoker connection setting", "_LS8rfZ.comment": "Label for description of custom uriScheme Function", @@ -2862,7 +2643,6 @@ "_LULjJn.comment": "Description for parameter description field", "_LV3k48.comment": "Time zone value ", "_LX3q/+.comment": "Status message displayed when the draft workflow is being run", - "_LZYI4N.comment": "Select workflow label", "_LZm3ze.comment": "Text for button to add a parallel branch", "_LaFlFh.comment": "Chatbot removed operation sentence format", "_Ld62T8.comment": "Button text for deleting selected workflows", @@ -2870,7 +2650,6 @@ "_LdITnG.comment": "Time zone value ", "_LeR+TX.comment": "Aria label for a button that zooms in on the workflow", "_Lft/is.comment": "Button to add a new connection", - "_LgCmeY.comment": "Specified path does not exist or is not accessible message text", "_Lnqh6h.comment": "Command for bold text for non-mac users", "_LoGUT3.comment": "Label for description of custom item Function", "_LpPNAD.comment": "label to add a condition", @@ -2879,7 +2658,6 @@ "_LuIkbo.comment": "This is the text that is displayed when the user is expanding collapsed actions", "_Lub7NN.comment": "Required expression parameters to apply or function", "_LvLksz.comment": "Loading outputs text", - "_Lx7xjr.comment": "Export connection label", "_Lx8HRl.comment": "Time zone value ", "_LzgX0P.comment": "Placeholder text for resource search", "_M+nnq6.comment": "Label for the failed status", @@ -2899,7 +2677,6 @@ "_MAX7xS.comment": "Label for show more text.", "_MCzWDc.comment": "Recurrence preview title", "_MDbmMw.comment": "Required collection parameters to check intersection function on", - "_MDmYah.comment": "Filter resource groups label", "_MFg+49.comment": "Loading text for the dropdown", "_MGZRu4.comment": "Chatbot prompt to add action", "_MGq28G.comment": "Column name for trigger type", @@ -2910,7 +2687,6 @@ "_MLCQzX.comment": "Managed Identity Label Display Name", "_MLckJz.comment": "Required string parameter for start time", "_MLwQFB.comment": "Confirm button label", - "_MMtjUW.comment": "Search logic app placeholder", "_MOsuw2.comment": "Time zone value ", "_MPPyI6.comment": "Time zone value ", "_MQ0ODD.comment": "The error title for the parameters tab", @@ -2921,7 +2697,6 @@ "_MXTnCr.comment": "Favorite button text", "_MYgKHu.comment": "Heading for a tooltip explaining Actions", "_Mb/Vp8.comment": "Button indicating to go to the next page with failed options", - "_MbFszg.comment": "Function name empty text", "_MbrpMM.comment": "Channels tab description", "_Mc6ITJ.comment": "Placeholder text to search token picker", "_MdtNYy.comment": "Link text for authentication documentation", @@ -2935,7 +2710,6 @@ "_MoCBWG.comment": "Aria label for empty connections state", "_MpULcW.comment": "Label for step 1 in wizard indicator", "_MqZCAn.comment": "Host", - "_MrActn.comment": "More actions overflow button aria label", "_Mrge1g.comment": "Failed status", "_MrvtIU.comment": "Status message displayed when the workflow is being run", "_MzVpzv.comment": "Agent log panel aria label text", @@ -2947,7 +2721,6 @@ "_N7E9hd.comment": "Time zone value ", "_N7zEUZ.comment": "Chatbot copy button title", "_N8LgJq.comment": "Description of tracking id input field of split on setting", - "_NBHheX.comment": "Open file explorer button", "_NE54Uu.comment": "Copied text", "_NE9wXx.comment": "Error message when the server description exceeds maximum length.", "_NFgfP4.comment": "Label for users to know which item they are on in the dictionary", @@ -2976,27 +2749,22 @@ "_NnrHK3.comment": "Time zone value ", "_No6CS+.comment": "Tenant Placeholder Text", "_NoXs0l.comment": "MSI Identity Placeholder Text", - "_NqZqpl.comment": "Custom code folder label", "_Nr8FbX.comment": "Title for the connections section in the template overview tab", "_NtoWaY.comment": "Error message for number input being lower than max", "_NuG1jf.comment": "Description for the servers section", - "_NuL2rJ.comment": "New resource group label", "_NvJDn/.comment": "Day of the week", "_NzPnFS.comment": "Placeholder text for an example input field", "_NziQUu.comment": "Dark mode image description", "_O+3Y9f.comment": "Failed run", "_O+8vRv.comment": "Label for description of custom binary Function", - "_O/QVI8.comment": "Create unit test button", "_O0HlIg.comment": "Tree view tab title", "_O0tSvb.comment": "Chatbot card telling user that the AI response is being generated", "_O1tedM.comment": "Text to show when no errors exist", - "_O2IxHR.comment": "Workspace name empty text", "_O4TSC3.comment": "Text for button to edit a handoff", "_O5svoh.comment": "Description for By field", "_O6VHe0.comment": "Header for the operation warnings category", "_O7HhyP.comment": "Second part of the Copilot Get Started description for Suggested Flow section", "_O8Qy7k.comment": "Aria label for the close button on the workflow parameters panel", - "_O96/e9.comment": "Package setup step title", "_OA8qkc.comment": "Button text for closing the wizard without saving", "_ODQCKj.comment": "Label for description of custom json Function", "_ODWD97.comment": "The tab label for the selection panel on the connector panel for editing connection", @@ -3018,7 +2786,6 @@ "_OZ42O1.comment": "Error message when the description is empty.", "_OaUode.comment": "Accessibility label for no configuration required", "_OdNhwc.comment": "Ungroup button", - "_OdrYKo.comment": "Workspace creation success description", "_OeSQhS.comment": "Description for the Azure Storage Account create popup", "_Oep6va.comment": "Submit button", "_OgJ9eG.comment": "Time zone value ", @@ -3028,14 +2795,12 @@ "_OjGJ8Y.comment": "Label for description of custom uriHost Function", "_OkFPf3.comment": "Option 2 header in info dialog", "_OkGMwC.comment": "An accessibility label that describes the monitoring tab", - "_Oku9Tr.comment": "Workspace creation success message", "_Om9qyd.comment": "Data transformation category description", "_OnrO5/.comment": "A placeholder for the managed identity dropdown", "_OqpFYV.comment": "The tab label for the monitoring choosing workflows tab on the configure template wizard", "_OrPVcU.comment": "Error message for invalid split on value.", "_Os4sgu.comment": "An accessible label for button to expand setting section", "_Ov7Ckz.comment": "Error message when missing a required authentication property", - "_Oz2Kvh.comment": "Workspace file path label", "_P+7G62.comment": "Heading 3 text", "_P+mWgV.comment": "Client Certificate Pfx Label Display Name", "_P/S+q5.comment": "Required string parameter required to combine strings", @@ -3066,10 +2831,6 @@ "_PYku3O.comment": "The label for shared connector kind", "_Pa+UkC.comment": "Label for description of custom utf8Length Function", "_Pa1oRq.comment": "Error message shown when validation of new logic app details fails", - "_PbAuUZ.comment": "Select location label", - "_Pbl1sh.comment": "Publish workflow button text", - "_Pblshg.comment": "Publishing workflow in progress text", - "_Pe0eMX.comment": "Resource group name ending error", "_Peg6ZT.comment": "Header for the setting errors subsection", "_PfCJlN.comment": "Label for workflow functions", "_PhBS5+.comment": "Assertion field name placeholder", @@ -3112,11 +2873,9 @@ "_QT4IaP.comment": "Filtered text", "_QVtqAn.comment": "Label for description column.", "_QZBPUx.comment": "Label for description of custom triggerFormDataValue Function", - "_QZnOGQ.comment": "Managed connections label", "_QZrxUk.comment": "Label for string functions", "_QbJDi7.comment": "Label for single item inside an array.", "_QctOyt.comment": "Title for the authentication section", - "_Qd804l.comment": "Project setup step title", "_QdJUaS.comment": "Pencil icon aria label", "_QdRn5z.comment": "Connection not authenticated text", "_QecW1y.comment": "Loading more text", @@ -3137,7 +2896,6 @@ "_QxEQwD.comment": "Status filter label", "_R/aiRy.comment": "Time zone value ", "_R7VvvJ.comment": "The tab label for the monitoring workflows tab on the configure template wizard", - "_R7gB/3.comment": "Stateless workflow option", "_RA4TUH.comment": "Text indicating a menu button to expand an action in the designer", "_RDsZrd.comment": "Template type label", "_RFjYpH.comment": "Name of current node", @@ -3149,22 +2907,16 @@ "_RM72rC.comment": "Error message when the server name exceeds maximum length.", "_RO1UJU.comment": "Placeholder text for an empty note node", "_ROC+1+.comment": "The title of the line position field in the static result parseJson action", - "_RRuHNc.comment": "Workspace name validation message text", "_RSsqSm.comment": "Title for the toaster after updating a server", - "_RT8KNi.comment": "Save button text", "_RTfra/.comment": "Label for the edit connector button", "_RWd2ii.comment": "Hint message for parameter display name is required for save.", "_RX2Shm.comment": "Required text parameter to apply split function on", "_RXZ+9a.comment": "Mode filter label", "_RXj9tF.comment": "Details tab title", - "_RYUUQU.comment": "Code view label", "_RZNabt.comment": "Panel header title for creating the workflow", - "_RZZxs+.comment": "Create logic app workspace from package text.", "_RatwOB.comment": "In-app category name text", - "_Rb/a5t.comment": "Workspace from package creation success message", "_RbJNVk.comment": "The title of the schema field in the static result parseJson action", "_RhH4pF.comment": "A duration of time shown in minutes", - "_RhTb01.comment": "Run history view tab label", "_Rj/V1x.comment": "Title for file name parameter", "_RjvpD+.comment": "Tooltip for the button to add a new step under subgraph", "_RkgScy.comment": "Hour of the day", @@ -3174,14 +2926,12 @@ "_Rq2U5n.comment": "Error message on invalid expression", "_RqYHs0.comment": "Text for no resources found", "_Rs7j3V.comment": "Required. The expression parameters on which to apply the 'and' function.", - "_Rtnnx8.comment": "Folder already exists in selected location text.", "_RvpHdu.comment": "Time zone value ", "_RxGxr+.comment": "The title of the line number field in the static result parseJson action", "_RxbkcI.comment": "Exception for unsupported token types", "_S0N/tx.comment": "accessibility text for the resubmit button", "_S138/4.comment": "label to make bold text for Mac users", "_S2KtbJ.comment": "Label for custom date time picker", - "_S4Bx4M.comment": "Review description", "_S5kFNK.comment": "Sample test data placeholder", "_SC5XB0.comment": "label to add a parameter", "_SCCE6s.comment": "Basic Password Label Display Name", @@ -3204,7 +2954,6 @@ "_SbCUKw.comment": "Error message for when status is failed and outputs are provided", "_SbHBIZ.comment": "No runs found text", "_SbIePr.comment": "Filter by Human in the loop category of connectors", - "_Sc6upt.comment": ".NET version dropdown label", "_Se0HAU.comment": "Trigger name update information message", "_SgiTAh.comment": "Placeholder description for a newly inserted Text parameter", "_Sh10cw.comment": "Button text for save the changes", @@ -3212,9 +2961,6 @@ "_Smo/VO.comment": "Placeholder for output title field", "_Sr8PcK.comment": "Message to show when no operations are found", "_SvQyvs.comment": "confirmation text", - "_Svg1ng.comment": "Draft saving in progress text", - "_SwDrft.comment": "Switch to draft version menu item", - "_SwPbld.comment": "Switch to published version menu item", "_SwWaHa.comment": "Invalid run identifier error message", "_Sy4cFC.comment": "title for concurrency setting", "_Sy5Gcz.comment": "Description for dialog that appears when changing the kind of a node", @@ -3222,14 +2968,12 @@ "_Sz8KN3.comment": "Test", "_T/7b2y.comment": "Duration column header", "_T1q9LE.comment": "The label for the connector column", - "_T2zwDL.comment": "Custom code configuration step title", "_T7aD3v.comment": "Text for secondary access key", "_TBagKD.comment": "Message displayed when no operation is selected in the edit operation panel", "_TEN+cR.comment": "Button text for submitting feedback", "_TEYRnv.comment": "The description for button text of saving the template rolling back to development status", "_TG23yI.comment": "Title for the success toast when a Logic App is created", "_TIiSqe.comment": "Button text to switch to Data Mapper v2", - "_TJ2HKX.comment": "Package path not exists validation message", "_TNEttQ.comment": "Day of the week", "_TO7qos.comment": "Label for description of custom startOfMonth Function", "_TQd85R.comment": "Button label to show when selecting switch to advanced editor", @@ -3261,7 +3005,6 @@ "_TnwRGo.comment": "Title for the connections section in the template overview tab", "_To3RNy.comment": "Header for the workflow parameter errors category", "_TpWNAE.comment": "Placeholder text for adding new optional parameters in the dropdown", - "_Tpkwuu.comment": "File a bug button", "_Ts5Pzr.comment": "Note text", "_TsJbGH.comment": "Text to show when a connection is disconnected", "_Ttc0SM.comment": "Heading 1 text", @@ -3275,7 +3018,6 @@ "_Tzq5ot.comment": "Placeholder text for Action search bar", "_U086AA.comment": "Label for target schema node", "_U0I10w.comment": "Time zone value ", - "_U16F4a.comment": "Package path label", "_U1Tti2.comment": "Trigger label", "_U2juKb.comment": "Filter Actions", "_U3iWVd.comment": "Label for description of custom range Function", @@ -3285,14 +3027,12 @@ "_U82s8v.comment": "Label for the logic app resource selection description", "_U9SHxw.comment": "Code view title", "_UCNM4L.comment": "Description for Workflow Parameters Part 2", - "_UCYBt4.comment": "Command bar aria label", "_UD330h.comment": "Copy Action text", "_UHCVNK.comment": "Label for description of custom replace Function", "_UJGUnc.comment": "Label for the disabled switch", "_UJho0j.comment": "Placeholder for the optional password field for the selected certificate file", "_UMPuUJ.comment": "Label to delete a value", "_UNXQDI.comment": "Text for loading apim service instances", - "_UOUMSB.comment": "Deploy managed connections label", "_UOv1L6.comment": "Description for the Logic App name field", "_UPk1dq.comment": "Description for the destination section", "_UPsZSw.comment": "error message for invalid user", @@ -3327,7 +3067,6 @@ "_Uxckds.comment": "Title for the suggested flow section", "_V+/c21.comment": "title for general setting section", "_V0ZbQO.comment": "Toggle button text for hiding advanced parameters", - "_V3DWT4.comment": "Workflow name validation message text", "_V3vpin.comment": "Unknown Parameter error message. Do not remove the double single quotes around the display name, as it is needed to wrap the placeholder text.", "_V5f3ha.comment": "Frequency value ", "_V7NT3q.comment": "Text indicating a connector is connected", @@ -3341,15 +3080,11 @@ "_VIU+CM.comment": "Features label", "_VKAk5g.comment": "Message text for an invalid run ID", "_VL9wOu.comment": "Error message when the workflow parameter value is empty.", - "_VLHQ4L.comment": ".NET Framework description", "_VLc3FV.comment": "Source schema", "_VLn4Dz.comment": "Description for the workflow images section", "_VOk0Eh.comment": "Trigger belongs to Request category", - "_VPcN7p.comment": "Logic app details step description", "_VPh9Jo.comment": "Time zone value ", "_VQ1BxQ.comment": "Label for the section to configure optional parameters", - "_VSeZW4.comment": "Project path label", - "_VT6UoA.comment": "Workspace parent folder path cannot be empty message text", "_VTMWCv.comment": "Chat message trigger category", "_VUH9aj.comment": "Hour of the day", "_VUN/Gj.comment": "Error message when tools fail to load", @@ -3364,14 +3099,11 @@ "_VatSVE.comment": "The text for the consumption sku", "_VbMYd8.comment": "Description of what Triggers are, on a tooltip about Triggers", "_VchR9d.comment": "Headers", - "_Vecdzb.comment": "Logic app details step title", - "_VfUtlo.comment": "Save unit test button", "_Vfa/1M.comment": "Description for the MCP generate keys section", "_VgIOTh.comment": "Description for the MCP Server details section", "_Vi5TIV.comment": "Text to show when no warnings exist", "_ViOMjt.comment": "Option 2 description when auth is enabled", "_VjvWve.comment": "Label text for Microsoft authored templates tab", - "_Vk1TBl.comment": "Function folder name empty text", "_VlvlX1.comment": "Authentication OAuth Certificate Type Label", "_VptXzY.comment": "Label for button to allow user to create custom value in combobox from current input", "_Vq9q5J.comment": "Filter by In App category of connectors", @@ -3407,12 +3139,9 @@ "_WbPW+Q.comment": "Text displayed when there are no transitions in the monitoring timeline.", "_WcnIF8.comment": "Remove card from canvas", "_WeF48H.comment": "Azure API Management Service APIs label", - "_Wf1Tab.comment": "Workflow view tab label", "_WgChTm.comment": "Suffix for a custom value drop down value.", "_WgJsL1.comment": "Loading text", - "_WgY5vK.comment": "Workspace name field label", "_WgoP7R.comment": "Label for description of custom mul Function", - "_WkfjIG.comment": "Resubmit button", "_WkqAOm.comment": "info text for create", "_Wmc3Ux.comment": "Run draft button text", "_WnHWrD.comment": "Error message when the workflow display name field which is title is empty", @@ -3423,13 +3152,10 @@ "_WtieWd.comment": "Text for the next task button in the monitoring timeline.", "_Wvnl/V.comment": "Label for button to delete static result", "_WvvJYw.comment": "Header for the connected actions section", - "_Wwf+Ju.comment": "Export status title", "_WxJJcQ.comment": "Not Connected text", - "_Wxan/5.comment": "Create logic app project text.", "_WxcmZr.comment": "This is a tooltip for the Status results badge shown on a card. It's shown when the baged is hovered over.", "_WyH1wr.comment": "Message to show when loading search results", "_X/7je+.comment": "Frequency value ", - "_X/QTGw.comment": "Workspace Parent Folder path input label", "_X02GGK.comment": "Title for the tags section in the template overview tab", "_X1TOAH.comment": "Placeholder text for operation description field", "_X2idLs.comment": "Time zone value ", @@ -3440,7 +3166,6 @@ "_X8pCBI.comment": "Run draft with payload button text", "_XCuJUu.comment": "Description for the operation description field", "_XCunbR.comment": "Label for description of custom outputs Function", - "_XEetXV.comment": "Select .NET version placeholder text", "_XEuptL.comment": "Label for combining strings together", "_XFFpu/.comment": "Header text for retry history", "_XFzzaw.comment": "The label for advanced parameters", @@ -3448,12 +3173,10 @@ "_XHQwyJ.comment": "Error message to show on dynamic call failure", "_XIUFQz.comment": "Button text for cancelling changes to authentication settings", "_XJkBrZ.comment": "The description for the trigger condition expression setting.", - "_XKQ/Lw.comment": "Create new text", "_XLhNNP.comment": "Message displayed when no connectors are available", "_XOAcjQ.comment": "Time zone value ", "_XOMMsL.comment": "Description for the MCP Server workflows section", "_XOzn/3.comment": "This is for a label for a badge, it is used for screen readers and not shown on the screen.", - "_XPBoDw.comment": "Select option placeholder", "_XQ4OCV.comment": "Time zone value ", "_XR4Sd/.comment": "Chatbot user feedback like button title", "_XR5izH.comment": "Label text to connected status", @@ -3467,7 +3190,6 @@ "_XY5SKM.comment": "Shown as an aria label on button and as the tooltip shown after you select the button.", "_XZrMGZ.comment": "title for content transfer setting", "_XbtEq9.comment": "title for retry count setting", - "_XepQZn.comment": "Review step description", "_Xg1UDw.comment": "Link to learn more about state type", "_Xj/wPS.comment": "Agent chat title", "_Xj4xwI.comment": "Erorr mesade when managed identity is not present in logic apps", @@ -3479,7 +3201,6 @@ "_XsCwp/.comment": "Error message when no workflows are selected for the MCP server", "_XsgpXt.comment": "Channel input/output.", "_XsktQ/.comment": "description of workflow headers on response setting", - "_XtVOMn.comment": "Something went wrong text", "_XtVXqm.comment": "Button text for saving operation changes", "_XtuP5e.comment": "Label for math functions", "_XulI0a.comment": "Description for the trigger description dialog.", @@ -3513,7 +3234,6 @@ "_YRW3/2.comment": "Title text for deleting selected workflows", "_YRk271.comment": "Label for legacy multi auth dropdown", "_YTJ78g.comment": "Link text to learn how to assign the required role for the session pool in Azure Container Apps", - "_YTj0Xv.comment": "Autonomous agents workflow option", "_YUbSFS.comment": "Placeholder title for a newly inserted Boolean parameter", "_YV6qd0.comment": "Chat view tab title", "_YW1rx0.comment": "Link text to add a new connection", @@ -3530,7 +3250,6 @@ "_Ybzoim.comment": "Required string parameter to determine action wanted", "_YdQw4/.comment": "label to make italic text for Mac users", "_YgU88A.comment": "Time zone value ", - "_YgfV/C.comment": "Status step title", "_YiOybp.comment": "Time zone value ", "_YjU9OY.comment": "Select to view more token options. Number of total tokens available: {count}.", "_YlesUQ.comment": "Message displayed when map checker has no errors or warnings", @@ -3546,7 +3265,6 @@ "_Yuu5CD.comment": "Label to zoom the canvas out", "_Yuxprm.comment": "Chatbot greeting message from existing flow", "_YxH2JT.comment": "Chat message trigger category description", - "_Yyy/Zl.comment": "Package path input label", "_Yz9o1k.comment": "Text to show that no connection is connected to the node", "_Yzw97z.comment": "Description for connection selection step", "_Z1p3Yh.comment": "General error message for authentication settings update failure", @@ -3563,14 +3281,11 @@ "_ZHmzsA.comment": "Badge text for modified state", "_ZIEl3/.comment": "Label for API key copy button", "_ZME5hh.comment": "Label for description of custom dayOfMonth Function", - "_ZSRPr2.comment": "Function folder name validation message text", - "_ZU4Gis.comment": "Instance selection step title", "_ZUCTVP.comment": "Text for button to paste an action from clipboard", "_ZUaz3Y.comment": "Label for description of custom triggerBody Function", "_ZWnmOv.comment": "Button text for moving to the next tab in the connector panel", "_ZXc10N.comment": "Button to add group", "_ZXha+w.comment": "The title of the error message property within Error in the static result schema", - "_ZY5ygq.comment": "Function namespace empty text", "_ZYSWRU.comment": "Text of Tooltip to close", "_Za33CQ.comment": "Light mode image description", "_ZaIeDG.comment": "Required text parameter to search startsWith function with", @@ -3584,7 +3299,6 @@ "_ZkjTbp.comment": "Text for dynamic content link", "_ZmAy4U.comment": "Radio option for allowing only selected tools", "_ZmSjQV.comment": "Title for the setup instructions link", - "_ZtLSVc.comment": "Search label", "_ZyDq4/.comment": "Text for the show different suggestion flow button", "_ZyntX1.comment": "Text that tells you to select for adding a description", "_a1fbm6.comment": "Tooltip for info button", @@ -3596,7 +3310,6 @@ "_a7qE4l.comment": "Loading text for workflows", "_aAXnqw.comment": "Required number of occurrences to get nthIndexOf function with", "_aE+2gr.comment": "Short label to represent when a condition is not met.", - "_aExfWG.comment": "Package setup step description", "_aFZRms.comment": "HTTP body label", "_aGxYMY.comment": "Label to clear editor", "_aGyVJT.comment": "Required number parameter to get number of objects to remove for skip function", @@ -3628,8 +3341,6 @@ "_auUI93.comment": "label to inform to upload or select source schema to be used", "_auci7r.comment": "Error validation message for CSVs", "_aurgrg.comment": "Authentication type", - "_az+QCK.comment": "Logic app name validation message text", - "_b0wO2+.comment": "Stateless workflow description", "_b2aL+f.comment": "Text indicating a menu button to pin an action to the side panel", "_b6G9bq.comment": "Label for description of custom encodeUriComponent Function", "_b7BQdu.comment": "Error validation message", @@ -3656,9 +3367,7 @@ "_bXFGpe.comment": "Info section title", "_bZtnLw.comment": "This is an option in a dropdown where users can select type Integer for their parameter.", "_ba9yGJ.comment": "Button text for loading more runs", - "_bbFMfd.comment": "Workflow group display name", "_bcaiap.comment": "Button text for refreshing the server list", - "_beWWW0.comment": "Function name input label", "_bf7078.comment": "Label for description of custom max Function", "_bg00eY.comment": "Numbered List text", "_bkuRuS.comment": "Text to show when there are no operations with the given filters", @@ -3692,15 +3401,12 @@ "_cMvmv5.comment": "Error validation message for invalid JSON array. Do not remove the double single quotes around the display name, as it is needed to wrap the placeholder text.", "_cNXS5n.comment": "Dropdown option for stateless type", "_cQ/Ocu.comment": "Filter by AI Agent category of connectors", - "_cR0MlP.comment": "Browse folder button", "_cR9RtV.comment": "Title for discard modal", "_cWpWiU.comment": "Diagnostics information for error message. Don't remove the double single quotes around the placeholder text, which is needed to wrap the placeholder text in single quotes.", - "_cWrYnn.comment": "Workspace folder path label", "_cZ60Tk.comment": "Loading text", "_cZqrL1.comment": "All run modes", "_cZv9J0.comment": "Tooltip for the button to reassign actions", "_cd+qhI.comment": "Text for invalid agent tool name", - "_ceM0tn.comment": "Logic app name field placeholder", "_ceVB5l.comment": "Label for the description of the custom 'multipartBody' function", "_cfUHfs.comment": "Label for description of custom dateDifference Function", "_cgq/+y.comment": "Placehodler text for dropdown", @@ -3717,7 +3423,6 @@ "_cscezV.comment": "Required collection parameter to apply skip function on", "_ctI9Pp.comment": "Message on missing XSLT and attempting to test maps", "_cuKbLw.comment": "Premium category name text", - "_cuLdXe.comment": "Subscription label", "_cvp9VP.comment": "The title of the error code property within Error in the static result schema", "_cw9FiJ.comment": "The title of the schema base uri field in the static result parseJson action", "_cwHxwb.comment": "Text for create connection button", @@ -3735,7 +3440,6 @@ "_dCFP4g.comment": "Collapse all", "_dD8y1n.comment": "Label for editor toggle button when in collapsed mode", "_dDYCuU.comment": "Link text to open URL", - "_dE23PQ.comment": "Logic app location path label", "_dEe6Ob.comment": "Error validation message", "_dIYzFU.comment": "Tooltip text for the \"...\" menu that you select to show more items", "_dKCp2j.comment": "Chatbot query start of sentence for asking for more explaination on an item that the user can should complete.", @@ -3757,7 +3461,6 @@ "_dgPMsl.comment": "Completed status message in mock card.", "_dhlB0s.comment": "Loading aria-label for workflows list", "_dhvk0u.comment": "Label for description of custom base64ToString Function", - "_dkgivo.comment": "Workflows selection step title", "_doABYk.comment": "Title for no agent parameters found", "_dqgt9y.comment": "Label for description of custom bool Function", "_drM9Sl.comment": "Label for description of custom formDataMultiValues Function", @@ -3771,7 +3474,6 @@ "_e1+Gqi.comment": "Description for resource location section.", "_e4JZEY.comment": "Time zone value ", "_e8JCcn.comment": "Tooltip label for the button that allows user to group search results by connector.", - "_e8iBzO.comment": "Creating workspace from package in progress", "_e9OvzW.comment": "Clear", "_e9bIKh.comment": "Message on failed generation", "_eDiMaf.comment": "Error message when tool name is empty", @@ -3797,10 +3499,8 @@ "_eXWIo2.comment": "Description for parameter default value field", "_eXcejw.comment": "Running status", "_eaEXYa.comment": "Checkbox text for the filter representing all items", - "_eagv8j.comment": "Create logic app workspace text.", "_eb91v1.comment": "Header for the change connection panel", "_ec13/p.comment": "Link text to learn more about Independent Publisher connectors", - "_edTuPs.comment": "Split view label", "_egLI8P.comment": "Required start index parameter required to obtain substring", "_ehIBkh.comment": "Placeholder for integer text field", "_ekM77J.comment": "Label for workflow Name", @@ -3814,7 +3514,6 @@ "_epi+zR.comment": "Describes X button to close the map checker panel", "_er6O+w.comment": "Label for parameter Name", "_erwucR.comment": "Description for category field", - "_esTnYd.comment": "Custom code configuration step description", "_evyGYj.comment": "Tooltip for the button to reassign actions", "_ewGciu.comment": "Title for authentication parameter", "_f/lWTW.comment": "Required object parameters to check for null in coalesce function", @@ -3830,7 +3529,6 @@ "_fElufw.comment": "Select an API Management resource", "_fGKmXs.comment": "Load more text", "_fKYuwf.comment": "Placeholder description for a newly inserted File parameter", - "_fKghDg.comment": "Resource group description text", "_fLchIJ.comment": "Title for the error message shown when creation of logic app fails", "_fNE/hg.comment": "Text for if image does not show up", "_fNlJSh.comment": "Error message to show when all connections are not connected", @@ -3838,7 +3536,6 @@ "_fRrZKS.comment": "Light mode image label", "_fSMyDJ.comment": "title for request options setting", "_fVG5aD.comment": "Time zone value ", - "_fZJWBR.comment": "Loading designer text", "_fa8xG1.comment": "The information for the error message", "_faPcYk.comment": "Answer no to combine button label", "_faUrud.comment": "Message to show under the loading icon when loading connection parameters", @@ -3848,14 +3545,12 @@ "_fp8Ry3.comment": "Time zone value ", "_fsRie2.comment": "Description for workflow summary field", "_ft8BH8.comment": "Seconds", - "_fuBVBE.comment": "Logic app name field label", "_fvGvnA.comment": "Chatbot error message", "_g076bL.comment": "Placeholder title for a newly inserted Email parameter", "_g1zwch.comment": "Label to zoom the canvas in", "_g3DKT8.comment": "The tab label for basics tab for quick app create panel", "_g4igOR.comment": "Button text for publish", "_g7/EKC.comment": "sublabel for concurrency limit toggle button", - "_g7eU6A.comment": "Workspace name input label", "_g7my78.comment": "Run test", "_g8eDXe.comment": "description of action count setting", "_gA1dde.comment": "Label used for the toolbar button which switches between raw HTML (code) view and WYSIWIG (rich text) view", @@ -3864,7 +3559,6 @@ "_gDDfek.comment": "Label for description of custom getFutureTime Function", "_gDW6Bd.comment": "Placeholder text for trigger description", "_gDY9xk.comment": "Label for description of custom div Function", - "_gHm7zV.comment": "Errors button", "_gIK0WG.comment": "Required boolean parameter to determine which value if function should return", "_gIx5ys.comment": "label to make italic text for nonMac users", "_gKq3Jv.comment": "Label of a button to go to the previous failed page option", @@ -3899,7 +3593,6 @@ "_gvDMuq.comment": "Select a Batch Workflow resource", "_gvo1S7.comment": "Warning message when agent is disconnected from the flow", "_gwEKLM.comment": "This is a message shown while loading. This announced text is read aloud with screen readers. Not shown in text.", - "_gxHe8n.comment": "Empty location message", "_h+W3VW.comment": "Label for Number type dynamically added parameter", "_h+ZYip.comment": "Option to install a new gateway, links to new page", "_h0WB5b.comment": "Others tab label for custom MCP server connections", @@ -3970,7 +3663,6 @@ "_iCni1C.comment": "Accessbility text to indicate no search results found", "_iE2+sy.comment": "Button to choose data type of the dynamically added parameter", "_iEy9pT.comment": "Token picker mode to insert dynamic content", - "_iFcpYH.comment": "Logic App setup step label", "_iFdKPk.comment": "Label for input type dropdown section in parameter editor", "_iGxL1E.comment": "Issues ith the map", "_iHVVTl.comment": "Text for delete node modal body", @@ -3990,7 +3682,6 @@ "_iXW+2l.comment": "Chatbot input start of sentence for adding an action that the user should complete. Trailing space is intentional.", "_id4DBb.comment": "First part of the Copilot Get Started description for Suggested Flow section", "_idQjOP.comment": "Label for properties tab", - "_idw/7j.comment": "Export logic app text.", "_ifZ8ok.comment": "Description for the MCP server registration wizard", "_ihCdw4.comment": "Required. The number parameter to sum in the 'add' function.", "_im0GMa.comment": "Label for show less text.", @@ -4008,13 +3699,11 @@ "_ixoJF3.comment": "Content for the empty workflows modal", "_iy8rNf.comment": "Button text for running test", "_izS5yQ.comment": "Learn more link text", - "_izUiSp.comment": "Parameters button", "_j/Pssm.comment": "Label for description of custom formatTimeSpan Function", "_j1FtOw.comment": "Aria label for add new tag", "_j2v8BE.comment": "Text to show no connections present in the template.", "_j4OKkU.comment": "label to set text color", "_j5z8Vd.comment": "Label for array connection", - "_j6RrLt.comment": "Project setup section title", "_j7HEKm.comment": "Text for days", "_jA6Wrp.comment": "label to inform to upload or select target schema to be used", "_jDYilS.comment": "Description for dialog that appears when changing the kind of a node from stateless", @@ -4038,9 +3727,7 @@ "_jfInxm.comment": "Parameter Link Text", "_jfQPGz.comment": "Label for delete button", "_jfU6pn.comment": "description of the secure inputs setting", - "_jfWu9H.comment": "Workflow name empty text", "_jgOaTX.comment": "Error Message on generating schema based on payload", - "_jheId9.comment": "Workspace name label", "_jjIhsG.comment": "Button text for deleting the MCP server group", "_jk2rY+.comment": "Button text for saving authentication settings", "_jlcMGg.comment": "Chatbot prompt to add action description", @@ -4054,7 +3741,6 @@ "_k/oqFL.comment": "Required base64 string parameter to be converted using base64ToString function", "_k2a8ry.comment": "The tab label for the summary tab on the configure template wizard", "_k5tGEr.comment": "This is the boolean value for Yes", - "_k6MqI+.comment": "Creating workspace in progress", "_k8cbQ1.comment": "Header for the node parameter errors subsection", "_k8fofe.comment": "Error message shown when app creation fails", "_kAJqcb.comment": "Description for parameters step", @@ -4083,7 +3769,6 @@ "_kfmLTY.comment": "Body text for a function missing a required input card", "_khmfg3.comment": "See all actions text for the spotlight section", "_kkFPeq.comment": "Handoff tab title", - "_kkKTEH.comment": "Logic app with custom code description", "_kkx2qd.comment": "Label for the Virtual network field", "_klY9UN.comment": "This announced text is read aloud with screen readers. Not shown in text.", "_koft/j.comment": "Title for the default parameters section", @@ -4091,7 +3776,6 @@ "_kuFK3E.comment": "Invalid authentication without type property", "_kuMOqt.comment": "Badge text for saved state", "_kuzT1s.comment": "Button text for moving back to configure tab in the clone wizard", - "_kv8ROl.comment": "Dot net framework label", "_kvFOza.comment": "Error message when the workflow parameter display name is empty.", "_kxv92S.comment": "Confirmation message for deleting a server", "_l/3yJr.comment": "Text to show when there is an error with the connection", @@ -4142,7 +3826,6 @@ "_m+/AXv.comment": "Description for the validation errors bar", "_m/jJ/5.comment": "Map checker", "_m0e5px.comment": "Link text for learn more", - "_m3H+gL.comment": "New text", "_m4qt/b.comment": "Error while creating acl", "_m5InJc.comment": "status code", "_m6vIDU.comment": "Required parameter for name in encodeXmlName function", @@ -4160,7 +3843,6 @@ "_mGpKsl.comment": "Label for description of custom dataUriToString Function", "_mILANb.comment": "Placeholder text for resource selection", "_mIbBgK.comment": "Current connection title", - "_mMivmV.comment": "Regions divider label", "_mMysmk.comment": "Workflow execution trigger category description", "_mNaBPE.comment": "Error message for invalid JSON in authentication editor", "_mPuXlv.comment": "Error message for when split on array is invalid. Do not remove the double single quotes around the placeholder text, as it is needed to wrap the placeholder text in single quotes.", @@ -4172,7 +3854,6 @@ "_maP1K/.comment": "Minutes", "_marivS.comment": "Create connection button text", "_mb1XDD.comment": "Parameter Field Actual Value Title", - "_mbQ+Js.comment": "Workspace file already exists text.", "_mc9MCq.comment": "Description for the MCP server workflows section", "_mca3Ml.comment": "Aria label description for sign in button.", "_meVkB6.comment": "Empty property name error message", @@ -4184,13 +3865,11 @@ "_mnuwWm.comment": "Warning body for when unable to parse schema", "_mpFlLc.comment": "Mainframe Modernization category", "_mqVL/E.comment": "The tab label for the add actions tab on the connector panel", - "_mr/BC/.comment": "Function namespace input label", "_mvrlkP.comment": "OAuth Password Placeholder Text", "_mvu5xN.comment": "Accessibility Label for the dictionary text value field", "_mwEHSX.comment": "Label for function node", "_mx2IMJ.comment": "Hour of the day", "_mxSILx.comment": "Queries", - "_mygEMn.comment": "No workflows message", "_mzxUwl.comment": "Description for new workflow name", "_n+F7e2.comment": "Hour of the day", "_n+sJ5W.comment": "Name of the organization that published this template", @@ -4222,7 +3901,6 @@ "_nTA155.comment": "Required string parameter to identify which property to remove", "_nV2Spt.comment": "label for operation details panel component", "_nVDG00.comment": "Time zone value ", - "_nVhDGu.comment": "Workflow name field placeholder", "_nX3iRl.comment": "Error message for parameter is empty", "_nZ4nLn.comment": "title for suppress workflow headers setting", "_ncW1Sw.comment": "Alt text on action/trigger card when there are both an operation name and connector name", @@ -4237,7 +3915,6 @@ "_nmhiR6.comment": "The text for the standard sku", "_no+blV.comment": "Button text for cancel the dialog", "_no/SMg.comment": "Time zone value ", - "_ntW6su.comment": "Package path field label", "_nuNBYE.comment": "Path", "_nwLd4b.comment": "Label of the file path selection box", "_nwTyEd.comment": "Edit parameter", @@ -4252,7 +3929,6 @@ "_o3SfI4.comment": "Label to fit the whole canvas in view", "_o5fYVy.comment": "Chatbot suggestion message to describe the workflow", "_o7bd1o.comment": "Time zone value ", - "_o7s/JG.comment": "Standard logic app option", "_oA5+TG.comment": "Message when connector has no triggers available", "_oAFcW6.comment": "Required string parameter to be decoded using decodeDataUri function", "_oBAL2F.comment": "Days", @@ -4269,7 +3945,6 @@ "_oPKLDZ.comment": "Title for switch case", "_oQjIWf.comment": "The title of the errors field in the static result parseJson action", "_oR2x4N.comment": "Error message for invalid integer value", - "_oRm/MY.comment": "Custom code location path label", "_oTBkbU.comment": "The title of the output field in the static result query action", "_oTmqLo.comment": "The tab label for the selection panel on the connector panel for adding connector", "_oU4UD8.comment": "Label for the dropdown to select the target agent for handoff", @@ -4288,11 +3963,9 @@ "_olgoo5.comment": "Title for step 2 - tools selection", "_om43/8.comment": "Aria label for workflows list table", "_oo72Za.comment": "Description displayed when no MCP servers are found", - "_ooIa6F.comment": "Limit info message", "_opvqoT.comment": "Tooltip for Run button when draft workflow is shown", "_or0uUQ.comment": "Details tab description", "_osln7P.comment": "Label for description of custom decodeUriComponent Function", - "_otRX33.comment": "Stateful workflow description", "_owpAI/.comment": "Description of handoffs", "_ox2Ou7.comment": "Placeholder for empty collapsed dictionary", "_oxCSqB.comment": "An accessibility label that describes the objective of parameters tab", @@ -4307,7 +3980,6 @@ "_p0BE2D.comment": "Button text to trigger clone in the create workflow panel", "_p1IEXb.comment": "Label for button to open dynamic content token picker", "_p2eSD1.comment": "Button text for opening panel for editing workflows", - "_p4Mgce.comment": "Stateful workflow option", "_p5ZID0.comment": "Time zone value ", "_p8AKOz.comment": "Label for the description textfield", "_pC2nr2.comment": "Placeholder text for Key", @@ -4315,8 +3987,6 @@ "_pH2uak.comment": "Label to collapse", "_pH6ubt.comment": "Column header for accessing connection-related details", "_pJJ3x8.comment": "Seach source or target nodes", - "_pK0Ir8.comment": "Export with warnings button", - "_pO1Zvz.comment": "Package path cannot be empty message text", "_pOTcUO.comment": "Required object parameter to be converted to array using createArray function", "_pOVDll.comment": "Error validation message for Integers", "_pRJny7.comment": "Placeholder text for the handoff description input field", @@ -4343,7 +4013,6 @@ "_pykp8c.comment": "Title text for the card that lets users start from a blank workflow", "_q/+Uex.comment": "Label for description of custom xpath Function", "_q/DRBW.comment": "Required string parameter to be sized using utf8Length function", - "_q1dxkD.comment": ".NET 8 description", "_q1gfIs.comment": "Text on example trigger node", "_q2OCEx.comment": "Required parameter for new property value in addProperty function", "_q2w8Sk.comment": "Label for description of custom string Function", @@ -4361,13 +4030,11 @@ "_qJpnIL.comment": "Label for description of custom endsWith Function", "_qKVOwV.comment": "Placeholder text for the MCP server name field", "_qMFpNH.comment": "Loading dynamic data", - "_qNh5t2.comment": "Rules engine folder name input label", "_qSejoi.comment": "Label for description of custom lessOrEquals Function", "_qSt0Sb.comment": "Accessibility prefix for the input label", "_qUWBUX.comment": "A duration of time shown in days", "_qUq/6N.comment": "Text between button name and license link", "_qVgQfW.comment": "Search box placeholder text", - "_qXL3lS.comment": "A project with name already exists message text", "_qc5S69.comment": "Label for description of custom length Function", "_qiIs4V.comment": "placeholder for retry interval setting", "_qif1I+.comment": "Description for the main section", @@ -4383,8 +4050,6 @@ "_qwZaWJ.comment": "Text showing how many operations are selected out of total available", "_qxw9UO.comment": "Column header for connection valid/invalid status", "_qy5WqY.comment": "Text for button that shows the previous flow suggestion", - "_qyW34i.comment": "Rules engine folder label", - "_qz9XeG.comment": "Cancel button", "_qzaoRR.comment": "description of action timeout setting", "_r/P4gM.comment": "Answer yes to combine button label", "_r/n6/9.comment": "Placeholder for text field", @@ -4401,14 +4066,11 @@ "_rDDPpJ.comment": "Authentication OAuth Secret Type Label", "_rDQmGU.comment": "Label for API key copyable field", "_rEQceE.comment": "Label text for Microsoft authored templates", - "_rGQ0Qx.comment": "After export label", - "_rGWwuB.comment": "Workspace package creation success description", "_rGw0g0.comment": "Loading text", "_rHySVF.comment": "Error message when missing information for workflows creation", "_rMYBfw.comment": "Make the dynamic parameter corresponding to this row optional", "_rNi5Y3.comment": "Tooltip for the on-premises data gateway connection checkbox", "_rPw0Hp.comment": "No actions available text", - "_rREwxg.comment": "Refresh button", "_rSIBjh.comment": "Parameter Field Value Placeholder Text", "_rSa1Id.comment": "Files could not be found in specified path", "_raBiud.comment": "Require parameters to find maximum using max function", @@ -4447,7 +4109,6 @@ "_sRpETS.comment": "Warning message for when custom value does not match schema node type", "_sVQe34.comment": "The description for the test tab parameters.", "_sVcvcG.comment": "The tab label for the monitoring name and state tab on the create workflow panel", - "_sXNnlg.comment": "Logic app with rules engine option", "_sYQDN+.comment": "Label for Font family dropdown", "_sZ0G/Z.comment": "Required string parameter to represent the unit of time", "_sZHTQV.comment": "Time zone value ", @@ -4476,7 +4137,6 @@ "_sv+IcU.comment": "Message to display when the data map definition can't be generated", "_svaqnp.comment": "Error message for when status is succeded and error is provided", "_sw6EXK.comment": "The title of the status property in the static result schema", - "_swjISX.comment": "Browse button text", "_swt55B.comment": "Suggested triggers accordion title", "_syFW9c.comment": "Panel header title for managing workflows", "_syiNc+.comment": "Browse for file", @@ -4487,7 +4147,6 @@ "_t/aciw.comment": "Error message when the workflow light image is empty", "_t0tN4J.comment": "The tab label for the code view tab on the operation panel", "_t1cE+t.comment": "Description for display name field", - "_t2nswK.comment": ".NET 8 option", "_t5ECPm.comment": "Placeholder text when no tools are selected", "_t7ytOJ.comment": "Column name for connection status", "_t9RwOi.comment": "Invalid expression alert", @@ -4540,9 +4199,7 @@ "_tw6oMS.comment": "Placeholder text for Connector search bar", "_twr0pi.comment": "Copy Trigger text", "_tzeDPE.comment": "Accessibility label for state kind", - "_u+VFmh.comment": "Create logic app project button", "_u0xUtD.comment": "Button text to open URL in new tab", - "_u2mduv.comment": "Export page title", "_u2z3kg.comment": "The aria label for the parameters table", "_u60lSZ.comment": "Error message title for duplicate workflow ids", "_u7p0Dp.comment": "Empty state message when no connections are found in the workflow", @@ -4622,7 +4279,6 @@ "_vT0DCP.comment": "Display name for operation outputs", "_vWR0op.comment": "General error message for name availability check failure", "_vX9WYS.comment": "Audience Label Display Name", - "_vXqIg+.comment": "Export location label", "_va40BJ.comment": "Required string parameter to determine action's output wanted", "_vdtKjT.comment": "Error message to show when logic app does not have managed identity when creating azure connection", "_vhNDi9.comment": "Add button text", @@ -4637,11 +4293,9 @@ "_vp016T.comment": "Placeholder for the agent parameter type", "_vr70Gn.comment": "Create a connection for selected connector", "_vrYqUF.comment": "Label for button to allow user to create custom value in combobox", - "_vv8WR4.comment": "Generate infrastructure label", "_vvSHR8.comment": "Change context of the canvas to view that element's children", "_vwH/XV.comment": "Create Parameter Text", "_vxOc/M.comment": "Error message for duplicate integer array", - "_vyBSec.comment": ".NET framework label", "_vyddjn.comment": "Label indicating how many items are currently displayed in the browse grid", "_vz+t4/.comment": "Description for dialog that appears when changing the kind of a node to a stateful kind", "_vzXXFP.comment": "Workflow version filter label", @@ -4670,7 +4324,6 @@ "_wPi8wS.comment": "Accessibility label indicating that the value is not set", "_wPjnM9.comment": "Text for button to paste a parallel action from clipboard", "_wPlTDB.comment": "Full path of current node", - "_wPzyvX.comment": "Export button", "_wQcEXt.comment": "Required parameters for the custom Replace Function", "_wQsEwc.comment": "Required length parameter to obtain substring", "_wT/gMB.comment": "Description for featured connectors field", @@ -4708,7 +4361,6 @@ "_x74tKg.comment": "Text for hours", "_x7IYBg.comment": "The status message to show in monitoring view.", "_x7XKH0.comment": "Description for template type field", - "_xBIh0S.comment": "Workflow type label", "_xC1zg3.comment": "Section header for the schema section", "_xDHpeS.comment": "An accessibility label that describes the objective of review and create tab", "_xFQXAI.comment": "Button text for the control-Z button combination to undo the last action", @@ -4721,7 +4373,6 @@ "_xMgLd8.comment": "title for retry minimum interval setting", "_xN3GEX.comment": "Client Certificate Password Placeholder Text", "_xPO/1M.comment": "Description for the MCP server registration wizard", - "_xQHAPW.comment": ".NET Framework option", "_xQQ9ko.comment": "title for pagination user input", "_xSMbKr.comment": "Show inputs text", "_xSSfKC.comment": "Time zone value ", @@ -4738,7 +4389,6 @@ "_xfXUGz.comment": "Minute", "_xgV4pp.comment": "Text for the \"Select All\" option in a multiselect dropdown", "_xhBvXj.comment": "Button text for opening test panel", - "_xhJqo7.comment": "Resource group label", "_xi2tn6.comment": "The tab label for the monitoring parameters tab on the operation panel", "_xkCRtu.comment": "Label text for status filter", "_xt5TeT.comment": "Description for Workflow Parameters Part 1", @@ -4765,15 +4415,12 @@ "_yOyeBT.comment": "Turn the minimap on or off", "_yQ6+nV.comment": "Link to create a connection", "_yRDuqj.comment": "Button text to add all advanced parameters", - "_yRZ2Qm.comment": "Clone connections label", "_yUNdJN.comment": "Label for the run version", "_yVFIAQ.comment": "Time zone value ", "_yVh9kr.comment": "Hour of the day", - "_yZ9m4I.comment": "Logic app name label", "_yc0GcM.comment": "Label for description of custom chunk Function", "_ydqOly.comment": "placeholder text for row values", "_yeagrz.comment": "Second bullet point of stateless type", - "_yen5zR.comment": "Review title", "_yjierd.comment": "Error message on invalid expression type during building. Do not remove the double single quotes around the placeholder text, as it is needed to wrap the placeholder text in single quotes.", "_yjjXCQ.comment": "Aria label for the close button in the Add Action Panel", "_yk7L+4.comment": "Chatbot user feedback dislike button title", @@ -4806,7 +4453,6 @@ "_zOq84J.comment": "Delete agent last parameter label", "_zOvGF8.comment": "Time zone value ", "_zPRSM9.comment": "Error message when no app identity is added in environment variables", - "_zTdffa.comment": "Workflow name field label", "_zUWAsJ.comment": "Label for description of custom isInt Function", "_zUgja+.comment": "Label for button to clear the editor", "_zViEGr.comment": "Time zone value ", @@ -4838,7 +4484,6 @@ "a7qE4l": "Loading workflows...", "aAXnqw": "Required. The number of the occurrence of the substring to find.", "aE+2gr": "False", - "aExfWG": "Package", "aFZRms": "Body", "aGxYMY": "Clear editor", "aGyVJT": "Required. The number of objects to remove from the front of Collection. Must be a positive integer.", @@ -4870,8 +4515,6 @@ "auUI93": "Add or select a source schema to use for your map.", "auci7r": "Enter a valid comma-separated string.", "aurgrg": "Managed identity", - "az+QCK": "Logic app name must start with a letter and can only contain letters, digits, \"_\" and \"-\".", - "b0wO2+": "Optimized for low latency, ideal for request-response and processing IoT events.", "b2aL+f": "Pin action", "b6G9bq": "URL encodes the input string", "b7BQdu": "Enter a valid Boolean.", @@ -4898,9 +4541,7 @@ "bXFGpe": "Info", "bZtnLw": "Integer", "ba9yGJ": "Load more", - "bbFMfd": "Workflows", "bcaiap": "Refresh", - "beWWW0": "Function name", "bf7078": "Returns the maximum value in the input array of numbers", "bg00eY": "Numbered list", "bkuRuS": "No operations found", @@ -4934,15 +4575,12 @@ "cMvmv5": "''Value'' must be a valid JSON array", "cNXS5n": "Stateless", "cQ/Ocu": "AI Agent", - "cR0MlP": "Browse...", "cR9RtV": "Discard changes", "cWpWiU": "More diagnostic information: x-ms-client-request-id is ''{clientRequestId}''.", - "cWrYnn": "Workspace folder", "cZ60Tk": "Loading....", "cZqrL1": "All", "cZv9J0": "Connection is valid", "cd+qhI": "Enter a valid tool name using only alphanumeric characters, starting with a letter (max 48 characters).", - "ceM0tn": "Enter logic app name", "ceVB5l": "Returns the body for a part in a multipart output from an action.", "cfUHfs": "Returns the difference between two dates as a timespan string", "cgq/+y": "Please select an identity", @@ -4959,7 +4597,6 @@ "cscezV": "Required. The collection to skip the first Count objects from.", "ctI9Pp": "Generate XSLT first before attempting to test mappings.", "cuKbLw": "Premium", - "cuLdXe": "Subscription", "cvp9VP": "Error code", "cw9FiJ": "Schema URI", "cwHxwb": "Add connection", @@ -4977,7 +4614,6 @@ "dCFP4g": "Collapse all", "dD8y1n": "Switch to key value mode", "dDYCuU": "Learn more", - "dE23PQ": "Logic app location", "dEe6Ob": "Enter a valid JSON.", "dIYzFU": "More…", "dKCp2j": "Tell me more about", @@ -4999,7 +4635,6 @@ "dgPMsl": "Completed", "dhlB0s": "Loading workflows aria label", "dhvk0u": "Returns a string representation of a base 64 encoded string", - "dkgivo": "Workflows selection", "doABYk": "No agent parameters are available to display.", "dqgt9y": "Convert the parameter to a Boolean", "drM9Sl": "Returns an array of values matching the key name from form-data or form-encoded action output", @@ -5013,7 +4648,6 @@ "e1+Gqi": "Select the resource location for your workflow", "e4JZEY": "(UTC+07:00) Tomsk", "e8JCcn": "Group actions by connector", - "e8iBzO": "Creating...", "e9OvzW": "Clear", "e9bIKh": "Failed to generate XSLT.", "eDiMaf": "Tool name is required", @@ -5039,10 +4673,8 @@ "eXWIo2": "Pre-filled value used if the user doesn't enter anything.", "eXcejw": "In progress", "eaEXYa": "All", - "eagv8j": "Create logic app workspace", "eb91v1": "Change connection", "ec13/p": "Learn more", - "edTuPs": "Split view", "egLI8P": "Required. The index of where the substring begins in parameter 1.", "ehIBkh": "Enter an integer", "ekM77J": "Workflow name", @@ -5056,7 +4688,6 @@ "epi+zR": "Close map checker", "er6O+w": "Name", "erwucR": "The group or domain the template belongs to (e.g., automation, data).", - "esTnYd": "Configure the settings for your custom code logic app", "evyGYj": "Reassign all connected actions to a new connection", "ewGciu": "Authentication", "f/lWTW": "Required. The objects to check for null.", @@ -5072,7 +4703,6 @@ "fElufw": "Select an API Management resource", "fGKmXs": "Load more", "fKYuwf": "Please select file or image", - "fKghDg": "A resource group is a container that holds related resources for an Azure solution.", "fLchIJ": "Creation failed", "fNE/hg": "Button to add dynamic content if token picker is hidden", "fNlJSh": "All connections must be connected for workflow creation", @@ -5080,7 +4710,6 @@ "fRrZKS": "Light-mode SAS URL", "fSMyDJ": "Request options - Timeout", "fVG5aD": "(UTC-05:00) Haiti", - "fZJWBR": "Loading designer", "fa8xG1": "Template validation failed. Please check the tabs for more details to fix the errors", "faPcYk": "No", "faUrud": "Loading connection data...", @@ -5090,14 +4719,12 @@ "fp8Ry3": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "fsRie2": "A short overview of what the template does.", "ft8BH8": "{count} Seconds", - "fuBVBE": "Logic app name", "fvGvnA": "Sorry, something went wrong. Please try again.", "g076bL": "Email", "g1zwch": "Zoom in", "g3DKT8": "Basics", "g4igOR": "Publish", "g7/EKC": "Limit", - "g7eU6A": "Workspace name", "g7my78": "Run test", "g8eDXe": "Limit the maximum iterations for this action.", "gA1dde": "Toggle code view", @@ -5106,7 +4733,6 @@ "gDDfek": "Returns a timestamp that is the current time plus the specified time interval.", "gDW6Bd": "Description of the trigger", "gDY9xk": "Returns the result from dividing the two numbers", - "gHm7zV": "Errors", "gIK0WG": "Required. A boolean value that determines which value the expression should return.", "gIx5ys": "Format text as italic. Shortcut: Ctrl+I", "gKq3Jv": "Previous failed", @@ -5141,7 +4767,6 @@ "gvDMuq": "Select a Batch Workflow resource", "gvo1S7": "Agent is unreachable in flow structure", "gwEKLM": "Loading...", - "gxHe8n": "No locations available", "h+W3VW": "Number", "h+ZYip": "{addIcon} Install gateway", "h0WB5b": "Others", @@ -5212,7 +4837,6 @@ "iCni1C": "Can't find any search results", "iE2+sy": "Choose the type of output", "iEy9pT": "Dynamic content", - "iFcpYH": "Logic app setup", "iFdKPk": "Provided by", "iGxL1E": "Issues", "iHVVTl": "Are you sure you want to delete {nodeId}?", @@ -5232,7 +4856,6 @@ "iXW+2l": "Add an action", "id4DBb": "After you review this AI generated flow suggestion, select", "idQjOP": "Properties", - "idw/7j": "Export logic app", "ifZ8ok": "Register an MCP server that you create, starting with a logic app. Create tools that run connector actions so your server can perform tasks. Available logic apps depend on your current Azure subscription.", "ihCdw4": "Required. The number to add to Summand 2.", "im0GMa": "Show less", @@ -5250,13 +4873,11 @@ "ixoJF3": "You need at least one workflow in this logic app to create an MCP server from existing workflows. Select the 'Create new workflows' to build tools from connector actions on your server.", "iy8rNf": "Test", "izS5yQ": "Learn more", - "izUiSp": "Parameters", "j/Pssm": "Formats a timespan value according to the specified format string and optional culture.", "j1FtOw": "Add new tag", "j2v8BE": "No connections are needed in this template", "j4OKkU": "Text color", "j5z8Vd": "Repeating", - "j6RrLt": "Project setup", "j7HEKm": "days", "jA6Wrp": "Add or select a target schema to use for your map.", "jDYilS": "This preview version of logic apps does not yet support stateless logic apps using the chat message trigger.", @@ -5280,9 +4901,7 @@ "jfInxm": "Edit in JSON", "jfQPGz": "Select to delete item", "jfU6pn": "Enabling secure inputs will automatically secure outputs.", - "jfWu9H": "Workflow name cannot be empty.", "jgOaTX": "Unable to generate schema", - "jheId9": "Workspace name", "jjIhsG": "Delete", "jk2rY+": "Save", "jlcMGg": "Describe something your flow should do. Add details where possible, including the connector to use and if any content should be included.", @@ -5296,7 +4915,6 @@ "k/oqFL": "Required. The base64 encoded string.", "k2a8ry": "Review + publish", "k5tGEr": "Yes", - "k6MqI+": "Creating...", "k8cbQ1": "Parameter errors", "k8fofe": "An error occurred while creating the app. Unknown error.", "kAJqcb": "Configure the parameters for this MCP tool", @@ -5325,7 +4943,6 @@ "kfmLTY": "Function ''{functionName}'' is missing required inputs", "khmfg3": "See all {count} actions", "kkFPeq": "Handoffs", - "kkKTEH": "Logic app that allows custom code integration and advanced scenarios", "kkx2qd": "Virtual network integration", "klY9UN": "{count, plural, one {# item matched.} =0 {no items matched.} other {# items matched.}}", "koft/j": "Default parameters", @@ -5333,7 +4950,6 @@ "kuFK3E": "Missing authentication type property: 'type'.", "kuMOqt": "Saved", "kuzT1s": "Previous", - "kv8ROl": ".NET Framework", "kvFOza": "Display name is required.", "kxv92S": "Successfully deleted MCP server: ''{serverName}''.", "l/3yJr": "Invalid connection", @@ -5384,7 +5000,6 @@ "m+/AXv": "Please fix the errors and try again.", "m/jJ/5": "Map checker", "m0e5px": "Learn more", - "m3H+gL": "New", "m4qt/b": "ACL creation failed for connection. Deleting the connection.", "m5InJc": "Status Code", "m6vIDU": "Required. The string to be encoded as a valid XML element or attribute name.", @@ -5402,7 +5017,6 @@ "mGpKsl": "Returns a string representation of a data URI", "mILANb": "Select a resource", "mIbBgK": "Connected to", - "mMivmV": "Regions", "mMysmk": "When another logic app calls this workflow", "mNaBPE": "Enter a valid JSON.", "mPuXlv": "Invalid type on split on value ''{splitOn}'', split on not in array.", @@ -5414,7 +5028,6 @@ "maP1K/": "{count} Minutes", "marivS": "Authenticate", "mb1XDD": "Actual value", - "mbQ+Js": "A workspace file \"{name}.code-workspace\" already exists.", "mc9MCq": "This list shows only workflows with actions and request triggers. Select the workflows you want to use.", "mca3Ml": "Sign in to connector", "meVkB6": "Empty property name", @@ -5426,13 +5039,11 @@ "mnuwWm": "This error might mean that the agent parameter schema is incorrectly set up.", "mpFlLc": "Mainframe Modernization", "mqVL/E": "Select actions", - "mr/BC/": "Function namespace", "mvrlkP": "Enter password as plain text or use a secure parameter", "mvu5xN": "{name} Value", "mwEHSX": "Function", "mx2IMJ": "13", "mxSILx": "Queries", - "mygEMn": "No workflows available", "mzxUwl": "Keep or edit the default name for the destination workflow in the Standard logic app.", "n+F7e2": "15", "n+sJ5W": "Published by", @@ -5464,7 +5075,6 @@ "nTA155": "Required. The name of the property to remove.", "nV2Spt": "Operation details panel", "nVDG00": "(UTC+14:00) Kiritimati Island", - "nVhDGu": "Enter workflow name", "nX3iRl": "User input must not be empty.", "nZ4nLn": "Suppress workflow headers", "ncW1Sw": "{operationName} operation, {connectorName} connector", @@ -5479,7 +5089,6 @@ "nmhiR6": "Standard", "no+blV": "Cancel", "no/SMg": "(UTC+10:00) Brisbane", - "ntW6su": "Package path", "nuNBYE": "Path", "nwLd4b": "Dropdown to select filepath", "nwTyEd": "Edit agent parameter", @@ -5494,7 +5103,6 @@ "o3SfI4": "Zoom to fit", "o5fYVy": "Describe this workflow.", "o7bd1o": "(UTC+03:30) Tehran", - "o7s/JG": "Logic app (Standard)", "oA5+TG": "This connector has no triggers available. Users often combine the following triggers with actions.", "oAFcW6": "Required. The dataURI to decode into a binary representation.", "oBAL2F": "{count} Days", @@ -5511,7 +5119,6 @@ "oPKLDZ": "Delete switch case", "oQjIWf": "Errors", "oR2x4N": "Invalid integer value", - "oRm/MY": "Custom code location", "oTBkbU": "Output", "oTmqLo": "Add connector", "oU4UD8": "Target agent", @@ -5530,11 +5137,9 @@ "olgoo5": "Select allowed tools", "om43/8": "Workflows list tabel", "oo72Za": "Start by choosing or creating workflows as tools for agents to perform tasks.", - "ooIa6F": "Limit reached", "opvqoT": "Run draft workflow", "or0uUQ": "Configure details for this node", "osln7P": "URL decodes the input string", - "otRX33": "Optimized for high reliability, ideal for process business transitional data.", "owpAI/": "Handoffs specify which agents can control the workflow after the current agent. Add a description to help the next agent understand the handoff purpose. You can send optional extra content or data to the next agent.", "ox2Ou7": "Enter a valid JSON", "oxCSqB": "You can edit parameters here or in designer.", @@ -5549,7 +5154,6 @@ "p0BE2D": "Clone", "p1IEXb": "Enter the data from previous step. You can also add data by typing the '/' character.", "p2eSD1": "Edit", - "p4Mgce": "Stateful", "p5ZID0": "(UTC+03:00) Kuwait, Riyadh", "p8AKOz": "Description", "pC2nr2": "Enter key", @@ -5557,8 +5161,6 @@ "pH2uak": "Collapse", "pH6ubt": "Details", "pJJ3x8": "Search nodes", - "pK0Ir8": "Export with warnings", - "pO1Zvz": "Package path cannot be empty.", "pOTcUO": "Required. The values to combine into an array.", "pOVDll": "Enter a valid integer.", "pRJny7": "Enter the handoff purpose.", @@ -5585,7 +5187,6 @@ "pykp8c": "Blank workflow", "q/+Uex": "Returns an XML node, nodeset or value as JSON from the provided XPath expression", "q/DRBW": "Required. The string to calculate UTF-8 length from.", - "q1dxkD": "Use the latest .NET 8 for modern development and performance", "q1gfIs": "Add a trigger", "q2OCEx": "Required. The value to assign to the property.", "q2w8Sk": "Convert the parameter to a string", @@ -5603,13 +5204,11 @@ "qJpnIL": "Checks if the string ends with a value (case-insensitive, invariant culture)", "qKVOwV": "Enter a name for the MCP server", "qMFpNH": "Loading dynamic data", - "qNh5t2": "Rules engine folder name", "qSejoi": "Returns true if the first argument is less than or equal to the second", "qSt0Sb": "Required", "qUWBUX": "{days, plural, one {# day} other {# days}}", "qUq/6N": "you agree to the", "qVgQfW": "Search", - "qXL3lS": "A project with this name already exists in the workspace.", "qc5S69": "Returns the number of elements in an array or string", "qiIs4V": "Example: {example}", "qif1I+": "Build tools for your MCP server by selecting connectors and their actions.", @@ -5625,8 +5224,6 @@ "qwZaWJ": "{selectedCount} of {totalCount} selected", "qxw9UO": "Status", "qy5WqY": "Previous flow suggestion", - "qyW34i": "Rules engine folder", - "qz9XeG": "Cancel", "qzaoRR": "Limit the maximum duration between the retries and asynchronous responses for this action. Note: This does not alter the request timeout of a single request", "r/P4gM": "Yes", "r/n6/9": "Enter a value", @@ -5643,14 +5240,11 @@ "rDDPpJ": "Secret", "rDQmGU": "Agent API key (valid for 24 hours)", "rEQceE": "Microsoft Authored", - "rGQ0Qx": "After export", - "rGWwuB": "Your logic app workspace from package has been created is ready to use.", "rGw0g0": "Loading action description...", "rHySVF": "Missing information for workflows creation", "rMYBfw": "Make the field optional", "rNi5Y3": "Select this checkbox if you're setting up an on-premises connection.", "rPw0Hp": "No Favorite actions or connectors found. Use the Star icon next to existing actions to add them to your favorites.", - "rREwxg": "Refresh", "rSIBjh": "Enter value for parameter.", "rSa1Id": "No files found in {filePath}, please save XSLT to specified path to use this function", "raBiud": "Required. Either an array of values to find the maximum value, or the first value of a set.", @@ -5689,7 +5283,6 @@ "sRpETS": "Warning: custom value does not match the schema node's type", "sVQe34": "Provide parameters to test the output.", "sVcvcG": "Basics", - "sXNnlg": "Logic app with rules engine", "sYQDN+": "Formatting options for font family", "sZ0G/Z": "Required. A string containing the unit of time specified in the interval to add.", "sZHTQV": "(UTC+09:00) Chita", @@ -5718,7 +5311,6 @@ "sv+IcU": "Unable to generate data map definition", "svaqnp": "Error should not be provided when status is \"Succeeded\"", "sw6EXK": "Status", - "swjISX": "Browse", "swt55B": "Suggested Triggers", "syFW9c": "Manage workflows in this template", "syiNc+": "Browse", @@ -5729,7 +5321,6 @@ "t/aciw": "The light image version of the workflow is required for publish.", "t0tN4J": "Code view", "t1cE+t": "The name users see when browsing templates in the gallery.", - "t2nswK": ".NET 8", "t5ECPm": "Search and select tools", "t7ytOJ": "Status", "t9RwOi": "The expression is invalid.", @@ -5782,9 +5373,7 @@ "tw6oMS": "Search for a connector", "twr0pi": "Copy trigger", "tzeDPE": "State type", - "u+VFmh": "Create project", "u0xUtD": "Open Chat in New Tab", - "u2mduv": "Export", "u2z3kg": "List of parameters in the template", "u60lSZ": "Name must be unique.", "u7p0Dp": "No connections found in this workflow", @@ -5864,7 +5453,6 @@ "vT0DCP": "Outputs", "vWR0op": "An error occurred while checking the name availability. Please try again later.", "vX9WYS": "Audience", - "vXqIg+": "Export location", "va40BJ": "Required. The name of the action whose outputs you want.", "vdtKjT": "To create and use an API connection, you must have a managed identity configured on this logic app.", "vhNDi9": "Add", @@ -5879,11 +5467,9 @@ "vp016T": "Select the agent parameter type", "vr70Gn": "Create a connection for {connectorName}.", "vrYqUF": "Enter custom value", - "vv8WR4": "Generate infrastructure files", "vvSHR8": "Navigate to element and view children", "vwH/XV": "Create parameter", "vxOc/M": "This contains a duplicate value", - "vyBSec": ".NET Framework", "vyddjn": "Showing {count} of {total}", "vz+t4/": "Using this trigger changes your workflow to a type that doesn’t support handoffs. Delete any handoffs to use this trigger.", "vzXXFP": "Workflow version", @@ -5912,7 +5498,6 @@ "wPi8wS": "----", "wPjnM9": "Paste a parallel action", "wPlTDB": "Full path", - "wPzyvX": "Export", "wQcEXt": "Required. The string that is searched for parameter 2 and updated with parameter 3, when parameter 2 is found in parameter 1.", "wQsEwc": "Required. The length of the substring.", "wT/gMB": "Key services this template integrates with.", @@ -5950,7 +5535,6 @@ "x74tKg": "hours", "x7IYBg": "Aborted", "x7XKH0": "Template classification. A single workflow creates a workflow template; multiple workflows create an accelerator template.", - "xBIh0S": "Workflow type", "xC1zg3": "Schemas", "xDHpeS": "Review your settings, ensure everything is correctly set up, and create your workflow.", "xFQXAI": "Ctrl + Z", @@ -5963,7 +5547,6 @@ "xMgLd8": "Minimum interval", "xN3GEX": "Enter password as plain text or use a secure parameter", "xPO/1M": "Register an MCP server that you create, starting with an empty logic app. Create tools that run connector actions so your server can perform tasks. Available logic apps depend on the Azure subscription for your API Center resource.", - "xQHAPW": ".NET Framework", "xQQ9ko": "Threshold", "xSMbKr": "Show raw inputs", "xSSfKC": "(UTC-03:00) Saint Pierre and Miquelon", @@ -5980,7 +5563,6 @@ "xfXUGz": "{count} Minute", "xgV4pp": "Select all", "xhBvXj": "Open test panel", - "xhJqo7": "Resource group", "xi2tn6": "Parameters", "xkCRtu": "Status", "xt5TeT": "Parameters are shared across workflows in a Logic App.", @@ -6007,15 +5589,12 @@ "yOyeBT": "Toggle minimap", "yQ6+nV": "Connect", "yRDuqj": "Show all", - "yRZ2Qm": "Clone connections", "yUNdJN": "Version: {version}", "yVFIAQ": "(UTC-01:00) Cabo Verde Is.", "yVh9kr": "8", - "yZ9m4I": "Logic app name", "yc0GcM": "Split a string or array into chunks of equal length", "ydqOly": "Choose a value", "yeagrz": "Ideal for request-response and processing IoT events", - "yen5zR": "Review and Validate", "yjierd": "Invalid expression type ''{type}''.", "yjjXCQ": "Close panel", "yk7L+4": "Dislike", @@ -6048,7 +5627,6 @@ "zOq84J": "Can't delete the last agent parameter.", "zOvGF8": "(UTC+02:00) Athens, Bucharest", "zPRSM9": "App identity is not configured on the logic app environment variables.", - "zTdffa": "Workflow name", "zUWAsJ": "Returns a boolean that indicates whether a string is an integer", "zUgja+": "Clear custom value", "zViEGr": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", diff --git a/apps/vs-code-designer/src/app/utils/codeless/__test__/draftManager.test.ts b/apps/vs-code-designer/src/app/utils/codeless/__test__/draftManager.test.ts new file mode 100644 index 00000000000..fcdb5dbebe0 --- /dev/null +++ b/apps/vs-code-designer/src/app/utils/codeless/__test__/draftManager.test.ts @@ -0,0 +1,225 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import * as path from 'path'; + +vi.mock('fs', () => ({ + existsSync: vi.fn(), + readFileSync: vi.fn(), + writeFileSync: vi.fn(), + unlinkSync: vi.fn(), + mkdirSync: vi.fn(), +})); + +vi.mock('../../../../constants', () => ({ + draftWorkflowFileName: 'workflow.draft.json', + draftConnectionsFileName: 'connections.draft.json', + draftParametersFileName: 'parameters.draft.json', +})); + +import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'fs'; +import { + getDraftWorkflowPath, + getDraftConnectionsPath, + getDraftParametersPath, + hasDraft, + saveDraft, + loadDraft, + discardDraft, +} from '../draftManager'; + +const workflowFilePath = path.join('/project', 'myWorkflow', 'workflow.json'); +const workflowDir = path.dirname(workflowFilePath); + +describe('draftManager', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('path helpers', () => { + it('getDraftWorkflowPath returns workflow.draft.json in the same directory', () => { + expect(getDraftWorkflowPath(workflowFilePath)).toBe(path.join(workflowDir, 'workflow.draft.json')); + }); + + it('getDraftConnectionsPath returns connections.draft.json in the same directory', () => { + expect(getDraftConnectionsPath(workflowFilePath)).toBe(path.join(workflowDir, 'connections.draft.json')); + }); + + it('getDraftParametersPath returns parameters.draft.json in the same directory', () => { + expect(getDraftParametersPath(workflowFilePath)).toBe(path.join(workflowDir, 'parameters.draft.json')); + }); + }); + + describe('hasDraft', () => { + it('returns true when draft workflow file exists', () => { + vi.mocked(existsSync).mockReturnValue(true); + expect(hasDraft(workflowFilePath)).toBe(true); + expect(existsSync).toHaveBeenCalledWith(path.join(workflowDir, 'workflow.draft.json')); + }); + + it('returns false when draft workflow file does not exist', () => { + vi.mocked(existsSync).mockReturnValue(false); + expect(hasDraft(workflowFilePath)).toBe(false); + }); + }); + + describe('saveDraft', () => { + const definition = { triggers: {}, actions: { action1: { type: 'Http' } } }; + const connectionReferences = { conn1: { api: { id: '/providers/test' } } }; + const parameters = { param1: { type: 'String', value: 'hello' } }; + + it('creates directory and writes definition file', () => { + saveDraft(workflowFilePath, { definition }); + + expect(mkdirSync).toHaveBeenCalledWith(workflowDir, { recursive: true }); + expect(writeFileSync).toHaveBeenCalledWith( + path.join(workflowDir, 'workflow.draft.json'), + JSON.stringify(definition, null, 4), + 'utf8' + ); + }); + + it('writes connections file when connectionReferences provided', () => { + saveDraft(workflowFilePath, { definition, connectionReferences }); + + expect(writeFileSync).toHaveBeenCalledWith( + path.join(workflowDir, 'connections.draft.json'), + JSON.stringify(connectionReferences, null, 4), + 'utf8' + ); + }); + + it('writes parameters file when parameters provided', () => { + saveDraft(workflowFilePath, { definition, parameters }); + + expect(writeFileSync).toHaveBeenCalledWith( + path.join(workflowDir, 'parameters.draft.json'), + JSON.stringify(parameters, null, 4), + 'utf8' + ); + }); + + it('does not write connections file when connectionReferences is undefined', () => { + saveDraft(workflowFilePath, { definition }); + + const writeCallPaths = vi.mocked(writeFileSync).mock.calls.map((call) => call[0]); + expect(writeCallPaths).not.toContain(path.join(workflowDir, 'connections.draft.json')); + }); + + it('does not write parameters file when parameters is undefined', () => { + saveDraft(workflowFilePath, { definition }); + + const writeCallPaths = vi.mocked(writeFileSync).mock.calls.map((call) => call[0]); + expect(writeCallPaths).not.toContain(path.join(workflowDir, 'parameters.draft.json')); + }); + + it('writes all three files when all data provided', () => { + saveDraft(workflowFilePath, { definition, connectionReferences, parameters }); + + expect(writeFileSync).toHaveBeenCalledTimes(3); + }); + }); + + describe('loadDraft', () => { + const definition = { triggers: {}, actions: {} }; + const connections = { conn1: { api: { id: '/test' } } }; + const parameters = { param1: { type: 'String' } }; + + it('returns hasDraft false when no draft file exists', () => { + vi.mocked(existsSync).mockReturnValue(false); + + const result = loadDraft(workflowFilePath); + + expect(result).toEqual({ hasDraft: false }); + }); + + it('loads only workflow definition when only draft workflow exists', () => { + vi.mocked(existsSync).mockImplementation((p: any) => { + return p === path.join(workflowDir, 'workflow.draft.json'); + }); + vi.mocked(readFileSync).mockReturnValue(JSON.stringify(definition)); + + const result = loadDraft(workflowFilePath); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toEqual(definition); + expect(result.draftConnections).toBeUndefined(); + expect(result.draftParameters).toBeUndefined(); + }); + + it('loads all draft artifacts when all files exist', () => { + vi.mocked(existsSync).mockReturnValue(true); + vi.mocked(readFileSync).mockImplementation((p: any) => { + if (String(p).includes('workflow.draft.json')) { + return JSON.stringify(definition); + } + if (String(p).includes('connections.draft.json')) { + return JSON.stringify(connections); + } + if (String(p).includes('parameters.draft.json')) { + return JSON.stringify(parameters); + } + return '{}'; + }); + + const result = loadDraft(workflowFilePath); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toEqual(definition); + expect(result.draftConnections).toEqual(connections); + expect(result.draftParameters).toEqual(parameters); + }); + + it('loads workflow and connections without parameters', () => { + vi.mocked(existsSync).mockImplementation((p: any) => { + return !String(p).includes('parameters.draft.json'); + }); + vi.mocked(readFileSync).mockImplementation((p: any) => { + if (String(p).includes('workflow.draft.json')) { + return JSON.stringify(definition); + } + if (String(p).includes('connections.draft.json')) { + return JSON.stringify(connections); + } + return '{}'; + }); + + const result = loadDraft(workflowFilePath); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toEqual(definition); + expect(result.draftConnections).toEqual(connections); + expect(result.draftParameters).toBeUndefined(); + }); + }); + + describe('discardDraft', () => { + it('deletes all existing draft files', () => { + vi.mocked(existsSync).mockReturnValue(true); + + discardDraft(workflowFilePath); + + expect(unlinkSync).toHaveBeenCalledTimes(3); + expect(unlinkSync).toHaveBeenCalledWith(path.join(workflowDir, 'workflow.draft.json')); + expect(unlinkSync).toHaveBeenCalledWith(path.join(workflowDir, 'connections.draft.json')); + expect(unlinkSync).toHaveBeenCalledWith(path.join(workflowDir, 'parameters.draft.json')); + }); + + it('only deletes files that exist', () => { + vi.mocked(existsSync).mockImplementation((p: any) => { + return String(p).includes('workflow.draft.json'); + }); + + discardDraft(workflowFilePath); + + expect(unlinkSync).toHaveBeenCalledTimes(1); + expect(unlinkSync).toHaveBeenCalledWith(path.join(workflowDir, 'workflow.draft.json')); + }); + + it('does nothing when no draft files exist', () => { + vi.mocked(existsSync).mockReturnValue(false); + + discardDraft(workflowFilePath); + + expect(unlinkSync).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts b/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts new file mode 100644 index 00000000000..3d65f37a465 --- /dev/null +++ b/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts @@ -0,0 +1,296 @@ +import { describe, it, expect } from 'vitest'; +import { designerSlice } from '../DesignerSlice'; +import type { DesignerState } from '../DesignerSlice'; +import { + initializeDesigner, + loadDraftState, + updateDraftSaveResult, + setDraftSaving, + updateDraftWorkflow, + updateDraftConnections, + updateDraftParameters, + setDraftMode, + clearDraftState, +} from '../DesignerSlice'; + +const reducer = designerSlice.reducer; + +const getInitialState = (): DesignerState => ({ + panelMetaData: null, + baseUrl: '/url', + workflowRuntimeBaseUrl: '', + apiVersion: '2018-11-01', + connectionData: {}, + apiHubServiceDetails: { + apiVersion: '2018-07-01-preview', + baseUrl: '/url', + subscriptionId: 'subscriptionId', + resourceGroup: '', + location: '', + tenantId: '', + httpClient: null as any, + }, + readOnly: false, + isLocal: true, + isMonitoringView: false, + callbackInfo: { value: '', method: '' }, + runId: '', + fileSystemConnections: {}, + iaMapArtifacts: [], + oauthRedirectUrl: '', + hostVersion: '', + isUnitTest: false, + unitTestDefinition: null, + isDraftMode: true, + hasDraft: false, + draftWorkflow: null, + draftConnections: null, + draftParameters: null, + lastDraftSaveTime: null, + draftSaveError: null, + isDraftSaving: false, +}); + +const mockDraftWorkflow = { triggers: {}, actions: { action1: { type: 'Http' } } }; +const mockDraftConnections = { conn1: { api: { id: '/providers/test' }, connection: { id: '/connections/conn1' } } }; +const mockDraftParameters = { param1: { type: 'String', value: 'hello' } }; + +describe('DesignerSlice - draft reducers', () => { + describe('initializeDesigner', () => { + const basePayload = { + panelMetadata: { standardApp: { definition: {} } }, + connectionData: {}, + baseUrl: 'https://test.com', + apiVersion: '2018-11-01', + apiHubServiceDetails: {}, + readOnly: false, + isLocal: true, + oauthRedirectUrl: '', + isMonitoringView: false, + runId: '', + hostVersion: '1.0.0', + isUnitTest: false, + unitTestDefinition: null, + workflowRuntimeBaseUrl: 'https://runtime.test.com', + }; + + it('should set hasDraft and draft artifacts when draftInfo is provided', () => { + const payload = { + ...basePayload, + draftInfo: { + hasDraft: true, + draftWorkflow: mockDraftWorkflow, + draftConnections: mockDraftConnections, + draftParameters: mockDraftParameters, + }, + }; + + const result = reducer(getInitialState(), initializeDesigner(payload)); + + expect(result.hasDraft).toBe(true); + expect(result.isDraftMode).toBe(true); + expect(result.draftWorkflow).toEqual(mockDraftWorkflow); + expect(result.draftConnections).toEqual(mockDraftConnections); + expect(result.draftParameters).toEqual(mockDraftParameters); + }); + + it('should set hasDraft false when draftInfo has no draft', () => { + const payload = { + ...basePayload, + draftInfo: { hasDraft: false }, + }; + + const result = reducer(getInitialState(), initializeDesigner(payload)); + + expect(result.hasDraft).toBe(false); + expect(result.isDraftMode).toBe(true); + expect(result.draftWorkflow).toBeNull(); + expect(result.draftConnections).toBeNull(); + expect(result.draftParameters).toBeNull(); + }); + + it('should reset draft state when draftInfo is undefined', () => { + const stateWithDraft = { + ...getInitialState(), + hasDraft: true, + draftWorkflow: mockDraftWorkflow, + draftConnections: mockDraftConnections, + }; + + const result = reducer(stateWithDraft, initializeDesigner(basePayload)); + + expect(result.hasDraft).toBe(false); + expect(result.isDraftMode).toBe(true); + expect(result.draftWorkflow).toBeNull(); + expect(result.draftConnections).toBeNull(); + expect(result.draftParameters).toBeNull(); + }); + + it('should handle draftInfo with partial artifacts', () => { + const payload = { + ...basePayload, + draftInfo: { + hasDraft: true, + draftWorkflow: mockDraftWorkflow, + // No connections or parameters + }, + }; + + const result = reducer(getInitialState(), initializeDesigner(payload)); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toEqual(mockDraftWorkflow); + expect(result.draftConnections).toBeNull(); + expect(result.draftParameters).toBeNull(); + }); + }); + + describe('loadDraftState', () => { + it('should set all draft fields from payload', () => { + const result = reducer( + getInitialState(), + loadDraftState({ + hasDraft: true, + draftWorkflow: mockDraftWorkflow, + draftConnections: mockDraftConnections, + draftParameters: mockDraftParameters, + }) + ); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toEqual(mockDraftWorkflow); + expect(result.draftConnections).toEqual(mockDraftConnections); + expect(result.draftParameters).toEqual(mockDraftParameters); + }); + + it('should set null for missing optional fields', () => { + const result = reducer(getInitialState(), loadDraftState({ hasDraft: true })); + + expect(result.hasDraft).toBe(true); + expect(result.draftWorkflow).toBeNull(); + expect(result.draftConnections).toBeNull(); + expect(result.draftParameters).toBeNull(); + }); + }); + + describe('updateDraftSaveResult', () => { + it('should update timestamp and clear error on success', () => { + const state = { ...getInitialState(), isDraftSaving: true, draftSaveError: 'old error' }; + + const result = reducer(state, updateDraftSaveResult({ success: true, timestamp: 1234567890 })); + + expect(result.isDraftSaving).toBe(false); + expect(result.lastDraftSaveTime).toBe(1234567890); + expect(result.draftSaveError).toBeNull(); + expect(result.hasDraft).toBe(true); + }); + + it('should set error on failure', () => { + const state = { ...getInitialState(), isDraftSaving: true }; + + const result = reducer(state, updateDraftSaveResult({ success: false, timestamp: 0, error: 'Save failed' })); + + expect(result.isDraftSaving).toBe(false); + expect(result.draftSaveError).toBe('Save failed'); + }); + + it('should set default error message when error is undefined on failure', () => { + const state = { ...getInitialState(), isDraftSaving: true }; + + const result = reducer(state, updateDraftSaveResult({ success: false, timestamp: 0 })); + + expect(result.draftSaveError).toBe('Unknown error'); + }); + }); + + describe('setDraftSaving', () => { + it('should set isDraftSaving to true', () => { + const result = reducer(getInitialState(), setDraftSaving(true)); + expect(result.isDraftSaving).toBe(true); + }); + + it('should set isDraftSaving to false', () => { + const state = { ...getInitialState(), isDraftSaving: true }; + const result = reducer(state, setDraftSaving(false)); + expect(result.isDraftSaving).toBe(false); + }); + }); + + describe('updateDraftWorkflow', () => { + it('should update draftWorkflow', () => { + const result = reducer(getInitialState(), updateDraftWorkflow(mockDraftWorkflow)); + expect(result.draftWorkflow).toEqual(mockDraftWorkflow); + }); + }); + + describe('updateDraftConnections', () => { + it('should update draftConnections', () => { + const result = reducer(getInitialState(), updateDraftConnections(mockDraftConnections)); + expect(result.draftConnections).toEqual(mockDraftConnections); + }); + }); + + describe('updateDraftParameters', () => { + it('should update draftParameters', () => { + const result = reducer(getInitialState(), updateDraftParameters(mockDraftParameters)); + expect(result.draftParameters).toEqual(mockDraftParameters); + }); + }); + + describe('setDraftMode', () => { + it('should set isDraftMode to true', () => { + const state = { ...getInitialState(), isDraftMode: false }; + const result = reducer(state, setDraftMode(true)); + expect(result.isDraftMode).toBe(true); + }); + + it('should set isDraftMode to false', () => { + const result = reducer(getInitialState(), setDraftMode(false)); + expect(result.isDraftMode).toBe(false); + }); + }); + + describe('clearDraftState', () => { + it('should reset all draft fields to defaults', () => { + const dirtyState: DesignerState = { + ...getInitialState(), + hasDraft: true, + isDraftMode: false, + draftWorkflow: mockDraftWorkflow, + draftConnections: mockDraftConnections, + draftParameters: mockDraftParameters, + lastDraftSaveTime: 9999999, + draftSaveError: 'some error', + isDraftSaving: true, + }; + + const result = reducer(dirtyState, clearDraftState()); + + expect(result.hasDraft).toBe(false); + expect(result.isDraftMode).toBe(true); + expect(result.draftWorkflow).toBeNull(); + expect(result.draftConnections).toBeNull(); + expect(result.draftParameters).toBeNull(); + expect(result.lastDraftSaveTime).toBeNull(); + expect(result.draftSaveError).toBeNull(); + expect(result.isDraftSaving).toBe(false); + }); + + it('should preserve non-draft state fields', () => { + const state: DesignerState = { + ...getInitialState(), + baseUrl: 'https://custom.com', + isLocal: false, + hasDraft: true, + draftWorkflow: mockDraftWorkflow, + }; + + const result = reducer(state, clearDraftState()); + + expect(result.baseUrl).toBe('https://custom.com'); + expect(result.isLocal).toBe(false); + expect(result.hasDraft).toBe(false); + expect(result.draftWorkflow).toBeNull(); + }); + }); +}); From 13286c4a8f462507349248193feeb8993cdeb917 Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Fri, 13 Feb 2026 12:49:31 -0800 Subject: [PATCH 3/6] added tests --- .../__test__/getRelativeTimeString.test.ts | 84 +++++++++++++ .../designer/DesignerCommandBar/indexV2.tsx | 25 +--- .../app/designer/DesignerCommandBar/utils.ts | 23 ++++ .../src/state/__test__/DesignerSlice.test.ts | 112 +++++++++++++++++- 4 files changed, 219 insertions(+), 25 deletions(-) create mode 100644 apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/getRelativeTimeString.test.ts create mode 100644 apps/vs-code-react/src/app/designer/DesignerCommandBar/utils.ts diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/getRelativeTimeString.test.ts b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/getRelativeTimeString.test.ts new file mode 100644 index 00000000000..877d92953be --- /dev/null +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/getRelativeTimeString.test.ts @@ -0,0 +1,84 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { getRelativeTimeString } from '../utils'; + +const mockMessages = { + secondsAgo: 'Autosaved seconds ago', + minutesAgo: 'Autosaved minutes ago', + oneHourAgo: 'Autosaved 1 hour ago', + hoursAgo: vi.fn((values?: Record) => `Autosaved ${values?.count} hours ago`), +}; + +describe('getRelativeTimeString', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it('should return seconds ago for less than 1 minute', () => { + const now = new Date('2025-01-15T10:00:30.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:05.000Z'); // 25 seconds ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved seconds ago'); + }); + + it('should return seconds ago for exactly 0 seconds', () => { + const now = new Date('2025-01-15T10:00:00.000Z'); + vi.setSystemTime(now); + + expect(getRelativeTimeString(now, mockMessages)).toBe('Autosaved seconds ago'); + }); + + it('should return minutes ago for 1-59 minutes', () => { + const now = new Date('2025-01-15T10:05:00.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 5 minutes ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved minutes ago'); + }); + + it('should return minutes ago for exactly 1 minute', () => { + const now = new Date('2025-01-15T10:01:00.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 1 minute ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved minutes ago'); + }); + + it('should return one hour ago for exactly 1 hour', () => { + const now = new Date('2025-01-15T11:00:00.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 1 hour ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved 1 hour ago'); + }); + + it('should return hours ago with count for 2+ hours', () => { + const now = new Date('2025-01-15T13:00:00.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 3 hours ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved 3 hours ago'); + expect(mockMessages.hoursAgo).toHaveBeenCalledWith({ count: 3 }); + }); + + it('should return hours ago for large time differences', () => { + const now = new Date('2025-01-16T10:00:00.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 24 hours ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved 24 hours ago'); + expect(mockMessages.hoursAgo).toHaveBeenCalledWith({ count: 24 }); + }); + + it('should return minutes ago at 59 minutes boundary', () => { + const now = new Date('2025-01-15T10:59:59.000Z'); + vi.setSystemTime(now); + + const savedTime = new Date('2025-01-15T10:00:00.000Z'); // 59 min 59 sec ago + expect(getRelativeTimeString(savedTime, mockMessages)).toBe('Autosaved minutes ago'); + }); +}); diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx b/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx index 76d749a1a60..7241672db1c 100644 --- a/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/indexV2.tsx @@ -68,6 +68,7 @@ import { DocumentOnePageColumnsRegular, } from '@fluentui/react-icons'; import { useCommandBarStyles } from './styles'; +import { getRelativeTimeString } from './utils'; import { useSelector } from 'react-redux'; import { useIntlMessages, useIntlFormatters, designerMessages } from '../../../intl'; @@ -562,27 +563,3 @@ export const DesignerCommandBar: React.FC = ({ ); }; - -const getRelativeTimeString = ( - savedTime: Date, - messages: { - secondsAgo: string; - minutesAgo: string; - oneHourAgo: string; - hoursAgo: (values?: Record) => string; - } -) => { - const now = new Date(); - const diffMs = now.getTime() - savedTime.getTime(); - const diffSeconds = Math.floor(diffMs / 1000); - const diffMinutes = Math.floor(diffSeconds / 60); - const diffHours = Math.floor(diffMinutes / 60); - - if (diffHours > 0) { - return diffHours === 1 ? messages.oneHourAgo : messages.hoursAgo({ count: diffHours }); - } - if (diffMinutes > 0) { - return messages.minutesAgo; - } - return messages.secondsAgo; -}; diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/utils.ts b/apps/vs-code-react/src/app/designer/DesignerCommandBar/utils.ts new file mode 100644 index 00000000000..fa5b6130a9d --- /dev/null +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/utils.ts @@ -0,0 +1,23 @@ +export const getRelativeTimeString = ( + savedTime: Date, + messages: { + secondsAgo: string; + minutesAgo: string; + oneHourAgo: string; + hoursAgo: (values?: Record) => string; + } +) => { + const now = new Date(); + const diffMs = now.getTime() - savedTime.getTime(); + const diffSeconds = Math.floor(diffMs / 1000); + const diffMinutes = Math.floor(diffSeconds / 60); + const diffHours = Math.floor(diffMinutes / 60); + + if (diffHours > 0) { + return diffHours === 1 ? messages.oneHourAgo : messages.hoursAgo({ count: diffHours }); + } + if (diffMinutes > 0) { + return messages.minutesAgo; + } + return messages.secondsAgo; +}; diff --git a/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts b/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts index 3d65f37a465..5dc9a40a721 100644 --- a/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts +++ b/apps/vs-code-react/src/state/__test__/DesignerSlice.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect, vi } from 'vitest'; import { designerSlice } from '../DesignerSlice'; import type { DesignerState } from '../DesignerSlice'; import { @@ -11,6 +11,12 @@ import { updateDraftParameters, setDraftMode, clearDraftState, + updateRuntimeBaseUrl, + updateCallbackUrl, + updatePanelMetadata, + createFileSystemConnection, + updateFileSystemConnection, + updateUnitTestDefinition, } from '../DesignerSlice'; const reducer = designerSlice.reducer; @@ -55,6 +61,110 @@ const mockDraftWorkflow = { triggers: {}, actions: { action1: { type: 'Http' } } const mockDraftConnections = { conn1: { api: { id: '/providers/test' }, connection: { id: '/connections/conn1' } } }; const mockDraftParameters = { param1: { type: 'String', value: 'hello' } }; +describe('DesignerSlice - core reducers', () => { + describe('updateRuntimeBaseUrl', () => { + it('should update workflowRuntimeBaseUrl', () => { + const result = reducer(getInitialState(), updateRuntimeBaseUrl('https://new-runtime.test.com')); + expect(result.workflowRuntimeBaseUrl).toBe('https://new-runtime.test.com'); + }); + + it('should set empty string when payload is undefined', () => { + const state = { ...getInitialState(), workflowRuntimeBaseUrl: 'https://old.com' }; + const result = reducer(state, updateRuntimeBaseUrl(undefined)); + expect(result.workflowRuntimeBaseUrl).toBe(''); + }); + }); + + describe('updateCallbackUrl', () => { + it('should update callbackInfo from payload', () => { + const callbackInfo = { value: 'https://callback.test.com/trigger', method: 'POST' }; + const result = reducer(getInitialState(), updateCallbackUrl({ callbackInfo })); + expect(result.callbackInfo).toEqual(callbackInfo); + }); + }); + + describe('updatePanelMetadata', () => { + it('should update panelMetaData, connectionData, and apiHubServiceDetails', () => { + const panelMetadata = { standardApp: { definition: { triggers: {} } } } as any; + const connectionData = { conn1: { api: { id: '/test' } } } as any; + const apiHubServiceDetails = { + apiVersion: '2020-06-01', + baseUrl: 'https://hub.test.com', + subscriptionId: 'sub-123', + resourceGroup: 'rg', + location: 'eastus', + tenantId: 'tenant-123', + httpClient: null as any, + }; + + const result = reducer(getInitialState(), updatePanelMetadata({ panelMetadata, connectionData, apiHubServiceDetails })); + + expect(result.panelMetaData).toEqual(panelMetadata); + expect(result.connectionData).toEqual(connectionData); + expect(result.apiHubServiceDetails).toEqual(apiHubServiceDetails); + }); + }); + + describe('createFileSystemConnection', () => { + it('should store resolve and reject callbacks for the connection', () => { + const resolve = vi.fn(); + const reject = vi.fn(); + const result = reducer(getInitialState(), createFileSystemConnection({ connectionName: 'myConn', resolve, reject })); + + expect(result.fileSystemConnections['myConn']).toBeDefined(); + expect(result.fileSystemConnections['myConn'].resolveConnection).toBe(resolve); + expect(result.fileSystemConnections['myConn'].rejectConnection).toBe(reject); + }); + }); + + describe('updateFileSystemConnection', () => { + it('should resolve the connection and remove it from state', () => { + const resolve = vi.fn(); + const reject = vi.fn(); + const state = { + ...getInitialState(), + fileSystemConnections: { myConn: { resolveConnection: resolve, rejectConnection: reject } }, + }; + const connection = { id: '/connections/myConn', name: 'myConn' }; + + const result = reducer(state, updateFileSystemConnection({ connectionName: 'myConn', connection } as any)); + + expect(resolve).toHaveBeenCalledWith(connection); + expect(reject).not.toHaveBeenCalled(); + expect(result.fileSystemConnections['myConn']).toBeUndefined(); + }); + + it('should reject the connection on error and remove it from state', () => { + const resolve = vi.fn(); + const reject = vi.fn(); + const state = { + ...getInitialState(), + fileSystemConnections: { myConn: { resolveConnection: resolve, rejectConnection: reject } }, + }; + + const result = reducer(state, updateFileSystemConnection({ connectionName: 'myConn', error: 'Connection failed' } as any)); + + expect(reject).toHaveBeenCalledWith({ message: 'Connection failed' }); + expect(resolve).not.toHaveBeenCalled(); + expect(result.fileSystemConnections['myConn']).toBeUndefined(); + }); + }); + + describe('updateUnitTestDefinition', () => { + it('should update unitTestDefinition', () => { + const unitTestDefinition = { + triggerMocks: { manual: { outputs: {} } }, + actionMocks: {}, + assertions: [{ name: 'test', description: '', expression: { operand1: '', operator: 'equals', operand2: '' } }], + } as any; + + const result = reducer(getInitialState(), updateUnitTestDefinition({ unitTestDefinition })); + + expect(result.unitTestDefinition).toEqual(unitTestDefinition); + }); + }); +}); + describe('DesignerSlice - draft reducers', () => { describe('initializeDesigner', () => { const basePayload = { From cfb926f1e31dda7047af4e583fd38489b7ae8948 Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Tue, 17 Feb 2026 10:49:46 -0800 Subject: [PATCH 4/6] added tests --- .../__test__/indexV2.test.tsx | 298 ++++++++++++++++ .../src/app/designer/__test__/appV2.test.tsx | 335 ++++++++++++++++++ 2 files changed, 633 insertions(+) create mode 100644 apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx create mode 100644 apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx new file mode 100644 index 00000000000..5a87d9afd67 --- /dev/null +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx @@ -0,0 +1,298 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { FluentProvider, webLightTheme } from '@fluentui/react-components'; + +// Use vi.hoisted to define mock variables that are used in vi.mock factories +const { mockPostMessage, mockDesignerIsDirty, mockChangeCount } = vi.hoisted(() => { + return { + mockPostMessage: vi.fn(), + mockDesignerIsDirty: { current: false }, + mockChangeCount: { current: 0 }, + }; +}); + +// Mock webviewCommunication to avoid acquireVsCodeApi global +vi.mock('../../../../webviewCommunication', async () => { + const React = await import('react'); + return { + VSCodeContext: React.createContext({ postMessage: mockPostMessage }), + }; +}); + +vi.mock('@microsoft/logic-apps-designer-v2', () => ({ + serializeWorkflow: vi.fn(), + store: { dispatch: vi.fn(), getState: vi.fn(() => ({ operations: { inputParameters: {} }, customCode: {} })) }, + serializeUnitTestDefinition: vi.fn(), + getNodeOutputOperations: vi.fn(), + useIsDesignerDirty: vi.fn(() => mockDesignerIsDirty.current), + validateParameter: vi.fn(() => []), + updateParameterValidation: vi.fn(), + openPanel: vi.fn((arg: any) => arg), + useAssertionsValidationErrors: vi.fn(() => ({})), + useWorkflowParameterValidationErrors: vi.fn(() => ({})), + useAllSettingsValidationErrors: vi.fn(() => ({})), + useAllConnectionErrors: vi.fn(() => ({})), + getCustomCodeFilesWithData: vi.fn(() => ({})), + resetDesignerDirtyState: vi.fn(), + resetDesignerView: vi.fn(), + collapsePanel: vi.fn(), + useChangeCount: vi.fn(() => mockChangeCount.current), +})); + +vi.mock('@microsoft/logic-apps-shared', () => ({ + isNullOrEmpty: vi.fn((val) => !val || Object.keys(val).length === 0), + useThrottledEffect: vi.fn(), +})); + +vi.mock('@microsoft/vscode-extension-logic-apps', () => ({ + ExtensionCommand: { + save: 'save', + saveUnitTest: 'saveUnitTest', + createUnitTest: 'createUnitTest', + createUnitTestFromRun: 'createUnitTestFromRun', + logTelemetry: 'logTelemetry', + fileABug: 'fileABug', + }, +})); + +vi.mock('@tanstack/react-query', () => ({ + useMutation: vi.fn((fn: any) => ({ + mutate: vi.fn(() => fn?.()), + isLoading: false, + })), +})); + +vi.mock('../styles', () => ({ + useCommandBarStyles: vi.fn(() => ({ + viewModeContainer: 'viewModeContainer', + viewButton: 'viewButton', + selectedButton: 'selectedButton', + })), +})); + +vi.mock('react-redux', () => ({ + useSelector: vi.fn(() => ({})), +})); + +vi.mock('../../../../intl', () => ({ + useIntlMessages: vi.fn(() => ({ + WORKFLOW_TAB: 'Workflow', + CODE_TAB: 'Code', + RUN_HISTORY_TAB: 'Run History', + PUBLISH: 'Publish', + PUBLISHING: 'Publishing...', + SAVE: 'Save', + DISCARD: 'Discard', + DISCARD_SESSION_CHANGES: 'Discard session changes', + DISCARD_DRAFT: 'Discard draft', + SAVING_DRAFT: 'Saving...', + ERROR_AUTOSAVING_DRAFT: 'Error autosaving draft', + AUTOSAVED_SECONDS_AGO: 'Autosaved seconds ago', + AUTOSAVED_MINUTES_AGO: 'Autosaved minutes ago', + AUTOSAVED_ONE_HOUR_AGO: 'Autosaved 1 hour ago', + SWITCH_TO_PUBLISHED: 'Switch to published', + SWITCH_TO_DRAFT: 'Switch to draft', + MORE_ACTIONS: 'More actions', + PARAMETERS: 'Parameters', + CONNECTIONS: 'Connections', + ERRORS: 'Errors', + SAVE_UNIT_TEST: 'Save unit test', + CREATE_UNIT_TEST: 'Create unit test', + CREATE_UNIT_TEST_FROM_RUN: 'Create unit test from run', + UNIT_TEST_ASSERTIONS: 'Assertions', + FILE_BUG: 'File a bug', + })), + useIntlFormatters: vi.fn(() => ({ + DRAFT_AUTOSAVED_AT: vi.fn(({ time }: any) => `Draft autosaved at ${time}`), + AUTOSAVED_HOURS_AGO: vi.fn(({ count }: any) => `Autosaved ${count} hours ago`), + })), + designerMessages: {}, +})); + +// Import after mocks +import { DesignerCommandBar, type DesignerCommandBarProps } from '../indexV2'; + +const defaultProps: DesignerCommandBarProps = { + isDarkMode: false, + isUnitTest: false, + isLocal: true, + runId: '', + saveWorkflow: vi.fn().mockResolvedValue({}), + saveWorkflowFromCode: vi.fn().mockResolvedValue({}), + discard: vi.fn(), + isDesignerView: true, + isCodeView: false, + isMonitoringView: false, + switchToDesignerView: vi.fn(), + switchToCodeView: vi.fn(), + switchToMonitoringView: vi.fn(), + isDraftMode: true, + saveDraftWorkflow: vi.fn(), + discardDraft: vi.fn(), + switchWorkflowMode: vi.fn(), + lastDraftSaveTime: null, + draftSaveError: null, + isDraftSaving: false, + hasDraft: false, +}; + +const renderCommandBar = (props: Partial = {}) => { + return render( + + + + ); +}; + +describe('DesignerCommandBar (V2)', () => { + beforeEach(() => { + vi.clearAllMocks(); + mockDesignerIsDirty.current = false; + mockChangeCount.current = 0; + }); + + describe('View mode tabs', () => { + it('should render Workflow, Code, and Run History tabs', () => { + renderCommandBar(); + expect(screen.getByText('Workflow')).toBeDefined(); + expect(screen.getByText('Code')).toBeDefined(); + expect(screen.getByText('Run History')).toBeDefined(); + }); + + it('should call switchToCodeView when Code tab is clicked', () => { + const switchToCodeView = vi.fn(); + renderCommandBar({ switchToCodeView }); + fireEvent.click(screen.getByText('Code')); + expect(switchToCodeView).toHaveBeenCalled(); + }); + + it('should call switchToMonitoringView when Run History tab is clicked', () => { + const switchToMonitoringView = vi.fn(); + renderCommandBar({ switchToMonitoringView }); + fireEvent.click(screen.getByText('Run History')); + expect(switchToMonitoringView).toHaveBeenCalled(); + }); + }); + + describe('Save/Publish button', () => { + it('should display "Publish" when in draft mode', () => { + mockDesignerIsDirty.current = true; + renderCommandBar({ isDraftMode: true, hasDraft: true }); + expect(screen.getByText('Publish')).toBeDefined(); + }); + + it('should be disabled when in monitoring view', () => { + renderCommandBar({ isMonitoringView: true }); + const publishBtn = screen.getByText('Publish').closest('button'); + expect(publishBtn?.disabled).toBe(true); + }); + + it('should be disabled when not dirty and no draft', () => { + mockDesignerIsDirty.current = false; + renderCommandBar({ isDraftMode: true, hasDraft: false }); + const publishBtn = screen.getByText('Publish').closest('button'); + expect(publishBtn?.disabled).toBe(true); + }); + + it('should be enabled when hasDraft even if not dirty', () => { + mockDesignerIsDirty.current = false; + renderCommandBar({ isDraftMode: true, hasDraft: true }); + const publishBtn = screen.getByText('Publish').closest('button'); + expect(publishBtn?.disabled).toBe(false); + }); + + it('should be disabled when not in draft mode', () => { + mockDesignerIsDirty.current = true; + renderCommandBar({ isDraftMode: false, hasDraft: true }); + const publishBtn = screen.getByText('Publish').closest('button'); + expect(publishBtn?.disabled).toBe(true); + }); + }); + + describe('Discard button', () => { + it('should render simple discard button when no draft exists', () => { + renderCommandBar({ hasDraft: false }); + // No dropdown menu items visible + expect(screen.queryByText('Discard session changes')).toBeNull(); + expect(screen.queryByText('Discard draft')).toBeNull(); + }); + + it('should render discard dropdown menu when draft exists', () => { + renderCommandBar({ hasDraft: true }); + // The discard button should be a menu trigger - click it to open + const discardBtn = screen.getByLabelText('Discard'); + fireEvent.click(discardBtn); + expect(screen.getByText('Discard session changes')).toBeDefined(); + expect(screen.getByText('Discard draft')).toBeDefined(); + }); + + it('should call discardDraft when "Discard draft" is clicked', () => { + const discardDraft = vi.fn(); + renderCommandBar({ hasDraft: true, discardDraft }); + fireEvent.click(screen.getByLabelText('Discard')); + fireEvent.click(screen.getByText('Discard draft')); + expect(discardDraft).toHaveBeenCalled(); + }); + }); + + describe('Draft save notification', () => { + it('should show "Saving..." when isDraftSaving', () => { + renderCommandBar({ isDraftMode: true, isDraftSaving: true, isDesignerView: true }); + expect(screen.getByText('Saving...')).toBeDefined(); + }); + + it('should show error badge when draftSaveError exists', () => { + renderCommandBar({ isDraftMode: true, draftSaveError: 'Network error', isDesignerView: true }); + expect(screen.getByText('Error autosaving draft')).toBeDefined(); + }); + + it('should not show notification when not in draft mode', () => { + renderCommandBar({ isDraftMode: false, lastDraftSaveTime: Date.now(), isDesignerView: true }); + expect(screen.queryByText('Saving...')).toBeNull(); + }); + }); + + describe('Overflow menu', () => { + it('should show "Switch to published" when hasDraft and isDraftMode', () => { + renderCommandBar({ hasDraft: true, isDraftMode: true }); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('Switch to published')).toBeDefined(); + }); + + it('should show "Switch to draft" when hasDraft and not isDraftMode', () => { + renderCommandBar({ hasDraft: true, isDraftMode: false }); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('Switch to draft')).toBeDefined(); + }); + + it('should not show switch options when no draft exists', () => { + renderCommandBar({ hasDraft: false, isDraftMode: true }); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.queryByText('Switch to published')).toBeNull(); + expect(screen.queryByText('Switch to draft')).toBeNull(); + }); + + it('should call switchWorkflowMode(false) when "Switch to published" is clicked', () => { + const switchWorkflowMode = vi.fn(); + renderCommandBar({ hasDraft: true, isDraftMode: true, switchWorkflowMode }); + fireEvent.click(screen.getByLabelText('More actions')); + fireEvent.click(screen.getByText('Switch to published')); + expect(switchWorkflowMode).toHaveBeenCalledWith(false); + }); + + it('should call switchWorkflowMode(true) when "Switch to draft" is clicked', () => { + const switchWorkflowMode = vi.fn(); + renderCommandBar({ hasDraft: true, isDraftMode: false, switchWorkflowMode }); + fireEvent.click(screen.getByLabelText('More actions')); + fireEvent.click(screen.getByText('Switch to draft')); + expect(switchWorkflowMode).toHaveBeenCalledWith(true); + }); + + it('should show "File a bug" menu item', () => { + renderCommandBar(); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('File a bug')).toBeDefined(); + }); + }); +}); diff --git a/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx b/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx new file mode 100644 index 00000000000..f783585da90 --- /dev/null +++ b/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx @@ -0,0 +1,335 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { Provider } from 'react-redux'; +import { configureStore } from '@reduxjs/toolkit'; +import { designerSlice } from '../../../state/DesignerSlice'; + +// Use vi.hoisted to define mock variables that are used in vi.mock factories +const { mockPostMessage, mockConvertConnectionsDataToReferences } = vi.hoisted(() => { + return { + mockPostMessage: vi.fn(), + mockConvertConnectionsDataToReferences: vi.fn(() => ({ publishedConn: { api: { id: '/test' } } })), + }; +}); + +// Mock webviewCommunication to avoid acquireVsCodeApi global +vi.mock('../../../webviewCommunication', async () => { + const React = await import('react'); + return { + VSCodeContext: React.createContext({ postMessage: mockPostMessage }), + }; +}); + +// Mock DesignerCommandBar - capture props for assertions +let capturedCommandBarProps: any = null; +vi.mock('../DesignerCommandBar/indexV2', () => ({ + DesignerCommandBar: (props: any) => { + capturedCommandBarProps = props; + return
; + }, +})); + +vi.mock('../servicesHelper', () => ({ + getDesignerServices: vi.fn(() => ({ + connectionService: {}, + connectorService: {}, + operationManifestService: {}, + searchService: {}, + oAuthService: {}, + gatewayService: {}, + tenantService: {}, + workflowService: { getAgentUrl: vi.fn() }, + hostService: {}, + runService: { getRun: vi.fn().mockResolvedValue(null) }, + roleService: {}, + editorService: {}, + apimService: {}, + loggerService: {}, + connectionParameterEditorService: {}, + cognitiveServiceService: {}, + functionService: {}, + })), +})); + +vi.mock('../utilities/runInstance', () => ({ + getRunInstanceMocks: vi.fn(), +})); + +vi.mock('../utilities/workflow', () => ({ + convertConnectionsDataToReferences: mockConvertConnectionsDataToReferences, +})); + +vi.mock('../CodeViewEditor', () => ({ + default: React.forwardRef(() =>
), +})); + +vi.mock('@microsoft/logic-apps-designer-v2', () => ({ + DesignerProvider: ({ children }: any) =>
{children}
, + BJSWorkflowProvider: ({ children, workflow }: any) => ( +
+ {children} +
+ ), + Designer: () =>
, + FloatingRunButton: () =>
, + getTheme: vi.fn(() => 'light'), + useThemeObserver: vi.fn(), + useRun: vi.fn(() => ({ data: null, isError: false })), +})); + +vi.mock('@microsoft/logic-apps-shared', () => ({ + BundleVersionRequirements: { MULTI_VARIABLE: '1.0.0', NESTED_AGENT_LOOPS: '1.0.0' }, + guid: vi.fn(() => 'test-guid'), + isNullOrUndefined: vi.fn((val) => val === null || val === undefined), + isVersionSupported: vi.fn(() => false), + Theme: { Dark: 'dark', Light: 'light' }, +})); + +vi.mock('@microsoft/vscode-extension-logic-apps', () => ({ + ExtensionCommand: { + save: 'save', + saveDraft: 'saveDraft', + discardDraft: 'discardDraft', + createFileSystemConnection: 'createFileSystemConnection', + }, +})); + +vi.mock('@tanstack/react-query', () => ({ + useQueryClient: vi.fn(() => ({})), +})); + +vi.mock('@microsoft/designer-ui', () => ({ + XLargeText: ({ text }: any) =>
{text}
, +})); + +vi.mock('../appStyles', () => ({ + useAppStyles: vi.fn(() => ({ designerError: 'error-class' })), +})); + +vi.mock('../../intl', () => ({ + useIntlMessages: vi.fn(() => ({ SOMETHING_WENT_WRONG: 'Error' })), + commonMessages: {}, +})); + +// Import after mocks +import { DesignerApp } from '../appV2'; + +const mockWorkflowDefinition = { + triggers: { manual: { type: 'Request', kind: 'Http' } }, + actions: { action1: { type: 'Http' } }, +}; + +const mockDraftDefinition = { + triggers: { manual: { type: 'Request', kind: 'Http' } }, + actions: { draftAction: { type: 'Http' } }, +}; + +const createTestStore = (overrides: Partial> = {}) => { + return configureStore({ + reducer: { + designer: designerSlice.reducer, + }, + preloadedState: { + designer: { + ...designerSlice.getInitialState(), + panelMetaData: { + standardApp: { definition: mockWorkflowDefinition, kind: 'Stateful' }, + parametersData: { publishedParam: { type: 'String', value: 'pub' } }, + } as any, + connectionData: { publishedConn: { api: { id: '/test' } } } as any, + baseUrl: 'https://test.com', + apiVersion: '2018-11-01', + apiHubServiceDetails: { + apiVersion: '2018-07-01-preview', + baseUrl: '/url', + subscriptionId: 'sub', + resourceGroup: 'rg', + location: 'eastus', + tenantId: 'tenant', + httpClient: null as any, + }, + isLocal: true, + hostVersion: '1.0.0', + ...overrides, + }, + }, + }); +}; + +describe('DesignerApp (V2)', () => { + beforeEach(() => { + vi.clearAllMocks(); + capturedCommandBarProps = null; + }); + + it('should render designer when workflow definition exists', () => { + const store = createTestStore(); + render( + + + + ); + expect(screen.getByTestId('designer-provider')).toBeDefined(); + expect(screen.getByTestId('designer')).toBeDefined(); + expect(screen.getByTestId('command-bar')).toBeDefined(); + }); + + it('should render null when no panelMetaData', () => { + const store = createTestStore({ panelMetaData: null }); + const { container } = render( + + + + ); + // DesignerProvider still renders, but BJSWorkflowProvider should not + expect(screen.queryByTestId('bjs-workflow-provider')).toBeNull(); + }); + + it('should pass draft props to DesignerCommandBar', () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + lastDraftSaveTime: 1234567890, + draftSaveError: null, + isDraftSaving: false, + }); + render( + + + + ); + + expect(capturedCommandBarProps).not.toBeNull(); + expect(capturedCommandBarProps.isDraftMode).toBe(true); + expect(capturedCommandBarProps.hasDraft).toBe(true); + expect(capturedCommandBarProps.lastDraftSaveTime).toBe(1234567890); + expect(capturedCommandBarProps.draftSaveError).toBeNull(); + expect(capturedCommandBarProps.isDraftSaving).toBe(false); + expect(typeof capturedCommandBarProps.saveDraftWorkflow).toBe('function'); + expect(typeof capturedCommandBarProps.discardDraft).toBe('function'); + expect(typeof capturedCommandBarProps.switchWorkflowMode).toBe('function'); + }); + + it('should use published connections when not in draft mode', () => { + const store = createTestStore({ + isDraftMode: false, + hasDraft: true, + draftConnections: { draftConn: { api: { id: '/draft' } } }, + }); + render( + + + + ); + + // When not in draft mode, convertConnectionsDataToReferences should be used + expect(mockConvertConnectionsDataToReferences).toHaveBeenCalled(); + }); + + it('should use draft connections when in draft mode with draft', () => { + mockConvertConnectionsDataToReferences.mockClear(); + const draftConns = { draftConn: { api: { id: '/draft' }, connection: { id: '/connections/draft' } } }; + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftConnections: draftConns, + }); + render( + + + + ); + + // The BJSWorkflowProvider should receive the draft connections + const provider = screen.getByTestId('bjs-workflow-provider'); + const workflowData = JSON.parse(provider.getAttribute('data-workflow') || '{}'); + expect(workflowData.connectionReferences).toEqual(draftConns); + }); + + it('should use draft parameters when in draft mode with draft', () => { + const draftParams = { draftParam: { type: 'String', value: 'draft-value' } }; + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftParameters: draftParams, + }); + render( + + + + ); + + const provider = screen.getByTestId('bjs-workflow-provider'); + const workflowData = JSON.parse(provider.getAttribute('data-workflow') || '{}'); + expect(workflowData.parameters).toEqual(draftParams); + }); + + it('should use published parameters when not in draft mode', () => { + const store = createTestStore({ + isDraftMode: false, + hasDraft: true, + draftParameters: { draftParam: { type: 'String', value: 'draft' } }, + }); + render( + + + + ); + + const provider = screen.getByTestId('bjs-workflow-provider'); + const workflowData = JSON.parse(provider.getAttribute('data-workflow') || '{}'); + expect(workflowData.parameters).toEqual({ publishedParam: { type: 'String', value: 'pub' } }); + }); + + it('should set readOnly when hasDraft and not isDraftMode', () => { + const store = createTestStore({ + isDraftMode: false, + hasDraft: true, + readOnly: false, + }); + render( + + + + ); + + // The published view should be read-only when a draft exists + // We verify via the DesignerProvider render + expect(screen.getByTestId('designer-provider')).toBeDefined(); + }); + + it('should dispatch saveDraft message when saveDraftWorkflow is called', () => { + const store = createTestStore({ isDraftMode: true, hasDraft: false }); + render( + + + + ); + + const definition = { triggers: {}, actions: {} }; + const params = { p1: { type: 'String' } }; + const connRefs = { c1: { api: { id: '/test' } } }; + capturedCommandBarProps.saveDraftWorkflow(definition, params, connRefs); + + expect(mockPostMessage).toHaveBeenCalledWith({ + command: 'saveDraft', + definition, + parameters: params, + connectionReferences: connRefs, + }); + }); + + it('should dispatch discardDraft message when discardDraft is called', () => { + const store = createTestStore({ isDraftMode: true, hasDraft: true }); + render( + + + + ); + + capturedCommandBarProps.discardDraft(); + + expect(mockPostMessage).toHaveBeenCalledWith({ command: 'discardDraft' }); + }); +}); From c3e318fc889965b421b0dfc36159021117ad6b84 Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Tue, 17 Feb 2026 13:59:33 -0800 Subject: [PATCH 5/6] added more tests --- .../src/intl/__test__/messages.test.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 apps/vs-code-react/src/intl/__test__/messages.test.ts diff --git a/apps/vs-code-react/src/intl/__test__/messages.test.ts b/apps/vs-code-react/src/intl/__test__/messages.test.ts new file mode 100644 index 00000000000..03c49340531 --- /dev/null +++ b/apps/vs-code-react/src/intl/__test__/messages.test.ts @@ -0,0 +1,39 @@ +import { describe, it, expect } from 'vitest'; +import { + commonMessages, + unitTestMessages, + workspaceMessages, + exportMessages, + designerMessages, + overviewMessages, + chatMessages, +} from '../messages'; + +const messageGroups = { + commonMessages, + unitTestMessages, + workspaceMessages, + exportMessages, + designerMessages, + overviewMessages, + chatMessages, +}; + +describe('intl messages', () => { + for (const [groupName, messages] of Object.entries(messageGroups)) { + describe(groupName, () => { + it('should export a non-empty message group', () => { + expect(Object.keys(messages).length).toBeGreaterThan(0); + }); + + it('should have valid message descriptors with id and defaultMessage', () => { + for (const [key, descriptor] of Object.entries(messages)) { + expect(descriptor, `${groupName}.${key} missing id`).toHaveProperty('id'); + expect(descriptor, `${groupName}.${key} missing defaultMessage`).toHaveProperty('defaultMessage'); + expect(typeof (descriptor as any).id).toBe('string'); + expect(typeof (descriptor as any).defaultMessage).toBe('string'); + } + }); + }); + } +}); From ece64dc726d74489c27b378c07164238935cf7e1 Mon Sep 17 00:00:00 2001 From: Elaina Lee Date: Tue, 17 Feb 2026 15:11:03 -0800 Subject: [PATCH 6/6] shifted for limitations --- .../__test__/indexV2.test.tsx | 90 ++++++++ .../src/app/designer/__test__/appV2.test.tsx | 194 ++++++++++++++++++ apps/vs-code-react/vitest.config.ts | 2 +- 3 files changed, 285 insertions(+), 1 deletion(-) diff --git a/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx index 5a87d9afd67..01adc2d119c 100644 --- a/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx +++ b/apps/vs-code-react/src/app/designer/DesignerCommandBar/__test__/indexV2.test.tsx @@ -294,5 +294,95 @@ describe('DesignerCommandBar (V2)', () => { fireEvent.click(screen.getByLabelText('More actions')); expect(screen.getByText('File a bug')).toBeDefined(); }); + + it('should show "Create unit test from run" when isLocal', () => { + renderCommandBar({ isLocal: true }); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('Create unit test from run')).toBeDefined(); + }); + + it('should show unit test items when isUnitTest', () => { + renderCommandBar({ isUnitTest: true }); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('Save unit test')).toBeDefined(); + expect(screen.getByText('Create unit test')).toBeDefined(); + expect(screen.getByText('Assertions')).toBeDefined(); + }); + + it('should show panel items (Parameters, Connections, Errors)', () => { + renderCommandBar(); + fireEvent.click(screen.getByLabelText('More actions')); + expect(screen.getByText('Parameters')).toBeDefined(); + expect(screen.getByText('Connections')).toBeDefined(); + expect(screen.getByText('Errors')).toBeDefined(); + }); + }); + + describe('Save button click handlers', () => { + it('should trigger save when Publish is clicked in designer view', () => { + mockDesignerIsDirty.current = true; + renderCommandBar({ isDraftMode: true, hasDraft: true, isDesignerView: true }); + const publishBtn = screen.getByText('Publish').closest('button')!; + fireEvent.click(publishBtn); + // The mutation should have been called (useMutation mock calls the fn) + }); + + it('should trigger code save when Publish is clicked in code view', () => { + mockDesignerIsDirty.current = true; + renderCommandBar({ isDraftMode: true, hasDraft: true, isDesignerView: false, isCodeView: true }); + const publishBtn = screen.getByText('Publish').closest('button')!; + fireEvent.click(publishBtn); + // The code save mutation should have been called + }); + }); + + describe('Discard button in non-draft mode', () => { + it('should disable simple discard when not dirty', () => { + mockDesignerIsDirty.current = false; + renderCommandBar({ hasDraft: false }); + const discardBtn = screen.getByLabelText('Discard'); + expect(discardBtn.closest('button')?.disabled).toBe(true); + }); + + it('should disable simple discard in monitoring view', () => { + renderCommandBar({ hasDraft: false, isMonitoringView: true }); + const discardBtn = screen.getByLabelText('Discard'); + expect(discardBtn.closest('button')?.disabled).toBe(true); + }); + + it('should call discard when simple discard button is clicked', () => { + mockDesignerIsDirty.current = true; + const discard = vi.fn(); + renderCommandBar({ hasDraft: false, discard }); + fireEvent.click(screen.getByLabelText('Discard')); + expect(discard).toHaveBeenCalled(); + }); + }); + + describe('Draft save notification with saved time', () => { + it('should show autosaved time when lastDraftSaveTime is set', () => { + const recentTime = Date.now() - 5000; // 5 seconds ago + renderCommandBar({ isDraftMode: true, lastDraftSaveTime: recentTime, isDesignerView: true }); + expect(screen.getByText('Autosaved seconds ago')).toBeDefined(); + }); + + it('should show notification in code view too', () => { + renderCommandBar({ isDraftMode: true, isDraftSaving: true, isDesignerView: false, isCodeView: true }); + expect(screen.getByText('Saving...')).toBeDefined(); + }); + + it('should not show notification in monitoring view', () => { + renderCommandBar({ isDraftMode: true, lastDraftSaveTime: Date.now(), isMonitoringView: true, isDesignerView: false }); + expect(screen.queryByText('Autosaved seconds ago')).toBeNull(); + }); + }); + + describe('View mode tab active states', () => { + it('should call switchToDesignerView when Workflow tab is clicked', () => { + const switchToDesignerView = vi.fn(); + renderCommandBar({ switchToDesignerView, isDesignerView: false, isCodeView: true }); + fireEvent.click(screen.getByText('Workflow')); + expect(switchToDesignerView).toHaveBeenCalled(); + }); }); }); diff --git a/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx b/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx index f783585da90..84ce168a250 100644 --- a/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx +++ b/apps/vs-code-react/src/app/designer/__test__/appV2.test.tsx @@ -332,4 +332,198 @@ describe('DesignerApp (V2)', () => { expect(mockPostMessage).toHaveBeenCalledWith({ command: 'discardDraft' }); }); + + it('should dispatch setDraftSaving and update draft artifacts when saveDraftWorkflow is called', () => { + const store = createTestStore({ isDraftMode: true }); + render( + + + + ); + + const definition = { triggers: {}, actions: { a1: { type: 'Http' } } }; + const params = { p: { type: 'String' } }; + const conns = { c: { api: { id: '/test' } } }; + capturedCommandBarProps.saveDraftWorkflow(definition, params, conns); + + // Verify Redux state was updated + const state = store.getState().designer; + expect(state.isDraftSaving).toBe(true); + expect(state.draftWorkflow).toEqual(definition); + expect(state.draftConnections).toEqual(conns); + expect(state.draftParameters).toEqual(params); + }); + + it('should clear draft state after discardDraft', () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftWorkflow: mockWorkflowDefinition, + }); + render( + + + + ); + + capturedCommandBarProps.discardDraft(); + + const state = store.getState().designer; + expect(state.hasDraft).toBe(false); + expect(state.draftWorkflow).toBeNull(); + expect(state.draftConnections).toBeNull(); + expect(state.draftParameters).toBeNull(); + }); + + it('should dispatch setDraftMode when switchWorkflowMode is called with false', () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftWorkflow: mockDraftDefinition, + }); + render( + + + + ); + + capturedCommandBarProps.switchWorkflowMode(false); + + const state = store.getState().designer; + expect(state.isDraftMode).toBe(false); + }); + + it('should dispatch setDraftMode when switchWorkflowMode is called with true', () => { + const store = createTestStore({ + isDraftMode: false, + hasDraft: true, + draftWorkflow: mockDraftDefinition, + }); + render( + + + + ); + + capturedCommandBarProps.switchWorkflowMode(true); + + const state = store.getState().designer; + expect(state.isDraftMode).toBe(true); + }); + + it('should pass isMonitoringView to DesignerCommandBar', () => { + const store = createTestStore({ isMonitoringView: true }); + render( + + + + ); + + expect(capturedCommandBarProps.isMonitoringView).toBe(true); + }); + + it('should pass isUnitTest and isLocal to DesignerCommandBar', () => { + const store = createTestStore({ isUnitTest: true, isLocal: false }); + render( + + + + ); + + expect(capturedCommandBarProps.isUnitTest).toBe(true); + expect(capturedCommandBarProps.isLocal).toBe(false); + }); + + it('should render floating run button', () => { + const store = createTestStore(); + render( + + + + ); + expect(screen.getByTestId('floating-run-button')).toBeDefined(); + }); + + it('should use published connections when hasDraft but draftConnections is null', () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftConnections: null, + }); + render( + + + + ); + + // Falls through to published since draftConnections is null + expect(mockConvertConnectionsDataToReferences).toHaveBeenCalled(); + }); + + it('should use published parameters when hasDraft but draftParameters is null', () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftParameters: null, + }); + render( + + + + ); + + const provider = screen.getByTestId('bjs-workflow-provider'); + const workflowData = JSON.parse(provider.getAttribute('data-workflow') || '{}'); + expect(workflowData.parameters).toEqual({ publishedParam: { type: 'String', value: 'pub' } }); + }); + + it('should pass saveWorkflow and discard callbacks to command bar', () => { + const store = createTestStore(); + render( + + + + ); + + expect(typeof capturedCommandBarProps.saveWorkflow).toBe('function'); + expect(typeof capturedCommandBarProps.saveWorkflowFromCode).toBe('function'); + expect(typeof capturedCommandBarProps.discard).toBe('function'); + expect(typeof capturedCommandBarProps.switchToDesignerView).toBe('function'); + expect(typeof capturedCommandBarProps.switchToCodeView).toBe('function'); + expect(typeof capturedCommandBarProps.switchToMonitoringView).toBe('function'); + }); + + it('should post save command and clear draft when saveWorkflow is called', async () => { + const store = createTestStore({ + isDraftMode: true, + hasDraft: true, + draftWorkflow: mockWorkflowDefinition, + }); + render( + + + + ); + + const workflow = { + definition: { triggers: {}, actions: {} }, + parameters: { p: { type: 'String' } }, + connectionReferences: { c: { api: { id: '/test' } } }, + }; + const clearDirtyState = vi.fn(); + await capturedCommandBarProps.saveWorkflow(workflow, undefined, clearDirtyState); + + expect(mockPostMessage).toHaveBeenCalledWith({ + command: 'save', + definition: workflow.definition, + parameters: workflow.parameters, + connectionReferences: workflow.connectionReferences, + customCodeData: undefined, + }); + expect(clearDirtyState).toHaveBeenCalled(); + // Draft state should be cleared + const state = store.getState().designer; + expect(state.hasDraft).toBe(false); + expect(state.draftWorkflow).toBeNull(); + }); }); diff --git a/apps/vs-code-react/vitest.config.ts b/apps/vs-code-react/vitest.config.ts index 6f284770835..bc89d461b1e 100644 --- a/apps/vs-code-react/vitest.config.ts +++ b/apps/vs-code-react/vitest.config.ts @@ -11,7 +11,7 @@ export default defineProject({ coverage: { enabled: true, provider: 'istanbul', - include: ['src/app/**/*', 'src/state/**/*'], + include: ['src/app/**/*', 'src/state/**/*', 'src/intl/**/*'], reporter: ['html', 'cobertura', 'lcov'], }, restoreMocks: true,