Skip to content

Rujukan Workflow DSL

Rujukan lengkap untuk CNCF Serverless Workflow DSL 1.0 seperti yang dilaksanakan dalam enjin workflow Triggerfish. Untuk panduan penggunaan dan contoh, lihat Workflow.

Struktur Dokumen

Setiap YAML workflow mesti mempunyai medan document peringkat atas dan blok do.

yaml
document:
  dsl: "1.0"
  namespace: my-namespace
  name: my-workflow
  version: "1.0.0"            # pilihan
  description: "Apa yang ia lakukan"  # pilihan
classification_ceiling: INTERNAL  # pilihan
input:                            # pilihan
  from: "${ . }"
output:                           # pilihan
  from:
    result: "${ .final_step }"
timeout:                          # pilihan
  after: PT5M
do:
  - task_name:
      # definisi tugasan

Metadata Dokumen

MedanJenisDiperlukanKeterangan
dslstringyaVersi DSL. Mesti "1.0"
namespacestringyaPengelompokan logik (contoh, ops, reports)
namestringyaNama workflow unik dalam ruang nama
versionstringtidakString versi semantik
descriptionstringtidakKeterangan yang boleh dibaca manusia

Medan Peringkat Atas

MedanJenisDiperlukanKeterangan
documentobjekyaMetadata dokumen (lihat di atas)
doarrayyaSenarai entri tugasan tertib
classification_ceilingstringtidakTaint sesi maksimum yang dibenarkan semasa pelaksanaan
inputtransformtidakTransform yang digunakan pada input workflow
outputtransformtidakTransform yang digunakan pada output workflow
timeoutobjektidakTamat masa peringkat workflow (after: <ISO 8601>)
metadataobjektidakMetadata nilai-kunci sewenang-wenang

Format Entri Tugasan

Setiap entri dalam blok do adalah objek kunci-tunggal. Kunci adalah nama tugasan, nilai adalah definisi tugasan.

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

Nama tugasan mesti unik dalam blok do yang sama. Keputusan tugasan disimpan dalam konteks data di bawah nama tugasan.


Medan Tugasan Umum

Semua jenis tugasan berkongsi medan pilihan ini:

MedanJenisKeterangan
ifstringSyarat ungkapan. Tugasan dilangkau apabila tidak benar.
inputtransformTransform yang digunakan sebelum pelaksanaan tugasan
outputtransformTransform yang digunakan selepas pelaksanaan tugasan
timeoutobjekTamat masa tugasan: after: <tempoh ISO 8601>
thenstringArahan aliran: continue, end, atau nama tugasan
metadataobjekMetadata nilai-kunci sewenang-wenang. Apabila self-healing diaktifkan, memerlukan description, expects, produces.

Konfigurasi Self-Healing

Blok metadata.triggerfish.self_healing mengaktifkan ejen penyembuhan autonomi untuk workflow. Lihat Self-Healing untuk panduan penuh.

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]
MedanJenisDiperlukanLalaiKeterangan
enabledbooleanyaAktifkan ejen penyembuhan
retry_budgetnumbertidak3Bilangan percubaan intervensi maks
approval_requiredbooleantidaktrueMemerlukan kelulusan manusia untuk pembetulan
pause_on_interventionstringtidak"blocking_only"always | never | blocking_only
pause_timeout_secondsnumbertidak300Saat sebelum dasar tamat masa berfungsi
pause_timeout_policystringtidak"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarraytidak[]intervention | escalation | approval_required

Metadata Langkah (Diperlukan Apabila Self-Healing Diaktifkan)

Apabila self_healing.enabled adalah true, setiap tugasan mesti menyertakan medan metadata ini. Penghurai menolak workflow yang hilang mana-mana daripadanya.

MedanJenisKeterangan
descriptionstringApa yang langkah lakukan dan mengapa
expectsstringBentuk input atau prasyarat yang diperlukan
producesstringBentuk output yang dijana
yaml
- fetch-invoices:
    call: http
    with:
      endpoint: "https://api.example.com/invoices"
    metadata:
      description: "Ambil invois terbuka dari API pengebilan"
      expects: "API tersedia, mengembalikan array JSON"
      produces: "Array objek {id, amount, status}"

Jenis Tugasan

call

Hantar ke titik akhir HTTP atau perkhidmatan Triggerfish.

MedanJenisDiperlukanKeterangan
callstringyaJenis panggilan (lihat jadual hantar di bawah)
withobjektidakArgumen yang dihantar ke alat sasaran
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Laksanakan arahan shell, skrip sebaris, atau sub-workflow. Medan run mesti mengandungi tepat satu daripada shell, script, atau workflow.

Shell:

MedanJenisDiperlukanKeterangan
run.shell.commandstringyaArahan shell untuk dilaksanakan
run.shell.argumentsobjektidakArgumen bernama
run.shell.environmentobjektidakPemboleh ubah persekitaran

Skrip:

MedanJenisDiperlukanKeterangan
run.script.languagestringyaBahasa skrip
run.script.codestringyaKod skrip sebaris
run.script.argumentsobjektidakArgumen bernama

Sub-workflow:

MedanJenisDiperlukanKeterangan
run.workflow.namestringyaNama workflow yang disimpan
run.workflow.versionstringtidakKekangan versi
run.workflow.inputobjektidakData input untuk sub-workflow

set

Tetapkan nilai ke konteks data.

MedanJenisDiperlukanKeterangan
setobjekyaPasangan nilai-kunci untuk ditetapkan. Nilai boleh berupa ungkapan.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Percabangan bersyarat. Medan switch adalah array entri kes. Setiap kes adalah objek kunci-tunggal di mana kunci adalah nama kes.

Medan kesJenisDiperlukanKeterangan
whenstringtidakSyarat ungkapan. Tanpa untuk kes lalai.
thenstringyaArahan aliran: continue, end, atau nama tugasan

Kes dinilai mengikut urutan. Kes pertama dengan when yang benar (atau tiada when) diambil.

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

for

Lelaran ke atas koleksi.

MedanJenisDiperlukanKeterangan
for.eachstringyaNama pemboleh ubah untuk item semasa
for.instringyaUngkapan yang merujuk koleksi
for.atstringtidakNama pemboleh ubah untuk indeks semasa
doarrayyaSenarai tugasan bersarang yang dilaksanakan untuk setiap lelaran
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Proses item ${ .idx }: ${ .item.name }"

raise

Hentikan workflow dengan ralat berstruktur.

MedanJenisDiperlukanKeterangan
raise.error.statusnumberyaKod status gaya HTTP
raise.error.typestringyaURI/string jenis ralat
raise.error.titlestringyaTajuk yang boleh dibaca manusia
raise.error.detailstringtidakMesej ralat terperinci
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Input tidak sah"
        detail: "Medan 'email' diperlukan"

emit

Rekodkan peristiwa workflow. Peristiwa disimpan dalam keputusan pelarian.

MedanJenisDiperlukanKeterangan
emit.event.typestringyaPengecam jenis peristiwa
emit.event.sourcestringtidakURI sumber peristiwa
emit.event.dataobjektidakMuatan peristiwa
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Jeda pelaksanaan untuk tempoh masa.

MedanJenisDiperlukanKeterangan
waitstringyaTempoh ISO 8601 (contoh, PT5S)

Tempoh biasa: PT1S (1 saat), PT30S (30 saat), PT1M (1 minit), PT5M (5 minit).


Jadual Hantar Panggilan

Memetakan nilai medan call kepada alat Triggerfish yang sebenarnya dipanggil.

Nilai callAlat yang dipanggilMedan with: yang diperlukan
httpweb_fetchendpoint atau url; pilihan method, headers, body
triggerfish:llmllm_taskprompt atau task; pilihan tools, max_iterations
triggerfish:agentsubagentprompt atau task; pilihan tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + medan operasi
triggerfish:web_searchweb_searchquery; pilihan max_results
triggerfish:web_fetchweb_fetchurl; pilihan method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; pilihan arguments
triggerfish:messagesend_messagechannel, text; pilihan recipient

Jenis panggilan CNCF yang tidak disokong (grpc, openapi, asyncapi) mengembalikan ralat.


Sintaks Ungkapan

Ungkapan dibatasi oleh ${ } dan diselesaikan berbanding konteks data workflow.

Resolusi Laluan Titik

SintaksKeteranganContoh keputusan
${ . }Keseluruhan konteks data{...}
${ .key }Kunci peringkat atas"nilai"
${ .a.b.c }Kunci bersarang"nilai mendalam"
${ .items[0] }Indeks array{...item pertama...}
${ .items[0].name }Indeks array kemudian kunci"pertama"

Titik utama (atau $.) menambat laluan di akar konteks. Laluan yang diselesaikan ke undefined menghasilkan rentetan kosong apabila diinterpolasi, atau undefined apabila digunakan sebagai nilai bersendirian.

Pengendali

JenisPengendaliContoh
Perbandingan==, !=, >, <, >=, <=${ .count > 0 }
Aritmetik+, -, *, /, %${ .price * .quantity }

Ungkapan perbandingan mengembalikan true atau false. Ungkapan aritmetik mengembalikan nombor (undefined jika salah satu operan bukan numerik atau pembahagian dengan sifar).

Literal

JenisContoh
String"hello", 'hello'
Nombor42, 3.14, -1
Booleantrue, false
Nullnull

Mod Interpolasi

Ungkapan tunggal (nilai mentah): Apabila keseluruhan rentetan adalah satu ungkapan ${ }, nilai bertaip mentah dikembalikan (nombor, boolean, objek, array).

yaml
count: "${ .items.length }"  # mengembalikan nombor, bukan string

Campuran / pelbagai ungkapan (string): Apabila ungkapan ${ } dicampurkan dengan teks atau terdapat pelbagai ungkapan, hasilnya sentiasa string.

yaml
message: "Dijumpai ${ .count } item dalam ${ .category }"  # mengembalikan string

Kebenaran

Untuk syarat if: dan ungkapan when: suis, nilai dinilai menggunakan kebenaran gaya JavaScript:

NilaiBenar?
trueya
Nombor bukan sifarya
String bukan kosongya
Array bukan kosongya
Objekya
false, 0, "", null, undefined, array kosongtidak

Transform Input/Output

Transform membentuk semula data yang mengalir masuk dan keluar dari tugasan.

input

Digunakan sebelum pelaksanaan tugasan. Menggantikan pandangan tugasan terhadap konteks data.

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # tugasan hanya melihat objek config
    with:
      endpoint: "${ .api_url }"  # diselesaikan berbanding objek config

from sebagai string: Ungkapan yang menggantikan keseluruhan konteks input.

from sebagai objek: Memetakan kunci baru kepada ungkapan:

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

output

Digunakan selepas pelaksanaan tugasan. Membentuk semula keputusan sebelum menyimpannya dalam konteks di bawah nama tugasan.

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

Arahan Aliran

Medan then pada mana-mana tugasan mengawal aliran pelaksanaan selepas tugasan selesai.

NilaiTingkah Laku
continueTeruskan ke tugasan seterusnya dalam urutan (lalai)
endHentikan workflow. Status: completed.
<nama tugasan>Lompat ke tugasan bernama. Tugasan mesti wujud dalam blok do yang sama.

Kes suis juga menggunakan arahan aliran dalam medan then.


Siling Pengkelasan

Medan pilihan yang mengehadkan taint sesi maksimum semasa pelaksanaan.

yaml
classification_ceiling: INTERNAL
NilaiMaksud
PUBLICWorkflow berhenti jika sebarang data terklasifikasi diakses
INTERNALMembenarkan data PUBLIC dan INTERNAL
CONFIDENTIALMembenarkan data sehingga CONFIDENTIAL
RESTRICTEDMembenarkan semua tahap pengkelasan
(ditinggalkan)Tiada siling dikuatkuasakan

Siling diperiksa sebelum setiap tugasan. Jika taint sesi telah meningkat melepasi siling (contoh, kerana tugasan sebelumnya mengakses data terklasifikasi), workflow berhenti dengan status failed dan ralat Workflow classification ceiling breached.


Storan

Definisi Workflow

Disimpan dengan awalan kunci workflows:{name}. Setiap rekod tersimpan mengandungi:

MedanJenisKeterangan
namestringNama workflow
yamlstringDefinisi YAML mentah
classificationstringTahap pengkelasan semasa penyimpanan
savedAtstringCap masa ISO 8601
descriptionstringKeterangan pilihan

Sejarah Pelarian

Disimpan dengan awalan kunci workflow-runs:{runId}. Setiap rekod pelarian mengandungi:

MedanJenisKeterangan
runIdstringUUID untuk pelaksanaan ini
workflowNamestringNama workflow yang dilaksanakan
statusstringcompleted, failed, atau cancelled
outputobjekKonteks data akhir (kunci dalaman ditapis)
eventsarrayPeristiwa yang dipancarkan semasa pelaksanaan
errorstringMesej ralat (jika status adalah failed)
startedAtstringCap masa ISO 8601
completedAtstringCap masa ISO 8601
taskCountnumberBilangan tugasan dalam workflow
classificationstringTaint sesi semasa penyiapan

Had

HadNilaiKeterangan
Had kedalaman sub-workflow5Nesting maksimum panggilan run.workflow
Had lalai sejarah pelarian10limit lalai untuk workflow_history

Status Pelaksanaan

StatusKeterangan
pendingWorkflow telah dicipta tetapi belum dimulakan
runningWorkflow sedang dilaksanakan
completedSemua tugasan selesai dengan jayanya (atau then: end)
failedTugasan gagal, raise dilaksanakan, atau siling dilanggar
cancelledPelaksanaan dibatalkan secara luaran