Skip to content

वर्कफ़्लो DSL संदर्भ

Triggerfish के वर्कफ़्लो इंजन में कार्यान्वित CNCF Serverless Workflow DSL 1.0 का पूर्ण संदर्भ। उपयोग गाइड और उदाहरणों के लिए, वर्कफ़्लो देखें।

दस्तावेज़ संरचना

प्रत्येक वर्कफ़्लो YAML में एक शीर्ष-स्तरीय document फ़ील्ड और एक do ब्लॉक होना चाहिए।

yaml
document:
  dsl: "1.0"
  namespace: my-namespace
  name: my-workflow
  version: "1.0.0"            # optional
  description: "What it does"  # optional
classification_ceiling: INTERNAL  # optional
input:                            # optional
  from: "${ . }"
output:                           # optional
  from:
    result: "${ .final_step }"
timeout:                          # optional
  after: PT5M
do:
  - task_name:
      # task definition

दस्तावेज़ मेटाडेटा

FieldTypeRequiredविवरण
dslstringyesDSL संस्करण। "1.0" होना चाहिए
namespacestringyesतार्किक समूह (उदा., ops, reports)
namestringyesनेमस्पेस के भीतर अद्वितीय वर्कफ़्लो नाम
versionstringnoसिमैंटिक वर्शन स्ट्रिंग
descriptionstringnoमानव-पठनीय विवरण

शीर्ष-स्तरीय फ़ील्ड

FieldTypeRequiredविवरण
documentobjectyesदस्तावेज़ मेटाडेटा (ऊपर देखें)
doarrayyesक्रमबद्ध कार्य प्रविष्टियों की सूची
classification_ceilingstringnoनिष्पादन के दौरान अधिकतम अनुमत सत्र taint
inputtransformnoवर्कफ़्लो इनपुट पर लागू ट्रांसफ़ॉर्म
outputtransformnoवर्कफ़्लो आउटपुट पर लागू ट्रांसफ़ॉर्म
timeoutobjectnoवर्कफ़्लो-स्तरीय टाइमआउट (after: <ISO 8601>)
metadataobjectnoमनमाना कुंजी-मान मेटाडेटा

कार्य प्रविष्टि प्रारूप

do ब्लॉक में प्रत्येक प्रविष्टि एक एकल-कुंजी ऑब्जेक्ट है। कुंजी कार्य का नाम है, मान कार्य की परिभाषा है।

yaml
do:
  - my_task_name:
      call: http
      with:
        endpoint: "https://example.com"

कार्य नाम एक ही do ब्लॉक के भीतर अद्वितीय होने चाहिए। कार्य परिणाम डेटा संदर्भ में कार्य नाम के अंतर्गत संग्रहीत होता है।


सामान्य कार्य फ़ील्ड

सभी कार्य प्रकार ये वैकल्पिक फ़ील्ड साझा करते हैं:

FieldTypeविवरण
ifstringअभिव्यक्ति शर्त। असत्य होने पर कार्य छोड़ दिया जाता है।
inputtransformकार्य निष्पादन से पहले लागू ट्रांसफ़ॉर्म
outputtransformकार्य निष्पादन के बाद लागू ट्रांसफ़ॉर्म
timeoutobjectकार्य टाइमआउट: after: <ISO 8601 अवधि>
thenstringप्रवाह निर्देश: continue, end या कार्य नाम
metadataobjectमनमाना कुंजी-मान मेटाडेटा। स्व-उपचार सक्षम होने पर description, expects, produces आवश्यक हैं।

स्व-उपचार कॉन्फ़िगरेशन

metadata.triggerfish.self_healing ब्लॉक वर्कफ़्लो के लिए एक स्वायत्त उपचार एजेंट सक्षम करता है। पूर्ण गाइड के लिए स्व-उपचार देखें।

yaml
metadata:
  triggerfish:
    self_healing:
      enabled: true
      retry_budget: 3
      approval_required: true
      pause_on_intervention: blocking_only
      pause_timeout_seconds: 300
      pause_timeout_policy: escalate_and_halt
      notify_on: [intervention, escalation, approval_required]
FieldTypeRequiredDefaultविवरण
enabledbooleanyesउपचार एजेंट सक्षम करें
retry_budgetnumberno3अधिकतम हस्तक्षेप प्रयास
approval_requiredbooleannotrueसुधारों के लिए मानव अनुमोदन आवश्यक
pause_on_interventionstringno"blocking_only"always | never | blocking_only
pause_timeout_secondsnumberno300टाइमआउट नीति ट्रिगर होने से पहले सेकंड
pause_timeout_policystringno"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarrayno[]intervention | escalation | approval_required

चरण मेटाडेटा (स्व-उपचार सक्षम होने पर आवश्यक)

जब self_healing.enabled true है, तो हर कार्य में ये metadata फ़ील्ड शामिल होने चाहिए। पार्सर उन वर्कफ़्लो को अस्वीकार करता है जिनमें इनमें से कोई भी गायब है।

FieldTypeविवरण
descriptionstringचरण क्या करता है और क्यों
expectsstringआवश्यक इनपुट आकार या पूर्व शर्तें
producesstringउत्पन्न आउटपुट आकार
yaml
- fetch-invoices:
    call: http
    with:
      endpoint: "https://api.example.com/invoices"
    metadata:
      description: "Fetch open invoices from billing API"
      expects: "API available, returns JSON array"
      produces: "Array of {id, amount, status} objects"

कार्य प्रकार

call

HTTP एंडपॉइंट या Triggerfish सेवा को प्रेषित करता है।

FieldTypeRequiredविवरण
callstringyesकॉल प्रकार (नीचे डिस्पैच तालिका देखें)
withobjectnoलक्ष्य टूल को पास किए गए तर्क
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

शेल कमांड, इनलाइन स्क्रिप्ट या उप-वर्कफ़्लो निष्पादित करता है। run फ़ील्ड में shell, script या workflow में से ठीक एक होना चाहिए।

शेल:

FieldTypeRequiredविवरण
run.shell.commandstringyesनिष्पादित करने का शेल कमांड
run.shell.argumentsobjectnoनामित तर्क
run.shell.environmentobjectnoपर्यावरण चर

स्क्रिप्ट:

FieldTypeRequiredविवरण
run.script.languagestringyesस्क्रिप्ट भाषा
run.script.codestringyesइनलाइन स्क्रिप्ट कोड
run.script.argumentsobjectnoनामित तर्क

उप-वर्कफ़्लो:

FieldTypeRequiredविवरण
run.workflow.namestringyesसहेजे गए वर्कफ़्लो का नाम
run.workflow.versionstringnoसंस्करण बाधा
run.workflow.inputobjectnoउप-वर्कफ़्लो के लिए इनपुट डेटा

set

डेटा संदर्भ में मान असाइन करता है।

FieldTypeRequiredविवरण
setobjectyesअसाइन करने के लिए कुंजी-मान जोड़े। मान अभिव्यक्तियाँ हो सकते हैं।
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

सशर्त शाखाकरण। switch फ़ील्ड केस प्रविष्टियों की एक सरणी है। प्रत्येक केस एक एकल-कुंजी ऑब्जेक्ट है जहाँ कुंजी केस का नाम है।

Case fieldTypeRequiredविवरण
whenstringnoअभिव्यक्ति शर्त। डिफ़ॉल्ट केस के लिए छोड़ें।
thenstringyesप्रवाह निर्देश: continue, end या कार्य नाम

केस क्रम में मूल्यांकित होते हैं। सत्य when वाला (या बिना when वाला) पहला केस लिया जाता है।

yaml
- route:
    switch:
      - high:
          when: "${ .priority > 7 }"
          then: alert_team
      - low:
          then: log_only

for

संग्रह पर पुनरावृत्ति करता है।

FieldTypeRequiredविवरण
for.eachstringyesवर्तमान आइटम के लिए वेरिएबल नाम
for.instringyesसंग्रह को संदर्भित करने वाली अभिव्यक्ति
for.atstringnoवर्तमान इंडेक्स के लिए वेरिएबल नाम
doarrayyesप्रत्येक पुनरावृत्ति के लिए निष्पादित नेस्टेड कार्य सूची
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

संरचित त्रुटि के साथ वर्कफ़्लो को रोकता है।

FieldTypeRequiredविवरण
raise.error.statusnumberyesHTTP-शैली स्थिति कोड
raise.error.typestringyesत्रुटि प्रकार URI/स्ट्रिंग
raise.error.titlestringyesमानव-पठनीय शीर्षक
raise.error.detailstringnoविस्तृत त्रुटि संदेश
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

वर्कफ़्लो इवेंट रिकॉर्ड करता है। इवेंट रन परिणाम में संग्रहीत होते हैं।

FieldTypeRequiredविवरण
emit.event.typestringyesइवेंट प्रकार पहचानकर्ता
emit.event.sourcestringnoइवेंट स्रोत URI
emit.event.dataobjectnoइवेंट पेलोड
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

एक अवधि के लिए निष्पादन रोकता है।

FieldTypeRequiredविवरण
waitstringyesISO 8601 अवधि (उदा., PT5S)

सामान्य अवधियाँ: PT1S (1 सेकंड), PT30S (30 सेकंड), PT1M (1 मिनट), PT5M (5 मिनट)।


कॉल डिस्पैच तालिका

call फ़ील्ड मान को वास्तव में इनवोक किए गए Triggerfish टूल से मैप करता है।

call मानइनवोक किया गया टूलआवश्यक with: फ़ील्ड
httpweb_fetchendpoint या url; वैकल्पिक method, headers, body
triggerfish:llmllm_taskprompt या task; वैकल्पिक tools, max_iterations
triggerfish:agentsubagentprompt या task; वैकल्पिक tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + ऑपरेशन फ़ील्ड
triggerfish:web_searchweb_searchquery; वैकल्पिक max_results
triggerfish:web_fetchweb_fetchurl; वैकल्पिक method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; वैकल्पिक arguments
triggerfish:messagesend_messagechannel, text; वैकल्पिक recipient

असमर्थित CNCF कॉल प्रकार (grpc, openapi, asyncapi) त्रुटि लौटाते हैं।


अभिव्यक्ति सिंटैक्स

अभिव्यक्तियाँ ${ } द्वारा सीमांकित होती हैं और वर्कफ़्लो डेटा संदर्भ के विरुद्ध हल होती हैं।

डॉट-पाथ रिज़ॉल्यूशन

सिंटैक्सविवरणउदाहरण परिणाम
${ . }पूरा डेटा संदर्भ{...}
${ .key }शीर्ष-स्तरीय कुंजी"value"
${ .a.b.c }नेस्टेड कुंजी"deep value"
${ .items[0] }ऐरे इंडेक्स{...पहला आइटम...}
${ .items[0].name }ऐरे इंडेक्स फिर कुंजी"first"

अग्रणी डॉट (या $.) पथ को संदर्भ रूट पर एंकर करता है। undefined पर हल होने वाले पथ इंटरपोलेट होने पर रिक्त स्ट्रिंग उत्पन्न करते हैं, या स्टैंडअलोन मान के रूप में उपयोग होने पर undefined उत्पन्न करते हैं।

ऑपरेटर

प्रकारऑपरेटरउदाहरण
तुलना==, !=, >, <, >=, <=${ .count > 0 }
अंकगणित+, -, *, /, %${ .price * .quantity }

तुलना अभिव्यक्तियाँ true या false लौटाती हैं। अंकगणित अभिव्यक्तियाँ संख्या लौटाती हैं (यदि कोई ऑपरेंड संख्यात्मक नहीं है या शून्य से विभाजन हो तो undefined)।

लिटरल

प्रकारउदाहरण
स्ट्रिंग"hello", 'hello'
संख्या42, 3.14, -1
बूलियनtrue, false
Nullnull

इंटरपोलेशन मोड

एकल अभिव्यक्ति (कच्चा मान): जब पूरी स्ट्रिंग एक ${ } अभिव्यक्ति है, तो कच्चा टाइप्ड मान लौटाया जाता है (संख्या, बूलियन, ऑब्जेक्ट, ऐरे)।

yaml
count: "${ .items.length }"  # returns a number, not a string

मिश्रित / बहु अभिव्यक्तियाँ (स्ट्रिंग): जब ${ } अभिव्यक्तियाँ टेक्स्ट के साथ मिश्रित होती हैं या कई अभिव्यक्तियाँ होती हैं, तो परिणाम हमेशा स्ट्रिंग होता है।

yaml
message: "Found ${ .count } items in ${ .category }"  # returns a string

सत्यता

if: शर्तों और switch when: अभिव्यक्तियों के लिए, JavaScript-शैली सत्यता का उपयोग करके मानों का मूल्यांकन किया जाता है:

मानसत्य?
trueहाँ
शून्येतर संख्याहाँ
अरिक्त स्ट्रिंगहाँ
अरिक्त ऐरेहाँ
ऑब्जेक्टहाँ
false, 0, "", null, undefined, रिक्त ऐरेनहीं

इनपुट/आउटपुट ट्रांसफ़ॉर्म

ट्रांसफ़ॉर्म कार्यों में और बाहर बहने वाले डेटा को पुनर्आकार देते हैं।

input

कार्य निष्पादन से पहले लागू होता है। कार्य के डेटा संदर्भ दृश्य को प्रतिस्थापित करता है।

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # task sees only the config object
    with:
      endpoint: "${ .api_url }"  # resolved against the config object

स्ट्रिंग के रूप में from: पूरे इनपुट संदर्भ को प्रतिस्थापित करने वाली अभिव्यक्ति।

ऑब्जेक्ट के रूप में from: नई कुंजियों को अभिव्यक्तियों से मैप करता है:

yaml
input:
  from:
    url: "${ .config.api_url }"
    token: "${ .secrets.api_token }"

output

कार्य निष्पादन के बाद लागू होता है। कार्य नाम के अंतर्गत संदर्भ में संग्रहीत करने से पहले परिणाम को पुनर्आकार देता है।

yaml
- fetch:
    call: http
    output:
      from:
        items: "${ .fetch.data.results }"
        count: "${ .fetch.data.total }"

प्रवाह निर्देश

किसी भी कार्य पर then फ़ील्ड कार्य पूर्ण होने के बाद निष्पादन प्रवाह को नियंत्रित करता है।

मानव्यवहार
continueअनुक्रम में अगले कार्य पर आगे बढ़ें (डिफ़ॉल्ट)
endवर्कफ़्लो बंद करें। स्थिति: completed
<कार्य नाम>नामित कार्य पर जाएँ। कार्य उसी do ब्लॉक में होना चाहिए।

Switch केस भी अपने then फ़ील्ड में प्रवाह निर्देशों का उपयोग करते हैं।


वर्गीकरण सीमा

निष्पादन के दौरान अधिकतम सत्र taint को प्रतिबंधित करने वाला वैकल्पिक फ़ील्ड।

yaml
classification_ceiling: INTERNAL
मानअर्थ
PUBLICकिसी भी वर्गीकृत डेटा तक पहुँचने पर वर्कफ़्लो रुक जाता है
INTERNALPUBLIC और INTERNAL डेटा की अनुमति
CONFIDENTIALCONFIDENTIAL तक डेटा की अनुमति
RESTRICTEDसभी वर्गीकरण स्तरों की अनुमति
(छोड़ा गया)कोई सीमा लागू नहीं

सीमा हर कार्य से पहले जाँची जाती है। यदि सत्र taint सीमा से आगे बढ़ गया है (उदा., क्योंकि पूर्व कार्य ने वर्गीकृत डेटा एक्सेस किया), तो वर्कफ़्लो failed स्थिति और Workflow classification ceiling breached त्रुटि के साथ रुक जाता है।


भंडारण

वर्कफ़्लो परिभाषाएँ

कुंजी उपसर्ग workflows:{name} के साथ संग्रहीत। प्रत्येक संग्रहीत रिकॉर्ड में शामिल है:

FieldTypeविवरण
namestringवर्कफ़्लो नाम
yamlstringकच्ची YAML परिभाषा
classificationstringसहेजने के समय वर्गीकरण स्तर
savedAtstringISO 8601 टाइमस्टैम्प
descriptionstringवैकल्पिक विवरण

रन इतिहास

कुंजी उपसर्ग workflow-runs:{runId} के साथ संग्रहीत। प्रत्येक रन रिकॉर्ड में शामिल है:

FieldTypeविवरण
runIdstringइस निष्पादन का UUID
workflowNamestringनिष्पादित वर्कफ़्लो का नाम
statusstringcompleted, failed या cancelled
outputobjectअंतिम डेटा संदर्भ (आंतरिक कुंजियाँ फ़िल्टर)
eventsarrayनिष्पादन के दौरान उत्सर्जित इवेंट
errorstringत्रुटि संदेश (failed स्थिति होने पर)
startedAtstringISO 8601 टाइमस्टैम्प
completedAtstringISO 8601 टाइमस्टैम्प
taskCountnumberवर्कफ़्लो में कार्यों की संख्या
classificationstringपूर्णता के समय सत्र taint

सीमाएँ

सीमामानविवरण
उप-वर्कफ़्लो अधिकतम गहराई5run.workflow कॉल की अधिकतम नेस्टिंग
रन इतिहास डिफ़ॉल्ट सीमा10workflow_history का डिफ़ॉल्ट limit

निष्पादन स्थितियाँ

स्थितिविवरण
pendingवर्कफ़्लो बनाया गया लेकिन शुरू नहीं हुआ
runningवर्कफ़्लो वर्तमान में निष्पादित हो रहा है
completedसभी कार्य सफलतापूर्वक पूर्ण (या then: end)
failedकार्य विफल, raise पहुँचा, या सीमा उल्लंघन
cancelledनिष्पादन बाहरी रूप से रद्द किया गया