Oppdater CLAUDE.md og arkitektur med nye prinsipper
- Maskinrommet orkestrerer, CLI-verktøy gjør jobben - Spatial canvas med drag-and-drop som primær interaksjon - To retninger: dra ut = ny node, dra inn = transformer - Arbeidsflaten er en node (rekursivt) - Caddy flyttet til native i teknologitabellen - CLI-verktøy lagt til i lagmodell og teknologivalg Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1a94c36713
commit
be1b6caa29
2 changed files with 82 additions and 30 deletions
21
CLAUDE.md
21
CLAUDE.md
|
|
@ -159,10 +159,13 @@ Ref: `docs/infra/agent_api.md` for planlagt API-overflate.
|
||||||
|
|
||||||
## Lagmodell
|
## Lagmodell
|
||||||
```
|
```
|
||||||
GUI (SvelteKit)
|
GUI (SvelteKit) — spatial canvas med verktøy-paneler
|
||||||
│ skriv │ les (sanntid, direkte WebSocket)
|
│ skriv │ les (sanntid, direkte WebSocket)
|
||||||
▼ ▼
|
▼ ▼
|
||||||
Maskinrommet (Rust) SpacetimeDB ──→ GUI
|
Maskinrommet (Rust) SpacetimeDB ──→ GUI
|
||||||
|
│ orkestrerer
|
||||||
|
▼
|
||||||
|
CLI-verktøy (tools/) ←── Claude bruker de samme
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
Tjenester: PG+AGE, SpacetimeDB, CAS, Whisper, LiteLLM, LiveKit ...
|
Tjenester: PG+AGE, SpacetimeDB, CAS, Whisper, LiteLLM, LiveKit ...
|
||||||
|
|
@ -173,11 +176,23 @@ Tjenester: PG+AGE, SpacetimeDB, CAS, Whisper, LiteLLM, LiveKit ...
|
||||||
kalender, notater. Visninger er spørringer mot grafen.
|
kalender, notater. Visninger er spørringer mot grafen.
|
||||||
2. **Tre primitiver:** Input (fanger), Mottak (presenterer), Kommunikasjon
|
2. **Tre primitiver:** Input (fanger), Mottak (presenterer), Kommunikasjon
|
||||||
(samler folk). Alt annet er visninger og edges.
|
(samler folk). Alt annet er visninger og edges.
|
||||||
3. **Maskinrommet orkestrerer alt.** Fang, prosesser, lever. Edge-drevet
|
3. **Maskinrommet orkestrerer, CLI-verktøy gjør jobben.** Maskinrommet eier
|
||||||
ressursallokering. Tjenester under er utbyttbare.
|
auth, intentions, jobbkø og edge-logikk. All prosessering (transkribering,
|
||||||
|
rendering, AI, lyd) skjer i CLI-verktøy som maskinrommet spawner.
|
||||||
|
Claude bruker de samme verktøyene direkte. Ny funksjonalitet starter
|
||||||
|
som CLI-verktøy, absorberes i orkestratoren, dokumenteres nøye.
|
||||||
|
Ref: `docs/retninger/unix_filosofi.md`.
|
||||||
4. **Noder er sentrum.** Brukere, team, innhold — alt er noder.
|
4. **Noder er sentrum.** Brukere, team, innhold — alt er noder.
|
||||||
Du ser dine edges. Tilgang via materialisert tilgangsmatrise.
|
Du ser dine edges. Tilgang via materialisert tilgangsmatrise.
|
||||||
5. **Privat er default.** Input uten mottaker-edge er privat. Security
|
5. **Privat er default.** Input uten mottaker-edge er privat. Security
|
||||||
by design, ikke konfigurasjon.
|
by design, ikke konfigurasjon.
|
||||||
6. **PG er arkivet, SpacetimeDB er nåtid.** Ingen eierskapskonflikt.
|
6. **PG er arkivet, SpacetimeDB er nåtid.** Ingen eierskapskonflikt.
|
||||||
To lag, to roller.
|
To lag, to roller.
|
||||||
|
7. **Alt er paneler i en arbeidsflate.** Brukergrensesnittet er et spatial
|
||||||
|
canvas der verktøy plasseres, sizes og arrangeres fritt. Hver feature
|
||||||
|
er et panel i BlockShell. Interaksjon mellom paneler via drag-and-drop:
|
||||||
|
- **Dra ut av kontekst → ny node.** Innhold som dras fra et verktøy
|
||||||
|
til et annet skaper en ny node med `source_material`-edge tilbake.
|
||||||
|
- **Dra verktøy inn i kontekst → transformer.** Et verktøy (AI, editor,
|
||||||
|
studio) som mottar en node anvender sin funksjon på originalen.
|
||||||
|
Ref: `docs/retninger/arbeidsflaten.md`, `docs/features/universell_overfoering.md`.
|
||||||
|
|
|
||||||
|
|
@ -15,25 +15,26 @@ lag som leser grafen fra SpacetimeDB.
|
||||||
## Lagmodell
|
## Lagmodell
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────┐
|
┌─────────────────────────────────────────┐
|
||||||
│ GUI (SvelteKit) │
|
│ GUI (SvelteKit) — spatial canvas │
|
||||||
│ Visninger: spørringer mot STDB │
|
│ Verktøy-paneler i BlockShell │
|
||||||
└────────┬──────────────────┬─────────┘
|
│ Drag-and-drop mellom paneler │
|
||||||
|
└────────┬──────────────────┬─────────────┘
|
||||||
│ intensjoner │ les (sanntid)
|
│ intensjoner │ les (sanntid)
|
||||||
│ │ direkte WebSocket
|
│ │ direkte WebSocket
|
||||||
┌────────▼────────┐ ┌──────▼──────────┐
|
┌────────▼────────┐ ┌──────▼──────────┐
|
||||||
│ Maskinrommet │ │ SpacetimeDB │
|
│ Maskinrommet │ │ SpacetimeDB │
|
||||||
│ (Rust) │ │ Hele grafen │
|
│ (Rust) │ │ Hele grafen │
|
||||||
│ Eier alle │ │ (noder+edges) │
|
│ Orkestrerer │ │ (noder+edges) │
|
||||||
│ skrivinger │ └─────────────────┘
|
└──┬───────────┬──┘ └─────────────────┘
|
||||||
└──┬─────┬─────┬──┘
|
│ spawner │
|
||||||
│ │ │
|
▼ ▼
|
||||||
▼ ▼ ▼
|
┌─────────┐ ┌─────┐┌─────┐┌─────────────┐
|
||||||
┌─────┐┌─────┐┌─────┐┌─────────────┐
|
│ CLI- │ │ PG ││ CAS ││ Whisper, │
|
||||||
│ PG ││STDB ││ CAS ││ Whisper, │
|
│ verktøy │ │ ││ ││ LiteLLM, │
|
||||||
│(bak)││(skr)││ ││ LiteLLM, │
|
│ (tools/)│ │ ││ ││ LiveKit ... │
|
||||||
│ ││ ││ ││ LiveKit ... │
|
└─────────┘ └─────┘└─────┘└─────────────┘
|
||||||
└─────┘└─────┘└─────┘└─────────────┘
|
▲ Claude bruker de samme
|
||||||
```
|
```
|
||||||
|
|
||||||
### Skrivestien
|
### Skrivestien
|
||||||
|
|
@ -86,6 +87,32 @@ Visninger er spørringer mot SpacetimeDB med edge-filtre:
|
||||||
|
|
||||||
Ingen forhåndsdefinerte visningstyper. Nye visninger er nye filtre.
|
Ingen forhåndsdefinerte visningstyper. Nye visninger er nye filtre.
|
||||||
|
|
||||||
|
## Arbeidsflaten — spatial canvas
|
||||||
|
|
||||||
|
Brukergrensesnittet er et **spatial canvas** der verktøy (chat, kanban,
|
||||||
|
kalender, editor, studio) plasseres som paneler i en fri flate.
|
||||||
|
|
||||||
|
### Tre lag
|
||||||
|
1. **Personlig flate** — brukerens standard arbeidsflate
|
||||||
|
2. **Node-flate** — default-oppsett fra node-eier/traits
|
||||||
|
3. **Brukerens tilpasning** — overrides lagret per bruker per node
|
||||||
|
|
||||||
|
### Drag-and-drop som primær interaksjon
|
||||||
|
To retninger, to semantikker:
|
||||||
|
- **Dra ut av kontekst → ny node.** Innhold som dras fra et verktøy
|
||||||
|
til et annet skaper en ny node med `source_material`-edge tilbake
|
||||||
|
til originalen. Originalen er uendret.
|
||||||
|
- **Dra verktøy inn i kontekst → transformer.** Et verktøy (AI, editor)
|
||||||
|
som mottar en node anvender sin funksjon direkte på originalen.
|
||||||
|
|
||||||
|
Kompatibilitetsmatrisen bestemmer hva som kan dras hvor.
|
||||||
|
Ref: `docs/retninger/arbeidsflaten.md`, `docs/features/universell_overfoering.md`
|
||||||
|
|
||||||
|
### Arbeidsflaten er en node
|
||||||
|
Canvaset er selv en node med edges til panelene det viser. Layout
|
||||||
|
(posisjon, størrelse, z-index) er metadata på edgen. Arbeidsflater
|
||||||
|
kan nestes — en flate kan vises som panel i en annen.
|
||||||
|
|
||||||
## Input
|
## Input
|
||||||
|
|
||||||
Én universell input-komponent, gjenbrukt overalt. Fanger tekst, lyd,
|
Én universell input-komponent, gjenbrukt overalt. Fanger tekst, lyd,
|
||||||
|
|
@ -104,14 +131,23 @@ system-edges som er usynlige for traversering.
|
||||||
|
|
||||||
## Maskinrommet
|
## Maskinrommet
|
||||||
|
|
||||||
Rust-tjeneste med tre operasjoner: **fang**, **prosesser**, **lever**.
|
Rust-tjeneste som **orkestrerer**, ikke gjør arbeid selv.
|
||||||
|
|
||||||
Eier alle skrivinger. Frontend sender intensjoner, maskinrommet
|
Eier alle skrivinger. Frontend sender intensjoner, maskinrommet
|
||||||
validerer og utfører. Edge-drevet ressursorkestrering: maskinrommet
|
validerer og utfører. Selve prosesseringen delegeres til CLI-verktøy
|
||||||
leser edges og bestemmer hvilke tjenester som spinnes opp.
|
i `tools/` — maskinrommet spawner riktig verktøy fra jobbkøen.
|
||||||
|
|
||||||
Forvalter også CAS (binærlagring) med intelligent pruning basert
|
Kjerneansvar (forblir i maskinrommet):
|
||||||
på modalitet, edges og aksessmønstre.
|
- Auth + tilgangskontroll
|
||||||
|
- Intentions (validering, edge-logikk, STDB+PG-skriving)
|
||||||
|
- Jobbkø (polling, retry, dead letter)
|
||||||
|
- CAS-forvaltning og pruning
|
||||||
|
|
||||||
|
Alt annet (transkribering, rendering, AI, lyd, RSS) er CLI-verktøy.
|
||||||
|
Claude bruker de samme verktøyene direkte fra terminalen — nyttig
|
||||||
|
for debugging, testing og utvikling.
|
||||||
|
|
||||||
|
Ref: `docs/retninger/unix_filosofi.md`
|
||||||
|
|
||||||
## Sikkerhet
|
## Sikkerhet
|
||||||
|
|
||||||
|
|
@ -156,19 +192,20 @@ Egenutviklet kode kjører **native på hosten** via systemd.
|
||||||
Tredjepartstjenester kjører i **Docker**. Prinsipp: Docker for det vi
|
Tredjepartstjenester kjører i **Docker**. Prinsipp: Docker for det vi
|
||||||
ikke bygger selv, native for det vi har full kontroll over.
|
ikke bygger selv, native for det vi har full kontroll over.
|
||||||
|
|
||||||
**Native (systemd):** maskinrommet (Rust), SvelteKit (når klar).
|
**Native (systemd):** Caddy, maskinrommet (Rust), SvelteKit.
|
||||||
**Docker:** PostgreSQL, SpacetimeDB, Authentik, Caddy, LiteLLM, faster-whisper.
|
**Docker:** PostgreSQL, SpacetimeDB, Authentik, LiteLLM, faster-whisper.
|
||||||
|
|
||||||
Maskinrommet kjører native fordi det trenger tilgang til `claude` CLI
|
Maskinrommet og Caddy kjører native fordi de trenger direkte tilgang
|
||||||
og hele vertsmaskinens verktøy. Caddy (Docker) når maskinrommet via
|
til host-ressurser (CLI-verktøy, TLS-konfig). Docker-tjenester
|
||||||
`host.docker.internal`.
|
eksponerer porter på localhost.
|
||||||
|
|
||||||
## Teknologivalg
|
## Teknologivalg
|
||||||
|
|
||||||
| Rolle | Teknologi | Kjøremodus | Begrunnelse |
|
| Rolle | Teknologi | Kjøremodus | Begrunnelse |
|
||||||
|-------|-----------|------------|-------------|
|
|-------|-----------|------------|-------------|
|
||||||
| Orkestrator | Rust | Native (systemd) | Ytelse, typesikkerhet, eier alle skrivinger, trenger host-tilgang |
|
| Orkestrator | Rust | Native (systemd) | Orkestrerer CLI-verktøy, eier auth+edges, trenger host-tilgang |
|
||||||
| Frontend | SvelteKit | Native (systemd) | PWA, SSR, tynt lag mot STDB |
|
| CLI-verktøy | Rust/Shell | Native | Prosessering (transcribe, render, audio, AI). Delt mellom maskinrommet og Claude |
|
||||||
|
| Frontend | SvelteKit | Native (systemd) | PWA, SSR, spatial canvas med verktøy-paneler |
|
||||||
| Database | PostgreSQL | Docker | Versjonsstyring, enkel oppgradering |
|
| Database | PostgreSQL | Docker | Versjonsstyring, enkel oppgradering |
|
||||||
| Sanntid | SpacetimeDB | Docker | Eksperimentelt, offisielt image |
|
| Sanntid | SpacetimeDB | Docker | Eksperimentelt, offisielt image |
|
||||||
| Binærlagring | CAS (filsystem) | Native | Enkel, deduplisering, ingen ekstern avhengighet |
|
| Binærlagring | CAS (filsystem) | Native | Enkel, deduplisering, ingen ekstern avhengighet |
|
||||||
|
|
@ -177,7 +214,7 @@ og hele vertsmaskinens verktøy. Caddy (Docker) når maskinrommet via
|
||||||
| STT | faster-whisper | Docker | Modellhåndtering, ferdig image |
|
| STT | faster-whisper | Docker | Modellhåndtering, ferdig image |
|
||||||
| TTS | ElevenLabs (→ lokal) | — | Kommersiell start, lokal når kvaliteten holder |
|
| TTS | ElevenLabs (→ lokal) | — | Kommersiell start, lokal når kvaliteten holder |
|
||||||
| Auth | Authentik | Docker | Kompleks stack (server + worker + Redis) |
|
| Auth | Authentik | Docker | Kompleks stack (server + worker + Redis) |
|
||||||
| Reverse proxy | Caddy | Docker | Auto-TLS, kan tas native senere |
|
| Reverse proxy | Caddy | Native (systemd) | Auto-TLS, direkte tilgang til konfig |
|
||||||
| Lyd/video | LiveKit | Docker | WebRTC, self-hosted |
|
| Lyd/video | LiveKit | Docker | WebRTC, self-hosted |
|
||||||
|
|
||||||
## Traits — samlingsnoder med evner
|
## Traits — samlingsnoder med evner
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue