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
enabledbooleanyes—Habilita 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