/** * WorkspaceGeneralSettings -- Per-user workspace settings (e.g. max agent rounds). * * The user can override the instance default. Setting a field to null reverts to the default. */ import React, { useState, useEffect, useCallback } from 'react'; import { useApiRequest } from '../../../hooks/useApi'; import styles from './WorkspaceGeneralSettings.module.css'; interface GeneralSettingsProps { instanceId: string; } interface MaxAgentRoundsInfo { effective: number; userOverride: number | null; instanceDefault: number; } export const WorkspaceGeneralSettings: React.FC = ({ instanceId }) => { const { request } = useApiRequest(); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const [maxRoundsInfo, setMaxRoundsInfo] = useState({ effective: 25, userOverride: null, instanceDefault: 25, }); const [inputValue, setInputValue] = useState(''); const _loadSettings = useCallback(async () => { if (!instanceId) return; setLoading(true); try { const data = await request({ url: `/api/workspace/${instanceId}/settings/general`, method: 'get', }); const info = (data as any)?.maxAgentRounds; if (info) { setMaxRoundsInfo(info); setInputValue(info.userOverride != null ? String(info.userOverride) : ''); } } catch (err: any) { setError(err?.message || 'Fehler beim Laden der Einstellungen'); } finally { setLoading(false); } }, [instanceId, request]); useEffect(() => { _loadSettings(); }, [_loadSettings]); const _handleSave = async () => { setSaving(true); setError(null); setSuccess(null); try { const val = inputValue.trim() === '' ? null : parseInt(inputValue, 10); if (val !== null && (isNaN(val) || val < 1 || val > 100)) { setError('Wert muss zwischen 1 und 100 liegen.'); setSaving(false); return; } const data = await request({ url: `/api/workspace/${instanceId}/settings/general`, method: 'put', data: { maxAgentRounds: val }, }); const info = (data as any)?.maxAgentRounds; if (info) { setMaxRoundsInfo(info); setInputValue(info.userOverride != null ? String(info.userOverride) : ''); } setSuccess('Einstellungen gespeichert.'); setTimeout(() => setSuccess(null), 3000); } catch (err: any) { setError(err?.message || 'Fehler beim Speichern'); } finally { setSaving(false); } }; const _handleReset = () => { setInputValue(''); }; if (loading) { return
Lade Einstellungen...
; } const hasOverride = inputValue.trim() !== ''; return (

Generelle Einstellungen

{error &&
{error}
} {success &&
{success}
}

Agenten-Konfiguration

setInputValue(e.target.value)} placeholder={String(maxRoundsInfo.instanceDefault)} min={1} max={100} /> {hasOverride && ( )}
Standard der Instanz: {maxRoundsInfo.instanceDefault}. {maxRoundsInfo.userOverride != null && ( <> Ihr Override: {maxRoundsInfo.userOverride}. )} {' '}Effektiv: {maxRoundsInfo.effective}.
); };