From aafb121bf27d80b6f24b18107b8076438f798493 Mon Sep 17 00:00:00 2001 From: vegard Date: Mon, 16 Mar 2026 05:19:23 +0100 Subject: [PATCH] Skill server-admin fra workspace-admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- migrations/0008_ai_prompts.sql | 40 ++++ web/src/lib/components/Sidebar.svelte | 46 ++-- .../lib/components/WorkspaceSwitcher.svelte | 32 ++- web/src/routes/+layout.server.ts | 9 + web/src/routes/+layout.svelte | 13 +- web/src/routes/admin/+layout.server.ts | 21 ++ web/src/routes/admin/+page.svelte | 52 +++++ .../api/channels/[id]/config/+server.ts | 31 ++- web/src/routes/server-admin/+layout.server.ts | 19 ++ web/src/routes/server-admin/+page.svelte | 52 +++++ .../ai/+page.server.ts | 13 +- .../{admin => server-admin}/ai/+page.svelte | 161 +++++++++++++- .../channels/+page.server.ts | 12 +- .../channels/+page.svelte | 208 +++++++++++------- 14 files changed, 594 insertions(+), 115 deletions(-) create mode 100644 migrations/0008_ai_prompts.sql create mode 100644 web/src/routes/admin/+layout.server.ts create mode 100644 web/src/routes/admin/+page.svelte create mode 100644 web/src/routes/server-admin/+layout.server.ts create mode 100644 web/src/routes/server-admin/+page.svelte rename web/src/routes/{admin => server-admin}/ai/+page.server.ts (76%) rename web/src/routes/{admin => server-admin}/ai/+page.svelte (77%) rename web/src/routes/{admin => server-admin}/channels/+page.server.ts (57%) rename web/src/routes/{admin => server-admin}/channels/+page.svelte (58%) diff --git a/migrations/0008_ai_prompts.sql b/migrations/0008_ai_prompts.sql new file mode 100644 index 0000000..d356e37 --- /dev/null +++ b/migrations/0008_ai_prompts.sql @@ -0,0 +1,40 @@ +-- AI Prompts: redigerbare system-prompts for AI-tekstbehandling +CREATE TABLE ai_prompts ( + action TEXT PRIMARY KEY, + system_prompt TEXT NOT NULL, + description TEXT, + updated_at TIMESTAMPTZ NOT NULL DEFAULT now() +); + +-- Seed med nåværende hardkodede prompts +INSERT INTO ai_prompts (action, system_prompt, description) VALUES + ('fix_text', 'Fiks denne teksten. Output på norsk. +- Returner KUN den fiksede teksten — ingen innledning, kommentar eller meta-tekst +- Fiks skrivefeil og grammatikk +- Start med en kort oppsummering av det viktigste (2–3 setninger) +- Fjern metainformasjon, navigasjon, annonser og annen støy fra innlimt webinnhold +- Dersom det er tydelig hva kilden er, oppgi den etter innledende oppsummering +- Behold saklig innhold og fakta intakt +- Bruk markdown-formatering der det gir bedre lesbarhet', 'Fikser skrivefeil, fjerner støy, oppsummerer'), + + ('extract_facts', 'Analyser denne teksten og trekk ut fakta. Output på norsk. +- Returner KUN faktalisten — ingen innledning, kommentar eller meta-tekst +- Identifiser konkrete påstander, tall, sitater og fakta +- List dem opp som punktliste +- For hver fakta: noter hvilken person eller organisasjon den gjelder (bruk #Navn-format) +- Ignorer meninger og spekulasjoner — kun verifiserbare påstander +- Behold kildehenvisninger der de finnes', 'Trekker ut fakta som punktliste'), + + ('rewrite', 'Skriv om denne teksten til artikkelformat. Output på norsk. +- Returner KUN artikkelen — ingen innledning, kommentar eller meta-tekst +- Lag en tittel som fanger essensen +- Skriv en ingress på 2–3 setninger +- Strukturer resten med mellomtitler der det er naturlig +- Hold deg til fakta fra originalteksten — ikke legg til informasjon +- Bruk markdown-formatering', 'Skriver om til artikkelformat'), + + ('translate', 'Oversett denne teksten til norsk. +- Returner KUN oversettelsen — ingen innledning, kommentar eller meta-tekst +- Behold formatering og struktur +- Oversett fagtermer korrekt, behold engelske termer i parentes der det er vanlig +- Behold egennavn uoversatt', 'Oversetter til norsk'); diff --git a/web/src/lib/components/Sidebar.svelte b/web/src/lib/components/Sidebar.svelte index c7dade7..e47e7cd 100644 --- a/web/src/lib/components/Sidebar.svelte +++ b/web/src/lib/components/Sidebar.svelte @@ -2,18 +2,23 @@ import type { Workspace } from '$lib/server/db'; import type { PageConfig } from '$lib/types/pages'; import WorkspaceSwitcher from './WorkspaceSwitcher.svelte'; + import { page } from '$app/state'; let { open = $bindable(false), user, workspace, workspaces, + isServerAdmin = false, + isWorkspaceAdmin = false, authProvider }: { open: boolean; user: { id: string; name: string; email: string; image?: string }; workspace: Workspace | null; workspaces: Workspace[]; + isServerAdmin?: boolean; + isWorkspaceAdmin?: boolean; authProvider: string; } = $props(); @@ -81,6 +86,9 @@ ((workspace?.settings as Record)?.pages as PageConfig[]) ?? [] ); + let isOnAdmin = $derived(page.url.pathname.startsWith('/admin')); + let isOnServerAdmin = $derived(page.url.pathname.startsWith('/server-admin')); + // Beregn transform basert på state let sidebarTransform = $derived.by(() => { if (swiping) { @@ -130,22 +138,34 @@ - +