feat: Human Input Node (#32060)

The frontend and backend implementation for the human input node.

Co-authored-by: twwu <twwu@dify.ai>
Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: zhsama <torvalds@linux.do>
This commit is contained in:
QuantumGhost
2026-02-09 14:57:23 +08:00
committed by GitHub
parent 56e3a55023
commit a1fc280102
474 changed files with 32667 additions and 2050 deletions

View File

@@ -511,6 +511,8 @@
"promptEditor.placeholder": "Write your prompt word here, enter '{' to insert a variable, enter '/' to insert a prompt content block",
"promptEditor.query.item.desc": "Insert user query template",
"promptEditor.query.item.title": "Query",
"promptEditor.requestURL.item.desc": "Insert request URL",
"promptEditor.requestURL.item.title": "Request URL",
"promptEditor.variable.item.desc": "Insert Variables & External Tools",
"promptEditor.variable.item.title": "Variables & External Tools",
"promptEditor.variable.modal.add": "New variable",

View File

@@ -58,5 +58,15 @@
"generation.tabs.create": "Run Once",
"generation.tabs.saved": "Saved",
"generation.title": "AI Completion",
"humanInput.completed": "Seems like this request was dealt with elsewhere.",
"humanInput.expirationTimeNowOrFuture": "This action will expire {{relativeTime}}.",
"humanInput.expired": "Seems like this request has expired.",
"humanInput.expiredTip": "This action has expired.",
"humanInput.formNotFound": "Form not found.",
"humanInput.rateLimitExceeded": "Too many requests, please try again later.",
"humanInput.recorded": "Your input has been recorded.",
"humanInput.sorry": "Sorry!",
"humanInput.submissionID": "submission_id: {{id}}",
"humanInput.thanks": "Thanks!",
"login.backToHome": "Back to Home"
}

View File

@@ -8,6 +8,7 @@
"blocks.document-extractor": "Doc Extractor",
"blocks.end": "Output",
"blocks.http-request": "HTTP Request",
"blocks.human-input": "Human Input",
"blocks.if-else": "IF/ELSE",
"blocks.iteration": "Iteration",
"blocks.iteration-start": "Iteration Start",
@@ -38,6 +39,7 @@
"blocksAbout.document-extractor": "Used to parse uploaded documents into text content that is easily understandable by LLM.",
"blocksAbout.end": "Define the output and result type of a workflow",
"blocksAbout.http-request": "Allow server requests to be sent over the HTTP protocol",
"blocksAbout.human-input": "Ask for human to confirm before generating the next step",
"blocksAbout.if-else": "Allows you to split the workflow into two branches based on if/else conditions",
"blocksAbout.iteration": "Perform multiple steps on a list object until all results are outputted.",
"blocksAbout.iteration-start": "Iteration Start node",
@@ -145,6 +147,9 @@
"common.fileUploadTip": "Image upload features have been upgraded to file upload. ",
"common.goBackToEdit": "Go back to editor",
"common.handMode": "Hand Mode",
"common.humanInputEmailTip": "Email (Delivery Method) sent to your configured recipients",
"common.humanInputEmailTipInDebugMode": "Email (Delivery Method) sent to <email>{{email}}</email>",
"common.humanInputWebappTip": "Debug preview only, user will not see this in web app.",
"common.importDSL": "Import DSL",
"common.importDSLTip": "Current draft will be overwritten.\nExport workflow as backup before importing.",
"common.importFailure": "Import Failed",
@@ -500,6 +505,104 @@
"nodes.http.value": "Value",
"nodes.http.verifySSL.title": "Verify SSL Certificate",
"nodes.http.verifySSL.warningTooltip": "Disabling SSL verification is not recommended for production environments. This should only be used in development or testing, as it makes the connection vulnerable to security threats like man-in-the-middle attacks.",
"nodes.humanInput.deliveryMethod.added": "Added",
"nodes.humanInput.deliveryMethod.contactTip1": "Missing a delivery method you need?",
"nodes.humanInput.deliveryMethod.contactTip2": "Tell us at <email>support@dify.ai</email>.",
"nodes.humanInput.deliveryMethod.emailConfigure.allMembers": "All members ({{workspaceName}})",
"nodes.humanInput.deliveryMethod.emailConfigure.body": "Body",
"nodes.humanInput.deliveryMethod.emailConfigure.bodyPlaceholder": "Enter email body",
"nodes.humanInput.deliveryMethod.emailConfigure.debugMode": "Debug Mode",
"nodes.humanInput.deliveryMethod.emailConfigure.debugModeTip1": "In debug mode, the email will only be sent to your account email <email>{{email}}</email>.",
"nodes.humanInput.deliveryMethod.emailConfigure.debugModeTip2": "The production environment is not affected.",
"nodes.humanInput.deliveryMethod.emailConfigure.description": "Send request for input via email",
"nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.add": "+ Add",
"nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.added": "Added",
"nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.placeholder": "Email, comma separated",
"nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.title": "Add workspace members or external recipients",
"nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.trigger": "Select",
"nodes.humanInput.deliveryMethod.emailConfigure.recipient": "Recipient",
"nodes.humanInput.deliveryMethod.emailConfigure.requestURLTip": "The request URL variable is the trigger entry for human input.",
"nodes.humanInput.deliveryMethod.emailConfigure.subject": "Subject",
"nodes.humanInput.deliveryMethod.emailConfigure.subjectPlaceholder": "Enter email subject",
"nodes.humanInput.deliveryMethod.emailConfigure.title": "Email Configuration",
"nodes.humanInput.deliveryMethod.emailSender.debugDone": "A test email has been sent to <email>{{email}}</email>. Please check your inbox.",
"nodes.humanInput.deliveryMethod.emailSender.debugModeTip": "Debug mode is enabled.",
"nodes.humanInput.deliveryMethod.emailSender.debugModeTip2": "Email will be sent to <email>{{email}}</email>.",
"nodes.humanInput.deliveryMethod.emailSender.done": "Email Sent",
"nodes.humanInput.deliveryMethod.emailSender.optional": "(optional)",
"nodes.humanInput.deliveryMethod.emailSender.send": "Send Email",
"nodes.humanInput.deliveryMethod.emailSender.testSendTip": "Send test emails to your configured recipients",
"nodes.humanInput.deliveryMethod.emailSender.testSendTipInDebugMode": "Send a test email to {{email}}",
"nodes.humanInput.deliveryMethod.emailSender.tip": "It is recommended to <strong>enable Debug Mode</strong> for testing email delivery.",
"nodes.humanInput.deliveryMethod.emailSender.title": "Test Email Sender",
"nodes.humanInput.deliveryMethod.emailSender.vars": "Variables in Form Content",
"nodes.humanInput.deliveryMethod.emailSender.varsTip": "Fill in form variables to emulate what recipients actually see.",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone1": "Email has been sent to <team>{{team}}</team> members and the following email addresses:",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone2": "Email has been sent to <team>{{team}}</team> members.",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone3": "Email has been sent to the following email addresses:",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip1": "Email will be sent to <team>{{team}}</team> members and the following email addresses:",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip2": "Email will be sent to <team>{{team}}</team> members.",
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip3": "Email will be sent to the following email addresses:",
"nodes.humanInput.deliveryMethod.emptyTip": "No delivery method added, the operation cannot be triggered.",
"nodes.humanInput.deliveryMethod.notAvailableInTriggerMode": "Not available",
"nodes.humanInput.deliveryMethod.notConfigured": "Not configured",
"nodes.humanInput.deliveryMethod.title": "Delivery Method",
"nodes.humanInput.deliveryMethod.tooltip": "How the human input form is delivered to the user.",
"nodes.humanInput.deliveryMethod.types.discord.description": "Send request for input via Discord",
"nodes.humanInput.deliveryMethod.types.discord.title": "Discord",
"nodes.humanInput.deliveryMethod.types.email.description": "Send request for input via email",
"nodes.humanInput.deliveryMethod.types.email.title": "Email",
"nodes.humanInput.deliveryMethod.types.slack.description": "Send request for input via Slack",
"nodes.humanInput.deliveryMethod.types.slack.title": "Slack",
"nodes.humanInput.deliveryMethod.types.teams.description": "Send request for input via Teams",
"nodes.humanInput.deliveryMethod.types.teams.title": "Teams",
"nodes.humanInput.deliveryMethod.types.webapp.description": "Display to end-user in webapp",
"nodes.humanInput.deliveryMethod.types.webapp.title": "Webapp",
"nodes.humanInput.deliveryMethod.upgradeTip": "Unlock Email delivery for Human Input",
"nodes.humanInput.deliveryMethod.upgradeTipContent": "Send confirmation requests via email before agents take action — useful for publishing and approval workflows.",
"nodes.humanInput.deliveryMethod.upgradeTipHide": "Dismiss",
"nodes.humanInput.editor.previewTip": "In preview mode, action buttons are not functional.",
"nodes.humanInput.errorMsg.duplicateActionId": "Duplicate action ID found in user actions",
"nodes.humanInput.errorMsg.emptyActionId": "Action ID cannot be empty",
"nodes.humanInput.errorMsg.emptyActionTitle": "Action title cannot be empty",
"nodes.humanInput.errorMsg.noDeliveryMethod": "Please select at least one delivery method",
"nodes.humanInput.errorMsg.noDeliveryMethodEnabled": "Please enable at least one delivery method",
"nodes.humanInput.errorMsg.noUserActions": "Please add at least one user action",
"nodes.humanInput.formContent.hotkeyTip": "Press <Key/> to insert variable, <CtrlKey/><Key/> to insert input field",
"nodes.humanInput.formContent.placeholder": "Type content here",
"nodes.humanInput.formContent.preview": "Preview",
"nodes.humanInput.formContent.title": "Form Content",
"nodes.humanInput.formContent.tooltip": "What users will see after opening the form. Supports Markdown formatting.",
"nodes.humanInput.insertInputField.insert": "Insert",
"nodes.humanInput.insertInputField.prePopulateField": "Pre-populate Field",
"nodes.humanInput.insertInputField.prePopulateFieldPlaceholder": "Add <staticContent/> or <variable/> users will see this content initially, or leave empty.",
"nodes.humanInput.insertInputField.saveResponseAs": "Save Response As",
"nodes.humanInput.insertInputField.saveResponseAsPlaceholder": "Name this variable for later reference",
"nodes.humanInput.insertInputField.staticContent": "Static Content",
"nodes.humanInput.insertInputField.title": "Insert Input Field",
"nodes.humanInput.insertInputField.useConstantInstead": "Use Constant Instead",
"nodes.humanInput.insertInputField.useVarInstead": "Use Variable Instead",
"nodes.humanInput.insertInputField.variable": "variable",
"nodes.humanInput.insertInputField.variableNameInvalid": "Variable name can only contain letters, numbers, and underscores, and cannot start with a number",
"nodes.humanInput.log.backstageInputURL": "Backstage input URL:",
"nodes.humanInput.log.reason": "Reason:",
"nodes.humanInput.log.reasonContent": "Human input required to proceed",
"nodes.humanInput.singleRun.back": "Back",
"nodes.humanInput.singleRun.button": "Generate Form",
"nodes.humanInput.singleRun.label": "Form variables",
"nodes.humanInput.timeout.days": "Days",
"nodes.humanInput.timeout.hours": "Hours",
"nodes.humanInput.timeout.title": "Timeout",
"nodes.humanInput.userActions.actionIdFormatTip": "Action ID must start with a letter or underscores, followed by letters, numbers, or underscores",
"nodes.humanInput.userActions.actionIdTooLong": "Action ID must be {{maxLength}} characters or less",
"nodes.humanInput.userActions.actionNamePlaceholder": "Action Name",
"nodes.humanInput.userActions.buttonTextPlaceholder": "Button display Text",
"nodes.humanInput.userActions.buttonTextTooLong": "Button text must be {{maxLength}} characters or less",
"nodes.humanInput.userActions.chooseStyle": "Choose a button style",
"nodes.humanInput.userActions.emptyTip": "Click the '+' button to add user actions",
"nodes.humanInput.userActions.title": "User Actions",
"nodes.humanInput.userActions.tooltip": "Define buttons that users can click to respond to this form. Each button can trigger different workflow paths. Action ID must start with a letter or underscores, followed by letters, numbers, or underscores.",
"nodes.humanInput.userActions.triggered": "<strong>{{actionName}}</strong> has been triggered",
"nodes.ifElse.addCondition": "Add Condition",
"nodes.ifElse.addSubVariable": "Sub Variable",
"nodes.ifElse.and": "and",