"use client"; import { useState, useEffect, useRef } from "react"; import { Card, Toggle } from "@/shared/components"; import { useTranslations } from "next-intl"; export default function SystemPromptTab() { const [config, setConfig] = useState({ enabled: false, prefixPrompt: "", suffixPrompt: "" }); const [loading, setLoading] = useState(true); const [status, setStatus] = useState(""); const [debounceTimer, setDebounceTimer] = useState(null); const configRef = useRef(config); const t = useTranslations("settings"); useEffect(() => { fetch("/api/settings/system-prompt") .then((res) => res.json()) .then((data) => { setConfig({ enabled: data?.enabled ?? false, prefixPrompt: data?.prefixPrompt ?? "", suffixPrompt: data?.suffixPrompt ?? "", }); setLoading(false); }) .catch(() => setLoading(false)); }, []); const save = async (updates) => { const newConfig = { ...configRef.current, ...updates }; setConfig(newConfig); configRef.current = newConfig; setStatus(""); try { const res = await fetch("/api/settings/system-prompt", { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(newConfig), }); if (res.ok) { setStatus("saved"); setTimeout(() => setStatus(""), 2000); } } catch { setStatus("error"); } }; const handleFieldChange = (field, text) => { const updated = { ...configRef.current, [field]: text }; setConfig(updated); configRef.current = updated; if (debounceTimer) clearTimeout(debounceTimer); setDebounceTimer( setTimeout(() => { save({ [field]: text }); }, 800) ); }; return (

{t("globalSystemPrompt")}

{status === "saved" && ( check_circle{" "} {t("saved")} )} save({ enabled: !config.enabled })} disabled={loading} />
{config.enabled && (
{/* Before Prompt — injected BEFORE agent/provider instructions */}

{t("beforePromptDesc")}