-- 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;