'use client' import { useState, useEffect } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Switch } from '@/components/ui/switch' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Button } from '@/components/ui/button' import { useToast } from '@/components/ui/use-toast' import { Loader2, Sparkles } from 'lucide-react' export function AgentAutoCommitSettings() { const { toast } = useToast() const [enabled, setEnabled] = useState(false) const [maxAmount, setMaxAmount] = useState('') const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) useEffect(() => { let cancelled = false fetch('/api/settings') .then((r) => r.json()) .then((body) => { if (cancelled) return const data = body?.data ?? {} setEnabled(Boolean(data.agent_auto_commit_enabled)) setMaxAmount( data.agent_auto_commit_max_amount != null ? String(data.agent_auto_commit_max_amount) : '' ) setLoading(false) }) .catch(() => { if (!cancelled) setLoading(false) }) return () => { cancelled = true } }, []) async function save() { setSaving(true) const parsedMax = maxAmount.trim() === '' ? null : Number(maxAmount) if (parsedMax !== null && (Number.isNaN(parsedMax) || parsedMax < 0)) { toast({ title: 'Ogiltigt belopp', description: 'Ange ett positivt tal eller lämna fältet tomt.', variant: 'destructive' }) setSaving(false) return } const res = await fetch('/api/settings', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agent_auto_commit_enabled: enabled, agent_auto_commit_max_amount: parsedMax, }), }) setSaving(false) if (!res.ok) { const body = await res.json().catch(() => ({})) toast({ title: 'Kunde inte spara', description: body?.error ?? 'Försök igen.', variant: 'destructive', }) return } toast({ title: 'Sparat', description: 'Inställningar för auto-godkännande uppdaterade.' }) } return ( Auto-godkännande för agenter När detta är aktivt får betrodda agenter (API-nycklar och Claude Desktop via OAuth) köra åtgärder med låg risk utan din godkännande. Hög-risk-åtgärder (periodlåsning, bokslut, fakturautskick m.m.) kräver alltid manuell granskning oavsett inställning. {loading ? (
Laddar…
) : ( <>

Endast åtgärder klassificerade som låg risk (t.ex. skapa kund) körs automatiskt. Hög-risk är alltid stoppad och hamnar i kön för granskning.

setMaxAmount(e.target.value)} disabled={!enabled} />

Lämna tomt för ingen gräns. Åtgärder över beloppet faller tillbaka till manuell granskning.

)}
) }