Aller au contenu
English

defineLoopTask

import { defineLoopTask } from "@elie-laloum/outpost";

Déclare une tâche qui exécute attempt puis check pendant au plus maxRounds tours, en transmettant le feedback de chaque check refusé à la tentative suivante. Chaque tour consomme une tentative du workflow et, avec un checkpoint, enregistre sa phase. La sortie est la valeur acceptée ; l’épuisement fait échouer la tâche avec LoopTaskExhausted et une exception d’un callback la fait échouer immédiatement.

Exemple complet et règles détaillées.

  • optionsRequis
    LoopTaskOptions<T>
    Identité de tâche, dépendances, callback d’essai borné et vérification d’acceptation.
  • options.maxRoundsRequis
    number
    Entier sûr strictement positif limitant les tours logiques, reprises comprises. Rejouer une phase interrompue conserve son tour mais consomme une tentative supplémentaire du workflow.
  • options.attemptRequis
    (context: LoopTaskContext, feedback: string | undefined) => T | Promise<T>
    Produit le résultat candidat depuis le contexte de phase et le feedback du refus précédent ; feedback vaut undefined au premier tour. Les résultats persistés doivent être du JSON sans perte ou undefined.
  • options.checkRequis
    (context: LoopTaskContext, result: T) => LoopCheckResult | Promise<LoopCheckResult>
    Accepte le candidat avec done: true ou demande un autre tour avec done: false et un feedback textuel. Peut appeler un agent relecteur ; déclarer son usage via le contexte. Une exception fait échouer la tâche.
  • options.cacheOptionnel
    TaskCacheOptions | undefined
    Cache de résultat : une entrée trouvée restaure la valeur JSON sans perte enregistrée, sans tentative, usage ni effet de bord. En cas d’absence, un résultat qui n’est pas du JSON sans perte fait échouer la tâche. Refusé sur les gates, les interactions et les tâches qui renvoient un résultat de dispatch.
  • options.keyRequis
    string
    Clé unique dans le workflow, conforme à [A-Za-z0-9][A-Za-z0-9._-]*. Les enregistrements, événements et checkpoints identifient la tâche par elle.
  • options.afterOptionnel
    readonly Task<unknown>[] | undefined
    Tâches qui doivent être done avant que celle-ci démarre, aucune par défaut ; seules celles-ci se lisent avec context.value().
  • options.conditionOptionnel
    ((context: TaskContext) => boolean | Promise<boolean>) | undefined
    Évaluée avec attempt 0 avant l’exécution de la tâche, y compris quand un start() ultérieur la reprend ; false termine la tâche en skipped, ce qui ignore aussi ses dépendantes.
  • options.timeoutMsOptionnel
    number | undefined
    Délai en millisecondes de chaque tentative, entier positif jusqu’à 2147483647. À l’expiration, context.signal est annulé et la tentative échoue ; retry peut la répéter.

Task<T>

export declare function defineLoopTask<T>(options: LoopTaskOptions<T>): Task<T>;