'use client' import { useState } from 'react' import AnalystSelector from './AnalystSelector' import { useRunSubmit } from '../hooks/useRunSubmit' import { DEFAULT_FORM } from '../types' import type { NewRunFormState } from '../types' function SectionCard({ step, title, subtitle, children, }: { step: number title: string subtitle?: string children: React.ReactNode }) { return (
{/* Section header */}
{String(step).padStart(2, '0')}
{title}
{subtitle && (
{subtitle}
)}
{/* Section body */}
{children}
) } function FieldLabel({ children }: { children: React.ReactNode }) { return ( ) } export default function RunConfigForm() { const [form, setForm] = useState(DEFAULT_FORM) const { submit, loading, error } = useRunSubmit() const set = (k: keyof NewRunFormState, v: unknown) => setForm((f) => ({ ...f, [k]: v })) return (
{ e.preventDefault(); submit(form) }} className="space-y-3" > {/* Error */} {error && (
{error}
)} {/* ── Section 1: Target ─────────────────────────────────────── */}
Ticker Symbol set('ticker', e.target.value.toUpperCase())} required style={{ letterSpacing: '0.12em' }} />
Trade Date set('date', e.target.value)} required />
{/* ── Section 2: Model ──────────────────────────────────────── */}
LLM Provider
Deep Think LLM set('deep_think_llm', e.target.value)} />
Quick Think LLM set('quick_think_llm', e.target.value)} />
Debate Rounds set('max_debate_rounds', Number(e.target.value))} />
Risk Discussion Rounds set('max_risk_discuss_rounds', Number(e.target.value))} />
{/* ── Section 3: Analysts ───────────────────────────────────── */} set('enabled_analysts', v)} /> {/* ── Submit ────────────────────────────────────────────────── */}
2–5 min · varies by model
) }