Orkestrering: menneskelig scriptspråk med kompilator til CLI-kall

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) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-18 16:52:21 +00:00
parent 42a45cd613
commit b759808831
2 changed files with 106 additions and 14 deletions

View file

@ -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 <event i naturlig språk>
HVIS <betingelse i naturlig språk>
STEP <N>. <verb> <objekt> [(<argument>)]
FALLBACK ved feil: <verb> <objekt> | opprett oppgave <tittel> [(<tag>)]
```
### Grammatikk (teknisk lag)
```
TRIGGER NÅR <event> [HVIS <betingelse>]
@ -75,9 +167,8 @@ FALLBACK VED_FEIL: <tool> <args...> | work_item <title> [--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

View file

@ -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`