"use client"; import { useState } from "react"; import { Pulse, Gauge, Coins, WarningCircle, Calculator, ChartLine, Eye, } from "@phosphor-icons/react"; import type { StepMath } from "@/lib/agent/diagnostics"; import { DocumentPreviewModal, type PreviewDoc } from "@/components/DocumentPreviewModal"; function asRecord(v: unknown): Record | null { return v && typeof v === "object" && !Array.isArray(v) ? (v as Record) : null; } function asString(v: unknown): string { return typeof v === "string" ? v : ""; } function asNumber(v: unknown): number | null { return typeof v === "number" && Number.isFinite(v) ? v : null; } const COMPONENT_PRIORITY = [ "voi_reward", "information_value", "cost_penalty", "failure_penalty", "potential_delta", "milestone_bonus", "reward_machine_bonus", ]; function sortComponentEntries(entries: [string, number][]): [string, number][] { const rank = (k: string) => { const i = COMPONENT_PRIORITY.indexOf(k); return i === -1 ? 999 : i; }; return [...entries].sort((a, b) => rank(a[0]) - rank(b[0]) || a[0].localeCompare(b[0])); } export function EnvironmentPanel({ observation, cumulativeReward, stepReward, stepMath, isRunning, }: { observation: Record | null; cumulativeReward: number; stepReward: number | null; stepMath: StepMath | null; isRunning: boolean; }) { if (!observation) { return (

Environment

Start a run to stream live state from LedgerShield.

); } const caseId = asString(observation.case_id); const taskType = asString(observation.task_type); const instruction = asString(observation.instruction); const step = asNumber(observation.step_count) ?? 0; const maxSteps = asNumber(observation.max_steps) ?? 0; const budgetRem = asNumber(observation.budget_remaining); const budgetTot = asNumber(observation.budget_total); const readiness = asNumber(observation.decision_readiness); const meta = asRecord(observation.case_metadata); const trackMode = meta ? asString(meta.track_mode) : ""; const risk = asRecord(observation.risk_snapshot); const signals = Array.isArray(risk?.observed_risk_signals) ? (risk!.observed_risk_signals as unknown[]) : []; const rankings = observation.tool_rankings; const inv = asRecord(observation.investigation_status); const docs = Array.isArray(observation.visible_documents) ? observation.visible_documents : []; const lastTool = asRecord(observation.last_tool_result); const lastToolName = lastTool ? asString(lastTool.tool_name) : ""; const sprt = asRecord(observation.sprt_state); const posteriors = sprt?.posterior_probabilities; const posteriorEntries = posteriors && typeof posteriors === "object" ? Object.entries(posteriors as Record).filter( ([, v]) => typeof v === "number", ) : []; const sprtRecommend = sprt ? asString(sprt.recommended_decision) : ""; const sprtStop = sprt ? Boolean(sprt.optimal_stopping_reached) : false; const rmState = asRecord(observation.reward_machine); const rmProgress = rmState ? asNumber(rmState.progress_fraction) : null; const rmStateId = rmState ? asNumber(rmState.state_id) : null; const [previewDoc, setPreviewDoc] = useState(null); const rankingEntries = rankings && typeof rankings === "object" && !Array.isArray(rankings) ? Object.entries(rankings as Record).filter( ([, v]) => typeof v === "number", ) : []; return (
Environment
{trackMode && ( {trackMode} )}

Case

{caseId || "—"}

{taskType}

{instruction && (

{instruction}

)}
Step

{step} / {maxSteps}

Budget

{budgetRem != null && budgetTot != null ? `${budgetRem.toFixed(2)} / ${budgetTot.toFixed(2)}` : "—"}

Live reward (env)

Σ {cumulativeReward.toFixed(3)} {stepReward != null && ( last Δ {stepReward >= 0 ? "+" : ""} {stepReward.toFixed(3)} )}
{(stepMath?.reward_model || stepMath?.rl_plane) && (
VoI & step math
{stepMath.reward_model && ( <>
Reward model value {stepMath.reward_model.value.toFixed(4)} {stepMath.reward_model.terminal ? ( · terminal ) : null}
{sortComponentEntries( Object.entries(stepMath.reward_model.components), ).length > 0 && (
{sortComponentEntries( Object.entries(stepMath.reward_model.components), ).map(([k, v]) => (
{k} {v.toFixed(4)}
))}
)} {Object.keys(stepMath.reward_model.metadata).length > 0 && (
{Object.entries(stepMath.reward_model.metadata).map( ([k, v]) => ( {k}: {String(v)} ), )}
)} )} {stepMath.rl_plane && stepMath.rl_plane.state_dim > 0 && (
RL state vector

dim {stepMath.rl_plane.state_dim} {stepMath.rl_plane.best_tool_voi != null && ( best_tool_voi (vec):{" "} {stepMath.rl_plane.best_tool_voi.toFixed(4)} )}

{(stepMath.rl_plane.watchdog != null || stepMath.rl_plane.calibration != null) && (
{stepMath.rl_plane.watchdog != null && ( watchdog:{" "} {stepMath.rl_plane.watchdog.toFixed(4)} )} {stepMath.rl_plane.calibration != null && ( calibration:{" "} {stepMath.rl_plane.calibration.toFixed(4)} )}
)} {stepMath.rl_plane.preview.length > 0 && (

head: [{stepMath.rl_plane.preview.map((x) => x.toFixed(3)).join(", ")}]

)}
)}
)} {posteriorEntries.length > 0 && (

SPRT posteriors

{posteriorEntries.map(([k, v]) => (
{k} {((v as number) * 100).toFixed(1)}%
))}
{(sprtRecommend || sprtStop) && (

{sprtRecommend && <>rec: {sprtRecommend} · } {sprtStop ? "stop reached" : "stop open"}

)}
)} {(rmProgress != null || rmStateId != null) && (

Reward machine

{rmProgress != null && (
)}

progress {(rmProgress != null ? rmProgress * 100 : 0).toFixed(1)}% {rmStateId != null && ( · state {rmStateId} )}

)} {readiness != null && (

Decision readiness

{(readiness * 100).toFixed(1)}%

)}

Risk signals ({signals.length})

{signals.length === 0 ? (

None observed yet

) : (
    {signals.slice(0, 12).map((s, i) => (
  • {String(s)}
  • ))}
)}
{rankingEntries.length > 0 ? (

Tool rankings (instrumented)

{rankingEntries .sort((a, b) => Number(b[1]) - Number(a[1])) .slice(0, 8) .map(([k, v]) => (
{k} {Number(v).toFixed(3)}
))}
) : ( trackMode === "blind" && (

Tool rankings / SPRT are hidden in blind benchmark mode.

) )} {inv && Object.keys(inv).length > 0 && (

Investigation

              {JSON.stringify(inv, null, 2)}
            
)}

Visible documents ({docs.length})

    {docs.slice(0, 8).map((d, i) => { const doc = asRecord(d) || {}; const row = doc as PreviewDoc; return (
  • ); })}
{lastToolName && (
Last tool:{" "} {lastToolName}
)}
setPreviewDoc(null)} doc={previewDoc} caseId={caseId || undefined} instruction={instruction || undefined} lastToolResult={ lastTool && typeof lastTool === "object" ? (lastTool as Record) : undefined } />
); }