synops/docs/proposals/chat_merging.md
vegard b3a55af660 Tre nye proposals: rollebasert arv, Mine ting, chat-merging
- Rollebasert arv: edge-roller styrer trait-synlighet per bruker
  (deltaker ser mikser, lytter ser bare chat)
- Mine ting: oversiktspanel i Hjem, dra node inn i verktøy for
  å koble dem (erstatter mottak som panel)
- Chat-merging: dra chat oppå chat → live flettet visning eller
  snapshot med AI-beriking og brukerprompt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:39:49 +00:00

4.6 KiB

Proposal: Chat-merging og adapter-visninger

Konsept

Dra én chat oppå en annen for å lage en flettet visning. Originalkildene lever videre uendret. To moduser: live abonnement eller snapshot. AI-beriking som naturlig forlengelse.

Motivasjon

Informasjon er spredt over flere samtaler. En redaksjon har en planleggingschat, en research-chat og en teknisk chat. Når du trenger en helhetlig oversikt over hva som er besluttet må du lese alle tre. Chat-merging gir deg det i én visning.

Interaksjon

Dra chat oppå chat (drag-and-drop):

1. Bruker drar "Planlegging"-noden fra Mine ting
2. Slipper den på "Research"-chatten (åpent panel)
3. Dialog: "Flett samtaler?"
   → [Abonner (live)]  [Snapshot]  [Avbryt]
4a. Abonner: flettet visning oppdateres i sanntid
4b. Snapshot: ny node med fryst, flettet innhold

Med brukerprompt (AI-beriking):

3. Dialog: "Flett samtaler?"
   [Brukerprompt: "Oppsummer hva vi har besluttet om episodetemaet"]
   → [Kjør]  [Avbryt]
4. AI leser begge chatter, genererer oppsummering
5. Ny innholds-node med source_material-edges til begge chatter

Moduser

Live abonnement (adapter)

En visning som abonnerer på to eller flere kommunikasjonsnoder. Meldinger flettes kronologisk med kanalmarkør.

┌─ Flettet: Planlegging + Research ──┐
│                                     │
│ [Planlegging] Vegard 10:03          │
│   Vi bør ta klimatilpasning         │
│                                     │
│ [Research] Trond 10:15              │
│   Fant en god kilde om flom i Oslo  │
│                                     │
│ [Planlegging] Arne 10:22            │
│   Enig, passer med forrige episode  │
│                                     │
│ [Research] Vegard 10:30             │
│   Denne rapporten er gull: ...      │
└─────────────────────────────────────┘

Teknisk:

  • Ikke en ny node-type — det er en visning (query)
  • Chat-panelet mottar en liste av node_ids i stedet for én
  • WebSocket abonnerer på alle kilde-chattene
  • Meldinger sorteres kronologisk fra alle kilder
  • Kanalmarkør viser opprinnelse

Kan lagres som bruker-preferanse (hvilke chatter er flettet) eller som en edge-konfigurasjon.

Snapshot

En fryst kopi av flettede meldinger som ny innholds-node.

snapshot_node (node_kind: 'content')
  ├── source_material-edge → Chat A
  ├── source_material-edge → Chat B
  └── metadata: { merged_at: "2026-03-19T...", source_count: 2 }

Innholdet er ren tekst med meldingene, formatert med avsender/tidspunkt/kanal. Kan redigeres etterpå.

AI-beriking

Utvidelse av snapshot med AI-prosessering:

1. Hent meldinger fra alle kilde-chatter
2. Send til LLM med brukerens prompt
3. Opprett innholds-node med AI-output
4. source_material-edges tilbake til kildene
5. processed_by-edge til AI-preset som ble brukt

Prompter kan være:

  • "Oppsummer beslutningene"
  • "Lag en handlingsplan basert på diskusjonen"
  • "Hva er vi uenige om?"
  • "Skriv et møtereferat"
  • Egendefinert fritekst

Ikke-destruktivt

Originalkildene endres aldri. Merging er alltid:

  • En visning (live) — ingen ny data
  • En ny node (snapshot) — med edges tilbake
  • Kildene lever videre uavhengig

Utvidelser

Mer enn to kilder: Dra flere chatter inn — visningen fletter alle kronologisk.

Filtrering i flettet visning: Vis kun meldinger fra én person, eller søk på tvers av alle kildene.

Automatisk merging via orkestrering: "Hver fredag, flett ukens chatter og lag et sammendrag."

Teknisk implementering

Live adapter

Utvid ChatTrait til å akseptere contextIds: string[] i tillegg til contextId: string. Når flere IDs er gitt:

  • Abonner på alle via WebSocket
  • Flett meldinger kronologisk i visningen
  • Vis kanalmarkør per melding

Snapshot

Ny intensjon merge_chats:

POST /intentions/merge_chats
{
  source_ids: ["chat-a-id", "chat-b-id"],
  mode: "snapshot" | "ai",
  prompt?: "Oppsummer beslutningene"
}

Returnerer { node_id: "snapshot-id" }.

Drop-target

ChatTrait sin BlockReceiver utvides til å akseptere kommunikasjonsnoder. Når en chat droppes på en åpen chat:

  • Vis dialog med valg (abonner/snapshot/AI)
  • Utfør valgt handling

Hva som eksisterer allerede

  • Chat-visning med meldinger fra WebSocket (✓)
  • Drag-and-drop mellom paneler (✓)
  • BlockReceiver i ChatTrait (✓)
  • source_material-edges (✓)
  • AI-prosessering via synops-ai (✓)
  • Orkestrering (✓)

Hovedsakelig utvidelse av ChatTrait + ny intensjon i maskinrommet.