spexcode 0.5.9 → 0.6.1
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/package.json +1 -1
- package/spec-cli/src/cli.ts +69 -70
- package/spec-cli/src/client.ts +1 -1
- package/spec-cli/src/codex-runtime-generations.ts +97 -7
- package/spec-cli/src/commit-surgery.ts +2 -1
- package/spec-cli/src/contract-filter.ts +58 -42
- package/spec-cli/src/delivery-queue.ts +107 -0
- package/spec-cli/src/doctor.ts +2 -1
- package/spec-cli/src/file-write.ts +22 -0
- package/spec-cli/src/git.ts +30 -8
- package/spec-cli/src/graphStream.ts +79 -11
- package/spec-cli/src/harness.ts +12 -10
- package/spec-cli/src/help.ts +9 -14
- package/spec-cli/src/index.ts +10 -2
- package/spec-cli/src/init.ts +8 -17
- package/spec-cli/src/layout.ts +35 -7
- package/spec-cli/src/materialize.ts +150 -107
- package/spec-cli/src/plugin-harness.ts +19 -8
- package/spec-cli/src/process-identity.ts +13 -0
- package/spec-cli/src/reviews.ts +55 -11
- package/spec-cli/src/session-cursors.ts +11 -17
- package/spec-cli/src/session-follow.ts +6 -6
- package/spec-cli/src/sessions.ts +224 -38
- package/spec-cli/src/uninstall.ts +2 -1
- package/spec-cli/templates/hooks/post-checkout +3 -0
- package/spec-cli/templates/hooks/post-merge +1 -0
- package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/mark-active/mark-active.sh +5 -41
- package/spec-cli/templates/spec/project/.plugins/core/mark-active/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/stop-gate/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +2 -2
- package/spec-dashboard/dist/assets/{App-b8Nh0sgk.js → App-F9uaAVcH.js} +2 -2
- package/spec-dashboard/dist/assets/{Dashboard-CvAjfRC2.js → Dashboard-Ba_jhxp1.js} +3 -3
- package/spec-dashboard/dist/assets/{EvalsPage-Bz-nMKoS.js → EvalsPage-FixoOg_n.js} +2 -2
- package/spec-dashboard/dist/assets/{IssuesPage-CAP64YWE.js → IssuesPage-CuKLFhH3.js} +1 -1
- package/spec-dashboard/dist/assets/{MobileApp-D9L1Va8Z.js → MobileApp-CHgEHORJ.js} +2 -2
- package/spec-dashboard/dist/assets/{Modal-Drscez-d.js → Modal-CQgYymmr.js} +1 -1
- package/spec-dashboard/dist/assets/{PageScroll-qW6uOJL8.js → PageScroll-hT7UTLvD.js} +1 -1
- package/spec-dashboard/dist/assets/{ProjectsPage-CjybFBmR.js → ProjectsPage-CtXxakF9.js} +1 -1
- package/spec-dashboard/dist/assets/{SessionInterface-Dl9v0JFM.js → SessionInterface-Bpie-9fs.js} +12 -12
- package/spec-dashboard/dist/assets/{SessionWindow-iOk0yHoU.js → SessionWindow-CixDi4PI.js} +1 -1
- package/spec-dashboard/dist/assets/{Settings-BZ1lGRJs.js → Settings-C2MsucfE.js} +1 -1
- package/spec-dashboard/dist/assets/Thread-C6Go8HRh.js +13 -0
- package/spec-dashboard/dist/assets/{data-Bwd3kAVL.js → data-B-RQmit6.js} +1 -1
- package/spec-dashboard/dist/assets/{index-DAbQBBK_.css → index-CsI8DElI.css} +1 -1
- package/spec-dashboard/dist/assets/{index-paP-z_Vd.js → index-DrVao0Ep.js} +2 -2
- package/spec-dashboard/dist/assets/{launch-B-bYdWmh.js → launch-BBH02b1v.js} +1 -1
- package/spec-dashboard/dist/index.html +2 -2
- package/spec-dashboard/src/reviewFilters.js +5 -0
- package/spec-dashboard/src/session.js +5 -1
- package/spec-eval/src/cli.ts +7 -8
- package/spec-eval/src/evaltab.ts +25 -5
- package/spec-eval/src/freshness.ts +52 -8
- package/spec-eval/src/scenariofresh.ts +58 -8
- package/spec-eval/src/scenarios.ts +60 -12
- package/spec-eval/src/sessioneval.ts +122 -30
- package/spec-dashboard/dist/assets/Thread-D_kcDnfd.js +0 -13
- package/spec-eval/src/matrix.ts +0 -693
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import{r as g,j as n,I as R,u as A,e as de,p as Ye,t as Je,d as Le,g as T,v as Ze,w as Xe,n as Z,x as es,E as ss,s as pe}from"./index-paP-z_Vd.js";import{P as Q}from"./PageScroll-qW6uOJL8.js";import{m as ns,n as ue,o as ts}from"./data-Bwd3kAVL.js";const F={working:"var(--green)",parked:"var(--green)",asking:"var(--yellow)",review:"var(--yellow)",done:"var(--yellow)",error:"var(--red)",idle:"var(--muted)",starting:"var(--muted)",queued:"var(--muted)","close-pending":"var(--muted)",offline:"var(--muted)",unknown:"var(--yellow)",corrupt:"var(--red)",retired:"var(--muted)"},kn={working:"●",parked:"‖",asking:"?",review:"◑",done:"✓",error:"✕",idle:"·",starting:"◌",queued:"⋯","close-pending":"⊘",offline:"○",unknown:"⁇",corrupt:"⚠",retired:"⚑"},De=new Set(["asking","review","done","close-pending","error","corrupt"]),Y=e=>(e==null?void 0:e.liveness)==="offline"||(e==null?void 0:e.status)==="offline"?"offline":De.has(e==null?void 0:e.status)?"need":"run",me=e=>!!(e!=null&&e.archived),Sn=(e=[])=>({live:e.filter(s=>!me(s)),archived:e.filter(me)}),as=(e,s)=>{const a=s?(e||[]).find(t=>t.id===s):null;return a&&Y(a)!=="offline"?a:null},ve=e=>(e==null?void 0:e.sortKey)!=null?e.sortKey:(e==null?void 0:e.created)??0,xe=e=>{const s={need:0,run:1,offline:2};return[...e].sort((a,t)=>s[Y(a)]-s[Y(t)]||ve(t)-ve(a))},$n=e=>(e==null?void 0:e.label)||(e==null?void 0:e.name)||(e==null?void 0:e.node)||(e==null?void 0:e.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id),ls=e=>(e==null?void 0:e.headline)||(e==null?void 0:e.name)||(e==null?void 0:e.activity)||(e==null?void 0:e.promptPreview)||(e==null?void 0:e.node)||(e==null?void 0:e.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id);function rs(e){const s=new Set(e.map(l=>l==null?void 0:l.id)),a=new Map,t=[];for(const l of e){const i=l!=null&&l.parent&&l.parent!==l.id&&s.has(l.parent)?l.parent:null;if(i){const r=a.get(i)||[];r.push(l),a.set(i,r)}else t.push(l)}return{roots:t,childrenOf:a}}function En(e,s){const a=new Map(e.map(r=>[r==null?void 0:r.id,r])),t=[],l=new Set([s]);let i=a.get(s);for(;i!=null&&i.parent&&!l.has(i.parent);){const r=a.get(i.parent);if(!r)break;t.push(r.id),l.add(r.id),i=r}return t}function is(e,s){let a=!1,t=!1,l=0;const i=(r,c)=>{for(const o of s.get(r)||[])c.has(o.id)||(c.add(o.id),l++,De.has(o.status)?a=!0:F[o.status]===F.working&&(t=!0),i(o.id,c))};return i(e,new Set([e])),{color:a?F.asking:t?F.working:F.idle,count:l}}function cs(e,s,{zoneFolded:a=()=>!1,keepVisible:t=()=>!1}={}){const{roots:l,childrenOf:i}=rs(e),r=[],c=(d,w,m,v)=>{const u=i.get(d.id)||[],x=u.length>0,b=x&&!!s(d.id),S=x?is(d.id,i):null;if(r.push({type:"row",s:d,depth:w,expandable:x,expanded:b,rollup:(S==null?void 0:S.color)??null,kin:(S==null?void 0:S.count)??0,guides:v}),b){const k=xe(u).filter($=>!m.has($.id));k.forEach(($,N)=>{m.add($.id),c($,w+1,m,[...v,N<k.length-1])})}},o=(d,w)=>{let m=1;for(const v of i.get(d.id)||[])w.has(v.id)||(w.add(v.id),m+=o(v,w));return m},f=new Set;let h=null,p=null;for(const d of xe(l)){if(f.has(d.id))continue;const w=Y(d);if(w!==h&&(p={type:"zone",zone:w,count:0,folded:!!a(w)},r.push(p),h=w),p.count+=o(d,new Set([...f,d.id])),p.folded){const m=[],v=(u,x)=>{t(u)&&!f.has(u.id)&&m.push(u);for(const b of i.get(u.id)||[])x.has(b.id)||(x.add(b.id),v(b,x))};v(d,new Set([d.id]));for(const u of m)f.add(u.id),r.push({type:"row",s:u,depth:0,expandable:!1,expanded:!1,rollup:null,kin:0,guides:[]});f.add(d.id);continue}f.add(d.id),c(d,0,f,[])}return r}const Ln=e=>cs(e,()=>!0).filter(s=>s.type==="row").map(s=>s.s),X=typeof window<"u"?window.__escStack||(window.__escStack=[]):[];typeof window<"u"&&!window.__escStackBound&&(window.__escStackBound=!0,window.addEventListener("keydown",e=>{const s=window.__escStack;e.key!=="Escape"||!s||s.length===0||(e.preventDefault(),e.stopImmediatePropagation(),s[s.length-1].close())},!0));function Ae(e,s){const a=g.useRef(s);a.current=s,g.useEffect(()=>{if(!e)return;const t={close:()=>{var l;return(l=a.current)==null?void 0:l.call(a)}};return X.push(t),()=>{const l=X.indexOf(t);l>=0&&X.splice(l,1)}},[e])}const H=new Map;async function os(e){if(H.has(e))return H.get(e);const s=ns(e).then(async a=>{const t=await a.json().catch(()=>null);if(!a.ok)throw new Error((t==null?void 0:t.error)||`HTTP ${a.status}`);return t}).finally(()=>H.delete(e));return H.set(e,s),s}const Dn=e=>{const s=typeof e=="string"&&/^\d+$/.test(e)?Number(e):Number.NaN;return Number.isSafeInteger(s)&&s>0?s:1};function ds(e,s){return s<=0?[]:s<=10?Array.from({length:s},(a,t)=>t+1):e<=7?[...Array.from({length:8},(a,t)=>t+1),"gap",s-1,s]:e>=s-6||e>s?[1,2,"gap",...Array.from({length:8},(a,t)=>s-7+t)]:[1,2,"gap",e-2,e-1,e,e+1,e+2,"gap",s-1,s]}function Ie(e,s,a,{enabled:t=!0,refreshKey:l=null,pollMs:i=15e3,view:r=null}={}){const[c,o]=g.useState(null),[f,h]=g.useState(null),[p,d]=g.useState(t),w=g.useRef(0),m=g.useCallback(async({quiet:u=!1}={})=>{if(!t)return null;const x=++w.current;u||d(!0),h(null);const b=new URLSearchParams({q:String(s||""),page:String(a)});r&&b.set("view",r);try{const S=await os(`/api/${e}?${b}`);return x===w.current&&o(k=>k&&S&&k.revision===S.revision?k:S),S}catch(S){return x===w.current&&h(S instanceof Error?S.message:String(S)),null}finally{x===w.current&&d(!1)}},[e,t,a,s,r]),v=g.useRef(null);return g.useEffect(()=>{if(!t){d(!1);return}const u=`${e}\0${s}\0${a}\0${r||""}`,x=u!==v.current;v.current=u,x&&o(null),m({quiet:!x});const b=i>0?setInterval(()=>m({quiet:!0}),i):null;return()=>{b&&clearInterval(b)}},[e,s,a,r,t,m,i,l]),{data:c,error:f,loading:p,reload:m}}const je={issue:{open:{icon:"issue-opened",tone:"open",label:"reviewState.issueOpen"},closed:{icon:"issue-closed",tone:"closed",label:"reviewState.issueClosed"}},eval:{pass:{icon:"circle-check",tone:"pass",label:"score.pass"},fail:{icon:"circle-x",tone:"fail",label:"score.fail"},stalePass:{icon:"circle-check",tone:"stale",label:"score.stalePass"},staleFail:{icon:"circle-x",tone:"stale",label:"score.staleFail"},review:{icon:"clock",tone:"review",label:"reviewList.needsReview"},empty:{icon:"circle-minus",tone:"empty",label:"score.empty"},missing:{icon:"circle-dashed",tone:"empty",label:"score.missing"},legacy:{icon:"circle-minus",tone:"empty",label:"score.empty"}}},us=(e,s)=>{var t;const a=e==="issue"?s==="open"?"open":"closed":s||"empty";return((t=je[e])==null?void 0:t[a])||je.eval.empty};function fe({kind:e,state:s,showLabel:a=!1,size:t=16,className:l="",title:i}){const r=A(),c=us(e,s),o=i||r(c.label);return n.jsxs("span",{className:`review-state ${e} ${c.tone} ${l}`,"data-tip":o,"aria-label":o,children:[n.jsx("span",{className:"review-state-icon",style:{width:t,height:t},children:n.jsx(R,{name:c.icon,size:t})}),a&&n.jsx("span",{className:"review-state-label",children:o})]})}function fs(e,s){const a={...e,...s};for(const[t,l]of Object.entries(a))(l==null||l==="")&&delete a[t];return a}const hs=e=>e&&typeof e=="object"?e.hasData?e.filtered:e.dataset:e,Ce=(e,s,a)=>{const t=Array.isArray(e)?e:[];return!(s!=null&&String(s)!=="")||a==null||t.some(i=>String(i.value)==="")?t:[{value:"",label:a},...t]},ps=(e=[])=>e.reduce((s,a)=>((a.active??(a.value!=null&&String(a.value)!==""))&&(s.mobile+=1,a.mobileOnly||(s.desktop+=1)),s),{desktop:0,mobile:0}),he=(e,s,a)=>s?a==="Home"?0:a==="End"?s-1:a==="ArrowDown"||a==="ArrowRight"?e<0?0:(e+1)%s:a==="ArrowUp"||a==="ArrowLeft"?e<0?s-1:(e-1+s)%s:e:-1,ms=(e,s)=>{var t;const a=e==null?void 0:e.tagName;return a==="INPUT"||a==="TEXTAREA"||a==="SELECT"||a==="BUTTON"&&(s==="Enter"||s===" ")||s==="Enter"&&((t=e==null?void 0:e.closest)!=null&&t.call(e,"a[href]"))?!1:s==="j"||s==="k"||s==="Enter"},ee=e=>[...(e==null?void 0:e.querySelectorAll('[role="menuitemradio"]'))||[]].filter(s=>s.getClientRects().length>0),se=(e,s)=>{const a=e[s];if(a){for(const t of e)t.tabIndex=t===a?0:-1;a.focus()}};function Re(){const[e,s]=g.useState(!1),a=g.useRef(null),t=g.useRef(null),l=g.useRef(null),i=g.useRef("checked"),r=(d=!1)=>{var w;d&&((w=l.current)==null||w.focus()),s(!1)},c=(d,w="checked")=>{l.current=d,i.current=w,s(!0)},o=d=>{e?r(!1):c(d)};return Ae(e,()=>r(!0)),g.useEffect(()=>{if(!e)return;const d=w=>{var m;(m=a.current)!=null&&m.contains(w.target)||r(!1)};return window.addEventListener("pointerdown",d,!0),()=>window.removeEventListener("pointerdown",d,!0)},[e]),g.useEffect(()=>{if(!e)return;const d=requestAnimationFrame(()=>{const w=ee(t.current),m=w.findIndex(u=>u.getAttribute("aria-checked")==="true"),v=i.current==="last"?w.length-1:i.current==="first"?0:m>=0?m:0;se(w,v)});return()=>cancelAnimationFrame(d)},[e]),{open:e,ref:a,menuRef:t,close:r,toggle:o,onTriggerKeyDown:d=>{d.key!=="ArrowDown"&&d.key!=="ArrowUp"||(d.preventDefault(),d.stopPropagation(),c(d.currentTarget,d.key==="ArrowUp"?"last":"first"))},onMenuKeyDown:d=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(d.key))return;const w=ee(t.current),m=w.indexOf(document.activeElement);d.preventDefault(),d.stopPropagation(),se(w,he(m,w.length,d.key))},onItemFocus:d=>{const w=ee(t.current);se(w,w.indexOf(d.currentTarget))}}}function An({label:e,value:s="",options:a=[],onChange:t,mobile:l=!1,clearLabel:i}){const r=Re(),c=Ce(a,s,i);if(!c.length)return null;const o=c.find(p=>String(p.value)===String(s)),f=s?(o==null?void 0:o.label)||String(s):"",h=f?`${e}: ${f}`:e;return n.jsxs("div",{className:`rl-facet-wrap ${l?"mobile-stay":""}`,ref:r.ref,children:[n.jsxs("button",{type:"button",className:`rl-facet ${s?"active":""}`,"aria-label":h,"aria-haspopup":"menu","aria-expanded":r.open,onClick:p=>r.toggle(p.currentTarget),onKeyDown:r.onTriggerKeyDown,children:[n.jsx("span",{className:"rl-facet-label",children:h}),l&&n.jsx("span",{className:"rl-facet-label-mobile","aria-hidden":"true",children:f||e}),n.jsx(R,{name:"chevron-down",size:12})]}),r.open&&n.jsx("div",{className:"rl-menu",role:"menu","aria-label":e,ref:r.menuRef,onKeyDown:r.onMenuKeyDown,children:c.map(p=>n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":String(p.value)===String(s),tabIndex:-1,className:"rl-menu-item",onFocus:r.onItemFocus,onClick:()=>{r.close(!0),t(p.value)},children:[n.jsx(R,{name:String(p.value)===String(s)?"check":"blank",size:13}),n.jsx("span",{children:p.label}),p.count!=null&&n.jsx("span",{className:"rl-menu-count",children:p.count})]},String(p.value)))})]})}function vs({label:e,groups:s=[],clearLabel:a,compact:t=!1,className:l=""}){const i=A(),r=g.useId(),c=s.map(d=>({...d,options:Ce(d.options,d.value,d.clearLabel===null?null:d.clearLabel||a)})).filter(d=>d.options.length),o=c.some(d=>!d.mobileOnly),f=ps(c),h=Re();if(!c.length)return null;const p=(d,w)=>d>0&&n.jsxs("span",{className:`rl-secondary-filter-count ${w}`,children:[n.jsx("span",{"aria-hidden":"true",children:d}),n.jsx("span",{className:"sr-only",children:i("reviewList.activeFilters",{n:d})})]});return n.jsxs("div",{className:`rl-secondary-filters ${o?"":"mobile-only"} ${f.desktop?"active-desktop":""} ${f.mobile?"active-mobile":""} ${l}`,ref:h.ref,children:[t?n.jsx(de,{icon:"filter",size:16,className:"rl-secondary-filters-trigger compact",label:e,"aria-haspopup":"menu","aria-expanded":h.open,onClick:d=>h.toggle(d.currentTarget),onKeyDown:h.onTriggerKeyDown}):n.jsxs("button",{type:"button",className:"rl-secondary-filters-trigger","aria-haspopup":"menu","aria-expanded":h.open,onClick:d=>h.toggle(d.currentTarget),onKeyDown:h.onTriggerKeyDown,children:[n.jsx(R,{name:"filter",size:14}),n.jsx("span",{children:e}),p(f.desktop,"for-desktop"),p(f.mobile,"for-mobile"),n.jsx(R,{name:"chevron-down",size:12})]}),h.open&&n.jsx("div",{className:"rl-menu rl-secondary-filters-menu",role:"menu","aria-label":e,ref:h.menuRef,onKeyDown:h.onMenuKeyDown,children:c.map((d,w)=>n.jsxs("div",{role:"group","aria-labelledby":`${r}-group-${w}`,className:`rl-menu-group ${d.mobileOnly?"mobile-only":""}`,children:[n.jsx("div",{className:"rl-menu-label",id:`${r}-group-${w}`,children:d.label}),d.options.map(m=>n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":String(m.value)===String(d.value||""),tabIndex:-1,className:"rl-menu-item",onFocus:h.onItemFocus,onClick:()=>{h.close(!0),d.onChange(m.value)},children:[n.jsx(R,{name:String(m.value)===String(d.value||"")?"check":"blank",size:13}),n.jsx("span",{children:m.label}),m.count!=null&&n.jsx("span",{className:"rl-menu-count",children:m.count})]},String(m.value)))]},`${d.label}-${d.mobileOnly?"mobile":"all"}`))})]})}function In({state:e,title:s,meta:a,aside:t}){return n.jsxs("div",{className:"rl-row-grid",children:[n.jsx("div",{className:"rl-row-state",children:e}),n.jsxs("div",{className:"rl-row-body",children:[n.jsx("div",{className:"rl-row-title",children:s}),a&&n.jsx("div",{className:"rl-row-meta",children:a})]}),t&&n.jsx("div",{className:"rl-row-aside",children:t})]})}const U=e=>{const s=String(e??"").trim();return s?`${s} `:""};function xs({value:e="",onSubmit:s,placeholder:a,label:t,keys:l=[],suggest:i={}}){const[r,c]=g.useState(()=>U(e)),[o,f]=g.useState(-1),[h,p]=g.useState(-1),d=g.useRef(null),w=g.useRef(null),m=g.useId(),v=g.useRef(null),u=N=>requestAnimationFrame(()=>{const E=d.current;E&&(N&&E.focus(),E.setSelectionRange(E.value.length,E.value.length))});g.useEffect(()=>{c(U(e)),f(-1),p(-1),u(v.current!==null&&v.current!==e),v.current=e},[e]);const x=o>=0?Ye(r,o,l,i):{start:0,end:0,items:[]},b=x.items.length>0;Ae(b,()=>f(-1));const S=()=>{w.current&&d.current&&(w.current.scrollLeft=d.current.scrollLeft)};g.useEffect(S);const k=N=>{f(-1),p(-1);const E=N.trim();c(U(E)||U(e)),u(!0),s(E)},$=N=>{const E=`${r.slice(0,x.start)}${N.insert}${r.slice(x.end)}`;if(c(E),N.type==="value"){k(E);return}const I=x.start+N.insert.length;f(I),p(-1),requestAnimationFrame(()=>{var y,D;(y=d.current)==null||y.focus(),(D=d.current)==null||D.setSelectionRange(I,I)})};return n.jsxs("form",{className:"rl-query rq",role:"search",onSubmit:N=>{N.preventDefault(),k(r)},children:[n.jsxs("div",{className:"rq-wrap",children:[n.jsx("div",{className:"rq-hl","aria-hidden":"true",ref:w,children:Je(r).map((N,E)=>N.ws||N.key==null||!l.includes(N.key)?n.jsx("span",{children:N.raw},E):n.jsxs("span",{className:"rq-tok",children:[n.jsx("span",{className:"rq-tok-key",children:N.raw.slice(0,N.key.length+1)}),n.jsx("span",{className:"rq-tok-val",children:N.raw.slice(N.key.length+1)})]},E))}),n.jsx("input",{ref:d,role:"combobox","aria-expanded":b,"aria-controls":m,"aria-autocomplete":"list","aria-activedescendant":b&&h>=0?`${m}-o${h}`:void 0,value:r,spellCheck:!1,autoComplete:"off",placeholder:a,"aria-label":t,onChange:N=>{c(N.target.value),f(N.target.selectionStart??N.target.value.length),p(-1)},onScroll:S,onKeyDown:N=>{b&&(N.key==="ArrowDown"||N.key==="ArrowUp"?(N.preventDefault(),p(he(h,x.items.length,N.key))):N.key==="Enter"&&h>=0&&(N.preventDefault(),$(x.items[h])))},onBlur:()=>f(-1)})]}),b&&n.jsx("div",{className:"rl-menu rq-list",role:"listbox",id:m,"aria-label":t,children:x.items.map((N,E)=>n.jsxs("div",{id:`${m}-o${E}`,role:"option","aria-selected":E===h,className:`rq-opt ${E===h?"active":""}`,onPointerDown:I=>{I.preventDefault(),$(N)},children:[n.jsx("span",{className:"rq-opt-token",children:N.insert.trim()}),N.label&&N.label!==N.value&&n.jsx("span",{className:"rq-opt-label",children:N.label})]},N.insert))}),n.jsx("button",{type:"submit",className:"rl-query-submit","data-tip":t,"aria-label":t,children:n.jsx(R,{name:"search",size:16})})]})}function Te({value:e="",onChange:s,placeholder:a,searchLabel:t,filterLabel:l,groups:i,clearLabel:r,clearSearchLabel:c,summary:o}){const f=A(),h=n.jsxs("div",{className:"rf-compact",role:"search",children:[n.jsx("span",{className:"rf-search-icon",children:n.jsx(R,{name:"search",size:13})}),n.jsx("input",{value:e,onChange:d=>s(d.target.value),placeholder:a,"aria-label":t}),e&&n.jsx(de,{icon:"x",size:12,className:"rf-clear",label:c,onClick:()=>s("")}),n.jsx(vs,{label:l,clearLabel:r,groups:i,compact:!0,className:"rf-secondary-filters"})]});if(!o)return h;const p=f("reviewList.showing",{shown:o.shown,total:o.total});return n.jsxs("div",{className:"rf-row",children:[n.jsxs("span",{className:"rf-summary","data-tip":p,children:[n.jsx("span",{className:"sr-only",children:p}),n.jsx("span",{className:"rf-summary-full","aria-hidden":"true",children:p}),n.jsxs("span",{className:"rf-summary-compact","aria-hidden":"true",children:[o.shown,"/",o.total]})]}),h]})}function js({page:e,pageCount:s,prev:a,next:t,hrefFor:l}){const i=A();if(s<=1&&e<=1)return null;const r=(c,o,f,h="")=>c==null?n.jsx("span",{className:`rl-page-link disabled ${h}`,"aria-disabled":"true",children:o}):n.jsx("a",{className:`rl-page-link ${h}`,href:l(c),rel:f,"aria-label":f?i(`reviewList.${f}Page`):i("reviewList.page",{n:c}),children:o});return n.jsxs("nav",{className:"rl-pagination","aria-label":i("reviewList.pagination"),children:[r(a,i("reviewList.previous"),"prev","direction"),ds(e,s).map((c,o)=>c==="gap"?n.jsx("span",{className:"rl-page-gap","aria-hidden":"true",children:"…"},`gap-${o}`):n.jsx("a",{className:"rl-page-link number",href:l(c),"aria-label":i("reviewList.page",{n:c}),"aria-current":c===e?"page":void 0,children:c},c)),r(t,i("reviewList.next"),"next","direction")]})}function Cn({notice:e,leading:s,error:a,loading:t=!1,title:l,action:i,search:r,sections:c=[],sectionMode:o="tabs",facets:f,secondaryFilters:h,rows:p,empty:d,pagination:w,children:m}){const v=A(),[u,x]=g.useState(null),b=g.useId(),S=g.useRef({});S.current={rows:p,cur:u},g.useEffect(()=>{const y=D=>{if(D.metaKey||D.ctrlKey||D.altKey||!ms(D.target,D.key))return;const C=S.current.rows.filter(j=>j.href);if(!C.length)return;if(D.key==="Enter"){const j=C.find(L=>L.key===S.current.cur);j&&(D.preventDefault(),D.stopPropagation(),window.location.hash=j.href);return}D.preventDefault(),D.stopPropagation();const P=C.findIndex(j=>j.key===S.current.cur),K=P<0?D.key==="j"?0:C.length-1:Math.max(0,Math.min(C.length-1,P+(D.key==="j"?1:-1)));x(C[K].key)};return window.addEventListener("keydown",y,!0),()=>window.removeEventListener("keydown",y,!0)},[]),g.useEffect(()=>{var y;(y=document.querySelector(".lp-row.cur"))==null||y.scrollIntoView({block:"nearest"})},[u]);const k=hs(d),$=Math.max(0,c.findIndex(y=>y.active)),N=o==="tabs",E=`${b}-panel`,I=y=>`${b}-tab-${y}`;return n.jsxs(Q,{className:"lp-page",children:[e&&n.jsx("div",{className:"fv-notice",children:e}),s,n.jsxs("div",{className:"rl-content",children:[n.jsxs("div",{className:"rl-titlebar",children:[n.jsx("h1",{children:l}),i]}),r&&n.jsx(xs,{...r}),a&&n.jsx("div",{className:"fv-error lp-error",role:"alert",children:a}),n.jsxs("section",{className:"rl-list",children:[n.jsxs("header",{className:"lp-head",children:[n.jsx("div",{className:"rl-sections",role:N?"tablist":"group","aria-label":l,...N?{"aria-orientation":"horizontal"}:{},children:c.map((y,D)=>n.jsxs("button",{type:"button",role:N?"tab":void 0,"aria-selected":N?y.active:void 0,"aria-pressed":N?void 0:y.active,"aria-controls":N?E:void 0,id:N?I(D):void 0,tabIndex:N?D===$?0:-1:void 0,className:`rl-section ${y.active?"active":""}`,onClick:y.onSelect,onKeyDown:C=>{var j,L;if(!N||!["ArrowLeft","ArrowRight","Home","End"].includes(C.key))return;const P=[...C.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],K=he(P.indexOf(C.currentTarget),P.length,C.key);C.preventDefault(),C.stopPropagation(),(j=P[K])==null||j.focus(),(L=P[K])==null||L.click()},children:[n.jsx("span",{children:y.label}),n.jsx("span",{className:"rl-section-count",children:y.count}),y.countSuffix&&n.jsxs("span",{className:"rl-section-suffix","data-tip":y.countSuffix.text,children:[n.jsx("span",{className:"sr-only",children:y.countSuffix.text}),n.jsx("span",{className:"rl-section-suffix-full","aria-hidden":"true",children:y.countSuffix.text}),n.jsx("span",{className:"rl-section-suffix-compact","aria-hidden":"true",children:y.countSuffix.compact})]})]},y.key))}),n.jsxs("div",{className:"rl-facets",children:[f,h]})]}),n.jsxs("div",{className:"lp-rows",role:N?"tabpanel":"region",id:E,"aria-busy":t||void 0,"aria-labelledby":N?I($):void 0,"aria-label":N?void 0:l,children:[p.length===0&&n.jsx("div",{className:"lp-empty",children:t?v("common.loading"):k}),p.map(y=>y.href?n.jsx("a",{className:`lp-row ${y.cls||""} ${u===y.key?"cur":""}`,href:y.href,children:y.content},y.key):n.jsx("div",{className:`lp-row inert ${y.cls||""}`,children:y.content},y.key))]})]}),w&&n.jsx(js,{...w})]}),m]})}function Rn({title:e,titleMeta:s,status:a,side:t,composer:l,missing:i,failure:r,listHref:c,listLabel:o,backHref:f,backLabel:h,children:p}){return r?n.jsxs(Q,{className:"ds-page ds-missing ds-failed",role:"alert",children:[n.jsx("div",{className:"ds-missing-note",children:r}),c&&n.jsx("a",{className:"ds-backlink",href:c,children:o})]}):i?n.jsxs(Q,{className:"ds-page ds-missing",children:[n.jsx("div",{className:"ds-missing-note",children:i}),c&&n.jsx("a",{className:"ds-backlink",href:c,children:o})]}):n.jsxs(Q,{className:"ds-page",children:[n.jsxs("header",{className:"ds-head",children:[f&&n.jsx("a",{className:"ds-back",href:f,"data-tip":h,"aria-label":h,children:n.jsx(R,{name:"arrow-left",size:16})}),n.jsxs("h1",{className:"ds-title",children:[e,s&&n.jsx("span",{className:"ds-title-meta",children:s})]})]}),a&&n.jsx("div",{className:"ds-status",children:a}),n.jsxs("div",{className:"ds-cols",children:[n.jsxs("div",{className:"ds-main",children:[p,l&&n.jsx("div",{className:"ds-compose",children:l})]}),n.jsx("aside",{className:"ds-side",children:t})]})]})}function Tn({label:e,children:s}){return n.jsxs("div",{className:"ds-side-sec",children:[n.jsx("span",{className:"ds-side-label",children:e}),n.jsx("div",{className:"ds-side-body",children:s})]})}function gs({text:e,tip:s,dim:a=!1,mono:t=!1,href:l=null,external:i=!1,onClick:r=null,className:c="",lead:o=null,trail:f=null,label:h=null}){const p=`ds-val${a?" dim":""}${t?" mono":""}${l||r?" link":""}${c?` ${c}`:""}`,d=s??(typeof e=="string"?e:void 0),w=h?{"aria-label":h}:{},m=n.jsxs(n.Fragment,{children:[o,n.jsx("span",{className:"ds-val-text",children:e}),f]});return l?n.jsx("a",{className:p,href:l,"data-tip":d,...w,...i?{target:"_blank",rel:"noreferrer"}:{},children:m}):r?n.jsx("button",{type:"button",className:p,onClick:r,"data-tip":d,...w,children:m}):n.jsx("span",{className:p,"data-tip":d,children:m})}const ne=Object.freeze({RESULT:"result",BLIND:"blind",UNMEASURED:"unmeasured",DANGLING:"dangling"}),Ve=e=>{var s;return(s=e==null?void 0:e.evidence)!=null&&s.length?e.evidence:(e==null?void 0:e.blob)!=null?[{hash:e.blob,kind:e.blobKind||"image",state:e.blobState||"present"}]:[]},Vn=e=>{const s=Ve(e);return s.length?["video","image","transcript","data"].filter(a=>s.some(t=>t.kind===a)):["note"]},Fn=e=>String(e||"").length>22?`${String(e).slice(0,8)}…`:e;function Fe(e,s,a){return a.map(t=>t==="section"?e.section:e.facets[t]).filter(t=>{var l;return(t==null?void 0:t.meaningful)!==!1&&(((l=t==null?void 0:t.options)==null?void 0:l.length)>1||(t==null?void 0:t.value)!=null&&t.value!==""&&t.value!=="all")}).map(t=>({key:t.key,label:t.label,value:t.value,active:t.value!=null&&t.value!==""&&t.value!=="all",options:t.options,clearLabel:t.value==="all"?null:void 0,onChange:l=>s({[t.key]:l||null})}))}const _=e=>Le(`/api/evidence/${e}`);function ws({src:e,alt:s,onClose:a}){return g.useEffect(()=>{const t=l=>{l.key==="Escape"&&(l.preventDefault(),l.stopPropagation(),a())};return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[a]),n.jsx("div",{className:"lightbox",onClick:a,children:n.jsx("img",{src:e,alt:s})})}function ys({hash:e}){const s=A(),[a,t]=g.useState(null);return g.useEffect(()=>{let l=!0;return fetch(_(e)).then(i=>i.ok?i.text():Promise.reject(new Error("miss"))).then(i=>{l&&t(i)}).catch(()=>{l&&t("")}),()=>{l=!1}},[e]),a===null?n.jsx("pre",{className:"eval-transcript loading",children:s("nodeView.eval.loadingTranscript")}):n.jsx("pre",{className:"eval-transcript",children:a})}function Ns({hash:e,collapsed:s=!1}){const a=A(),[t,l]=g.useState(null);if(g.useEffect(()=>{let r=!0;return fetch(_(e)).then(c=>c.ok?c.text():Promise.reject(new Error("miss"))).then(c=>{let o=c,f=!0;try{o=JSON.stringify(JSON.parse(c),null,2)}catch{f=!1}r&&l({text:o,valid:f})}).catch(()=>{r&&l({text:"",valid:!1})}),()=>{r=!1}},[e]),t===null)return n.jsx("pre",{className:"eval-data loading",children:a("nodeView.eval.loadingData")});const i=t.valid?a("nodeView.eval.data"):a("nodeView.eval.dataInvalid");return s?n.jsxs("details",{className:"eval-datawrap eval-datafold",children:[n.jsx("summary",{className:"eval-datahead",children:i}),n.jsx("pre",{className:"eval-data",children:t.text})]}):n.jsxs("div",{className:"eval-datawrap",children:[n.jsx("div",{className:"eval-datahead",children:i}),n.jsx("pre",{className:"eval-data",children:t.text})]})}function bs({hash:e,alt:s}){const[a,t]=g.useState(!1);return n.jsxs(n.Fragment,{children:[n.jsx("img",{className:"an-image",src:_(e),alt:s,loading:"lazy",onClick:()=>t(!0)}),a&&n.jsx(ws,{src:_(e),alt:s,onClose:()=>t(!1)})]})}function ks({exit:e}){return n.jsx(R,{name:e?"minimize":"maximize",size:15})}function Pn({target:e,className:s=""}){const a=A(),[t,l]=g.useState(!1);g.useEffect(()=>{const r=()=>{const c=document.fullscreenElement,o=e==null?void 0:e.current;l(!!c&&!!o&&(c===o||o.contains(c)))};return document.addEventListener("fullscreenchange",r),()=>document.removeEventListener("fullscreenchange",r)},[e]);const i=()=>{var c,o;const r=e==null?void 0:e.current;r&&(document.fullscreenElement?(c=document.exitFullscreen||document.webkitExitFullscreen)==null||c.call(document):(o=r.requestFullscreen||r.webkitRequestFullscreen)==null||o.call(r))};return n.jsx("button",{type:"button",className:`an-fs ${s}`,onClick:i,"data-tip":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),"aria-label":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),children:n.jsx(ks,{exit:t})})}function Pe({e,alt:s="",collapsed:a=!1}){const t=A();return e.state==="miss"?n.jsx("div",{className:"eval-noimg",children:t("nodeView.eval.miss")}):e.kind==="transcript"?n.jsx(ys,{hash:e.hash}):e.kind==="data"?n.jsx(Ns,{hash:e.hash,collapsed:a}):e.kind==="video"?n.jsx("video",{className:"eval-video",src:_(e.hash),controls:!0,preload:"metadata",playsInline:!0}):n.jsx(bs,{hash:e.hash,alt:s})}const W=new Map;function Ss(e){const[s,a]=g.useState(()=>W.get(e)??null);return g.useEffect(()=>{if(W.has(e)){a(W.get(e));return}let t=!0;return fetch(_(e),{headers:{Range:"bytes=0-0"}}).then(l=>{const i=l.headers.get("content-type")||"",r=l.ok?{kind:i.startsWith("video/")?"video":i.startsWith("image/")?"image":i.startsWith("application/json")?"data":"transcript",state:"present"}:{kind:"image",state:"miss"};W.set(e,r),t&&a(r)}).catch(()=>{t&&a({kind:"image",state:"miss"})}),()=>{t=!1}},[e]),s}function Me({hash:e,alt:s=""}){const a=Ss(e);return a?n.jsx(Pe,{e:{hash:e,...a},alt:s}):null}function $s(e){var s,a;return((s=e==null?void 0:e.verdict)==null?void 0:s.status)==="pass"?"check":((a=e==null?void 0:e.verdict)==null?void 0:a.status)==="fail"?"cross":null}function qe(e){const s=$s(e);return s?e.fresh?s==="cross"?"fail":"pass":s==="cross"?"staleFail":"stalePass":"empty"}function Es(e,s){if(!e)return[];const a=new Map;for(const t of s||[])a.has(t.scenario)||a.set(t.scenario,t);return e.map(t=>{const l=a.get(t.name)||null;return{...t,reading:l,state:l?qe(l):"missing"}})}function Ls(e){return e.length?e.some(s=>s.state==="fail")?"fail":e.some(s=>s.state==="staleFail")?"staleFail":e.some(s=>s.state==="stalePass")?"stalePass":e.some(s=>s.state==="empty"||s.state==="missing")?"empty":"pass":null}const Ds=e=>e.fail>0?"fail":e.staleFail>0?"staleFail":e.stalePass>0?"stalePass":e.empty>0?"empty":"pass";function As({scenarios:e,evals:s,summary:a=null,href:t}){const l=A(),i=a?null:Es(e,s),r=(a==null?void 0:a.total)??i.length;if(!r)return null;const c=a?Ds(a):Ls(i),o=(a==null?void 0:a.pass)??i.filter(d=>d.state==="pass").length,f=l("score.count",{satisfied:o,total:r,outstanding:r-o}),h=n.jsxs(n.Fragment,{children:[n.jsx(R,{name:"check",size:11}),o,"/",r]});if(!t)return n.jsx("span",{className:`scenario-count ${c}`,"data-tip":f,"aria-label":f,children:h});const p=`${f} — ${l("score.openList")}`;return n.jsx("a",{className:`scenario-count ${c}`,href:t,"data-tip":p,"aria-label":p,children:h})}function G({kind:e,state:s,cls:a,n:t,label:l}){return n.jsxs("span",{className:`ovc ${a}`,"data-tip":l,children:[n.jsx(fe,{kind:e,state:s,title:l,size:11}),t]})}function Is({tags:e}){return e!=null&&e.length?n.jsx("span",{className:"tag-chips",children:e.map(s=>n.jsx("span",{className:"tag-chip",children:s},s))}):null}function Ke({state:e,title:s}){return e?n.jsx(fe,{kind:"eval",state:e,title:s,className:`score-badge ${e}`,size:14}):null}const Mn=e=>({kind:"graph-node",nodeId:e}),qn=e=>({kind:"session",sessionId:e}),Cs=e=>({kind:"issue",issueId:e}),Oe=(e,s)=>({kind:"review-list",page:e,query:s}),_e=(e,s=null)=>({kind:"eval",nodeId:e,scenario:s}),Rs=(e,s,a)=>({kind:"session-eval",sessionId:e,nodeId:s,scenario:a});function q(e){if(!e)return T("graph");if(e.kind==="graph-node")return T("graph");if(e.kind==="session")return T("sessions",e.sessionId);if(e.kind==="session-eval"){const s=e.nodeId&&e.scenario?`${e.nodeId}/${e.scenario}`:null;return T("evals",s,{q:s?`scope:${e.sessionId}`:Ze(e.sessionId)})}return e.kind==="issue"?T("issues",e.issueId):e.kind==="review-list"?T(e.page,null,e.query?{q:e.query}:null):e.kind==="eval"?e.scenario?T("evals",`${e.nodeId}/${e.scenario}`):T("evals",null,{q:Xe(e.nodeId)}):T("graph")}function Kn(e,s=null){return e==="issues"?T("issues"):s?q(Rs(s)):T("evals")}function On(e,{onFocusNode:s,onOpenSession:a}={}){if(e)if(e.kind==="graph-node")s==null||s(e.nodeId),Z("graph");else if(e.kind==="session")a?a(e.sessionId):Z("sessions",e.sessionId);else{const{page:t,param:l,query:i}=es(q(e));Z(t,l,{query:i})}}function ge({issue:e,onNavigateAddress:s}){const a=(e==null?void 0:e.store)||"local",t=(e==null?void 0:e.status)||"open",l=Cs(e.id);return n.jsxs("a",{className:"issue-card",href:q(l),"data-tip":e.concern||e.id,onClick:s?i=>{i.defaultPrevented||i.button!==0||i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),s(l))}:void 0,children:[n.jsxs("span",{className:"issue-card-top",children:[n.jsx("span",{className:"issue-num",children:e.id}),n.jsx("span",{className:`fv-store fv-store-${a==="local"?"local":"forge"}`,children:a}),n.jsx(fe,{kind:"issue",state:t,showLabel:!0,size:12,className:"issue-card-state"})]}),n.jsx("span",{className:"issue-card-title",children:e.concern})]})}const we=[{key:"spec",label:"spec"},{key:"history",label:"history"},{key:"issues",label:"issues"},{key:"eval",label:"eval"}];function Ts(e){var s;return(s=e==null?void 0:e.overlays)!=null&&s.length?[{key:"edit",label:"edit"},...we]:we}const Be=(e,s,a={})=>{let t=`${e==="issue"?"is:issue":ss}${a.q?` ${String(a.q).trim()}`:""}`.trim();const l=e==="issue"?{state:"state",author:"author",store:"store",session:"session"}:{verdict:"verdict",review:"state",freshness:"freshness",kind:"evidence",filer:"filer",session:"session"};for(const[i,r]of Object.entries(l))a[i]&&(t=pe(t,r,a[i]));return pe(t,"node",s)},Vs={state:"reviewList.facetState",verdict:"reviewList.facetVerdict",author:"reviewList.facetAuthor",store:"reviewList.facetStore",review:"reviewList.facetReview",freshness:"reviewList.facetFreshness",kind:"reviewList.facetKind",filer:"reviewList.facetFiler",session:"reviewList.facetSession"},ze=(e,s)=>{const a=t=>t&&{...t,label:s(Vs[t.key]||t.label||t.key)};return{section:a(e==null?void 0:e.section),facets:Object.fromEntries(Object.entries((e==null?void 0:e.facets)||{}).map(([t,l])=>[t,a(l)]))}},Fs={added:"+",edited:"~",deleted:"✕",moved:"→"};function z(e){const s=[],a=/`([^`]+)`|\*\*([^*]+)\*\*|\[\[([^\]]+)\]\]/g;let t=0,l,i=0;for(;l=a.exec(e);)l.index>t&&s.push(e.slice(t,l.index)),l[1]!=null?s.push(n.jsx("code",{children:l[1]},i++)):l[2]!=null?s.push(n.jsx("strong",{children:l[2]},i++)):s.push(n.jsx("span",{className:"doc-link",children:l[3]},i++)),t=a.lastIndex;return t<e.length&&s.push(e.slice(t)),s}function ye(e){const s=e.trim();return s.includes("|")&&/^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test(s)}function te(e){let s=e.trim();return s.startsWith("|")&&(s=s.slice(1)),s.endsWith("|")&&(s=s.slice(0,-1)),s.split("|").map(a=>a.trim())}function Ps(e){const s=e.startsWith(":"),a=e.endsWith(":");return s&&a?"center":a?"right":null}function J({body:e}){if(!e)return null;const s=e.replace(/^#\s+[^\n]*\n+/,"").split(`
|
|
2
|
-
`),a=[];let t=0,l=0;for(;t<s.length;){const i=s[t].trim();if(/^```/.test(i)){const r=[];for(t++;t<s.length&&!/^```/.test(s[t].trim());)r.push(s[t++]);t++,a.push(n.jsx("pre",{className:"doc-pre",children:n.jsx("code",{children:r.join(`
|
|
3
|
-
`)})},l++))}else if(/^#{1,6}\s+/.test(s[t]))a.push(n.jsx("h4",{className:"doc-h",children:z(s[t].replace(/^#+\s+/,""))},l++)),t++;else if(i.includes("|")&&t+1<s.length&&ye(s[t+1])){const r=te(s[t]),c=te(s[t+1]).map(Ps);t+=2;const o=[];for(;t<s.length&&s[t].includes("|")&&s[t].trim()!==""&&!/^```/.test(s[t].trim());)o.push(te(s[t])),t++;a.push(n.jsxs("table",{className:"doc-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:r.map((f,h)=>n.jsx("th",{style:c[h]?{textAlign:c[h]}:void 0,children:z(f)},h))})}),n.jsx("tbody",{children:o.map((f,h)=>n.jsx("tr",{children:r.map((p,d)=>n.jsx("td",{style:c[d]?{textAlign:c[d]}:void 0,children:z(f[d]??"")},d))},h))})]},l++))}else if(/^-\s+/.test(i)){const r=[];for(;t<s.length&&/^-\s+/.test(s[t].trim());)r.push(s[t++].trim().replace(/^-\s+/,""));a.push(n.jsx("ul",{children:r.map((c,o)=>n.jsx("li",{children:z(c)},o))},l++))}else if(i==="")t++;else{const r=[];for(;t<s.length;){const c=s[t];if(c.trim()===""||/^```/.test(c.trim())||/^#{1,6}\s+/.test(c)||/^-\s+/.test(c.trim())||c.includes("|")&&t+1<s.length&&ye(s[t+1]))break;r.push(c),t++}a.push(n.jsx("p",{children:z(r.join(" "))},l++))}}return n.jsx("div",{className:"doc-body",children:a})}function Ne({kind:e,title:s,owner:a,ownerLabel:t,note:l,children:i}){return n.jsxs("section",{className:`spec-part part-${e}`,children:[n.jsxs("header",{className:"part-head",children:[n.jsx("span",{className:"part-title",children:s}),n.jsx("span",{className:`part-owner owner-${a}`,children:t}),l&&n.jsx("span",{className:"part-note",children:l})]}),n.jsx("div",{className:"part-body",children:i})]})}function Ms({parts:e}){const s=A();return n.jsxs("div",{className:"spec-parts",children:[n.jsx(Ne,{kind:"raw",title:s("nodeView.rawTitle"),owner:"human",ownerLabel:s("nodeView.rawOwner"),note:s("nodeView.rawNote"),children:n.jsx(J,{body:e.rawSource})}),n.jsx(Ne,{kind:"expanded",title:s("nodeView.expandedTitle"),owner:"agent",ownerLabel:s("nodeView.expandedOwner"),note:s("nodeView.expandedNote"),children:n.jsx(J,{body:e.expandedSpec})})]})}const ae=new Map;function qs(e,s){const a=`${e}@${s??""}`,[t,l]=g.useState(()=>ae.get(a)??null);return g.useEffect(()=>{const i=ae.get(a);if(i){l(i);return}l(null);let r=!0;return fetch(ue(e,"content")).then(c=>c.ok?c.json():Promise.reject(c.status)).then(c=>{ae.set(a,c),r&&l(c)}).catch(()=>{r&&l({body:"",parts:null})}),()=>{r=!1}},[e,s,a]),t}function Ks({node:e}){var l,i;const s=A(),a=qs(e.id,e.version),t=(e.driftFiles||[]).map(r=>`${r.file}: ${s("specNode.driftAhead",{n:r.behind})}`).join(`
|
|
4
|
-
`);return n.jsxs("div",{className:"pane-doc",children:[n.jsxs("h1",{children:["# ",e.title]}),n.jsx("blockquote",{children:e.desc}),n.jsxs("div",{className:"doc-stat",children:[n.jsxs("span",{className:`stat-status st-${e.status}`,"data-tip":s("nodeView.statusLabel"),children:[n.jsx("i",{className:"stat-dot"}),s(`status.${e.status}`)]}),n.jsxs("span",{className:"stat-chip","data-tip":s("nodeView.versionLabel"),children:["v",e.version||0]}),n.jsx(As,{summary:(l=e.reviewSummary)==null?void 0:l.evals,href:q(_e(e.id))}),e.drift>0&&n.jsxs("span",{className:"stat-chip stat-drift","data-tip":t,children:["⚠",e.drift]}),n.jsxs("span",{className:"stat-sess","data-tip":s("nodeView.lastEditedBy"),children:["✎ ",n.jsx("b",{children:e.session||s("common.none")})]})]}),((i=e.code)==null?void 0:i.length)>0?n.jsxs("div",{className:"doc-gov",children:[n.jsxs("span",{className:"doc-gov-h",children:[s("nodeView.governs")," ",n.jsx("b",{children:e.code.length})]}),n.jsx("div",{className:"doc-gov-files",children:e.code.map(r=>n.jsx("code",{className:"gov-f",children:r},r))})]}):n.jsx("div",{className:"doc-gov prose",children:n.jsx("span",{className:"doc-gov-h",children:s("nodeView.proseNode")})}),(()=>{if(a===null&&e.body==null)return n.jsx("div",{className:"pane-loading",children:n.jsx("span",{className:"spinner","aria-label":s("common.loading")})});const r=e.body??(a==null?void 0:a.body)??"",c=e.parts??(a==null?void 0:a.parts)??null;return c?n.jsx(Ms,{parts:c}):n.jsx(J,{body:r})})()]})}function Os(e,s=!0){const[a,t]=g.useState(null);return g.useEffect(()=>{if(!s)return;let l=!0;return fetch(ue(e,"history")).then(i=>i.json()).then(i=>{l&&t(i)}).catch(()=>l&&t([])),()=>{l=!1}},[e,s]),a}const le=new Map;function _s(e,s,a){const t=`${e}/${s}`,[l,i]=g.useState(()=>le.get(t)??null);return g.useEffect(()=>{const r=le.get(t);if(r){i(r);return}let c=!0;return fetch(ue(e,"diff",s)).then(o=>o.json()).then(o=>{le.set(t,o),c&&i(o)}).catch(()=>c&&i({patch:""})),()=>{c=!1}},[e,s,a,t]),l}function Bs(e){const s=[];let a=!1;for(const t of e.split(`
|
|
5
|
-
`)){if(t.startsWith("@@")){a=!0,s.push({t:"hunk",s:t});continue}!a||t.startsWith("\\")||(t.startsWith("+")?s.push({t:"add",s:t.slice(1)}):t.startsWith("-")?s.push({t:"del",s:t.slice(1)}):s.push({t:"ctx",s:t.slice(1)}))}for(;s.length&&s[s.length-1].t==="ctx"&&s[s.length-1].s==="";)s.pop();return s}function He({diff:e}){const s=A();if(e==null)return n.jsx("figcaption",{className:"ev-note",children:s("nodeView.loadingChange")});const a=e.patch?Bs(e.patch):[];return a.length?n.jsxs(n.Fragment,{children:[n.jsx("figcaption",{className:"ev-difflabel",children:s("nodeView.diffLabel")}),n.jsx("pre",{className:"ev-diff",children:a.map((t,l)=>n.jsx("div",{className:`dl dl-${t.t}`,children:t.s||" "},l))})]}):n.jsx("figcaption",{className:"ev-note",children:s("nodeView.noChange")})}function Ue({items:e,itemKey:s,classes:a,rowClass:t,renderHeader:l,renderEvidence:i,renderAction:r,leading:c,trailing:o,resetKey:f}){const h=g.useRef(null),[p,d]=g.useState(()=>new Set([0]));g.useEffect(()=>{f!==void 0&&d(new Set([0]))},[f]);const w=g.useCallback(v=>d(u=>{const x=new Set(u);return x.has(v)?x.delete(v):x.add(v),x}),[]),m=g.useCallback(()=>d(v=>{const u=h.current;if(!u)return v;let x=-1;for(;v.has(x+1);)x++;if(x<0||x>=e.length-1)return v;const b=u.querySelector(`[data-i="${x}"]`);return!b||b.getBoundingClientRect().bottom-u.getBoundingClientRect().top>u.clientHeight+40?v:new Set(v).add(x+1)}),[e]);return g.useEffect(()=>{const v=h.current;if(!v)return;let u=v.scrollTop;const x=()=>{const S=v.scrollTop,k=S>u;u=S,k&&m()},b=S=>{S.key!=="j"&&S.key!=="ArrowDown"||v.scrollHeight-v.clientHeight-v.scrollTop>1||m()};return v.addEventListener("scroll",x,{passive:!0}),window.addEventListener("keydown",b,!0),()=>{v.removeEventListener("scroll",x),window.removeEventListener("keydown",b,!0)}},[m]),n.jsxs("div",{className:a.pane,ref:h,children:[c,e.map((v,u)=>{const x=p.has(u),b=t?t(v,u):"";return n.jsxs("div",{"data-i":u,className:`${a.row}${b?` ${b}`:""}${x?" open":""}`,children:[n.jsx("button",{className:a.head,onClick:()=>w(u),"aria-expanded":x,children:l(v,u,x)}),r==null?void 0:r(v,u),x&&n.jsx("figure",{className:a.evidence,children:i(v,u)})]},s(v,u))}),o]})}function zs({node:e,r:s,latest:a}){const t=_s(e.id,s.hash,!0);return n.jsx(He,{diff:t})}function Hs({node:e,rows:s}){const a=A();return s?s.length?n.jsx(Ue,{items:s,itemKey:t=>t.hash,classes:{pane:"pane-hist",row:"ver-row",head:"rec-toggle",evidence:"rec-evidence"},rowClass:(t,l)=>l===0?"latest":"",renderHeader:(t,l,i)=>n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"rec-head",children:[n.jsx("span",{className:"rec-caret",children:i?"▾":"▸"}),n.jsxs("span",{className:"rec-v",children:["v",s.length-l]}),n.jsx("code",{className:"rec-hash",children:t.hash.slice(0,7)}),n.jsx("span",{className:"rec-date",children:(t.date||"").slice(0,10)}),n.jsxs("span",{className:"rec-diff",children:[n.jsxs("b",{className:"rec-add",children:["+",t.additions??0]}),n.jsxs("b",{className:"rec-del",children:["−",t.deletions??0]})]})]}),n.jsx("div",{className:"rec-msg",children:t.reason}),n.jsxs("div",{className:"rec-sub",children:[a("nodeView.filesChanged",{n:t.files??0})," · ",t.session||a("common.idle")]})]}),renderEvidence:(t,l)=>n.jsx(zs,{node:e,r:t,latest:l===0})}):n.jsx("div",{className:"pane-hist empty",children:a("common.noVersions")}):n.jsx("div",{className:"pane-hist empty",children:a("nodeView.loadingHistory")})}function Us({node:e,sessions:s=[],filter:a={},onFilter:t=()=>{}}){var w,m,v,u,x;const l=A(),i=Be("issue",e.id,a),r=Ie("issues",i,1,{pollMs:0});if(r.loading)return n.jsx("div",{className:"pane-issues pane-loading",children:n.jsx("span",{className:"spinner","aria-label":l("common.loading")})});if(r.error)return n.jsx("div",{className:"pane-issues empty",children:r.error});const c=((w=r.data)==null?void 0:w.items)||[],o=(((v=(m=e.reviewSummary)==null?void 0:m.issues)==null?void 0:v.open)||0)+(((x=(u=e.reviewSummary)==null?void 0:u.issues)==null?void 0:x.closed)||0);if(!o)return n.jsx("div",{className:"pane-issues empty",children:l("nodeView.noIssues")});const f=ze(r.data,l),h=c.filter(b=>b.status==="open"),p=c.filter(b=>b.status!=="open"),d=Fe(f,t,["section","author","store","session"]);return n.jsxs("div",{className:"pane-issues",children:[o>4&&n.jsx(Te,{value:a.q||"",onChange:b=>t({q:b||null}),summary:{shown:c.length,total:r.data.total},placeholder:l("nodeView.filterIssues"),searchLabel:l("reviewList.searchIssues"),filterLabel:l("reviewList.filters"),clearLabel:l("reviewList.all"),clearSearchLabel:l("reviewList.clearSearch"),groups:d}),!c.length&&n.jsx("div",{className:"pane-filter-none",children:l("nodeView.filterNone")}),h.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"issue-group-head",children:l("nodeView.openIssues",{n:h.length})}),h.map(b=>n.jsx(ge,{issue:b},b.id))]}),p.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"issue-group-head closed",children:l("nodeView.closedIssues",{n:p.length})}),p.map(b=>n.jsx(ge,{issue:b},b.id))]}),r.data.total>c.length&&n.jsxs("a",{className:"pane-view-all",href:q(Oe("issues",i)),children:[l("reviewList.showing",{shown:c.length,total:r.data.total})," ",n.jsx(R,{name:"chevron-right",size:13})]})]})}const re=new Map;function Ws(e,s,a){const t=`${e} ${s}`,[l,i]=g.useState(()=>re.get(t)??null);return g.useEffect(()=>{if(!e||!s)return;const r=re.get(t);r&&i(r);let c=!0;return fetch(Le(`/api/edit?source=${encodeURIComponent(e)}&path=${encodeURIComponent(s)}`)).then(o=>o.json()).then(o=>{re.set(t,o),c&&i(o)}).catch(()=>c&&i(o=>o??{patch:""})),()=>{c=!1}},[e,s,a,t]),l}function Gs({node:e,ov:s}){const a=A(),t=Ws(s.source,e.path,!0);return n.jsxs("figure",{className:"edit-rev",children:[n.jsxs("figcaption",{className:"edit-by",children:[n.jsx("span",{className:`ov-mark ov-${s.op}`,children:Fs[s.op]||"•"}),n.jsx("span",{className:"edit-by-label",children:s.label}),n.jsx("span",{className:"edit-state",children:s.committed?a("nodeView.editCommitted"):a("nodeView.editDirty")})]}),n.jsx(He,{diff:t})]})}function Qs({node:e}){const s=A(),a=e.overlays||[];return a.length?n.jsx("div",{className:"pane-edit",children:a.map((t,l)=>n.jsx(Gs,{node:e,ov:t},l))}):n.jsx("div",{className:"pane-edit empty",children:s("nodeView.noEdit")})}function Ys({verdict:e}){const s=A();return e?e.status==="pass"?n.jsx("span",{className:"eval-verdict pass",children:s("nodeView.eval.pass")}):e.status==="fail"?n.jsx("span",{className:"eval-verdict fail",children:s("nodeView.eval.fail")}):n.jsx("span",{className:"eval-verdict note","data-tip":e.note,children:s("nodeView.eval.note")}):n.jsx("span",{className:"eval-verdict legacy",children:s("nodeView.eval.legacy")})}function Js({r:e}){var t;const s=A(),a=Ve(e);return n.jsxs(n.Fragment,{children:[e.expected&&n.jsxs("div",{className:"eval-expected",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.expected")})," ",e.expected]}),((t=e.verdict)==null?void 0:t.note)&&n.jsxs("div",{className:"eval-note",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.noteLabel")})," ",e.verdict.note]}),a.length>0?n.jsx("div",{className:"eval-gallery",style:{display:"flex",flexDirection:"column",gap:8},children:a.map((l,i)=>n.jsx(Pe,{e:l,alt:s("nodeView.eval.shotAlt",{scenario:e.scenario})},`${l.hash}-${i}`))}):n.jsx("figcaption",{className:"eval-noimg",children:e.blobState==="miss"?s("nodeView.eval.miss"):s("nodeView.eval.noImage")})]})}function be({s:e}){var a;const s=A();return n.jsxs("div",{className:"eval-row eval-declared-row",children:[n.jsxs("span",{className:"eval-top",children:[n.jsx(Ke,{state:"empty",title:s("score.missing")}),n.jsx("span",{className:"eval-scenario",children:e.name}),n.jsx(Is,{tags:e.tags}),((a=e.code)==null?void 0:a.length)>0&&n.jsx("code",{className:"eval-tracks",children:e.code.join(", ")})]}),e.expected&&n.jsxs("div",{className:"eval-expected",children:[n.jsx("span",{className:"eval-expected-label",children:s("nodeView.eval.expected")})," ",e.expected]})]})}function ke({track:e}){const s=A();return n.jsxs("div",{className:"eval-row eval-dangling-row",children:[n.jsxs("span",{className:"eval-top",children:[n.jsx("span",{className:"eval-dangling-badge","data-tip":s("nodeView.eval.danglingTitle"),children:"⚠"}),n.jsx("span",{className:"eval-scenario eval-dangling-name",children:e.scenario}),n.jsx("span",{className:"eval-dangling-tag",children:s("nodeView.eval.danglingGone")})]}),n.jsx("div",{className:"eval-dangling-remarks",children:n.jsx(gn,{replies:e.remarks})})]})}function Zs({node:e,sessions:s=[],filter:a={},onFilter:t=()=>{}}){var v;const l=A(),i=Be("eval",e.id,a),r=Ie("evals",i,1,{pollMs:0,view:"timeline"});if(r.loading)return n.jsx("div",{className:"pane-eval pane-loading",children:n.jsx("span",{className:"spinner","aria-label":l("common.loading")})});if(r.error)return n.jsx("div",{className:"pane-eval empty",children:r.error});if(!((v=r.data)!=null&&v.hasEvalFile))return n.jsx("div",{className:"pane-eval empty",children:l("nodeView.eval.noScenarios")});const c=r.data.items||[],o=c.filter(u=>u.filterKind===ne.RESULT),f=c.filter(u=>u.filterKind===ne.UNMEASURED),h=c.filter(u=>u.filterKind===ne.DANGLING),p=ze(r.data,l),d=Fe(p,t,["section","review","freshness","kind","filer","session"]),w=r.data.sourceTotal>4?n.jsx(Te,{value:a.q||"",onChange:u=>t({q:u||null}),summary:{shown:c.length,total:r.data.total},placeholder:l("nodeView.filterScenarios"),searchLabel:l("reviewList.searchEvals"),filterLabel:l("reviewList.filters"),clearLabel:l("reviewList.all"),clearSearchLabel:l("reviewList.clearSearch"),groups:d},"filter"):null,m=r.data.total>c.length?n.jsxs("a",{className:"pane-view-all",href:q(Oe("evals",i)),children:[l("reviewList.showing",{shown:c.length,total:r.data.total})," ",n.jsx(R,{name:"chevron-right",size:13})]}):null;return o.length?n.jsxs(n.Fragment,{children:[n.jsx(Ue,{items:o,resetKey:`${r.data.revision}:${JSON.stringify(a)}`,leading:[w,c.length?null:n.jsx("div",{className:"pane-filter-none",children:l("nodeView.filterNone")},"none"),...f.map(u=>n.jsx(be,{s:u},u.name))],trailing:h.map(u=>n.jsx(ke,{track:u},u.threadId)),itemKey:(u,x)=>`${u.scenario}-${u.ts}-${x}`,classes:{pane:"pane-eval",row:"eval-row",head:"eval-head",evidence:"eval-shot"},renderAction:u=>n.jsx("a",{className:"eval-open",href:q(_e(e.id,u.scenario)),"data-tip":l("nodeView.eval.openDetail"),"aria-label":l("nodeView.eval.openDetail"),children:n.jsx(R,{name:"chevron-right",size:14})}),renderHeader:(u,x,b)=>n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"eval-top",children:[n.jsx("span",{className:"eval-caret",children:b?"▾":"▸"}),n.jsx("span",{className:"eval-scenario",children:u.scenario}),n.jsx(Ys,{verdict:u.verdict}),n.jsx(Ke,{state:qe(u),title:u.fresh?void 0:l("nodeView.eval.staleAxes",{axes:u.staleAxes.join(", ")})})]}),n.jsxs("span",{className:"eval-meta",children:[u.evaluator&&n.jsx("span",{className:"eval-evaluator",children:u.evaluator}),n.jsx("code",{className:"eval-sha",children:u.codeSha.slice(0,7)}),n.jsx("span",{className:"eval-ts",children:u.ts.replace("T"," ").slice(0,16)})]})]}),renderEvidence:u=>n.jsx(Js,{r:u})}),m]}):n.jsxs("div",{className:"pane-eval pane-eval-declared",children:[w,n.jsx("div",{className:"eval-todo-note",children:c.length?l("nodeView.eval.noReadings"):l("nodeView.filterNone")}),f.map(u=>n.jsx(be,{s:u},u.name)),h.map(u=>n.jsx(ke,{track:u},u.threadId)),m]})}const Xs={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"};function _n({node:e,pane:s,setPane:a,onClose:t,sessions:l=[]}){var x,b,S,k,$,N,E,I;const i=A(),[r,c]=g.useState({issues:{},eval:{}}),o=(y,D)=>c(C=>({...C,[y]:fs(C[y],D)})),f=((b=(x=e.reviewSummary)==null?void 0:x.issues)==null?void 0:b.open)||0,h=((k=(S=e.reviewSummary)==null?void 0:S.issues)==null?void 0:k.closed)||0,p=((N=($=e.reviewSummary)==null?void 0:$.evals)==null?void 0:N.pass)||0,d=((I=(E=e.reviewSummary)==null?void 0:E.evals)==null?void 0:I.fail)||0,w=(e.overlays||[]).length,m=Ts(e),v=m.some(y=>y.key===s)?s:m[0].key,u=Os(e.id,v==="history");return n.jsx("div",{className:"ov-backdrop","data-focus-overlay":!0,onMouseDown:t,children:n.jsxs("div",{className:"ov-panel",onMouseDown:y=>y.stopPropagation(),children:[n.jsxs("div",{className:"ov-head",children:[n.jsx("span",{className:"ov-title",children:e.title}),n.jsx("div",{className:"ov-tabs",children:m.map(y=>n.jsxs("button",{className:y.key===v?"ov-tab on":"ov-tab",onClick:()=>a(y.key),children:[i(Xs[y.key]),y.key==="issues"&&(f>0||h>0)&&n.jsxs("span",{className:"ov-tab-counts",children:[f>0&&n.jsx(G,{kind:"issue",state:"open",cls:"st-open",n:f,label:i("nodeView.openIssues",{n:f})}),h>0&&n.jsx(G,{kind:"issue",state:"closed",cls:"st-closed",n:h,label:i("nodeView.closedIssues",{n:h})})]}),y.key==="eval"&&(p>0||d>0)&&n.jsxs("span",{className:"ov-tab-counts",children:[p>0&&n.jsx(G,{kind:"eval",state:"pass",cls:"st-pass",n:p,label:i("nodeView.eval.passCount",{n:p})}),d>0&&n.jsx(G,{kind:"eval",state:"fail",cls:"st-fail",n:d,label:i("nodeView.eval.failCount",{n:d})})]}),y.key==="edit"&&w>0&&n.jsx("span",{className:"ov-tab-counts",children:n.jsx("span",{className:"ovc st-edit","data-tip":i("nodeView.pendingEdits",{n:w}),children:w})})]},y.key))}),n.jsx("span",{className:"ov-hint",children:i("nodeView.hint")})]}),n.jsxs("div",{className:"ov-body",children:[v==="spec"&&n.jsx("div",{className:"pane-solo",children:n.jsx(Ks,{node:e})}),v==="history"&&n.jsx(Hs,{node:e,rows:u}),v==="issues"&&n.jsx(Us,{node:e,sessions:l,filter:r.issues,onFilter:y=>o("issues",y)}),v==="eval"&&n.jsx(Zs,{node:e,sessions:l,filter:r.eval,onFilter:y=>o("eval",y)}),v==="edit"&&n.jsx(Qs,{node:e})]})]})})}const Bn=/\[\[(\.?[\p{L}\p{N}_-]+)\]\]/gu,We=e=>(e||"").replace(/^\.spec\//,"").replace(/\/spec\.md$/,"");function en(e,s,a){const t=s.toLowerCase(),l=[];for(const i of e){const r=i.id.toLowerCase(),c=We(i.path).toLowerCase();let o;if(!t)o=3;else if(r.startsWith(t))o=0;else if(r.includes(t))o=1;else if(c.includes(t))o=2;else continue;i.id===a&&(o=-1),l.push({s:i,score:o})}return l.sort((i,r)=>i.score-r.score||i.s.id.length-r.s.id.length||i.s.id.localeCompare(r.s.id)),l.slice(0,8).map(i=>i.s)}function sn(e,s){const a=s.toLowerCase(),t=i=>ls(i)||(i.id||"").slice(0,8),l=[];for(const i of e||[]){const r=(i.id||"").toLowerCase(),c=t(i).toLowerCase();let o;if(!a)o=3;else if(r===a||c===a)o=0;else if(r.startsWith(a)||c.startsWith(a))o=1;else if(r.includes(a)||c.includes(a))o=2;else continue;l.push({s:i,score:o})}return l.sort((i,r)=>i.score-r.score||(r.s.created||0)-(i.s.created||0)),l.slice(0,8).map(i=>({id:i.s.id,label:t(i.s),sub:i.s.node||i.s.status}))}function ce(e,s){if(!s)return e;const a=e.toLowerCase().indexOf(s.toLowerCase());return a<0?e:n.jsxs(n.Fragment,{children:[e.slice(0,a),n.jsx("b",{className:"mention-hit",children:e.slice(a,a+s.length)}),e.slice(a+s.length)]})}function Ge(e,s){const a=s.toLowerCase(),t=[];for(const l of e){const i=l.name.toLowerCase();let r;if(!a)r=1;else if(i.startsWith(a))r=0;else if(i.includes(a))r=1;else continue;t.push({c:l,score:r})}return t.sort((l,i)=>l.score-i.score),t.slice(0,10).map(l=>l.c)}function zn(e,s,a){let t=s;for(;t>0&&!/\s/.test(e[t-1]);)t--;if(e[t]!=="/")return null;const l=e.slice(t+1,s),i=Ge(a,l);return i.length?{items:i,index:0,start:t,end:s,query:l}:null}const nn=e=>e&&e[0].toUpperCase()+e.slice(1),tn={user:"(user)",project:"(project)",skill:"[skill]","built-in":"built-in",ui:"[ui]",preset:"[preset]",review:"[review]"};function an({menu:e,up:s,head:a,onPick:t,onHover:l}){const i=A();return n.jsxs("ul",{className:s?"mention-menu up":"mention-menu",role:"listbox",children:[n.jsxs("li",{className:"mention-head",children:["// ",a," — ",i("session.menuHint")]}),e.items.map((r,c)=>{const o=r.ui?"ui":r.source??r.kind,f=r.ui?` sc-${r.color}`:"";return n.jsxs("li",{role:"option","aria-selected":c===e.index,className:`${c===e.index?"mention-item on":"mention-item"}${f}`,onMouseDown:h=>{h.preventDefault(),t(r)},onMouseEnter:()=>l(c),children:[n.jsxs("span",{className:r.ui?"slash-name ui":"slash-name",children:["/",ce(r.name,e.query)]}),n.jsx("span",{className:"slash-desc",children:nn(r.description??r.desc)}),n.jsx("span",{className:`slash-src src-${o}`,children:tn[o]||o})]},`${o}:${r.name}`)})]})}function ln(e,s,a,t){let l=s-1;for(;l>=0&&/[\p{L}\p{N}_.\-]/u.test(e[l]);)l--;if(l>=1&&e[l-1]==="["&&e[l]==="["){const i=e.slice(l+1,s),r=en(a,i,t);return r.length?{kind:"mention",items:r,index:0,start:l-1,end:s,query:i}:null}return null}function rn(e,s,a){let t=s-1;for(;t>=0&&/[\p{L}\p{N}_.:\-]/u.test(e[t]);)t--;if(t>=0&&e[t]==="@"&&(t===0||/\s/.test(e[t-1]))){const l=e.slice(t+1,s),i=sn(a,l);return i.length?{kind:"session",items:i,index:0,start:t,end:s,query:l}:null}return null}function cn({menu:e,up:s,fixedStyle:a,onPick:t,onHover:l}){const i=A(),r=e.kind==="session",c=e.query?r?`@${e.query}`:`[[${e.query}]]`:i(r?"session.menuSessions":"session.menuSpecNodes");return n.jsxs("ul",{className:`${s?"mention-menu up":"mention-menu"}${a?" fixed":""}`,style:a||void 0,role:"listbox",children:[n.jsxs("li",{className:"mention-head",children:["// ",c," — ",i("session.menuHint")]}),e.items.map((o,f)=>n.jsxs("li",{role:"option","aria-selected":f===e.index,className:f===e.index?"mention-item on":"mention-item",onMouseDown:h=>{h.preventDefault(),t(o)},onMouseEnter:()=>l(f),children:[!r&&n.jsx("span",{className:"mention-dot",style:{background:F[o.status]||F.offline}}),n.jsx("span",{className:"mention-id",children:r?n.jsxs(n.Fragment,{children:["@",ce(o.label,e.query)]}):ce(o.id,e.query)}),n.jsx("span",{className:"mention-path",children:r?o.sub:We(o.path)})]},o.id))]})}function on({inputRef:e,value:s,setValue:a,specs:t=[],sessions:l=[],focusId:i=null,up:r=!1,fixedAbove:c=null}){const[o,f]=g.useState(null),[h,p]=g.useState(null),d=g.useRef(null),w=k=>`${k.value}\0${k.selectionStart}`,m=k=>{var C;if(!k){f(null),p(null);return}const $=w(k);if(d.current===$){f(null),p(null);return}d.current=null;const N=k.selectionStart,E=ln(k.value,N,t,i)||rn(k.value,N,l);if(f(E),!E||!c){p(null);return}const I=k.getBoundingClientRect(),y=(C=k.closest(c))==null?void 0:C.getBoundingClientRect(),D=(y==null?void 0:y.top)??I.top;p({left:`${I.left}px`,width:`${I.width}px`,right:"auto",bottom:`${Math.max(8,window.innerHeight-D+8)}px`})},v=k=>f($=>$&&{...$,index:($.index+k+$.items.length)%$.items.length}),u=k=>{if(!k||!o)return;d.current=null;const $=s.slice(0,o.start),N=o.kind==="session"?`@${k.id} `:`[[${k.id}]] `;a($+N+s.slice(o.end)),f(null),p(null);const E=$.length+N.length;requestAnimationFrame(()=>{const I=e.current;I&&(I.focus(),I.setSelectionRange(E,E))})};return{menu:o,sync:m,onKeyDown:k=>o?k.key==="ArrowDown"?(k.preventDefault(),k.stopPropagation(),v(1),!0):k.key==="ArrowUp"?(k.preventDefault(),k.stopPropagation(),v(-1),!0):k.key==="Enter"||k.key==="Tab"?(k.preventDefault(),k.stopPropagation(),u(o.items[o.index]),!0):k.key==="Escape"?(k.preventDefault(),k.stopPropagation(),e.current&&(d.current=w(e.current)),f(null),p(null),!0):!1:!1,close:()=>{d.current=null,f(null),p(null)},menuEl:o?n.jsx(cn,{menu:o,up:r,fixedStyle:h,onPick:u,onHover:k=>f($=>$&&{...$,index:k})}):null}}function dn(e,s,a,t=null){if(!e)return;const l=e.selectionStart??e.value.length,i=e.selectionEnd??l;a(e.value.slice(0,l)+s+e.value.slice(i));const r=l+s.length;requestAnimationFrame(()=>{e.isConnected&&(e.focus(),e.setSelectionRange(r,r),t==null||t(e))})}function ie({label:e,onClick:s,disabled:a=!1,children:t}){return n.jsx("button",{type:"button",className:"fv-trigger-btn","data-tip":e,"aria-label":e,disabled:a,onMouseDown:l=>l.preventDefault(),onClick:s,children:t})}function un(e,s,a=0,t){if(!e)return;const l=t||getComputedStyle(e),i=l.boxSizing==="border-box"?(parseFloat(l.borderTopWidth)||0)+(parseFloat(l.borderBottomWidth)||0):0,r=e.placeholder;!e.value&&r&&(e.placeholder=""),e.style.height="auto";const c=e.scrollHeight+i;e.style.overflowY=c>s?"auto":"hidden",e.style.height=`${Math.min(Math.max(c,a),s)}px`,e.placeholder!==r&&(e.placeholder=r)}function fn(e){var s,a;return e.isComposing||((s=e.nativeEvent)==null?void 0:s.isComposing)||e.keyCode===229||((a=e.nativeEvent)==null?void 0:a.keyCode)===229}const hn=g.forwardRef(function({value:s,className:a="",...t},l){const i=g.useRef(null);return g.useImperativeHandle(l,()=>i.current),g.useLayoutEffect(()=>{const r=i.current;if(!r)return;const c=getComputedStyle(r);un(r,parseFloat(c.maxHeight)||1/0,parseFloat(c.minHeight)||0,c)},[s]),n.jsx("textarea",{ref:i,value:s,className:`composer-textarea ${a}`.trim(),...t})});function pn({className:e="",preview:s=null,editor:a,footer:t,...l}){return n.jsxs("div",{className:`composer-surface ${e}`.trim(),...l,children:[s,n.jsx("div",{className:"composer-editor",children:a}),n.jsx("div",{className:"composer-footer",children:t})]})}const mn=/^▶\s*(\d+):([0-5]?\d)(?:\s*·\s*([^\n]*))?/,Se=/^!\[frame\]\(\/api\/(?:evidence|yatsu\/blob)\/[0-9a-f]{64}\)\n?/,vn=/\/api\/(?:evidence|yatsu\/blob)\/([0-9a-f]{64})/g,$e=/!\[[^\]]*\]\(\/api\/(?:evidence|yatsu\/blob)\/([0-9a-f]{64})\)/g,xn=e=>{const s=Math.floor(e/1e3);return`${Math.floor(s/60)}:${String(s%60).padStart(2,"0")}`};function oe(e){var i;const s=e||"",a=s.split(`
|
|
6
|
-
`,1)[0],t=mn.exec(a);return t?{tMs:(parseInt(t[1],10)*60+parseInt(t[2],10))*1e3,step:((i=t[3])==null?void 0:i.trim())||null,label:a.trim(),rest:s.slice(a.length).replace(/^\n/,"")}:null}const Qe=(e,s)=>`▶${xn(e)}${s?` · ${s}`:""}`,Ee=e=>[...(e||"").matchAll(vn)].map(s=>s[1]);function jn(e,s){if(!e)return null;if(e.step&&(s!=null&&s.length)){const a=s.find(t=>t.step===e.step);return a?{tMs:a.at,step:e.step,label:Qe(a.at,e.step),seekable:!0,degraded:!1}:{tMs:e.tMs,step:e.step,label:e.label,seekable:!1,degraded:!0}}return{tMs:e.tMs,step:e.step,label:e.label,seekable:!0,degraded:!1}}function Hn({originator:e,sessions:s=[],kind:a="issue",onOpenSession:t=null}){const l=A();if(!e)return null;const i=as(s,e),r=!!i,c=r?F[i.status]||F.working:F.offline,o=l(a==="eval"?"thread.originatorEval":"thread.originatorIssue",{by:e}),f=n.jsx("span",{className:"fv-originator-dot",style:{background:c},"aria-hidden":"true"});return n.jsx(gs,{text:e,tip:o,label:o,lead:f,className:`fv-originator ${r?"alive":"offline"}${r&&t?" openable":""}`,onClick:r&&t?()=>t(e):null})}function gn({replies:e,onSeek:s,selIdx:a=null,activeIdx:t=null,onSelect:l=null,events:i=null,threadId:r=null,onRemarkChange:c=null}){const o=A(),[f,h]=g.useState(null),[p,d]=g.useState(null),w=async(m,v)=>{if(!f){h(v),d(null);try{const u=await ts(m,v);u!=null&&u.ok?await(c==null?void 0:c()):d({ref:v,msg:(u==null?void 0:u.error)||`${m} failed`})}finally{h(null)}}};return e.map((m,v)=>{const u=oe(m.body),x=jn(u,i),b=u?u.rest:m.body,S=[...b.matchAll($e)].map(D=>D[1]),k=(S.length?b.replace($e,""):b).trim(),$=m.rid!==void 0,N=$?m.resolved?" remark resolved":" remark open":"",E=`fv-reply${a===v?" sel":""}${t===v?" active":""}${N}`,I=x&&x.seekable&&s?()=>l?l(v,x.tMs):s(x.tMs):null,y=$&&r?`${r}#${m.rid}`:null;return n.jsxs("div",{className:E,children:[n.jsxs("div",{className:"fv-reply-meta",children:[n.jsx("span",{className:"fv-reply-by",children:m.by}),m.at&&n.jsx("span",{className:"fv-reply-at",children:m.at}),x&&(I?n.jsx("button",{type:"button",className:"fv-anchor",onClick:I,"data-tip":"seek the clip to this moment",children:x.label}):n.jsxs("span",{className:`fv-anchor static${x.degraded?" degraded":""}`,"data-tip":x.degraded?o("thread.anchorDegraded"):void 0,children:[x.label,x.degraded?" ⚠":""]})),$&&(m.resolved?n.jsxs("span",{className:"fv-remark-state resolved","data-tip":m.resolvedBy?o("thread.resolvedBy",{by:m.resolvedBy}):o("thread.resolved"),children:["✓ ",o("thread.resolved")]}):n.jsxs("span",{className:"fv-remark-state open","data-tip":o("thread.openRemark"),children:["● ",o("thread.openRemark")]})),y&&c&&!m.resolved&&(m.by==="human"?n.jsx("button",{type:"button",className:"fv-remark-act retract",disabled:!!f,"data-tip":o("thread.retractTitle"),onClick:()=>w("retract",y),children:o("thread.retract")}):n.jsx("button",{type:"button",className:"fv-remark-act resolve",disabled:!!f,"data-tip":o("thread.resolveTitle"),onClick:()=>w("resolve",y),children:o("thread.resolve")}))]}),p&&p.ref===y&&n.jsx("div",{className:"fv-error",children:p.msg}),k&&n.jsx("div",{className:"fvd-body",children:n.jsx(J,{body:k})}),S.length>0&&n.jsx("div",{className:"fv-reply-media",children:S.map((D,C)=>n.jsx(Me,{hash:D,alt:"evidence"},`${D}-${C}`))})]},v)})}function wn(e,s,a){const t=e.lastIndexOf(`
|
|
7
|
-
`,s-1)+1,l=/^\/(\S*)$/.exec(e.slice(t,s));if(!l)return null;const i=Ge(a,l[1]);return i.length?{items:i,index:0,start:t,end:s,query:l[1]}:null}function Un({onSend:e,specs:s=[],sessions:a=[],focusId:t=null,onDone:l,anchorNow:i=null,draft:r=null,actionsEnd:c=null,commands:o=null}){const f=A(),[h,p]=g.useState(""),[d,w]=g.useState(!1),[m,v]=g.useState(""),u=g.useRef(null),x=on({inputRef:u,value:h,setValue:p,specs:s,sessions:a,focusId:t,up:!0}),[b,S]=g.useState(null),k=j=>S(j&&(o!=null&&o.length)?wn(j.value,j.selectionStart,o):null),$=j=>{var B;if(!j||!b)return;const L=h.slice(0,b.start)+h.slice(b.end);if(S(null),j.run){p(L.trim()?L:""),j.run();return}const O=oe(L);let M="";if(O){const V=((B=Se.exec(O.rest))==null?void 0:B[0])??"";M=`${O.label}
|
|
8
|
-
${V}`,M.endsWith(`
|
|
9
|
-
`)||(M+=`
|
|
10
|
-
`)}p(M+j.prefill()),requestAnimationFrame(()=>{const V=u.current;V&&(V.focus(),V.setSelectionRange(V.value.length,V.value.length))})},N=j=>b?j.key==="ArrowDown"?(j.preventDefault(),j.stopPropagation(),S(L=>({...L,index:(L.index+1)%L.items.length})),!0):j.key==="ArrowUp"?(j.preventDefault(),j.stopPropagation(),S(L=>({...L,index:(L.index-1+L.items.length)%L.items.length})),!0):j.key==="Enter"||j.key==="Tab"?(j.preventDefault(),j.stopPropagation(),$(b.items[b.index]),!0):j.key==="Escape"?(j.preventDefault(),j.stopPropagation(),S(null),!0):!1:!1,E=Ee(h);g.useEffect(()=>{var j;if(!r){p("");return}p(r.body||""),(j=u.current)==null||j.focus()},[r==null?void 0:r.seq]);const I=async()=>{var O;const j=await(i==null?void 0:i());if(!j)return;const L=Qe(j.tMs,j.step)+(j.frame?`
|
|
11
|
-
`:"");p(M=>{const B=oe(M),V=(B?B.rest:M).replace(Se,"");return V?`${L}
|
|
12
|
-
${V}`:`${L}
|
|
13
|
-
`}),(O=u.current)==null||O.focus()},y=j=>dn(u.current,j,p,L=>{x.sync(L),k(L)}),D=async()=>{const j=h.trim();if(!(!j||d)){w(!0);try{const L=await e(j,Ee(j));L!=null&&L.ok?(p(""),v(""),await(l==null?void 0:l(L.outcomes||""))):v((L==null?void 0:L.error)||"reply failed")}finally{w(!1)}}},C=E.length>0?n.jsx("div",{className:"fv-frames",children:E.map(j=>n.jsx(Me,{hash:j,alt:"frame"},j))}):null,P=n.jsxs("div",{className:"fv-tawrap",children:[n.jsx(hn,{ref:u,className:"fv-textarea",rows:1,value:h,placeholder:f("session.issuesReplyPlaceholder"),disabled:d,onChange:j=>{p(j.target.value),x.sync(j.target),k(j.target)},onSelect:j=>{x.sync(j.target),k(j.target)},onBlur:()=>{x.close(),S(null)},onKeyDown:j=>{fn(j)||N(j)||x.onKeyDown(j)||j.key==="Enter"&&(j.metaKey||j.ctrlKey)&&(j.preventDefault(),D())}}),x.menuEl,b&&n.jsx(an,{menu:b,up:!0,head:b.query?`/${b.query}`:f("annotator.menuReview"),onPick:$,onHover:j=>S(L=>L&&{...L,index:j})})]}),K=n.jsxs("div",{className:"fv-actions",children:[n.jsx(ie,{label:f("thread.mentionActor"),disabled:d,onClick:()=>y("@"),children:"@"}),n.jsx(ie,{label:f("thread.mentionNode"),disabled:d,onClick:()=>y("[["),children:"[["}),(o==null?void 0:o.length)>0&&n.jsx(ie,{label:f("thread.reviewCommands"),disabled:d,onClick:()=>y("/"),children:"/"}),i&&n.jsxs("button",{type:"button",className:"fv-anchor-btn","data-tip":f("thread.anchorTitle"),onMouseDown:j=>j.preventDefault(),onClick:I,children:[n.jsx(R,{name:"clock",size:11})," ",f("thread.anchorNow")]}),m&&n.jsx("span",{className:"fv-error",children:m}),n.jsxs("div",{className:"fv-actions-end",children:[c,n.jsx(de,{icon:"send",size:14,className:"fv-send",label:f(d?"session.issuesSending":"session.issuesSend"),disabled:d||!h.trim(),onMouseDown:j=>j.preventDefault(),onClick:D})]})]});return n.jsx(pn,{className:"fv-compose",preview:C,editor:P,footer:K})}export{Is as $,fn as A,dn as B,pn as C,Rn as D,ne as E,An as F,hn as G,Ts as H,Os as I,$n as J,Ks as K,Cn as L,Bn as M,Hs as N,Hn as O,Us as P,Zs as Q,In as R,vs as S,ie as T,Qs as U,cs as V,fs as W,F as X,As as Y,Ae as Z,kn as _,fe as a,Mn as a0,Cs as a1,Ln as a2,Ke as a3,On as a4,_n as a5,Sn as a6,En as a7,an as a8,cn as a9,G as aa,ln as ab,rn as ac,zn as ad,Ge as ae,Qe as b,qe as c,Tn as d,Ve as e,gs as f,Un as g,Pn as h,Pe as i,gn as j,Vn as k,Dn as l,xn as m,Ie as n,q as o,oe as p,Kn as q,jn as r,ls as s,Rs as t,Re as u,_e as v,qn as w,J as x,Fn as y,on as z};
|