Ga naar inhoud

Een pipeline-sjabloon maken

Pipeline-sjablonen stel je samen in de werkruimte-instellingen. Het item Pipelines in de zijbalk van de werkruimte is de wachtrij van runs, niet de sjablonenlijst — er zit geen actie “sjabloon maken” in.

Wat elke stapsoort, elke body-sleutel en elk configuratieveld betekent, lees je in de Pipeline-stapsoorten.

  1. Ga naar Instellingen → Werkruimte → Pipelinesjablonen (/workspaces/<workspace-id>/settings/pipelines).
  2. Druk op Nieuwe template.

Er is geen dialoogvenster voor de id. De editor opent meteen op een voorbereid skelet met de naam Nieuwe pipeline, met een automatisch toegewezen id (pipeline_1, dan pipeline_2, …). Klik op de titel in de koptekst om hem te hernoemen.

Het canvas is niet leeg: een ingangsnode Trigger, één prompt-agent-node met het label Step en een terminal-sentinel die de run beëindigt. De sentinel wordt niet getekend. De editor verbindt die verborgen terminal opnieuw met elke bereikbare sink, zodat werk dat je achter Step hangt alsnog wordt uitgevoerd.

De zijbalk Node-bibliotheek staat permanent links in de editor. Filter hem met het vak Knooppunten zoeken en sleep een item naar het canvas — de node komt te staan waar je hem loslaat, zonder inkomende verbinding.

Palettenode Stapsoort Wat het doet
Bash script listen Voert een shellscript uit met {{state}}-substitutie; er wordt geen agent gedispatcht
Open conversation listen Opent de enige zichtbare ruimte van de run en de checkout ervan; agent-nodes voegen zich bij deze ruimte
Clone PR branch listen Vindt de head-branch van de PR via gh pr view en kloont die naar de map van de run
Post PR comment listen Plaatst de gebundelde bevindingen als GitHub-reviewcommentaar op de PR
Reviewer (prompt) listen Dispatcht een gespecialiseerde reviewer-agent; blijft onderbroken tot de agent zijn resultaat indient
Consolidate (join) join Wacht op meerdere stroomopwaartse takken en vraagt daarna een agent hun uitvoer te bundelen
Custom prompt listen Algemene, promptgestuurde node via de body promptAgent
Post to space listen Stuurt een bericht naar een berichtenruimte
Condition / switch (router) router Vertakt de flow op basis van een statuswaarde
If file exists (router) router Routeert "true" als een pad onder de kloon bestaat, anders "false"
Any file exists (OR router) router Routeert "true" als een van de opgegeven paden bestaat
All conditions (AND router) router Routeert "true" alleen als elk opgegeven pad bestaat
Team dispatch listen Dispatcht een heel team en blijft onderbroken tot het klaar is
Approval gate listen Pauzeert voor een goedkeuringsbeslissing
For each (map) forEach Rendert een prompt per item en dispatcht de agent daarna één keer met die prompts aan elkaar
Call sub-pipeline listen Voert een ander sjabloon uit als geneste stap
Clean up worktrees listen Verwijdert verouderde geïsoleerde worktrees; deterministisch, er wordt geen agent gedispatcht

De bibliotheek groepeert ze onder Flow en logica, PR-review, Agents, Berichten en Code. Er is geen groep Demo.

Elke werknode heeft een ronde uitvoerpoort aan de rechterrand. Sleep van die poort naar een andere node om ze te verbinden. Starttriggers werken hetzelfde: elke trigger heeft zijn eigen poort, dus een verbinding vanaf Schema vertrekt niet ook vanaf Handmatige uitvoering. Druk op Stap toevoegen (+) net voorbij een node om daarna een type in te voegen. Zweef over het midden van een bestaande rand en druk op × om de verbinding te verbreken.

Verbindingen bewerk je ook vanaf de node die ze ontvangt:

  1. Selecteer de stroomafwaartse node. Het configuratiepaneel opent rechts.
  2. Scroll naar Triggers van en tik op de chip van elke stroomopwaartse node waarop deze moet luisteren. Als je op een geselecteerde chip tikt, wordt de verbinding verwijderd.
  3. Is een stroomopwaartse node een router, dan verschijnt onder de chips een blok Routesleutels met één veld Routesleutel van <node> per routerrand. Vul de sleutel in waarop die rand afgaat: true of false bij de routers voor bestaande bestanden, of de naam van het geval bij een schakelaar.

Elke triggernode is een ingangspunt. Een node mag naar meerdere stroomopwaartse nodes luisteren (fan-in) en meerdere stroomafwaartse nodes voeden (fan-out), en de graaf moet acyclisch blijven — niets in de editor houdt je tegen als je een cyclus aansluit, dus controleer je werk.

De terminal-sentinel wordt uit het canvas gefilterd en kan dus niet worden geselecteerd. De editor verbindt hem opnieuw met elke bereikbare sink telkens wanneer de graaf verandert, zodat werk dat je achter de voorbereide Step hangt alsnog wordt uitgevoerd. Een lege graaf (een trigger zonder opvolgend werk) vermeldt de trigger zelf, zodat een run meteen voltooit.

Selecteer een node om het configuratiepaneel te openen. Welke velden verschijnen, hangt af van de body van de node.

Elke node heeft Label, Invoersleutels (door komma’s gescheiden) (statussleutels die bij uitvoering worden gelezen) en onder Geavanceerd: Reducer, Time-out (ms), Nieuwe pogingen, Doorgaan als deze stap mislukt en Uitvoerschema (JSON). Listen- en join-nodes kunnen hun Type ook tussen die twee wisselen.

Voegt een kiezer voor Te klonen repositories toe (welke repo’s van de werkruimte worden uitgecheckt; leeg betekent geen enkele), een Naam van de ruimte en het selectievakje Er een gesprek in openen. Staat dat vakje aan, dan benoemt Naam van het gesprek de stroom waarmee de ruimte opent. Agent-nodes voegen zich bij deze ruimte — ze openen er geen eigen.

Voegt Agent toe (welke agent wordt gedispatcht), Prompt-template (gebruik {{key}} om naar invoer of uitvoer van stroomopwaartse nodes te verwijzen) en Uitvoersleutel.

Time-out (ms) is in milliseconden, niet in seconden — 900000 is 15 minuten. Als je 900 invult, krijgt de stap 0,9 seconde.

De gespreksmodus waarin een prompt-agent-node werkt, heeft geen editorveld op de agent-node. Die reist mee in extras['mode'] (chat, plan of review) op de node Open conversation die de ruimte heeft aangemaakt (standaard review). Zet je hem op een agentstap, dan wordt hij genegeerd. De sleutel wordt exact vergeleken: elke andere spelling wordt stil genegeerd.

Voegt Bash-script toe. Er zijn geen velden voor werkmap of omgeving, omdat geen van beide configureerbaar is:

  • Elke bash-stap in een run deelt de cwd <cc_root>/pipelines/<runId>/.
  • GITHUB_TOKEN wordt geïnjecteerd uit de opslag voor inloggegevens, dus gh en git clone https://x-access-token:$GITHUB_TOKEN@… werken zonder verdere configuratie.
  • Het script wordt gestart als het letterlijke uitvoerbare bestand bash, dus bash moet in de PATH van de serverhost staan. Daar moet je op Windows rekening mee houden.

Een router evalueert een voorwaarde en geeft een routesleutel terug; de engine laat alleen de stroomafwaartse rand afgaan waarvan de routesleutel overeenkomt en markeert de andere takken als overgeslagen.

Als je een router selecteert, vervangt de voorwaardeneditor het veld Uitvoersleutel. Kies een van de vier modi:

  • Bestand(en) aanwezig — een — routeert "true" als een van de opgegeven paden bestaat.
  • Bestanden aanwezig — alle — routeert "true" alleen als elk opgegeven pad bestaat.
  • Vergelijking — vergelijkt een statuswaarde met een letterlijke waarde.
  • Schakelaar — routeert op de waarde van een statussleutel, met een standaardgeval.

Zet daarna de passende routesleutels op de uitgaande randen (zie Nodes met elkaar verbinden).

Booleaanse groepen and / or / not ondersteunt de body wel, maar ze zijn niet in dit formulier samen te stellen — daarvoor heb je een met de hand geschreven predicaatboom onder extras.predicate nodig. Het volledige vocabulaire aan predicaten en operatoren staat in de Pipeline-stapsoorten.

Geen eigen configuratie: hij wacht op al zijn stroomopwaartse stappen.

De poort dispatcht de goedkeurder-agent met de poortprompt naar een verborgen gesprek en blijft onderbroken. De goedkeurder vraagt je beslissing in het gesprek en dient die in met submit_output als { "decision": "approved" | "rejected", "reason": "..." }. De beslissing komt onder de uitvoersleutel te staan (standaard approval_decision), zodat een stroomafwaartse schakelaar-router erop kan vertakken.

Zet Agent op de goedkeurder en Prompt-template op de vraag van de poort. De poort wordt opgelost via submit_output als { "decision": "approved" | "rejected", "reason": "..." }. Nodes Reviewer (prompt) dienen op dezelfde manier in.

Voegt Team-ID en Verzendmodus toe. De kiezer biedt precies twee modi:

  • allParallel — één taak per lid, blijft onderbroken tot alle klaar zijn.
  • manager — dispatcht de leider, die delegeert.

Elke andere opgeslagen waarde gedraagt zich als allParallel. Zet Reducer op append om het resultaat van elk lid als lijst onder de uitvoersleutel te verzamelen.

For each mapt standaard over de statussleutel items (extras.iterableKey / extras.itemKey op de node). Hij rendert zijn prompt één keer per item ({{item}} als standaard) en dispatcht de agent één keer met die prompts aan elkaar. Een lege verzameling voltooit direct met een lege lijst. Het is geen aparte parallelle dispatch per item.

Call sub-pipeline blijft onderbroken tot de onderliggende run een eindtoestand bereikt en voegt daarna de eindstatus van het kind samen onder de uitvoersleutel (standaard subflow_result). Wijs met extras.templateId naar een kind. Een sjabloon kan zichzelf niet aanroepen; een mislukt of geannuleerd kind laat de bovenliggende stap mislukken, en die volgt daarna het herkansings- en doorgaan-bij-mislukken-beleid van die stap.

Invoer declareren en handmatige runs toestaan

Sectie getiteld “Invoer declareren en handmatige runs toestaan”

Beide zitten achter Handmatige uitvoering in de koptekst van de editor.

  1. Druk op Handmatige uitvoering.
  2. Zet Handmatige uitvoering toestaan aan. Deze schakelaar wordt meteen opgeslagen — hij maakt de triggerrij manual aan (of verwijdert die), en daardoor verschijnt het sjabloon in de runkiezer.
  3. Stel Max. parallelle runs in als je een limiet wilt (laat leeg voor onbeperkt). Extra starts wachten in de status queued tot er een plek vrijkomt.
  4. Druk op Invoer toevoegen voor elk formulierveld dat een handmatige run moet verzamelen:
Veld Beschrijving
Sleutel Statussleutel waaronder de waarde wordt opgeslagen; verwijs ernaar met {{key}}
Label Weergavelabel (standaard de sleutel)
Type Tekst, Tekst met meerdere regels, Getal, Schakelaar, Selectie, Repository
Opties (door komma’s gescheiden) Door komma’s gescheiden keuzes, alleen bij Selectie
Standaardwaarde Vooraf ingevulde waarde
Tijdelijke aanduiding Hinttekst in het lege veld
Helptekst Helptekst onder het veld
Verplicht Of het runformulier blokkeert op een lege waarde

Een invoer Repository toont een kiezer over de repo’s van de werkruimte en vult repo_id, repo_local_path, repo_full_name en — als de repo een GitHub-remote heeft — repo_owner en repo_name in de payload van de run.

  1. Druk op Opslaan in het dialoogvenster. Wijzigingen aan de invoer gaan in het concept; ze blijven bewaard wanneer je het sjabloon opslaat.
  1. Druk op Opslaan in de koptekst van de editor. Tot dan toont de koptekst “Niet-opgeslagen wijzigingen”.
  2. Ga terug naar Instellingen → Werkruimte → Pipelinesjablonen en controleer of de schakelaar in de rij van het sjabloon aan staat. De engine weigert een uitgeschakeld sjabloon te starten, en een uitgeschakeld sjabloon verschijnt nooit in de runkiezer.
  3. Om het automatisch te starten sleep je een trigger uit de node-bibliotheek naar het canvas — zie Pipeline-triggers instellen.