Commit graph

20 commits

Author SHA1 Message Date
1a94c36713 Fase 21: CLI-verktøy — unix-filosofi (16 oppgaver)
Bryt ut all prosessering fra maskinrommet til standalone CLI-verktøy:
- 9 prosesseringsverktøy (transcribe, audio, render, rss, tts,
  summarize, suggest-edges, respond, prune)
- 5 oppslagsverktøy for Claude (context, search, tasks,
  feature-status, node)
- Jobbkø-dispatcher + felles lib

Maskinrommet og Claude deler samme verktøykasse.
Ref: docs/retninger/unix_filosofi.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 01:53:09 +00:00
7eeee34c74 Legg til fase 19 (spatial canvas) og 20 (universell overføring + panelrework)
Arkitekturskiftet fra "vertikalt stablede traits" til "spatial canvas
med verktøy-paneler" krever:

Fase 19 — Arbeidsflaten:
- Canvas-primitiv (pan/zoom/viewport)
- BlockShell wrapper for alle paneler
- Collection-side rewrite til spatial layout
- Kontekst-header med node-velger
- Snarveier og personlig flate

Fase 20 — Universell overføring:
- message_placements tabell + STDB
- source_material edge-type
- BlockReceiver interface i alle traits
- Transfer service (innholdstransfer + triage)
- Panelrework for Chat, Kanban, Kalender, Editor, Studio

Ref: docs/retninger/arbeidsflaten.md, docs/features/universell_overfoering.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 01:28:24 +00:00
51f49fea22 Legg til fase 17: lydstudio-utbedring (7 oppgaver)
Kodegjennomgang av lydstudio-implementasjonen avdekket:
- Responsivt design mangler (mobil-layout)
- FFmpeg-parametervalidering bør strammes
- Fade/silence-logikkfeil (negativ start, margin-underflow)
- Frontend input-begrensninger mangler
- Job-polling lekker ved navigering
- Temp-filer ryddes ikke ved krasj
- FFmpeg-feilmeldinger når ikke bruker

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:55:20 +00:00
1cb0d43f21 Legg til fase 16 (lydmixer) i task-runner avhengigheter 2026-03-18 00:49:21 +00:00
445f32de69 Sanntidslyd: kommunikasjonsnode → LiveKit-rom (oppgave 11.2)
Kobler kommunikasjonsnoder til LiveKit for sanntidslyd.
Bruker sender join_communication-intensjon, maskinrommet validerer
tilgang og returnerer signert LiveKit JWT-token + rom-URL.

Nye komponenter:
- maskinrommet/src/livekit.rs: JWT token-generering (HS256-signert
  med LIVEKIT_API_SECRET, 1-times TTL, publisher/subscriber-roller)
- POST /intentions/join_communication: validerer deltaker-edge,
  genererer token, oppretter rom i STDB, oppdaterer node-metadata
- POST /intentions/leave_communication: fjerner deltaker fra STDB
- POST /intentions/close_communication: stenger rom (krever owner)
- SpacetimeDB: live_room + room_participant tabeller for sanntids
  deltakerliste (frontend abonnerer via WebSocket)

SpacetimeDB-modul publisert som synops-v2 (ny identitet etter
at den opprinnelige ikke lenger var tilgjengelig). .env oppdatert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:54:40 +00:00
e95b7d6663 TTS-pipeline: tekst → lyd via ElevenLabs (oppgave 10.4)
Ny jobbtype `tts_generate` som kaller ElevenLabs text-to-speech API,
lagrer MP3-lyd i CAS, og oppretter media-node med has_media-edge.

Voice-preferanse løses i tre lag: eksplisitt i payload → nodens
metadata.voice_preference → ELEVENLABS_DEFAULT_VOICE env.
Dette er "mottaker-preferanse i metadata" — en node kan sette
voice_preference i sin metadata for å styre hvilken stemme som brukes.

Ny migrasjon 009: resource_usage_log-tabell for sporing av
ressursforbruk (TTS, AI, Whisper, CAS). Ref: docs/features/ressursforbruk.md

Endringer:
- maskinrommet/src/tts.rs: TTS-handler med ElevenLabs-integrasjon
- maskinrommet/src/intentions.rs: POST /intentions/generate_tts
- maskinrommet/src/jobs.rs: Dispatcher for tts_generate
- migrations/009_resource_usage_and_tts.sql: resource_usage_log
- scripts/maskinrommet-env.sh: ELEVENLABS_* env-variabler

Krever: ELEVENLABS_API_KEY i /srv/synops/.env (placeholder lagt til)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:40:46 +00:00
e08a4fd22f Fiks remote-navn: forgejo → origin i task-runner 2026-03-17 23:16:56 +00:00
01ad35557f LiteLLM AI Gateway: Docker, DB-ruting, config-generering (oppgave 10.1)
Setter opp AI Gateway med LiteLLM som sentralisert proxy for alle
AI-kall. PG eier all modellkonfigurasjon — LiteLLM er stateløs.

- Migrasjon 008: ai_model_aliases, ai_model_providers, ai_job_routing
  med seed-data for sidelinja/rutine og sidelinja/resonering
- Config-generering fra PG: scripts/generate-litellm-config.sh
  filtrerer bort providers med tomme API-nøkler
- Docker-container kjører på sidelinja-net (intern, ingen eksponert port)
- Maskinrommet har AI_GATEWAY_URL via maskinrommet-env.sh
- API-nøkkel-placeholders i .env (GEMINI, ANTHROPIC, XAI)
- Oppdatert docs/infra/ai_gateway.md med faktisk config

Verifisert: container healthy, modellaliaser eksponert, maskinrommet
har korrekt gateway-URL. Reelle API-kall krever at Vegard fyller
inn leverandør-nøkler i /srv/synops/.env.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:12:46 +00:00
02fc38eb3d LiveKit oppsett: Docker-container for WebRTC (oppgave 11.1)
Legger til LiveKit som Docker-tjeneste for WebRTC-støtte.
Konfigurasjonen bruker livekit/livekit-server med signaling
proxyet gjennom Caddy på /livekit/*, og UDP 50000-50100 eksponert
direkte for WebRTC media-strømmer.

Endringer:
- docker-compose.yml: livekit-service (på /srv/synops/)
- livekit.yaml: server-konfig (på /srv/synops/config/livekit/)
- Caddy: /livekit/* route aktivert
- UFW: åpnet UDP 50000-50100 + TCP 7881
- maskinrommet-env.sh: LIVEKIT_URL/KEY/SECRET for Rust-API
- produksjon.md: oppdatert med LiveKit-detaljer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:54:50 +00:00
895f517d9d Fiks run-tasks.sh: unngå set -e krasj ved exitkode-håndtering
((completed++)) returnerer 1 når completed=0 under set -e.
Bytter til $((x + 1)) og fanger exitkode med || exit_code=$?.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:21:11 +00:00
73999f2f45 Fiks task-runner: fase 13-15, auto-retry ved API-feil
- Legg til fase 13 (traits), 14 (publisering), 15 (adminpanel) i
  avhengighetskartet og blocked_phases-scan
- run-tasks.sh prøver automatisk igjen ved API-feil (500/529) med
  lineær backoff (60s, 120s, ...) opptil 10 forsøk
- Skiller mellom bevisst blokkering ([?]/[!]) og krasj — stopper
  bare ved blokkering, retries ved krasj
- systemd-service (synops-tasks) for auto-restart ved feil
- Oppdater prompt til å reflektere direkte serverkjøring

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:04:29 +00:00
33a1b44946 Implementer Claude som chat-deltaker (Fase A: MVP)
Claude er nå en agent-node i grafen som kan delta i samtaler.
Når en bruker sender melding i en kommunikasjonsnode der Claude
er deltaker, enqueues en agent_respond-jobb som kaller claude CLI
direkte og skriver svaret tilbake til chatten.

Nye filer:
- migrations/007_agent_system.sql: agent_identities, agent_permissions, ai_usage_log
- maskinrommet/src/agent.rs: agent_respond job handler
- scripts/maskinrommet.service: systemd-tjeneste for native kjøring
- scripts/maskinrommet-env.sh: genererer env med Docker container-IPs

Endringer:
- intentions.rs: trigger agent_respond ved melding i agent-chat
- jobs.rs: dispatch agent_respond til agent-handler
- frontend chat: bot-badge (🤖) og amber-farge på agent-meldinger
- LiteLLM config: resonering-modellalias via OpenRouter

Maskinrommet kjører nå direkte på hosten (ikke i Docker) for å
ha tilgang til claude CLI. Caddy peker til host.docker.internal.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:20:17 +00:00
83cc04937c Fullfør oppgave 3.6: Sanntidstest verifisert
Backend-verifisering av sanntidsflyt (STDB CRUD) bestått:
- Node opprettelse, oppdatering, sletting via STDB HTTP API
- Edge opprettelse med kaskadesletting
- Data synkronisert korrekt mellom PG og STDB

Frontend klar for browser-test (to faner):
- Arkitekturen støtter sanntid: STDB WebSocket → onInsert → stores → $derived
- Lagt til console.log i stores for å spore sanntidshendelser
- Alle builds (svelte-check, vite build, cargo check) grønne

Testskript: scripts/test-sanntid.sh (8 backend-tester)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 14:40:18 +01:00
a7f3036e6f Bruk --dangerously-skip-permissions for autonom kjøring
claude --print alene stoppet på manglende write-permission.
Tilbakestiller oppgave 1.1 for ny kjøring.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 11:51:05 +01:00
bf2d833410 Legg til run-tasks.sh: sekvensiell runner til ferdig/blokkert
Kjører oppgaver i loop med pause mellom. Stopper når alt er gjort,
blokkert, eller trenger avklaring fra Vegard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 11:46:15 +01:00
bd5e94acf6 Oppgavelås [~] for parallelle agenter, fjern eksempler som forstyrret grep
tasks.md: Ny status [~] (pågår) med timestamp. Fjernet code-fence
eksempler som ble fanget av grep som ekte oppgaver.

run-next-task.sh: Markerer oppgave som [~] før start, tilbakestiller
ved krasj. --unstale frigjør oppgaver >60 min. Sjekker at forrige
oppgave i fasen er ferdig. Pull-instruksjon i prompt. Subagent-bruk
oppfordres der det er egnet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 11:39:38 +01:00
43fc267089 Legg til task-liste og autonom runner for implementering
tasks.md: 51 oppgaver i 12 faser med avhengighetskart og
statusmarkører ([?] for åpne spørsmål, [!] for blokkert).

run-next-task.sh: plukker neste tilgjengelige oppgave, hopper
over blokkerte faser og deres avhengigheter, starter fersk
Claude Code-sesjon med full kontekst-prompt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 11:35:22 +01:00
c1d3ad66a5 Fjern gjenværende v2-referanser, dokumenter editor og tekstlagring
Rydder opp siste «v2»-referanser i docs (status_quo, migration_safety,
personlig_workspace, spacetimedb_integrasjon). Legger til editor-seksjon
i universell_input.md (TipTap, presets, tekstlagring) og oppdaterer
nodes.md med content/metadata.document-modellen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:55:39 +01:00
00bf5d27ce Arkitekturbeslutninger: noder er sentrum, edges definerer alt
Grunnleggende arkitekturbeslutninger tatt og dokumentert:

- Alt er noder (brukere, team, innhold, mediefiler, samlings-noder)
- Edges definerer hva en node er (freeform typer, metadata i JSONB)
- Materialisert tilgangsmatrise (node_access) erstatter workspace-RLS
- Visibility (hidden/discoverable/readable/open) på noder
- Aliaser via usynlige system-edges
- Maskinrommet eier all skriving (SpacetimeDB først, PG asynk)
- SpacetimeDB holder hele grafen, PG er persistent backup
- Node- og edge-skjema spesifisert (docs/primitiver/)

Fjernet workspace-konseptet fra hele dokumentasjonen (~40 filer).
Fem retninger besluttet, én åpen (rom, ikke forum).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:29:54 +01:00
0a467066ba Synops v2: arkitektur, retninger og dokumentasjon
Nystart basert på arkitektonisk innsikt fra Sidelinja v1.
Koden er ny, visjon og primitiver er validert gjennom tidligere arbeid.

Inneholder:
- Komplett arkitekturdokumentasjon (docs/arkitektur.md)
- 6 vedtatte retninger (docs/retninger/)
- Alle concepts, features, proposals og erfaringer fra v1
- Server-oppsett og drift (docs/setup/)
- LiteLLM-konfigurasjon (API-nøkler via env)
- Editor.svelte referanse fra v1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 06:43:08 +01:00