1import{j as e}from"./index-CfHooNjQ.js";import{a as t}from"./react-vendor-QaboSCKR.js";import{R as s}from"./_RouteShell-CJHR8Ga1.js";import{P as i}from"./useWelcomeProgress-9E0RMv5J.js";import{H as n}from"./Hero-_H0rS6wZ.js";import{S as r}from"./SmallBtn-DitJjhhp.js";import{C as o}from"./CockpitPanel-CrSKjRfq.js";import{S as a}from"./StatusPill-Dj0XAg2D.js";import{F as l,a as d}from"./FormField-aB0771Lm.js";import{n as p}from"./Clock.es-BTLuFFN2.js";import{n as c}from"./Play.es-xUl_eWkF.js";import{m}from"./ListBullets.es-C_2eENPK.js";import{b as u}from"./routes-aN95rY8g.js";import{s as y}from"./XCircle.es-D1xmli1b.js";import{p as x}from"./ArrowsSplit.es-Dyl-Uyq_.js";import{query as f,orderBy as h,collection as g,doc as j}from"./firebase-firestore-9imLgH6W.js";import{db as k}from"./firestore-DsC8L1pI.js";import{u as I}from"./useTenantId-BAzpvh6v.js";import{o as S,s as v,r as b,e as T,a as F,n as w,b as C,l as z,f as P}from"./schemas-Blw_D14l.js";import{u as $,a as N}from"./useFirestoreSnapshot-DnG3vPBf.js";import{auth as A}from"./firebase-C59sj7zD.js";import{p as R}from"./toast-UW4uwVCl.js";import"./lenis-CYZ9w2j8.js";import"./framer-vv-CY5AZ.js";import"./gsap-CvrrfOyh.js";import"./PageHeader-RZbfuVkt.js";import"./firebase-app-NszzeGgl.js";import"./use-reduced-motion-CiAw0R6O.js";import"./livekit-UlB0541D.js";import"./nadia-CbP0KdC-.js";import"./priya-chat-Cooaxzza.js";import"./useAuth-CGdeD6Lm.js";import"./ops-v4-routes-D6xdeB8x.js";import"./index-COVke7E_.js";import"./x-BnI8hONJ.js";const E=v().regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:?\d{2})$/),_=S({checkpointId:v().min(1).max(128),runId:v().min(1).max(128),stepIndex:w().int().min(0),recordedAt:E,threadState:b(v(),T()),stateHash:v().min(8).max(128),pendingToolCall:S({toolName:v().min(1).max(128),input:T()}).nullable()}),H=S({sessionId:v().min(1).max(128),tenantId:v().min(3).max(36),runId:v().min(1).max(128),agentId:v().min(1).max(64),checkpoints:F(_).min(1).max(500),initialInput:b(v(),T()),recordedAt:E,outcomeEventId:v().min(1).max(128).optional()}),L=S({kind:z("replace_system_prompt"),nextPrompt:v().min(64).max(8e3),rationale:v().min(8).max(2e3)});P("kind",[S({kind:z("replace_initial_input"),path:v().min(1).max(256),nextValue:T()}),S({kind:z("replace_thread_state"),checkpointId:v().min(1).max(128),path:v().min(1).max(256),nextValue:T()}),S({kind:z("stub_tool_result"),checkpointId:v().min(1).max(128),toolName:v().min(1).max(128),stubResult:T()}),L]);const D=S({stepIndex:w().int().min(0),capturedToolName:v().optional(),replayedToolName:v().optional(),reason:v().min(1).max(1e3)}),O=S({sessionId:v().min(1).max(128),replayedAt:E,finalStateHash:v().min(8).max(128),stepCount:w().int().min(1),divergences:F(D),completedSuccessfully:C()}),q="IBM Plex Mono, monospace";function M({cp:t}){var s;return e.jsxs("tr",{"data-testid":`checkpoint-${t.checkpointId}`,style:{borderTop:`1px solid ${i.hairline2}`},children:[e.jsx("td",{style:{padding:"8px 10px",fontFamily:q,fontSize:11,color:i.ink2,width:64},children:t.stepIndex}),e.jsx("td",{style:{padding:"8px 10px",fontFamily:q,fontSize:11,color:i.ink1},children:(null==(s=t.pendingToolCall)?void 0:s.toolName)??"â"}),e.jsx("td",{style:{padding:"8px 10px",fontFamily:q,fontSize:10,color:i.ink2},children:t.stateHash.slice(0,12)}),e.jsx("td",{style:{padding:"8px 10px",fontFamily:q,fontSize:10,color:i.ink2},children:t.recordedAt})]})}function B(){var a;const{sessions:m,loading:u,error:y}=function(){const e=I(),s=t.useCallback(()=>k?f(g(k,`tenants/${e}/replaySessions`),h("recordedAt","desc")):null,[e]),i=t.useCallback((e,t)=>{const s=H.safeParse(t);return s.success?s.data:null},[]),{rows:n,ready:r,error:o}=$(s,i);return{sessions:n,loading:!r,error:o}}(),[x,j]=t.useState(""),[S,v]=t.useState("profile.name"),[b,T]=t.useState(""),[F,w]=t.useState(!1),[C,z]=t.useState(null),P=new URLSearchParams("undefined"!=typeof window?window.location.search:"").get("runId")??"",N=t.useMemo(()=>{var e;return P?(null==(e=m.find(e=>e.runId===P))?void 0:e.sessionId)??"":""},[m,P]),E=x||N||(null==(a=m[0])?void 0:a.sessionId)||"",_=t.useMemo(()=>m.find(e=>e.sessionId===E)??null,[m,E]),L=t.useCallback(async()=>
1{if(!_)return;if(!S.trim())return void R({level:"error",title:"Path is required",body:"Provide a dot.path into initialInput to replace."});w(!0);const e=[{kind:"replace_initial_input",path:S.trim(),nextValue:b}],t=await async function(e){var t,s;const i=await(null==(s=null==(t=A)?void 0:t.currentUser)?void 0:s.getIdToken())??null,n={"Content-Type":"application/json"};i&&(n.Authorization=`Bearer ${i}`);const r=await fetch("/.netlify/functions/replay-execute",{method:"POST",headers:n,body:JSON.stringify(e)}),o=await r.text().catch(()=>"");if(!r.ok)return{ok:!1,error:o.slice(0,200)||"unknown"};try{return{ok:!0,queueId:JSON.parse(o).queueId}}catch{return{ok:!0}}}({sessionId:_.sessionId,modifications:e});w(!1),t.ok?(z(`Queued replay of ${_.sessionId}${t.queueId?` as ${t.queueId}`:""} with ${S}="${b}"`),R({level:"success",title:"Replay queued"})):R({level:"error",title:"Replay queue failed",body:t.error??"unknown"})},[_,S,b]);return e.jsxs(s,{hideHeader:!0,routeId:"audit",titleOverride:"Replay sessions",subtitleOverri
1de:"Replay sessions · checkpoint timeline · modified-input replay",children:[e.jsx(n,{icon:p,mission:"ADMIN · REPLAY",title:"Replay sessions",sub:"Captured checkpoints · modify input · re-run from any step."}),u?e.jsx("p",{"data-testid":"replay-sessions-loading",style:{fontFamily:q,fontSize:11,color:i.ink3},children:"Loadingâ¦"}):null,y?e.jsx("p",{role:"alert","data-testid":"replay-sessions-error",style:{fontFamily:q,fontSize:11,color:i.red},children:y.message}):null,u||y||0!==m.length?null:e.jsx("p",{"data-testid":"replay-sessions-empty",style:{fontFamily:q,fontSize:11,color:i.ink3},children:"No replay sessions captured yet. Flagged runs will land here once the durable-thread writer ships them."}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"280px 1fr",gap:20},children:[e.jsxs("aside",{"data-testid":"replay-session-list",children:[e.jsx("div",{style:{fontFamily:q,fontSize:9,letterSpacing:"0.22em",color:i.ink3,textTransform:"uppercase",marginBottom:8},children:"⸠Captured sessions"}),m.map(t=>{const s=t.sessionId===E;return e.jsxs("button",{type:"button","data-testid":`replay-session-${t.sessionId}`,onClick:()=>j(t.sessionId),style:{display:"block",width:"100%",textAlign:"left",background:s?"color-mix(in srgb, var(--accent-yellow) 6%, transparent)":i.black1,border:`1px solid ${s?i.yellow:i.hairline2}`,borderLeft:`3px solid ${s?i.yellow:i.hairline2}`,padding:"10px 12px",marginBottom:6,cursor:"pointer",color:"inherit",transition:"background 180ms, border-color 180ms"},children:[e.jsx("div",{style:{fontFamily:"Cinzel, serif",fontWeight:600,fontSize:13,color:i.ink1},children:t.sessionId}),e.jsxs("div",{style:{fontFamily:q,fontSize:10,color:i.ink3,marginTop:2,letterSpacing:"0.08em"},children:[t.agentId," · run ",t.runId," · ",t.checkpoints.length," steps"]})]},t.sessionId)})]}),e.jsx("section",{"data-testid":"replay-session-detail",style:{display:"flex",flexDirection:"column",gap:14},children:_&&e.jsxs(e.Fragment,{children:[e.jsx(o,{label:"CHECKPOINTS",icon:p,children:e.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13,marginTop:8},children:[e.jsx("thead",{children:e.jsxs("tr",{style:{textAlign:"left",color:i.ink3,fontFamily:q,fontSize:9,letterSpacing:"0.22em",textTransform:"uppercase"},children:[e.jsx("th",{style:{padding:"8px 10px"},children:"Step"}),e.jsx("th",{style:{padding:"8px 10px"},children:"Pending tool"}),e.jsx("th",{style:{padding:"8px 10px"},children:"State hash"}),e.jsx("th",{style:{padding:"8px 10px"},children:"Recorded"})]})}),e.jsx("tbody",{children:_.checkpoints.map(t=>e.jsx(M,{cp:t},t.checkpointId))})]})}),e.jsxs(o,{label:"REPLAY WITH MODIFIED INPUT",icon:c,children:[e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr auto",gap:10,alignItems:"flex-end",marginTop:8},children:[e.jsx(l,{label:"MOD PATH",children:e.jsx(d,{"data-testid":"replay-mod-path",type:"text",value:S,onChange:e=>v(e.target.value),placeholder:"dot.path.into.input"})}),e.jsx(l,{label:"NEXT VALUE",children:e.jsx(d,{"data-testid":"replay-mod-value",type:"text",value:b,onChange:e=>T(e.target.value),placeholder:"next value"})}),e.jsx("div",{"data-testid":"replay-submit-wrap",children:e.jsx(r,{primary:!0,icon:c,disabled:F,onClick:()=>{L()},fullWidth:!1,children:F?"Queueingâ¦":"Replay"})})]}),C&&e.jsx("div",{"data-testid":"replay-queued-message",style:{marginTop:10,fontFamily:q,color:"#7be09a",fontSize:11},children:C})]}),e.jsx(U,{sessionId:_.sessionId})]})})]})]})}function U({sessionId:s}){const{result:n,loading:r,error:o}=function(e){const s=I(),i=t.useCallback(()=>k&&e?j(k,`tenants/${s}/replayResults/${e}`):null,[s,e]),n=t.useCallback((e,t)=>{const s=O.safeParse(t);return s.success?s.data:null},[]),{doc:r,ready:o,error:a}=N(i,n);return{result:r,loading:!o,error:a}}(s);return r?e.jsx("div",{"data-testid":"replay-result-loading",style:{fontFamily:q,fontSize:11,color:i.ink3},children:"Loading replay resultâ¦"}):o?e.jsx("div",{role:"alert","data-testid":"replay-result-error",style:{fontFamily:q,fontSize:11,color:i.red},children:o.message}):n?e.jsx(V,{result:n}):e.jsx("div",{"data-testid":"replay-result-empty",style:{fontFamily:q,fontSize:11,color:i.ink3},children:"No replay result yet. Queue one above â the worker cron runs every 2 minutes."})}function V({result:t}){const s=t.completedSuccessfully;return e.jsxs(o,{label:"REPLAY RESULT",icon:m,accent:s?"yellow":"red",right:e.jsx(a,{tone:s?"success":"red",icon:s?u:y,label:s?"COMPLETED":"FAILED"}),testId:"replay-result-panel",children:[e.jsxs("div",{style:{fontFamily:q,fontSize:10,
1color:i.ink2,marginTop:8,letterSpacing:"0.04em"},"data-testid":"replay-result-status-line",children:[t.replayedAt," · ",t.stepCount," steps · final state"," ",t.finalStateHash.slice(0,12)]}),e.jsxs("h4",{style:{fontFamily:q,fontSize:10,letterSpacing:"0.16em",color:i.ink3,textTransform:"uppercase",margin:"14px 0 8px",display:"flex",alignItems:"center",gap:6},children:[e.jsx(x,{size:16,weight:"duotone",color:i.ink3}),"Divergences (",t.divergences.length,")"]}),0===t.divergences.length?e.jsx("p",{"data-testid":"replay-result-no-divergences",style:{fontFamily:q,fontSize:11,color:i.ink3,margin:0},children:"No divergences â replay matched the captured run step-for-step."}):e.jsx("ul",{"aria-label":"Divergences","data-testid":"replay-result-divergences",style:{listStyle:"none",padding:0,margin:0},children:t.divergences.map((t,s)=>e.jsxs("li",{"data-testid":`replay-divergence-${t.stepIndex}`,style:{padding:"8px 10px",background:i.black2,borderTop:`1px solid ${i.hairline2}`},children:[e.jsxs("div",{style:{fontFamily:q,fontSize:10,letterSpacing:"0.12em",color:i.yellow,textTransform:"uppercase"},children:["STEP ",t.stepIndex]}),e.jsx("div",{style:{fontFamily:q,fontSize:12,color:i.ink1,marginTop:2},children:t.reason}),(t.capturedToolName||t.replayedToolName)&&e.jsxs("div",{style:{fontFamily:q,fontSize:10,color:i.ink3,marginTop:2},children:["captured: ",t.capturedToolName??"â"," · replayed: ",t.replayedToolName??"â"]})]},`${t.stepIndex}-${s}`))})]})}export{B as ReplaySessionsRoute};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.