import React, { useState, useEffect } from 'react'; import { useApp } from '../context/AppContext'; import { config } from '../config'; const DynamicScenarioInjector = ({ scenario }) => { const { globalMaxSteps, setGlobalMaxSteps } = useApp(); const [mode, setMode] = useState('simple'); // 'simple' or 'structured' // Auto-update injector fields when scenario prop changes useEffect(() => { if (scenario && scenario.id) { setSimpleText(`name: ${scenario.id}\ncontext: ${scenario.context || ''}\nsymptoms: ${scenario.description || ''}\nobjective: Identify the root cause and propose a verified fix.`); setJsonInput(JSON.stringify({ task: "custom-incident", custom_scenario: scenario }, null, 2)); } }, [scenario]); const [simpleText, setSimpleText] = useState(`name: Database Latency Issue context: The API connects to a cloud database cluster. symptoms: Users report 5s delays on GET /users. objective: Identify if a missing index or connection pool exhaustion is the cause.`); const [jsonInput, setJsonInput] = useState(`{ "task": "software-incident", "custom_scenario": { "id": "custom-scenario-1", "description": "Slow API response times.", "context": "Cloud DB cluster.", "difficulty": "medium", "clue_map": { "check_service_status:database": "CPU is high." } } }`); const [submitting, setSubmitting] = useState(false); const [feedback, setFeedback] = useState(""); const handleFileUpload = (e) => { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = (e) => { try { const parsed = JSON.parse(e.target.result); setMode('structured'); if (!parsed.custom_scenario) { setJsonInput(JSON.stringify({ task: parsed.task || "software-incident", custom_scenario: parsed }, null, 2)); } else { setJsonInput(JSON.stringify(parsed, null, 2)); } } catch (err) { setFeedback("Invalid JSON file uploaded."); } }; reader.readAsText(file); }; const submitScenario = async () => { setSubmitting(true); setFeedback(""); try { let payload; if (mode === 'simple') { payload = { task: "custom-incident", custom_scenario: { id: `id_${Date.now()}`, description: simpleText, context: "Manually injected scenario description.", difficulty: "medium", clue_map: {} }, max_steps: globalMaxSteps }; } else { payload = JSON.parse(jsonInput); payload.max_steps = globalMaxSteps; } const res = await fetch(`${config.API_BASE}/reset`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); if (res.ok) { setFeedback("Scenario injected successfully."); } else { setFeedback(`Error: ${res.statusText}`); } } catch (e) { setFeedback(`Error: ${e.message}`); } setSubmitting(false); }; return (
data_object

Scenario Configurator

{mode === 'simple' ? (