Skip to content

Sanggunian ng Workflow DSL ​

Kumpletong sanggunian para sa CNCF Serverless Workflow DSL 1.0 na naka-implement sa workflow engine ng Triggerfish. Para sa gabay sa paggamit at mga halimbawa, tingnan ang Mga Workflow.

Istruktura ng Dokumento ​

Bawat workflow YAML ay kailangang may top-level na document field at isang 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 ​

FieldTypeRequiredDescription
dslstringyesBersyon ng DSL. Kailangang "1.0"
namespacestringyesLohikal na grupo (hal., ops, reports)
namestringyesNatatanging pangalan ng workflow sa namespace
versionstringnoSemantic version string
descriptionstringnoDeskripsyon na madaling basahin

Mga Top-Level Field ​

FieldTypeRequiredDescription
documentobjectyesDocument metadata (tingnan sa itaas)
doarrayyesOrdenadong listahan ng mga task entry
classification_ceilingstringnoMaximum na pinapayagang session taint habang nag-e-execute
inputtransformnoTransform na ina-apply sa workflow input
outputtransformnoTransform na ina-apply sa workflow output
timeoutobjectnoWorkflow-level timeout (after: <ISO 8601>)
metadataobjectnoArbitrary na key-value metadata

Format ng Task Entry ​

Bawat entry sa do block ay isang single-key object. Ang key ay ang pangalan ng task, ang value ay ang task definition.

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

Kailangang unique ang mga pangalan ng task sa loob ng parehong do block. Ang resulta ng task ay sine-store sa data context sa ilalim ng pangalan ng task.


Mga Common Task Field ​

Lahat ng uri ng task ay may mga shared na opsyonal na field:

FieldTypeDescription
ifstringExpression condition. Nai-skip ang task kapag falsy.
inputtransformTransform na ina-apply bago ang task execution
outputtransformTransform na ina-apply pagkatapos ng task execution
timeoutobjectTask timeout: after: <ISO 8601 duration>
thenstringFlow directive: continue, end, o pangalan ng task
metadataobjectArbitrary na key-value metadata. Kapag naka-enable ang self-healing, kailangan ang description, expects, produces.

Self-Healing Configuration ​

Ine-enable ng metadata.triggerfish.self_healing block ang isang autonomous healing agent para sa workflow. Tingnan ang Self-Healing para sa kumpletong gabay.

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]
FieldTypeRequiredDefaultDescription
enabledbooleanyes—I-enable ang healing agent
retry_budgetnumberno3Max na intervention attempt
approval_requiredbooleannotrueKailangan ng human approval para sa mga fix
pause_on_interventionstringno"blocking_only"always | never | blocking_only
pause_timeout_secondsnumberno300Mga segundo bago mag-fire ang timeout policy
pause_timeout_policystringno"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarrayno[]intervention | escalation | approval_required

Step Metadata (Kailangan Kapag Naka-enable ang Self-Healing) ​

Kapag true ang self_healing.enabled, kailangang isama ng bawat task ang mga metadata field na ito. Rini-reject ng parser ang mga workflow na kulang sa alinman sa mga ito.

FieldTypeDescription
descriptionstringAno ang ginagawa ng step at bakit
expectsstringAnyo ng input o mga precondition na kailangan
producesstringAnyo ng output na ginagawa
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"

Mga Uri ng Task ​

call ​

Mag-dispatch sa isang HTTP endpoint o Triggerfish service.

FieldTypeRequiredDescription
callstringyesUri ng call (tingnan ang dispatch table sa ibaba)
withobjectnoMga argument na pinapasa sa target tool
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run ​

Mag-execute ng shell command, inline script, o sub-workflow. Ang run field ay kailangang may eksaktong isa sa shell, script, o workflow.

Shell:

FieldTypeRequiredDescription
run.shell.commandstringyesShell command na ie-execute
run.shell.argumentsobjectnoMga named argument
run.shell.environmentobjectnoMga environment variable

Script:

FieldTypeRequiredDescription
run.script.languagestringyesWika ng script
run.script.codestringyesInline script code
run.script.argumentsobjectnoMga named argument

Sub-workflow:

FieldTypeRequiredDescription
run.workflow.namestringyesPangalan ng naka-save na workflow
run.workflow.versionstringnoVersion constraint
run.workflow.inputobjectnoInput data para sa sub-workflow

set ​

Mag-assign ng mga value sa data context.

FieldTypeRequiredDescription
setobjectyesMga key-value pair na ia-assign. Puwedeng expression ang mga value.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch ​

Conditional branching. Ang switch field ay isang array ng mga case entry. Bawat case ay isang single-key object kung saan ang key ay ang pangalan ng case.

Case fieldTypeRequiredDescription
whenstringnoExpression condition. Alisin para sa default case.
thenstringyesFlow directive: continue, end, o pangalan ng task

Ine-evaluate ang mga case ayon sa pagkakasunod. Ang unang case na may truthy na when (o walang when) ang kinukuha.

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

for ​

Mag-iterate sa isang collection.

FieldTypeRequiredDescription
for.eachstringyesPangalan ng variable para sa kasalukuyang item
for.instringyesExpression na nagre-reference sa collection
for.atstringnoPangalan ng variable para sa kasalukuyang index
doarrayyesNested na listahan ng task na ie-execute bawat iteration
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise ​

Ihinto ang workflow na may structured error.

FieldTypeRequiredDescription
raise.error.statusnumberyesHTTP-style status code
raise.error.typestringyesError type URI/string
raise.error.titlestringyesTitulo na madaling basahin
raise.error.detailstringnoDetalyadong error message
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit ​

Mag-record ng workflow event. Naka-store ang mga event sa run result.

FieldTypeRequiredDescription
emit.event.typestringyesEvent type identifier
emit.event.sourcestringnoEvent source URI
emit.event.dataobjectnoEvent payload
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait ​

I-pause ang execution para sa isang duration.

FieldTypeRequiredDescription
waitstringyesISO 8601 duration (hal., PT5S)

Mga karaniwang duration: PT1S (1 segundo), PT30S (30 segundo), PT1M (1 minuto), PT5M (5 minuto).


Call Dispatch Table ​

Mina-map ang call field value sa Triggerfish tool na aktwal na ini-invoke.

call valueTool na ini-invokeMga kailangang with: field
httpweb_fetchendpoint o url; opsyonal na method, headers, body
triggerfish:llmllm_taskprompt o task; opsyonal na tools, max_iterations
triggerfish:agentsubagentprompt o task; opsyonal na tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + operation field
triggerfish:web_searchweb_searchquery; opsyonal na max_results
triggerfish:web_fetchweb_fetchurl; opsyonal na method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; opsyonal na arguments
triggerfish:messagesend_messagechannel, text; opsyonal na recipient

Ang mga hindi suportadong CNCF call type (grpc, openapi, asyncapi) ay nagbabalik ng error.


Syntax ng Expression ​

Nakalagay ang mga expression sa pagitan ng ${ } at nire-resolve laban sa data context ng workflow.

Dot-Path Resolution ​

SyntaxDescriptionHalimbawa ng resulta
${ . }Buong data context{...}
${ .key }Top-level key"value"
${ .a.b.c }Nested key"deep value"
${ .items[0] }Array index{...unang item...}
${ .items[0].name }Array index tapos key"first"

Ang leading dot (o $.) ang nag-a-anchor ng path sa context root. Ang mga path na nire-resolve sa undefined ay nagpo-produce ng empty string kapag ini-interpolate, o undefined kapag ginamit bilang standalone value.

Mga Operator ​

UriMga OperatorHalimbawa
Comparison==, !=, >, <, >=, <=${ .count > 0 }
Arithmetic+, -, *, /, %${ .price * .quantity }

Ang mga comparison expression ay nagbabalik ng true o false. Ang mga arithmetic expression ay nagbabalik ng number (undefined kapag hindi numeric ang alinmang operand o division by zero).

Mga Literal ​

UriMga Halimbawa
String"hello", 'hello'
Number42, 3.14, -1
Booleantrue, false
Nullnull

Mga Mode ng Interpolation ​

Isang expression (raw value): Kapag ang buong string ay isang ${ } expression, ibinabalik ang raw typed value (number, boolean, object, array).

yaml
count: "${ .items.length }"  # nagbabalik ng number, hindi string

Halo / maraming expression (string): Kapag ang mga ${ } expression ay hinaluan ng text o maraming expression, palaging string ang resulta.

yaml
message: "Found ${ .count } items in ${ .category }"  # nagbabalik ng string

Truthiness ​

Para sa if: condition at switch when: expression, ine-evaluate ang mga value gamit ang JavaScript-style na truthiness:

ValueTruthy?
trueoo
Non-zero na numberoo
Non-empty na stringoo
Non-empty na arrayoo
Objectoo
false, 0, "", null, undefined, empty arrayhindi

Mga Input/Output Transform ​

Binabago ng mga transform ang anyo ng data na pumapasok at lumalabas sa mga task.

input ​

Ina-apply bago ang task execution. Pinapalitan ang view ng task sa data context.

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # ang task ay config object lang ang nakikita
    with:
      endpoint: "${ .api_url }"  # nire-resolve laban sa config object

from bilang string: Expression na pinapalitan ang buong input context.

from bilang object: Mina-map ang mga bagong key sa mga expression:

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

output ​

Ina-apply pagkatapos ng task execution. Binabago ang anyo ng resulta bago i-store sa context sa ilalim ng pangalan ng task.

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

Mga Flow Directive ​

Ang then field sa kahit anong task ay kumokontrol sa execution flow pagkatapos makumpleto ang task.

ValueBehavior
continueTumuloy sa susunod na task sa sequence (default)
endIhinto ang workflow. Status: completed.
<task name>Tumalon sa pinangalanang task. Kailangang umiiral sa parehong do block.

Gumagamit din ang mga switch case ng flow directive sa kanilang then field.


Classification Ceiling ​

Opsyonal na field na nagre-restrict sa maximum na session taint habang nag-e-execute.

yaml
classification_ceiling: INTERNAL
ValueKahulugan
PUBLICHihinto ang workflow kapag nag-access ng classified data
INTERNALPinapayagan ang PUBLIC at INTERNAL data
CONFIDENTIALPinapayagan hanggang CONFIDENTIAL data
RESTRICTEDPinapayagan ang lahat ng classification level
(inalis)Walang ceiling na ine-enforce

Chine-check ang ceiling bago ang bawat task. Kapag nag-escalate ang session taint na lampas sa ceiling (hal., dahil nag-access ng classified data ang nakaraang task), hihinto ang workflow na may status na failed at error na Workflow classification ceiling breached.


Storage ​

Mga Workflow Definition ​

Naka-store na may key prefix na workflows:{name}. Bawat stored record ay naglalaman ng:

FieldTypeDescription
namestringPangalan ng workflow
yamlstringRaw YAML definition
classificationstringClassification level sa oras ng pag-save
savedAtstringISO 8601 timestamp
descriptionstringOpsyonal na deskripsyon

Run History ​

Naka-store na may key prefix na workflow-runs:{runId}. Bawat run record ay naglalaman ng:

FieldTypeDescription
runIdstringUUID para sa execution na ito
workflowNamestringPangalan ng workflow na in-execute
statusstringcompleted, failed, o cancelled
outputobjectFinal data context (naka-filter ang internal key)
eventsarrayMga event na na-emit habang nag-e-execute
errorstringError message (kapag failed ang status)
startedAtstringISO 8601 timestamp
completedAtstringISO 8601 timestamp
taskCountnumberBilang ng mga task sa workflow
classificationstringSession taint sa pagkumpleto

Mga Limit ​

LimitValueDescription
Maximum lalim ng sub-workflow5Maximum nesting ng run.workflow call
Default limit ng run history10Default na limit para sa workflow_history

Mga Execution Status ​

StatusDescription
pendingNagawa na ang workflow pero hindi pa nagsisimula
runningKasalukuyang nag-e-execute ang workflow
completedNatapos nang maayos ang lahat ng task (o then: end)
failedNabigo ang isang task, na-hit ang raise, o na-breach ang ceiling
cancelledNa-cancel ang execution mula sa labas