वर्कफ़्लो 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दस्तावेज़ मेटाडेटा
| Field | Type | Required | विवरण |
|---|---|---|---|
dsl | string | yes | DSL संस्करण। "1.0" होना चाहिए |
namespace | string | yes | तार्किक समूह (उदा., ops, reports) |
name | string | yes | नेमस्पेस के भीतर अद्वितीय वर्कफ़्लो नाम |
version | string | no | सिमैंटिक वर्शन स्ट्रिंग |
description | string | no | मानव-पठनीय विवरण |
शीर्ष-स्तरीय फ़ील्ड
| Field | Type | Required | विवरण |
|---|---|---|---|
document | object | yes | दस्तावेज़ मेटाडेटा (ऊपर देखें) |
do | array | yes | क्रमबद्ध कार्य प्रविष्टियों की सूची |
classification_ceiling | string | no | निष्पादन के दौरान अधिकतम अनुमत सत्र taint |
input | transform | no | वर्कफ़्लो इनपुट पर लागू ट्रांसफ़ॉर्म |
output | transform | no | वर्कफ़्लो आउटपुट पर लागू ट्रांसफ़ॉर्म |
timeout | object | no | वर्कफ़्लो-स्तरीय टाइमआउट (after: <ISO 8601>) |
metadata | object | no | मनमाना कुंजी-मान मेटाडेटा |
कार्य प्रविष्टि प्रारूप
do ब्लॉक में प्रत्येक प्रविष्टि एक एकल-कुंजी ऑब्जेक्ट है। कुंजी कार्य का नाम है, मान कार्य की परिभाषा है।
yaml
do:
- my_task_name:
call: http
with:
endpoint: "https://example.com"कार्य नाम एक ही do ब्लॉक के भीतर अद्वितीय होने चाहिए। कार्य परिणाम डेटा संदर्भ में कार्य नाम के अंतर्गत संग्रहीत होता है।
सामान्य कार्य फ़ील्ड
सभी कार्य प्रकार ये वैकल्पिक फ़ील्ड साझा करते हैं:
| Field | Type | विवरण |
|---|---|---|
if | string | अभिव्यक्ति शर्त। असत्य होने पर कार्य छोड़ दिया जाता है। |
input | transform | कार्य निष्पादन से पहले लागू ट्रांसफ़ॉर्म |
output | transform | कार्य निष्पादन के बाद लागू ट्रांसफ़ॉर्म |
timeout | object | कार्य टाइमआउट: after: <ISO 8601 अवधि> |
then | string | प्रवाह निर्देश: continue, end या कार्य नाम |
metadata | object | मनमाना कुंजी-मान मेटाडेटा। स्व-उपचार सक्षम होने पर 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]| Field | Type | Required | Default | विवरण |
|---|---|---|---|---|
enabled | boolean | yes | — | उपचार एजेंट सक्षम करें |
retry_budget | number | no | 3 | अधिकतम हस्तक्षेप प्रयास |
approval_required | boolean | no | true | सुधारों के लिए मानव अनुमोदन आवश्यक |
pause_on_intervention | string | no | "blocking_only" | always | never | blocking_only |
pause_timeout_seconds | number | no | 300 | टाइमआउट नीति ट्रिगर होने से पहले सेकंड |
pause_timeout_policy | string | no | "escalate_and_halt" | escalate_and_halt | escalate_and_skip | escalate_and_fail |
notify_on | array | no | [] | intervention | escalation | approval_required |
चरण मेटाडेटा (स्व-उपचार सक्षम होने पर आवश्यक)
जब self_healing.enabled true है, तो हर कार्य में ये metadata फ़ील्ड शामिल होने चाहिए। पार्सर उन वर्कफ़्लो को अस्वीकार करता है जिनमें इनमें से कोई भी गायब है।
| Field | Type | विवरण |
|---|---|---|
description | string | चरण क्या करता है और क्यों |
expects | string | आवश्यक इनपुट आकार या पूर्व शर्तें |
produces | string | उत्पन्न आउटपुट आकार |
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 सेवा को प्रेषित करता है।
| Field | Type | Required | विवरण |
|---|---|---|---|
call | string | yes | कॉल प्रकार (नीचे डिस्पैच तालिका देखें) |
with | object | no | लक्ष्य टूल को पास किए गए तर्क |
yaml
- fetch:
call: http
with:
endpoint: "https://api.example.com/data"
method: GETrun
शेल कमांड, इनलाइन स्क्रिप्ट या उप-वर्कफ़्लो निष्पादित करता है। run फ़ील्ड में shell, script या workflow में से ठीक एक होना चाहिए।
शेल:
| Field | Type | Required | विवरण |
|---|---|---|---|
run.shell.command | string | yes | निष्पादित करने का शेल कमांड |
run.shell.arguments | object | no | नामित तर्क |
run.shell.environment | object | no | पर्यावरण चर |
स्क्रिप्ट:
| Field | Type | Required | विवरण |
|---|---|---|---|
run.script.language | string | yes | स्क्रिप्ट भाषा |
run.script.code | string | yes | इनलाइन स्क्रिप्ट कोड |
run.script.arguments | object | no | नामित तर्क |
उप-वर्कफ़्लो:
| Field | Type | Required | विवरण |
|---|---|---|---|
run.workflow.name | string | yes | सहेजे गए वर्कफ़्लो का नाम |
run.workflow.version | string | no | संस्करण बाधा |
run.workflow.input | object | no | उप-वर्कफ़्लो के लिए इनपुट डेटा |
set
डेटा संदर्भ में मान असाइन करता है।
| Field | Type | Required | विवरण |
|---|---|---|---|
set | object | yes | असाइन करने के लिए कुंजी-मान जोड़े। मान अभिव्यक्तियाँ हो सकते हैं। |
yaml
- prepare:
set:
full_name: "${ .first_name } ${ .last_name }"
count: 0switch
सशर्त शाखाकरण। switch फ़ील्ड केस प्रविष्टियों की एक सरणी है। प्रत्येक केस एक एकल-कुंजी ऑब्जेक्ट है जहाँ कुंजी केस का नाम है।
| Case field | Type | Required | विवरण |
|---|---|---|---|
when | string | no | अभिव्यक्ति शर्त। डिफ़ॉल्ट केस के लिए छोड़ें। |
then | string | yes | प्रवाह निर्देश: continue, end या कार्य नाम |
केस क्रम में मूल्यांकित होते हैं। सत्य when वाला (या बिना when वाला) पहला केस लिया जाता है।
yaml
- route:
switch:
- high:
when: "${ .priority > 7 }"
then: alert_team
- low:
then: log_onlyfor
संग्रह पर पुनरावृत्ति करता है।
| Field | Type | Required | विवरण |
|---|---|---|---|
for.each | string | yes | वर्तमान आइटम के लिए वेरिएबल नाम |
for.in | string | yes | संग्रह को संदर्भित करने वाली अभिव्यक्ति |
for.at | string | no | वर्तमान इंडेक्स के लिए वेरिएबल नाम |
do | array | yes | प्रत्येक पुनरावृत्ति के लिए निष्पादित नेस्टेड कार्य सूची |
yaml
- process_all:
for:
each: item
in: "${ .items }"
at: idx
do:
- handle:
call: triggerfish:llm
with:
task: "Process item ${ .idx }: ${ .item.name }"raise
संरचित त्रुटि के साथ वर्कफ़्लो को रोकता है।
| Field | Type | Required | विवरण |
|---|---|---|---|
raise.error.status | number | yes | HTTP-शैली स्थिति कोड |
raise.error.type | string | yes | त्रुटि प्रकार URI/स्ट्रिंग |
raise.error.title | string | yes | मानव-पठनीय शीर्षक |
raise.error.detail | string | no | विस्तृत त्रुटि संदेश |
yaml
- abort:
raise:
error:
status: 422
type: "validation-error"
title: "Invalid input"
detail: "Field 'email' is required"emit
वर्कफ़्लो इवेंट रिकॉर्ड करता है। इवेंट रन परिणाम में संग्रहीत होते हैं।
| Field | Type | Required | विवरण |
|---|---|---|---|
emit.event.type | string | yes | इवेंट प्रकार पहचानकर्ता |
emit.event.source | string | no | इवेंट स्रोत URI |
emit.event.data | object | no | इवेंट पेलोड |
yaml
- record:
emit:
event:
type: "step.completed"
source: "workflow/pipeline"
data:
step: "transform"
duration_ms: 1200wait
एक अवधि के लिए निष्पादन रोकता है।
| Field | Type | Required | विवरण |
|---|---|---|---|
wait | string | yes | ISO 8601 अवधि (उदा., PT5S) |
सामान्य अवधियाँ: PT1S (1 सेकंड), PT30S (30 सेकंड), PT1M (1 मिनट), PT5M (5 मिनट)।
कॉल डिस्पैच तालिका
call फ़ील्ड मान को वास्तव में इनवोक किए गए Triggerfish टूल से मैप करता है।
call मान | इनवोक किया गया टूल | आवश्यक with: फ़ील्ड |
|---|---|---|
http | web_fetch | endpoint या url; वैकल्पिक method, headers, body |
triggerfish:llm | llm_task | prompt या task; वैकल्पिक tools, max_iterations |
triggerfish:agent | subagent | prompt या task; वैकल्पिक tools, agent |
triggerfish:memory | memory_* | operation (save/search/get/list/delete) + ऑपरेशन फ़ील्ड |
triggerfish:web_search | web_search | query; वैकल्पिक max_results |
triggerfish:web_fetch | web_fetch | url; वैकल्पिक method, headers, body |
triggerfish:mcp | mcp__<server>__<tool> | server, tool; वैकल्पिक arguments |
triggerfish:message | send_message | channel, 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 |
| Null | null |
इंटरपोलेशन मोड
एकल अभिव्यक्ति (कच्चा मान): जब पूरी स्ट्रिंग एक ${ } अभिव्यक्ति है, तो कच्चा टाइप्ड मान लौटाया जाता है (संख्या, बूलियन, ऑब्जेक्ट, ऐरे)।
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 | किसी भी वर्गीकृत डेटा तक पहुँचने पर वर्कफ़्लो रुक जाता है |
INTERNAL | PUBLIC और INTERNAL डेटा की अनुमति |
CONFIDENTIAL | CONFIDENTIAL तक डेटा की अनुमति |
RESTRICTED | सभी वर्गीकरण स्तरों की अनुमति |
| (छोड़ा गया) | कोई सीमा लागू नहीं |
सीमा हर कार्य से पहले जाँची जाती है। यदि सत्र taint सीमा से आगे बढ़ गया है (उदा., क्योंकि पूर्व कार्य ने वर्गीकृत डेटा एक्सेस किया), तो वर्कफ़्लो failed स्थिति और Workflow classification ceiling breached त्रुटि के साथ रुक जाता है।
भंडारण
वर्कफ़्लो परिभाषाएँ
कुंजी उपसर्ग workflows:{name} के साथ संग्रहीत। प्रत्येक संग्रहीत रिकॉर्ड में शामिल है:
| Field | Type | विवरण |
|---|---|---|
name | string | वर्कफ़्लो नाम |
yaml | string | कच्ची YAML परिभाषा |
classification | string | सहेजने के समय वर्गीकरण स्तर |
savedAt | string | ISO 8601 टाइमस्टैम्प |
description | string | वैकल्पिक विवरण |
रन इतिहास
कुंजी उपसर्ग workflow-runs:{runId} के साथ संग्रहीत। प्रत्येक रन रिकॉर्ड में शामिल है:
| Field | Type | विवरण |
|---|---|---|
runId | string | इस निष्पादन का UUID |
workflowName | string | निष्पादित वर्कफ़्लो का नाम |
status | string | completed, failed या cancelled |
output | object | अंतिम डेटा संदर्भ (आंतरिक कुंजियाँ फ़िल्टर) |
events | array | निष्पादन के दौरान उत्सर्जित इवेंट |
error | string | त्रुटि संदेश (failed स्थिति होने पर) |
startedAt | string | ISO 8601 टाइमस्टैम्प |
completedAt | string | ISO 8601 टाइमस्टैम्प |
taskCount | number | वर्कफ़्लो में कार्यों की संख्या |
classification | string | पूर्णता के समय सत्र taint |
सीमाएँ
| सीमा | मान | विवरण |
|---|---|---|
| उप-वर्कफ़्लो अधिकतम गहराई | 5 | run.workflow कॉल की अधिकतम नेस्टिंग |
| रन इतिहास डिफ़ॉल्ट सीमा | 10 | workflow_history का डिफ़ॉल्ट limit |
निष्पादन स्थितियाँ
| स्थिति | विवरण |
|---|---|
pending | वर्कफ़्लो बनाया गया लेकिन शुरू नहीं हुआ |
running | वर्कफ़्लो वर्तमान में निष्पादित हो रहा है |
completed | सभी कार्य सफलतापूर्वक पूर्ण (या then: end) |
failed | कार्य विफल, raise पहुँचा, या सीमा उल्लंघन |
cancelled | निष्पादन बाहरी रूप से रद्द किया गया |
