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>
- 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>
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>
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>
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>
- 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>
- 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>
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>
- 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>
- 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>
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>
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>
- 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>
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>
- 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>
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>
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>
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>
- 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>
- Migrering 0004: notes-tabell (nodes i kunnskapsgrafen)
- REST API: GET/PATCH notat
- PG-adapter med 500ms debounce og 10s polling
- NotesBlock: tittel + fritekst med auto-lagring og status
- Seed: notater for begge workspaces, kalenderside med 2-1 layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Migrering 0003: calendars + calendar_events (nodes i kunnskapsgrafen)
- REST API: GET kalender med tidsvindu, POST/PATCH/DELETE hendelser
- PG polling-adapter med adapter-factory
- CalendarBlock: månedsrutenett, heldags vs. tidshendelser, fargevelger
- Seed: kalender for begge workspaces, kalenderside i sidekonfig
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Både workspace-switch og direkte navigering til rot-URL
lander nå på første konfigurerte side i stedet for tom oversikt.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Authentik sin OIDC sub-claim er en SHA256-hash, ikke PostgreSQL UUID.
@auth/sveltekit sin interne user.id er en annen UUID som ikke matcher.
Løsning: lagre profile.sub som authentik_sub i JWT-tokenet og bruk
den som session.user.id.
Ny erfaringsfil: docs/erfaringer/authentik_oidc.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SvelteKit (web/):
- Komplett app-skjelett med Authentik SSO (dev-bypass lokalt)
- Workspace-modell med cookie-basert switching og RLS-kontekst
- Komponerbare sider (PageGrid + BlockShell + block registry)
- Chat med adapter-mønster: PG-polling og SpacetimeDB hybrid-adapter
- Brukeridentitet fra Authentik/dev-login flyter til chat-meldinger
- API-ruter for channels, messages og health
SpacetimeDB (spacetimedb/):
- Rust WASM-modul med ChatMessage og SyncOutbox-tabeller
- send_message reducer med sync outbox for fremtidig PG-persistering
- Genererte TypeScript-bindings for klient-integrasjon
Infra:
- SpacetimeDB lagt til i docker-compose.dev.yml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>