'use client'; import { useEffect, useState } from 'react'; import { AdminShell } from '@/components/AdminShell'; import { getPolicies, togglePolicy, replaySignal, PolicyInfo } from '@/lib/api'; const VALID_SUBJECTS = ['signals.tip.served', 'signals.tip.feedback', 'signals.task.synced']; export default function OpsPage() { const [policies, setPolicies] = useState([]); const [replaySubject, setReplaySubject] = useState(VALID_SUBJECTS[0]); const [replayPayload, setReplayPayload] = useState('{\n "userId": "",\n "tipId": ""\n}'); const [msg, setMsg] = useState(''); const [error, setError] = useState(''); useEffect(() => { getPolicies().then((r) => setPolicies(r.policies)).catch(() => {}); }, []); const handleToggle = async (name: string, active: boolean) => { try { await togglePolicy(name, active); setPolicies((prev) => prev.map((p) => p.name === name ? { ...p, active } : p)); setMsg(`Policy "${name}" ${active ? 'enabled' : 'disabled'}.`); } catch (e: any) { setError(e.message); } }; const handleReplay = async () => { let payload: Record; try { payload = JSON.parse(replayPayload); } catch { setError('Invalid JSON payload'); return; } try { await replaySignal(replaySubject, payload); setMsg(`Signal replayed: ${replaySubject}`); setError(''); } catch (e: any) { setError(e.message); } }; return (

Ops actions

{msg &&

{msg}

} {error &&

{error}

} {/* Policy toggles */}

Policies

{policies.length === 0 ? (

No shadow policies registered. Shadow policies can be added to the recommender source.

) : (
{policies.map((p) => (
{p.name}
))}
)}
{/* Replay signal */}

Replay signal

Re-emit a past event on the in-process bus. Useful for backfill and testing.