fix(10.1-05): add mode: once to Execute Status nodes

Execute Workflow nodes need mode: "once" to properly pass input
data to sub-workflows. Added to:
- Execute Container Status
- Execute Select Status
- Execute Paginate Status
- Execute Batch Cancel Status

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Lucas Berger
2026-02-04 21:47:41 -05:00
parent 8727b4f7a8
commit 58e4fbdbbe
+15 -11
View File
@@ -1810,7 +1810,7 @@
"resource": "message",
"operation": "sendMessage",
"chatId": "={{ $json.message.chat.id }}",
"text": "<b>Commands:</b>\n\n status\n start [name]\n stop [name]\n restart [name]\n update [name]\n logs [name]",
"text": "<b>Commands:</b>\n\n\u2022 status\n\u2022 start [name]\n\u2022 stop [name]\n\u2022 restart [name]\n\u2022 update [name]\n\u2022 logs [name]",
"additionalFields": {
"parse_mode": "HTML"
}
@@ -3213,7 +3213,7 @@
},
{
"parameters": {
"jsCode": "// Build confirmation message for update all\nconst data = $json;\nconst containers = data.containersToUpdate || [];\nconst count = data.count || 0;\n\n// Build container list (max 10 for display)\nconst displayContainers = containers.slice(0, 10);\nconst containerList = displayContainers.map(c => ` ${c.name}`).join('\\n');\nconst moreText = count > 10 ? `\\n...and ${count - 10} more` : '';\n\nconst message = `Update ${count} container${count !== 1 ? 's' : ''}?\\n\\n${containerList}${moreText}`;\n\n// Create inline keyboard\nconst timestamp = Math.floor(Date.now() / 1000);\nconst containerNames = containers.map(c => c.name).join(',');\n\n// Encode container names in callback (will need to lookup IDs later)\nreturn {\n json: {\n chatId: data.chatId,\n messageId: data.messageId,\n message: message,\n keyboard: {\n inline_keyboard: [\n [\n { text: ' Confirm', callback_data: `uall:confirm:${timestamp}` },\n { text: ' Cancel', callback_data: 'uall:cancel' }\n ]\n ]\n },\n containerNames: containerNames,\n containers: containers,\n timestamp: timestamp\n }\n};"
"jsCode": "// Build confirmation message for update all\nconst data = $json;\nconst containers = data.containersToUpdate || [];\nconst count = data.count || 0;\n\n// Build container list (max 10 for display)\nconst displayContainers = containers.slice(0, 10);\nconst containerList = displayContainers.map(c => `\u2022 ${c.name}`).join('\\n');\nconst moreText = count > 10 ? `\\n...and ${count - 10} more` : '';\n\nconst message = `Update ${count} container${count !== 1 ? 's' : ''}?\\n\\n${containerList}${moreText}`;\n\n// Create inline keyboard\nconst timestamp = Math.floor(Date.now() / 1000);\nconst containerNames = containers.map(c => c.name).join(',');\n\n// Encode container names in callback (will need to lookup IDs later)\nreturn {\n json: {\n chatId: data.chatId,\n messageId: data.messageId,\n message: message,\n keyboard: {\n inline_keyboard: [\n [\n { text: '\u2705 Confirm', callback_data: `uall:confirm:${timestamp}` },\n { text: '\u274c Cancel', callback_data: 'uall:cancel' }\n ]\n ]\n },\n containerNames: containerNames,\n containers: containers,\n timestamp: timestamp\n }\n};"
},
"id": "code-build-update-all-confirmation",
"name": "Build Update All Confirmation",
@@ -3254,7 +3254,7 @@
"resource": "message",
"operation": "sendMessage",
"chatId": "={{ $json.chatId }}",
"text": "All containers are up to date! 🎉",
"text": "All containers are up to date! \ud83c\udf89",
"options": {}
},
"id": "telegram-send-all-up-to-date",
@@ -3277,7 +3277,7 @@
"resource": "callback",
"operation": "answerQuery",
"queryId": "={{ $json.queryId }}",
"text": "⏱️ Confirmation expired (30s timeout)",
"text": "\u23f1\ufe0f Confirmation expired (30s timeout)",
"options": {
"showAlert": true
}
@@ -3324,7 +3324,7 @@
"resource": "callback",
"operation": "answerQuery",
"queryId": "={{ $json.queryId }}",
"text": " Update cancelled"
"text": "\u274c Update cancelled"
},
"id": "telegram-answer-update-all-cancel",
"name": "Answer Update All Cancel",
@@ -3412,7 +3412,7 @@
"resource": "callback",
"operation": "answerQuery",
"queryId": "={{ $json.queryId }}",
"text": " Starting batch update..."
"text": "\u2705 Starting batch update..."
},
"id": "telegram-answer-update-all-confirm",
"name": "Answer Update All Confirm",
@@ -3880,7 +3880,7 @@
},
{
"parameters": {
"jsCode": "// Format logs result for inline keyboard display\nconst result = $json;\nconst data = $('Prepare Inline Logs Input').item.json;\n\nconst containerName = result.containerName;\n\n// Add timestamp to prevent 'message not modified' error on refresh\nconst timestamp = new Date().toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n});\n\n// Build inline keyboard\nconst keyboard = [\n [\n { text: '🔄 Refresh Logs', callback_data: `action:logs:${containerName}` },\n { text: '⬆️ Update', callback_data: `action:update:${containerName}` }\n ],\n [\n { text: '◀️ Back to List', callback_data: 'list:0' }\n ]\n];\n\n// Append timestamp to message\nconst messageWithTimestamp = result.message + `\\n\\n<i>Updated: ${timestamp}</i>`;\n\nreturn {\n json: {\n chatId: data.chatId,\n messageId: data.messageId,\n text: messageWithTimestamp,\n reply_markup: { inline_keyboard: keyboard }\n }\n};"
"jsCode": "// Format logs result for inline keyboard display\nconst result = $json;\nconst data = $('Prepare Inline Logs Input').item.json;\n\nconst containerName = result.containerName;\n\n// Add timestamp to prevent 'message not modified' error on refresh\nconst timestamp = new Date().toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n});\n\n// Build inline keyboard\nconst keyboard = [\n [\n { text: '\ud83d\udd04 Refresh Logs', callback_data: `action:logs:${containerName}` },\n { text: '\u2b06\ufe0f Update', callback_data: `action:update:${containerName}` }\n ],\n [\n { text: '\u25c0\ufe0f Back to List', callback_data: 'list:0' }\n ]\n];\n\n// Append timestamp to message\nconst messageWithTimestamp = result.message + `\\n\\n<i>Updated: ${timestamp}</i>`;\n\nreturn {\n json: {\n chatId: data.chatId,\n messageId: data.messageId,\n text: messageWithTimestamp,\n reply_markup: { inline_keyboard: keyboard }\n }\n};"
},
"id": "b1800598-1ff6-4da3-8506-4e4e8127f902",
"name": "Format Inline Logs Result",
@@ -4210,7 +4210,8 @@
},
"options": {
"waitForSubWorkflow": true
}
},
"mode": "once"
},
"id": "execute-container-status",
"name": "Execute Container Status",
@@ -4332,7 +4333,8 @@
},
"options": {
"waitForSubWorkflow": true
}
},
"mode": "once"
},
"id": "execute-select-status",
"name": "Execute Select Status",
@@ -4366,7 +4368,8 @@
},
"options": {
"waitForSubWorkflow": true
}
},
"mode": "once"
},
"id": "execute-paginate-status",
"name": "Execute Paginate Status",
@@ -4400,7 +4403,8 @@
},
"options": {
"waitForSubWorkflow": true
}
},
"mode": "once"
},
"id": "execute-batch-cancel-status",
"name": "Execute Batch Cancel Status",