- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper - Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster) - Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev - Oppdater synkronisering.md med implementeringsstatus og designvalg - Oppdater lokal.md med SpacetimeDB og AI Gateway - Utvid PG-skjema med channels, messages, media_files, message_revisions - Legg til seed_dev.sql, migration_safety.md, .env.example - Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl. - Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl. - SpacetimeDB og AI Gateway i docker-compose.dev.yml - collect-docs.sh inkluderer erfaringer/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
Feature Spec: AI Research-Klipper ("Ctrl+A Workflow")
Filsti: docs/features/ai_research_klipper.md
1. Konsept
Et internt redaksjonelt verktøy for å samle inn research fra nettet. Programlederne limer inn uformatert tekst (ofte med menyer, annonser og støy fra "Ctrl+A"-kopiering), og en AI renser teksten og trekker ut strukturert kunnskap.
2. Arkitektur & Dataflyt
- Input (SvelteKit): En modal i grensesnittet der brukeren limer inn råtekst og valgfri kilde-URL, og knytter det til et Tema (f.eks. "Skolepolitikk").
- Prosessering (Jobbkø + OpenRouter):
- Backend mottar teksten og oppretter en
research_clip-jobb i jobbkøen (sedocs/infra/jobbkø.md). Rust-workeren plukker opp jobben og sender request til OpenRouter (Claude-modell). - System Prompt: Skal instruere AI-en til å returnere JSON med følgende struktur:
{ "title": "...", "summary": ["..."], "cleaned_text": "...", "actors": ["..."], "factoids": ["..."] }
- Backend mottar teksten og oppretter en
- Lagring (PostgreSQL): Backend lagrer resultatet relasjonelt i Kunnskapsgrafen. Aktører som ikke finnes opprettes. Faktoider kobles til aktørene. Selve artikkelen knyttes til det valgte Temaet.
- Broadcast (SpacetimeDB): Når lagringen er ferdig, sendes et signal via SpacetimeDB slik at chatten/tema-visningen oppdateres hos alle innloggede brukere med et "Kort" som viser det nye sammendraget.
3. Instruks for Claude Code
- Sørg for at OpenRouter API-kallet forventer og validerer streng JSON-struktur.
- Lagringen i PostgreSQL må håndtere "upserts" for Aktører elegant, slik at vi ikke får duplikater av f.eks. "Arbeiderpartiet".