Skip to content

Workflow DSL-referentie

Volledige referentie voor de CNCF Serverless Workflow DSL 1.0 zoals geïmplementeerd in de workflow-engine van Triggerfish. Zie voor een gebruikshandleiding en voorbeelden Workflows.

Documentstructuur

Elke workflow-YAML moet een document-veld op het hoogste niveau en een do-blok hebben.

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

Documentmetadata

VeldTypeVereistBeschrijving
dslstringjaDSL-versie. Moet "1.0" zijn
namespacestringjaLogische groepering (bijv. ops, reports)
namestringjaUnieke workflownaam binnen de namespace
versionstringneeSemantische versietekenreeks
descriptionstringneeLeesbare beschrijving

Velden op het hoogste niveau

VeldTypeVereistBeschrijving
documentobjectjaDocumentmetadata (zie hierboven)
doarrayjaGeordende lijst van taakvermeldingen
classification_ceilingstringneeMaximale toegestane sessietaint tijdens uitvoering
inputtransformatieneeTransformatie toegepast op workflowinvoer
outputtransformatieneeTransformatie toegepast op workflowuitvoer
timeoutobjectneeTime-out op workflowniveau (after: <ISO 8601>)
metadataobjectneeWillekeurige sleutel-waarde-metadata

Taakvermeldingsformaat

Elke vermelding in het do-blok is een object met één sleutel. De sleutel is de taaknaam, de waarde is de taakdefinitie.

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

Taaknamen moeten uniek zijn binnen hetzelfde do-blok. Het taakresultaat wordt opgeslagen in de datacontext onder de taaknaam.


Gemeenschappelijke taakvelden

Alle taaktypen delen deze optionele velden:

VeldTypeBeschrijving
ifstringExpressievoorwaarde. Taak wordt overgeslagen als onwaar.
inputtransformatieTransformatie toegepast vóór taakuitvoering
outputtransformatieTransformatie toegepast na taakuitvoering
timeoutobjectTaak-time-out: after: <ISO 8601-duur>
thenstringStroomrichtlijn: continue, end of een taaknaam
metadataobjectWillekeurige sleutel-waarde-metadata. Wanneer zelfherstel is ingeschakeld, vereist description, expects, produces.

Zelfherstelconfiguratie

Het metadata.triggerfish.self_healing-blok schakelt een autonome herstelagent voor de workflow in. Zie Zelfherstel voor een volledige handleiding.

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]
VeldTypeVereistStandaardBeschrijving
enabledbooleanjaDe herstelagent inschakelen
retry_budgetnumbernee3Max interventiepogingen
approval_requiredbooleanneetrueMenselijke goedkeuring vereisen voor fixes
pause_on_interventionstringnee"blocking_only"always | never | blocking_only
pause_timeout_secondsnumbernee300Seconden vóór time-outbeleid activeert
pause_timeout_policystringnee"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarraynee[]intervention | escalation | approval_required

Stapmetadata (vereist wanneer zelfherstel is ingeschakeld)

Wanneer self_healing.enabled true is, moet elke taak deze metadatavelden bevatten. De parser weigert workflows waarbij een van deze velden ontbreekt.

VeldTypeBeschrijving
descriptionstringWat de stap doet en waarom
expectsstringInvoervorm of benodigde voorwaarden
producesstringGegenereerde uitvoervorm
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"

Taaktypen

call

Verzenden naar een HTTP-eindpunt of Triggerfish-service.

VeldTypeVereistBeschrijving
callstringjaAanroeptype (zie verzendtabel hieronder)
withobjectneeArgumenten doorgegeven aan de doeltool
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Een shell-opdracht, inline script of subworkflow uitvoeren. Het run-veld moet precies één van shell, script of workflow bevatten.

Shell:

VeldTypeVereistBeschrijving
run.shell.commandstringjaUit te voeren shell-opdracht
run.shell.argumentsobjectneeBenoemde argumenten
run.shell.environmentobjectneeOmgevingsvariabelen

Script:

VeldTypeVereistBeschrijving
run.script.languagestringjaScripttaal
run.script.codestringjaInline scriptcode
run.script.argumentsobjectneeBenoemde argumenten

Subworkflow:

VeldTypeVereistBeschrijving
run.workflow.namestringjaNaam van de opgeslagen workflow
run.workflow.versionstringneeVersiebeperking
run.workflow.inputobjectneeInvoergegevens voor subworkflow

set

Waarden toewijzen aan de datacontext.

VeldTypeVereistBeschrijving
setobjectjaSleutel-waardeparen om toe te wijzen. Waarden kunnen expressies zijn.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Voorwaardelijke vertakking. Het switch-veld is een array van case-vermeldingen. Elke case is een object met één sleutel waarbij de sleutel de casenaam is.

CaseveldTypeVereistBeschrijving
whenstringneeExpressievoorwaarde. Weglaten voor standaardcase.
thenstringjaStroomrichtlijn: continue, end of taaknaam

Cases worden in volgorde geëvalueerd. De eerste case met een ware when (of zonder when) wordt genomen.

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

for

Itereren over een verzameling.

VeldTypeVereistBeschrijving
for.eachstringjaVariabelenaam voor het huidige item
for.instringjaExpressie die verwijst naar de verzameling
for.atstringneeVariabelenaam voor de huidige index
doarrayjaGeneste takenlijst uitgevoerd voor elke iteratie
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

De workflow stoppen met een gestructureerde fout.

VeldTypeVereistBeschrijving
raise.error.statusnumberjaHTTP-stijl statuscode
raise.error.typestringjaFouttype URI/string
raise.error.titlestringjaLeesbare titel
raise.error.detailstringneeGedetailleerde foutmelding
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

Een workflowgebeurtenis registreren. Gebeurtenissen worden opgeslagen in het uitvoeringsresultaat.

VeldTypeVereistBeschrijving
emit.event.typestringjaGebeurtenistypeidentificatie
emit.event.sourcestringneeGebeurtenisbron URI
emit.event.dataobjectneeGebeurtenispayload
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Uitvoering pauzeren voor een duur.

VeldTypeVereistBeschrijving
waitstringjaISO 8601-duur (bijv. PT5S)

Veel voorkomende duurwaarden: PT1S (1 seconde), PT30S (30 seconden), PT1M (1 minuut), PT5M (5 minuten).


Aanroepverzendtabel

Mapt de call-veldwaarde naar de Triggerfish-tool die daadwerkelijk wordt aangeroepen.

call-waardeAangedipte toolVereiste with:-velden
httpweb_fetchendpoint of url; optioneel method, headers, body
triggerfish:llmllm_taskprompt of task; optioneel tools, max_iterations
triggerfish:agentsubagentprompt of task; optioneel tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + bewerkingsvelden
triggerfish:web_searchweb_searchquery; optioneel max_results
triggerfish:web_fetchweb_fetchurl; optioneel method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; optioneel arguments
triggerfish:messagesend_messagechannel, text; optioneel recipient

Niet-ondersteunde CNCF-aanroeptypen (grpc, openapi, asyncapi) retourneren een fout.


Expressiesyntaxis

Expressies worden begrensd door ${ } en worden opgelost tegen de workflowdatacontext.

Puntpadresolutie

SyntaxisBeschrijvingVoorbeeldresultaat
${ . }Volledige datacontext{...}
${ .key }Sleutel op het hoogste niveau"value"
${ .a.b.c }Geneste sleutel"deep value"
${ .items[0] }Array-index{...first item...}
${ .items[0].name }Array-index dan sleutel"first"

De voorloopstip (of $.) verankert het pad aan de contextroot. Paden die worden opgelost naar undefined produceren een lege tekenreeks bij interpolatie, of undefined als zelfstandige waarde.

Operatoren

TypeOperatorenVoorbeeld
Vergelijking==, !=, >, <, >=, <=${ .count > 0 }
Rekenkundig+, -, *, /, %${ .price * .quantity }

Vergelijkingsexpressies retourneren true of false. Rekenkundige expressies retourneren een getal (undefined als een operand niet numeriek is of deling door nul).

Letterlijke waarden

TypeVoorbeelden
String"hello", 'hello'
Getal42, 3.14, -1
Booleaanstrue, false
Nullnull

Interpolatiemodi

Enkele expressie (ruwe waarde): Wanneer de gehele tekenreeks één ${ }-expressie is, wordt de onbewerkte getypte waarde geretourneerd (getal, booleaans, object, array).

yaml
count: "${ .items.length }"  # returns a number, not a string

Gemengd / meerdere expressies (string): Wanneer ${ }-expressies worden gemengd met tekst of er meerdere expressies zijn, is het resultaat altijd een tekenreeks.

yaml
message: "Found ${ .count } items in ${ .category }"  # returns a string

Waarheidswaarde

Voor if:-voorwaarden en switch when:-expressies worden waarden geëvalueerd met JavaScript-stijl waarheidswaarde:

WaardeWaar?
trueja
Niet-nul getalja
Niet-lege tekenreeksja
Niet-lege arrayja
Objectja
false, 0, "", null, undefined, lege arraynee

Invoer-/uitvoertransformaties

Transformaties vormen gegevens die in en uit taken stromen.

input

Toegepast vóór taakuitvoering. Vervangt de weergave van de taak van de datacontext.

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # task sees only the config object
    with:
      endpoint: "${ .api_url }"  # resolved against the config object

from als string: Expressie die de volledige invoercontext vervangt.

from als object: Mapt nieuwe sleutels naar expressies:

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

output

Toegepast na taakuitvoering. Vormt het resultaat opnieuw voordat het wordt opgeslagen in de context onder de taaknaam.

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

Stroomrichtlijnen

Het then-veld op elke taak bepaalt de uitvoeringsstroom nadat de taak is voltooid.

WaardeGedrag
continueGa door naar de volgende taak in de reeks (standaard)
endStop de workflow. Status: completed.
<taaknaam>Spring naar de benoemde taak. De taak moet bestaan in hetzelfde do-blok.

Switch-cases gebruiken ook stroomrichtlijnen in hun then-veld.


Classificatieplafond

Optioneel veld dat de maximale sessietaint tijdens uitvoering beperkt.

yaml
classification_ceiling: INTERNAL
WaardeBetekenis
PUBLICWorkflow stopt als geclassificeerde gegevens worden benaderd
INTERNALStaat PUBLIC- en INTERNAL-gegevens toe
CONFIDENTIALStaat tot CONFIDENTIAL-gegevens toe
RESTRICTEDStaat alle classificatieniveaus toe
(weggelaten)Geen plafond gehandhaafd

Het plafond wordt vóór elke taak gecontroleerd. Als de sessietaint het plafond heeft overschreden (bijv. omdat een vorige taak geclassificeerde gegevens heeft benaderd), stopt de workflow met status failed en fout Workflow classification ceiling breached.


Opslag

Workflowdefinities

Opgeslagen met sleutelprefix workflows:{name}. Elke opgeslagen record bevat:

VeldTypeBeschrijving
namestringWorkflownaam
yamlstringRuwe YAML-definitie
classificationstringClassificatieniveau op het moment van opslaan
savedAtstringISO 8601-tijdstempel
descriptionstringOptionele beschrijving

Uitvoeringsgeschiedenis

Opgeslagen met sleutelprefix workflow-runs:{runId}. Elk uitvoeringsrecord bevat:

VeldTypeBeschrijving
runIdstringUUID voor deze uitvoering
workflowNamestringNaam van de uitgevoerde workflow
statusstringcompleted, failed of cancelled
outputobjectDefinitieve datacontext (interne sleutels gefilterd)
eventsarrayTijdens uitvoering uitgegeven gebeurtenissen
errorstringFoutmelding (als status failed is)
startedAtstringISO 8601-tijdstempel
completedAtstringISO 8601-tijdstempel
taskCountnumberAantal taken in de workflow
classificationstringSessietaint bij voltooiing

Limieten

LimietWaardeBeschrijving
Max. diepte subworkflow5Maximale nesting van run.workflow-aanroepen
Standaardlimiet uitvoeringsgeschiedenis10Standaard limit voor workflow_history

Uitvoeringsstatussen

StatusBeschrijving
pendingWorkflow is aangemaakt maar nog niet gestart
runningWorkflow wordt momenteel uitgevoerd
completedAlle taken zijn succesvol voltooid (of then: end)
failedEen taak is mislukt, een raise is bereikt, of plafond is overschreden
cancelledUitvoering is extern geannuleerd