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
enabledbooleanyesI-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