Skip to content

@Workflow

Declara a ordem dos passos. Todos compartilham o mesmo estado.

ts
import { Workflow, loop, parallel, untilAnswered } from "@thenajs/core";

@Workflow({
  state: RevisaoState,
  steps: [
    PlannerAgent,
    parallel([SegurancaAgent, PerfAgent]),
    loop({ steps: [ExecutorAgent], until: untilAnswered, maxIterations: 8 }),
  ],
})
export class RevisaoWorkflow {}

WorkflowConfig

ChaveTipoObrigatória
stepsWorkflowStep[]sim
statenew () => objectnão

steps

ts
type WorkflowStep = AgentClass | ParallelStep | LoopStep;

Rodam em ordem. Blocos parallel e loop se aninham à vontade. Veja Passos.

state

ts
export class RevisaoState {
  aprovado = false;
  rodadas = 0;
}

Os valores iniciais são as inicializações de campo — sem schema, sem factory. O framework instancia uma por execução e entrega o mesmo objeto a quem pedir:

QuemComo
um agenteconstructor(@state() private s: RevisaoState)
uma toolexecute(@input() a, @state() s: RevisaoState)
o until de um laçoo segundo parâmetro

Omitir o state está ok enquanto ninguém pedir. Se alguém pedir, a falha nomeia a classe e o parâmetro em vez de injetar undefined — e para um until que declara segundo parâmetro, isso é pego antes de a execução começar, pela aridade da função.

WorkflowMetadata

Legível com getWorkflowMetadata(ClasseDoWorkflow):

ts
interface WorkflowMetadata {
  steps: WorkflowStep[];
  state?: StateCtor;
}

Executando

ts
const app = Thena.create(RevisaoWorkflow, config);

O Thena.create não é async. Veja Run e RunHandle.

Um agente sozinho ainda precisa de workflow — o contexto da execução, o orçamento, o cancelamento e o gravador pertencem a ele:

ts
@Workflow({ steps: [MeuAgent] })
export class MeuWorkflow {}

Relacionado