Skip to content

Workflow DSL Reference

Triggerfish کے workflow engine میں implement کردہ CNCF Serverless Workflow DSL 1.0 کا مکمل reference۔ Usage guide اور examples کے لیے Workflows دیکھیں۔

Document Structure

ہر workflow YAML کو top-level document field اور do block ہونی چاہیے۔

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

Document Metadata

FieldTypeضروریتفصیل
dslstringہاںDSL version۔ "1.0" ہونی چاہیے
namespacestringہاںLogical grouping (مثلاً، ops، reports)
namestringہاںNamespace کے اندر unique workflow name
versionstringنہیںSemantic version string
descriptionstringنہیںHuman-readable description

Top-Level Fields

FieldTypeضروریتفصیل
documentobjectہاںDocument metadata (اوپر دیکھیں)
doarrayہاںTask entries کی ordered list
classification_ceilingstringنہیںExecution کے دوران allowed maximum session taint
inputtransformنہیںWorkflow input پر apply ہونے والا transform
outputtransformنہیںWorkflow output پر apply ہونے والا transform
timeoutobjectنہیںWorkflow-level timeout (after: <ISO 8601>)
metadataobjectنہیںArbitrary key-value metadata

Task Entry Format

do block میں ہر entry single-key object ہے۔ Key task name ہے، value task definition ہے۔

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

Task names ایک ہی do block کے اندر unique ہونے چاہیے۔ Task result data context میں task name کے تحت store ہوتا ہے۔


Common Task Fields

تمام task types یہ optional fields share کرتی ہیں:

FieldTypeتفصیل
ifstringExpression condition۔ Falsy ہونے پر task skip ہو جاتا ہے
inputtransformTask execution سے پہلے apply ہونے والا transform
outputtransformTask execution کے بعد apply ہونے والا transform
timeoutobjectTask timeout: after: <ISO 8601 duration>
thenstringFlow directive: continue، end، یا task name
metadataobjectArbitrary key-value metadata۔ Self-healing enable ہونے پر description، expects، produces ضروری ہیں

Self-Healing Configuration

metadata.triggerfish.self_healing block workflow کے لیے autonomous healing agent enable کرتا ہے۔ Full guide کے لیے 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]
FieldTypeضروریڈیفالٹتفصیل
enabledbooleanہاںHealing agent enable کریں
retry_budgetnumberنہیں3زیادہ سے زیادہ intervention attempts
approval_requiredbooleanنہیںtrueFixes کے لیے human approval ضروری ہے
pause_on_interventionstringنہیں"blocking_only"always | never | blocking_only
pause_timeout_secondsnumberنہیں300Timeout policy fire ہونے سے پہلے seconds
pause_timeout_policystringنہیں"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarrayنہیں[]intervention | escalation | approval_required

Step Metadata (Self-Healing Enable ہونے پر ضروری)

self_healing.enabled کے true ہونے پر، ہر task کو یہ metadata fields ہونی چاہیے۔ Parser ان کے missing ہونے پر workflows reject کرتا ہے۔

FieldTypeتفصیل
descriptionstringStep کیا کرتا ہے اور کیوں
expectsstringضروری input shape یا preconditions
producesstringGenerate ہونے والا output shape
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"

Task Types

call

HTTP endpoint یا Triggerfish service کو dispatch کریں۔

FieldTypeضروریتفصیل
callstringہاںCall type (نیچے dispatch table دیکھیں)
withobjectنہیںTarget tool کو pass ہونے والے arguments
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Shell command، inline script، یا sub-workflow execute کریں۔ run field میں بالکل ایک shell، script، یا workflow ہونی چاہیے۔

Shell:

FieldTypeضروریتفصیل
run.shell.commandstringہاںExecute کرنے کا shell command
run.shell.argumentsobjectنہیںNamed arguments
run.shell.environmentobjectنہیںEnvironment variables

Script:

FieldTypeضروریتفصیل
run.script.languagestringہاںScript language
run.script.codestringہاںInline script code
run.script.argumentsobjectنہیںNamed arguments

Sub-workflow:

FieldTypeضروریتفصیل
run.workflow.namestringہاںSaved workflow کا name
run.workflow.versionstringنہیںVersion constraint
run.workflow.inputobjectنہیںSub-workflow کے لیے input data

set

Data context کو values assign کریں۔

FieldTypeضروریتفصیل
setobjectہاںAssign کرنے والے key-value pairs۔ Values expressions ہو سکتی ہیں
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Conditional branching۔ switch field case entries کا array ہے۔ ہر case single-key object ہے جہاں key case name ہے۔

Case fieldTypeضروریتفصیل
whenstringنہیںExpression condition۔ Default case کے لیے omit
thenstringہاںFlow directive: continue، end، یا task name

Cases order میں evaluate ہوتے ہیں۔ Truthy when (یا بغیر when) والا پہلا case لیا جاتا ہے۔

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

for

Collection پر iterate کریں۔

FieldTypeضروریتفصیل
for.eachstringہاںCurrent item کے لیے variable name
for.instringہاںCollection reference کرنے والا expression
for.atstringنہیںCurrent index کے لیے variable name
doarrayہاںہر iteration کے لیے execute ہونے والی nested task list
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

Structured error کے ساتھ workflow halt کریں۔

FieldTypeضروریتفصیل
raise.error.statusnumberہاںHTTP-style status code
raise.error.typestringہاںError type URI/string
raise.error.titlestringہاںHuman-readable title
raise.error.detailstringنہیںDetailed error message
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

Workflow event record کریں۔ Events run result میں stored ہوتے ہیں۔

FieldTypeضروریتفصیل
emit.event.typestringہاںEvent type identifier
emit.event.sourcestringنہیںEvent source URI
emit.event.dataobjectنہیںEvent payload
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Duration کے لیے execution pause کریں۔

FieldTypeضروریتفصیل
waitstringہاںISO 8601 duration (مثلاً، PT5S)

Common durations: PT1S (1 سیکنڈ)، PT30S (30 سیکنڈ)، PT1M (1 منٹ)، PT5M (5 منٹ)۔


Call Dispatch Table

call field value کو actually invoke ہونے والے Triggerfish tool سے map کرتا ہے۔

call valueInvoked Toolضروری with: fields
httpweb_fetchendpoint یا url؛ optional method، headers، body
triggerfish:llmllm_taskprompt یا task؛ optional tools، max_iterations
triggerfish:agentsubagentprompt یا task؛ optional tools، agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + operation fields
triggerfish:web_searchweb_searchquery؛ optional max_results
triggerfish:web_fetchweb_fetchurl؛ optional method، headers، body
triggerfish:mcpmcp__<server>__<tool>server، tool؛ optional arguments
triggerfish:messagesend_messagechannel، text؛ optional recipient

Unsupported CNCF call types (grpc، openapi، asyncapi) error واپس کرتے ہیں۔


Expression Syntax

Expressions ${ } سے delimited ہیں اور workflow data context کے خلاف resolve ہوتے ہیں۔

Dot-Path Resolution

Syntaxتفصیلمثالی نتیجہ
${ . }پورا data context{...}
${ .key }Top-level key"value"
${ .a.b.c }Nested key"deep value"
${ .items[0] }Array index{...first item...}
${ .items[0].name }Array index پھر key"first"

Leading dot (یا $.) path کو context root پر anchor کرتا ہے۔ undefined تک resolve ہونے والے paths interpolated ہونے پر empty string produce کرتے ہیں، یا standalone value کے طور پر undefined۔

Operators

TypeOperatorsمثال
Comparison==، !=، >، <، >=، <=${ .count > 0 }
Arithmetic+، -، *، /، %${ .price * .quantity }

Comparison expressions true یا false واپس کرتے ہیں۔ Arithmetic expressions number واپس کرتے ہیں (کوئی operand numeric نہ ہو یا division by zero پر undefined

Literals

Typeمثالیں
String"hello"، 'hello'
Number42، 3.14، -1
Booleantrue، false
Nullnull

Interpolation Modes

Single expression (raw value): جب پوری string ایک ${ } expression ہو، raw typed value واپس آتی ہے (number، boolean، object، array)۔

yaml
count: "${ .items.length }"  # string نہیں، number واپس کرتا ہے

Mixed / multiple expressions (string): جب ${ } expressions text کے ساتھ mixed ہوں یا multiple expressions ہوں، نتیجہ ہمیشہ string ہوتا ہے۔

yaml
message: "Found ${ .count } items in ${ .category }"  # string واپس کرتا ہے

Truthiness

if: conditions اور switch when: expressions کے لیے، values JavaScript-style truthiness استعمال کر کے evaluate ہوتی ہیں:

ValueTruthy?
trueہاں
Non-zero numberہاں
Non-empty stringہاں
Non-empty arrayہاں
Objectہاں
false، 0، ""، null، undefined، empty arrayنہیں

Input/Output Transforms

Transforms tasks میں اور سے flow ہونے والے data reshape کرتے ہیں۔

input

Task execution سے پہلے apply ہوتا ہے۔ Data context کے task کے view کو replace کرتا ہے۔

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # task صرف config object دیکھتا ہے
    with:
      endpoint: "${ .api_url }"  # config object کے خلاف resolve ہوتا ہے

from as string: Expression جو پورا input context replace کرتا ہے۔

from as object: نئی keys کو expressions سے map کرتا ہے:

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

output

Task execution کے بعد apply ہوتا ہے۔ Context میں task name کے تحت store ہونے سے پہلے result reshape کرتا ہے۔

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

Flow Directives

کسی بھی task پر then field control کرتا ہے کہ task complete ہونے کے بعد execution flow کیا ہوگا۔

ValueBehavior
continueSequence میں اگلے task پر آگے بڑھیں (ڈیفالٹ)
endWorkflow stop کریں۔ Status: completed۔
<task name>Named task پر jump کریں۔ Task ایک ہی do block میں ہونا چاہیے

Switch cases بھی اپنی then field میں flow directives استعمال کرتے ہیں۔


Classification Ceiling

Execution کے دوران maximum session taint restrict کرنے والا optional field۔

yaml
classification_ceiling: INTERNAL
Valueمطلب
PUBLICWorkflow halt ہو جاتا ہے اگر کوئی classified data access ہو
INTERNALPUBLIC اور INTERNAL data allow
CONFIDENTIALCONFIDENTIAL data تک allow
RESTRICTEDتمام classification levels allow
(omitted)کوئی ceiling enforce نہیں

Ceiling ہر task سے پہلے check ہوتی ہے۔ اگر session taint ceiling سے آگے escalate ہو جائے (مثلاً، کیونکہ پچھلے task نے classified data access کیا)، workflow status failed اور error Workflow classification ceiling breached کے ساتھ halt ہو جاتا ہے۔


Storage

Workflow Definitions

Key prefix workflows:{name} کے ساتھ stored۔ ہر stored record میں:

FieldTypeتفصیل
namestringWorkflow name
yamlstringRaw YAML definition
classificationstringSave کے وقت classification level
savedAtstringISO 8601 timestamp
descriptionstringOptional description

Run History

Key prefix workflow-runs:{runId} کے ساتھ stored۔ ہر run record میں:

FieldTypeتفصیل
runIdstringاس execution کے لیے UUID
workflowNamestringExecute ہونے والے workflow کا name
statusstringcompleted، failed، یا cancelled
outputobjectFinal data context (internal keys filtered)
eventsarrayExecution کے دوران emit ہونے والے events
errorstringError message (اگر status failed ہو)
startedAtstringISO 8601 timestamp
completedAtstringISO 8601 timestamp
taskCountnumberWorkflow میں tasks کی تعداد
classificationstringCompletion پر session taint

Limits

LimitValueتفصیل
Sub-workflow max depth5run.workflow calls کی زیادہ سے زیادہ nesting
Run history default limit10workflow_history کا default limit

Execution Statuses

Statusتفصیل
pendingWorkflow بنایا گیا لیکن شروع نہیں ہوا
runningWorkflow currently execute ہو رہا ہے
completedتمام tasks successfully ختم ہوئے (یا then: end)
failedTask fail ہوا، raise hit ہوا، یا ceiling breached
cancelledExecution externally cancel کیا گیا