spexcode 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +2 -2
- package/spec-cli/src/claude-headless.ts +105 -16
- package/spec-cli/src/cli.ts +13 -2
- package/spec-cli/src/codex-headless.ts +13 -0
- package/spec-cli/src/guide.ts +8 -7
- package/spec-cli/src/harness.ts +53 -5
- package/spec-cli/src/host.ts +1 -0
- package/spec-cli/src/opencode-headless.ts +119 -5
- package/spec-cli/src/opencode.ts +8 -4
- package/spec-cli/src/pi-headless.ts +1 -0
- package/spec-cli/src/pty-bridge.ts +31 -4
- package/spec-cli/src/pty-helper.mjs +16 -6
- package/spec-cli/src/pty-native-helper.mjs +22 -0
- package/spec-cli/src/session-timeline.ts +29 -21
- package/spec-cli/src/sessions.ts +72 -32
- package/spec-cli/templates/spexcode.json +1 -0
- package/spec-dashboard/dist/assets/{Dashboard-C_w_wdk5.js → Dashboard-CTAuTyZ3.js} +3 -3
- package/spec-dashboard/dist/assets/{EvalsPage-5_nfIYll.js → EvalsPage-KbMMownG.js} +2 -2
- package/spec-dashboard/dist/assets/{IssuesPage-By-u--95.js → IssuesPage-DmyLb9Rj.js} +1 -1
- package/spec-dashboard/dist/assets/{MobileApp-CVEwjHr9.js → MobileApp-D2RZGt4Z.js} +2 -2
- package/spec-dashboard/dist/assets/{Modal-BqgvzMJD.js → Modal-3brXUhM0.js} +1 -1
- package/spec-dashboard/dist/assets/{PageScroll-B_dKCuXx.js → PageScroll-CadAKuSy.js} +1 -1
- package/spec-dashboard/dist/assets/ProjectsPage-DU3x4Y8l.js +1 -0
- package/spec-dashboard/dist/assets/{SessionInterface-Bh3vq8SU.js → SessionInterface-BtrzlOPs.js} +1 -1
- package/spec-dashboard/dist/assets/{SessionWindow-BuJ5mzjC.js → SessionWindow-BWH5O0jh.js} +1 -1
- package/spec-dashboard/dist/assets/{Settings-B8KFocsz.js → Settings-COgdKTJB.js} +1 -1
- package/spec-dashboard/dist/assets/{TimelineChat-K0wdlweB.js → TimelineChat-DQ21GSJK.js} +1 -1
- package/spec-dashboard/dist/assets/{index-BKaTHjmU.js → index-D6HBvKkJ.js} +2 -2
- package/spec-dashboard/dist/assets/{index-DcnCaBAC.css → index-DFdlYy4H.css} +1 -1
- package/spec-dashboard/dist/index.html +2 -2
- package/spec-dashboard/dist/assets/ProjectsPage-RVP8AqK4.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as B,j as n,I as G,r,V as Cs,a as ke,W as Ts,e as be,Z as Fs,$ as As}from"./index-BKaTHjmU.js";import{a2 as ie,E as es,a3 as D,a4 as ds,X as _,a5 as Ps,a6 as Os,a7 as ss,s as ns,a8 as Is,a9 as ts,aa as Ks,ab as zs,ac as Bs,ad as Vs,ae as Te,af as J,ag as Y,ah as _s,ai as qs,aj as Fe,ak as we,al as Us,am as as,an as Hs,ao as Xs,k as Qs,ap as Ys,d as Ds,D as ge,r as ls,aq as Gs,F as Ae,e as hs,n as Zs,ar as Js,as as Ws,h as en}from"./SessionWindow-BuJ5mzjC.js";import"./PageScroll-B_dKCuXx.js";const is={video:"vid",image:"img",transcript:"txt",data:"data"},sn=["is","state","verdict","freshness","evidence","node","filer","session","scope"],ms=e=>`eval:${e.node}·${e.scenario}`;function nn({e}){const a=B(),i=e.humanOk&&a("evalsFeed.okdTip",{by:e.humanOk.by,at:new Date(e.humanOk.ts).toLocaleString()});return n.jsx(ds,{state:n.jsx(_,{kind:"eval",state:e.state}),title:e.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"ef-node",style:{color:`hsl(${e.hue??210} 60% 70%)`},children:e.node}),e.by&&n.jsx("span",{children:a("evalsFeed.filedBy",{by:e.by})}),n.jsx("span",{children:a("evalsFeed.filedAt",{at:tn(e.ts)})})]}),aside:n.jsxs(n.Fragment,{children:[e.inSession&&n.jsx("span",{className:"rl-tag in-session",children:a("evalsFeed.sessionTag")}),ts(e).some(o=>is[o])&&n.jsx("span",{className:"rl-tag",children:ts(e).map(o=>is[o]).filter(Boolean).join("·")}),e.humanOk&&n.jsx("span",{role:"img",className:"ef-okd","data-tip":i,"aria-label":i,children:n.jsx(G,{name:"check",size:11})})]})})}const tn=e=>{const a=Math.max(0,(Date.now()-new Date(e).getTime())/1e3);return a<3600?`${Math.max(1,Math.floor(a/60))}m`:a<86400?`${Math.floor(a/3600)}h`:`${Math.floor(a/86400)}d`},W=(e,a,i,o=p=>p)=>{var p,d;return(((d=(p=e==null?void 0:e.facets)==null?void 0:p[a])==null?void 0:d.options)??[]).map(x=>({value:x.value,label:x.value===""?i:o(x.value)}))};function an({pageData:e,loading:a=!1,sessions:i=[],queryText:o="",onQueryText:p,hrefFor:d,notice:x=null,leading:f=null,error:j=null,empty:S=null,pagination:L=null}){var re,ee;const h=B(),m=String(o??"").trim()||ie,b=(c,V)=>p(Is(m,c,V)),E=Array.isArray(e==null?void 0:e.items)?e.items:[],y=E.filter(c=>c.filterKind===es.RESULT),R=E.filter(c=>c.filterKind===es.BLIND),I=((re=e==null?void 0:e.counts)==null?void 0:re.fail)||0,M=((ee=e==null?void 0:e.counts)==null?void 0:ee.pass)||0,A=D(m,"verdict"),P=[...R.map(c=>({key:`blind:${c.node}·${c.scenario}`,cls:"se-blind",content:n.jsx(ds,{state:n.jsx(_,{kind:"eval",state:"missing"}),title:c.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"ef-node",style:{color:`hsl(${c.hue??210} 60% 70%)`},children:c.node}),n.jsx("span",{children:h("sessionEval.unmeasured")})]})})})),...y.map(c=>({key:ms(c),href:d(c),content:n.jsx(nn,{e:c})}))],O={label:h("reviewList.facetReview"),value:D(m,"state"),options:W(e,"review",h("reviewList.all"),c=>h(c==="reviewed"?"reviewList.reviewed":"reviewList.needsReview"))},v={label:h("reviewList.facetFreshness"),value:D(m,"freshness"),options:W(e,"freshness",h("reviewList.all"),c=>h(`reviewList.freshness.${c}`))},C={label:h("reviewList.facetKind"),value:D(m,"evidence")||"all",options:W(e,"kind",h("evalsFeed.kind.all"),c=>h(`evalsFeed.kind.${c}`))},K={label:h("reviewList.facetSession"),value:D(m,"session"),options:W(e,"session",h("reviewList.all"),c=>h(c==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))},N=D(m,"evidence");return n.jsx(Ps,{notice:x,leading:f,error:j,loading:a,title:h("evalsFeed.title"),search:{value:String(o??"").trim()?o:ie,onSubmit:p,placeholder:h("reviewList.searchEvals"),label:h("reviewList.search"),keys:sn,suggest:{node:W(e,"node",h("reviewList.all")).filter(c=>c.value),filer:W(e,"filer",h("reviewList.all")).filter(c=>c.value).map(({value:c})=>{const V=i.find(q=>q.id===c);return{value:c,label:V?ns(V):null}}),scope:i.map(c=>({value:c.id,label:ns(c)}))}},sections:[{key:"fail",label:n.jsx(_,{kind:"eval",state:"fail",title:h("reviewList.verdict.fail"),showLabel:!0}),count:I,active:A==="fail",onSelect:()=>b("verdict",A==="fail"?"":"fail")},{key:"pass",label:n.jsx(_,{kind:"eval",state:"pass",title:h("reviewList.verdict.pass"),showLabel:!0}),count:M,active:A==="pass",onSelect:()=>b("verdict",A==="pass"?"":"pass")}],sectionMode:"filters",facets:n.jsxs(n.Fragment,{children:[n.jsx(ss,{label:v.label,value:v.value,options:v.options,clearLabel:h("reviewList.all"),onChange:c=>b("freshness",c)}),n.jsx(ss,{label:C.label,value:C.value,options:C.options,onChange:c=>b("evidence",c==="all"?"":c)})]}),secondaryFilters:n.jsx(Os,{label:h("reviewList.filters"),clearLabel:h("reviewList.all"),groups:[{label:O.label,value:O.value,active:!!O.value,options:O.options,onChange:c=>b("state",c)},{label:K.label,value:K.value,active:!!K.value,options:K.options,onChange:c=>b("session",c)},{label:v.label,value:v.value,active:!!v.value,options:v.options,onChange:c=>b("freshness",c),mobileOnly:!0},{label:C.label,value:C.value,active:!!N,options:C.options,clearLabel:null,onChange:c=>b("evidence",c==="all"?"":c),mobileOnly:!0}]}),rows:P,pagination:L,empty:S||{hasData:((e==null?void 0:e.sourceTotal)??0)>0,dataset:h("evalsFeed.datasetEmpty"),filtered:h("evalsFeed.noMatches")}})}const ln=[{name:"ok",color:"green",when:e=>!e.okd&&e.isLatest,descKey:"annotator.cmd.okDesc"}];function rn(e,a){return ln.filter(i=>i.when(e)).map(i=>({...i,run:a[i.name]}))}function on(e,a){return(e||"").replace(/\{(\w+)\}/g,(i,o)=>a[o]!=null?String(a[o]):i)}const rs=(e,a)=>{let i=null;for(const o of e)if(o.at<=a)i=o;else break;return i},cn=e=>{if(!e||!Array.isArray(e.events))return null;const a=e.v===1?"time":typeof e.axis=="string"?e.axis:"time",i=e.v===1?o=>o.tMs:o=>o.at;return{axis:a,events:e.events.map(o=>({at:i(o),step:o.step,...o.node?{node:o.node}:{}}))}},un=(e,a,i)=>e==="time"?we(a):e==="frame"?`#${a}`:e==="line"?`L${a}`:e==="index"?i?`${a}/${i}`:`${a}`:String(a);function os({events:e,axis:a,extent:i,activeStepIdx:o,onSeek:p}){return n.jsx("div",{className:"an-ruler",children:e.map((d,x)=>n.jsxs("button",{className:`an-step ${o===x?"on":""}`,onClick:()=>p(d.at),"data-tip":d.node?`→ ${d.node}`:void 0,children:[un(a,d.at,i)," ",d.step]},x))})}const xe=8;function dn({hidden:e,total:a,histIdx:i,onPick:o}){const p=B(),d=Hs(),x=p("annotator.abMore",{n:e.length});return n.jsxs("div",{className:"an-ab-more",ref:d.ref,children:[n.jsx(be,{icon:"ellipsis",size:14,className:"an-ab-morebtn",label:x,"aria-haspopup":"menu","aria-expanded":d.open,onClick:f=>d.toggle(f.currentTarget),onKeyDown:d.onTriggerKeyDown}),d.open&&n.jsx("div",{className:"rl-menu an-ab-menu",role:"menu","aria-label":x,ref:d.menuRef,onKeyDown:d.onMenuKeyDown,children:e.map(f=>{const j=Te(f);return n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":f.idx===i,tabIndex:-1,className:"rl-menu-item an-ab-menuitem",onFocus:d.onItemFocus,onClick:()=>{d.close(!0),o(f.idx)},children:[n.jsx(_,{kind:"eval",state:j,size:13}),n.jsxs("span",{className:"an-ab-menupos",children:[a-f.idx,"/",a]}),n.jsx("span",{className:"an-ab-menudate",children:new Date(f.ts).toLocaleString()})]},`${f.ts}-${f.idx}`)})})]})}function hn({entry:e,history:a,sourceKey:i="project",specs:o=[],sessions:p=[],onWrite:d,onOpenSession:x,onFocusNode:f=null,listHref:j=null,backHref:S=null,backLabel:L=null,queue:h={prev:[],next:[]}}){var Ye,De,Ge,Ze,Je,We;const m=B(),b=r.useRef(null),E=r.useRef(null),y=r.useRef(null),R=r.useRef(null),I=r.useRef(0),[M,A]=r.useState([]),[P,O]=r.useState("time"),[v,C]=r.useState(null),[K,N]=r.useState(""),[re,ee]=r.useState(!1),[c,V]=r.useState(null),q=r.useRef(null),se=r.useRef(null),ne=r.useRef(null),ye=r.useRef(0),[vs,Pe]=r.useState(0),[je,Oe]=r.useState(-1),[Ie,Ke]=r.useState(null),[oe,Ee]=r.useState(!1),[ze,Le]=r.useState(!1),[Me,Ne]=r.useState(null),[ce,$e]=r.useState(null),[T,Be]=r.useState(null),[F,te]=r.useState(0),w=T&&T[F]||e,fs=`${F}:${w.ts||w.codeSha||w.blob||"reading"}`,xs=`${i}·${e.node}·${e.scenario}·${fs}`,[ps,bs]=r.useState([]);r.useEffect(()=>{let s=!0;return Cs().then(t=>{s&&Array.isArray(t)&&bs(t)}).catch(()=>{}),()=>{s=!1}},[]),r.useEffect(()=>{C(null),N(""),A([]),V(null),te(0),Be(null),Be(Array.isArray(a)?a:[e])},[e.node,e.scenario,e.ts,e.blob,(Ye=e.humanOk)==null?void 0:Ye.ts,a]),r.useEffect(()=>{C(null),V(null)},[F]);const ae=Ks(w),U=ae.find(s=>s.kind==="video"&&s.state==="present"),ue=ae.filter(s=>s.kind==="image"),ws=ae.filter(s=>s.kind!=="video"&&s.kind!=="image"),H=!!U,de=e.thread??null,Se=r.useMemo(()=>((de==null?void 0:de.replies)??[]).filter(s=>s.rid!==void 0),[de]),Ve=T&&((De=T[0])==null?void 0:De.by)||e.by||null,z=r.useMemo(()=>Se.map((s,t)=>{const l=zs(Bs(s.body),M);return l&&l.seekable?{i:t,tMs:l.tMs,step:l.step,label:l.label}:null}).filter(Boolean).sort((s,t)=>s.tMs-t.tMs),[Se,M]),_e=r.useRef(M);_e.current=M;const qe=r.useRef(z);qe.current=z;const he=r.useCallback(()=>{const s=ye.current,t=_e.current;let l=-1;for(let g=0;g<t.length&&t[g].at<=s;g++)l=g;Oe(g=>g===l?g:l);let u=null;for(const g of qe.current)if(g.tMs<=s)u=g.i;else break;Ke(g=>g===u?g:u)},[]);r.useEffect(()=>{he()},[z,M,he]),r.useEffect(()=>{ye.current=0,q.current&&(q.current.style.width="0%"),se.current&&(se.current.style.left="0%"),ne.current&&(ne.current.textContent=""),Oe(-1),Ke(null),Pe(0),Ee(!1),Le(!1),Ne(null),$e(null)},[e.blob,e.scenario,e.node]),r.useEffect(()=>{if(A([]),O("time"),!w.timelineBlob)return;let s=!0;return fetch(ke(`/api/evidence/${w.timelineBlob}`)).then(t=>t.ok?t.json():null).then(t=>{const l=s&&cn(t);l&&(A(l.events),O(l.axis))}).catch(()=>{}),()=>{s=!1}},[w.timelineBlob]),r.useEffect(()=>{const s=b.current;if(!s)return;const t=()=>{const k=Math.round((s.currentTime||0)*1e3),$=Math.round((s.duration||0)*1e3);ye.current=k;const Q=$?k/$*100:0;q.current&&(q.current.style.width=`${Q}%`),se.current&&(se.current.style.left=`${Q}%`),ne.current&&(ne.current.textContent=`${we(k)} / ${we($)}`),he()},l=()=>{Pe(s.duration||0),t()},u=()=>Ee(!0),g=()=>Ee(!1);return s.addEventListener("timeupdate",t),s.addEventListener("seeked",t),s.addEventListener("loadedmetadata",l),s.addEventListener("durationchange",l),s.addEventListener("play",u),s.addEventListener("pause",g),l(),()=>{s.removeEventListener("timeupdate",t),s.removeEventListener("seeked",t),s.removeEventListener("loadedmetadata",l),s.removeEventListener("durationchange",l),s.removeEventListener("play",u),s.removeEventListener("pause",g)}},[U==null?void 0:U.hash,e.node,e.scenario,F,he]);const X=Math.round(vs*1e3),me=M[je]||null,Ue=P==="time"?X:P==="frame"?ue.length:P==="index"?M.length:0,Z=r.useCallback(s=>{const t=b.current;t&&(t.currentTime=s/1e3)},[]),ve=r.useCallback(()=>{const s=b.current;s&&(s.paused?s.play():s.pause())},[]),He=(s,t)=>{$e(s),t!=null&&Z(t)},fe=r.useCallback(async s=>{const t=b.current;if(!(t!=null&&t.videoWidth))return null;ee(!0),N(m("annotator.capturing"));try{t.seeking&&await new Promise($=>t.addEventListener("seeked",$,{once:!0}));const l=document.createElement("canvas");l.width=t.videoWidth,l.height=t.videoHeight;const u=l.getContext("2d");u.drawImage(t,0,0,l.width,l.height),s&&(u.strokeStyle="#ff9a3c",u.lineWidth=Math.max(2,l.width/300),u.strokeRect(s.x/100*l.width,s.y/100*l.height,s.w/100*l.width,s.h/100*l.height));const g=await new Promise($=>l.toBlob($,"image/png")),{hash:k}=await Ts(g);if(!k)throw new Error("no hash");return N(""),k}catch{return N(m("annotator.failed")),null}finally{ee(!1)}},[m]),ks=r.useCallback(async()=>{var l;const s=b.current;if(!s)return null;s.pause();const t=Math.round((s.currentTime??0)*1e3);return{tMs:t,step:((l=rs(M,t))==null?void 0:l.step)??null,frame:await fe(null)}},[M,fe]),Re=r.useCallback(async s=>{const t=b.current;if(!t)return;t.pause();const l=Math.round((t.currentTime||0)*1e3),u=rs(M,l),g=await fe(s),k=[Vs(l,u==null?void 0:u.step)];g&&k.push(``),u!=null&&u.node&&u.node!==e.node&&k.push(`re: [[${u.node}]]`),k.push(""),V({seq:++I.current,body:k.join(`
|
|
2
|
-
`)})},[M,e.node,fe]),Ce=r.useCallback(s=>{var u;if(!z.length)return;let t=z.findIndex(g=>g.i===ce);if(t<0){const g=Math.round((((u=b.current)==null?void 0:u.currentTime)||0)*1e3);t=z.reduce((k,$,Q)=>$.tMs<=g?Q:k,-1)}t=Math.min(z.length-1,Math.max(0,t+s));const l=z[t];$e(l.i),Z(l.tMs)},[z,ce,Z]);r.useEffect(()=>{if(!H)return;const s=t=>{const l=document.activeElement;if(l&&(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.tagName==="SELECT"||l.isContentEditable))return;const u=b.current;u&&(t.key===" "?(t.preventDefault(),ve()):t.key==="ArrowRight"?(t.preventDefault(),u.currentTime=Math.min(u.duration||u.currentTime,u.currentTime+(t.shiftKey?1:5))):t.key==="ArrowLeft"?(t.preventDefault(),u.currentTime=Math.max(0,u.currentTime-(t.shiftKey?1:5))):t.key===","?(t.preventDefault(),u.currentTime=Math.max(0,u.currentTime-1/30)):t.key==="."?(t.preventDefault(),u.duration&&(u.currentTime=Math.min(u.duration,u.currentTime+1/30))):t.key==="ArrowDown"?(t.preventDefault(),Ce(1)):t.key==="ArrowUp"?(t.preventDefault(),Ce(-1)):(t.key==="a"||t.key==="A")&&(t.preventDefault(),Re(null)))};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[H,ve,Ce,Re]);const Xe=s=>{var u;const t=(u=y.current)==null?void 0:u.getBoundingClientRect(),l=b.current;!t||!t.width||!l||!l.duration||(l.currentTime=Math.min(1,Math.max(0,(s-t.left)/t.width))*l.duration)},gs=s=>{s.preventDefault(),Le(!0),Xe(s.clientX)},ys=s=>{var l;const t=(l=y.current)==null?void 0:l.getBoundingClientRect();t!=null&&t.width&&Ne(Math.min(100,Math.max(0,(s.clientX-t.left)/t.width*100)))};r.useEffect(()=>{if(!ze)return;const s=l=>Xe(l.clientX),t=()=>Le(!1);return window.addEventListener("mousemove",s),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",t)}},[ze]);const Qe=s=>{const t=E.current.getBoundingClientRect();return{x:(s.clientX-t.left)/t.width*100,y:(s.clientY-t.top)/t.height*100}},js=s=>{if(s.button!==0||re)return;const t=Qe(s);C({x0:t.x,y0:t.y,x:t.x,y:t.y})},Es=s=>{var l,u;if(!v)return;const t=Qe(s);!((l=b.current)!=null&&l.paused)&&(Math.abs(t.x-v.x0)>1||Math.abs(t.y-v.y0)>1)&&((u=b.current)==null||u.pause()),C({...v,x:t.x,y:t.y})},Ls=()=>{if(!v)return;const s={x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)};if(C(null),s.w<1&&s.h<1){ve();return}Re(s)},le=v&&{x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)},Ms=async()=>{const s=await As(e.node,e.scenario).catch(t=>({error:String(t)}));d==null||d((s==null?void 0:s.error)||"")},Ns=[...rn({okd:!!w.humanOk,isLatest:!T||F===0},{ok:Ms}).map(s=>({name:s.name,description:m(s.descKey),ui:!0,color:s.color,run:s.run})),...ps.map(s=>({name:s.name,description:s.desc||s.title,source:"review",prefill:()=>on(s.body,{node:e.node,scenario:e.scenario,expected:w.expected||""})}))],$s=n.jsxs(n.Fragment,{children:[n.jsx(_,{kind:"eval",state:Te(w),showLabel:!0,className:"an-verdict-badge",size:16}),w.humanOk&&n.jsxs("span",{className:"an-okd","data-tip":m("annotator.okBy",{by:w.humanOk.by,at:new Date(w.humanOk.ts).toLocaleString()}),children:[n.jsx(G,{name:"circle-check",size:14})," ",m("annotator.okd")]}),T&&T.length>1&&(()=>{const s=T.length,t=Math.min(xe,s),l=F<xe?Array.from({length:t},(k,$)=>t-1-$):[F,...Array.from({length:xe-1},(k,$)=>xe-2-$)],u=new Set(l),g=T.map((k,$)=>({...k,idx:$})).filter(k=>!u.has(k.idx));return n.jsxs("div",{className:"an-ab",children:[n.jsx(be,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:F>=T.length-1,onClick:()=>te(k=>Math.min(T.length-1,k+1)),label:m("annotator.abOlder")}),g.length>0&&n.jsx(dn,{hidden:g,total:s,histIdx:F,onPick:te}),n.jsx("div",{className:"an-ab-track",children:l.map(k=>{const $=T[k],Q=Te($);return n.jsx("button",{type:"button",className:`an-ab-pip ${k===F?"on":""}`,"aria-current":k===F?"true":void 0,onClick:()=>te(k),"aria-label":`${s-k}/${s} · ${m(`score.${Q}`)} · ${new Date($.ts).toLocaleString()}`,children:n.jsx(_,{kind:"eval",state:Q,size:13})},`${$.ts}-${k}`)})}),n.jsx(be,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:F<=0,onClick:()=>te(k=>Math.max(0,k-1)),label:m("annotator.abNewer")}),n.jsx("span",{className:"an-ab-pos",children:F===0?m("annotator.abLatest"):m("annotator.abPos",{i:T.length-F,n:T.length})})]})})()]}),Ss=n.jsxs(n.Fragment,{children:[n.jsxs(J,{label:m("detail.sideReading"),children:[w.evaluator&&n.jsx(Y,{text:w.evaluator}),n.jsx(Y,{text:new Date(w.ts).toLocaleString()})]}),n.jsx(J,{label:m("detail.sideNode"),children:n.jsx(Y,{text:e.node,mono:!0,tip:f?m("session.issuesFocusNode"):e.node,onClick:f?()=>f(e.node):null})}),Ve&&n.jsx(J,{label:m("detail.sideFiler"),children:n.jsx(_s,{originator:Ve,sessions:p,kind:"eval",onOpenSession:x})}),w.humanOk&&n.jsxs(J,{label:m("detail.sideOk"),children:[n.jsx(Y,{text:`☑ ${w.humanOk.by}`}),n.jsx(Y,{text:new Date(w.humanOk.ts).toLocaleString(),dim:!0})]}),!w.fresh&&(((Ge=w.staleAxes)==null?void 0:Ge.length)??0)>0&&n.jsxs(J,{label:m("nodeView.eval.staleLabel"),children:[n.jsx(Y,{text:w.staleAxes.join(" · "),tip:m("nodeView.eval.staleReadoutTitle")}),(((Ze=w.codeDrift)==null?void 0:Ze.length)??0)>0&&n.jsx(Y,{text:w.codeDrift.map(s=>`${s.file.split("/").pop()} +${s.behind}`).join(", "),dim:!0})]}),(h.prev.length>0||h.next.length>0)&&n.jsx(J,{label:m("detail.sideQueue"),children:[["prev",m("detail.queuePrev")],["next",m("detail.queueNext")]].map(([s,t])=>h[s].length>0&&n.jsxs("div",{className:"ds-queue-group",children:[n.jsx("span",{className:"ds-queue-group-label",children:t}),h[s].map(l=>n.jsxs("a",{className:"ds-queue-row",href:l.href,"data-tip":`${l.node} · ${l.scenario}`,children:[n.jsx(_,{kind:"eval",state:l.state,size:13}),n.jsx("span",{className:"ds-queue-scenario",children:l.scenario}),n.jsx("span",{className:"ds-queue-node",children:l.node})]},l.key))]},s))})]}),Rs=n.jsx(qs,{onSend:(s,t)=>Fs({node:e.node,scenario:e.scenario,body:s,codeSha:w.codeSha,evidence:t}),specs:o,sessions:p,focusId:e.node,onDone:d,anchorNow:H?ks:null,draft:c,commands:Ns},xs);return n.jsxs(Fe,{title:e.scenario,titleMeta:n.jsx("span",{className:"an-node",children:e.node}),status:$s,side:Ss,composer:Rs,listHref:j,backHref:S,backLabel:L,children:[w.expected&&n.jsxs("div",{className:"an-expected",children:[n.jsx("b",{children:m("nodeView.eval.expected")})," ",w.expected]}),ae.length>0&&((Je=w.verdict)==null?void 0:Je.note)&&n.jsxs("div",{className:"an-expected an-prior-note",children:[n.jsx("b",{children:m("nodeView.eval.noteLabel")})," ",w.verdict.note]}),U&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"an-player",ref:R,children:[n.jsxs("div",{className:`an-stage ${oe?"playing":"paused"}`,ref:E,onMouseDown:js,onMouseMove:Es,onMouseUp:Ls,children:[n.jsx("video",{className:"an-video",ref:b,src:ke(`/api/evidence/${U.hash}`),preload:"metadata",playsInline:!0}),le&&n.jsx("div",{className:"an-rect live",style:{left:`${le.x}%`,top:`${le.y}%`,width:`${le.w}%`,height:`${le.h}%`}}),!oe&&!v&&n.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:n.jsx(G,{name:"play",size:22})})]}),n.jsxs("div",{className:"an-bar",children:[n.jsx(be,{icon:oe?"pause":"play",size:14,className:"an-play",label:m(oe?"annotator.pause":"annotator.play"),onClick:ve}),n.jsxs("div",{className:"an-seek",ref:y,onMouseDown:gs,onMouseMove:ys,onMouseLeave:()=>Ne(null),children:[n.jsx("div",{className:"an-seek-trk"}),X>0&&P==="time"&&M.map((s,t)=>n.jsx("div",{className:"an-band",style:{left:`${s.at/X*100}%`},"data-tip":s.step},`band-${t}`)),n.jsx("div",{className:"an-seek-play",ref:q}),X>0&&z.map(s=>n.jsx("button",{type:"button",className:`an-mk ${ce===s.i?"on":""} ${Ie===s.i?"active":""}`,style:{left:`${s.tMs/X*100}%`},"data-tip":s.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),He(s.i,s.tMs)}},`mk-${s.i}`)),n.jsx("div",{className:"an-knob",ref:se}),Me!=null&&X>0&&n.jsx("div",{className:"an-seek-hov",style:{left:`${Me}%`},children:we(Me/100*X)})]}),n.jsx("span",{className:"an-time",ref:ne}),me&&n.jsx("span",{className:"an-curstep","data-tip":me.node?`→ ${me.node}`:void 0,children:me.step}),n.jsx(Us,{target:R})]})]}),M.length>0&&n.jsx(os,{events:M,axis:P,extent:Ue,activeStepIdx:je,onSeek:Z}),K&&n.jsx("div",{className:"an-flash",children:K})]}),!U&&M.length>0&&n.jsx(os,{events:M,axis:P,extent:Ue,activeStepIdx:je,onSeek:Z}),ue.length>0&&n.jsx("div",{className:"an-gallery",children:ue.map((s,t)=>n.jsx(as,{e:s,alt:e.scenario},`${s.hash}-${t}`))}),ws.map((s,t)=>n.jsx(as,{e:s,alt:e.scenario,collapsed:H||ue.length>0},`${s.hash}-${t}`)),ae.length===0&&((We=w.verdict)!=null&&We.note?n.jsx("pre",{className:"eval-transcript",children:w.verdict.note}):n.jsx("div",{className:"an-hint",children:m("nodeView.eval.noImage")})),n.jsx(mn,{entry:e,comments:Se,seekMs:H?Z:null,selIdx:ce,activeIdx:Ie,onSelect:H?He:null,events:H?M:null,onWrite:d})]})}function mn({entry:e,comments:a,seekMs:i,selIdx:o,activeIdx:p,onSelect:d,events:x,onWrite:f}){var S;const j=B();return n.jsxs("section",{className:"an-thread",children:[n.jsx("div",{className:"an-comments-head",children:n.jsx("span",{children:j("annotator.comments",{n:a.length})})}),n.jsx(Xs,{replies:a,onSeek:i,selIdx:o,activeIdx:p,onSelect:d,events:x,threadId:((S=e.thread)==null?void 0:S.id)??null,onRemarkChange:()=>f==null?void 0:f("")})]})}const pe=new Map;function cs(e,a){if(!(e!=null&&e.evalRevision)||!(a!=null&&a.epoch))return!0;const i=e.evalRevision;return i.epoch!==a.epoch||i.generation<a.generation?!1:i.generation!==a.generation?!0:!(a.revision&&i.content!==a.revision||a.value&&(!e.summary||["measured","total","pass","fail","review","blind","unknown"].some(p=>e.summary[p]!==a.value[p])))}function us(e,a,i){const o=`${i||""}\0${e}\0${a}`;if(pe.has(o))return pe.get(o);const p=new URLSearchParams({node:e,scenario:a});i&&p.set("scope",i);const d=fetch(ke(`/api/evals/detail?${p}`),{cache:"no-store"}).then(x=>x.ok?x.json():x.status===404?!1:Promise.reject(new Error(`HTTP ${x.status}`))).finally(()=>pe.delete(o));return pe.set(o,d),d}function vn(e,a,i,o=!0){const p=String(e||"").indexOf("/"),d=p>0?e.slice(0,p):e,x=p>0?e.slice(p+1):"",f=`${a||""}\0${d}\0${x}`,[j,S]=r.useState({identity:"",data:null,error:null}),L=r.useRef(0),h=r.useRef(i);h.current=i;const m=r.useCallback(()=>{if(!o||!d||!x)return Promise.resolve();const E=++L.current;return S(y=>y.identity===f?{...y,error:null}:{identity:f,data:null,error:null}),us(d,x,a).then(async y=>{if(E===L.current){if(y&&!cs(y,h.current)){const R=await us(d,x,a);if(E!==L.current)return;if(R&&!cs(R,h.current))throw new Error("stale session eval detail");y=R}S({identity:f,data:y,error:null})}}).catch(y=>{if(E!==L.current)return;const R=y instanceof Error?y.message:String(y);S(I=>({identity:f,data:I.identity===f&&I.data?I.data:!1,error:R}))})},[o,f,d,x,a]);r.useEffect(()=>{o&&m()},[o,d,x,a,i==null?void 0:i.epoch,i==null?void 0:i.generation,i==null?void 0:i.revision]);const b=j.identity===f?j:{data:null,error:null};return{data:b.data,error:b.error,reload:m}}function fn({sessionId:e}){const i=B()("sessionEval.scopeDoor");return n.jsx("a",{className:"se-door",href:ge(en(e)),"data-tip":i,"aria-label":i,children:n.jsx(G,{name:"arrow-left",size:16})})}function xn({sessionId:e,pageData:a,loading:i,error:o,sessions:p,queryText:d,onQueryText:x,hrefFor:f,hrefForPage:j,notice:S}){const L=B(),h=(a==null?void 0:a.unknown)||0,m=e&&!i&&!o&&((a==null?void 0:a.sourceTotal)??0)===0?L("sessionEval.none"):null,b=e?n.jsxs("div",{className:"se-gates",children:[n.jsx(fn,{sessionId:e}),a&&a.gates.map(E=>n.jsxs("span",{className:`se-gate ${E.ok?"ok":"bad"}`,"data-tip":E.detail,children:[n.jsx(G,{name:E.ok?"check":"x",size:11})," ",E.label]},E.label)),h>0&&n.jsxs("span",{className:"se-gate bad","data-tip":L("sessionEval.unknownCoverage",{n:h}),children:[n.jsx(G,{name:"info",size:11})," ",h]}),a&&n.jsx("span",{className:"se-acts",children:n.jsx("a",{className:"se-export",href:ke(`/api/sessions/${encodeURIComponent(e)}/evals?format=html`),target:"_blank",rel:"noreferrer","data-tip":L("sessionEval.exportTitle"),"aria-label":L("sessionEval.export"),children:n.jsx(G,{name:"download",size:13})})})]}):null;return n.jsx(an,{pageData:a,loading:i,sessions:p,queryText:d,onQueryText:x,hrefFor:f,notice:S,leading:b,error:o?L("sessionEval.loadFailed",{reason:o}):null,empty:m,pagination:a?{page:a.page,pageCount:a.pageCount,prev:a.prev,next:a.next,hrefFor:j}:null})}function pn({param:e,detail:a,sessionId:i,loading:o=!1,error:p,specs:d,sessions:x,listHref:f,backHref:j,backLabel:S,onOpenSession:L,onFocusNode:h,onWrite:m,notice:b}){const E=B(),y=e.indexOf("/"),R=y>0?e.slice(0,y):e,I=y>0?e.slice(y+1):null,M=r.useMemo(()=>{const P=v=>({key:ms(v),node:v.node,scenario:v.scenario,state:v.state,href:ge(i?Ae(i,v.node,v.scenario):hs(v.node,v.scenario))}),O=(a==null?void 0:a.neighbors)||{prev:[],next:[]};return{prev:O.prev.map(P),next:O.next.map(P)}},[a==null?void 0:a.neighbors,i]);if(p)return n.jsx(Fe,{failure:E("sessionEval.loadFailed",{reason:p}),listHref:f,listLabel:E("reviewShell.backToEvals")});if(o)return n.jsx("div",{className:"fv-note",children:E("common.loading")});const A=(a==null?void 0:a.selected)||null;return A?n.jsxs("div",{className:"page-detail-stack",children:[b&&n.jsx("div",{className:"fv-notice",children:b}),n.jsx(hn,{entry:A,history:a.history,sourceKey:i||"project",specs:d,sessions:x,onOpenSession:L,onFocusNode:h,onWrite:m,listHref:f,backHref:j,backLabel:S,queue:M})]}):n.jsx(Fe,{missing:E("reviewShell.evalNotFound",{node:R,scenario:I||""}),listHref:f,listLabel:E("reviewShell.backToEvals")})}function yn({specs:e=[],sessions:a=[],reloadBoard:i,onOpenSession:o,onFocusNode:p=null}){var K;const d=B(),{param:x,query:f}=Qs(),j=D(f.q||"","scope")||null,S=((K=a.find(N=>N.id===j))==null?void 0:K.evalSummary)||null,L=vn(x,j,S,!!x),h=String(f.q??"").trim()||ie,m=Ys(f.page),b=Ds("evals",h,m,{enabled:!x,refreshKey:e}),[E,y]=r.useState(""),R=N=>{N&&(y(N),setTimeout(()=>y(""),6e3))},I=async N=>{R(N),await(i==null?void 0:i()),await L.reload()},M=N=>ge(j?Ae(j,N.node,N.scenario):hs(N.node,N.scenario)),A=j?ge(Ae(j)):ls("evals"),P=Gs("evals",j),O=d("detail.backToEvals"),v=N=>Zs("evals",null,{query:Js(N,ie)}),C=N=>ls("evals",null,Ws(h,ie,N));return x?n.jsx(pn,{param:x,detail:L.data&&L.data!==!1?L.data:null,sessionId:j,loading:L.data===null,error:L.error,specs:e,sessions:a,listHref:A,backHref:P,backLabel:O,onOpenSession:o,onFocusNode:p,onWrite:I,notice:E}):n.jsx(xn,{sessionId:j,pageData:b.data,loading:b.loading,error:b.error,sessions:a,queryText:f.q||"",onQueryText:v,hrefFor:M,hrefForPage:C,notice:E})}export{pn as EvalDetailPage,fn as EvalScopeDoor,xn as EvalsListPage,yn as default,cs as detailMatchesProjection};
|
|
1
|
+
import{u as B,j as n,I as G,r,W as Cs,a as ke,Z as Ts,e as be,$ as Fs,a0 as As}from"./index-D6HBvKkJ.js";import{a2 as ie,E as es,a3 as D,a4 as ds,X as q,a5 as Ps,a6 as Os,a7 as ss,s as ns,a8 as Is,a9 as ts,aa as Ks,ab as zs,ac as Bs,ad as _s,ae as Te,af as J,ag as Y,ah as qs,ai as Us,aj as Fe,ak as we,al as Vs,am as as,an as Hs,ao as Xs,k as Qs,ap as Ys,d as Ds,D as ge,r as ls,aq as Gs,F as Ae,e as hs,n as Zs,ar as Js,as as Ws,h as en}from"./SessionWindow-BWH5O0jh.js";import"./PageScroll-CadAKuSy.js";const is={video:"vid",image:"img",transcript:"txt",data:"data"},sn=["is","state","verdict","freshness","evidence","node","filer","session","scope"],ms=e=>`eval:${e.node}·${e.scenario}`;function nn({e}){const a=B(),i=e.humanOk&&a("evalsFeed.okdTip",{by:e.humanOk.by,at:new Date(e.humanOk.ts).toLocaleString()});return n.jsx(ds,{state:n.jsx(q,{kind:"eval",state:e.state}),title:e.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"ef-node",style:{color:`hsl(${e.hue??210} 60% 70%)`},children:e.node}),e.by&&n.jsx("span",{children:a("evalsFeed.filedBy",{by:e.by})}),n.jsx("span",{children:a("evalsFeed.filedAt",{at:tn(e.ts)})})]}),aside:n.jsxs(n.Fragment,{children:[e.inSession&&n.jsx("span",{className:"rl-tag in-session",children:a("evalsFeed.sessionTag")}),ts(e).some(o=>is[o])&&n.jsx("span",{className:"rl-tag",children:ts(e).map(o=>is[o]).filter(Boolean).join("·")}),e.humanOk&&n.jsx("span",{role:"img",className:"ef-okd","data-tip":i,"aria-label":i,children:n.jsx(G,{name:"check",size:11})})]})})}const tn=e=>{const a=Math.max(0,(Date.now()-new Date(e).getTime())/1e3);return a<3600?`${Math.max(1,Math.floor(a/60))}m`:a<86400?`${Math.floor(a/3600)}h`:`${Math.floor(a/86400)}d`},W=(e,a,i,o=p=>p)=>{var p,d;return(((d=(p=e==null?void 0:e.facets)==null?void 0:p[a])==null?void 0:d.options)??[]).map(x=>({value:x.value,label:x.value===""?i:o(x.value)}))};function an({pageData:e,loading:a=!1,sessions:i=[],queryText:o="",onQueryText:p,hrefFor:d,notice:x=null,leading:f=null,error:j=null,empty:S=null,pagination:L=null}){var re,ee;const h=B(),m=String(o??"").trim()||ie,b=(c,_)=>p(Is(m,c,_)),E=Array.isArray(e==null?void 0:e.items)?e.items:[],y=E.filter(c=>c.filterKind===es.RESULT),R=E.filter(c=>c.filterKind===es.BLIND),I=((re=e==null?void 0:e.counts)==null?void 0:re.fail)||0,M=((ee=e==null?void 0:e.counts)==null?void 0:ee.pass)||0,A=D(m,"verdict"),P=[...R.map(c=>({key:`blind:${c.node}·${c.scenario}`,cls:"se-blind",content:n.jsx(ds,{state:n.jsx(q,{kind:"eval",state:"missing"}),title:c.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"ef-node",style:{color:`hsl(${c.hue??210} 60% 70%)`},children:c.node}),n.jsx("span",{children:h("sessionEval.unmeasured")})]})})})),...y.map(c=>({key:ms(c),href:d(c),content:n.jsx(nn,{e:c})}))],O={label:h("reviewList.facetReview"),value:D(m,"state"),options:W(e,"review",h("reviewList.all"),c=>h(c==="reviewed"?"reviewList.reviewed":"reviewList.needsReview"))},v={label:h("reviewList.facetFreshness"),value:D(m,"freshness"),options:W(e,"freshness",h("reviewList.all"),c=>h(`reviewList.freshness.${c}`))},C={label:h("reviewList.facetKind"),value:D(m,"evidence")||"all",options:W(e,"kind",h("evalsFeed.kind.all"),c=>h(`evalsFeed.kind.${c}`))},K={label:h("reviewList.facetSession"),value:D(m,"session"),options:W(e,"session",h("reviewList.all"),c=>h(c==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))},N=D(m,"evidence");return n.jsx(Ps,{notice:x,leading:f,error:j,loading:a,title:h("evalsFeed.title"),search:{value:String(o??"").trim()?o:ie,onSubmit:p,placeholder:h("reviewList.searchEvals"),label:h("reviewList.search"),keys:sn,suggest:{node:W(e,"node",h("reviewList.all")).filter(c=>c.value),filer:W(e,"filer",h("reviewList.all")).filter(c=>c.value).map(({value:c})=>{const _=i.find(U=>U.id===c);return{value:c,label:_?ns(_):null}}),scope:i.map(c=>({value:c.id,label:ns(c)}))}},sections:[{key:"fail",label:n.jsx(q,{kind:"eval",state:"fail",title:h("reviewList.verdict.fail"),showLabel:!0}),count:I,active:A==="fail",onSelect:()=>b("verdict",A==="fail"?"":"fail")},{key:"pass",label:n.jsx(q,{kind:"eval",state:"pass",title:h("reviewList.verdict.pass"),showLabel:!0}),count:M,active:A==="pass",onSelect:()=>b("verdict",A==="pass"?"":"pass")}],sectionMode:"filters",facets:n.jsxs(n.Fragment,{children:[n.jsx(ss,{label:v.label,value:v.value,options:v.options,clearLabel:h("reviewList.all"),onChange:c=>b("freshness",c)}),n.jsx(ss,{label:C.label,value:C.value,options:C.options,onChange:c=>b("evidence",c==="all"?"":c)})]}),secondaryFilters:n.jsx(Os,{label:h("reviewList.filters"),clearLabel:h("reviewList.all"),groups:[{label:O.label,value:O.value,active:!!O.value,options:O.options,onChange:c=>b("state",c)},{label:K.label,value:K.value,active:!!K.value,options:K.options,onChange:c=>b("session",c)},{label:v.label,value:v.value,active:!!v.value,options:v.options,onChange:c=>b("freshness",c),mobileOnly:!0},{label:C.label,value:C.value,active:!!N,options:C.options,clearLabel:null,onChange:c=>b("evidence",c==="all"?"":c),mobileOnly:!0}]}),rows:P,pagination:L,empty:S||{hasData:((e==null?void 0:e.sourceTotal)??0)>0,dataset:h("evalsFeed.datasetEmpty"),filtered:h("evalsFeed.noMatches")}})}const ln=[{name:"ok",color:"green",when:e=>!e.okd&&e.isLatest,descKey:"annotator.cmd.okDesc"}];function rn(e,a){return ln.filter(i=>i.when(e)).map(i=>({...i,run:a[i.name]}))}function on(e,a){return(e||"").replace(/\{(\w+)\}/g,(i,o)=>a[o]!=null?String(a[o]):i)}const rs=(e,a)=>{let i=null;for(const o of e)if(o.at<=a)i=o;else break;return i},cn=e=>{if(!e||!Array.isArray(e.events))return null;const a=e.v===1?"time":typeof e.axis=="string"?e.axis:"time",i=e.v===1?o=>o.tMs:o=>o.at;return{axis:a,events:e.events.map(o=>({at:i(o),step:o.step,...o.node?{node:o.node}:{}}))}},un=(e,a,i)=>e==="time"?we(a):e==="frame"?`#${a}`:e==="line"?`L${a}`:e==="index"?i?`${a}/${i}`:`${a}`:String(a);function os({events:e,axis:a,extent:i,activeStepIdx:o,onSeek:p}){return n.jsx("div",{className:"an-ruler",children:e.map((d,x)=>n.jsxs("button",{className:`an-step ${o===x?"on":""}`,onClick:()=>p(d.at),"data-tip":d.node?`→ ${d.node}`:void 0,children:[un(a,d.at,i)," ",d.step]},x))})}const xe=8;function dn({hidden:e,total:a,histIdx:i,onPick:o}){const p=B(),d=Hs(),x=p("annotator.abMore",{n:e.length});return n.jsxs("div",{className:"an-ab-more",ref:d.ref,children:[n.jsx(be,{icon:"ellipsis",size:14,className:"an-ab-morebtn",label:x,"aria-haspopup":"menu","aria-expanded":d.open,onClick:f=>d.toggle(f.currentTarget),onKeyDown:d.onTriggerKeyDown}),d.open&&n.jsx("div",{className:"rl-menu an-ab-menu",role:"menu","aria-label":x,ref:d.menuRef,onKeyDown:d.onMenuKeyDown,children:e.map(f=>{const j=Te(f);return n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":f.idx===i,tabIndex:-1,className:"rl-menu-item an-ab-menuitem",onFocus:d.onItemFocus,onClick:()=>{d.close(!0),o(f.idx)},children:[n.jsx(q,{kind:"eval",state:j,size:13}),n.jsxs("span",{className:"an-ab-menupos",children:[a-f.idx,"/",a]}),n.jsx("span",{className:"an-ab-menudate",children:new Date(f.ts).toLocaleString()})]},`${f.ts}-${f.idx}`)})})]})}function hn({entry:e,history:a,sourceKey:i="project",specs:o=[],sessions:p=[],onWrite:d,onOpenSession:x,onFocusNode:f=null,listHref:j=null,backHref:S=null,backLabel:L=null,queue:h={prev:[],next:[]}}){var Ye,De,Ge,Ze,Je,We;const m=B(),b=r.useRef(null),E=r.useRef(null),y=r.useRef(null),R=r.useRef(null),I=r.useRef(0),[M,A]=r.useState([]),[P,O]=r.useState("time"),[v,C]=r.useState(null),[K,N]=r.useState(""),[re,ee]=r.useState(!1),[c,_]=r.useState(null),U=r.useRef(null),se=r.useRef(null),ne=r.useRef(null),ye=r.useRef(0),[vs,Pe]=r.useState(0),[je,Oe]=r.useState(-1),[Ie,Ke]=r.useState(null),[oe,Ee]=r.useState(!1),[ze,Le]=r.useState(!1),[Me,Ne]=r.useState(null),[ce,$e]=r.useState(null),[T,Be]=r.useState(null),[F,te]=r.useState(0),w=T&&T[F]||e,fs=`${F}:${w.ts||w.codeSha||w.blob||"reading"}`,xs=`${i}·${e.node}·${e.scenario}·${fs}`,[ps,bs]=r.useState([]);r.useEffect(()=>{let s=!0;return Cs().then(t=>{s&&Array.isArray(t)&&bs(t)}).catch(()=>{}),()=>{s=!1}},[]),r.useEffect(()=>{C(null),N(""),A([]),_(null),te(0),Be(null),Be(Array.isArray(a)?a:[e])},[e.node,e.scenario,e.ts,e.blob,(Ye=e.humanOk)==null?void 0:Ye.ts,a]),r.useEffect(()=>{C(null),_(null)},[F]);const ae=Ks(w),V=ae.find(s=>s.kind==="video"&&s.state==="present"),ue=ae.filter(s=>s.kind==="image"),ws=ae.filter(s=>s.kind!=="video"&&s.kind!=="image"),H=!!V,de=e.thread??null,Se=r.useMemo(()=>((de==null?void 0:de.replies)??[]).filter(s=>s.rid!==void 0),[de]),_e=T&&((De=T[0])==null?void 0:De.by)||e.by||null,z=r.useMemo(()=>Se.map((s,t)=>{const l=zs(Bs(s.body),M);return l&&l.seekable?{i:t,tMs:l.tMs,step:l.step,label:l.label}:null}).filter(Boolean).sort((s,t)=>s.tMs-t.tMs),[Se,M]),qe=r.useRef(M);qe.current=M;const Ue=r.useRef(z);Ue.current=z;const he=r.useCallback(()=>{const s=ye.current,t=qe.current;let l=-1;for(let g=0;g<t.length&&t[g].at<=s;g++)l=g;Oe(g=>g===l?g:l);let u=null;for(const g of Ue.current)if(g.tMs<=s)u=g.i;else break;Ke(g=>g===u?g:u)},[]);r.useEffect(()=>{he()},[z,M,he]),r.useEffect(()=>{ye.current=0,U.current&&(U.current.style.width="0%"),se.current&&(se.current.style.left="0%"),ne.current&&(ne.current.textContent=""),Oe(-1),Ke(null),Pe(0),Ee(!1),Le(!1),Ne(null),$e(null)},[e.blob,e.scenario,e.node]),r.useEffect(()=>{if(A([]),O("time"),!w.timelineBlob)return;let s=!0;return fetch(ke(`/api/evidence/${w.timelineBlob}`)).then(t=>t.ok?t.json():null).then(t=>{const l=s&&cn(t);l&&(A(l.events),O(l.axis))}).catch(()=>{}),()=>{s=!1}},[w.timelineBlob]),r.useEffect(()=>{const s=b.current;if(!s)return;const t=()=>{const k=Math.round((s.currentTime||0)*1e3),$=Math.round((s.duration||0)*1e3);ye.current=k;const Q=$?k/$*100:0;U.current&&(U.current.style.width=`${Q}%`),se.current&&(se.current.style.left=`${Q}%`),ne.current&&(ne.current.textContent=`${we(k)} / ${we($)}`),he()},l=()=>{Pe(s.duration||0),t()},u=()=>Ee(!0),g=()=>Ee(!1);return s.addEventListener("timeupdate",t),s.addEventListener("seeked",t),s.addEventListener("loadedmetadata",l),s.addEventListener("durationchange",l),s.addEventListener("play",u),s.addEventListener("pause",g),l(),()=>{s.removeEventListener("timeupdate",t),s.removeEventListener("seeked",t),s.removeEventListener("loadedmetadata",l),s.removeEventListener("durationchange",l),s.removeEventListener("play",u),s.removeEventListener("pause",g)}},[V==null?void 0:V.hash,e.node,e.scenario,F,he]);const X=Math.round(vs*1e3),me=M[je]||null,Ve=P==="time"?X:P==="frame"?ue.length:P==="index"?M.length:0,Z=r.useCallback(s=>{const t=b.current;t&&(t.currentTime=s/1e3)},[]),ve=r.useCallback(()=>{const s=b.current;s&&(s.paused?s.play():s.pause())},[]),He=(s,t)=>{$e(s),t!=null&&Z(t)},fe=r.useCallback(async s=>{const t=b.current;if(!(t!=null&&t.videoWidth))return null;ee(!0),N(m("annotator.capturing"));try{t.seeking&&await new Promise($=>t.addEventListener("seeked",$,{once:!0}));const l=document.createElement("canvas");l.width=t.videoWidth,l.height=t.videoHeight;const u=l.getContext("2d");u.drawImage(t,0,0,l.width,l.height),s&&(u.strokeStyle="#ff9a3c",u.lineWidth=Math.max(2,l.width/300),u.strokeRect(s.x/100*l.width,s.y/100*l.height,s.w/100*l.width,s.h/100*l.height));const g=await new Promise($=>l.toBlob($,"image/png")),{hash:k}=await Ts(g);if(!k)throw new Error("no hash");return N(""),k}catch{return N(m("annotator.failed")),null}finally{ee(!1)}},[m]),ks=r.useCallback(async()=>{var l;const s=b.current;if(!s)return null;s.pause();const t=Math.round((s.currentTime??0)*1e3);return{tMs:t,step:((l=rs(M,t))==null?void 0:l.step)??null,frame:await fe(null)}},[M,fe]),Re=r.useCallback(async s=>{const t=b.current;if(!t)return;t.pause();const l=Math.round((t.currentTime||0)*1e3),u=rs(M,l),g=await fe(s),k=[_s(l,u==null?void 0:u.step)];g&&k.push(``),u!=null&&u.node&&u.node!==e.node&&k.push(`re: [[${u.node}]]`),k.push(""),_({seq:++I.current,body:k.join(`
|
|
2
|
+
`)})},[M,e.node,fe]),Ce=r.useCallback(s=>{var u;if(!z.length)return;let t=z.findIndex(g=>g.i===ce);if(t<0){const g=Math.round((((u=b.current)==null?void 0:u.currentTime)||0)*1e3);t=z.reduce((k,$,Q)=>$.tMs<=g?Q:k,-1)}t=Math.min(z.length-1,Math.max(0,t+s));const l=z[t];$e(l.i),Z(l.tMs)},[z,ce,Z]);r.useEffect(()=>{if(!H)return;const s=t=>{const l=document.activeElement;if(l&&(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.tagName==="SELECT"||l.isContentEditable))return;const u=b.current;u&&(t.key===" "?(t.preventDefault(),ve()):t.key==="ArrowRight"?(t.preventDefault(),u.currentTime=Math.min(u.duration||u.currentTime,u.currentTime+(t.shiftKey?1:5))):t.key==="ArrowLeft"?(t.preventDefault(),u.currentTime=Math.max(0,u.currentTime-(t.shiftKey?1:5))):t.key===","?(t.preventDefault(),u.currentTime=Math.max(0,u.currentTime-1/30)):t.key==="."?(t.preventDefault(),u.duration&&(u.currentTime=Math.min(u.duration,u.currentTime+1/30))):t.key==="ArrowDown"?(t.preventDefault(),Ce(1)):t.key==="ArrowUp"?(t.preventDefault(),Ce(-1)):(t.key==="a"||t.key==="A")&&(t.preventDefault(),Re(null)))};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[H,ve,Ce,Re]);const Xe=s=>{var u;const t=(u=y.current)==null?void 0:u.getBoundingClientRect(),l=b.current;!t||!t.width||!l||!l.duration||(l.currentTime=Math.min(1,Math.max(0,(s-t.left)/t.width))*l.duration)},gs=s=>{s.preventDefault(),Le(!0),Xe(s.clientX)},ys=s=>{var l;const t=(l=y.current)==null?void 0:l.getBoundingClientRect();t!=null&&t.width&&Ne(Math.min(100,Math.max(0,(s.clientX-t.left)/t.width*100)))};r.useEffect(()=>{if(!ze)return;const s=l=>Xe(l.clientX),t=()=>Le(!1);return window.addEventListener("mousemove",s),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",t)}},[ze]);const Qe=s=>{const t=E.current.getBoundingClientRect();return{x:(s.clientX-t.left)/t.width*100,y:(s.clientY-t.top)/t.height*100}},js=s=>{if(s.button!==0||re)return;const t=Qe(s);C({x0:t.x,y0:t.y,x:t.x,y:t.y})},Es=s=>{var l,u;if(!v)return;const t=Qe(s);!((l=b.current)!=null&&l.paused)&&(Math.abs(t.x-v.x0)>1||Math.abs(t.y-v.y0)>1)&&((u=b.current)==null||u.pause()),C({...v,x:t.x,y:t.y})},Ls=()=>{if(!v)return;const s={x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)};if(C(null),s.w<1&&s.h<1){ve();return}Re(s)},le=v&&{x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)},Ms=async()=>{const s=await As(e.node,e.scenario).catch(t=>({error:String(t)}));d==null||d((s==null?void 0:s.error)||"")},Ns=[...rn({okd:!!w.humanOk,isLatest:!T||F===0},{ok:Ms}).map(s=>({name:s.name,description:m(s.descKey),ui:!0,color:s.color,run:s.run})),...ps.map(s=>({name:s.name,description:s.desc||s.title,source:"review",prefill:()=>on(s.body,{node:e.node,scenario:e.scenario,expected:w.expected||""})}))],$s=n.jsxs(n.Fragment,{children:[n.jsx(q,{kind:"eval",state:Te(w),showLabel:!0,className:"an-verdict-badge",size:16}),w.humanOk&&n.jsxs("span",{className:"an-okd","data-tip":m("annotator.okBy",{by:w.humanOk.by,at:new Date(w.humanOk.ts).toLocaleString()}),children:[n.jsx(G,{name:"circle-check",size:14})," ",m("annotator.okd")]}),T&&T.length>1&&(()=>{const s=T.length,t=Math.min(xe,s),l=F<xe?Array.from({length:t},(k,$)=>t-1-$):[F,...Array.from({length:xe-1},(k,$)=>xe-2-$)],u=new Set(l),g=T.map((k,$)=>({...k,idx:$})).filter(k=>!u.has(k.idx));return n.jsxs("div",{className:"an-ab",children:[n.jsx(be,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:F>=T.length-1,onClick:()=>te(k=>Math.min(T.length-1,k+1)),label:m("annotator.abOlder")}),g.length>0&&n.jsx(dn,{hidden:g,total:s,histIdx:F,onPick:te}),n.jsx("div",{className:"an-ab-track",children:l.map(k=>{const $=T[k],Q=Te($);return n.jsx("button",{type:"button",className:`an-ab-pip ${k===F?"on":""}`,"aria-current":k===F?"true":void 0,onClick:()=>te(k),"aria-label":`${s-k}/${s} · ${m(`score.${Q}`)} · ${new Date($.ts).toLocaleString()}`,children:n.jsx(q,{kind:"eval",state:Q,size:13})},`${$.ts}-${k}`)})}),n.jsx(be,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:F<=0,onClick:()=>te(k=>Math.max(0,k-1)),label:m("annotator.abNewer")}),n.jsx("span",{className:"an-ab-pos",children:F===0?m("annotator.abLatest"):m("annotator.abPos",{i:T.length-F,n:T.length})})]})})()]}),Ss=n.jsxs(n.Fragment,{children:[n.jsxs(J,{label:m("detail.sideReading"),children:[w.evaluator&&n.jsx(Y,{text:w.evaluator}),n.jsx(Y,{text:new Date(w.ts).toLocaleString()})]}),n.jsx(J,{label:m("detail.sideNode"),children:n.jsx(Y,{text:e.node,mono:!0,tip:f?m("session.issuesFocusNode"):e.node,onClick:f?()=>f(e.node):null})}),_e&&n.jsx(J,{label:m("detail.sideFiler"),children:n.jsx(qs,{originator:_e,sessions:p,kind:"eval",onOpenSession:x})}),w.humanOk&&n.jsxs(J,{label:m("detail.sideOk"),children:[n.jsx(Y,{text:`☑ ${w.humanOk.by}`}),n.jsx(Y,{text:new Date(w.humanOk.ts).toLocaleString(),dim:!0})]}),!w.fresh&&(((Ge=w.staleAxes)==null?void 0:Ge.length)??0)>0&&n.jsxs(J,{label:m("nodeView.eval.staleLabel"),children:[n.jsx(Y,{text:w.staleAxes.join(" · "),tip:m("nodeView.eval.staleReadoutTitle")}),(((Ze=w.codeDrift)==null?void 0:Ze.length)??0)>0&&n.jsx(Y,{text:w.codeDrift.map(s=>`${s.file.split("/").pop()} +${s.behind}`).join(", "),dim:!0})]}),(h.prev.length>0||h.next.length>0)&&n.jsx(J,{label:m("detail.sideQueue"),children:[["prev",m("detail.queuePrev")],["next",m("detail.queueNext")]].map(([s,t])=>h[s].length>0&&n.jsxs("div",{className:"ds-queue-group",children:[n.jsx("span",{className:"ds-queue-group-label",children:t}),h[s].map(l=>n.jsxs("a",{className:"ds-queue-row",href:l.href,"data-tip":`${l.node} · ${l.scenario}`,children:[n.jsx(q,{kind:"eval",state:l.state,size:13}),n.jsx("span",{className:"ds-queue-scenario",children:l.scenario}),n.jsx("span",{className:"ds-queue-node",children:l.node})]},l.key))]},s))})]}),Rs=n.jsx(Us,{onSend:(s,t)=>Fs({node:e.node,scenario:e.scenario,body:s,codeSha:w.codeSha,evidence:t}),specs:o,sessions:p,focusId:e.node,onDone:d,anchorNow:H?ks:null,draft:c,commands:Ns},xs);return n.jsxs(Fe,{title:e.scenario,titleMeta:n.jsx("span",{className:"an-node",children:e.node}),status:$s,side:Ss,composer:Rs,listHref:j,backHref:S,backLabel:L,children:[w.expected&&n.jsxs("div",{className:"an-expected",children:[n.jsx("b",{children:m("nodeView.eval.expected")})," ",w.expected]}),ae.length>0&&((Je=w.verdict)==null?void 0:Je.note)&&n.jsxs("div",{className:"an-expected an-prior-note",children:[n.jsx("b",{children:m("nodeView.eval.noteLabel")})," ",w.verdict.note]}),V&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"an-player",ref:R,children:[n.jsxs("div",{className:`an-stage ${oe?"playing":"paused"}`,ref:E,onMouseDown:js,onMouseMove:Es,onMouseUp:Ls,children:[n.jsx("video",{className:"an-video",ref:b,src:ke(`/api/evidence/${V.hash}`),preload:"metadata",playsInline:!0}),le&&n.jsx("div",{className:"an-rect live",style:{left:`${le.x}%`,top:`${le.y}%`,width:`${le.w}%`,height:`${le.h}%`}}),!oe&&!v&&n.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:n.jsx(G,{name:"play",size:22})})]}),n.jsxs("div",{className:"an-bar",children:[n.jsx(be,{icon:oe?"pause":"play",size:14,className:"an-play",label:m(oe?"annotator.pause":"annotator.play"),onClick:ve}),n.jsxs("div",{className:"an-seek",ref:y,onMouseDown:gs,onMouseMove:ys,onMouseLeave:()=>Ne(null),children:[n.jsx("div",{className:"an-seek-trk"}),X>0&&P==="time"&&M.map((s,t)=>n.jsx("div",{className:"an-band",style:{left:`${s.at/X*100}%`},"data-tip":s.step},`band-${t}`)),n.jsx("div",{className:"an-seek-play",ref:U}),X>0&&z.map(s=>n.jsx("button",{type:"button",className:`an-mk ${ce===s.i?"on":""} ${Ie===s.i?"active":""}`,style:{left:`${s.tMs/X*100}%`},"data-tip":s.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),He(s.i,s.tMs)}},`mk-${s.i}`)),n.jsx("div",{className:"an-knob",ref:se}),Me!=null&&X>0&&n.jsx("div",{className:"an-seek-hov",style:{left:`${Me}%`},children:we(Me/100*X)})]}),n.jsx("span",{className:"an-time",ref:ne}),me&&n.jsx("span",{className:"an-curstep","data-tip":me.node?`→ ${me.node}`:void 0,children:me.step}),n.jsx(Vs,{target:R})]})]}),M.length>0&&n.jsx(os,{events:M,axis:P,extent:Ve,activeStepIdx:je,onSeek:Z}),K&&n.jsx("div",{className:"an-flash",children:K})]}),!V&&M.length>0&&n.jsx(os,{events:M,axis:P,extent:Ve,activeStepIdx:je,onSeek:Z}),ue.length>0&&n.jsx("div",{className:"an-gallery",children:ue.map((s,t)=>n.jsx(as,{e:s,alt:e.scenario},`${s.hash}-${t}`))}),ws.map((s,t)=>n.jsx(as,{e:s,alt:e.scenario,collapsed:H||ue.length>0},`${s.hash}-${t}`)),ae.length===0&&((We=w.verdict)!=null&&We.note?n.jsx("pre",{className:"eval-transcript",children:w.verdict.note}):n.jsx("div",{className:"an-hint",children:m("nodeView.eval.noImage")})),n.jsx(mn,{entry:e,comments:Se,seekMs:H?Z:null,selIdx:ce,activeIdx:Ie,onSelect:H?He:null,events:H?M:null,onWrite:d})]})}function mn({entry:e,comments:a,seekMs:i,selIdx:o,activeIdx:p,onSelect:d,events:x,onWrite:f}){var S;const j=B();return n.jsxs("section",{className:"an-thread",children:[n.jsx("div",{className:"an-comments-head",children:n.jsx("span",{children:j("annotator.comments",{n:a.length})})}),n.jsx(Xs,{replies:a,onSeek:i,selIdx:o,activeIdx:p,onSelect:d,events:x,threadId:((S=e.thread)==null?void 0:S.id)??null,onRemarkChange:()=>f==null?void 0:f("")})]})}const pe=new Map;function cs(e,a){if(!(e!=null&&e.evalRevision)||!(a!=null&&a.epoch))return!0;const i=e.evalRevision;return i.epoch!==a.epoch||i.generation<a.generation?!1:i.generation!==a.generation?!0:!(a.revision&&i.content!==a.revision||a.value&&(!e.summary||["measured","total","pass","fail","review","blind","unknown"].some(p=>e.summary[p]!==a.value[p])))}function us(e,a,i){const o=`${i||""}\0${e}\0${a}`;if(pe.has(o))return pe.get(o);const p=new URLSearchParams({node:e,scenario:a});i&&p.set("scope",i);const d=fetch(ke(`/api/evals/detail?${p}`),{cache:"no-store"}).then(x=>x.ok?x.json():x.status===404?!1:Promise.reject(new Error(`HTTP ${x.status}`))).finally(()=>pe.delete(o));return pe.set(o,d),d}function vn(e,a,i,o=!0){const p=String(e||"").indexOf("/"),d=p>0?e.slice(0,p):e,x=p>0?e.slice(p+1):"",f=`${a||""}\0${d}\0${x}`,[j,S]=r.useState({identity:"",data:null,error:null}),L=r.useRef(0),h=r.useRef(i);h.current=i;const m=r.useCallback(()=>{if(!o||!d||!x)return Promise.resolve();const E=++L.current;return S(y=>y.identity===f?{...y,error:null}:{identity:f,data:null,error:null}),us(d,x,a).then(async y=>{if(E===L.current){if(y&&!cs(y,h.current)){const R=await us(d,x,a);if(E!==L.current)return;if(R&&!cs(R,h.current))throw new Error("stale session eval detail");y=R}S({identity:f,data:y,error:null})}}).catch(y=>{if(E!==L.current)return;const R=y instanceof Error?y.message:String(y);S(I=>({identity:f,data:I.identity===f&&I.data?I.data:!1,error:R}))})},[o,f,d,x,a]);r.useEffect(()=>{o&&m()},[o,d,x,a,i==null?void 0:i.epoch,i==null?void 0:i.generation,i==null?void 0:i.revision]);const b=j.identity===f?j:{data:null,error:null};return{data:b.data,error:b.error,reload:m}}function fn({sessionId:e}){const i=B()("sessionEval.scopeDoor");return n.jsx("a",{className:"se-door",href:ge(en(e)),"data-tip":i,"aria-label":i,children:n.jsx(G,{name:"arrow-left",size:16})})}function xn({sessionId:e,pageData:a,loading:i,error:o,sessions:p,queryText:d,onQueryText:x,hrefFor:f,hrefForPage:j,notice:S}){const L=B(),h=(a==null?void 0:a.unknown)||0,m=e&&!i&&!o&&((a==null?void 0:a.sourceTotal)??0)===0?L("sessionEval.none"):null,b=e?n.jsxs("div",{className:"se-gates",children:[n.jsx(fn,{sessionId:e}),a&&a.gates.map(E=>n.jsxs("span",{className:`se-gate ${E.ok?"ok":"bad"}`,"data-tip":E.detail,children:[n.jsx(G,{name:E.ok?"check":"x",size:11})," ",E.label]},E.label)),h>0&&n.jsxs("span",{className:"se-gate bad","data-tip":L("sessionEval.unknownCoverage",{n:h}),children:[n.jsx(G,{name:"info",size:11})," ",h]}),a&&n.jsx("span",{className:"se-acts",children:n.jsx("a",{className:"se-export",href:ke(`/api/sessions/${encodeURIComponent(e)}/evals?format=html`),target:"_blank",rel:"noreferrer","data-tip":L("sessionEval.exportTitle"),"aria-label":L("sessionEval.export"),children:n.jsx(G,{name:"download",size:13})})})]}):null;return n.jsx(an,{pageData:a,loading:i,sessions:p,queryText:d,onQueryText:x,hrefFor:f,notice:S,leading:b,error:o?L("sessionEval.loadFailed",{reason:o}):null,empty:m,pagination:a?{page:a.page,pageCount:a.pageCount,prev:a.prev,next:a.next,hrefFor:j}:null})}function pn({param:e,detail:a,sessionId:i,loading:o=!1,error:p,specs:d,sessions:x,listHref:f,backHref:j,backLabel:S,onOpenSession:L,onFocusNode:h,onWrite:m,notice:b}){const E=B(),y=e.indexOf("/"),R=y>0?e.slice(0,y):e,I=y>0?e.slice(y+1):null,M=r.useMemo(()=>{const P=v=>({key:ms(v),node:v.node,scenario:v.scenario,state:v.state,href:ge(i?Ae(i,v.node,v.scenario):hs(v.node,v.scenario))}),O=(a==null?void 0:a.neighbors)||{prev:[],next:[]};return{prev:O.prev.map(P),next:O.next.map(P)}},[a==null?void 0:a.neighbors,i]);if(p)return n.jsx(Fe,{failure:E("sessionEval.loadFailed",{reason:p}),listHref:f,listLabel:E("reviewShell.backToEvals")});if(o)return n.jsx("div",{className:"fv-note",children:E("common.loading")});const A=(a==null?void 0:a.selected)||null;return A?n.jsxs("div",{className:"page-detail-stack",children:[b&&n.jsx("div",{className:"fv-notice",children:b}),n.jsx(hn,{entry:A,history:a.history,sourceKey:i||"project",specs:d,sessions:x,onOpenSession:L,onFocusNode:h,onWrite:m,listHref:f,backHref:j,backLabel:S,queue:M})]}):n.jsx(Fe,{missing:E("reviewShell.evalNotFound",{node:R,scenario:I||""}),listHref:f,listLabel:E("reviewShell.backToEvals")})}function yn({specs:e=[],sessions:a=[],reloadBoard:i,onOpenSession:o,onFocusNode:p=null}){var K;const d=B(),{param:x,query:f}=Qs(),j=D(f.q||"","scope")||null,S=((K=a.find(N=>N.id===j))==null?void 0:K.evalSummary)||null,L=vn(x,j,S,!!x),h=String(f.q??"").trim()||ie,m=Ys(f.page),b=Ds("evals",h,m,{enabled:!x,refreshKey:e}),[E,y]=r.useState(""),R=N=>{N&&(y(N),setTimeout(()=>y(""),6e3))},I=async N=>{R(N),await(i==null?void 0:i()),await L.reload()},M=N=>ge(j?Ae(j,N.node,N.scenario):hs(N.node,N.scenario)),A=j?ge(Ae(j)):ls("evals"),P=Gs("evals",j),O=d("detail.backToEvals"),v=N=>Zs("evals",null,{query:Js(N,ie)}),C=N=>ls("evals",null,Ws(h,ie,N));return x?n.jsx(pn,{param:x,detail:L.data&&L.data!==!1?L.data:null,sessionId:j,loading:L.data===null,error:L.error,specs:e,sessions:a,listHref:A,backHref:P,backLabel:O,onOpenSession:o,onFocusNode:p,onWrite:I,notice:E}):n.jsx(xn,{sessionId:j,pageData:b.data,loading:b.loading,error:b.error,sessions:a,queryText:f.q||"",onQueryText:v,hrefFor:M,hrefForPage:C,notice:E})}export{pn as EvalDetailPage,fn as EvalScopeDoor,xn as EvalsListPage,yn as default,cs as detailMatchesProjection};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as P,r as v,j as s,
|
|
1
|
+
import{u as P,r as v,j as s,a1 as Y,a2 as z,a3 as Q,I as U,a4 as G,a5 as V}from"./index-D6HBvKkJ.js";import{k as X,at as I,ap as J,d as Z,aj as D,r as T,au as W,ao as ee,ai as se,af as R,ag as C,ah as te,X as _,aq as ne,u as ie,a3 as M,a4 as oe,av as le,a5 as ae,as as re,a6 as ce,a7 as ue,n as de,ar as fe,C as pe,aw as me,O as ve,U as xe,a8 as be}from"./SessionWindow-BWH5O0jh.js";import{M as ge}from"./Modal-3brXUhM0.js";import"./PageScroll-CadAKuSy.js";const ye=e=>e.status!=="open",je=e=>{const r=Math.max(0,(Date.now()-new Date(e).getTime())/1e3);return Number.isFinite(r)?r<3600?`${Math.max(1,Math.floor(r/60))}m`:r<86400?`${Math.floor(r/3600)}h`:`${Math.floor(r/86400)}d`:""},we=e=>{const r=String(e||"").split("#"),l=r.length>1?r.at(-1):r[0];return`#${l.length>16?`${l.slice(0,13)}…`:l}`},he=["is","state","store","author","node","session"],A=(e,r,l,f=u=>u)=>{var u,o;return(((o=(u=e==null?void 0:e.facets)==null?void 0:u[r])==null?void 0:o.options)??[]).map(a=>({value:a.value,label:a.value===""?l:f(a.value)}))};function Se({data:e,loading:r,error:l,reload:f,specs:u,sessions:o,query:a,notice:c,flash:d}){var B,$,q,O;const i=P(),[p,x]=v.useState(!1);if(ie(p,()=>x(!1)),e&&!e.enabled)return s.jsx("div",{className:"fv-note",children:i("session.issuesOff")});const b=Array.isArray(e==null?void 0:e.items)?e.items:[],g=String(a.q??"").trim()||I,w=n=>de("issues",null,{query:fe(n,I)}),y=(n,F)=>w(be(g,n,F)),L=((($=(B=e==null?void 0:e.facets)==null?void 0:B.store)==null?void 0:$.options)??[]).map(n=>n.value).filter(Boolean),N=Array.isArray(e==null?void 0:e.stores)&&e.stores.length?e.stores:[{id:"local",label:"local",kind:"local"}],h=b,m=((q=e==null?void 0:e.counts)==null?void 0:q.open)||0,S=((O=e==null?void 0:e.counts)==null?void 0:O.closed)||0,t=M(g,"state"),j=h.map(n=>{var K,H;const F=n.status||"open";return{key:n.id,href:T("issues",n.id),content:s.jsx(s.Fragment,{children:s.jsx(oe,{state:s.jsx(_,{kind:"issue",state:F}),title:n.concern,meta:s.jsxs(s.Fragment,{children:[s.jsx("span",{"data-tip":n.id,children:we(n.id)}),n.by&&s.jsx("span",{"data-tip":n.by,children:i("reviewList.openedBy",{by:le(n.by)})}),n.created&&s.jsx("span",{children:i("reviewList.openedAt",{at:je(n.created)})})]}),aside:s.jsxs(s.Fragment,{children:[(((K=n.replies)==null?void 0:K.length)??0)>0&&s.jsxs("span",{className:"rl-comments","data-tip":i("session.issuesReplies",{n:n.replies.length}),children:[s.jsx(U,{name:"message-square",size:14}),n.replies.length]}),L.length>1&&s.jsx("span",{className:`rl-tag fv-store-${n.store==="local"?"local":"forge"}`,children:n.store}),((H=n.nodes)==null?void 0:H[0])&&s.jsx("span",{className:"rl-tag node",children:n.nodes[0]})]})})})}}),k={label:i("reviewList.facetStore"),value:M(g,"store"),options:A(e,"store",i("reviewList.all"))},E={label:i("reviewList.facetSession"),value:M(g,"session"),options:A(e,"session",i("reviewList.all"),n=>i(n==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))};return s.jsx(ae,{notice:c,loading:r,error:l,title:i("reviewList.issuesTitle"),action:s.jsxs("button",{type:"button",className:"rl-new",onClick:()=>x(!0),children:[s.jsx(U,{name:"plus",size:14}),i("session.issuesNew")]}),search:{value:String(a.q??"").trim()?a.q:I,onSubmit:w,placeholder:i("reviewList.searchIssues"),label:i("reviewList.search"),keys:he,suggest:{author:A(e,"author",i("reviewList.all")).filter(n=>n.value),node:A(e,"node",i("reviewList.all")).filter(n=>n.value)}},sections:[{key:"open",label:i("reviewList.open"),count:m,active:t===""||t==="open",onSelect:()=>y("state","open")},{key:"closed",label:i("reviewList.closed"),count:S,active:t!==""&&t!=="open",onSelect:()=>y("state","closed")}],facets:s.jsx(ue,{label:k.label,value:k.value,options:k.options,clearLabel:i("reviewList.all"),onChange:n=>y("store",n),mobile:!0}),secondaryFilters:s.jsx(ce,{label:i("reviewList.filters"),clearLabel:i("reviewList.all"),groups:[{label:E.label,value:E.value,active:!!E.value,options:E.options,onChange:n=>y("session",n)}]}),rows:j,pagination:e?{page:e.page,pageCount:e.pageCount,prev:e.prev,next:e.next,hrefFor:n=>T("issues",null,re(g,I,n))}:null,empty:{hasData:((e==null?void 0:e.sourceTotal)??0)>0,dataset:i("session.issuesEmpty"),filtered:i("session.issuesNoMatch")},children:p&&s.jsx(ge,{title:i("session.issuesNew"),closeLabel:i("common.close"),onClose:()=>x(!1),className:"fv-new-modal",children:s.jsx(Ie,{specs:u,sessions:o,stores:N,onCancel:()=>x(!1),onDone:async n=>{x(!1),d(n),await(f==null?void 0:f())}})})})}function Le({issue:e,specs:r,sessions:l,onFocusNode:f,onOpenSession:u,onWrite:o,notice:a}){const c=P(),d=e.store==="local",i=ye(e),[p,x]=v.useState(""),[b,g]=v.useState(""),w=Array.isArray(e.nodes)?e.nodes:[],y=Array.isArray(e.replies)?e.replies:[],L=e.status||"open",N=(m,S)=>async()=>{if(!p){x(m);try{const t=await S();t!=null&&t.ok?(g(""),await(o==null?void 0:o(""))):g((t==null?void 0:t.error)||`${m} failed`)}finally{x("")}}},h=(m,S,t,j)=>s.jsx("button",{type:"button",className:`fv-close-issue fv-life-${m}`,disabled:!!p,"data-tip":j,onMouseDown:k=>k.preventDefault(),onClick:N(m,t),children:p===m?c("session.issuesActing"):S});return s.jsxs(D,{title:e.concern,backHref:ne("issues"),backLabel:c("detail.backToIssues"),status:s.jsx(_,{kind:"issue",state:L,showLabel:!0,className:"ds-status-pill",size:16}),side:s.jsxs(s.Fragment,{children:[s.jsx(R,{label:c("detail.sideIssue"),children:s.jsx(C,{text:e.id,mono:!0})}),s.jsxs(R,{label:c("detail.sideStore"),children:[s.jsx(C,{text:e.store,className:`fv-store fv-store-${d?"local":"forge"}`}),e.url&&s.jsx(C,{text:c("session.issuesOpenOnStore",{store:Ce(e.store)}),href:e.url,external:!0})]}),e.by&&s.jsx(R,{label:c("detail.sideOriginator"),children:d?s.jsx(te,{originator:e.by,sessions:l,kind:"issue",onOpenSession:u}):s.jsx(C,{text:e.by,dim:!0})}),w.length>0&&s.jsx(R,{label:c("detail.sideNodes"),children:w.map(m=>s.jsx(C,{text:m,mono:!0,tip:c("session.issuesFocusNode"),onClick:()=>f==null?void 0:f(m)},m))})]}),composer:s.jsx(se,{onSend:(m,S)=>Q(e.id,m,S),specs:r,sessions:l,focusId:w[0]||null,onDone:o,actionsEnd:!i&&s.jsxs(s.Fragment,{children:[b&&s.jsx("span",{className:"fv-error",children:b}),d&&h("promote",c("session.issuesPromote"),()=>Y(e.id),c("session.issuesPromoteTitle")),h("close",c("session.issuesCloseIssue"),()=>z(e.id),c("session.issuesCloseIssueTitle"))]})},e.id),children:[a&&s.jsx("div",{className:"fv-notice",children:a}),e.body&&s.jsx("div",{className:"fvd-body",children:s.jsx(W,{body:e.body})}),s.jsx(ee,{replies:y,threadId:d?e.id:null,onRemarkChange:()=>o==null?void 0:o("")})]})}function Ne(e){const[r,l]=v.useState(null),[f,u]=v.useState(null),o=v.useRef(0),a=v.useCallback(async()=>{if(!e)return null;const c=++o.current;u(null);try{const d=await G(e);return c===o.current&&l(d),d}catch(d){return c===o.current&&(l(!1),u(d instanceof Error?d.message:String(d))),null}},[e]);return v.useEffect(()=>{l(null),u(null),e&&a()},[e,a]),{issue:r,error:f,reload:a}}function Pe({onFocusNode:e,onOpenSession:r,specs:l=[],sessions:f=[]}){const u=P(),{param:o,query:a}=X(),c=String(a.q??"").trim()||I,d=J(a.page),i=Z("issues",c,d,{enabled:!o,refreshKey:f}),p=Ne(o),[x,b]=v.useState(""),g=y=>{y&&(b(y),setTimeout(()=>b(""),6e3))},w=async y=>{g(y),await(o?p.reload():i.reload())};return o?p.issue==null?s.jsx("div",{className:"fv-note",children:u("session.issuesLoading")}):p.error?s.jsx(D,{failure:p.error,listHref:T("issues"),listLabel:u("reviewShell.backToIssues")}):p.issue===!1?s.jsx(D,{missing:u("reviewShell.issueNotFound",{id:o}),listHref:T("issues"),listLabel:u("reviewShell.backToIssues")}):s.jsx(Le,{issue:p.issue,specs:l,sessions:f,onFocusNode:e,onOpenSession:r,onWrite:w,notice:x}):s.jsx(Se,{data:i.data,loading:i.loading,error:i.error,reload:i.reload,specs:l,sessions:f,query:a,notice:x,flash:g})}const ke={github:"GitHub",gitlab:"GitLab"},Ce=e=>ke[e]||e;function Ie({specs:e,sessions:r,stores:l,onCancel:f,onDone:u}){var S;const o=P(),[a,c]=v.useState(((S=l[0])==null?void 0:S.id)||"local"),[d,i]=v.useState(""),[p,x]=v.useState(""),[b,g]=v.useState(!1),[w,y]=v.useState(""),L=v.useRef(null),{launchers:N}=pe(),h=me({inputRef:L,value:p,setValue:x,specs:e,sessions:r,launchers:N,up:!0,fixedAbove:".fv-new-modal"});v.useEffect(()=>{var t;l.some(j=>j.id===a)||c(((t=l[0])==null?void 0:t.id)||"local")},[l,a]);const m=async()=>{const t=d.trim();if(!(!t||b)){g(!0),y("");try{const j=await V({concern:t,body:p.trim()||void 0,store:a});j!=null&&j.ok?(i(""),x(""),await(u==null?void 0:u(j.outcomes||""))):y((j==null?void 0:j.error)||o("session.issuesPostFailed"))}finally{g(!1)}}};return s.jsxs("div",{className:"fv-new-form",children:[s.jsxs("label",{className:"fv-store-pick",children:[s.jsx("span",{children:o("session.issuesStoreLabel")}),s.jsx("select",{value:a,disabled:b,onChange:t=>c(t.target.value),children:l.map(t=>s.jsx("option",{value:t.id,children:t.label||t.id},t.id))})]}),s.jsx("input",{className:"fv-input",value:d,placeholder:o("session.issuesConcernPlaceholder"),disabled:b,onChange:t=>i(t.target.value)}),s.jsxs("div",{className:"fv-tawrap",children:[s.jsx(ve,{ref:L,className:"fv-textarea",rows:3,value:p,placeholder:o("session.issuesBodyPlaceholder"),disabled:b,onChange:t=>{x(t.target.value),h.sync(t.target)},onSelect:t=>h.sync(t.target),onBlur:h.close,onKeyDown:t=>{xe(t)||h.onKeyDown(t)||t.key==="Enter"&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),m())}}),h.menuEl]}),s.jsxs("div",{className:"fv-actions",children:[w&&s.jsx("span",{className:"fv-error",children:w}),s.jsx("button",{type:"button",className:"fv-cancel",disabled:b,onClick:f,children:o("common.cancel")}),s.jsx("button",{type:"button",className:"fv-post",disabled:b||!d.trim(),onClick:m,children:o(b?"session.issuesSending":"session.issuesPost")})]})]})}export{he as ISSUE_QUERY_KEYS,Le as IssueDetailPage,Se as IssuesListPage,Pe as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EvalsPage-
|
|
2
|
-
import{u as E,r as o,j as s,_ as P}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EvalsPage-KbMMownG.js","assets/index-D6HBvKkJ.js","assets/index-DFdlYy4H.css","assets/SessionWindow-BWH5O0jh.js","assets/PageScroll-CadAKuSy.js","assets/IssuesPage-DmyLb9Rj.js","assets/Modal-3brXUhM0.js","assets/Settings-COgdKTJB.js","assets/bindings-BC9vqpYU.js","assets/terminalFont-DmTPNdbU.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as E,r as o,j as s,_ as P}from"./index-D6HBvKkJ.js";import{k as D,n as y,p as V,q as H,A as R,f as z,t as $,H as B,I as U,v as q,w as J,x as Q,y as Z,R as G,z as K,S as F,B as W,C as X,s as Y,c as ss,D as es,F as as,J as ns}from"./SessionWindow-BWH5O0jh.js";import{T as ls}from"./TimelineChat-DQ21GSJK.js";import"./PageScroll-CadAKuSy.js";const ts=o.lazy(()=>P(()=>import("./EvalsPage-KbMMownG.js"),__vite__mapDeps([0,1,2,3,4]))),is=o.lazy(()=>P(()=>import("./IssuesPage-DmyLb9Rj.js"),__vite__mapDeps([5,1,2,3,4,6]))),cs=o.lazy(()=>P(()=>import("./Settings-COgdKTJB.js"),__vite__mapDeps([7,1,2,8,4,9]))),os={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"},O=(e,i)=>i.filter(r=>{var c;return(c=r.ops)==null?void 0:c.some(t=>t.nodeId===e.id)});function L({status:e}){const i=F[e]||F.pending;return s.jsx("span",{className:"m-dot",style:{background:i.color}})}function rs({node:e,kids:i,editors:r,onTap:c}){return s.jsxs("button",{className:"m-row",onClick:c,children:[s.jsx(L,{status:e.status}),s.jsx("span",{className:"m-row-title",children:e.title}),r.length>0&&s.jsx("span",{className:"m-row-faces",children:r.slice(0,3).map(t=>s.jsx(R,{seed:t.id,status:t.status,title:z(t)},t.id))}),e.version?s.jsxs("span",{className:"m-row-ver",children:["v",e.version]}):null,i>0&&s.jsxs("span",{className:"m-row-kids",children:["▸",i]}),s.jsx("span",{className:"m-row-chev",children:"›"})]})}function ms({node:e,childrenOf:i,sessions:r,onOpenChild:c}){const t=E(),m=i(e.id),g=V(e),N=[...m.length?[{key:"children",label:t("mobile.childrenTab",{n:m.length})}]:[],...g.map(n=>({key:n.key,label:t(os[n.key])}))],[d,p]=o.useState(null),[h,f]=o.useState({issues:{},eval:{}});o.useEffect(()=>{p(null),f({issues:{},eval:{}})},[e.id]);const j=(n,x)=>f(w=>({...w,[n]:W(w[n],x)})),a=d&&N.some(n=>n.key===d)?d:N[0].key,b=H(e.id,a==="history"),k=O(e,r);return s.jsxs("div",{className:"m-node",children:[s.jsxs("div",{className:"m-node-head",children:[s.jsx(L,{status:e.status}),s.jsx("span",{className:"m-node-title",children:e.title}),e.version?s.jsxs("span",{className:"m-node-ver",children:["v",e.version]}):null,s.jsx("span",{className:"m-node-status",children:t(`status.${e.status}`)}),k.length>0&&s.jsx("span",{className:"m-node-faces",title:t("mobile.liveEditors",{n:k.length}),children:k.map(n=>s.jsx(R,{seed:n.id,status:n.status,title:z(n)},n.id))})]}),e.desc&&s.jsx("div",{className:"m-node-desc",children:e.desc}),s.jsx("div",{className:"m-tabs",children:N.map(n=>s.jsx("button",{className:n.key===a?"m-tab on":"m-tab",onClick:()=>p(n.key),children:n.label},n.key))}),s.jsxs("div",{className:a==="history"?"m-pane-host fixed":"m-pane-host",children:[a==="children"&&s.jsx("div",{className:"m-children",children:m.map(n=>s.jsx(rs,{node:n,kids:i(n.id).length,editors:O(n,r),onTap:()=>c(n.id)},n.id))}),a==="spec"&&s.jsx($,{node:e}),a==="history"&&s.jsx(B,{node:e,rows:b}),a==="issues"&&s.jsx(U,{node:e,sessions:r,filter:h.issues,onFilter:n=>j("issues",n)}),a==="eval"&&s.jsx(q,{node:e,sessions:r,filter:h.eval,onFilter:n=>j("eval",n)}),a==="edit"&&s.jsx(J,{node:e})]})]})}function ds({s:e,sessions:i,onBack:r}){const c=E();return s.jsxs("div",{className:"m-sessdetail chat",children:[s.jsxs("div",{className:"m-sess-card",children:[s.jsx("button",{className:"m-sess-back",onClick:r,"aria-label":c("mobile.back"),children:"‹"}),s.jsxs("div",{className:"m-sess-meta",children:[s.jsx("span",{className:"m-sess-name",children:Y(e)}),s.jsxs("span",{className:"m-sess-status",style:{color:ss[e.status]},children:[c(`status.${e.status}`),e.merges?` · ×${e.merges}`:""," · ",s.jsx("span",{className:"m-sess-id8",children:e.id.slice(0,8)})]})]}),s.jsx("a",{className:"m-sess-evalbtn",href:es(as(e.id)),title:c("sessionEval.btnTitle"),children:c("sessionEval.btn")})]}),s.jsx(ls,{s:e,sessions:i})]})}function us({draft:e,setDraft:i,onBack:r,onLaunched:c}){const t=E(),{launchers:m,launcher:g,pickLauncher:N}=X(),[d,p]=o.useState(!1),[h,f]=o.useState(null),j=async()=>{const a=e.trim();if(!a||d)return;p(!0),f(null);const b=await ns(a,g);p(!1),b.ok?(i(""),c()):f(b.error||t("mobile.launchFailed"))};return s.jsxs("div",{className:"m-sessdetail m-new",children:[s.jsxs("div",{className:"m-sess-card",children:[s.jsx("button",{className:"m-sess-back",onClick:r,"aria-label":t("mobile.back"),children:"‹"}),s.jsx("div",{className:"m-sess-meta",children:s.jsx("span",{className:"m-sess-name",children:t("mobile.newSession")})})]}),s.jsxs("div",{className:"m-new-body",children:[s.jsx("textarea",{className:"m-input m-new-input",rows:5,placeholder:t("mobile.newPlaceholder"),value:e,onChange:a=>i(a.target.value)}),m.length>0&&s.jsxs("label",{className:"m-new-launcher",children:[s.jsx("span",{className:"m-new-launcher-label",children:t("session.launcherLabel")}),s.jsx("select",{className:"m-new-launcher-select",value:g,onChange:a=>N(a.target.value),children:m.map(a=>s.jsx("option",{value:a.name,children:a.name},a.name))})]}),h&&s.jsx("div",{className:"m-senderr",children:h}),s.jsx("button",{className:"m-send m-new-go",disabled:!e.trim()||d,onClick:j,children:t(d?"mobile.launching":"mobile.launch")})]})]})}function hs({specs:e,sessions:i,openId:r,setOpenId:c,creating:t,setCreating:m,newDraft:g,setNewDraft:N}){const d=E(),p=r?i.find(a=>a.id===r):null,{expanded:h,toggle:f}=Q(),j=o.useMemo(()=>Z(i,a=>h.has(a)),[i,h]);return t?s.jsx(us,{draft:g,setDraft:N,onBack:()=>m(!1),onLaunched:()=>m(!1)}):p?s.jsx(ds,{s:p,sessions:i,onBack:()=>c(null)}):s.jsxs("div",{className:"m-sesslist",children:[s.jsxs("button",{className:"m-new-btn",onClick:()=>m(!0),children:[s.jsx("span",{className:"m-new-btn-plus",children:"+"}),d("mobile.newSession")]}),!i.length&&s.jsx("div",{className:"m-empty big",children:d("mobile.noSessions")}),j.map(a=>{if(a.type==="zone")return s.jsx("div",{className:"m-zone",children:d(`sessionZone.${a.zone}`)},`z-${a.zone}`);const b=a.s,k=a.expandable||a.depth?s.jsx(G,{guides:a.guides,expandable:a.expandable,expanded:a.expanded,rollup:a.rollup,kin:a.kin,onToggle:()=>f(b.id)}):null;return s.jsx("button",{className:"m-sess-row",onClick:()=>c(b.id),children:s.jsx(K,{s:b,locked:!1,showAvatar:!1,lead:k})},b.id)})]})}function vs({specs:e,sessions:i,reloadBoard:r}){const c=E(),t=o.useMemo(()=>Object.fromEntries(e.map(l=>[l.id,l])),[e]),m=o.useMemo(()=>e.find(l=>!l.parent)||e[0],[e]),g=o.useMemo(()=>{const l={};return e.forEach(u=>{var T;u.parent&&(l[T=u.parent]??(l[T]=[])).push(u)}),u=>l[u]||[]},[e]),[N,d]=o.useState("specs"),[p,h]=o.useState(()=>m?[m.id]:[]),[f,j]=o.useState(null),[a,b]=o.useState(!1),[k,n]=o.useState(""),{page:x,param:w}=D(),v=x==="evals"||x==="issues"||x==="settings"?x:N;o.useEffect(()=>{x==="sessions"&&w&&(d("sessions"),j(w))},[x,w]);const _=l=>{if(l==="evals"||l==="issues"){y(l);return}d(l),(x==="evals"||x==="issues"||x==="settings")&&y(l==="specs"?"graph":"sessions")},I=l=>{d("sessions"),j(l),y("sessions",l)},S=p.filter(l=>t[l]),A=S[S.length-1]||(m==null?void 0:m.id),C=A?t[A]:null,M=l=>h(u=>[...u.filter(T=>t[T]),l]);return s.jsxs("div",{className:"m-app",children:[s.jsx("main",{className:"m-main",children:v==="evals"||v==="issues"||v==="settings"?s.jsx("div",{className:"m-review",children:s.jsx(o.Suspense,{fallback:s.jsx("div",{className:"m-empty",children:c("common.loading")}),children:v==="settings"?s.jsx(cs,{}):v==="evals"?s.jsx(ts,{specs:e,sessions:i,reloadBoard:r,onOpenSession:I,onFocusNode:l=>{d("specs"),h([m.id,l].filter(u=>t[u])),y("graph")}}):s.jsx(is,{specs:e,sessions:i,onOpenSession:I,onFocusNode:l=>{d("specs"),h([m.id,l].filter(u=>t[u])),y("graph")}})})}):v==="specs"?s.jsxs("div",{className:"m-specs",children:[s.jsx("nav",{className:"m-crumbs",children:S.map((l,u)=>s.jsxs("span",{className:"m-crumb",children:[u>0&&s.jsx("span",{className:"m-crumb-sep",children:"›"}),s.jsx("button",{className:u===S.length-1?"m-crumb-btn cur":"m-crumb-btn",onClick:()=>h(S.slice(0,u+1)),children:t[l].title})]},l))}),C&&s.jsx(ms,{node:C,childrenOf:g,sessions:i,onOpenChild:M},C.id)]}):s.jsx(hs,{specs:e,sessions:i,openId:f,setOpenId:j,creating:a,setCreating:b,newDraft:k,setNewDraft:n})}),s.jsxs("nav",{className:"m-tabbar",children:[s.jsxs("button",{className:v==="specs"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>_("specs"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"❯_"}),c("mobile.specsTab")]}),s.jsxs("button",{className:v==="sessions"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>_("sessions"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"◐"}),c("mobile.sessionsTab"),i.length>0&&s.jsx("span",{className:"m-tabbar-badge",children:i.length})]}),s.jsxs("button",{className:v==="evals"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>_("evals"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"✓"}),c("mobile.evalsTab")]}),s.jsxs("button",{className:v==="issues"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>_("issues"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"◎"}),c("mobile.issuesTab")]})]})]})}export{vs as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as d,j as n,e as u}from"./index-
|
|
1
|
+
import{r as d,j as n,e as u}from"./index-D6HBvKkJ.js";let i=null;const r=e=>!!(e&&e.closest&&e.closest("[data-focus-overlay]")),c=e=>!!(e&&e.isConnected&&!e.disabled&&e.getClientRects().length);typeof window<"u"&&window.addEventListener("focusin",e=>{const t=e.target;t&&t!==document.body&&!r(t)&&(i=t)},!0);function f(){requestAnimationFrame(()=>{if(r(document.activeElement))return;if(c(i)){i.focus();return}const e=document.querySelector("[data-focus-sink]");c(e)&&e.focus()})}const m='input, textarea, select, [contenteditable=""], [contenteditable="true"], .xterm',g=(e,t)=>{if(!(e instanceof HTMLElement))return!1;const s=e.getBoundingClientRect();return t.clientX-s.left-e.clientLeft>=e.clientWidth||t.clientY-s.top-e.clientTop>=e.clientHeight};function x(e){const t=e.target;t instanceof Element&&(t.closest(m)||g(t,e)||e.preventDefault())}function b({title:e,closeLabel:t,onClose:s,className:o,children:a}){return d.useEffect(()=>()=>f(),[]),n.jsx("div",{className:"legend-backdrop","data-focus-overlay":!0,onClick:s,children:n.jsxs("div",{className:o?`legend ${o}`:"legend",role:"dialog","aria-modal":"true","aria-label":e,onClick:l=>l.stopPropagation(),children:[n.jsxs("div",{className:"legend-head",children:[n.jsx("span",{className:"legend-title",children:e}),n.jsx(u,{icon:"x",size:13,className:"legend-close",label:t,onClick:s})]}),n.jsx("div",{className:"legend-body",children:a})]})})}export{b as M,x as i,f as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as h,j as L}from"./index-
|
|
1
|
+
import{r as h,j as L}from"./index-D6HBvKkJ.js";const w="spex.page-scroll:",T=()=>typeof window>"u"?"":`${window.location.pathname}${window.location.search}${window.location.hash}`,$=n=>{try{return Number(sessionStorage.getItem(`${w}${n}`))||0}catch{return 0}},p=(n,r)=>{try{sessionStorage.setItem(`${w}${n}`,String(r))}catch{}};function A({className:n="",scrollKey:r=T(),children:g,...E}){const f=h.useRef(null);return h.useLayoutEffect(()=>{const e=f.current;if(!e)return;const o=$(r);let i=o,c=o>0,u=0,t=0,a;const m=()=>{c=!1,t&&cancelAnimationFrame(t),t=0,a==null||a.disconnect()},l=()=>{if(t=0,!c)return;const v=Math.max(0,e.scrollHeight-e.clientHeight);if(e.scrollTop=Math.min(o,v),v<o){u=0;return}if(Math.abs(e.scrollTop-o)>1){u=0,t=requestAnimationFrame(l);return}i=e.scrollTop,p(r,i),++u<2?t=requestAnimationFrame(l):m()},d=()=>{c||(i=e.scrollTop,p(r,i))},s=()=>{m(),d()};return e.scrollTop=o,c&&(a=new MutationObserver(()=>{t||(t=requestAnimationFrame(l))}),a.observe(e,{childList:!0,subtree:!0,characterData:!0}),t=requestAnimationFrame(l)),e.addEventListener("scroll",d,{passive:!0}),e.addEventListener("pointerdown",s,!0),e.addEventListener("wheel",s,{passive:!0,capture:!0}),e.addEventListener("keydown",s,!0),()=>{e.removeEventListener("scroll",d),e.removeEventListener("pointerdown",s,!0),e.removeEventListener("wheel",s,!0),e.removeEventListener("keydown",s,!0),m(),p(r,i)}},[r]),L.jsx("div",{ref:f,className:`page-scroll${n?` ${n}`:""}`,...E,children:g})}export{A as P};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as T,r,m as O,n as $,C as J,o as M,j as e,q as _,I as L,e as F,b as A,t as q,v as K,P as U,p as V,w as B,x as Q,y as W,z as X,A as Y,B as Z,D as ee,E as se,F as ae,G as te,H as oe,J as re}from"./index-D6HBvKkJ.js";import{M as ne}from"./Modal-3brXUhM0.js";import{P as ce}from"./PageScroll-CadAKuSy.js";const R=["claude","codex","opencode","pi"];function D({onSet:s,onClear:l,placeholder:a,busy:o,t:c}){const[t,b]=r.useState("");return e.jsxs("form",{className:"proj-drawer proj-pw",onSubmit:d=>{d.preventDefault(),t&&(s(t),b(""))},children:[e.jsx("input",{className:"proj-add-path",type:"password",value:t,onChange:d=>b(d.target.value),placeholder:a,"aria-label":a}),e.jsx("button",{className:"proj-act primary",type:"submit",disabled:!t||o,children:c("projects.passwordSet")}),e.jsx("button",{className:"proj-act",type:"button",disabled:o,onClick:l,children:c("projects.passwordClear")})]})}function ie({onAdded:s,onClose:l,t:a}){const[o,c]=r.useState(""),[t,b]=r.useState(null),[d,u]=r.useState(!0),[i,g]=r.useState(!1),[y,m]=r.useState(null),[P,v]=r.useState(""),[w,x]=r.useState(!1),[S,N]=r.useState(!1),[h,E]=r.useState([]),n=r.useCallback(async p=>{if(i)return;u(!0),m(null),v("");const k=await Q(p);if(u(!1),!k.ok){m(k.error==="network"?a("projects.actionFailed"):k.error);return}b(k),c(k.path),x(!1),N(!1),E([])},[i,a]);r.useEffect(()=>{n("")},[]),r.useEffect(()=>{const p=k=>{k.key==="Escape"&&!i&&l()};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[i,l]);const f=!!t&&o===t.path,I=f&&!t.gitRoot,G=f&&!t.initialized,j=f&&!d&&!i&&!t.cataloged&&(!I||w)&&(!S||!!h.length),C=p=>E(k=>k.includes(p)?k.filter(H=>H!==p):[...k,p]),z=async p=>{if(p.preventDefault(),!j)return;g(!0),m(null),v("");const k=await ee(t.path,{...I?{initGit:w}:{},...G&&S?{init:{harness:h.join(",")}}:{}});if(g(!1),k.ok){s(k.project);return}m(k.error==="network"?a("projects.actionFailed"):k.error),v(k.output||"")};return e.jsx(ne,{title:a("projects.addTitle"),closeLabel:a("common.close"),onClose:()=>{i||l()},className:"proj-add-modal",children:e.jsxs("form",{className:"proj-add-flow",onSubmit:z,children:[e.jsxs("div",{className:"proj-add-pathbar",children:[e.jsx(F,{icon:"arrow-left",size:14,className:"proj-act icon",label:a("projects.browseParent"),disabled:!(t!=null&&t.parent)||d||i,onClick:()=>n(t.parent)}),e.jsx("button",{type:"button",className:"proj-act icon proj-home-btn","data-tip":a("projects.browseHome"),"aria-label":a("projects.browseHome"),disabled:!(t!=null&&t.home)||d||i,onClick:()=>n(t.home),children:"~"}),e.jsx("input",{className:"proj-add-path",value:o,autoFocus:!0,spellCheck:!1,onChange:p=>{c(p.target.value),m(null)},onKeyDown:p=>{p.key==="Enter"&&(p.preventDefault(),o.trim()&&n(o.trim()))},placeholder:a("projects.addPlaceholder"),"aria-label":a("projects.addPlaceholder"),disabled:i}),e.jsx("button",{className:"proj-act",type:"button",disabled:!o.trim()||d||i,onClick:()=>n(o.trim()),children:a(d?"projects.browseLoading":"projects.browseGo")})]}),e.jsxs("div",{className:"proj-folder-list","aria-label":a("projects.folderList"),"aria-busy":d,children:[!d&&(t==null?void 0:t.entries.map(p=>e.jsxs("button",{type:"button",className:"proj-folder-row",onClick:()=>n(p.path),disabled:i,children:[e.jsx(L,{name:"chevron-right",size:13}),e.jsx("span",{className:"proj-folder-name",children:p.name}),p.git&&e.jsx("span",{className:"proj-folder-tag",children:"Git"}),p.initialized&&e.jsx("span",{className:"proj-folder-tag spex",children:"SpexCode"})]},p.path))),!d&&t&&!t.entries.length&&e.jsx("div",{className:"proj-folder-empty",children:a("projects.folderEmpty")}),d&&e.jsx("div",{className:"proj-folder-empty",children:a("projects.browseLoading")})]}),f&&e.jsxs("div",{className:"proj-add-options",children:[e.jsx("div",{className:"proj-add-selected",title:t.path,children:t.path}),t.gitRoot?e.jsxs("div",{className:"proj-add-state",children:[e.jsx(L,{name:"check",size:13})," Git ",e.jsx("code",{children:t.gitRoot})]}):e.jsxs("label",{className:"proj-add-check",children:[e.jsx("input",{type:"checkbox",checked:w,onChange:p=>x(p.target.checked),disabled:i}),e.jsx("span",{children:a("projects.initGit")})]}),t.initialized?e.jsxs("div",{className:"proj-add-state",children:[e.jsx(L,{name:"check",size:13})," ",a("projects.spexInitialized")]}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"proj-add-check",children:[e.jsx("input",{type:"checkbox",checked:S,onChange:p=>{N(p.target.checked),v(""),m(null)},disabled:i}),e.jsx("span",{children:a("projects.initSpex")})]}),S&&e.jsxs("fieldset",{className:"proj-add-harnesses",disabled:i,children:[e.jsx("legend",{children:a("projects.harnessTargets")}),R.map(p=>e.jsxs("label",{className:"proj-add-harness",children:[e.jsx("input",{type:"checkbox",checked:h.includes(p),onChange:()=>C(p)}),e.jsx("span",{children:p})]},p))]})]}),t.cataloged&&e.jsx("div",{className:"proj-op-status ok",children:a("projects.alreadyAdded")})]}),(y||P)&&e.jsxs("div",{className:"proj-add-result",children:[y&&e.jsx("div",{className:"proj-err",children:y}),P&&e.jsx("pre",{className:"proj-log",children:P})]}),e.jsxs("div",{className:"proj-add-actions",children:[e.jsx("button",{className:"proj-act",type:"button",disabled:i,onClick:l,children:a("common.cancel")}),e.jsx("button",{className:"proj-act primary",type:"submit",disabled:!j,children:a(i?"projects.addBusy":"projects.addSubmit")})]})]})})}function le({p:s,onRefresh:l,t:a}){const[o,c]=r.useState(null),[t,b]=r.useState(""),[d,u]=r.useState(!1),[i,g]=r.useState(null),[y,m]=r.useState(!1),[P,v]=r.useState(0),[w,x]=r.useState(s.identity.icon),[S,N]=r.useState(!1),[h,E]=r.useState(null);r.useEffect(()=>{let j=!0;return c(null),g(null),m(!1),W(s.id).then(C=>{if(j){if(!C.ok){g(C.error==="network"?a("projects.actionFailed"):C.error);return}c({content:C.content,revision:C.revision}),b(C.content),x(s.identity.icon)}}),()=>{j=!1}},[s.id,s.identity.icon,P,a]);let n=!1;try{const j=JSON.parse(t);n=!j||typeof j!="object"||Array.isArray(j)}catch{n=!0}const f=!!o&&t!==o.content,I=async()=>{var C,z;if(!o||n||!f||d)return;u(!0),g(null),m(!1);const j=await se(s.id,t,o.revision);if(u(!1),!j.ok){g(j.error==="network"?a("projects.actionFailed"):j.error);return}c({content:j.content,revision:j.revision}),b(j.content),m(!0);try{x(((z=(C=JSON.parse(j.content))==null?void 0:C.dashboard)==null?void 0:z.icon)||s.identity.icon)}catch{}l()},G=async j=>{if(!o||S)return!1;const C=w;x(j),N(!0),E(null),m(!1);const z=await ae(s.id,j,o.revision);return N(!1),z.ok?(c({content:z.content,revision:z.revision}),b(z.content),x(z.identity.icon),m(!0),l(),!0):(x(C),E(z.error==="network"?a("projects.actionFailed"):z.error),!1)};return e.jsxs("div",{className:"proj-drawer proj-config",children:[e.jsxs("div",{className:"proj-config-head",children:[e.jsx("code",{children:"spexcode.json"}),y&&e.jsx("span",{className:"proj-op-status ok",children:a("projects.configSaved")})]}),o?e.jsxs(e.Fragment,{children:[e.jsx("textarea",{className:n?"proj-config-editor invalid":"proj-config-editor",value:t,onChange:j=>{b(j.target.value),m(!1),g(null)},"aria-label":a("projects.configEditor"),spellCheck:!1,disabled:d}),e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("button",{className:"proj-act primary",type:"button",disabled:!f||n||d,onClick:I,children:a(d?"projects.configSaving":"projects.configSave")}),e.jsx("button",{className:"proj-act",type:"button",disabled:d,onClick:()=>v(j=>j+1),children:a("projects.configReload")}),n&&e.jsx("span",{className:"proj-err",children:a("projects.configInvalid")}),i&&e.jsx("span",{className:"proj-err",children:i})]}),e.jsx(B,{value:w,onChange:G,label:a("projects.projectIcon"),editLabel:a("projects.editProjectIcon"),name:`project-icon-${s.id}`,disabled:d||S}),h&&e.jsx("span",{className:"proj-err",children:h})]}):e.jsxs("div",{className:"proj-setup-row",children:[!i&&e.jsx("span",{className:"proj-dim",children:a("projects.configLoading")}),i&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"proj-err",children:i}),e.jsx("button",{className:"proj-act",type:"button",onClick:()=>v(j=>j+1),children:a("projects.configReload")})]})]})]})}function de({p:s,busyOp:l,run:a,result:o,t:c}){const[t,b]=r.useState([]),d=u=>b(i=>i.includes(u)?i.filter(g=>g!==u):[...i,u]);return e.jsxs("div",{className:"proj-drawer proj-setup",children:[e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("span",{className:"proj-dim",children:c("projects.harnessLabel")}),R.map(u=>e.jsx("button",{type:"button",className:t.includes(u)?"proj-act on":"proj-act","aria-pressed":t.includes(u),disabled:!!l,onClick:()=>d(u),children:u},u))]}),e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("button",{className:"proj-act primary",type:"button",disabled:!!l||!t.length,title:t.length?void 0:c("projects.harnessRequired"),onClick:()=>a("init",()=>X(s.id,t.join(","))),children:c(l==="init"?"projects.running":"projects.init")}),e.jsx("button",{className:"proj-act",type:"button",disabled:!!l,onClick:()=>a("doctor",()=>Y(s.id)),children:c(l==="doctor"?"projects.running":"projects.doctor")})]}),o&&e.jsxs("div",{className:"proj-op-result proj-full",children:[e.jsx("div",{className:o.ok?"proj-op-status ok":"proj-op-status fail",children:o.ok?c("projects.opOk",{op:c(`projects.${o.op}`)}):c("projects.opFail",{op:c(`projects.${o.op}`),code:o.code??"?"})}),o.output?e.jsx("pre",{className:"proj-log",children:o.output}):null]})]})}function pe({p:s,health:l,onRefresh:a,t:o}){const[c,t]=r.useState(null),[b,d]=r.useState(!1),[u,i]=r.useState(null),[g,y]=r.useState(null),[m,P]=r.useState(null),v=s.id===U,w=s.online===!1,x=w?"stopped":l||"probing",S=async h=>{d(!0),y(null);const E=await h();d(!1),E.ok?t(null):y(E.error||o("projects.actionFailed")),a()},N=async(h,E)=>{i(h),y(null),P(null);const n=await E();i(null),h!=="serve"?P({op:h,ok:n.ok,code:n.code,output:n.output||(n.ok?"":n.error||"")}):n.ok||y(n.error||o("projects.actionFailed")),a()};return e.jsxs("li",{className:v?"proj-row current":"proj-row",children:[e.jsxs("div",{className:"proj-row-main",children:[e.jsx("span",{className:`proj-health h-${x}`,"data-tip":o(`projects.health.${x}`)}),e.jsx(A,{icon:s.identity.icon,size:26}),e.jsx("span",{className:"proj-name",children:s.identity.title}),s.gated&&e.jsx(L,{name:"lock",size:12,className:"proj-locked"}),v&&e.jsx("span",{className:"proj-tag",children:o("projects.current")}),e.jsx("span",{className:"proj-path",title:s.id,children:s.root||s.id}),e.jsxs("span",{className:"proj-actions",children:[e.jsx(F,{icon:"settings",label:o("projects.configTitle"),className:c==="config"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="config"?null:"config"),y(null)}}),e.jsx(F,{icon:"terminal",label:o("projects.setupTitle"),className:c==="setup"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="setup"?null:"setup"),y(null)}}),e.jsx(F,{icon:"lock",label:o("projects.passwordTitle"),className:c==="pw"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="pw"?null:"pw"),y(null)}}),w?e.jsx("button",{className:"proj-act primary",type:"button",disabled:!!u,onClick:()=>N("serve",()=>te(s.id)),children:o(u==="serve"?"projects.startBusy":"projects.start")}):e.jsx("a",{className:"proj-act primary",href:V(s.id),children:o("projects.open")})]})]}),g&&e.jsx("div",{className:"proj-err",children:g}),c==="pw"&&e.jsx(D,{t:o,busy:b,placeholder:o("projects.passwordPlaceholder"),onSet:h=>S(()=>re(s.id,h)),onClear:()=>S(()=>oe(s.id))}),c==="config"&&e.jsx(le,{p:s,onRefresh:a,t:o}),c==="setup"&&e.jsx(de,{p:s,busyOp:u,run:N,result:m,t:o})]})}function je({gateway:s,onRefresh:l,t:a}){const[o,c]=r.useState(s.identity.icon),[t,b]=r.useState(!1),[d,u]=r.useState(null);r.useEffect(()=>{c(s.identity.icon)},[s.identity.icon]);const i=async g=>{if(t||!s.revision)return!1;const y=o;c(g),b(!0),u(null);const m=await Z(g,s.revision);return b(!1),m.ok?(c(m.gateway.identity.icon),l(),!0):(c(y),u(m.error==="network"?a("projects.actionFailed"):m.error),!1)};return e.jsxs("div",{className:"proj-gateway-identity",children:[e.jsx(B,{value:o,onChange:i,label:a("projects.gatewayIcon"),editLabel:a("projects.editGatewayIcon"),name:"gateway-icon",fallback:"gateway",disabled:t||!s.revision}),d&&e.jsx("span",{className:"proj-err",children:d})]})}function xe(){const s=T(),[l,a]=r.useState({kind:"loading"}),[o,c]=r.useState({}),[t,b]=r.useState(null),[d,u]=r.useState(!1),[i,g]=r.useState(!1),[y,m]=r.useState(null),[P,v]=r.useState(1),w=r.useRef(0),x=r.useCallback(async()=>{const n=++w.current,f=await O();n===w.current&&(f.state==="ok"?(a({kind:"ok",adminGated:f.adminGated,gateway:f.gateway,projects:f.projects}),f.projects.filter(I=>I.online!==!1).forEach(I=>{$(I.id).then(G=>{n===w.current&&c(j=>({...j,[I.id]:G}))})})):f.state==="denied"?a({kind:"denied",reason:f.reason}):a(I=>I.kind==="ok"?I:{kind:"absent"}))},[]);r.useEffect(()=>{x();const n=setInterval(x,J),f=()=>{document.hidden||x()};return document.addEventListener("visibilitychange",f),()=>{clearInterval(n),document.removeEventListener("visibilitychange",f)}},[x]);const S=async n=>{g(!0),m(null);const f=await n();g(!1),f.ok?b(null):m(f.error||s("projects.actionFailed")),x()},N=M(l.kind==="ok"?l.projects:[],P);r.useEffect(()=>{N.page!==P&&v(N.page)},[N.page,P]);const h=l.kind==="loading"?e.jsx("div",{className:"loading",children:s("hud.loading")}):l.kind==="denied"?e.jsx(_,{scope:"admin",locked:l.reason==="locked",onUnlocked:x}):l.kind==="absent"?e.jsx("div",{className:"proj-empty",children:e.jsx("p",{children:s("projects.absent")})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"proj-head",children:[e.jsx("span",{className:"proj-count",children:s("projects.count",{n:l.projects.length})}),e.jsxs("button",{className:d?"proj-act on":"proj-act",onClick:()=>u(!0),children:[e.jsx(L,{name:"plus",size:12})," ",s("projects.add")]}),e.jsxs("button",{className:t==="admin"?"proj-act on":"proj-act",onClick:()=>{b(n=>n==="admin"?null:"admin"),m(null)},children:[e.jsx(L,{name:"lock",size:12})," ",s("projects.adminPassword")]})]}),!l.adminGated&&e.jsx("div",{className:"proj-hint",children:s("projects.adminUngated")}),t==="admin"&&e.jsxs("div",{className:"proj-admin-pw",children:[e.jsx(D,{t:s,busy:i,placeholder:s("projects.adminPasswordPlaceholder"),onSet:n=>S(()=>K(n)),onClear:()=>S(()=>q())}),y&&e.jsx("div",{className:"proj-err",children:y})]}),l.projects.length?e.jsx("ul",{className:"proj-list",children:N.items.map(n=>e.jsx(pe,{p:n,health:o[n.id],onRefresh:x,t:s},n.id))}):e.jsx("div",{className:"proj-empty",children:e.jsx("p",{children:s("projects.empty")})}),N.pageCount>1&&e.jsxs("nav",{className:"proj-pagination","aria-label":s("projects.pagination"),children:[e.jsx(F,{icon:"arrow-left",label:s("projects.previousPage"),className:"proj-act icon",size:14,disabled:N.page===1,onClick:()=>v(n=>n-1)}),e.jsx("span",{className:"proj-page-label",children:s("projects.pageOf",{page:N.page,pages:N.pageCount})}),e.jsx(F,{icon:"chevron-right",label:s("projects.nextPage"),className:"proj-act icon",size:14,disabled:N.page===N.pageCount,onClick:()=>v(n=>n+1)})]}),e.jsx("div",{className:"proj-page-details","aria-label":s("projects.gatewaySettings"),children:e.jsx(je,{gateway:l.gateway,onRefresh:x,t:s})})]}),E=l.kind==="ok"?l.gateway.identity:{icon:"gateway"};return e.jsxs("div",{className:"page-pane page-projects",children:[e.jsx(ce,{className:"page-projects-scroll",children:e.jsxs("div",{className:"proj-body",children:[e.jsxs("div",{className:"cred-brand proj-brand",children:[e.jsx(A,{icon:E.icon,fallback:"gateway",size:30}),e.jsx("span",{children:"$ spexcode"})]}),e.jsx("h1",{className:"page-title",children:s("projects.title")}),h]})}),d&&e.jsx(ie,{t:s,onClose:()=>u(!1),onAdded:()=>{u(!1),x()}})]})}export{xe as default};
|
package/spec-dashboard/dist/assets/{SessionInterface-Bh3vq8SU.js → SessionInterface-BtrzlOPs.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{K as Fo,r as M,a as Ut,j as g,L as Wo,M as zo,O as $o,N as Ko,u as kt,i as jo,d as es,I as Ve,e as Hi}from"./index-D6HBvKkJ.js";import{s as Uo,g as qo}from"./terminalFont-DmTPNdbU.js";import{i as Fi,T as Vo}from"./TimelineChat-DQ21GSJK.js";import{u as Jt,s as ts,C as Yo,x as Xo,y as Go,K as Jo,M as Zo,R as Qo,z as ea,l as ta,O as kr,D as ia,Q as sa,U as Wi,J as ra,V as na,W as oa,F as Er,X as Dr,Y as It,Z as aa,_ as la,$ as ha,a0 as ca,a1 as da,m as ua}from"./SessionWindow-BWH5O0jh.js";import{C as _a,a as Br,b as Ht,c as fa}from"./Dashboard-CTAuTyZ3.js";import{M as Si,i as pa}from"./Modal-3brXUhM0.js";import"./PageScroll-CadAKuSy.js";import"./bindings-BC9vqpYU.js";/**
|
|
2
2
|
* Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.
|
|
3
3
|
* @license MIT
|
|
4
4
|
*
|