Skip to content

Workflow DSL-referens

Fullständig referens för CNCF Serverless Workflow DSL 1.0 som implementerat i Triggerfishs arbetsflödesmotor. För användningsguide och exempel, se Arbetsflöden.

Dokumentstruktur

Varje arbetsflödes-YAML måste ha ett toppnivåfält document och ett do-block.

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

Dokumentmetadata

FältTypObligatoriskBeskrivning
dslstringjaDSL-version. Måste vara "1.0"
namespacestringjaLogisk gruppering (t.ex. ops, reports)
namestringjaUnikt arbetsflödesnamn inom namnutrymmet
versionstringnejSemantisk versionssträng
descriptionstringnejMänskligt läsbar beskrivning

Toppnivåfält

FältTypObligatoriskBeskrivning
documentobjectjaDokumentmetadata (se ovan)
doarrayjaOrdnad lista med uppgiftsposter
classification_ceilingstringnejMaximal tillåten sessions-taint under körning
inputtransformnejTransform tillämpas på arbetsflödesindata
outputtransformnejTransform tillämpas på arbetsflödesutdata
timeoutobjectnejArbetsflödesnivåtidsgräns (after: <ISO 8601>)
metadataobjectnejGodtyckliga nyckel-värde-metadata

Uppgiftspostformat

Varje post i do-blocket är ett ennyckels-objekt. Nyckeln är uppgiftsnamnet, värdet är uppgiftsdefinitionen.

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

Uppgiftsnamn måste vara unika inom samma do-block. Uppgiftsresultatet lagras i datakontexten under uppgiftsnamnet.


Gemensamma uppgiftsfält

Alla uppgiftstyper delar dessa valfria fält:

FältTypBeskrivning
ifstringUttrycksvillkor. Uppgiften hoppas över när falsy.
inputtransformTransform tillämpas före uppgiftskörning
outputtransformTransform tillämpas efter uppgiftskörning
timeoutobjectUppgiftstidsgräns: after: <ISO 8601-varaktighet>
thenstringFlödesdirektiv: continue, end eller ett uppgiftsnamn
metadataobjectGodtyckliga nyckel-värde-metadata. När self-healing är aktiverat krävs description, expects, produces.

Self-Healing-konfiguration

Blocket metadata.triggerfish.self_healing aktiverar en autonom healingagent för arbetsflödet. Se Self-Healing för en fullständig guide.

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]
FältTypObligatoriskStandardBeskrivning
enabledbooleanjaAktivera healingagenten
retry_budgetnumbernej3Max interventionsförsök
approval_requiredbooleannejtrueKräv mänskligt godkännande för korrigeringar
pause_on_interventionstringnej"blocking_only"always | never | blocking_only
pause_timeout_secondsnumbernej300Sekunder innan timeout-policy utlöses
pause_timeout_policystringnej"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarraynej[]intervention | escalation | approval_required

Stegmetadata (obligatorisk när Self-Healing är aktiverat)

När self_healing.enabled är true måste varje uppgift inkludera dessa metadatafält. Parsern avvisar arbetsflöden som saknar något av dem.

FältTypBeskrivning
descriptionstringVad steget gör och varför
expectsstringInmatningsform eller förhandsvillkor
producesstringGenererad utmatningsform
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"

Uppgiftstyper

call

Skicka till en HTTP-slutpunkt eller Triggerfish-tjänst.

FältTypObligatoriskBeskrivning
callstringjaAnropstyp (se skickningsregistret nedan)
withobjectnejArgument skickade till målverktyget
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Kör ett skalkommando, inline-skript eller underarbetsflöde. Fältet run måste innehålla exakt ett av shell, script eller workflow.

Shell:

FältTypObligatoriskBeskrivning
run.shell.commandstringjaSkalkommando att köra
run.shell.argumentsobjectnejNamngivna argument
run.shell.environmentobjectnejMiljövariabler

Skript:

FältTypObligatoriskBeskrivning
run.script.languagestringjaSkriptspråk
run.script.codestringjaInline-skriptkod
run.script.argumentsobjectnejNamngivna argument

Underarbetsflöde:

FältTypObligatoriskBeskrivning
run.workflow.namestringjaNamn på det sparade arbetsflödet
run.workflow.versionstringnejVersionsbegränsning
run.workflow.inputobjectnejIndata för underarbetsflöde

set

Tilldela värden till datakontexten.

FältTypObligatoriskBeskrivning
setobjectjaNyckel-värde-par att tilldela. Värden kan vara uttryck.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Villkorlig förgrening. Fältet switch är en array med fallposter. Varje fall är ett ennyckels-objekt där nyckeln är fallnamnet.

FallfältTypObligatoriskBeskrivning
whenstringnejUttrycksvillkor. Utelämna för standardfall.
thenstringjaFlödesdirektiv: continue, end eller uppgiftsnamn

Fall utvärderas i ordning. Det första fallet med ett truthy when (eller inget when) tas.

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

for

Iterera över en samling.

FältTypObligatoriskBeskrivning
for.eachstringjaVariabelnamn för det aktuella elementet
for.instringjaUttryck som refererar till samlingen
for.atstringnejVariabelnamn för det aktuella indexet
doarrayjaKapslad uppgiftslista som körs för varje iteration
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

Stoppa arbetsflödet med ett strukturerat fel.

FältTypObligatoriskBeskrivning
raise.error.statusnumberjaHTTP-liknande statuskod
raise.error.typestringjaFeltyp URI/sträng
raise.error.titlestringjaMänskligt läsbar titel
raise.error.detailstringnejDetaljerat felmeddelande
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

Registrera en arbetsflödeshändelse. Händelser lagras i körningsresultatet.

FältTypObligatoriskBeskrivning
emit.event.typestringjaHändelsetypidentifierare
emit.event.sourcestringnejHändelsekäll-URI
emit.event.dataobjectnejHändelsenyttolast
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Pausa körning under en varaktighet.

FältTypObligatoriskBeskrivning
waitstringjaISO 8601-varaktighet (t.ex. PT5S)

Vanliga varaktigheter: PT1S (1 sekund), PT30S (30 sekunder), PT1M (1 minut), PT5M (5 minuter).


Anropsskickningstabellen

Mappar call-fältets värde till det Triggerfish-verktyg som faktiskt anropas.

call-värdeVerktyg som anropasObligatoriska with:-fält
httpweb_fetchendpoint eller url; valfritt method, headers, body
triggerfish:llmllm_taskprompt eller task; valfritt tools, max_iterations
triggerfish:agentsubagentprompt eller task; valfritt tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + operationsfält
triggerfish:web_searchweb_searchquery; valfritt max_results
triggerfish:web_fetchweb_fetchurl; valfritt method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; valfritt arguments
triggerfish:messagesend_messagechannel, text; valfritt recipient

CNCF-anropstyper som inte stöds (grpc, openapi, asyncapi) returnerar ett fel.


Uttryckssyntax

Uttryck avgränsas av ${ } och löses upp mot arbetsflödets datakontext.

Punktsökvägsmatchning

SyntaxBeskrivningExempelresultat
${ . }Hela datakontexten{...}
${ .key }Toppnivånyckel"value"
${ .a.b.c }Kapslad nyckel"deep value"
${ .items[0] }Array-index{...first item...}
${ .items[0].name }Array-index sedan nyckel"first"

Den ledande punkten (eller $.) förankrar sökvägen vid kontextroten. Sökvägar som löser upp till undefined producerar en tom sträng när de interpoleras, eller undefined när de används som ett fristående värde.

Operatorer

TypOperatorerExempel
Jämförelse==, !=, >, <, >=, <=${ .count > 0 }
Aritmetik+, -, *, /, %${ .price * .quantity }

Jämförelseuttryck returnerar true eller false. Aritmetikuttryck returnerar ett tal (undefined om endera operanden inte är numerisk eller division med noll).

Literaler

TypExempel
Sträng"hello", 'hello'
Nummer42, 3.14, -1
Booleantrue, false
Nullnull

Interpolationslägen

Enskilt uttryck (råvärde): När hela strängen är ett ${ }-uttryck returneras det råa typade värdet (nummer, boolean, objekt, array).

yaml
count: "${ .items.length }"  # returnerar ett nummer, inte en sträng

Blandat/flera uttryck (sträng): När ${ }-uttryck blandas med text eller det finns flera uttryck är resultatet alltid en sträng.

yaml
message: "Found ${ .count } items in ${ .category }"  # returnerar en sträng

Sanningsvärde

För if:-villkor och switch when:-uttryck utvärderas värden med JavaScript-liknande sanningsvärde:

VärdeTruthy?
trueja
Nollskilt nummerja
Icke-tom strängja
Icke-tom arrayja
Objektja
false, 0, "", null, undefined, tom arraynej

In-/utdatatransformer

Transformeringar omformar data som flödar in i och ut ur uppgifter.

input

Tillämpas före uppgiftskörning. Ersätter uppgiftens vy av datakontexten.

yaml
- step:
    call: http
    input:
      from: "${ .config }"
    with:
      endpoint: "${ .api_url }"

from som sträng: Uttryck som ersätter hela indatakontexten.

from som objekt: Mappar nya nycklar till uttryck:

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

output

Tillämpas efter uppgiftskörning. Omformar resultatet innan det lagras i kontexten under uppgiftsnamnet.

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

Flödesdirektiv

Fältet then på en uppgift kontrollerar körningsflödet efter att uppgiften är klar.

VärdeBeteende
continueFortsätt till nästa uppgift i sekvens (standard)
endStoppa arbetsflödet. Status: completed.
<uppgiftsnamn>Hoppa till den namngivna uppgiften. Uppgiften måste finnas i samma do-block.

Switch-fall använder också flödesdirektiv i sitt then-fält.


Klassificeringstak

Valfritt fält som begränsar den maximala sessions-tainten under körning.

yaml
classification_ceiling: INTERNAL
VärdeBetydelse
PUBLICArbetsflödet stoppar om klassificerade data nås
INTERNALTillåter PUBLIC- och INTERNAL-data
CONFIDENTIALTillåter upp till CONFIDENTIAL-data
RESTRICTEDTillåter alla klassificeringsnivåer
(utelämnad)Inget tak tillämpas

Taket kontrolleras före varje uppgift. Om sessions-tainten har eskalerat förbi taket (t.ex. för att en tidigare uppgift kom åt klassificerade data) stoppar arbetsflödet med status failed och felet Workflow classification ceiling breached.


Lagring

Arbetsflödesdefinitioner

Lagras med nyckelprefixet workflows:{namn}. Varje lagrad post innehåller:

FältTypBeskrivning
namestringArbetsflödesnamn
yamlstringRå YAML-definition
classificationstringKlassificeringsnivå vid tidpunkten för sparning
savedAtstringISO 8601-tidsstämpel
descriptionstringValfri beskrivning

Körningshistorik

Lagras med nyckelprefixet workflow-runs:{runId}. Varje körningspost innehåller:

FältTypBeskrivning
runIdstringUUID för denna körning
workflowNamestringNamn på arbetsflödet som kördes
statusstringcompleted, failed eller cancelled
outputobjectSlutlig datakontext (interna nycklar filtrerade)
eventsarrayHändelser som emitterades under körningen
errorstringFelmeddelande (om status är failed)
startedAtstringISO 8601-tidsstämpel
completedAtstringISO 8601-tidsstämpel
taskCountnumberAntal uppgifter i arbetsflödet
classificationstringSessions-taint vid slutförande

Gränser

GränsVärdeBeskrivning
Max djup för underarbetsflöde5Maximal kapsling av run.workflow-anrop
Standardgräns för körningshistorik10Standard limit för workflow_history

Körningsstatusar

StatusBeskrivning
pendingArbetsflödet har skapats men inte startats
runningArbetsflödet körs för närvarande
completedAlla uppgifter slutförda framgångsrikt (eller then: end)
failedEn uppgift misslyckades, ett raise utlöstes eller tak överskreds
cancelledKörning avbröts externt