From b7598088318d029a4473b6118aab463169d9aa71 Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 16:52:21 +0000 Subject: [PATCH] =?UTF-8?q?Orkestrering:=20menneskelig=20scriptspr=C3=A5k?= =?UTF-8?q?=20med=20kompilator=20til=20CLI-kall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To lag av samme script: - Menneskelig: "transkriber lydfilen (stor modell)" - Teknisk: "synops-transcribe --cas-hash {event.cas_hash} --model large" Kompilator matcher verb mot cli_tool-aliases, argumenter mot args_hints, variabler fra trigger-kontekst. Rust-stil feilmeldinger. Tre visninger i editoren (Enkel/Teknisk/Kompilert). Oppgaver restrukturert: kompilator, alias-metadata, executor, UI med tre visninger, AI-assistert oppretting, kaskade, seed. Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/concepts/orkestrering.md | 107 +++++++++++++++++++++++++++++++--- tasks.md | 13 +++-- 2 files changed, 106 insertions(+), 14 deletions(-) diff --git a/docs/concepts/orkestrering.md b/docs/concepts/orkestrering.md index 5022db5..690e1db 100644 --- a/docs/concepts/orkestrering.md +++ b/docs/concepts/orkestrering.md @@ -47,12 +47,32 @@ metadata: { ⚡ signaliserer: "denne noden gjør noe av seg selv." -## 4. Tre utførelsesnivåer +## 4. To lag: menneskelig språk og teknisk script -### Nivå 1: Deklarativt script (ingen AI) +Orkestreringer har to representasjoner av samme oppskrift — +et menneskelig lesbart språk som kompileres til tekniske +CLI-kall. Brukeren skriver og leser det ene, vaktmesteren +kjører det andre. -Eksakte CLI-kall med variabler fra trigger-konteksten. -Vaktmesteren parser og eksekverer direkte — ingen LLM. +### Menneskelig lag (bruker skriver) + +``` +NÅR innspilling avsluttet +HVIS samling har podcast + +1. transkriber lydfilen (stor modell) + ved feil: transkriber lydfilen (medium modell) +2. oppsummer samtalen +3. oppdater rss-feed + +ved feil: opprett oppgave "Pipeline feilet" (bug) +``` + +Ingen `--cas-hash`, ingen `{event.*}`, ingen CLI-syntax. +Norske verb som matcher verktøy. Argumenter i parenteser. +Lesbart for alle. + +### Teknisk lag (vaktmesteren kjører) ``` NÅR innspilling.avsluttet @@ -66,7 +86,79 @@ HVIS samling.har_trait("podcast") VED_FEIL: work_item "Podcast-pipeline feilet" --tag bug ``` -**Grammatikk:** +Generert automatisk fra det menneskelige laget via kompilatoren. +Deterministisk, gratis, raskt. + +### Kompilatoren + +Vaktmesteren kompilerer menneskelig → teknisk ved lagring. +Matchingen bruker `cli_tool`-noders metadata: + +```jsonc +{ + "binary": "synops-transcribe", + "aliases": ["transkriber", "transkribering"], + "description": "Whisper-transkribering av lydfil", + "args_hints": { + "lydfilen": "{event.cas_hash}", + "stor modell": "--model large", + "medium modell": "--model medium" + } +} +``` + +"transkriber lydfilen (stor modell)" matcher: +- "transkriber" → alias for synops-transcribe +- "lydfilen" → {event.cas_hash} (fra trigger-kontekst) +- "(stor modell)" → --model large + +### Kompileringsfeil (Rust-stil) + +Ved feil får brukeren presise, hjelpsomme meldinger: + +``` +┌─ Kompilering ────────────────────────────────┐ +│ │ +│ ✓ Linje 1: transkriber lydfilen (stor) │ +│ → synops-transcribe --model large │ +│ │ +│ ✗ Linje 2: send epost til deltakerne │ +│ Feil: "send epost" matcher ingen verktøy │ +│ Mente du: "varsle deltakerne"? │ +│ Tilgjengelig: varsle, oppsummer, publiser │ +│ │ +│ ✓ Linje 3: oppdater rss-feed │ +│ → synops-rss │ +│ │ +│ 1 feil. Rett opp og prøv igjen. │ +└──────────────────────────────────────────────┘ +``` + +### Tre visninger i editoren + +``` +[Enkel] [Teknisk] [Kompilert] +``` + +| Visning | Hva | Hvem | +|---------|-----|------| +| **Enkel** | Norsk, lesbart | Brukeren skriver her | +| **Teknisk** | CLI-kall med variabler | For de som vil se | +| **Kompilert** | JSON/intern | Skjult som default | + +Tabbar i editoren — som raw/rendered i tekst-editoren. +Kompileringsfeil vises i sanntid mens brukeren skriver. + +### Grammatikk (menneskelig lag) + +``` +TRIGGER NÅR + HVIS +STEP . [()] +FALLBACK ved feil: | opprett oppgave [()] +``` + +### Grammatikk (teknisk lag) ``` TRIGGER NÅR [HVIS ] @@ -75,9 +167,8 @@ FALLBACK VED_FEIL: | work_item [--tag <tag>] VARIABLE {event.<felt>} — substitueres fra trigger-konteksten ``` -Enkelt nok til å parse med en liten Rust-parser i vaktmesteren. -Deterministisk, gratis, raskt. **De fleste produksjons- -orkestreringer vil være på dette nivået.** +**De fleste produksjonsorkestreringer skrives og vedlikeholdes +i det menneskelige laget.** Det tekniske laget er generert. ### Nivå 2: AI-assistert oppretting diff --git a/tasks.md b/tasks.md index b23d3d5..7f0e506 100644 --- a/tasks.md +++ b/tasks.md @@ -319,12 +319,13 @@ automatisk eskalering av intelligens ved feil, kompilering av velprøvde mønstr - [x] 24.1 Orchestration node-type: legg til `orchestration` i maskinrommets node-validering. Metadata-skjema: `trigger` (event + conditions), `executor`, `intelligence`, `effort`, `compiled`, `pipeline`. Valider trigger-events mot kjent liste. - [~] 24.2 Trigger-evaluering i portvokteren: ved node/edge-events, sjekk om noen `orchestration`-noder matcher triggeren. Effektiv lookup (indeksert på `metadata.trigger.event`). Ingen LLM-kall for trigger-matching. > Påbegynt: 2026-03-18T16:46 -- [ ] 24.3 Bot-utførelse: utvid `synops-respond` (eller nytt `synops-orchestrate`) til å ta orchestration-node som input. Bygg prompt med trigger-kontekst + instruksjoner + tilgjengelige verktøy. Function calling for hvert steg. Logg i `orchestration_log`. -- [ ] 24.4 Auto-eskalering: start med lavt intelligens/effort-nivå. Ved feil (tool_error, ambiguous_instruction) bump automatisk til neste nivå og retry. Maks 3 nivåer. -- [ ] 24.5 Orchestration UI: editor for orkestreringsnoder i frontend. Trigger-velger (dropdown), betingelser, tekstbokser per steg, "Test kjøring"-knapp (dry-run), kjørehistorikk med status. -- [ ] 24.6 Kaskade: `triggers`-edge mellom orkestreringer. Output fra én trigrer neste. Syklusdeteksjon for å unngå uendelige loops. -- [ ] 24.7 Kompilering: observer hvilke verktøy/sekvenser som gjentas. Foreslå kompilering etter N kjøringer. Kompilert pipeline med `fallback: "bot"`. Ingen LLM for standardsteg. -- [ ] 24.8 Seed-orkestreringer: opprett standard-orkestreringer for podcast-pipeline, publiseringsflyt, og AI-beriking basert på eksisterende hardkodet logikk i portvokteren. +- [ ] 24.3 Script-kompilator: parser menneskelig scriptspråk ("transkriber lydfilen (stor modell)") og kompilerer til tekniske CLI-kall. Matcher verb mot `cli_tool`-noders `aliases`, argumenter mot `args_hints`, variabler fra trigger-kontekst. Rust-stil kompileringsfeil med forslag. +- [ ] 24.4 cli_tool alias-metadata: utvid alle `cli_tool`-noder med `aliases` (norske verb) og `args_hints` (menneskelige argumenter → CLI-flagg). Seed for alle eksisterende verktøy. +- [ ] 24.5 Script-executor: vaktmesteren parser kompilert script og eksekverer steg sekvensielt via generisk dispatch. VED_FEIL-håndtering. Logger i `orchestration_log`. +- [ ] 24.6 Orchestration UI: editor med tre visninger (Enkel/Teknisk/Kompilert) som tabber. Sanntids kompileringsfeil. Trigger-velger, "Test kjøring"-knapp, kjørehistorikk. Ref: `docs/concepts/orkestrering.md`. +- [ ] 24.7 AI-assistert oppretting: `synops-ai` med auto-generert systemprompt (fra cli_tool-noder) foreslår script fra fritekst-beskrivelse. Vaktmesteren validerer. Eventually-modus: lagre som work_item for Claude Code. +- [ ] 24.8 Kaskade: `triggers`-edge mellom orkestreringer. Output fra én trigger neste. Syklusdeteksjon for å unngå uendelige loops. +- [ ] 24.9 Seed-orkestreringer: opprett standard-orkestreringer for podcast-pipeline, publiseringsflyt, og AI-beriking basert på eksisterende hardkodet logikk i vaktmesteren. Skrives i menneskelig scriptspråk. ## Fase 25: Web Clipper — `synops-clip`