cf-claw 3.0.5 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="sv"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/baff0f221c10680b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-616e068a201ad621.js"/><script src="/_next/static/chunks/fd9d1056-9583fa19bc194043.js" async=""></script><script src="/_next/static/chunks/117-c657912d4a6fa056.js" async=""></script><script src="/_next/static/chunks/main-app-89f5ec28b3bb0e7f.js" async=""></script><script src="/_next/static/chunks/343-71498a8257bc1e81.js" async=""></script><script src="/_next/static/chunks/app/manual/page-3c401ecf89979cd7.js" async=""></script><title>CF Claw Dashboard</title><meta name="description" content="CF Claw AgentOS Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#030712] text-slate-300 antialiased"><div class="min-h-screen bg-[#030712]"><div class="mx-auto max-w-4xl px-6 py-8"><header class="mb-8"><a class="mb-6 inline-flex items-center gap-2 rounded-lg border border-slate-700/50 bg-slate-800/40 px-4 py-2 text-sm font-medium text-slate-400 transition-colors hover:border-cyan-500/30 hover:bg-cyan-500/10 hover:text-cyan-400" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left h-4 w-4"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg>Tillbaka till Dashboard</a><div class="mt-6 flex items-center gap-4"><div class="flex h-12 w-12 items-center justify-center rounded-xl bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap h-6 w-6 text-cyan-400" style="filter:drop-shadow(0 0 6px rgba(34,211,238,0.6))"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div><div><h1 class="text-2xl font-bold text-slate-100">CF Claw Dashboard — Manual</h1><p class="text-sm text-slate-500">AgentOS Dashboard v1.0</p></div></div></header><div class="mb-8 rounded-xl border border-cyan-500/20 bg-cyan-500/5 p-5"><h3 class="mb-2 text-sm font-semibold text-cyan-400">Om CF Claw Dashboard</h3><p class="text-sm leading-relaxed text-slate-300">CF Claw Dashboard är webbgränssnittet för din AI-agentplattform. Här kan du hantera projekt, schemalägga uppgifter, chatta med agenter, övervaka minne och kunskaper, samt följa systemets prestanda i realtid. All kommunikation sker via ett autentiserat WebSocket-anslutning mot backend.</p></div><div class="space-y-6"><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wifi h-4 w-4 text-cyan-400"><path d="M12 20h.01"></path><path d="M2 8.82a15 15 0 0 1 20 0"></path><path d="M5 12.859a10 10 0 0 1 14 0"></path><path d="M8.5 16.429a5 5 0 0 1 7 0"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Anslutning &amp; Autentisering</h2></div><p class="mb-3 text-sm text-slate-400">Dashboarden ansluter automatiskt till backend-servern via WebSocket. Statusen visas i headern på varje sida:</p><div class="space-y-2 text-sm text-slate-400"><div class="flex items-center gap-2"><div class="h-2 w-2 rounded-full bg-emerald-400"></div><span class="text-emerald-400">Connected</span> — API och WebSocket är uppkopplat</div><div class="flex items-center gap-2"><div class="h-2 w-2 rounded-full bg-red-400"></div><span class="text-red-400">Disconnected</span> — Ingen kontakt med backend</div><div class="flex items-center gap-2"><div class="h-2 w-2 animate-pulse rounded-full bg-amber-400"></div><span class="text-amber-400">Connecting...</span> — Försöker ansluta</div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Om du ser &quot;Disconnected&quot;, kontrollera att backend-servern körs och att<code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">NEXT_PUBLIC_API_BASE</code>är korrekt inställd i din <code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">.env.local</code>.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield h-4 w-4 text-cyan-400"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Autentisering</h2></div><p class="mb-3 text-sm text-slate-400">Om miljövariabeln<code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">NEXT_PUBLIC_AUTH_TOKEN</code>är satt skickas en Bearer-token med alla API-anrop och WebSocket-autentisering. Utan token körs dashboarden i öppet läge (endast för utveckling).</p></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4 text-cyan-400"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Platform Overview</h2></div><p class="mb-3 text-sm text-slate-400">Översiktssidan visar systemets hälsostatus och nyckeltal vid en blink.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Statistikkort</span><p class="mt-0.5 text-sm text-slate-400">Visar antal aktiva projekt, cron-jobb, inlärda färdigheter och registrerade agenter.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">System Status</span><p class="mt-0.5 text-sm text-slate-400">Aktiv AI-modell, upptid, WebSocket-status och om schemaläggaren är igång.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Sidan uppdateras automatiskt när du öppnar den. Statistikkortens data hämtas från flera API:er parallellt.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-factory h-4 w-4 text-cyan-400"><path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"></path><path d="M17 18h1"></path><path d="M12 18h1"></path><path d="M7 18h1"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Project Factory</h2></div><p class="mb-3 text-sm text-slate-400">Hantera projekt med Kanban-stil uppdelning. Skapa projekt, lägg till uppgifter och flytta dem mellan kolumner.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Projektlistning</span><p class="mt-0.5 text-sm text-slate-400">Välj bland projekt med framstegsindikatorer, team-avatars och status.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kanban-tavla</span><p class="mt-0.5 text-sm text-slate-400">Fyra kolumner: Backlog, Working, Review och Done. Hovra över en uppgift för att flytta den.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa projekt</span><p class="mt-0.5 text-sm text-slate-400">Klicka &quot;Nytt Projekt&quot; och ange titel, beskrivning och team.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Uppgifter flyttas optimistic — gränssnittet uppdateras direkt och rullas tillbaka om API-anropet misslyckas.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar h-4 w-4 text-cyan-400"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Cron Scheduler</h2></div><p class="mb-3 text-sm text-slate-400">Schemalägga återkommande uppgifter med cron-uttryck som skickar prompts till din AI-agent.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Global start/stopp</span><p class="mt-0.5 text-sm text-slate-400">Starta eller stoppa hela schemaläggaren med en knapp.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa cron-jobb</span><p class="mt-0.5 text-sm text-slate-400">Ange namn, cron-uttryck (t.ex. 0 9 * * *) och prompt som ska köras.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Aktivera/inaktivera</span><p class="mt-0.5 text-sm text-slate-400">Pausa enskilda jobb utan att ta bort dem.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Nästa körning</span><p class="mt-0.5 text-sm text-slate-400">Se när varje jobb körs nästa gång.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Cron-uttryck följer standardformat: minut timme dag-månad månad veckodag. Exempel: <code class="rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">0 */2 * * *</code> kör varannan timme.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4 text-cyan-400"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Agent Chat</h2></div><p class="mb-3 text-sm text-slate-400">Chatta direkt med din AI-agent i realtid med strömmande svar och Markdown-rendering.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Strömmande svar</span><p class="mt-0.5 text-sm text-slate-400">Svaren visas tecken för tecken via WebSocket i realtid.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Modellbyte</span><p class="mt-0.5 text-sm text-slate-400">Välj aktiv AI-modell från en dropdown i chatten. Modeller grupperas per leverantör.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Markdown</span><p class="mt-0.5 text-sm text-slate-400">Assistentens svar renderas med full Markdown-stöd inklusive kodblock.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Stop generation</span><p class="mt-0.5 text-sm text-slate-400">Avbryt en pågående generering med stopp-knappen.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-resize</span><p class="mt-0.5 text-sm text-slate-400">Textrutan växer automatiskt. Skicka med Enter, ny rad med Shift+Enter.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-graduation-cap h-4 w-4 text-cyan-400"><path d="M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z"></path><path d="M22 10v6"></path><path d="M6 12.5V16a6 3 0 0 0 12 0v-3.5"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Skills &amp; Learning</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra bland agentens inlärda färdigheter och inbyggda core-skills.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Learned Skills</span><p class="mt-0.5 text-sm text-slate-400">Färdigheter som agenten skapat och sparat. Klicka för att expandera och se innehållet.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Core Skills</span><p class="mt-0.5 text-sm text-slate-400">Inbyggda färdigheter från systemet som inte kan redigeras.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain-circuit h-4 w-4 text-cyan-400"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M9 13a4.5 4.5 0 0 0 3-4"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M12 13h4"></path><path d="M12 18h6a2 2 0 0 1 2 2v1"></path><path d="M12 8h8"></path><path d="M16 8V5a2 2 0 0 1 2-2"></path><circle cx="16" cy="13" r=".5"></circle><circle cx="18" cy="3" r=".5"></circle><circle cx="20" cy="21" r=".5"></circle><circle cx="20" cy="8" r=".5"></circle></svg></div><h2 class="text-lg font-semibold text-slate-100">Memory &amp; Graph</h2></div><p class="mb-3 text-sm text-slate-400">Inspektera agentens beständiga minne — automatiska sammanfattningar, extraherade fakta och entitetsgraf.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-Summaries</span><p class="mt-0.5 text-sm text-slate-400">Automatiskt genererade sammanfattningar av konversationer.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Extracted Facts</span><p class="mt-0.5 text-sm text-slate-400">Fakta som agenten extraherat och kategoriserat.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Entity Graph</span><p class="mt-0.5 text-sm text-slate-400">Visualisering av relationer mellan entiteter (subjekt — relation — objekt).</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-merge h-4 w-4 text-cyan-400"><circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M6 21V9a9 9 0 0 0 9 9"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Mesh &amp; Swarms</h2></div><p class="mb-3 text-sm text-slate-400">Starta multi-agent arbetsflöden. Mesh delar upp ett mål, Swarm fördelar uppgifter till ett team.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Mesh</span><p class="mt-0.5 text-sm text-slate-400">Ange ett mål — agenten dekomponerar det och distribuerar till flera agenter.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Swarm</span><p class="mt-0.5 text-sm text-slate-400">Ange en uppgift och välj team (default, research, engineering, analysis).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Live-output</span><p class="mt-0.5 text-sm text-slate-400">Följ arbetsflödets framsteg i realtid med statusindikatorer.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Krver aktiv WebSocket-anslutning. Om du ser en varning, kontrollera anslutningen i headern.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4 text-cyan-400"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Agent Registry</h2></div><p class="mb-3 text-sm text-slate-400">Se alla registrerade AI-agenter grupperade per team.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Team-gruppering</span><p class="mt-0.5 text-sm text-slate-400">Agenter visas i team som content, strategy, design, development, quality, operations och support.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Agentkort</span><p class="mt-0.5 text-sm text-slate-400">Varje agent visar namn, roll, tillgängliga verktyg och taggar.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Aktiv agent</span><p class="mt-0.5 text-sm text-slate-400">Den aktiva agenten markeras med en pulserande cyan-prick.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder h-4 w-4 text-cyan-400"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Document Store</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra och hantera dokument med kategorifiltrering.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kategorifilter</span><p class="mt-0.5 text-sm text-slate-400">Filtrera på: all, general, projects, research, notes, html.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Dokumentlista</span><p class="mt-0.5 text-sm text-slate-400">Visar filtyp, titel, storlek och datum. HTML-filer får en &quot;Canvas Ready&quot;-badge.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Åtgärder</span><p class="mt-0.5 text-sm text-slate-400">Rendera (HTML), redigera eller radera dokument vid hover.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal h-4 w-4 text-cyan-400"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg></div><h2 class="text-lg font-semibold text-slate-100">System Logs</h2></div><p class="mb-3 text-sm text-slate-400">Realtidsloggvisning med terminalkänsla. Se allt som händer i systemet.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Realtidsuppdateringar</span><p class="mt-0.5 text-sm text-slate-400">Nya loggar strömmar via WebSocket (max 500 rader buffras).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Färgkodade källor</span><p class="mt-0.5 text-sm text-slate-400">Agent Nudge (lila), Memory (cyan), Factory (indigo), Scheduler (amber), Core (grå).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-scroll</span><p class="mt-0.5 text-sm text-slate-400">Loggen scrollar automatiskt till botten vid nya inlägg.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign h-4 w-4 text-cyan-400"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Usage &amp; Cost</h2></div><p class="mb-3 text-sm text-slate-400">Övervaka LLM API-användning, kostnader och prestandamätetal.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">24h-statistik</span><p class="mt-0.5 text-sm text-slate-400">Totalt anrop, tokens, kostnad och genomsnittlig latens.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kostnad per modell</span><p class="mt-0.5 text-sm text-slate-400">Tabell med anrop, tokens och kostnad uppdelat per AI-modell.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Senaste anrop</span><p class="mt-0.5 text-sm text-slate-400">De 10 senaste API-anropen med detaljer om modell, tokens och källa.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bell h-4 w-4 text-cyan-400"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Webhooks</h2></div><p class="mb-3 text-sm text-slate-400">Skapa webhook-endpoints som triggare AI-prompts vid externa händelser.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa webhook</span><p class="mt-0.5 text-sm text-slate-400">Ange namn, path, hemlighet (valfritt) och prompt-mall.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kopiera URL</span><p class="mt-0.5 text-sm text-slate-400">Kopiera webhook-URL:en till urklipp med ett klick.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Hantera</span><p class="mt-0.5 text-sm text-slate-400">Aktivera, inaktivera eller radera webhooks.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers h-4 w-4 text-cyan-400"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Sessions</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra bland isolerade sub-agent konversationssessioner.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Sessionlista</span><p class="mt-0.5 text-sm text-slate-400">Vänsterpanelen visar alla sessioner med ID och tidsstämpel.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Meddelandevy</span><p class="mt-0.5 text-sm text-slate-400">Välj en session för att se dess konversation i chat-layout.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Rollmarkering</span><p class="mt-0.5 text-sm text-slate-400">Meddelanden färgkodas per roll — user (cyan), assistant/system (mörk).</p></div></div></section></div><footer class="mt-12 border-t border-slate-800/60 pt-6 pb-12 text-center"><p class="text-xs text-slate-600">CF Claw AgentOS Dashboard — Manual v1.0</p><a class="mt-3 inline-flex items-center gap-2 text-sm text-cyan-400 transition-colors hover:text-cyan-300" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left h-4 w-4"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg>Tillbaka till Dashboard</a></footer></div></div><script src="/_next/static/chunks/webpack-616e068a201ad621.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/baff0f221c10680b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[9107,[],\"ClientPageRoot\"]\n5:I[8423,[\"343\",\"static/chunks/343-71498a8257bc1e81.js\",\"789\",\"static/chunks/app/manual/page-3c401ecf89979cd7.js\"],\"default\",1]\n6:I[4707,[],\"\"]\n7:I[6423,[],\"\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"BW_n-kPyIVZ9Egb_9vzH3\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"manual\",\"\"],\"initialTree\":[\"\",{\"children\":[\"manual\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"manual\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"manual\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/baff0f221c10680b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"sv\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#030712] text-slate-300 antialiased\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"CF Claw Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"CF Claw AgentOS Dashboard\"}]]\n3:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="sv"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/31ad9bb81d82a2d6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-616e068a201ad621.js"/><script src="/_next/static/chunks/fd9d1056-9583fa19bc194043.js" async=""></script><script src="/_next/static/chunks/117-c657912d4a6fa056.js" async=""></script><script src="/_next/static/chunks/main-app-89f5ec28b3bb0e7f.js" async=""></script><script src="/_next/static/chunks/343-71498a8257bc1e81.js" async=""></script><script src="/_next/static/chunks/app/manual/page-3c401ecf89979cd7.js" async=""></script><title>CF Claw Dashboard</title><meta name="description" content="CF Claw AgentOS Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-[#030712] text-slate-300 antialiased"><div class="min-h-screen bg-[#030712]"><div class="mx-auto max-w-4xl px-6 py-8"><header class="mb-8"><a class="mb-6 inline-flex items-center gap-2 rounded-lg border border-slate-700/50 bg-slate-800/40 px-4 py-2 text-sm font-medium text-slate-400 transition-colors hover:border-cyan-500/30 hover:bg-cyan-500/10 hover:text-cyan-400" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left h-4 w-4"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg>Tillbaka till Dashboard</a><div class="mt-6 flex items-center gap-4"><div class="flex h-12 w-12 items-center justify-center rounded-xl bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap h-6 w-6 text-cyan-400" style="filter:drop-shadow(0 0 6px rgba(34,211,238,0.6))"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div><div><h1 class="text-2xl font-bold text-slate-100">CF Claw Dashboard — Manual</h1><p class="text-sm text-slate-500">AgentOS Dashboard v1.0</p></div></div></header><div class="mb-8 rounded-xl border border-cyan-500/20 bg-cyan-500/5 p-5"><h3 class="mb-2 text-sm font-semibold text-cyan-400">Om CF Claw Dashboard</h3><p class="text-sm leading-relaxed text-slate-300">CF Claw Dashboard är webbgränssnittet för din AI-agentplattform. Här kan du hantera projekt, schemalägga uppgifter, chatta med agenter, övervaka minne och kunskaper, samt följa systemets prestanda i realtid. All kommunikation sker via ett autentiserat WebSocket-anslutning mot backend.</p></div><div class="space-y-6"><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wifi h-4 w-4 text-cyan-400"><path d="M12 20h.01"></path><path d="M2 8.82a15 15 0 0 1 20 0"></path><path d="M5 12.859a10 10 0 0 1 14 0"></path><path d="M8.5 16.429a5 5 0 0 1 7 0"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Anslutning &amp; Autentisering</h2></div><p class="mb-3 text-sm text-slate-400">Dashboarden ansluter automatiskt till backend-servern via WebSocket. Statusen visas i headern på varje sida:</p><div class="space-y-2 text-sm text-slate-400"><div class="flex items-center gap-2"><div class="h-2 w-2 rounded-full bg-emerald-400"></div><span class="text-emerald-400">Connected</span> — API och WebSocket är uppkopplat</div><div class="flex items-center gap-2"><div class="h-2 w-2 rounded-full bg-red-400"></div><span class="text-red-400">Disconnected</span> — Ingen kontakt med backend</div><div class="flex items-center gap-2"><div class="h-2 w-2 animate-pulse rounded-full bg-amber-400"></div><span class="text-amber-400">Connecting...</span> — Försöker ansluta</div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Om du ser &quot;Disconnected&quot;, kontrollera att backend-servern körs och att<code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">NEXT_PUBLIC_API_BASE</code>är korrekt inställd i din <code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">.env.local</code>.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield h-4 w-4 text-cyan-400"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Autentisering</h2></div><p class="mb-3 text-sm text-slate-400">Om miljövariabeln<code class="mx-1 rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">NEXT_PUBLIC_AUTH_TOKEN</code>är satt skickas en Bearer-token med alla API-anrop och WebSocket-autentisering. Utan token körs dashboarden i öppet läge (endast för utveckling).</p></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity h-4 w-4 text-cyan-400"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Platform Overview</h2></div><p class="mb-3 text-sm text-slate-400">Översiktssidan visar systemets hälsostatus och nyckeltal vid en blink.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Statistikkort</span><p class="mt-0.5 text-sm text-slate-400">Visar antal aktiva projekt, cron-jobb, inlärda färdigheter och registrerade agenter.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">System Status</span><p class="mt-0.5 text-sm text-slate-400">Aktiv AI-modell, upptid, WebSocket-status och om schemaläggaren är igång.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Sidan uppdateras automatiskt när du öppnar den. Statistikkortens data hämtas från flera API:er parallellt.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-factory h-4 w-4 text-cyan-400"><path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"></path><path d="M17 18h1"></path><path d="M12 18h1"></path><path d="M7 18h1"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Project Factory</h2></div><p class="mb-3 text-sm text-slate-400">Hantera projekt med Kanban-stil uppdelning. Skapa projekt, lägg till uppgifter och flytta dem mellan kolumner.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Projektlistning</span><p class="mt-0.5 text-sm text-slate-400">Välj bland projekt med framstegsindikatorer, team-avatars och status.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kanban-tavla</span><p class="mt-0.5 text-sm text-slate-400">Fyra kolumner: Backlog, Working, Review och Done. Hovra över en uppgift för att flytta den.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa projekt</span><p class="mt-0.5 text-sm text-slate-400">Klicka &quot;Nytt Projekt&quot; och ange titel, beskrivning och team.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Uppgifter flyttas optimistic — gränssnittet uppdateras direkt och rullas tillbaka om API-anropet misslyckas.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar h-4 w-4 text-cyan-400"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Cron Scheduler</h2></div><p class="mb-3 text-sm text-slate-400">Schemalägga återkommande uppgifter med cron-uttryck som skickar prompts till din AI-agent.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Global start/stopp</span><p class="mt-0.5 text-sm text-slate-400">Starta eller stoppa hela schemaläggaren med en knapp.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa cron-jobb</span><p class="mt-0.5 text-sm text-slate-400">Ange namn, cron-uttryck (t.ex. 0 9 * * *) och prompt som ska köras.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Aktivera/inaktivera</span><p class="mt-0.5 text-sm text-slate-400">Pausa enskilda jobb utan att ta bort dem.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Nästa körning</span><p class="mt-0.5 text-sm text-slate-400">Se när varje jobb körs nästa gång.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Cron-uttryck följer standardformat: minut timme dag-månad månad veckodag. Exempel: <code class="rounded bg-slate-800 px-1.5 py-0.5 text-xs text-cyan-300">0 */2 * * *</code> kör varannan timme.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4 text-cyan-400"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Agent Chat</h2></div><p class="mb-3 text-sm text-slate-400">Chatta direkt med din AI-agent i realtid med strömmande svar och Markdown-rendering.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Strömmande svar</span><p class="mt-0.5 text-sm text-slate-400">Svaren visas tecken för tecken via WebSocket i realtid.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Modellbyte</span><p class="mt-0.5 text-sm text-slate-400">Välj aktiv AI-modell från en dropdown i chatten. Modeller grupperas per leverantör.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Markdown</span><p class="mt-0.5 text-sm text-slate-400">Assistentens svar renderas med full Markdown-stöd inklusive kodblock.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Stop generation</span><p class="mt-0.5 text-sm text-slate-400">Avbryt en pågående generering med stopp-knappen.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-resize</span><p class="mt-0.5 text-sm text-slate-400">Textrutan växer automatiskt. Skicka med Enter, ny rad med Shift+Enter.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-graduation-cap h-4 w-4 text-cyan-400"><path d="M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z"></path><path d="M22 10v6"></path><path d="M6 12.5V16a6 3 0 0 0 12 0v-3.5"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Skills &amp; Learning</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra bland agentens inlärda färdigheter och inbyggda core-skills.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Learned Skills</span><p class="mt-0.5 text-sm text-slate-400">Färdigheter som agenten skapat och sparat. Klicka för att expandera och se innehållet.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Core Skills</span><p class="mt-0.5 text-sm text-slate-400">Inbyggda färdigheter från systemet som inte kan redigeras.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain-circuit h-4 w-4 text-cyan-400"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M9 13a4.5 4.5 0 0 0 3-4"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M12 13h4"></path><path d="M12 18h6a2 2 0 0 1 2 2v1"></path><path d="M12 8h8"></path><path d="M16 8V5a2 2 0 0 1 2-2"></path><circle cx="16" cy="13" r=".5"></circle><circle cx="18" cy="3" r=".5"></circle><circle cx="20" cy="21" r=".5"></circle><circle cx="20" cy="8" r=".5"></circle></svg></div><h2 class="text-lg font-semibold text-slate-100">Memory &amp; Graph</h2></div><p class="mb-3 text-sm text-slate-400">Inspektera agentens beständiga minne — automatiska sammanfattningar, extraherade fakta och entitetsgraf.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-Summaries</span><p class="mt-0.5 text-sm text-slate-400">Automatiskt genererade sammanfattningar av konversationer.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Extracted Facts</span><p class="mt-0.5 text-sm text-slate-400">Fakta som agenten extraherat och kategoriserat.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Entity Graph</span><p class="mt-0.5 text-sm text-slate-400">Visualisering av relationer mellan entiteter (subjekt — relation — objekt).</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-merge h-4 w-4 text-cyan-400"><circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M6 21V9a9 9 0 0 0 9 9"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Mesh &amp; Swarms</h2></div><p class="mb-3 text-sm text-slate-400">Starta multi-agent arbetsflöden. Mesh delar upp ett mål, Swarm fördelar uppgifter till ett team.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Mesh</span><p class="mt-0.5 text-sm text-slate-400">Ange ett mål — agenten dekomponerar det och distribuerar till flera agenter.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Swarm</span><p class="mt-0.5 text-sm text-slate-400">Ange en uppgift och välj team (default, research, engineering, analysis).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Live-output</span><p class="mt-0.5 text-sm text-slate-400">Följ arbetsflödets framsteg i realtid med statusindikatorer.</p></div></div><div class="mt-3 flex gap-2 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4 flex-shrink-0 text-amber-400"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg><p class="text-sm text-amber-200/80">Krver aktiv WebSocket-anslutning. Om du ser en varning, kontrollera anslutningen i headern.</p></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users h-4 w-4 text-cyan-400"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Agent Registry</h2></div><p class="mb-3 text-sm text-slate-400">Se alla registrerade AI-agenter grupperade per team.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Team-gruppering</span><p class="mt-0.5 text-sm text-slate-400">Agenter visas i team som content, strategy, design, development, quality, operations och support.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Agentkort</span><p class="mt-0.5 text-sm text-slate-400">Varje agent visar namn, roll, tillgängliga verktyg och taggar.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Aktiv agent</span><p class="mt-0.5 text-sm text-slate-400">Den aktiva agenten markeras med en pulserande cyan-prick.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder h-4 w-4 text-cyan-400"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Document Store</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra och hantera dokument med kategorifiltrering.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kategorifilter</span><p class="mt-0.5 text-sm text-slate-400">Filtrera på: all, general, projects, research, notes, html.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Dokumentlista</span><p class="mt-0.5 text-sm text-slate-400">Visar filtyp, titel, storlek och datum. HTML-filer får en &quot;Canvas Ready&quot;-badge.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Åtgärder</span><p class="mt-0.5 text-sm text-slate-400">Rendera (HTML), redigera eller radera dokument vid hover.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal h-4 w-4 text-cyan-400"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg></div><h2 class="text-lg font-semibold text-slate-100">System Logs</h2></div><p class="mb-3 text-sm text-slate-400">Realtidsloggvisning med terminalkänsla. Se allt som händer i systemet.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Realtidsuppdateringar</span><p class="mt-0.5 text-sm text-slate-400">Nya loggar strömmar via WebSocket (max 500 rader buffras).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Färgkodade källor</span><p class="mt-0.5 text-sm text-slate-400">Agent Nudge (lila), Memory (cyan), Factory (indigo), Scheduler (amber), Core (grå).</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Auto-scroll</span><p class="mt-0.5 text-sm text-slate-400">Loggen scrollar automatiskt till botten vid nya inlägg.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign h-4 w-4 text-cyan-400"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Usage &amp; Cost</h2></div><p class="mb-3 text-sm text-slate-400">Övervaka LLM API-användning, kostnader och prestandamätetal.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">24h-statistik</span><p class="mt-0.5 text-sm text-slate-400">Totalt anrop, tokens, kostnad och genomsnittlig latens.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kostnad per modell</span><p class="mt-0.5 text-sm text-slate-400">Tabell med anrop, tokens och kostnad uppdelat per AI-modell.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Senaste anrop</span><p class="mt-0.5 text-sm text-slate-400">De 10 senaste API-anropen med detaljer om modell, tokens och källa.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bell h-4 w-4 text-cyan-400"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Webhooks</h2></div><p class="mb-3 text-sm text-slate-400">Skapa webhook-endpoints som triggare AI-prompts vid externa händelser.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Skapa webhook</span><p class="mt-0.5 text-sm text-slate-400">Ange namn, path, hemlighet (valfritt) och prompt-mall.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Kopiera URL</span><p class="mt-0.5 text-sm text-slate-400">Kopiera webhook-URL:en till urklipp med ett klick.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Hantera</span><p class="mt-0.5 text-sm text-slate-400">Aktivera, inaktivera eller radera webhooks.</p></div></div></section><section class="rounded-xl border border-slate-800/60 bg-[#0b1120] p-6"><div class="mb-4 flex items-center gap-3"><div class="flex h-8 w-8 items-center justify-center rounded-lg bg-cyan-500/10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers h-4 w-4 text-cyan-400"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg></div><h2 class="text-lg font-semibold text-slate-100">Sessions</h2></div><p class="mb-3 text-sm text-slate-400">Bläddra bland isolerade sub-agent konversationssessioner.</p><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Sessionlista</span><p class="mt-0.5 text-sm text-slate-400">Vänsterpanelen visar alla sessioner med ID och tidsstämpel.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Meddelandevy</span><p class="mt-0.5 text-sm text-slate-400">Välj en session för att se dess konversation i chat-layout.</p></div></div><div class="flex gap-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right mt-0.5 h-4 w-4 flex-shrink-0 text-cyan-500"><path d="m9 18 6-6-6-6"></path></svg><div><span class="text-sm font-medium text-slate-200">Rollmarkering</span><p class="mt-0.5 text-sm text-slate-400">Meddelanden färgkodas per roll — user (cyan), assistant/system (mörk).</p></div></div></section></div><footer class="mt-12 border-t border-slate-800/60 pt-6 pb-12 text-center"><p class="text-xs text-slate-600">CF Claw AgentOS Dashboard — Manual v1.0</p><a class="mt-3 inline-flex items-center gap-2 text-sm text-cyan-400 transition-colors hover:text-cyan-300" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left h-4 w-4"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg>Tillbaka till Dashboard</a></footer></div></div><script src="/_next/static/chunks/webpack-616e068a201ad621.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/31ad9bb81d82a2d6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[9107,[],\"ClientPageRoot\"]\n5:I[8423,[\"343\",\"static/chunks/343-71498a8257bc1e81.js\",\"789\",\"static/chunks/app/manual/page-3c401ecf89979cd7.js\"],\"default\",1]\n6:I[4707,[],\"\"]\n7:I[6423,[],\"\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"uAvc69-aHCeo27Mru1M6B\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"manual\",\"\"],\"initialTree\":[\"\",{\"children\":[\"manual\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"manual\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"manual\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/31ad9bb81d82a2d6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"sv\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[#030712] text-slate-300 antialiased\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"CF Claw Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"CF Claw AgentOS Dashboard\"}]]\n3:null\n"])</script></body></html>
@@ -2,6 +2,6 @@
2
2
  3:I[8423,["343","static/chunks/343-71498a8257bc1e81.js","789","static/chunks/app/manual/page-3c401ecf89979cd7.js"],"default",1]
3
3
  4:I[4707,[],""]
4
4
  5:I[6423,[],""]
5
- 0:["BW_n-kPyIVZ9Egb_9vzH3",[[["",{"children":["manual",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["manual",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","manual","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/baff0f221c10680b.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"sv","children":["$","body",null,{"className":"bg-[#030712] text-slate-300 antialiased","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
5
+ 0:["uAvc69-aHCeo27Mru1M6B",[[["",{"children":["manual",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["manual",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","manual","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/31ad9bb81d82a2d6.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"sv","children":["$","body",null,{"className":"bg-[#030712] text-slate-300 antialiased","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
6
6
  6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"CF Claw Dashboard"}],["$","meta","3",{"name":"description","content":"CF Claw AgentOS Dashboard"}]]
7
7
  1:null
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AA+HA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,oBAAoB,CAAC;AACzG,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAGvF,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAaxC,CAAC;AAEF,QAAA,MAAM,WAAW,UAIhB,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,kBAAkB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AA0PD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBjE;AAiGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,CAQvF;AAED,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAInE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAEhE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKtD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CA8EnI;AAED,wBAAgB,mBAAmB,IAAI,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAMhH;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,kBAA8B,GAAG,oBAAoB,CAqDnH;AAmuBD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAwDnH;AAyED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AA8pBD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiEjD;AAyCD,wBAAgB,YAAY,IAAI,IAAI,CAenC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAMlC"}
package/dist/factory.js CHANGED
@@ -9,6 +9,7 @@ import { getAgent, listAgents } from "./agents.js";
9
9
  import { sendToTelegram } from "./bot.js";
10
10
  import { config } from "./config.js";
11
11
  import { getDataDir, getProjectsDir } from "./paths.js";
12
+ import { docList } from "./documents.js";
12
13
  const DATA_DIR = getDataDir();
13
14
  const PROJECTS_DIR = getProjectsDir();
14
15
  const DB_PATH = path.join(DATA_DIR, "cf-claw.db");
@@ -200,7 +201,23 @@ function matchesArtifact(pattern, relPath) {
200
201
  }
201
202
  return toPathRegex(normalizedPattern).test(normalizedPath);
202
203
  }
203
- function validateWorkspaceAgainstContract(workspacePath, contract) {
204
+ function checkDocumentStoreForArtifact(pattern) {
205
+ const docs = docList();
206
+ const normalizedPattern = pattern.replace(/\\/g, "/").trim().toLowerCase();
207
+ for (const doc of docs) {
208
+ const filenameLower = doc.filename.toLowerCase();
209
+ const titleLower = doc.title.toLowerCase();
210
+ const matchesFilename = matchesArtifact(normalizedPattern, filenameLower) ||
211
+ filenameLower.includes(normalizedPattern.replace(/\*/g, ""));
212
+ const matchesTitle = matchesArtifact(normalizedPattern, titleLower) ||
213
+ titleLower.includes(normalizedPattern.replace(/\*/g, ""));
214
+ if (matchesFilename || matchesTitle) {
215
+ return true;
216
+ }
217
+ }
218
+ return false;
219
+ }
220
+ function validateWorkspaceAgainstContract(workspacePath, contract, projectTitle) {
204
221
  if (!workspacePath || !contract) {
205
222
  return { ok: true, violations: [] };
206
223
  }
@@ -211,10 +228,14 @@ function validateWorkspaceAgainstContract(workspacePath, contract) {
211
228
  const files = collectFiles(workspaceAbs, 1200).map((f) => path.relative(workspaceAbs, f).replace(/\\/g, "/"));
212
229
  const violations = [];
213
230
  for (const required of contract.requiredArtifacts) {
214
- const found = files.some((f) => matchesArtifact(required, f));
215
- if (!found) {
216
- violations.push(`Missing required artifact pattern: ${required}`);
231
+ const foundInFs = files.some((f) => matchesArtifact(required, f));
232
+ if (foundInFs)
233
+ continue;
234
+ if (checkDocumentStoreForArtifact(required)) {
235
+ console.log(`🏭 Artifact ${required} found in document store (not filesystem, but acceptable)`);
236
+ continue;
217
237
  }
238
+ violations.push(`Missing required artifact pattern: ${required}`);
218
239
  }
219
240
  for (const forbidden of contract.forbiddenArtifacts) {
220
241
  const matches = files.filter((f) => matchesArtifact(forbidden, f));
@@ -597,7 +618,7 @@ function scopeToolInput(toolName, rawArgs, workspacePath) {
597
618
  return rawArgs;
598
619
  const workspaceAbs = absoluteWorkspacePath(workspacePath);
599
620
  const scoped = { ...rawArgs };
600
- const pathTools = new Set(["file_read", "file_write", "file_create", "file_delete", "file_list", "file_search"]);
621
+ const pathTools = new Set(["file_read", "file_write", "file_create", "file_delete", "file_list", "file_search", "doc_save"]);
601
622
  if (pathTools.has(toolName)) {
602
623
  const rawPath = typeof scoped.path === "string" ? scoped.path : ".";
603
624
  const normalizedInput = normalizeAgentRelativePath(rawPath, workspacePath);
@@ -741,6 +762,8 @@ Return ONLY a JSON object with:
741
762
  }`;
742
763
  const Stoffe_DECOMPOSE_PROMPT = `You are Stoffe, Systems Architect. Given Fredrix's product spec, break it into concrete technical tasks for the development team.
743
764
 
765
+ IMPORTANT: You MUST save the architecture blueprint to a file called \`ARCHITECTURE.md\` in the project workspace using the file_create tool. The architecture must be written to disk, not just returned as text.
766
+
744
767
  Available agents:
745
768
  {agents}
746
769
 
@@ -844,6 +867,7 @@ function normalizeStageId(input) {
844
867
  security: "security-audit",
845
868
  "final review": "final-review",
846
869
  review: "code-review",
870
+ architecture: "blueprint",
847
871
  };
848
872
  return aliasMap[normalized] || normalized;
849
873
  }
@@ -1441,7 +1465,11 @@ async function executeTask(task, allTasks) {
1441
1465
  const agentDef = agentChoice.forceFallbackModel && chosenAgent.fallbackModel
1442
1466
  ? { ...chosenAgent, model: chosenAgent.fallbackModel, fallbackModel: undefined }
1443
1467
  : chosenAgent;
1444
- const needsCodeOutput = /\b(implement|build|scaffold|frontend|backend|api|ui|dom|component|code|create)\b/i.test(`${task.title} ${task.description}`) && !/\b(specification|diagram|flow|review|audit|document)\b/i.test(`${task.title} ${task.description}`);
1468
+ const stageId = normalizeStageId(typeof task.contextPayload?.stage_id === "string" ? task.contextPayload.stage_id : null);
1469
+ const stageRequiresCodeOutput = stageId === "blueprint" || stageId === "ui-ux-design" || stageId === "implementation" || stageId === "integration";
1470
+ const keywordRequiresCode = /\b(implement|build|scaffold|frontend|backend|api|ui|dom|component|code|create)\b/i.test(`${task.title} ${task.description}`);
1471
+ const keywordExcludesCode = /\b(specification|diagram|flow|review|audit|document)\b/i.test(`${task.title} ${task.description}`);
1472
+ const needsCodeOutput = (stageRequiresCodeOutput || keywordRequiresCode) && !keywordExcludesCode;
1445
1473
  const codeDeliveryGuard = needsCodeOutput
1446
1474
  ? "\n\n## Delivery requirement\nYou must produce real code changes in the project workspace using file_write and/or file_create. Descriptions without actual file operations are invalid."
1447
1475
  : "";
@@ -1477,7 +1505,7 @@ async function executeTask(task, allTasks) {
1477
1505
  }
1478
1506
  return;
1479
1507
  }
1480
- const contractValidation = validateWorkspaceAgainstContract(workspacePath, contract);
1508
+ const contractValidation = validateWorkspaceAgainstContract(workspacePath, contract, project?.title);
1481
1509
  if (!contractValidation.ok) {
1482
1510
  const newRetryCount = task.retryCount + 1;
1483
1511
  const problem = contractValidation.violations.join("\n");