Es scheint sich um Discourse Workflows’ eigenes JavaScript-Ausdruckssystem zu handeln, das serverseitig in einer Sandbox ausgewertet wird, anstatt eine separate Template-Sprache wie Liquid oder Handlebars zu verwenden.
So funktioniert beispielsweise:
={{ $json.topic.title.toLowerCase() }}
damit der Inhalt von {{ ... }} als JavaScript ausgewertet wird und toLowerCase() die übliche JavaScript-Stringmethode ist.
Die Implementierung befindet sich in plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb; sie stellt workflow-spezifische globale Variablen wie $json, $input, $itemIndex, $trigger, $execution und $() bereit.
Die Syntax und die Konzepte ähneln stark n8n. Tatsächlich gibt es an anderer Stelle im Workflows-Quellcode einen expliziten Verweis auf n8n:
Der unten verlinkte Commit fügte das Kombinationsverhalten des Merge-Knotens hinzu und enthält einen Test, der wie folgt beschrieben wird:
defaults clash handling to add_suffix (matches n8n position combine)
Es gibt also Hinweise darauf, dass Teile von Workflows bewusst das Verhalten von n8n nachahmen, obwohl ich nichts Explizites finden konnte, das besagt, dass die Ausdruckssprache selbst von n8n übernommen oder auf dieser basiert. Ich würde sie daher als von Discourse Workflows bereitgestellte, in einer Sandbox ausgeführte JavaScript-Ausdrücke beschreiben, die einige n8n-ähnliche Konventionen aufweisen.