synops/migrations/025_seed_orchestrations.sql
vegard 1f21f90f76 Seed-orkestreringer og flerords-verbstøtte (oppgave 24.9)
Fem standard-orkestreringer opprettet som seed-data:
- Podcast-pipeline (transkriber → oppsummer → RSS)
- Publiseringsflyt (render → indeks → RSS)
- AI-beriking (foreslå koblinger ved nytt innhold)
- Planlagt publisering (render ved tidspunkt)
- Podcast TTS (kaskade fra pipeline → les opp oppsummering)

Podcast-pipeline → TTS demonstrerer kaskade via triggers-edge.

Script-kompilatoren utvidet med flerords-verbstøtte: aliaser som
"generer feed", "les opp", "foreslå koblinger" matcher nå korrekt
selv om parseren splitter ved første mellomrom. Prøver verb + N
første ord av objekt opptil 3 ord.
2026-03-18 18:11:02 +00:00

158 lines
6.4 KiB
PL/PgSQL

-- 025_seed_orchestrations.sql
-- Oppgave 24.9: Seed-orkestreringer for podcast-pipeline, publiseringsflyt,
-- og AI-beriking. Skrevet i menneskelig scriptspråk som kompileres av
-- script_compiler til tekniske CLI-kall.
--
-- Disse fungerer som standard-orkestreringer og som eksempler for brukere
-- som vil lage egne. De erstatter hardkodet logikk i vaktmesteren.
--
-- Ref: docs/concepts/orkestrering.md
BEGIN;
-- =============================================================================
-- 1. Podcast-pipeline: opptak → transkribering → oppsummering → RSS
-- =============================================================================
-- Erstatter hardkodet flyt: communication.ended → whisper_transcribe → summarize → rss
-- Trigger: communication.ended + samling med podcast-trait + lydfil
INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by)
VALUES (
'e0000000-0ac0-4000-b000-000000000001',
'orchestration',
'Podcast: opptak → publisering',
E'NÅR innspilling avsluttet\nHVIS samling har podcast\n\n1. transkriber lydfilen (stor modell)\n ved feil: transkriber lydfilen (medium modell)\n2. oppsummer samtalen\n3. generer feed for samlingen\n\nved feil: opprett oppgave "Podcast-pipeline feilet" (bug)',
'discoverable',
'{
"trigger": {
"event": "communication.ended",
"conditions": {
"has_trait": "podcast",
"has_media": "audio"
}
},
"executor": "script",
"intelligence": 2,
"effort": 3,
"compiled": false
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 2. Publiseringsflyt: artikkel publisert → render → RSS
-- =============================================================================
-- Erstatter hardkodet flyt: render_article → render_index → rss
-- Trigger: node.published (belongs_to med slot i publiseringssamling)
INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by)
VALUES (
'e0000000-0ac0-4000-b000-000000000002',
'orchestration',
'Publisering: artikkel → render → RSS',
E'NÅR artikkel publisert\nHVIS samling har publishing\n\n1. render noden (som artikkel)\n ved feil: opprett oppgave "Rendering feilet" (bug)\n2. render noden (som indeks, i samlingen)\n3. generer feed for samlingen\n\nved feil: opprett oppgave "Publisering feilet" (bug)',
'discoverable',
'{
"trigger": {
"event": "node.published",
"conditions": {
"has_trait": "publishing"
}
},
"executor": "script",
"intelligence": 1,
"effort": 2,
"compiled": false
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 3. AI-beriking: nytt innhold → foreslå koblinger
-- =============================================================================
-- Erstatter hardkodet flyt: node.created → suggest_edges
-- Trigger: node.created med node_kind content
INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by)
VALUES (
'e0000000-0ac0-4000-b000-000000000003',
'orchestration',
'AI-beriking: foreslå koblinger',
E'NÅR innhold opprettet\nHVIS node_kind er content\n\n1. foreslå koblinger for noden\n\nved feil: opprett oppgave "AI-beriking feilet" (bug)',
'discoverable',
'{
"trigger": {
"event": "node.created",
"conditions": {
"node_kind": "content"
}
},
"executor": "script",
"intelligence": 2,
"effort": 1,
"compiled": false
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 4. Planlagt publisering: tidspunkt nådd → render → RSS → varsle
-- =============================================================================
-- Trigger: scheduled.due — planlagt tidspunkt nådd
INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by)
VALUES (
'e0000000-0ac0-4000-b000-000000000004',
'orchestration',
'Planlagt publisering: timer → render → RSS',
E'NÅR planlagt tid nådd\nHVIS samling har publishing\n\n1. render noden (som artikkel)\n2. generer feed for samlingen\n\nved feil: opprett oppgave "Planlagt publisering feilet" (bug)',
'discoverable',
'{
"trigger": {
"event": "scheduled.due",
"conditions": {
"has_trait": "publishing"
}
},
"executor": "script",
"intelligence": 1,
"effort": 2,
"compiled": false
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 5. Podcast-oppsummering til lyd (TTS) — kaskademål for podcast-pipeline
-- =============================================================================
-- Designet som kaskademål: kobles via triggers-edge fra podcast-pipeline.
-- Demonstrerer kaskade-mønsteret fra oppgave 24.8.
INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by)
VALUES (
'e0000000-0ac0-4000-b000-000000000005',
'orchestration',
'Podcast: oppsummering → lyd (TTS)',
E'NÅR kaskade\n\n1. les opp teksten fra noden (på norsk)\n\nved feil: opprett oppgave "TTS-generering feilet" (bug)',
'discoverable',
'{
"trigger": {
"event": "cascade",
"conditions": {}
},
"executor": "script",
"intelligence": 1,
"effort": 2,
"compiled": false
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- Kaskade-edge: podcast-pipeline → TTS-oppsummering
-- =============================================================================
-- Når podcast-pipeline fullføres, trigger TTS-genereringen automatisk.
INSERT INTO edges (source_id, target_id, edge_type, metadata)
VALUES (
'e0000000-0ac0-4000-b000-000000000001', -- Podcast-pipeline
'e0000000-0ac0-4000-b000-000000000005', -- TTS-oppsummering
'triggers',
'{"description": "Generer lydoppsummering etter podcast-prosessering"}'::jsonb
);
COMMIT;