Skip to content

Referencia do DSL de Fluxos de Trabalho

Referencia completa para o CNCF Serverless Workflow DSL 1.0 conforme implementado no motor de fluxos de trabalho do Triggerfish. Para guia de uso e exemplos, consulte Fluxos de Trabalho.

Estrutura do Documento

Todo YAML de fluxo de trabalho deve ter um campo document de nivel superior e um bloco do.

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

Metadados do Documento

FieldTypeRequiredDescricao
dslstringyesVersao do DSL. Deve ser "1.0"
namespacestringyesAgrupamento logico (ex.: ops, reports)
namestringyesNome unico do fluxo de trabalho no namespace
versionstringnoString de versao semantica
descriptionstringnoDescricao legivel por humanos

Campos de Nivel Superior

FieldTypeRequiredDescricao
documentobjectyesMetadados do documento (veja acima)
doarrayyesLista ordenada de entradas de tarefas
classification_ceilingstringnoTaint maximo permitido da sessao durante a execucao
inputtransformnoTransformacao aplicada a entrada do fluxo de trabalho
outputtransformnoTransformacao aplicada a saida do fluxo de trabalho
timeoutobjectnoTimeout do fluxo de trabalho (after: <ISO 8601>)
metadataobjectnoMetadados arbitrarios de chave-valor

Formato de Entrada de Tarefa

Cada entrada no bloco do e um objeto de chave unica. A chave e o nome da tarefa, o valor e a definicao da tarefa.

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

Os nomes das tarefas devem ser unicos dentro do mesmo bloco do. O resultado da tarefa e armazenado no contexto de dados sob o nome da tarefa.


Campos Comuns de Tarefa

Todos os tipos de tarefa compartilham estes campos opcionais:

FieldTypeDescricao
ifstringCondicao de expressao. A tarefa e ignorada quando falsa.
inputtransformTransformacao aplicada antes da execucao da tarefa
outputtransformTransformacao aplicada apos a execucao da tarefa
timeoutobjectTimeout da tarefa: after: <duracao ISO 8601>
thenstringDiretiva de fluxo: continue, end ou um nome de tarefa
metadataobjectMetadados arbitrarios de chave-valor. Quando self-healing esta habilitado, requer description, expects, produces.

Configuracao de Self-Healing

O bloco metadata.triggerfish.self_healing habilita um agente de recuperacao autonoma para o fluxo de trabalho. Consulte Self-Healing para um guia completo.

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]
FieldTypeRequiredDefaultDescricao
enabledbooleanyesHabilita o agente de recuperacao
retry_budgetnumberno3Tentativas maximas de intervencao
approval_requiredbooleannotrueRequer aprovacao humana para as correcoes
pause_on_interventionstringno"blocking_only"always | never | blocking_only
pause_timeout_secondsnumberno300Segundos antes da politica de timeout ser acionada
pause_timeout_policystringno"escalate_and_halt"escalate_and_halt | escalate_and_skip | escalate_and_fail
notify_onarrayno[]intervention | escalation | approval_required

Metadados de Etapa (Obrigatorios Quando Self-Healing Esta Habilitado)

Quando self_healing.enabled e true, cada tarefa deve incluir estes campos de metadados. O analisador rejeita fluxos de trabalho que estejam sem qualquer um deles.

FieldTypeDescricao
descriptionstringO que a etapa faz e por que
expectsstringForma de entrada ou precondicoes necessarias
producesstringForma de saida gerada
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"

Tipos de Tarefa

call

Despacha para um endpoint HTTP ou servico do Triggerfish.

FieldTypeRequiredDescricao
callstringyesTipo de chamada (veja tabela de despacho abaixo)
withobjectnoArgumentos passados para a ferramenta de destino
yaml
- fetch:
    call: http
    with:
      endpoint: "https://api.example.com/data"
      method: GET

run

Executa um comando shell, script inline ou sub-fluxo de trabalho. O campo run deve conter exatamente um entre shell, script ou workflow.

Shell:

FieldTypeRequiredDescricao
run.shell.commandstringyesComando shell a executar
run.shell.argumentsobjectnoArgumentos nomeados
run.shell.environmentobjectnoVariaveis de ambiente

Script:

FieldTypeRequiredDescricao
run.script.languagestringyesLinguagem do script
run.script.codestringyesCodigo do script inline
run.script.argumentsobjectnoArgumentos nomeados

Sub-fluxo de trabalho:

FieldTypeRequiredDescricao
run.workflow.namestringyesNome do fluxo de trabalho salvo
run.workflow.versionstringnoRestricao de versao
run.workflow.inputobjectnoDados de entrada para o sub-fluxo de trabalho

set

Atribui valores ao contexto de dados.

FieldTypeRequiredDescricao
setobjectyesPares chave-valor a atribuir. Valores podem ser expressoes.
yaml
- prepare:
    set:
      full_name: "${ .first_name } ${ .last_name }"
      count: 0

switch

Ramificacao condicional. O campo switch e um array de entradas de caso. Cada caso e um objeto de chave unica onde a chave e o nome do caso.

Campo do casoTypeRequiredDescricao
whenstringnoCondicao de expressao. Omita para o caso padrao.
thenstringyesDiretiva de fluxo: continue, end ou nome da tarefa

Os casos sao avaliados em ordem. O primeiro caso com when verdadeiro (ou sem when) e executado.

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

for

Itera sobre uma colecao.

FieldTypeRequiredDescricao
for.eachstringyesNome da variavel para o item atual
for.instringyesExpressao referenciando a colecao
for.atstringnoNome da variavel para o indice atual
doarrayyesLista de tarefas aninhadas executadas para cada iteracao
yaml
- process_all:
    for:
      each: item
      in: "${ .items }"
      at: idx
    do:
      - handle:
          call: triggerfish:llm
          with:
            task: "Process item ${ .idx }: ${ .item.name }"

raise

Interrompe o fluxo de trabalho com um erro estruturado.

FieldTypeRequiredDescricao
raise.error.statusnumberyesCodigo de status estilo HTTP
raise.error.typestringyesURI/string do tipo de erro
raise.error.titlestringyesTitulo legivel por humanos
raise.error.detailstringnoMensagem de erro detalhada
yaml
- abort:
    raise:
      error:
        status: 422
        type: "validation-error"
        title: "Invalid input"
        detail: "Field 'email' is required"

emit

Registra um evento do fluxo de trabalho. Os eventos sao armazenados no resultado da execucao.

FieldTypeRequiredDescricao
emit.event.typestringyesIdentificador do tipo de evento
emit.event.sourcestringnoURI de origem do evento
emit.event.dataobjectnoPayload do evento
yaml
- record:
    emit:
      event:
        type: "step.completed"
        source: "workflow/pipeline"
        data:
          step: "transform"
          duration_ms: 1200

wait

Pausa a execucao por uma duracao.

FieldTypeRequiredDescricao
waitstringyesDuracao ISO 8601 (ex.: PT5S)

Duracoes comuns: PT1S (1 segundo), PT30S (30 segundos), PT1M (1 minuto), PT5M (5 minutos).


Tabela de Despacho de Chamadas

Mapeia o valor do campo call para a ferramenta do Triggerfish que e efetivamente invocada.

Valor de callFerramenta invocadaCampos with: obrigatorios
httpweb_fetchendpoint ou url; opcional method, headers, body
triggerfish:llmllm_taskprompt ou task; opcional tools, max_iterations
triggerfish:agentsubagentprompt ou task; opcional tools, agent
triggerfish:memorymemory_*operation (save/search/get/list/delete) + campos da operacao
triggerfish:web_searchweb_searchquery; opcional max_results
triggerfish:web_fetchweb_fetchurl; opcional method, headers, body
triggerfish:mcpmcp__<server>__<tool>server, tool; opcional arguments
triggerfish:messagesend_messagechannel, text; opcional recipient

Tipos de chamada CNCF nao suportados (grpc, openapi, asyncapi) retornam um erro.


Sintaxe de Expressoes

As expressoes sao delimitadas por ${ } e resolvem contra o contexto de dados do fluxo de trabalho.

Resolucao de Caminho por Ponto

SintaxeDescricaoResultado exemplo
${ . }Contexto de dados inteiro{...}
${ .key }Chave de nivel superior"value"
${ .a.b.c }Chave aninhada"deep value"
${ .items[0] }Indice de array{...primeiro item...}
${ .items[0].name }Indice de array e depois chave"first"

O ponto inicial (ou $.) ancora o caminho na raiz do contexto. Caminhos que resolvem para undefined produzem uma string vazia quando interpolados, ou undefined quando usados como valor independente.

Operadores

TipoOperadoresExemplo
Comparacao==, !=, >, <, >=, <=${ .count > 0 }
Aritmetica+, -, *, /, %${ .price * .quantity }

Expressoes de comparacao retornam true ou false. Expressoes aritmeticas retornam um numero (undefined se algum operando nao for numerico ou divisao por zero).

Literais

TipoExemplos
String"hello", 'hello'
Numero42, 3.14, -1
Booleanotrue, false
Nulonull

Modos de Interpolacao

Expressao unica (valor bruto): Quando a string inteira e uma expressao ${ }, o valor tipado bruto e retornado (numero, booleano, objeto, array).

yaml
count: "${ .items.length }"  # retorna um numero, nao uma string

Mista / multiplas expressoes (string): Quando expressoes ${ } sao misturadas com texto ou ha multiplas expressoes, o resultado e sempre uma string.

yaml
message: "Found ${ .count } items in ${ .category }"  # retorna uma string

Veracidade

Para condicoes if: e expressoes when: do switch, os valores sao avaliados usando veracidade estilo JavaScript:

ValorVerdadeiro?
truesim
Numero diferente de zerosim
String nao vaziasim
Array nao vaziosim
Objetosim
false, 0, "", null, undefined, array vazionao

Transformacoes de Entrada/Saida

As transformacoes reformatam dados que fluem para dentro e para fora das tarefas.

input

Aplicada antes da execucao da tarefa. Substitui a visao da tarefa sobre o contexto de dados.

yaml
- step:
    call: http
    input:
      from: "${ .config }"       # a tarefa ve apenas o objeto config
    with:
      endpoint: "${ .api_url }"  # resolvido contra o objeto config

from como string: Expressao que substitui todo o contexto de entrada.

from como objeto: Mapeia novas chaves para expressoes:

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

output

Aplicada apos a execucao da tarefa. Reformata o resultado antes de armazena-lo no contexto sob o nome da tarefa.

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

Diretivas de Fluxo

O campo then em qualquer tarefa controla o fluxo de execucao apos a tarefa ser concluida.

ValorComportamento
continueProssegue para a proxima tarefa na sequencia (padrao)
endPara o fluxo de trabalho. Status: completed.
<nome da tarefa>Salta para a tarefa nomeada. A tarefa deve existir no mesmo bloco do.

Casos do switch tambem usam diretivas de fluxo em seu campo then.


Teto de Classificacao

Campo opcional que restringe o taint maximo da sessao durante a execucao.

yaml
classification_ceiling: INTERNAL
ValorSignificado
PUBLICO fluxo de trabalho para se qualquer dado classificado for acessado
INTERNALPermite dados PUBLIC e INTERNAL
CONFIDENTIALPermite ate dados CONFIDENTIAL
RESTRICTEDPermite todos os niveis de classificacao
(omitido)Nenhum teto aplicado

O teto e verificado antes de cada tarefa. Se o taint da sessao escalou alem do teto (por exemplo, porque uma tarefa anterior acessou dados classificados), o fluxo de trabalho para com status failed e erro Workflow classification ceiling breached.


Armazenamento

Definicoes de Fluxo de Trabalho

Armazenadas com prefixo de chave workflows:{name}. Cada registro armazenado contem:

FieldTypeDescricao
namestringNome do fluxo de trabalho
yamlstringDefinicao YAML bruta
classificationstringNivel de classificacao no momento do salvamento
savedAtstringTimestamp ISO 8601
descriptionstringDescricao opcional

Historico de Execucao

Armazenado com prefixo de chave workflow-runs:{runId}. Cada registro de execucao contem:

FieldTypeDescricao
runIdstringUUID desta execucao
workflowNamestringNome do fluxo de trabalho executado
statusstringcompleted, failed ou cancelled
outputobjectContexto de dados final (chaves internas filtradas)
eventsarrayEventos emitidos durante a execucao
errorstringMensagem de erro (se o status for failed)
startedAtstringTimestamp ISO 8601
completedAtstringTimestamp ISO 8601
taskCountnumberNumero de tarefas no fluxo de trabalho
classificationstringTaint da sessao na conclusao

Limites

LimiteValorDescricao
Profundidade maxima de sub-fluxo5Aninhamento maximo de chamadas run.workflow
Limite padrao do historico10limit padrao para workflow_history

Status de Execucao

StatusDescricao
pendingO fluxo de trabalho foi criado mas nao iniciado
runningO fluxo de trabalho esta sendo executado atualmente
completedTodas as tarefas concluidas com sucesso (ou then: end)
failedUma tarefa falhou, um raise foi acionado ou teto violado
cancelledA execucao foi cancelada externamente