Commit graph

70 commits

Author SHA1 Message Date
b0d0202eb8 AI-admin: fiks provider-swap ved å droppe UNIQUE-constraint på prioritet
- Fjernet UNIQUE(alias_id, priority) — prioritet er kun for sortering
- Forenklet swap-endpoint til to rene UPDATE-statements
- Renummerert kjapp-providers til sekvensielle prioriteter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 07:08:17 +01:00
7c81e80742 AI-admin: katalog add-form på egen rad slik at den ikke klippes
- «Legg til»-formen vises nå som egen rad under modellen med grønn kant
- Alias + nøkkel-dropdowns og bekreft-knapp har god plass
- Erstatter den sammenpressede inline-formen som ble klippet i smal kolonne

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 07:05:54 +01:00
2d17a632cd AI-admin: katalog lar deg velge nøkkel — direkte API eller OpenRouter
- Ny mapping fra OpenRouter-provider til LiteLLM direkte-prefiks
  (google→gemini/, anthropic→anthropic/, openai→openai/, x-ai→xai/)
- «Legg til»-knappen i katalogen viser nå to dropdowns: alias + nøkkel
- Velger du Google-nøkkel → gemini/modellnavn, OpenRouter → openrouter/google/modellnavn
- Inline picker respekterer også valgt nøkkel i provider-skjemaet

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 07:00:19 +01:00
8652f0969f AI-admin: opp/ned-knapper for å endre provider-prioritet per alias
- Nytt swap-endpoint (POST /api/admin/ai/providers/swap) for atomisk bytte
- Pil opp/ned ved hver provider-rad for å endre fallback-rekkefølge
- Prioritet avgjør hvilken modell LiteLLM prøver først per alias

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 06:55:55 +01:00
b082edc2bd AI-admin: full nøkkeladministrasjon fra grensesnittet
- Nøkkelverdier kan lagres i DB (key_value) og brukes direkte i config
- Ny nøkkel-seksjon: legg til, rediger, slett API-nøkler fra UI
- Config-generering bruker DB-verdi hvis satt, ellers env-referanse
- Dynamisk api_key_env-dropdown basert på registrerte nøkler
- Gemini omdøpt til Google, OpenAI lagt til
- Slett-beskyttelse: kan ikke fjerne nøkkel som er i bruk av providers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 06:49:59 +01:00
6c186ce9cc AI-admin: global av/på-styring av API-nøkler fra grensesnittet
- Ny tabell ai_api_keys med is_enabled per nøkkel (GEMINI, OPENROUTER, etc.)
- Nøkkel-pills i toppen er nå klikkbare toggles (grønn=på, grå=av, rød=mangler)
- Config-generering filtrerer ut providers med deaktivert nøkkel
- Provider-rader viser visuelt når nøkkelen er slått av (rød kant + dimmet)
- Gjeldende modell per alias respekterer nøkkel-status

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 06:43:33 +01:00
f98675a72e AI-admin: vis gjeldende modell per alias, migrer alt til OpenRouter
- Viser primærmodell (høyest prioritet, aktiv) under hvert alias-navn
- Migrerer alle gemini/-providers til openrouter/google/-ekvivalenter
- Endrer standard API-nøkkel i ny-provider-skjema til OPENROUTER_API_KEY

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 06:28:01 +01:00
35c76a7038 AI-admin: extra_params per provider (web-plugin, custom params)
- Ny kolonne extra_params JSONB på ai_model_providers (migrasjon 0009)
- Web-søk toggle-pill per provider — ett klikk for å slå på/av
- «...»-knapp åpner JSON-editor for vilkårlige extra_params
- Config-generering fletter extra_params inn i litellm_params
- POST/PATCH provider-endepunkter støtter extra_params

Eksempel: Grok med web-plugin genererer:
  plugins: [{"id":"web"}]
under litellm_params i config.yaml.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 06:11:54 +01:00
ad0d4f1f8a AI-admin: sorter aliaser alfabetisk, tokenforbruk synkende
Bruker $derived for å opprettholde sortering etter rename/oppdatering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:51:05 +01:00
21683bd660 AI-admin: alias-rename, dollarkostnad, fikset kolonnebredder
- PATCH /aliases/:id støtter nå rename (alias-felt)
- Alias-raden har «Rediger»-knapp → inline-redigering av navn + beskrivelse
- Tokenforbruk viser model_actual og estimert dollarkostnad per rad
- Dollarkostnad beregnes fra OpenRouter-katalogpriser (krever lastet katalog)
- Tokenforbruk-tabellen bruker auto-kolonnebredde (fikser overflow)
- «Kompl.» i stedet for «Completion» i header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:36:49 +01:00
177e4b6b66 AI-admin: «Generer + restart gateway»-knapp
Utvider generate-config endepunktet med ?restart=true som finner
og restarter ai-gateway docker-containeren etter config-generering.
Ny grønn knapp i UI gjør begge operasjoner i ett klikk.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:30:28 +01:00
b1a7e55fff AI-admin: modellkatalog fra OpenRouter med leverandør-akkordion
- Nytt endepunkt /api/admin/ai/models som proxyer OpenRouter med 1t cache
- Nytt endepunkt /api/admin/ai/keys for API-nøkkelstatus
- API-nøkkel-pills (GEMINI/OPENROUTER/ANTHROPIC/XAI) øverst på siden
- Browsbar modellkatalog gruppert per leverandør i trekkspill-format
- Globalt søkefelt, sortert synkende etter pris per leverandør
- "Legg til →" fra katalog velger alias og oppretter provider
- Katalog-picker i eksisterende add-provider-form

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:23:47 +01:00
aafb121bf2 Skill server-admin fra workspace-admin
Server-admin (/server-admin): systemvide innstillinger (AI, kanaler) — kun for owners.
Workspace-admin (/admin): workspace-spesifikke innstillinger (sider, entiteter) — for owner/admin i gjeldende workspace.

- Ny rute /server-admin med egen layout-gate (owner-rolle)
- Flytt AI og kanaler fra /admin til /server-admin
- Workspace-admin gate sjekker nå rolle i gjeldende workspace
- Sidebar: workspace-admin-lenker under separator, server-admin-nav i server-admin-modus
- WorkspaceSwitcher: "Admin (server)" kun for owners
- Kanaler: trekkspill gruppert etter workspace
- Config-API: owners kan endre kanaler på tvers av workspaces
- Migrasjon: ai_prompts-tabell

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:19:23 +01:00
3ac9691830 Refaktor: riktig dataflyt — SpacetimeDB er master for body-endring
Før: worker skrev body til både PG og SpacetimeDB (dobbelt-skriving),
og sync.rs skrev den samme endringen tilbake fra SpacetimeDB til PG.

Nå: worker skriver body-endring KUN til SpacetimeDB, sync.rs synker
til PG som vanlig. Worker skriver kun PG-only data direkte (metadata,
revisjoner, tokenforbruk).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:54:23 +01:00
b4e01feada Fix: hent metadata fra PG ved meldingsoppdatering i sanntid
Etter onUpdate fra SpacetimeDB hentes edited_at og metadata
(ai_processed, ai_action) fra PG, slik at revisjonshistorikk
og AI-badge vises korrekt også for sanntidsoppdateringer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:52:28 +01:00
80b7103cba Fix: SpacetimeDB HTTP API bruker snake_case, ikke camelCase
edit_message reducer forventer workspace_id og new_body,
ikke workspaceId og newBody. TypeScript SDK bruker camelCase,
men HTTP API-et bruker snake_case.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:51:13 +01:00
52b71e6440 UI: bruk play-symboler (◀ ▶) for revisjonspiler
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:46:10 +01:00
bc0da66d2a Fix: revisions-API brukte created_at men kolonnen heter edited_at
Ga 500 Internal Error når frontend forsøkte å laste revisjoner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:40:44 +01:00
0b52266e70 Fix: hent edited_at og metadata fra PG etter SpacetimeDB-load
SpacetimeDB har ikke edited_at eller metadata-felter, så «redigert»-
indikatoren dukket aldri opp. Etter initial subscription-load gjør
frontend nå et kall til /api/channels/:id/messages/metadata for å
hente redigeringsstatus og AI-metadata fra PG.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:35:50 +01:00
aeda5e7527 Generell revisjonshistorikk + markdown-rendering i meldinger
- Markdown rendres automatisk for all ikke-HTML body (detekterer <p>, <div> osv.)
- «redigert»-indikator med bla-navigasjon (← →) for alle redigerte meldinger
- Henter revisjoner fra PG via /api/messages/:id/revisions ved behov
- SpacetimeDB onUpdate setter edited_at slik at frontend vet meldingen er redigert
- AI-badge ( action) vises fortsatt for AI-behandlede meldinger

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:33:04 +01:00
d5882c8c45 Markdown-rendering og revisjons-toggle for AI-behandlede meldinger
- AI-resultat (markdown) rendres med marked-biblioteket
- «Vis original» / «Vis AI-resultat» toggle under AI-behandlede meldinger
- Nytt API: GET /api/messages/:id/revisions for å hente originaltekst
- Markdown-stiler: overskrifter, lister, blockquotes, kodeblokker

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:28:13 +01:00
ea3b3d5a38 Fix: worker oppdaterer SpacetimeDB etter AI-behandling
Frontend leser fra SpacetimeDB, men workeren skrev kun til PG.
Nå kalles edit_message-reduceren i SpacetimeDB etter vellykket
AI-behandling, slik at resultatet vises umiddelbart i chatten.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:22:18 +01:00
4b8da64fc5 Fix: worker sender Authorization-header til AI Gateway
Uten nøkkelen returnerte LiteLLM 401, og AI-jobber feilet etter 3 forsøk.
Ny CLI-param --ai-gateway-key (env: AI_GATEWAY_KEY). dev.sh leser
LITELLM_MASTER_KEY fra .env.local og eksporterer som AI_GATEWAY_KEY.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:17:21 +01:00
0a560bdf2d Fix: bruk sql.json() for JSONB payload i job_queue
JSON.stringify + ::jsonb via postgres-biblioteket lagret payload som
dobbelt-escaped string i stedet for JSONB-objekt. Workeren fant ikke
message_id i den resulterende strengen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:10:08 +01:00
832ea7117a AI-administrasjon: modellstyring, tokenregnskap, admin-panel
- Migrasjon 0007: ai_model_aliases, ai_model_providers, ai_job_routing, ai_usage_log
- Worker: token-logging fra AI Gateway-respons til ai_usage_log
- Config-generering: POST /api/admin/ai/generate-config bygger config.yaml fra PG
- Admin-panel /admin/ai: aliaser, leverandører, jobbruting, tokenforbruk
- CRUD API for aliaser, providers og routing
- Workspace-forbruk API: GET /api/ai/usage?days=30

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:03:12 +01:00
a72e3d88f3 dev.sh: re-login til SpacetimeDB ved --clean for å unngå 401
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:57:21 +01:00
38f26ef1d9 Fix: warmup brukte feil kolonnenavn (u.name → u.display_name, message_type::text cast)
Også fikset Windows line endings i dev.sh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:56:59 +01:00
af8f6f97c2 Docs: oppdater alle dokumenter til ny SpacetimeDB-cache-arkitektur
- synkronisering.md: ~5s → ~1s, trådbasert warmup med per-kanal config
- adapter_moenster.md: omskrevet — dokumenterer nåværende arkitektur + historiske anti-patterns
- chat.md: implementeringsstatus oppdatert til mars 2026
- spacetimedb_integrasjon.md: trådbasert warmup og admin-UI dokumentert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:48:15 +01:00
2ed50d51a9 Warmup: trådbasert henting — hele tråder lastes komplett
messages-modus: hent de N nyeste trådene (sortert etter siste
aktivitet), inkludert alle svar. Ingen orphan-replies.

days-modus: finn alle tråder med minst én melding innenfor
tidsvinduet, last hele tråden (også eldre trådstartere).

all-modus: uendret, henter alt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:33:55 +01:00
a6ca0f602d Fix: forenkle channels-query, fjern ugyldig factoids.title referanse
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:29:13 +01:00
0d8521855f Admin: per-kanal warmup-konfigurasjon
- channels.config får warmup_mode (all/messages/days/none) og warmup_value
- Migrasjon setter default til "all" for eksisterende kanaler
- Admin-side /admin/channels med oversikt og inline-redigering
- API PATCH /api/channels/:id/config for å oppdatere konfig
- Worker respekterer per-kanal konfig ved warmup
- Sidebar-lenke til kanaler-admin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:26:02 +01:00
8b58d434e9 SpacetimeDB som cache foran PG: arkitekturendring
PG er autoritativ, SpacetimeDB er varm cache. Frontend snakker
kun med SpacetimeDB, worker håndterer toveissynk.

Fase 1 — SpacetimeDB-modul:
- delete_message med SyncOutbox-event
- edit_message reducer
- MessageReaction tabell + add/remove_reaction reducers
- load_messages med JSON-parsing (erstatter pipe-format)
- clear_channel reducer for duplikat-fri warmup
- load_reactions reducer

Fase 2 — Worker:
- warmup.rs: PG→ST oppvarming ved oppstart (100 msg/kanal)
- sync.rs: håndter delete/update/reaction actions
- Sync-intervall redusert til 1s

Fase 3 — Frontend:
- spacetime.svelte.ts: ren SpacetimeDB-adapter, ingen PG-hybrid
- ChatConnection interface med edit/delete/react metoder
- ChatBlock bruker chat.edit/delete/react direkte
- PG-adapter som readonly fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:09:33 +01:00
63f928bbe6 Chat: svar-tråder, kanban-konvertering og kalender-konvertering
Legger til tre nye funksjoner fra chatmeldinger:
- Svar på meldinger med reply-kontekst (↩ forfatter: tekst)
- Konverter melding til kanban-kort via dialog
- Konverter melding til kalenderhendelse via dialog

Utvider messages API med reply_count, parent-info og
LEFT JOIN til kanban/kalender view-tabeller for badges.
Nye list-endepunkter for /api/kanban og /api/calendar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:43:24 +01:00
d5a4de55de Fix: fjern sort i SpacetimeDB-merge, behold PG-rekkefølge
PG-meldinger kommer sortert fra queryen. SpacetimeDB-meldinger
har upålitelige timestamps (fallback til now()), så sortering
blandet rekkefølgen. Legger nå SpacetimeDB-only meldinger etter
PG-meldinger uten re-sortering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 23:12:15 +01:00
b24f323083 Fix: bevar SpacetimeDB-meldinger ved refresh, stille feil ved 404
- loadFromPg() merger nå PG-data med eksisterende SpacetimeDB-meldinger
  i stedet for å overskrive (hindrer at chatten tømmes)
- onReaction/onTogglePin kaller bare refresh() ved OK-respons
- Fjernet debug-logging

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 23:08:21 +01:00
e4b0eb77ea Fix: erstatt LATERAL join med separat reaksjons-query
LATERAL subquery med parameteriserte verdier fungerte ikke med
postgres-biblioteket. Bruker nå en enklere to-stegs tilnærming:
hent meldinger først, deretter reaksjoner i én batch-query.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:50:15 +01:00
5bc992272d MessageBox: API-utvidelser, reaksjoner og pin-toggle
- GET messages returnerer alle felter + aggregerte reaksjoner via LATERAL join
- Nytt PATCH/DELETE endepunkt for enkeltmeldinger (/api/messages/[id])
- Nye reaksjons-endepunkter (POST/DELETE /api/messages/[id]/reactions)
- refresh() eksponert på ChatConnection (PG + SpacetimeDB)
- MessageBox UI: reaksjonspills med toggle + hurtig-emojis ved hover
- Pin-toggle i header med hover-synlighet
- ChatBlock wirer onReaction og onTogglePin callbacks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:42:41 +01:00
568c385cd0 Notes: typealignering til MessageData
NoteConnection eksponerer nå `message: MessageData | null` i tillegg til
`note: Note | null`, slik at notater deltar i den felles datamodellen.
Hjelpefunksjoner noteToMessage/messageToNote for konvertering.
NotesBlock uendret — bruker Editor direkte.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:24:35 +01:00
e3e3bbc24f MessageBox: universell meldingsboks-komponent for chat, kanban og kalender
Felles MessageData-type (matcher messages-tabellen) med 3 renderingsmodi:
- expanded (chat): forfatter, tid, HTML-body, mention-klikk, badges
- compact (kanban): tittel, trunkert preview, fargestripe
- calendar (pill): tidspunkt, tittel, bakgrunnsfarge

Alle blokker (ChatBlock, KanbanBlock, CalendarBlock) migrert til MessageBox.
PG-adaptere mapper API-respons til MessageData med view-spesifikke felter.
SpacetimeDB-adapter oppdatert for kompatibilitet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:15:36 +01:00
50e26e3c48 Entiteter: merge-verktøy, detaljside og AI-worker
Admin-side for merge av duplikate entiteter med edge-migrering.
Entitetsside med inline redigering, slett, relasjoner og mentions.
AI text process worker-handler (fix_text, extract_facts, rewrite,
translate) med API-endepunkt som oppretter jobbkø-oppgaver.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:45:45 +01:00
592ebdf1d6 Tiptap-editor og mentions→graf-edges
Ny Editor-komponent med Tiptap (bold, italic, code, mentions).
Chat og notater oppretter nå MENTIONS-edges i kunnskapsgrafen
automatisk ved lagring. SpacetimeDB-adapter skriver alltid via
PG API først for edge-atomisitet. RLS SET LOCAL fix i db.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:45:34 +01:00
74110e842c Dokumentasjon: oppdatert arkitektur, nye proposals og konsepter
Oppdatert basert på ekstern tilbakemelding. Nye proposals for
kildevern, podcasting 2.0, web clipper, waveforms, editor,
tekst-primitiv og avisvisning. Oppdatert meldingsboks med
slette-semantikk, entity resolution i kunnskapsgrafen, og
AI gateway med kildevern-modus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:45:24 +01:00
914598c402 Gitignore scripts/ — beholdes lokalt for convenience
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:53:11 +01:00
096ae781e5 Fjern scripts/ — lokal convenience, trenger ikke ligge i git
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:51:37 +01:00
82ee710b47 Flytt ARCHITECTURE.md til docs/, CLAUDE.md som eneste startdokument
- ARCHITECTURE.md → docs/arkitektur.md
- CLAUDE.md: ny arbeidsflyt-seksjon (commit/push fritt, deploy krever ok)
- CLAUDE.md: dokumentasjonstre med alle docs/-referanser
- Alle interne referanser oppdatert (6 filer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:50:49 +01:00
6edd1fa091 Frontend: entiteter, graf-visualisering og #-autocomplete
- EntitiesBlock: liste med søk/filter, opprett, rediger, slett,
  relasjonsvisning med navigering mellom entiteter
- GraphBlock: SVG force-directed layout via traverse API,
  pan/zoom, drag noder, dobbeltklikk for å utforske
- EntityAutocomplete: #-mention med debounced søk, tastaturnavigering,
  dropdown med typefarger og aliaser
- Registrert entities block-type + kunnskapsgraf-side i seed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:46:34 +01:00
3f8ef65c5f Jobbkø-worker: Rust-binær med polling, concurrency og retry
sidelinja-worker — tokio-basert orkestrator som poller job_queue:
- SELECT FOR UPDATE SKIP LOCKED for trygg concurrent polling
- Semaphore-styrt concurrency (--max-concurrent)
- Eksponentiell backoff: 30s × 2^(attempts-1)
- Handler-registry (HashMap<String, Box<dyn JobHandler>>)
- Strukturert JSON-logging via tracing
- Echo-handler for end-to-end testing
- CLI: --database-url, --ai-gateway-url, --max-concurrent, --poll-interval

Testet mot dev-database: echo-jobb fullført, ukjent type → retry → error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:40:32 +01:00
1d47119b1e Kunnskapsgraf CRUD API: entities, edges, søk og traversering
Syv nye API-endepunkter for kunnskapsgrafen:

Entities:
- GET/POST /api/entities — list, søk (name+aliases), filtrer på type
- GET/PATCH/DELETE /api/entities/:id — hent (m/edge_count), oppdater, slett
- GET /api/entities/:id/edges — relasjoner med retningsfilter

Graf:
- POST /api/graph/edges — opprett relasjon (upsert)
- DELETE /api/graph/edges/:id — slett relasjon
- GET /api/graph/search — fulltekstsøk (entiteter + transkripsjoner FTS)
- GET /api/graph/traverse/:nodeId — recursive CTE, D3.js/Vis.js-format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:37:00 +01:00
1faef972dd Meldingsboks-migrasjon: universell diskusjonsprimitiv + entities
Migrering 0005 samler kanban-kort, kalenderhendelser, faktoider og
notater til én felles messages-tabell med view-config-tabeller.
Actors og topics erstattes av unified entities-tabell.

- 0005_meldingsboks.sql: messages utvides med title/pinned/visibility,
  kanban_card_view + calendar_event_view + message_reactions opprettes,
  entities erstatter actors+topics, gamle tabeller droppes
- seed_dev.sql: oppdatert til meldingsboks-modell + 5 test-entiteter
  med graf-relasjoner
- API-ruter: kanban/kalender/notater bruker messages + view-config
- Dokumentasjon: meldingsboks feature-spec, oppdatert arkitektur,
  kunnskapsgraf, jobbkø, konseptdokumenter og proposals

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:32:15 +01:00
024a91e1b3 Dokumentasjon: arkitekturvurdering — sikkerhet, backup, kostnad, nye forslag
Oppdaterer dokumentasjon basert på tre eksterne arkitekturvurderinger:

- RLS Leak Hunter med CI-test og audit-trigger (migration_safety.md)
- pgvector-migrasjon flyttet til Lag 2, WAL-arkivering med pgBackRest (ARCHITECTURE.md, produksjon.md)
- Off-site backup med rclone, Docker cgroups for workers (ARCHITECTURE.md, produksjon.md)
- Kostnadskontroll i AI Gateway: workspace-budsjett, auto-fallback (ai_gateway.md)
- Gjeste-token sikkerhetsdybde: ClamAV, rate limiting, auto-revoke (den_asynkrone_gjesten.md)
- SpacetimeDB fase 1-vurdering: PG LISTEN/NOTIFY som mellomsteg (synkronisering.md)
- Kritiske events (Aha-markører) flushes umiddelbart (synkronisering.md)
- Ekstern helsesjekk, observability-utvidelser (ARCHITECTURE.md)
- Tre nye forslag: Contradiction Detector, Auto-Highlight Reel, Audience Voice Memo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 03:56:21 +01:00