Skip to content

Workflow DSL-referanse

Fullstendig referanse for CNCF Serverless Workflow DSL 1.0 slik det er implementert i Triggerfishs arbeids flytsmotor. For brukerveiledning og eksempler, se Arbeidsflyter.

Dokumentstruktur

Alle arbeidsflyt-YAML-er må ha et toppnivå document-felt og en do-blokk.

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

Dokumentmetadata

FeltTypePåkrevdBeskrivelse
dslstringJaDSL-versjon. Må være "1.0"
namespacestringJaLogisk gruppering (f.eks. ops, reports)
namestringJaUnikt arbeidsflytnavn innenfor navnerommet
versionstringNeiSemantisk versjonsstreng
descriptionstringNeiMenneskelig-lesbar beskrivelse

Toppnivåfelter

FeltTypePåkrevdBeskrivelse
documentobjectJaDokumentmetadata (se ovenfor)
doarrayJaOrdnet liste over oppgaveoppføringer
classification_ceilingstringNeiMaksimalt tillatt session taint under kjøring
inputtransformNeiTransformasjon anvendt på arbeidsflyts inndata
outputtransformNeiTransformasjon anvendt på arbeidsflyts utdata
timeoutobjectNeiArbeidsflyt-nivå tidsavbrudd (after: <ISO 8601>)
metadataobjectNeiVilkårlig nøkkelverdi-metadata

Oppgaveoppføringsformat

Hver oppføring i do-blokken er et enkelt-nøkkel-objekt. Nøkkelen er oppgavenavnet, verdien er oppgavedefinisjonen.

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

Oppgavenavn må være unike innenfor samme do-blokk. Oppgaveresultatet lagres i datakonteksten under oppgavenavnet.


Vanlige oppgavefelter

Alle oppgavetyper deler disse valgfrie feltene:

FeltTypeBeskrivelse
ifstringUttrykksbetingelse. Oppgaven hoppes over når falsk.
inputtransformTransformasjon anvendt før oppgavekjøring
outputtransformTransformasjon anvendt etter oppgavekjøring
timeoutobjectOppgave-tidsavbrudd: after: <ISO 8601-varighet>
thenstringFlytdirektiv: continue, end eller et oppgavenavn
metadataobjectVilkårlig nøkkelverdi-metadata. Når selvhelbredelse er aktivert, kreves description, expects, produces.

Selvhelbredelseskonfigurasjon

metadata.triggerfish.self_healing-blokken aktiverer en autonom helbredelsesagent for arbeids flyten. Se Selvhelbredelse for en fullstendig veiledning.

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]
FeltTypePåkrevdStandardBeskrivelse
enabledbooleanJaAktiver helbredelsesagenten
retry_budgetnumberNei3Maks intervensjonsfor søk
approval_requiredbooleanNeitrueKrev menneskelig godkjenning for reparasjoner
pause_on_interventionstringNei"blocking_only"always | never | blocking_only
pause_timeout_secondsnumberNei300Sekunder før tidsavbruddspolicy utløses
pause_timeout_policystringNei"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarrayNei[]intervention | escalation | approval_required

Trinnsmetadata (påkrevd når selvhelbredelse er aktivert)

Når self_healing.enabled er true, må hvert trinn inkludere disse metadatafeltene. Parseren avviser arbeidsflyter der noen av dem mangler.

FeltTypeBeskrivelse
descriptionstringHva trinnet gjør og hvorfor
expectsstringInndataform eller forutsetninger som trengs
producesstringUtdataform som genereres
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"

Oppgavetyper

call

Distribuer til et HTTP-endepunkt eller Triggerfish-tjeneste.

FeltTypePåkrevdBeskrivelse
callstringJaKalltype (se distribusjonstabell nedenfor)
withobjectNeiArgumenter sendt til målverktøyet
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Kjør en shell-kommando, innebygd skript eller sub-arbeidsflyt. run-feltet må inneholde nøyaktig én av shell, script eller workflow.

Shell:

FeltTypePåkrevdBeskrivelse
run.shell.commandstringJaShell-kommando å kjøre
run.shell.argumentsobjectNeiNavngitte argumenter
run.shell.environmentobjectNeiMiljøvariabler

Skript:

FeltTypePåkrevdBeskrivelse
run.script.languagestringJaSkriptspråk
run.script.codestringJaInnebygd skriptkode
run.script.argumentsobjectNeiNavngitte argumenter

Sub-arbeidsflyt:

FeltTypePåkrevdBeskrivelse
run.workflow.namestringJaNavn på den lagrede arbeids flyten
run.workflow.versionstringNeiVersjonsrestrikasjon
run.workflow.inputobjectNeiInndata for sub-arbeids flyten

set

Tilordne verdier til datakonteksten.

FeltTypePåkrevdBeskrivelse
setobjectJaNøkkelverdi-par å tilordne. Verdier kan være uttrykk.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Betinget forgrening. switch-feltet er en array av tilfelle-oppføringer. Hvert tilfelle er et enkelt-nøkkel-objekt der nøkkelen er tilfelle-navnet.

Tilfelle-feltTypePåkrevdBeskrivelse
whenstringNeiUttrykksbetingelse. Utelat for standardtilfelle.
thenstringJaFlytdirektiv: continue, end eller oppgavenavn

Tilfeller evalueres i rekkefølge. Det første tilfellet med sann when (eller uten when) velges.

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

for

Iterer over en samling.

FeltTypePåkrevdBeskrivelse
for.eachstringJaVariabelnavn for gjeldende element
for.instringJaUttrykk som refererer til samlingen
for.atstringNeiVariabelnavn for gjeldende indeks
doarrayJaNestet oppgaveliste kjørt for hver iterasjon
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

Stopp arbeids flyten med en strukturert feil.

FeltTypePåkrevdBeskrivelse
raise.error.statusnumberJaHTTP-stil statuskode
raise.error.typestringJaFeiltype-URI/streng
raise.error.titlestringJaMenneskelig-lesbar tittel
raise.error.detailstringNeiDetaljert feilmelding
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

Registrer en arbeidsflythendelse. Hendelser lagres i kjøringsresultatet.

FeltTypePåkrevdBeskrivelse
emit.event.typestringJaHendelsestypeidentifikator
emit.event.sourcestringNeiHendelseskilde-URI
emit.event.dataobjectNeiHendelsesnyttelast
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Sett kjøring på pause i en varighet.

FeltTypePåkrevdBeskrivelse
waitstringJaISO 8601-varighet (f.eks. PT5S)

Vanlige varigheter: PT1S (1 sekund), PT30S (30 sekunder), PT1M (1 minutt), PT5M (5 minutter).


Kalldistribusjonstabell

Kartlegger call-feltverdien til Triggerfish-verktøyet som faktisk kalles.

call-verdiVerktøy som kallesPåkrevde with:-felter
httpweb_fetchendpoint eller url; valgfri method, headers, body
triggerfish:llmllm_taskprompt eller task; valgfri tools, max_iterations
triggerfish:agentsubagentprompt eller task; valgfri tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + operasjonsfelter
triggerfish:web_searchweb_searchquery; valgfri max_results
triggerfish:web_fetchweb_fetchurl; valgfri method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; valgfri arguments
triggerfish:messagesend_messagechannel, text; valgfri recipient

Ustøttede CNCF-kalltyper (grpc, openapi, asyncapi) returnerer en feil.


Uttrykkssyntaks

Uttrykk er avgrenset av ${ } og løses mot arbeidsflyts datakontekst.

Punktsti-løsning

SyntaksBeskrivelseEksempelresultat
${ . }Hele datakonteksten{...}
${ .key }Toppnivånøkkel"verdi"
${ .a.b.c }Nestet nøkkel"dyp verdi"
${ .items[0] }Array-indeks{...første element...}
${ .items[0].name }Array-indeks deretter nøkkel"første"

Den ledende punkten (eller $.) forankrer stien ved kontekstroten. Stier som løses til undefined produserer en tom streng ved interpolasjon, eller undefined når brukt som en selvstendig verdi.

Operatorer

TypeOperatorerEksempel
Sammenligning==, !=, >, <, >=, <=${ .count > 0 }
Aritmetikk+, -, *, /, %${ .price * .quantity }

Sammenligningsuttrykk returnerer true eller false. Aritmetiske uttrykk returnerer et tall (undefined hvis en av operandene ikke er numerisk eller ved deling med null).

Literaler

TypeEksempler
Streng"hei", 'hei'
Tall42, 3.14, -1
Booleantrue, false
Nullnull

Interpolasjonsmodi

Enkelt uttrykk (rå verdi): Når hele strengen er ett ${ }-uttrykk, returneres den rå typede verdien (tall, boolean, objekt, array).

yaml
count: "${ .items.length }"  # returnerer et tall, ikke en streng

Blandet / flere uttrykk (streng): Når ${ }-uttrykk er blandet med tekst eller det er flere uttrykk, er resultatet alltid en streng.

yaml
message: "Found ${ .count } items in ${ .category }"  # returnerer en streng

Sannhetsverdi

For if:-betingelser og switch when:-uttrykk evalueres verdier ved hjelp av JavaScript-stil sannhetsverdi:

VerdiSant?
trueJa
Ikke-null tallJa
Ikke-tom strengJa
Ikke-tom arrayJa
ObjektJa
false, 0, "", null, undefined, tom arrayNei

Inn-/utdatatransformasjoner

Transformasjoner omformer data som flyter inn og ut av oppgaver.

input

Anvendt før oppgavekjøring. Erstatter oppgavens visning av datakonteksten.

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # oppgaven ser bare config-objektet
    with:
      endpoint: "${ .api_url }"  # løst mot config-objektet

from som streng: Uttrykk som erstatter hele inndatakonteksten.

from som objekt: Kartlegger nye nøkler til uttrykk:

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

output

Anvendt etter oppgavekjøring. Omformer resultatet før det lagres i konteksten under oppgavenavnet.

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

Flytdirektiver

then-feltet på enhver oppgave kontrollerer kjøringsflyt etter at oppgaven er fullført.

VerdiAtferd
continueGå til neste oppgave i sekvensen (standard)
endStopp arbeids flyten. Status: completed.
<oppgavenavn>Hopp til den navngitte oppgaven. Oppgaven må finnes i samme do-blokk.

Switch-tilfeller bruker også flytdirektiver i then-feltet.


Klassifiseringstak

Valgfritt felt som begrenser maksimalt session taint under kjøring.

yaml
classification_ceiling: INTERNAL
VerdiBetydning
PUBLICArbeids flyten stopper hvis klassifisert data aksesseres
INTERNALTillater PUBLIC- og INTERNAL-data
CONFIDENTIALTillater opptil CONFIDENTIAL-data
RESTRICTEDTillater alle klassifiseringsnivåer
(utelatt)Ingen tak håndheves

Taket sjekkes før hver oppgave. Hvis session taint har eskalert forbi taket (f.eks. fordi en tidligere oppgave aksesserte klassifisert data), stopper arbeids flyten med status failed og feil Workflow classification ceiling breached.


Lagring

Arbeidsflytsdefinisjoner

Lagret med nøkkelprefiks workflows:{navn}. Hver lagret post inneholder:

FeltTypeBeskrivelse
namestringArbeidsflytnavn
yamlstringRå YAML-definisjon
classificationstringKlassifiseringsnivå på tidspunktet for lagring
savedAtstringISO 8601-tidsstempel
descriptionstringValgfri beskrivelse

Kjøringshistorikk

Lagret med nøkkelprefiks workflow-runs:{runId}. Hver kjøringspost inneholder:

FeltTypeBeskrivelse
runIdstringUUID for denne kjøringen
workflowNamestringNavn på arbeids flyten som ble kjørt
statusstringcompleted, failed eller cancelled
outputobjectEndelig datakontekst (interne nøkler filtrert)
eventsarrayHendelser sendt under kjøring
errorstringFeilmelding (hvis status er failed)
startedAtstringISO 8601-tidsstempel
completedAtstringISO 8601-tidsstempel
taskCountnumberAntall oppgaver i arbeids flyten
classificationstringSession taint ved fullføring

Grenser

GrenseVerdiBeskrivelse
Maks dybde for sub-arbeidsflyt5Maksimalt nesting av run.workflow-kall
Standard grense for kjøringshistorikk10Standard limit for workflow_history

Kjøringsstatuser

StatusBeskrivelse
pendingArbeids flyten er opprettet men ikke startet
runningArbeids flyten kjøres for øyeblikket
completedAlle oppgaver fullført uten problemer (eller then: end)
failedEn oppgave feilet, en raise ble truffet, eller tak brutt
cancelledKjøring ble avbrutt eksternt