- 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>
164 lines
4.6 KiB
Markdown
164 lines
4.6 KiB
Markdown
# 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.
|