chorus-codes 0.8.13 → 0.8.14
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/demo/[scenario]/page.js +2 -2
- package/.next/server/app/demo/[scenario]/page.js.nft.json +1 -1
- package/.next/server/app/demo/[scenario]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/new.html +1 -1
- package/.next/server/app/new.rsc +2 -2
- package/.next/server/app/new.segments/_full.segment.rsc +2 -2
- package/.next/server/app/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/new.segments/_index.segment.rsc +2 -2
- package/.next/server/app/new.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/new.segments/new.segment.rsc +1 -1
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/onboarding.html +1 -1
- package/.next/server/app/onboarding.rsc +2 -2
- package/.next/server/app/onboarding.segments/_full.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_index.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/personas/page.js +2 -2
- package/.next/server/app/personas/page.js.nft.json +1 -1
- package/.next/server/app/personas/page_client-reference-manifest.js +1 -1
- package/.next/server/app/personas.html +1 -1
- package/.next/server/app/personas.rsc +3 -3
- package/.next/server/app/personas.segments/_full.segment.rsc +3 -3
- package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_index.segment.rsc +2 -2
- package/.next/server/app/personas.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
- package/.next/server/app/runs/[runId]/page.js +2 -2
- package/.next/server/app/runs/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/permissions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/templates/page.js +2 -2
- package/.next/server/app/templates/page.js.nft.json +1 -1
- package/.next/server/app/templates/page_client-reference-manifest.js +1 -1
- package/.next/server/app/templates.html +1 -1
- package/.next/server/app/templates.rsc +3 -3
- package/.next/server/app/templates.segments/_full.segment.rsc +3 -3
- package/.next/server/app/templates.segments/_head.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_index.segment.rsc +2 -2
- package/.next/server/app/templates.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/templates.segments/templates.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +1 -1
- package/.next/server/chunks/325.js +1 -0
- package/.next/server/chunks/642.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/245-934c5ce426296df5.js +1 -0
- package/.next/static/chunks/744-0dbe0ecdef7c2a4a.js +1 -0
- package/.next/static/chunks/app/demo/[scenario]/{page-1e694db85f44db1d.js → page-6307259fba2e5fdf.js} +1 -1
- package/.next/static/chunks/app/runs/[runId]/page-b3364baa47b77ce9.js +1 -0
- package/.next/static/css/55e13578d64f89b0.css +3 -0
- package/.next/trace +20 -20
- package/.next/trace-build +1 -1
- package/package.json +1 -1
- package/.next/server/chunks/429.js +0 -1
- package/.next/server/chunks/597.js +0 -1
- package/.next/static/chunks/744-73bacac02ba407ef.js +0 -1
- package/.next/static/chunks/977-4887f24e0062c91d.js +0 -1
- package/.next/static/chunks/app/runs/[runId]/page-9ce1e87a5e513d8b.js +0 -1
- package/.next/static/css/a552ff3997000a18.css +0 -3
- /package/.next/static/{wxarGtmcGlWCzKSSy_MgS → SsXK_ZdfRKwQhMMuiH23K}/_buildManifest.js +0 -0
- /package/.next/static/{wxarGtmcGlWCzKSSy_MgS → SsXK_ZdfRKwQhMMuiH23K}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=325,exports.ids=[325],exports.modules={14463:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])},15213:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("file-code-corner",[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]])},15808:(a,b,c)=>{c.d(b,{$:()=>d});function d(a){return!!a&&a.phases[0]?.kind==="review_only"}},31650:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},41970:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("test-tube-diagonal",[["path",{d:"M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3",key:"1ub6xw"}],["path",{d:"m16 2 6 6",key:"1gw87d"}],["path",{d:"M12 16H4",key:"1cjfip"}]])},46728:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]])},72069:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},72325:(a,b,c)=>{c.d(b,{LiveRunReal:()=>$});var d=c(66722),e=c(23937),f=c.n(e),g=c(52449);let h=(0,g.A)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);var i=c(31131),j=c(15808),k=c(43092);function l({work:a}){let[b,c]=(0,i.useState)(!1),e=(0,k.t)(a),f=a.trim()!==e.trim()||a.length>100;return(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("button",{type:"button",onClick:f?()=>c(a=>!a):void 0,title:f?b?"Hide full brief":"Click to show full brief":e,disabled:!f,className:"block w-full min-w-0 text-left disabled:cursor-default",children:(0,d.jsx)("h1",{className:"truncate text-sm font-medium tracking-tight",children:e})}),f&&b&&(0,d.jsx)("pre",{className:"mt-2 max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-background px-5 py-4 font-mono text-[12px] leading-relaxed text-foreground/90",children:a})]})}var m=c(90057),n=c(91458),o=c(95047),p=c(65850);let q=(0,g.A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);var r=c(6506);let s=Object.fromEntries(Object.entries(r.r2).map(([a,b])=>[a,b.gradient]));var t=c(55932),u=c(66635);function v({state:a}){switch(a){case"done":return(0,d.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-medium text-emerald-400",children:[(0,d.jsx)(t.A,{className:"h-3 w-3"})," DONE"]});case"errored":return(0,d.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-destructive/10 px-1.5 py-0.5 text-[10px] font-medium text-destructive",children:[(0,d.jsx)(p.A,{className:"h-3 w-3"})," ERRORED"]});case"working":return(0,d.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:[(0,d.jsx)(u.A,{className:"h-3 w-3 animate-spin"})," WORKING"]});case"pending":return(0,d.jsx)("span",{className:"flex items-center gap-1 rounded-md bg-muted/40 px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground/80",children:"QUEUED"});default:return(0,d.jsx)("span",{className:"rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:"IDLE"})}}var w=c(64519);function x({participant:a,isActive:b,liveTail:c,chatTerminal:e,chatId:f,reviewOnly:g,swaps:h}){var j,k;let l,t,[u,z]=(0,i.useState)(!1),[A,B]=(0,i.useState)(!1),C=function(a){let b;if(!a)return null;let c=a.trimStart();if(!/^##\s+(?:REVIEWER|DOER)\s+FAILED/i.test(c))return null;let d=c.match(/\*\*Kind:\*\*\s*(.+?)(?:\n|$)/),e=d?d[1].trim():"failed",f=c.match(/\*\*Resets:\*\*\s*(.+?)(?:\n|$)/);if(f){let a=Date.parse(f[1].trim());Number.isFinite(a)&&(b=a)}let g=c.search(/\n\n[^*]/),h=g>=0?c.slice(g+2).trim():"",i=h.length>0?h:"(no error message reported)",j=function(a,b){if(b&&/dangerously-skip-permissions cannot be used with root\/sudo/i.test(b))return"Claude CLI refuses --dangerously-skip-permissions as root. Run chorus as a non-root user, or disable Claude voices in /connect.";switch(a){case"quota_exhausted":return"Check your subscription dashboard or swap the account in CHORUS_CODEX_HOME / chorus settings.";case"stream_failure":return"Subprocess died mid-stream — check disk space and CLI version.";case"cli_failed":case"cli_error":return"Re-auth the CLI (codex/gemini/opencode login) and retry.";default:return}}(e,i);return{kind:e,message:i,...j?{cta:j}:{},...b?{resetAt:b}:{}}}(a.answer),D=a.pending?"pending":a.hasAnswer?"done":C||e?"errored":"working",E="opencode-cli"===a.binaryUsed?"opencode":a.lineage;return(0,d.jsxs)("div",{className:`flex h-[320px] flex-col overflow-hidden rounded-lg border transition-[opacity,border-color,box-shadow] duration-300 ${s[E]??"bg-card"} ${"done"===D?"border-emerald-500/30":"working"===D?"border-primary/60 shadow-[0_0_0_1px_rgba(124,58,237,0.25),0_0_24px_-6px_rgba(124,58,237,0.45)] animate-pulse-soft":"errored"===D?"border-destructive/40":"pending"===D?"border-border/40 opacity-50 grayscale-[0.6]":"border-border"}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border bg-card/60 px-4 py-3",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-xs leading-none",children:[(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${(0,r.JR)(E)} ${"working"===D?"animate-pulse-soft":""}`}),(0,d.jsx)("span",{className:"font-medium capitalize text-foreground",children:a.role}),(0,d.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,d.jsx)("span",{className:"uppercase tracking-wider text-muted-foreground",children:(0,r.u5)(E)}),(a.modelUsed??a.model)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"text-muted-foreground/60",children:"\xb7"}),(0,d.jsx)("span",{className:"truncate font-mono text-muted-foreground",children:a.modelUsed??a.model})]})]}),(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:["working"===D&&f&&(0,d.jsx)("button",{type:"button",disabled:u,onClick:async()=>{if(!u){z(!0);try{let b=await fetch(`/api/daemon/chats/${f}/participants/${encodeURIComponent(a.participant)}/cancel`,{method:"POST"});if(!b.ok)return void z(!1);let c=await b.json();if(!c.ok){window.alert(`Couldn't cancel: ${c.error?.message??"unknown error"}`),z(!1);return}setTimeout(()=>z(!1),15e3)}catch{z(!1)}}},"aria-label":"Cancel this reviewer",title:"Cancel this reviewer (chat continues with others)",className:"grid h-6 w-6 shrink-0 place-items-center rounded-md border border-border bg-card/40 text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:(0,d.jsx)(m.A,{className:"h-3 w-3"})}),(0,d.jsx)(v,{state:D})]})]}),h&&h.length>0&&(t=h.slice().sort((a,b)=>a.fallbackIdx-b.fallbackIdx),(0,d.jsx)("div",{className:"space-y-1.5 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px]",children:t.map((a,b)=>{let c="lineage_fallback"===a.reason,e=b===t.length-1;return(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsx)(n.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-300"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsx)("div",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:c?"Cross-lineage fallback":"Model fallback"}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-[11px] text-amber-100/90",children:[(0,d.jsxs)("span",{className:"text-amber-100/60 line-through",children:[a.fromLineage,"/",a.fromModel]}),(0,d.jsx)(o.A,{className:"h-3 w-3 shrink-0 text-amber-300"}),(0,d.jsxs)("span",{className:e?"font-medium text-amber-100":"text-amber-100/60 line-through",children:[a.toLineage,"/",a.toModel]}),e&&(0,d.jsx)("span",{className:"rounded bg-amber-500/15 px-1 py-0.5 font-mono text-[9px] text-amber-200",children:"actually ran"})]})]})]},`${a.fromLineage}-${a.fromModel}-${b}`)})})),a.warnings&&a.warnings.length>0&&(0,d.jsx)("div",{className:"space-y-1 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px] text-amber-200/90",children:a.warnings.map((a,b)=>(0,d.jsxs)("div",{className:"flex items-start gap-1.5",children:[(0,d.jsx)(p.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-400"}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("span",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:a.kind}),(0,d.jsx)("div",{className:"mt-0.5 break-words font-mono text-[11px] leading-snug text-amber-100/85",children:a.message})]})]},b))}),(0,d.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-3 font-mono text-xs leading-relaxed text-muted-foreground",children:a.findingsPreview&&a.findingsPreview.length>0?a.findingsPreview.map((a,b)=>(0,d.jsx)("div",{className:"py-0.5 text-foreground/90",children:a},b)):"working"===D&&c&&c.length>0?(0,d.jsx)("div",{className:"flex min-h-0 flex-1 flex-col-reverse overflow-y-auto",children:(0,d.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:c})}):"working"===D?(0,d.jsx)("div",{className:"text-muted-foreground",children:"Thinking…"}):"pending"===D?(0,d.jsx)("div",{className:"text-muted-foreground/70",children:g?"Queued — waiting for an open slot.":"Queued — runs after the doer."}):"errored"===D?C?(0,d.jsxs)("div",{className:"space-y-1.5 text-destructive/90",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider",children:C.kind}),C.resetAt&&(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:["Resets ",function(a){let b=a-Date.now();if(b<=0)return"now";let c=Math.round(b/1e3);if(c<60)return`in ${c}s`;let d=Math.round(c/60);if(d<60)return`in ${d}m`;let e=Math.round(d/60);if(e<24){let b=new Date(a);return`at ${b.getHours().toString().padStart(2,"0")}:${b.getMinutes().toString().padStart(2,"0")}`}let f=Math.round(e/24);return`in ${f}d`}(C.resetAt)]})]}),(0,d.jsx)("div",{className:"whitespace-pre-wrap break-words text-foreground/85",children:C.message}),C.cta&&(0,d.jsx)("div",{className:"text-[11px] text-muted-foreground/80",children:C.cta})]}):(0,d.jsx)("div",{className:"text-destructive/80",children:"The program finished but didn't produce any output."}):"done"===D&&a.answer?(0,d.jsx)("button",{type:"button",onClick:()=>B(!0),className:"group min-h-0 flex-1 cursor-zoom-in overflow-y-auto rounded text-left transition-colors hover:bg-foreground/5 focus:outline-none focus:ring-2 focus:ring-primary/40",title:"Click to view the full answer",children:(0,d.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:a.answer})}):(0,d.jsx)("div",{className:"text-muted-foreground/70",children:"No output yet."})}),(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 border-t border-border bg-card/60 px-4 py-2 font-mono text-[10px] text-muted-foreground",children:[(0,d.jsx)("span",{className:"truncate",children:a.binaryUsed??a.agentName}),(0,d.jsxs)("span",{className:"flex shrink-0 items-center gap-2",children:[void 0!==a.durationMs&&(0,d.jsx)("span",{title:"Wall-clock time the CLI took to finish.",children:function(a){if(a<1e3)return`${a} ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60),d=Math.round(b-60*c);return`${c}m${d.toString().padStart(2,"0")}s`}(a.durationMs)}),a.usage?.costUsd!==void 0&&(0,d.jsx)("span",{title:"USD cost reported by the CLI for this run.",children:(j=a.usage.costUsd)<=0?"$0.00":j<.01?"<$0.01":j<1?`$${j.toFixed(3)}`:`$${j.toFixed(2)}`}),a.usage&&y(a.usage)&&(0,d.jsx)("span",{title:(k=a.usage,l=[],void 0!==k.inputTokens&&l.push(`in ${k.inputTokens.toLocaleString()}`),void 0!==k.outputTokens&&l.push(`out ${k.outputTokens.toLocaleString()}`),void 0!==k.cachedInputTokens&&l.push(`cached ${k.cachedInputTokens.toLocaleString()}`),l.join(" \xb7 ")),children:y(a.usage)}),(0,d.jsx)("span",{children:a.hasAnswer?`${(a.answer?.length??0).toLocaleString()} B`:"—"}),"done"===D&&a.answer&&(0,d.jsxs)("button",{type:"button",onClick:()=>B(!0),className:"inline-flex items-center gap-1 rounded px-1 py-0.5 text-muted-foreground/80 transition-colors hover:bg-foreground/10 hover:text-foreground",title:"View full answer",children:[(0,d.jsx)(q,{className:"h-3 w-3"}),(0,d.jsx)("span",{className:"hidden sm:inline",children:"expand"})]})]})]}),(0,d.jsx)(w.lG,{open:A,onOpenChange:B,children:(0,d.jsxs)(w.Cf,{className:"max-h-[85vh] max-w-3xl overflow-hidden",children:[(0,d.jsx)(w.c7,{children:(0,d.jsxs)(w.L3,{className:"flex items-center gap-2 text-sm",children:[(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${(0,r.JR)(E)}`}),(0,d.jsx)("span",{className:"font-medium capitalize",children:a.role}),(0,d.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,d.jsx)("span",{className:"uppercase tracking-wider text-muted-foreground",children:(0,r.u5)(E)}),(a.modelUsed??a.model)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"text-muted-foreground/60",children:"\xb7"}),(0,d.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:a.modelUsed??a.model})]})]})}),(0,d.jsx)("div",{className:"max-h-[70vh] overflow-y-auto rounded border border-border bg-card/40 p-4",children:(0,d.jsx)("pre",{className:"whitespace-pre-wrap break-words text-sm text-foreground/90",children:a.answer??""})})]})})]})}function y(a){let b=(a.inputTokens??0)+(a.outputTokens??0);return b<=0?null:b<1e3?`${b} tok`:`${(b/1e3).toFixed(1)}k tok`}function z({round:a,isLatest:b,activeFor:c,liveTails:e,chatTerminal:f,reviewOnly:g,chatId:h,swaps:i}){let j=g?a.participants.filter(a=>"doer"!==a.role):a.participants,k=(i??[]).filter(b=>b.round===a.round);return(0,d.jsxs)("section",{children:[!g&&(0,d.jsxs)("h2",{className:"mb-3 text-xs uppercase tracking-wider text-muted-foreground",children:["Round ",a.round,b&&(0,d.jsx)("span",{className:"ml-2 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:"current"})]}),(0,d.jsx)("div",{className:"grid items-start gap-4 sm:grid-cols-2 xl:grid-cols-3",children:j.map(a=>{let b;return(0,d.jsx)(x,{participant:a,isActive:c(a),liveTail:e[a.participant],chatTerminal:f,chatId:h,reviewOnly:g,swaps:(b=a.participant.replace(/^(reviewer-|doer-)/,""),k.filter(a=>a.agent===b))},a.participant)})})]})}let A={claude:"claude-code",codex:"codex-cli",gemini:"gemini-cli",opencode:"opencode-cli",kimi:"kimi-cli",openrouter:"openrouter"},B={anthropic:"claude",openai:"codex",google:"gemini",opencode:"opencode",moonshot:"kimi"},C={drafting:{text:"DRAFTING \xb7 doer working",color:"primary"},reviewing:{text:"REVIEWING \xb7 cross-lineage check",color:"primary"},approved:{text:"APPROVED",color:"emerald"},merged:{text:"PR OPENED",color:"emerald"},blocked:{text:"BLOCKED \xb7 ship error",color:"amber"},no_review:{text:"NO REVIEW \xb7 reviewers unavailable",color:"amber"},failed:{text:"FAILED",color:"destructive"},cancelled:{text:"CANCELLED",color:"muted"}},D={primary:"bg-primary",emerald:"bg-emerald-400",amber:"bg-amber-400",destructive:"bg-destructive",muted:"bg-muted-foreground"},E=["approved","merged","blocked","failed","cancelled","no_review"];function F(a,b){return b&&b.startsWith("openrouter:")?"openrouter":B[a]??a}let G=(0,g.A)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]),H=(0,g.A)("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);var I=c(78770),J=c(260);function K({chatId:a,status:b,isTerminal:c,template:e,onCancel:g}){let h=(0,J.useRouter)(),[j,k]=(0,i.useState)(!1),[l,n]=(0,i.useState)(!1),o=async()=>{k(!0);try{let b=await fetch(`/api/daemon/chats/${a}/rerun`,{method:"POST"});if(!b.ok){window.alert("Couldn't start a new run — Chorus didn't respond. Try restarting it from your terminal: chorus start"),k(!1);return}let c=await b.json();if(!c.ok){let a=c.error?.message??"Unknown error from Chorus.";window.alert(`Couldn't start a new run: ${a}`),k(!1);return}let d=c.data?.slug??c.data?.id;d?(h.push(`/runs/${d}`),h.refresh()):(window.alert("Chorus accepted the retry but didn't return a chat id. Refresh and try again."),k(!1))}catch{window.alert("Retry failed. Network error."),k(!1)}},p=async()=>{if(window.confirm("Delete this chat permanently? This removes all reviewer output and history. You cannot undo this.")){n(!0);try{(await fetch(`/api/daemon/chats/${a}`,{method:"DELETE"})).ok?(h.push("/runs"),h.refresh()):(window.alert("Couldn't delete this chat — Chorus didn't respond. Try restarting it from your terminal: chorus start"),n(!1))}catch{window.alert("Delete failed. Network error."),n(!1)}}};return(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:["cancelled"===b||"failed"===b?(0,d.jsxs)("button",{type:"button",disabled:j,onClick:o,className:"flex items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-3 py-1.5 text-xs font-medium text-primary transition hover:border-primary hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50",children:[(0,d.jsx)(G,{className:`h-3.5 w-3.5 ${j?"animate-spin":""}`}),j?"Restarting…":"Retry"]}):(0,d.jsxs)("button",{type:"button",disabled:c,onClick:async()=>{await fetch(`/api/daemon/chats/${a}/cancel`,{method:"POST"}),g()},className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"}),"Cancel"]}),c&&e&&(0,d.jsxs)(f(),{href:`/new?template=${encodeURIComponent(e.id)}`,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-primary/40 hover:text-primary",children:[(0,d.jsx)(H,{className:"h-3.5 w-3.5"}),"Run again"]}),(0,d.jsxs)("button",{type:"button",disabled:l,onClick:p,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,d.jsx)(I.A,{className:"h-3.5 w-3.5"}),l?"Deleting…":"Delete"]})]})}var L=c(31650),M=c(46728),N=c(15213),O=c(41970),P=c(5616),Q=c(83720),R=c(75619),S=c(14463),T=c(72069);let U={review:L.A,review_only:L.A,plan:M.A,spec:N.A,tests:O.A,implement:P.A,verify:Q.A,pr:R.A,divergence:n.A,recon:S.A},V={pending:"bg-muted-foreground/20 text-muted-foreground",active:"bg-primary/20 text-primary ring-2 ring-primary/40 ring-offset-2 ring-offset-background",done:"bg-emerald-500/20 text-emerald-300",blocked:"bg-amber-500/20 text-amber-300",skipped:"bg-muted-foreground/10 text-muted-foreground/50 line-through"},W={pending:"queued",active:"active",done:"done",blocked:"blocked",skipped:"skipped"};function X({phases:a,activeIndex:b,states:c,onSelect:e}){return(0,d.jsx)("div",{className:"flex items-center gap-0 overflow-x-auto pb-1",children:a.map((f,g)=>{let h=c[g]??"pending",i=U[f.kind],j=e&&("done"===h||"active"===h);return(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsxs)("button",{type:"button",disabled:!j,onClick:()=>j&&e?.(g),className:`group flex items-center gap-2 rounded-md border px-3 py-1.5 text-left transition ${g===b?"border-primary/40 bg-primary/5":"done"===h?"border-emerald-500/30 bg-emerald-500/5":"blocked"===h?"border-amber-500/40 bg-amber-500/5":"border-border bg-card/30"} ${j?"hover:border-foreground/30":"cursor-default"}`,children:[(0,d.jsx)("span",{className:`grid h-6 w-6 shrink-0 place-items-center rounded-md ${V[h]}`,children:"done"===h?(0,d.jsx)(T.A,{className:"h-3.5 w-3.5"}):"active"===h?(0,d.jsx)(u.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(i,{className:"h-3.5 w-3.5"})}),(0,d.jsxs)("span",{className:"flex flex-col leading-tight",children:[(0,d.jsxs)("span",{className:"text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:[String(g+1).padStart(2,"0")," \xb7 ",W[h]]}),(0,d.jsx)("span",{className:`text-xs font-medium ${"skipped"===h?"text-muted-foreground/50":"text-foreground"}`,children:f.name})]})]}),g<a.length-1&&(0,d.jsx)("span",{className:`mx-1.5 h-px w-6 ${"done"===c[g]?"bg-emerald-500/40":"bg-border"}`})]},f.id)})})}function Y({template:a,status:b,totalPhases:c,completedPhaseCount:e,rounds:f,enrichedRounds:g,prUrl:h,shipError:i}){return(0,d.jsx)("div",{className:"border-b border-border bg-card/20 px-4 py-3 sm:px-8",children:(0,d.jsxs)("div",{className:"mx-auto flex w-full flex-col gap-3",children:[h&&(0,d.jsxs)("div",{className:"rounded-md border border-emerald-500/40 bg-emerald-500/5 px-4 py-3",children:[(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-emerald-300",children:[(0,d.jsx)(t.A,{className:"h-4 w-4"}),"Pull request opened"]}),(0,d.jsx)("a",{href:h,target:"_blank",rel:"noreferrer",className:"rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-1.5 text-xs font-medium text-emerald-300 transition hover:bg-emerald-500/20",children:"View PR →"})]}),(0,d.jsx)("p",{className:"mt-1 break-all font-mono text-[11px] text-emerald-200/70",children:h})]}),i&&!h&&(0,d.jsxs)("div",{className:"rounded-md border border-amber-500/40 bg-amber-500/5 px-4 py-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-amber-300",children:[(0,d.jsx)(p.A,{className:"h-4 w-4"}),"Ship phase blocked"]}),(0,d.jsx)("p",{className:"mt-1 break-words font-mono text-[11px] text-amber-200/80",children:i}),(0,d.jsx)("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:"The reviewers approved the doer's output, but chorus couldn't open a PR. Resolve the issue above and re-run."})]}),a?.phases&&a.phases.length>0&&(0,d.jsx)("div",{className:"flex justify-center",children:(0,d.jsx)(X,{phases:a.phases,activeIndex:Math.min(e,c-1),states:a.phases.map((a,c)=>"approved"===b?"done":"no_review"===b?c<e?"done":"blocked":"failed"===b||"cancelled"===b?c<e?"done":"skipped":c<e?"done":c===e?"active":"pending")})}),(0,d.jsx)(Z,{template:a,status:b,totalPhases:c,completedPhaseCount:e,rounds:f,enrichedRounds:g})]})})}function Z({template:a,status:b,totalPhases:c,completedPhaseCount:e,rounds:f,enrichedRounds:g}){let h=a?.maxRounds??1,i="approved"===b||"merged"===b||"no_review"===b||"blocked"===b||"failed"===b||"cancelled"===b,j=c>1,k=!j&&h>1,l=g[g.length-1],m=l?.participants.filter(a=>"reviewer"===a.role)??[],n=m.length,o=m.filter(a=>a.hasAnswer).length;if(!j&&!k&&!(!j&&!k&&n>1))return null;let p=j?c:k?h:n,q=j?Math.min(e,c):k?Math.min(Math.max(f.length,1),h):o,r=j&&i?p:q,s=j?`${r} / ${p} phases`:k?`Round ${r} / ${p}`:`${r} / ${p} complete`;return(0,d.jsxs)("div",{className:"mx-auto flex w-full max-w-xs items-center gap-2",children:[(0,d.jsx)("div",{className:"flex h-1 flex-1 overflow-hidden rounded-full bg-muted",children:(0,d.jsx)("div",{className:`transition-[width] duration-700 ease-out ${"approved"===b?"bg-emerald-400":"bg-primary"}`,style:{width:`${r/p*100}%`}})}),(0,d.jsx)("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground",children:s})]})}function $({chatId:a,initialStatus:b,initialRounds:c,templateId:e,template:g,work:k,projectName:m,initialPrUrl:n,initialShipError:o,initialVerdict:p,demoDataSource:q}){var s,t;let[u,v]=(0,i.useState)(b),[w,x]=(0,i.useState)(p),[y,B]=(0,i.useState)(c),[G,H]=(0,i.useState)(new Set),[I,J]=(0,i.useState)(n),[L,M]=(0,i.useState)(o),[N,O]=(0,i.useState)({}),[P,Q]=(0,i.useState)(-1),[R,S]=(0,i.useState)({}),[T,U]=(0,i.useState)([]),V=E.includes(u),W=(s=u,t=w,"approved"===s&&t&&"approved"!==t?"request_changes"===t?{text:"REVIEW \xb7 CHANGES REQUESTED",color:"amber"}:{text:`REVIEW \xb7 ${t.toUpperCase()}`,color:"amber"}:C[s]??{text:s.toUpperCase(),color:"muted"}),X=g?.phases?.length??1,Z=(0,i.useMemo)(()=>"approved"===u||"merged"===u||"no_review"===u||"blocked"===u?X:"failed"===u||"cancelled"===u?0:Math.min(Math.max(0,P+1),X),[u,X,P]),_=(0,i.useMemo)(()=>(0,j.$)(g),[g]),aa=(0,i.useMemo)(()=>(function(a,b,c){if(!b?.phases?.length)return a;let d=(0,j.$)(b),e=function(a,b){let c=a.phases[0],d=(a,b)=>b?.[0]??(0,r.YM)(a),e=[];if(!b){let a=c.doer.models?.[0],b=F(c.doer.lineage,a);e.push({role:"doer",lineage:b,model:a??d(b,c.doer.models)})}for(let[a,b]of(c.reviewer?.candidatesWithModels??[]).entries()){let c=b.models?.[0],f=F(b.lineage,c);e.push({role:"reviewer",lineage:f,model:c??d(f,b.models),reviewerIdx:a})}return e}(b,d);return a.map(a=>{let b=[],d=new Set;for(let f of e){let e="doer"===f.role?`doer-${f.lineage}`:`reviewer-${f.lineage}-${f.reviewerIdx}`,g=a.participants.find(a=>"doer"===f.role?"doer"===a.role&&a.lineage===f.lineage:"reviewer"===a.role&&a.lineage===f.lineage&&parseInt(a.participant.match(/-(\d+)$/)?.[1]??"0",10)===f.reviewerIdx);g?(b.push({...g,model:f.model,...c[g.participant]?{warnings:c[g.participant]}:{}}),d.add(g.participant)):b.push({participant:e,role:f.role,agentName:A[f.lineage]??f.lineage,lineage:f.lineage,hasAnswer:!1,model:f.model,pending:!0,...c[e]?{warnings:c[e]}:{}})}for(let e of a.participants)d.has(e.participant)||b.push({...e,...c[e.participant]?{warnings:c[e.participant]}:{}});return{...a,participants:b}})})(y,g,R),[y,g,R]),ab=aa[aa.length-1],ac=aa.slice(0,-1);return(0,d.jsxs)("div",{className:"flex h-full flex-col",children:[(0,d.jsxs)("div",{className:"sticky top-0 z-20 border-b border-border bg-card/80 backdrop-blur-sm px-4 py-3 sm:px-8",children:[(0,d.jsxs)("div",{className:"mb-2 flex w-full items-center justify-between gap-3",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,d.jsxs)(f(),{href:"/runs",className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition hover:text-foreground",children:[(0,d.jsx)(h,{className:"h-3 w-3"}),(0,d.jsx)("span",{children:m??"Runs"})]}),(0,d.jsx)("span",{className:"text-muted-foreground/40",children:"\xb7"}),(0,d.jsxs)("span",{title:W.text,className:"inline-flex shrink-0 items-center gap-1.5 text-[11px] uppercase tracking-wider text-muted-foreground",children:[(0,d.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${D[W.color]} ${V?"":"animate-pulse-soft"}`}),u]}),(g||e)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"text-muted-foreground/40",children:"\xb7"}),(0,d.jsxs)(f(),{href:`/templates${g?`#${encodeURIComponent(g.id)}`:""}`,title:g?`Template: ${g.name}`:`Template (deleted): ${e}`,className:"inline-flex min-w-0 shrink items-center gap-1.5 text-[11px] text-muted-foreground transition hover:text-primary",children:[(0,d.jsx)("span",{className:"font-mono uppercase tracking-wider",children:"tpl"}),(0,d.jsx)("span",{className:"truncate font-medium text-foreground",children:g?.name??e})]})]})]}),(0,d.jsx)(K,{chatId:a,status:u,isTerminal:V,template:g,onCancel:()=>v("cancelled")})]}),(0,d.jsx)("div",{className:"min-w-0",children:(0,d.jsx)(l,{work:k})})]}),(0,d.jsx)(Y,{template:g,status:u,totalPhases:X,completedPhaseCount:Z,rounds:y,enrichedRounds:aa,prUrl:I,shipError:L}),(0,d.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-6 sm:px-8",children:(0,d.jsxs)("div",{className:"mx-auto w-full space-y-8",children:[0===y.length&&(0,d.jsx)("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:"Waiting for first phase to start…"}),ab&&(0,d.jsx)(z,{round:ab,isLatest:!0,activeFor:a=>{let b=`${a.participant}-`;for(let a of G)if(a.startsWith(b))return!0;return!1},liveTails:N,chatTerminal:V,reviewOnly:_,chatId:a,swaps:T}),!_&&ac.length>0&&(0,d.jsxs)("details",{className:"rounded-lg border border-border bg-card",children:[(0,d.jsxs)("summary",{className:"cursor-pointer px-4 py-3 text-xs uppercase tracking-wider text-muted-foreground hover:text-foreground",children:["Earlier rounds (",ac.length,")"]}),(0,d.jsx)("div",{className:"space-y-6 border-t border-border p-4",children:ac.slice().reverse().map(a=>(0,d.jsx)(z,{round:a,activeFor:()=>!1,liveTails:{},chatTerminal:V,swaps:T},a.round))})]})]})})]})}},75619:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("git-pull-request",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]])},83720:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]])},91458:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]])},95047:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=642,exports.ids=[642],exports.modules={5616:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]])},6506:(a,b,c)=>{c.d(b,{JR:()=>k,QJ:()=>f,VW:()=>g,YM:()=>m,m_:()=>h,r2:()=>n,u5:()=>j,x0:()=>l,ze:()=>d});let d={anthropic:"Claude",openai:"Codex",google:"Gemini",opencode:"OpenCode",moonshot:"Kimi"},e={anthropic:"bg-violet-400",openai:"bg-orange-400",google:"bg-blue-400",opencode:"bg-emerald-400",moonshot:"bg-pink-400"};function f(a){return a?d[a]??a:""}function g(a){return a?e[a]??"bg-muted":"bg-muted"}let h={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode",kimi:"Kimi",openrouter:"OpenRouter"},i={claude:"bg-violet-400",codex:"bg-orange-400",gemini:"bg-blue-400",opencode:"bg-emerald-400",kimi:"bg-pink-400",openrouter:"bg-cyan-400"};function j(a){return a?h[a]??a:""}function k(a){return a?i[a]??"bg-muted":"bg-muted"}let l={claude:"claude-opus-4-7",codex:"gpt-5.5",gemini:"gemini-2.5-pro",opencode:"kimi-k2.6",kimi:"kimi-k2.6",openrouter:""};function m(a){if(a)return l[a]}let n={claude:{dot:"bg-violet-400",ring:"ring-violet-400/40",gradient:"bg-gradient-to-b from-violet-500/15 to-card"},codex:{dot:"bg-orange-400",ring:"ring-orange-400/40",gradient:"bg-gradient-to-b from-orange-500/15 to-card"},gemini:{dot:"bg-blue-400",ring:"ring-blue-400/40",gradient:"bg-gradient-to-b from-blue-500/15 to-card"},opencode:{dot:"bg-emerald-400",ring:"ring-emerald-400/40",gradient:"bg-gradient-to-b from-emerald-500/15 to-card"},kimi:{dot:"bg-pink-400",ring:"ring-pink-400/40",gradient:"bg-gradient-to-b from-pink-500/15 to-card"},openrouter:{dot:"bg-cyan-400",ring:"ring-cyan-400/40",gradient:"bg-gradient-to-b from-cyan-500/15 to-card"}}},55932:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},64519:(a,b,c)=>{c.d(b,{Cf:()=>l,L3:()=>n,c7:()=>m,lG:()=>h,rr:()=>o,zM:()=>i});var d=c(66722);c(31131);var e=c(90057),f=c(18694),g=c(16276);function h({...a}){return(0,d.jsx)(f.bL,{"data-slot":"dialog",...a})}function i({...a}){return(0,d.jsx)(f.l9,{"data-slot":"dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(f.ZL,{"data-slot":"dialog-portal",...a})}function k({className:a,...b}){return(0,d.jsx)(f.hJ,{"data-slot":"dialog-overlay",className:(0,g.cn)("fixed inset-0 z-50 bg-black/75 backdrop-blur-sm data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",a),...b})}function l({className:a,children:b,showCloseButton:c=!0,...h}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(k,{}),(0,d.jsxs)(f.UC,{"data-slot":"dialog-content",className:(0,g.cn)("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",a),...h,children:[b,c&&(0,d.jsxs)(f.bm,{"data-slot":"dialog-close",className:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,d.jsx)(e.A,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function m({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2 text-center sm:text-left",a),...b})}function n({className:a,...b}){return(0,d.jsx)(f.hE,{"data-slot":"dialog-title",className:(0,g.cn)("text-lg leading-none font-semibold",a),...b})}function o({className:a,...b}){return(0,d.jsx)(f.VY,{"data-slot":"dialog-description",className:(0,g.cn)("text-sm text-muted-foreground",a),...b})}c(72827)},65850:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},66635:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},72827:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(66722);c(31131);var e=c(82786),f=c(29399),g=c(16276);let h=(0,e.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function i({className:a,variant:b="default",size:c="default",asChild:e=!1,...j}){let k=e?f.bL:"button";return(0,d.jsx)(k,{"data-slot":"button","data-variant":b,"data-size":c,className:(0,g.cn)(h({variant:b,size:c,className:a})),...j})}},78770:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(52449).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},82786:(a,b,c)=>{c.d(b,{F:()=>g});var d=c(84602);let e=a=>"boolean"==typeof a?`${a}`:0===a?"0":a,f=d.$,g=(a,b)=>c=>{var d;if((null==b?void 0:b.variants)==null)return f(a,null==c?void 0:c.class,null==c?void 0:c.className);let{variants:g,defaultVariants:h}=b,i=Object.keys(g).map(a=>{let b=null==c?void 0:c[a],d=null==h?void 0:h[a];if(null===b)return null;let f=e(b)||e(d);return g[a][f]}),j=c&&Object.entries(c).reduce((a,b)=>{let[c,d]=b;return void 0===d||(a[c]=d),a},{});return f(a,i,null==b||null==(d=b.compoundVariants)?void 0:d.reduce((a,b)=>{let{class:c,className:d,...e}=b;return Object.entries(e).every(a=>{let[b,c]=a;return Array.isArray(c)?c.includes({...h,...j}[b]):({...h,...j})[b]===c})?[...a,c,d]:a},[]),null==c?void 0:c.class,null==c?void 0:c.className)}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/SsXK_ZdfRKwQhMMuiH23K/_buildManifest.js","static/SsXK_ZdfRKwQhMMuiH23K/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-87142ab87b87c8fb.js","static/chunks/ed64ccb0-b7d2b5246d18ca7e.js","static/chunks/128-a5d059bf5b2e5090.js","static/chunks/main-app-e9f7985e32dc8a63.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" class="dark __variable_188709 __variable_9a8899 h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html lang="en" class="dark __variable_188709 __variable_9a8899 h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/55e13578d64f89b0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-87142ab87b87c8fb.js"/><script src="/_next/static/chunks/ed64ccb0-b7d2b5246d18ca7e.js" async=""></script><script src="/_next/static/chunks/128-a5d059bf5b2e5090.js" async=""></script><script src="/_next/static/chunks/main-app-e9f7985e32dc8a63.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Chorus — many voices, one chorus</title><meta name="description" content="The polished orchestrator over your AI fleet. Paste a task. Pick a template. Watch multiple LLMs reach consensus."/><link rel="icon" href="/favicon.ico?b67a357858af4169" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/icon.svg?79b94d624cb60ac1" type="image/svg+xml" sizes="any"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-full flex flex-col bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-87142ab87b87c8fb.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[5484,[],\"\"]\n3:I[5482,[],\"\"]\n4:I[5017,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5017,[],\"ViewportBoundary\"]\na:I[5017,[],\"MetadataBoundary\"]\nc:I[3720,[],\"default\",1]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/55e13578d64f89b0.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/55e13578d64f89b0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark __variable_188709 __variable_9a8899 h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col bg-background text-foreground\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"SsXK_ZdfRKwQhMMuiH23K\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[3068,[],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Chorus — many voices, one chorus\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The polished orchestrator over your AI fleet. Paste a task. Pick a template. Watch multiple LLMs reach consensus.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?b67a357858af4169\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon.svg?79b94d624cb60ac1\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"$Le\",\"4\",{}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-87142ab87b87c8fb.js"/><script src="/_next/static/chunks/ed64ccb0-b7d2b5246d18ca7e.js" async=""></script><script src="/_next/static/chunks/128-a5d059bf5b2e5090.js" async=""></script><script src="/_next/static/chunks/main-app-e9f7985e32dc8a63.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-87142ab87b87c8fb.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[5484,[],\"\"]\n3:I[5482,[],\"\"]\n4:I[5017,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5017,[],\"ViewportBoundary\"]\na:I[5017,[],\"MetadataBoundary\"]\nc:I[3720,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-87142ab87b87c8fb.js"/><script src="/_next/static/chunks/ed64ccb0-b7d2b5246d18ca7e.js" async=""></script><script src="/_next/static/chunks/128-a5d059bf5b2e5090.js" async=""></script><script src="/_next/static/chunks/main-app-e9f7985e32dc8a63.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-87142ab87b87c8fb.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[5484,[],\"\"]\n3:I[5482,[],\"\"]\n4:I[5017,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5017,[],\"ViewportBoundary\"]\na:I[5017,[],\"MetadataBoundary\"]\nc:I[3720,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"SsXK_ZdfRKwQhMMuiH23K\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"akVy8Mf/5yhpUdtMeprb4YLIutG4xU2kDnZUFbyTpJo="}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[245],{52:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},862:(e,t,r)=>{r.d(t,{$:()=>a});function a(e){return!!e&&e.phases[0]?.kind==="review_only"}},1245:(e,t,r)=>{r.d(t,{LiveRunReal:()=>X});var a=r(9442),s=r(2573),n=r.n(s),d=r(3884);let o=(0,d.A)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);var i=r(6074),l=r(862),c=r(7296);function p({work:e}){let[t,r]=(0,i.useState)(!1),s=(0,c.t)(e),n=e.trim()!==s.trim()||e.length>100;return(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("button",{type:"button",onClick:n?()=>r(e=>!e):void 0,title:n?t?"Hide full brief":"Click to show full brief":s,disabled:!n,className:"block w-full min-w-0 text-left disabled:cursor-default",children:(0,a.jsx)("h1",{className:"truncate text-sm font-medium tracking-tight",children:s})}),n&&t&&(0,a.jsx)("pre",{className:"mt-2 max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-background px-5 py-4 font-mono text-[12px] leading-relaxed text-foreground/90",children:e})]})}var u=r(6891),m=r(4608),h=r(6289),x=r(4030);let g=(0,d.A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);var f=r(3734);let b=Object.fromEntries(Object.entries(f.r2).map(([e,t])=>[e,t.gradient]));var v=r(2956),y=r(3149);function w({state:e}){switch(e){case"done":return(0,a.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-medium text-emerald-400",children:[(0,a.jsx)(v.A,{className:"h-3 w-3"})," DONE"]});case"errored":return(0,a.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-destructive/10 px-1.5 py-0.5 text-[10px] font-medium text-destructive",children:[(0,a.jsx)(x.A,{className:"h-3 w-3"})," ERRORED"]});case"working":return(0,a.jsxs)("span",{className:"flex items-center gap-1 rounded-md bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:[(0,a.jsx)(y.A,{className:"h-3 w-3 animate-spin"})," WORKING"]});case"pending":return(0,a.jsx)("span",{className:"flex items-center gap-1 rounded-md bg-muted/40 px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground/80",children:"QUEUED"});default:return(0,a.jsx)("span",{className:"rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:"IDLE"})}}var k=r(1853);function j({participant:e,isActive:t,liveTail:r,chatTerminal:s,chatId:n,reviewOnly:d,swaps:o}){var l,c;let p,v,[y,A]=(0,i.useState)(!1),[$,M]=(0,i.useState)(!1),C=function(e){let t;if(!e)return null;let r=e.trimStart();if(!/^##\s+(?:REVIEWER|DOER)\s+FAILED/i.test(r))return null;let a=r.match(/\*\*Kind:\*\*\s*(.+?)(?:\n|$)/),s=a?a[1].trim():"failed",n=r.match(/\*\*Resets:\*\*\s*(.+?)(?:\n|$)/);if(n){let e=Date.parse(n[1].trim());Number.isFinite(e)&&(t=e)}let d=r.search(/\n\n[^*]/),o=d>=0?r.slice(d+2).trim():"",i=o.length>0?o:"(no error message reported)",l=function(e,t){if(t&&/dangerously-skip-permissions cannot be used with root\/sudo/i.test(t))return"Claude CLI refuses --dangerously-skip-permissions as root. Run chorus as a non-root user, or disable Claude voices in /connect.";switch(e){case"quota_exhausted":return"Check your subscription dashboard or swap the account in CHORUS_CODEX_HOME / chorus settings.";case"stream_failure":return"Subprocess died mid-stream — check disk space and CLI version.";case"cli_failed":case"cli_error":return"Re-auth the CLI (codex/gemini/opencode login) and retry.";default:return}}(s,i);return{kind:s,message:i,...l?{cta:l}:{},...t?{resetAt:t}:{}}}(e.answer),_=e.pending?"pending":e.hasAnswer?"done":C||s?"errored":"working",E="opencode-cli"===e.binaryUsed?"opencode":e.lineage;return(0,a.jsxs)("div",{className:`flex h-[320px] flex-col overflow-hidden rounded-lg border transition-[opacity,border-color,box-shadow] duration-300 ${b[E]??"bg-card"} ${"done"===_?"border-emerald-500/30":"working"===_?"border-primary/60 shadow-[0_0_0_1px_rgba(124,58,237,0.25),0_0_24px_-6px_rgba(124,58,237,0.45)] animate-pulse-soft":"errored"===_?"border-destructive/40":"pending"===_?"border-border/40 opacity-50 grayscale-[0.6]":"border-border"}`,children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border bg-card/60 px-4 py-3",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-xs leading-none",children:[(0,a.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${(0,f.JR)(E)} ${"working"===_?"animate-pulse-soft":""}`}),(0,a.jsx)("span",{className:"font-medium capitalize text-foreground",children:e.role}),(0,a.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,a.jsx)("span",{className:"uppercase tracking-wider text-muted-foreground",children:(0,f.u5)(E)}),(e.modelUsed??e.model)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-muted-foreground/60",children:"\xb7"}),(0,a.jsx)("span",{className:"truncate font-mono text-muted-foreground",children:e.modelUsed??e.model})]})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:["working"===_&&n&&(0,a.jsx)("button",{type:"button",disabled:y,onClick:async()=>{if(!y){A(!0);try{let t=await fetch(`/api/daemon/chats/${n}/participants/${encodeURIComponent(e.participant)}/cancel`,{method:"POST"});if(!t.ok)return void A(!1);let r=await t.json();if(!r.ok){window.alert(`Couldn't cancel: ${r.error?.message??"unknown error"}`),A(!1);return}setTimeout(()=>A(!1),15e3)}catch{A(!1)}}},"aria-label":"Cancel this reviewer",title:"Cancel this reviewer (chat continues with others)",className:"grid h-6 w-6 shrink-0 place-items-center rounded-md border border-border bg-card/40 text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:(0,a.jsx)(u.A,{className:"h-3 w-3"})}),(0,a.jsx)(w,{state:_})]})]}),o&&o.length>0&&(v=o.slice().sort((e,t)=>e.fallbackIdx-t.fallbackIdx),(0,a.jsx)("div",{className:"space-y-1.5 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px]",children:v.map((e,t)=>{let r="lineage_fallback"===e.reason,s=t===v.length-1;return(0,a.jsxs)("div",{className:"flex items-start gap-2",children:[(0,a.jsx)(m.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-300"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,a.jsx)("div",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:r?"Cross-lineage fallback":"Model fallback"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-[11px] text-amber-100/90",children:[(0,a.jsxs)("span",{className:"text-amber-100/60 line-through",children:[e.fromLineage,"/",e.fromModel]}),(0,a.jsx)(h.A,{className:"h-3 w-3 shrink-0 text-amber-300"}),(0,a.jsxs)("span",{className:s?"font-medium text-amber-100":"text-amber-100/60 line-through",children:[e.toLineage,"/",e.toModel]}),s&&(0,a.jsx)("span",{className:"rounded bg-amber-500/15 px-1 py-0.5 font-mono text-[9px] text-amber-200",children:"actually ran"})]})]})]},`${e.fromLineage}-${e.fromModel}-${t}`)})})),e.warnings&&e.warnings.length>0&&(0,a.jsx)("div",{className:"space-y-1 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2 text-[11px] text-amber-200/90",children:e.warnings.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-start gap-1.5",children:[(0,a.jsx)(x.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-400"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"font-medium uppercase tracking-wider text-[10px] text-amber-300",children:e.kind}),(0,a.jsx)("div",{className:"mt-0.5 break-words font-mono text-[11px] leading-snug text-amber-100/85",children:e.message})]})]},t))}),(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-3 font-mono text-xs leading-relaxed text-muted-foreground",children:e.findingsPreview&&e.findingsPreview.length>0?e.findingsPreview.map((e,t)=>(0,a.jsx)("div",{className:"py-0.5 text-foreground/90",children:e},t)):"working"===_&&r&&r.length>0?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col-reverse overflow-y-auto",children:(0,a.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:r})}):"working"===_?(0,a.jsx)("div",{className:"text-muted-foreground",children:"Thinking…"}):"pending"===_?(0,a.jsx)("div",{className:"text-muted-foreground/70",children:d?"Queued — waiting for an open slot.":"Queued — runs after the doer."}):"errored"===_?C?(0,a.jsxs)("div",{className:"space-y-1.5 text-destructive/90",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider",children:C.kind}),C.resetAt&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-300",children:["Resets ",function(e){let t=e-Date.now();if(t<=0)return"now";let r=Math.round(t/1e3);if(r<60)return`in ${r}s`;let a=Math.round(r/60);if(a<60)return`in ${a}m`;let s=Math.round(a/60);if(s<24){let t=new Date(e);return`at ${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}`}let n=Math.round(s/24);return`in ${n}d`}(C.resetAt)]})]}),(0,a.jsx)("div",{className:"whitespace-pre-wrap break-words text-foreground/85",children:C.message}),C.cta&&(0,a.jsx)("div",{className:"text-[11px] text-muted-foreground/80",children:C.cta})]}):(0,a.jsx)("div",{className:"text-destructive/80",children:"The program finished but didn't produce any output."}):"done"===_&&e.answer?(0,a.jsx)("button",{type:"button",onClick:()=>M(!0),className:"group min-h-0 flex-1 cursor-zoom-in overflow-y-auto rounded text-left transition-colors hover:bg-foreground/5 focus:outline-none focus:ring-2 focus:ring-primary/40",title:"Click to view the full answer",children:(0,a.jsx)("pre",{className:"whitespace-pre-wrap break-words text-foreground/85",children:e.answer})}):(0,a.jsx)("div",{className:"text-muted-foreground/70",children:"No output yet."})}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 border-t border-border bg-card/60 px-4 py-2 font-mono text-[10px] text-muted-foreground",children:[(0,a.jsx)("span",{className:"truncate",children:e.binaryUsed??e.agentName}),(0,a.jsxs)("span",{className:"flex shrink-0 items-center gap-2",children:[void 0!==e.durationMs&&(0,a.jsx)("span",{title:"Wall-clock time the CLI took to finish.",children:function(e){if(e<1e3)return`${e} ms`;let t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;let r=Math.floor(t/60),a=Math.round(t-60*r);return`${r}m${a.toString().padStart(2,"0")}s`}(e.durationMs)}),e.usage?.costUsd!==void 0&&(0,a.jsx)("span",{title:"USD cost reported by the CLI for this run.",children:(l=e.usage.costUsd)<=0?"$0.00":l<.01?"<$0.01":l<1?`$${l.toFixed(3)}`:`$${l.toFixed(2)}`}),e.usage&&N(e.usage)&&(0,a.jsx)("span",{title:(c=e.usage,p=[],void 0!==c.inputTokens&&p.push(`in ${c.inputTokens.toLocaleString()}`),void 0!==c.outputTokens&&p.push(`out ${c.outputTokens.toLocaleString()}`),void 0!==c.cachedInputTokens&&p.push(`cached ${c.cachedInputTokens.toLocaleString()}`),p.join(" \xb7 ")),children:N(e.usage)}),(0,a.jsx)("span",{children:e.hasAnswer?`${(e.answer?.length??0).toLocaleString()} B`:"—"}),"done"===_&&e.answer&&(0,a.jsxs)("button",{type:"button",onClick:()=>M(!0),className:"inline-flex items-center gap-1 rounded px-1 py-0.5 text-muted-foreground/80 transition-colors hover:bg-foreground/10 hover:text-foreground",title:"View full answer",children:[(0,a.jsx)(g,{className:"h-3 w-3"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"expand"})]})]})]}),(0,a.jsx)(k.lG,{open:$,onOpenChange:M,children:(0,a.jsxs)(k.Cf,{className:"max-h-[85vh] max-w-3xl overflow-hidden",children:[(0,a.jsx)(k.c7,{children:(0,a.jsxs)(k.L3,{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${(0,f.JR)(E)}`}),(0,a.jsx)("span",{className:"font-medium capitalize",children:e.role}),(0,a.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,a.jsx)("span",{className:"uppercase tracking-wider text-muted-foreground",children:(0,f.u5)(E)}),(e.modelUsed??e.model)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-muted-foreground/60",children:"\xb7"}),(0,a.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:e.modelUsed??e.model})]})]})}),(0,a.jsx)("div",{className:"max-h-[70vh] overflow-y-auto rounded border border-border bg-card/40 p-4",children:(0,a.jsx)("pre",{className:"whitespace-pre-wrap break-words text-sm text-foreground/90",children:e.answer??""})})]})})]})}function N(e){let t=(e.inputTokens??0)+(e.outputTokens??0);return t<=0?null:t<1e3?`${t} tok`:`${(t/1e3).toFixed(1)}k tok`}function A({round:e,isLatest:t,activeFor:r,liveTails:s,chatTerminal:n,reviewOnly:d,chatId:o,swaps:i}){let l=d?e.participants.filter(e=>"doer"!==e.role):e.participants,c=(i??[]).filter(t=>t.round===e.round);return(0,a.jsxs)("section",{children:[!d&&(0,a.jsxs)("h2",{className:"mb-3 text-xs uppercase tracking-wider text-muted-foreground",children:["Round ",e.round,t&&(0,a.jsx)("span",{className:"ml-2 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:"current"})]}),(0,a.jsx)("div",{className:"grid items-start gap-4 sm:grid-cols-2 xl:grid-cols-3",children:l.map(e=>{let t;return(0,a.jsx)(j,{participant:e,isActive:r(e),liveTail:s[e.participant],chatTerminal:n,chatId:o,reviewOnly:d,swaps:(t=e.participant.replace(/^(reviewer-|doer-)/,""),c.filter(e=>e.agent===t))},e.participant)})})]})}let $={claude:"claude-code",codex:"codex-cli",gemini:"gemini-cli",opencode:"opencode-cli",kimi:"kimi-cli",openrouter:"openrouter"},M={anthropic:"claude",openai:"codex",google:"gemini",opencode:"opencode",moonshot:"kimi"},C={drafting:{text:"DRAFTING \xb7 doer working",color:"primary"},reviewing:{text:"REVIEWING \xb7 cross-lineage check",color:"primary"},approved:{text:"APPROVED",color:"emerald"},merged:{text:"PR OPENED",color:"emerald"},blocked:{text:"BLOCKED \xb7 ship error",color:"amber"},no_review:{text:"NO REVIEW \xb7 reviewers unavailable",color:"amber"},failed:{text:"FAILED",color:"destructive"},cancelled:{text:"CANCELLED",color:"muted"}},_={primary:"bg-primary",emerald:"bg-emerald-400",amber:"bg-amber-400",destructive:"bg-destructive",muted:"bg-muted-foreground"},E=["approved","merged","blocked","failed","cancelled","no_review"];function S(e,t){return t&&t.startsWith("openrouter:")?"openrouter":M[e]??e}let R=(0,d.A)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]),I=(0,d.A)("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);var z=r(8420),L=r(5902);function T({chatId:e,status:t,isTerminal:r,template:s,onCancel:d}){let o=(0,L.useRouter)(),[l,c]=(0,i.useState)(!1),[p,m]=(0,i.useState)(!1),h=async()=>{c(!0);try{let t=await fetch(`/api/daemon/chats/${e}/rerun`,{method:"POST"});if(!t.ok){window.alert("Couldn't start a new run — Chorus didn't respond. Try restarting it from your terminal: chorus start"),c(!1);return}let r=await t.json();if(!r.ok){let e=r.error?.message??"Unknown error from Chorus.";window.alert(`Couldn't start a new run: ${e}`),c(!1);return}let a=r.data?.slug??r.data?.id;a?(o.push(`/runs/${a}`),o.refresh()):(window.alert("Chorus accepted the retry but didn't return a chat id. Refresh and try again."),c(!1))}catch{window.alert("Retry failed. Network error."),c(!1)}},x=async()=>{if(window.confirm("Delete this chat permanently? This removes all reviewer output and history. You cannot undo this.")){m(!0);try{(await fetch(`/api/daemon/chats/${e}`,{method:"DELETE"})).ok?(o.push("/runs"),o.refresh()):(window.alert("Couldn't delete this chat — Chorus didn't respond. Try restarting it from your terminal: chorus start"),m(!1))}catch{window.alert("Delete failed. Network error."),m(!1)}}};return(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:["cancelled"===t||"failed"===t?(0,a.jsxs)("button",{type:"button",disabled:l,onClick:h,className:"flex items-center gap-1.5 rounded-md border border-primary/40 bg-primary/10 px-3 py-1.5 text-xs font-medium text-primary transition hover:border-primary hover:bg-primary/20 disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(R,{className:`h-3.5 w-3.5 ${l?"animate-spin":""}`}),l?"Restarting…":"Retry"]}):(0,a.jsxs)("button",{type:"button",disabled:r,onClick:async()=>{await fetch(`/api/daemon/chats/${e}/cancel`,{method:"POST"}),d()},className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(u.A,{className:"h-3.5 w-3.5"}),"Cancel"]}),r&&s&&(0,a.jsxs)(n(),{href:`/new?template=${encodeURIComponent(s.id)}`,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-primary/40 hover:text-primary",children:[(0,a.jsx)(I,{className:"h-3.5 w-3.5"}),"Run again"]}),(0,a.jsxs)("button",{type:"button",disabled:p,onClick:x,className:"flex items-center gap-1.5 rounded-md border border-border bg-card px-3 py-1.5 text-xs font-medium text-muted-foreground transition hover:border-destructive/40 hover:text-destructive disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(z.A,{className:"h-3.5 w-3.5"}),p?"Deleting…":"Delete"]})]})}var O=r(52),D=r(2116),U=r(2865),P=r(9410),V=r(9208),F=r(7618),H=r(4579),q=r(9812),W=r(9707);let G={review:O.A,review_only:O.A,plan:D.A,spec:U.A,tests:P.A,implement:V.A,verify:F.A,pr:H.A,divergence:m.A,recon:q.A},J={pending:"bg-muted-foreground/20 text-muted-foreground",active:"bg-primary/20 text-primary ring-2 ring-primary/40 ring-offset-2 ring-offset-background",done:"bg-emerald-500/20 text-emerald-300",blocked:"bg-amber-500/20 text-amber-300",skipped:"bg-muted-foreground/10 text-muted-foreground/50 line-through"},K={pending:"queued",active:"active",done:"done",blocked:"blocked",skipped:"skipped"};function Q({phases:e,activeIndex:t,states:r,onSelect:s}){return(0,a.jsx)("div",{className:"flex items-center gap-0 overflow-x-auto pb-1",children:e.map((n,d)=>{let o=r[d]??"pending",i=G[n.kind],l=s&&("done"===o||"active"===o);return(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsxs)("button",{type:"button",disabled:!l,onClick:()=>l&&s?.(d),className:`group flex items-center gap-2 rounded-md border px-3 py-1.5 text-left transition ${d===t?"border-primary/40 bg-primary/5":"done"===o?"border-emerald-500/30 bg-emerald-500/5":"blocked"===o?"border-amber-500/40 bg-amber-500/5":"border-border bg-card/30"} ${l?"hover:border-foreground/30":"cursor-default"}`,children:[(0,a.jsx)("span",{className:`grid h-6 w-6 shrink-0 place-items-center rounded-md ${J[o]}`,children:"done"===o?(0,a.jsx)(W.A,{className:"h-3.5 w-3.5"}):"active"===o?(0,a.jsx)(y.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,a.jsx)(i,{className:"h-3.5 w-3.5"})}),(0,a.jsxs)("span",{className:"flex flex-col leading-tight",children:[(0,a.jsxs)("span",{className:"text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:[String(d+1).padStart(2,"0")," \xb7 ",K[o]]}),(0,a.jsx)("span",{className:`text-xs font-medium ${"skipped"===o?"text-muted-foreground/50":"text-foreground"}`,children:n.name})]})]}),d<e.length-1&&(0,a.jsx)("span",{className:`mx-1.5 h-px w-6 ${"done"===r[d]?"bg-emerald-500/40":"bg-border"}`})]},n.id)})})}function Y({template:e,status:t,totalPhases:r,completedPhaseCount:s,rounds:n,enrichedRounds:d,prUrl:o,shipError:i}){return(0,a.jsx)("div",{className:"border-b border-border bg-card/20 px-4 py-3 sm:px-8",children:(0,a.jsxs)("div",{className:"mx-auto flex w-full flex-col gap-3",children:[o&&(0,a.jsxs)("div",{className:"rounded-md border border-emerald-500/40 bg-emerald-500/5 px-4 py-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-emerald-300",children:[(0,a.jsx)(v.A,{className:"h-4 w-4"}),"Pull request opened"]}),(0,a.jsx)("a",{href:o,target:"_blank",rel:"noreferrer",className:"rounded-md border border-emerald-500/40 bg-emerald-500/10 px-3 py-1.5 text-xs font-medium text-emerald-300 transition hover:bg-emerald-500/20",children:"View PR →"})]}),(0,a.jsx)("p",{className:"mt-1 break-all font-mono text-[11px] text-emerald-200/70",children:o})]}),i&&!o&&(0,a.jsxs)("div",{className:"rounded-md border border-amber-500/40 bg-amber-500/5 px-4 py-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-amber-300",children:[(0,a.jsx)(x.A,{className:"h-4 w-4"}),"Ship phase blocked"]}),(0,a.jsx)("p",{className:"mt-1 break-words font-mono text-[11px] text-amber-200/80",children:i}),(0,a.jsx)("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:"The reviewers approved the doer's output, but chorus couldn't open a PR. Resolve the issue above and re-run."})]}),e?.phases&&e.phases.length>0&&(0,a.jsx)("div",{className:"flex justify-center",children:(0,a.jsx)(Q,{phases:e.phases,activeIndex:Math.min(s,r-1),states:e.phases.map((e,r)=>"approved"===t?"done":"no_review"===t?r<s?"done":"blocked":"failed"===t||"cancelled"===t?r<s?"done":"skipped":r<s?"done":r===s?"active":"pending")})}),(0,a.jsx)(B,{template:e,status:t,totalPhases:r,completedPhaseCount:s,rounds:n,enrichedRounds:d})]})})}function B({template:e,status:t,totalPhases:r,completedPhaseCount:s,rounds:n,enrichedRounds:d}){let o=e?.maxRounds??1,i="approved"===t||"merged"===t||"no_review"===t||"blocked"===t||"failed"===t||"cancelled"===t,l=r>1,c=!l&&o>1,p=d[d.length-1],u=p?.participants.filter(e=>"reviewer"===e.role)??[],m=u.length,h=u.filter(e=>e.hasAnswer).length;if(!l&&!c&&!(!l&&!c&&m>1))return null;let x=l?r:c?o:m,g=l?Math.min(s,r):c?Math.min(Math.max(n.length,1),o):h,f=l&&i?x:g,b=l?`${f} / ${x} phases`:c?`Round ${f} / ${x}`:`${f} / ${x} complete`;return(0,a.jsxs)("div",{className:"mx-auto flex w-full max-w-xs items-center gap-2",children:[(0,a.jsx)("div",{className:"flex h-1 flex-1 overflow-hidden rounded-full bg-muted",children:(0,a.jsx)("div",{className:`transition-[width] duration-700 ease-out ${"approved"===t?"bg-emerald-400":"bg-primary"}`,style:{width:`${f/x*100}%`}})}),(0,a.jsx)("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground",children:b})]})}function X({chatId:e,initialStatus:t,initialRounds:r,templateId:s,template:d,work:c,projectName:u,initialPrUrl:m,initialShipError:h,initialVerdict:x,demoDataSource:g}){var b,v;let[y,w]=(0,i.useState)(t),[k,j]=(0,i.useState)(x),[N,M]=(0,i.useState)(r),[R,I]=(0,i.useState)(new Set),[z,L]=(0,i.useState)(m),[O,D]=(0,i.useState)(h),[U,P]=(0,i.useState)({}),[V,F]=(0,i.useState)(-1),[H,q]=(0,i.useState)({}),[W,G]=(0,i.useState)([]),J=e=>`${e.round}:${e.phaseId}:${e.role}:${e.agent}:${e.fromLineage}:${e.fromModel}`,K=e=>{G(t=>{let r=new Set(t.map(J)),a=[...t];for(let t of e){let e=J(t);r.has(e)||(r.add(e),a.push(t))}return a})},Q=E.includes(y);(0,i.useEffect)(()=>{if(Q||g)return;let t=setInterval(async()=>{try{let t=await fetch(`/api/run-artifacts/${e}`);if(!t.ok)return;let r=await t.json();M(r.rounds),Array.isArray(r.swaps)&&r.swaps.length>0&&K(r.swaps)}catch{}},8e3);return()=>clearInterval(t)},[e,Q,g]),(0,i.useEffect)(()=>{if(Q)return;let t=g?g.createEventSource():new EventSource(`/api/daemon/chats/${e}/stream`);return t.onmessage=r=>{try{let a=JSON.parse(r.data),s=a.payload.role,n=a.payload.agent,d=a.payload.phaseId;if("phase_start"===a.type&&s&&n&&d&&(I(e=>{let t=new Set(e);return t.add(`${s}-${n}-${d}`),t}),g)){let e=g.fetchArtifacts();M(e.rounds),Array.isArray(e.swaps)&&K(e.swaps)}if("phase_progress"===a.type&&s&&n){let e=a.payload.output;if("string"==typeof e&&e.length>0){let t=`${s}-${n}`;P(r=>({...r,[t]:e}))}}if(("phase_done"===a.type||"phase_failed"===a.type)&&(I(new Set),"phase_done"===a.type)){let e=a.payload?.phaseIdx??-1;Number.isInteger(e)&&e>=0&&F(t=>e>t?e:t)}if("cli_warning"===a.type&&n&&s){let e="doer"===s?`doer-${n}`:`reviewer-${n}`,t=a.payload.reason??void 0,r=t??a.payload.kind??"warning",d=a.payload.message??"(no detail)";if(q(t=>{let s={...t},n=s[e]??[];return n.some(e=>e.kind===r&&e.message===d)?t:(s[e]=[...n,{kind:r,message:d,ts:a.ts??Date.now()}],s)}),("lineage_fallback"===t||"model_fallback"===t)&&"string"==typeof a.payload.fromLineage&&"string"==typeof a.payload.toLineage){let e=a.payload.round??1,r=a.payload.phaseId??"",d=a.payload.fromModel??"(default)",o=a.payload.toModel??"(default)",i=a.payload.fallbackIdx??0,l={round:e,phaseId:r,role:s,agent:n,reason:t,fromLineage:a.payload.fromLineage,toLineage:a.payload.toLineage,fromModel:d,toModel:o,fallbackIdx:i,ts:a.ts??Date.now()};G(e=>{let t=J(l);return e.some(e=>J(e)===t)?e:[...e,l]})}}if("participant_done"===a.type)if(g){let e=g.fetchArtifacts();M(e.rounds),Array.isArray(e.swaps)&&K(e.swaps)}else fetch(`/api/run-artifacts/${e}`).then(e=>e.ok?e.json():null).then(e=>{e&&(M(e.rounds),Array.isArray(e.swaps)&&K(e.swaps))}).catch(()=>{});if("chat_done"===a.type){let r=a.payload.status;"merged"===r?w("merged"):"blocked"===r?w("blocked"):"no_review"===r?w("no_review"):"failed"===r?w("failed"):"cancelled"===r?w("cancelled"):w("approved");let s=a.payload.verdict;"string"==typeof s&&s.length>0&&j(s);let n=a.payload.prUrl;"string"==typeof n&&n.length>0&&L(n);let d=a.payload.shipError;if("string"==typeof d&&d.length>0&&D(d),t.close(),g){let e=g.fetchArtifacts();M(e.rounds),Array.isArray(e.swaps)&&K(e.swaps)}else fetch(`/api/run-artifacts/${e}`).then(e=>e.ok?e.json():null).then(e=>{e&&(M(e.rounds),Array.isArray(e.swaps)&&K(e.swaps))}).catch(()=>{})}}catch{}},()=>t.close()},[e,Q,g]),(0,i.useEffect)(()=>{if(g)return;let t=!1;return fetch(`/api/run-artifacts/${e}`).then(e=>e.ok?e.json():null).then(e=>{!t&&e&&Array.isArray(e.swaps)&&K(e.swaps)}).catch(()=>{}),()=>{t=!0}},[e,g]);let B=(b=y,v=k,"approved"===b&&v&&"approved"!==v?"request_changes"===v?{text:"REVIEW \xb7 CHANGES REQUESTED",color:"amber"}:{text:`REVIEW \xb7 ${v.toUpperCase()}`,color:"amber"}:C[b]??{text:b.toUpperCase(),color:"muted"}),Z=d?.phases?.length??1,ee=(0,i.useMemo)(()=>"approved"===y||"merged"===y||"no_review"===y||"blocked"===y?Z:"failed"===y||"cancelled"===y?0:Math.min(Math.max(0,V+1),Z),[y,Z,V]),et=(0,i.useMemo)(()=>(0,l.$)(d),[d]),er=(0,i.useMemo)(()=>(function(e,t,r){if(!t?.phases?.length)return e;let a=(0,l.$)(t),s=function(e,t){let r=e.phases[0],a=(e,t)=>t?.[0]??(0,f.YM)(e),s=[];if(!t){let e=r.doer.models?.[0],t=S(r.doer.lineage,e);s.push({role:"doer",lineage:t,model:e??a(t,r.doer.models)})}for(let[e,t]of(r.reviewer?.candidatesWithModels??[]).entries()){let r=t.models?.[0],n=S(t.lineage,r);s.push({role:"reviewer",lineage:n,model:r??a(n,t.models),reviewerIdx:e})}return s}(t,a);return e.map(e=>{let t=[],a=new Set;for(let n of s){let s="doer"===n.role?`doer-${n.lineage}`:`reviewer-${n.lineage}-${n.reviewerIdx}`,d=e.participants.find(e=>"doer"===n.role?"doer"===e.role&&e.lineage===n.lineage:"reviewer"===e.role&&e.lineage===n.lineage&&parseInt(e.participant.match(/-(\d+)$/)?.[1]??"0",10)===n.reviewerIdx);d?(t.push({...d,model:n.model,...r[d.participant]?{warnings:r[d.participant]}:{}}),a.add(d.participant)):t.push({participant:s,role:n.role,agentName:$[n.lineage]??n.lineage,lineage:n.lineage,hasAnswer:!1,model:n.model,pending:!0,...r[s]?{warnings:r[s]}:{}})}for(let s of e.participants)a.has(s.participant)||t.push({...s,...r[s.participant]?{warnings:r[s.participant]}:{}});return{...e,participants:t}})})(N,d,H),[N,d,H]),ea=er[er.length-1],es=er.slice(0,-1);return(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsxs)("div",{className:"sticky top-0 z-20 border-b border-border bg-card/80 backdrop-blur-sm px-4 py-3 sm:px-8",children:[(0,a.jsxs)("div",{className:"mb-2 flex w-full items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsxs)(n(),{href:"/runs",className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition hover:text-foreground",children:[(0,a.jsx)(o,{className:"h-3 w-3"}),(0,a.jsx)("span",{children:u??"Runs"})]}),(0,a.jsx)("span",{className:"text-muted-foreground/40",children:"\xb7"}),(0,a.jsxs)("span",{title:B.text,className:"inline-flex shrink-0 items-center gap-1.5 text-[11px] uppercase tracking-wider text-muted-foreground",children:[(0,a.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${_[B.color]} ${Q?"":"animate-pulse-soft"}`}),y]}),(d||s)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-muted-foreground/40",children:"\xb7"}),(0,a.jsxs)(n(),{href:`/templates${d?`#${encodeURIComponent(d.id)}`:""}`,title:d?`Template: ${d.name}`:`Template (deleted): ${s}`,className:"inline-flex min-w-0 shrink items-center gap-1.5 text-[11px] text-muted-foreground transition hover:text-primary",children:[(0,a.jsx)("span",{className:"font-mono uppercase tracking-wider",children:"tpl"}),(0,a.jsx)("span",{className:"truncate font-medium text-foreground",children:d?.name??s})]})]})]}),(0,a.jsx)(T,{chatId:e,status:y,isTerminal:Q,template:d,onCancel:()=>w("cancelled")})]}),(0,a.jsx)("div",{className:"min-w-0",children:(0,a.jsx)(p,{work:c})})]}),(0,a.jsx)(Y,{template:d,status:y,totalPhases:Z,completedPhaseCount:ee,rounds:N,enrichedRounds:er,prUrl:z,shipError:O}),(0,a.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-6 sm:px-8",children:(0,a.jsxs)("div",{className:"mx-auto w-full space-y-8",children:[0===N.length&&(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-12 text-center text-sm text-muted-foreground",children:"Waiting for first phase to start…"}),ea&&(0,a.jsx)(A,{round:ea,isLatest:!0,activeFor:e=>{let t=`${e.participant}-`;for(let e of R)if(e.startsWith(t))return!0;return!1},liveTails:U,chatTerminal:Q,reviewOnly:et,chatId:e,swaps:W}),!et&&es.length>0&&(0,a.jsxs)("details",{className:"rounded-lg border border-border bg-card",children:[(0,a.jsxs)("summary",{className:"cursor-pointer px-4 py-3 text-xs uppercase tracking-wider text-muted-foreground hover:text-foreground",children:["Earlier rounds (",es.length,")"]}),(0,a.jsx)("div",{className:"space-y-6 border-t border-border p-4",children:es.slice().reverse().map(e=>(0,a.jsx)(A,{round:e,activeFor:()=>!1,liveTails:{},chatTerminal:Q,swaps:W},e.round))})]})]})})]})}},1749:(e,t,r)=>{r.d(t,{$:()=>i});var a=r(9442);r(6074);var s=r(9056),n=r(8113),d=r(7362);let o=(0,s.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function i({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?n.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,d.cn)(o({variant:t,size:r,className:e})),...l})}},1853:(e,t,r)=>{r.d(t,{Cf:()=>p,L3:()=>m,c7:()=>u,lG:()=>o,rr:()=>h,zM:()=>i});var a=r(9442);r(6074);var s=r(6891),n=r(3703),d=r(7362);function o({...e}){return(0,a.jsx)(n.bL,{"data-slot":"dialog",...e})}function i({...e}){return(0,a.jsx)(n.l9,{"data-slot":"dialog-trigger",...e})}function l({...e}){return(0,a.jsx)(n.ZL,{"data-slot":"dialog-portal",...e})}function c({className:e,...t}){return(0,a.jsx)(n.hJ,{"data-slot":"dialog-overlay",className:(0,d.cn)("fixed inset-0 z-50 bg-black/75 backdrop-blur-sm data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",e),...t})}function p({className:e,children:t,showCloseButton:r=!0,...o}){return(0,a.jsxs)(l,{"data-slot":"dialog-portal",children:[(0,a.jsx)(c,{}),(0,a.jsxs)(n.UC,{"data-slot":"dialog-content",className:(0,d.cn)("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",e),...o,children:[t,r&&(0,a.jsxs)(n.bm,{"data-slot":"dialog-close",className:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(s.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function u({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,d.cn)("flex flex-col gap-2 text-center sm:text-left",e),...t})}function m({className:e,...t}){return(0,a.jsx)(n.hE,{"data-slot":"dialog-title",className:(0,d.cn)("text-lg leading-none font-semibold",e),...t})}function h({className:e,...t}){return(0,a.jsx)(n.VY,{"data-slot":"dialog-description",className:(0,d.cn)("text-sm text-muted-foreground",e),...t})}r(1749)},2116:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]])},2865:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("file-code-corner",[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]])},2956:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},3149:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},3734:(e,t,r)=>{r.d(t,{JR:()=>c,QJ:()=>n,VW:()=>d,YM:()=>u,m_:()=>o,r2:()=>m,u5:()=>l,x0:()=>p,ze:()=>a});let a={anthropic:"Claude",openai:"Codex",google:"Gemini",opencode:"OpenCode",moonshot:"Kimi"},s={anthropic:"bg-violet-400",openai:"bg-orange-400",google:"bg-blue-400",opencode:"bg-emerald-400",moonshot:"bg-pink-400"};function n(e){return e?a[e]??e:""}function d(e){return e?s[e]??"bg-muted":"bg-muted"}let o={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode",kimi:"Kimi",openrouter:"OpenRouter"},i={claude:"bg-violet-400",codex:"bg-orange-400",gemini:"bg-blue-400",opencode:"bg-emerald-400",kimi:"bg-pink-400",openrouter:"bg-cyan-400"};function l(e){return e?o[e]??e:""}function c(e){return e?i[e]??"bg-muted":"bg-muted"}let p={claude:"claude-opus-4-7",codex:"gpt-5.5",gemini:"gemini-2.5-pro",opencode:"kimi-k2.6",kimi:"kimi-k2.6",openrouter:""};function u(e){if(e)return p[e]}let m={claude:{dot:"bg-violet-400",ring:"ring-violet-400/40",gradient:"bg-gradient-to-b from-violet-500/15 to-card"},codex:{dot:"bg-orange-400",ring:"ring-orange-400/40",gradient:"bg-gradient-to-b from-orange-500/15 to-card"},gemini:{dot:"bg-blue-400",ring:"ring-blue-400/40",gradient:"bg-gradient-to-b from-blue-500/15 to-card"},opencode:{dot:"bg-emerald-400",ring:"ring-emerald-400/40",gradient:"bg-gradient-to-b from-emerald-500/15 to-card"},kimi:{dot:"bg-pink-400",ring:"ring-pink-400/40",gradient:"bg-gradient-to-b from-pink-500/15 to-card"},openrouter:{dot:"bg-cyan-400",ring:"ring-cyan-400/40",gradient:"bg-gradient-to-b from-cyan-500/15 to-card"}}},4030:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},4579:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("git-pull-request",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]])},4608:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]])},6289:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])},7618:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]])},8420:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},9056:(e,t,r)=>{r.d(t,{F:()=>d});var a=r(142);let s=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,n=a.$,d=(e,t)=>r=>{var a;if((null==t?void 0:t.variants)==null)return n(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:d,defaultVariants:o}=t,i=Object.keys(d).map(e=>{let t=null==r?void 0:r[e],a=null==o?void 0:o[e];if(null===t)return null;let n=s(t)||s(a);return d[e][n]}),l=r&&Object.entries(r).reduce((e,t)=>{let[r,a]=t;return void 0===a||(e[r]=a),e},{});return n(e,i,null==t||null==(a=t.compoundVariants)?void 0:a.reduce((e,t)=>{let{class:r,className:a,...s}=t;return Object.entries(s).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...o,...l}[t]):({...o,...l})[t]===r})?[...e,r,a]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}},9208:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]])},9410:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("test-tube-diagonal",[["path",{d:"M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3",key:"1ub6xw"}],["path",{d:"m16 2 6 6",key:"1gw87d"}],["path",{d:"M12 16H4",key:"1cjfip"}]])},9707:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},9812:(e,t,r)=>{r.d(t,{A:()=>a});let a=(0,r(3884).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{63:(e,t,r)=>{r.d(t,{Zp:()=>o});var a=r(9442);r(6074);var n=r(7362);function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card",className:(0,n.cn)("flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm",e),...t})}},1749:(e,t,r)=>{r.d(t,{$:()=>s});var a=r(9442);r(6074);var n=r(9056),o=r(8113),i=r(7362);let d=(0,n.F)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function s({className:e,variant:t="default",size:r="default",asChild:n=!1,...l}){let c=n?o.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,i.cn)(d({variant:t,size:r,className:e})),...l})}},1853:(e,t,r)=>{r.d(t,{Cf:()=>g,L3:()=>x,c7:()=>u,lG:()=>d,rr:()=>f,zM:()=>s});var a=r(9442);r(6074);var n=r(6891),o=r(3703),i=r(7362);function d({...e}){return(0,a.jsx)(o.bL,{"data-slot":"dialog",...e})}function s({...e}){return(0,a.jsx)(o.l9,{"data-slot":"dialog-trigger",...e})}function l({...e}){return(0,a.jsx)(o.ZL,{"data-slot":"dialog-portal",...e})}function c({className:e,...t}){return(0,a.jsx)(o.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("fixed inset-0 z-50 bg-black/75 backdrop-blur-sm data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",e),...t})}function g({className:e,children:t,showCloseButton:r=!0,...d}){return(0,a.jsxs)(l,{"data-slot":"dialog-portal",children:[(0,a.jsx)(c,{}),(0,a.jsxs)(o.UC,{"data-slot":"dialog-content",className:(0,i.cn)("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",e),...d,children:[t,r&&(0,a.jsxs)(o.bm,{"data-slot":"dialog-close",className:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(n.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function u({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",e),...t})}function x({className:e,...t}){return(0,a.jsx)(o.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",e),...t})}function f({className:e,...t}){return(0,a.jsx)(o.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-sm text-muted-foreground",e),...t})}r(1749)},3734:(e,t,r)=>{r.d(t,{JR:()=>c,QJ:()=>o,VW:()=>i,YM:()=>u,m_:()=>d,r2:()=>x,u5:()=>l,x0:()=>g,ze:()=>a});let a={anthropic:"Claude",openai:"Codex",google:"Gemini",opencode:"OpenCode",moonshot:"Kimi"},n={anthropic:"bg-violet-400",openai:"bg-orange-400",google:"bg-blue-400",opencode:"bg-emerald-400",moonshot:"bg-pink-400"};function o(e){return e?a[e]??e:""}function i(e){return e?n[e]??"bg-muted":"bg-muted"}let d={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode",kimi:"Kimi",openrouter:"OpenRouter"},s={claude:"bg-violet-400",codex:"bg-orange-400",gemini:"bg-blue-400",opencode:"bg-emerald-400",kimi:"bg-pink-400",openrouter:"bg-cyan-400"};function l(e){return e?d[e]??e:""}function c(e){return e?s[e]??"bg-muted":"bg-muted"}let g={claude:"claude-opus-4-7",codex:"gpt-5.5",gemini:"gemini-2.5-pro",opencode:"kimi-k2.6",kimi:"kimi-k2.6",openrouter:""};function u(e){if(e)return g[e]}let x={claude:{dot:"bg-violet-400",ring:"ring-violet-400/40",gradient:"bg-gradient-to-b from-violet-500/15 to-card"},codex:{dot:"bg-orange-400",ring:"ring-orange-400/40",gradient:"bg-gradient-to-b from-orange-500/15 to-card"},gemini:{dot:"bg-blue-400",ring:"ring-blue-400/40",gradient:"bg-gradient-to-b from-blue-500/15 to-card"},opencode:{dot:"bg-emerald-400",ring:"ring-emerald-400/40",gradient:"bg-gradient-to-b from-emerald-500/15 to-card"},kimi:{dot:"bg-pink-400",ring:"ring-pink-400/40",gradient:"bg-gradient-to-b from-pink-500/15 to-card"},openrouter:{dot:"bg-cyan-400",ring:"ring-cyan-400/40",gradient:"bg-gradient-to-b from-cyan-500/15 to-card"}}},4372:(e,t,r)=>{r.d(t,{G:()=>i});var a=r(9442),n=r(821),o=r(8344);function i({children:e}){return(0,a.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,a.jsx)(n.AppSidebar,{}),(0,a.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,a.jsx)(o.MobileTopBar,{}),(0,a.jsx)("main",{className:"flex-1 overflow-y-auto",children:e})]})]})}},5702:(e,t,r)=>{r.d(t,{E:()=>s});var a=r(9442);r(6074);var n=r(9056),o=r(8113),i=r(7362);let d=(0,n.F)("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",outline:"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",ghost:"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",link:"text-primary underline-offset-4 [a&]:hover:underline"}},defaultVariants:{variant:"default"}});function s({className:e,variant:t="default",asChild:r=!1,...n}){let l=r?o.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,i.cn)(d({variant:t}),e),...n})}},6457:(e,t,r)=>{r.d(t,{z:()=>n});var a=r(9442);function n({eyebrow:e,title:t,subtitle:r,action:o}){return(0,a.jsxs)("header",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:e}),(0,a.jsx)("h1",{className:"mt-1 text-2xl font-semibold tracking-tight",children:t}),r&&(0,a.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground",children:r})]}),o&&(0,a.jsx)("div",{className:"shrink-0 self-start sm:self-auto",children:o})]})}},8191:(e,t,r)=>{r.d(t,{N:()=>o});var a=r(9442),n=r(9208);function o({filename:e,charCount:t,footer:r,maxHeightClassName:i="max-h-[70vh]",children:d}){return(0,a.jsxs)("div",{className:"flex h-full min-w-0 flex-col overflow-hidden rounded-lg border border-border bg-card",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border bg-card/60 px-4 py-2.5",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2 font-mono text-[11px] text-muted-foreground",children:[(0,a.jsx)(n.A,{className:"h-3 w-3 shrink-0"}),(0,a.jsx)("span",{className:"truncate",children:e})]}),"number"==typeof t&&(0,a.jsxs)("span",{className:"font-mono text-[10px] text-muted-foreground/70",children:[t.toLocaleString()," chars"]})]}),(0,a.jsx)("pre",{className:`${i} min-h-0 flex-1 overflow-auto whitespace-pre-wrap break-words bg-background px-5 py-4 font-mono text-[12px] leading-relaxed text-foreground/90`,children:d}),r&&(0,a.jsx)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-t border-border bg-card/60 px-4 py-2.5 text-[11px] text-muted-foreground",children:r})]})}}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[91],{4372:(e,n,t)=>{"use strict";t.d(n,{G:()=>a});var i=t(9442),o=t(821),r=t(8344);function a({children:e}){return(0,i.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,i.jsx)(o.AppSidebar,{}),(0,i.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,i.jsx)(r.MobileTopBar,{}),(0,i.jsx)("main",{className:"flex-1 overflow-y-auto",children:e})]})]})}},5249:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>R});var i=t(9442),o=t(6074),r=t(5902),a=t(4372),s=t(5358);function d(e,n){let t=[],i=!1,o={onmessage:null,onerror:null,onopen:null,readyState:0,url:"mock://demo",withCredentials:!1,addEventListener:()=>{},removeEventListener:()=>{},dispatchEvent:()=>!0,close:()=>{for(let e of(i=!0,t))clearTimeout(e)}};for(let r of[...e].sort((e,n)=>e.atMs-n.atMs)){let e=setTimeout(()=>{if(i)return;if(n){let e=r.payload;n("string"==typeof e.type?e.type:"",e.payload??{})}let e=o.onmessage;e&&e({data:JSON.stringify(r.payload)})},r.atMs);t.push(e)}return o}let c="review",l="**Verdict: approve**\n\n",p=[{agentName:"codex-cli-0",lineage:"codex",model:"gpt-5.5",binaryUsed:"codex",doneAtMs:3200,durationMs:3e3,usage:{inputTokens:6480,outputTokens:380,costUsd:.0094},answer:"## Codex review: `divide(a, b)`\n\n"+l+'Math is correct, types flow naturally, function is small and obvious. Approving with two notes.\n\n**The current helper:**\n```ts\nexport function divide(a: number, b: number) {\n return a / b;\n}\n```\n\n**Two minors before merge:**\n1. **Add a divide-by-zero guard.** `divide(x, 0)` silently returns `Infinity` — a footgun in any pipeline that math-chains:\n ```ts\n if (b === 0) throw new RangeError("divide: zero divisor");\n ```\n2. **Add a JSDoc block.** Three lines. Saves the next reader from reading the body to learn the type contract.'},{agentName:"gemini-cli-1",lineage:"gemini",model:"gemini-3.1-pro-preview",binaryUsed:"gemini-cli",doneAtMs:4400,durationMs:4200,usage:{inputTokens:6720,outputTokens:720,costUsd:.0258},answer:"## Gemini review: `divide(a, b)`\n\n"+l+'No structural issues. The function does one thing and the implementation matches its name. Approving with a strong suggestion to harden the test surface.\n\n**Suggested spec coverage:**\n```ts\ndescribe("divide", () => {\n it("returns a / b for finite inputs", () => {\n expect(divide(10, 2)).toBe(5);\n });\n it("rejects zero divisor", () => {\n expect(() => divide(10, 0)).toThrow();\n });\n it("rejects NaN", () => {\n expect(() => divide(NaN, 2)).toThrow();\n });\n it("rejects Infinity", () => {\n expect(() => divide(Infinity, 2)).toThrow();\n });\n});\n```\n\nFour cases close every hole I see by construction.'},{agentName:"claude-code-2",lineage:"claude",model:"claude-opus-4-7",binaryUsed:"claude-code",doneAtMs:5400,durationMs:5200,usage:{inputTokens:7100,outputTokens:1240,costUsd:.0517},answer:"## Claude review: `divide(a, b)`\n\n"+l+'Reads cleanly. The function does one thing and is trivially testable. Approving with two notes — neither blocking.\n\n**Note 1 — Zero-guard.**\n`divide(x, 0)` returns `Infinity` in JavaScript. That value flows silently through arithmetic and ends up in logs/dashboards as a real number. A typed error would prevent the silent corruption:\n```ts\nclass DivideError extends Error {}\nif (b === 0) throw new DivideError("zero divisor");\n```\n\n**Note 2 — Currency callers.**\nIf this lives on a billing/ledger hot path, prefer integer-cents or `decimal.js` over floats. IEEE 754 will accumulate cent-level drift in a high-volume ledger:\n```ts\n// safer for currency:\nexport function divideMoney(cents: number, n: number): number {\n return Math.round(cents / n);\n}\n```'},{agentName:"opencode-cli-3",lineage:"opencode",model:"opencode-go/kimi-k2.6",binaryUsed:"opencode",doneAtMs:2700,durationMs:2500,usage:{inputTokens:6240,outputTokens:280,costUsd:.0042},answer:"## Kimi review (via opencode)\n\n"+l+'Pragmatic helper. The math is correct; the holes are at the boundary, not the body. Approving — both fixes below are 60-second jobs that can land in a follow-up if you want to ship now.\n\n**Suggested patch:**\n```ts\n/**\n * Divide two finite numbers. Throws on zero divisor or non-finite input.\n */\nexport function divide(a: number, b: number): number {\n if (b === 0) throw new Error("divide: zero divisor");\n return a / b;\n}\n```\n\nAnd one test:\n```ts\nexpect(() => divide(1, 0)).toThrow("zero divisor");\n```'},{agentName:"opencode-cli-4",lineage:"opencode",model:"opencode-go/deepseek-v4-pro",binaryUsed:"opencode",doneAtMs:6200,durationMs:6e3,usage:{inputTokens:7340,outputTokens:1460,costUsd:.0228},answer:'## DeepSeek review (via opencode)\n\n**Verdict: request changes**\n\nThree blockers in a financial context. This helper would land me in a post-mortem inside three months on a busy ledger.\n\n**Blocker 1 — No divide-by-zero guard.**\n```ts\ndivide(100, 0); // → Infinity, silent corruption downstream\n```\nRequired:\n```ts\nif (b === 0) throw new DivideError("zero");\n```\n\n**Blocker 2 — No input validation.**\n```ts\ndivide("5" as any, 2); // → 2.5 (silent string coercion)\ndivide(NaN, 2); // → NaN (poisons later math)\ndivide(undefined as any, 2); // → NaN\n```\nRequired: `Number.isFinite(a) && Number.isFinite(b)` at the top.\n\n**Blocker 3 — Floats for money.**\nIEEE 754 + currency = audit-trail nightmare. Use integer-cents or `decimal.js`. Reproducer:\n```ts\n0.1 + 0.2 === 0.3; // false\ndivide(0.3, 0.1); // 2.9999999999999996\n```'},{agentName:"opencode-cli-5",lineage:"opencode",model:"opencode-go/qwen3.6-plus",binaryUsed:"opencode",doneAtMs:3700,durationMs:3500,usage:{inputTokens:6420,outputTokens:320,costUsd:.0061},answer:"## Qwen review (via opencode)\n\n"+l+"Reads cleanly. No defects in the body.\n\n**Minor — Missing documentation.**\nThree lines of JSDoc would let editor tooling surface the contract:\n```ts\n/**\n * @param a - dividend (finite number)\n * @param b - divisor (finite, non-zero)\n * @returns the quotient a / b\n */\n```\n\nHelpful for downstream callers, not blocking the merge."}];function u(e){return{participant:`reviewer-${e.agentName}`,role:"reviewer",agentName:e.agentName,lineage:e.lineage,hasAnswer:!1,model:e.model,pending:!1}}let h=[{round:1,participants:p.map(u)}],m={id:"demo-simple-6way",name:"External Review \xb7 Six Voices",description:"Six reviewers critique the artifact independently.",category:"review",agreementThreshold:"majority",onThresholdMet:"ask-user",maxRounds:1,driver:"external",driverHandoff:!1,verificationGate:"auto",costCapUsd:0,yoloDefault:!1,onError:"fail",notify:"dashboard-only",yaml:"",authorHandle:"demo",forks:0,popularity:0,phases:[{id:c,name:"External Review",description:"Six lineages critique the supplied artifact independently.",kind:"review_only",gate:"auto",doer:{lineage:"claude",models:[]},reviewer:{require:2,crossLineage:!0,candidates:["codex","gemini","claude","opencode"],candidatesWithModels:p.map(e=>({lineage:e.lineage,models:[e.model]}))},artifact:{label:"Artifact",hint:"",maxBytes:1048576},inputs:{include:[],exclude:[]},iterate:{max:1,onMax:"fail"},blindSpots:[],execution:"parallel",builtin:!0}]},v=e=>({type:"phase_start",payload:{phaseIdx:0,phaseId:c,kind:"review_only",role:"reviewer",agent:e},ts:Date.now()}),g=(e,n,t)=>({type:"phase_progress",payload:{phaseId:c,round:1,role:"reviewer",agent:e,elapsedMs:t,output:n},ts:Date.now()}),f=e=>({type:"participant_done",payload:{phaseId:c,round:1,role:"reviewer",agent:e},ts:Date.now()}),w={"codex-cli-0":"## Reviewing src/util/divide.ts\n\nCurrent implementation:\n```ts\nexport function divide(a: number, b: number) {\n return a / b;\n}\n```\n\nChecking input handling first.\n\nSpotted: no zero-guard. `divide(x, 0)` silently returns `Infinity`. In a billing pipeline that math-chains downstream, that becomes a ledger row.\n\nNo JSDoc either — readers have to read the body to learn the type contract.\n\nVerdict drafting: two minors, leaning approve with notes.","gemini-cli-1":"## Review \xb7 `divide(a, b)`\n\nReading the helper. Checking the type contract first:\n```ts\n(a: number, b: number) => number\n```\n\nCoverage gaps surfacing: `NaN`, `Infinity`, zero divisor — none asserted.\n\nDrafting a four-case spec block to close the holes by construction:\n```ts\nexpect(divide(10, 2)).toBe(5);\nexpect(() => divide(10, 0)).toThrow();\nexpect(() => divide(NaN, 2)).toThrow();\nexpect(() => divide(Infinity, 2)).toThrow();\n```\n\nApproving with this spec block as a follow-up.","claude-code-2":"## Review: divide helper\n\nLoading + cross-referencing the two callers:\n```ts\n// /billing/invoice.ts:42 — currently produces silent Infinity\nconst unitPrice = divide(invoice.total, invoice.quantity);\n\n// /reports/avg.ts:18 — already wraps in try/catch\nconst average = divide(sum, count);\n```\n\n`/billing/invoice.ts:42` is the smoking gun — confirms the silent-Infinity bug class is real, not theoretical.\n\nRecommendation:\n1. Add a zero-guard returning a typed `DivideError`.\n2. Stage `divideMoney(cents, n)` for currency callers in a follow-up.\n\nApproving the helper rewrite with these two notes.","opencode-cli-3":'## Kimi review (via opencode)\n\nInspecting `divide(a, b)`. Quick pass — math is correct, the holes are at the boundary.\n\nSuggested patch:\n```ts\n/** Divide two finite numbers. Throws on zero divisor or non-finite input. */\nexport function divide(a: number, b: number): number {\n if (b === 0) throw new Error("divide: zero divisor");\n return a / b;\n}\n```\n\nApproving — both fixes are 60-second jobs.',"opencode-cli-4":'## DeepSeek review (via opencode)\n\nLoading `divide()` + the two callers + the existing spec.\n\nReproducing the failure modes locally:\n```ts\ndivide(100, 0); // Infinity (silent corruption)\ndivide("5", 2); // 2.5 (silent string coercion)\ndivide(0.3, 0.1); // 2.9999999999999996 (IEEE 754)\n```\n\nThree blockers, all reproducible in <30 lines:\n1. **No divide-by-zero guard** — required: `Number.isFinite` check + typed error.\n2. **No input validation** — TypeScript types are erased at runtime; `as any` slips through.\n3. **Floats for money** — IEEE 754 + currency = audit-trail nightmare. Need integer-cents.\n\nWill request changes.',"opencode-cli-5":"## Qwen review (via opencode)\n\nQuick read — public API surface only.\n\nNo defects in the body. The implementation matches its name.\n\nDocumentation gap noted — three lines of JSDoc would let editor tooling surface the contract:\n```ts\n/**\n * @param a - dividend (finite number)\n * @param b - divisor (finite, non-zero)\n * @returns the quotient a / b\n */\n```\n\nApproving — JSDoc is the only minor."},b=(()=>{let e=[];for(let[n,t]of p.entries())e.push({atMs:200+20*n,payload:v(t.agentName)});for(let n of p){let t=function(e){let n=Math.floor(.3*e.length),t=Math.floor(.65*e.length);return[e.slice(0,n),e.slice(0,t),e]}(w[n.agentName]),i=[.25,.55,.85].map(e=>Math.round(n.doneAtMs*e));for(let[o,r]of t.entries())e.push({atMs:i[o],payload:g(n.agentName,r,i[o])})}for(let n of p)e.push({atMs:n.doneAtMs,payload:f(n.agentName)});let n=Math.max(...p.map(e=>e.doneAtMs));return e.push({atMs:n+200,payload:{type:"phase_done",payload:{phaseId:c,phaseIdx:0,kind:"review_only"},ts:Date.now()}}),e.push({atMs:n+400,payload:{type:"chat_done",payload:{status:"completed",verdict:"request_changes"},ts:Date.now()}}),e})(),y={agentName:"claude-code-doer",lineage:"claude",model:"claude-opus-4-7",binaryUsed:"claude-code",doneAtMs:3700,durationMs:3500},k=[{agentName:"codex-cli-0",lineage:"codex",model:"gpt-5.5",binaryUsed:"codex",doneAtMs:2800,durationMs:2600},{agentName:"gemini-cli-1",lineage:"gemini",model:"gemini-3.1-pro-preview",binaryUsed:"gemini-cli",doneAtMs:3500,durationMs:3300},{agentName:"claude-code-2",lineage:"claude",model:"claude-sonnet-4-6",binaryUsed:"claude-code",doneAtMs:3100,durationMs:2900},{agentName:"opencode-cli-3",lineage:"opencode",model:"opencode-go/kimi-k2.6",binaryUsed:"opencode",doneAtMs:3900,durationMs:3700},{agentName:"opencode-cli-4",lineage:"opencode",model:"opencode-go/deepseek-v4-pro",binaryUsed:"opencode",doneAtMs:4500,durationMs:4300}],T=[y,...k],x=[{id:"plan",name:"Plan",kind:"plan",description:"Doer drafts the implementation approach; three reviewers critique.",streams:["## Plan: divide() helper rewrite\n\n**Goal:** production-safe wrapper over `a / b`.\n\n**Three deliverables:**\n1. Zero-guard returning a typed `DivideError`.\n2. Strict input validation (numbers only, finite, non-NaN).\n3. Switch currency callers to integer-cents (`divideMoney(cents, n)` follow-up PR).\n\n**Acceptance tests:**\n```ts\nexpect(divide(10, 2)).toBe(5);\nexpect(() => divide(10, 0)).toThrow(DivideError);\nexpect(() => divide(NaN, 2)).toThrow(DivideError);\nexpect(() => divide(Infinity, 2)).toThrow(DivideError);\n```\n\n**Risks:** API churn for two callers (`/billing/invoice.ts:42`, `/reports/avg.ts:18`). Mitigation: ship v2 alongside, deprecate v1 over one minor.\n\n**Rollback:** revert single commit; no schema/migration touched.","## Codex review \xb7 plan\n\nReading the plan…\n\nThree-piece breakdown looks right:\n- zero-guard ✓\n- input validation ✓\n- decimal precision ✓\n\nAcceptance tests match the spec contract.\n\n**Approve** — sound plan. One ask: add a `bigint` handling note. The current plan is implicitly Number-only, which is the right call, but worth saying so explicitly so the next reader does not assume `BigInt` support.","## Gemini review \xb7 plan\n\nCross-checking acceptance tests against the spec contract:\n```ts\ndivide(10, 2) // 5 ✓\ndivide(10, 0) // throw ✓\ndivide(NaN, 2) // throw ✓\ndivide(Inf, 2) // throw ✓\n```\n\nConcrete enough to drive TDD.\n\n**Approve** — explicit zero-guard is the right move. One follow-up: surface the deprecation timeline in the PR body so the two affected callers can plan their cutover.","## Claude (sonnet) review \xb7 plan\n\nReading the plan + skimming the existing call sites.\n\nThree-piece breakdown is right. The `divideMoney` carve-out is the right ergonomic — keep `divide` for general arithmetic, steer money paths to integer-cents.\n\n**Approve** — one ask: pin the deprecation timeline (one minor? one major?) so the two callers can plan.","## Kimi review (via opencode) \xb7 plan\n\nPlan looks tight. Three deliverables map cleanly to three commits if you want to split for review.\n\nAcceptance test set is the right shape — unit tests against the contract, not the implementation.\n\n**Approve** — pragmatic and shippable.","## DeepSeek review \xb7 plan\n\nPulling the existing `divide()` implementation for context:\n```ts\nexport function divide(a, b) { return a / b; }\n```\n\nCross-checking against the silent-Infinity bug class.\n\nNeed a non-finite-input row added to the acceptance tests:\n```ts\nexpect(() => divide(Number.POSITIVE_INFINITY, 2)).toThrow(DivideError);\nexpect(() => divide(2, Number.NEGATIVE_INFINITY)).toThrow(DivideError);\n```\n\nThe silent-Infinity bug is what triggered this rewrite, so the test set should explicitly cover both directions.\n\n**Approve with notes** — solid plan, just close that gap."],usage:[{inputTokens:6420,outputTokens:1840,costUsd:.0682},{inputTokens:5800,outputTokens:380,costUsd:.0094},{inputTokens:6020,outputTokens:540,costUsd:.0241},{inputTokens:6020,outputTokens:410,costUsd:.0086},{inputTokens:6240,outputTokens:320,costUsd:.0048},{inputTokens:6280,outputTokens:1140,costUsd:.0488}]},{id:"spec",name:"Spec",kind:"spec",description:"Doer derives the API contract; reviewers check alignment.",streams:['## Spec: `divide(a, b)`\n\n```ts\nexport class DivideError extends Error {\n constructor(public readonly reason: "zero" | "non-finite") {\n super(`divide: ${reason}`);\n this.name = "DivideError";\n }\n}\n\nexport function divide(a: number, b: number): number;\n```\n\n**Contract:**\n- `b === 0` → throws `DivideError("zero")`\n- `!Number.isFinite(a)` → throws `DivideError("non-finite")`\n- `!Number.isFinite(b)` → throws `DivideError("non-finite")`\n- otherwise → returns `a / b`\n\n**Order of checks:** non-finite first so `divide(NaN, 0)` reports the more specific failure.',"## Codex review \xb7 spec\n\nReading the type signature:\n```ts\n(a: number, b: number) => number\n```\n\nClean. Examples cover happy + zero + non-finite.\n\n**Approve** — suggest adding NaN explicitly to the example block:\n```ts\nexpect(() => divide(NaN, 5)).toThrow(/non-finite/);\n```\n\n`Number.isFinite(NaN)` returns false so it is covered, but enumerating it makes the intent explicit.",'## Gemini review \xb7 spec\n\nThe `reason` discriminant on the error class is the right ergonomic for callers that need to branch:\n```ts\ntry { return divide(a, b); }\ncatch (err) {\n if (err instanceof DivideError && err.reason === "zero") return 0;\n throw err;\n}\n```\n\nThat pattern beats string parsing on `err.message`.\n\n**Approve** — no structural concerns.','## Claude (sonnet) review \xb7 spec\n\n`DivideError` class is well-scoped. The `name = "DivideError"` assignment is the kind of detail that pays off in stack traces:\n```\nDivideError: divide: zero\n at /billing/invoice.ts:42\n```\n\n**Approve.**',"## Kimi review (via opencode) \xb7 spec\n\nType signature is unambiguous. The `reason` discriminant lets callers branch on failure type without string parsing.\n\nOrder-of-checks (non-finite first) is the right call.\n\n**Approve** — ready for implement.","## DeepSeek review \xb7 spec\n\nLoading spec + cross-checking against plan.\n\nExamples should include negatives and -Infinity:\n```ts\nexpect(divide(-10, 2)).toBe(-5);\nexpect(divide(10, -2)).toBe(-5);\nexpect(() => divide(Number.NEGATIVE_INFINITY, 2)).toThrow();\n```\n\nThe spec contract handles them correctly via `Number.isFinite`, but the example block sets the test surface and should be exhaustive.\n\n**Approve with notes.**"],usage:[{inputTokens:7240,outputTokens:1620,costUsd:.0731},{inputTokens:6500,outputTokens:320,costUsd:.0086},{inputTokens:6720,outputTokens:460,costUsd:.0218},{inputTokens:6720,outputTokens:380,costUsd:.0078},{inputTokens:6900,outputTokens:280,costUsd:.0042},{inputTokens:6980,outputTokens:980,costUsd:.0431}]},{id:"implement",name:"Implement",kind:"implement",description:"Doer writes the code blind to tests; reviewers find bugs.",streams:['## Implementation: `src/util/divide.ts`\n\n```ts\nexport class DivideError extends Error {\n constructor(public readonly reason: "zero" | "non-finite") {\n super(`divide: ${reason}`);\n this.name = "DivideError";\n }\n}\n\nexport function divide(a: number, b: number): number {\n if (!Number.isFinite(a) || !Number.isFinite(b)) {\n throw new DivideError("non-finite");\n }\n if (b === 0) {\n throw new DivideError("zero");\n }\n return a / b;\n}\n```\n\n**Notes:**\n- Non-finite check first so `divide(NaN, 0)` reports `"non-finite"`, not `"zero"`.\n- `name` set on `DivideError` so stack traces read `DivideError: divide: zero`.','## Codex review \xb7 diff\n\nPulling the diff. Reading each branch:\n\n✓ `Number.isFinite` — rejects NaN, \xb1Infinity, non-numbers via type system.\n✓ Zero-check after — order is correct.\n✓ `DivideError` extends `Error` with `name` set.\n\nOrder of checks decision is the correct call:\n```ts\ndivide(NaN, 0); // → "non-finite" (more specific failure first)\n```\n\n**Approve** — implementation is clean. Nothing to push back on.','## Gemini review \xb7 diff\n\nThe patch matches the spec line-for-line.\n\nThe `name` assignment on `DivideError`:\n```ts\nthis.name = "DivideError";\n```\n\nis the kind of detail that pays off the first time someone reads a stack trace — `DivideError: divide: zero` is actionable; `Error: divide: zero` looks like a generic throw and gets noise-suppressed.\n\n**Approve.**',"## Claude (sonnet) review \xb7 diff\n\nReads cleanly. Inline validation is fine for two args; would extract `isInvalid()` if this grew.\n\nThe `name` assignment on `DivideError` is the right detail — actionable stack traces over generic `Error: ...` lines.\n\n**Approve.**","## Kimi review (via opencode) \xb7 diff\n\nSmall, obvious, complete. 13 lines that do exactly what the spec said.\n\nReads in one breath:\n```ts\nif (!Number.isFinite(a) || !Number.isFinite(b)) throw …;\nif (b === 0) throw …;\nreturn a / b;\n```\n\n**Approve.**","## DeepSeek review \xb7 diff\n\nDiff loaded. Walking each branch.\n\nWant a `-0` test note before merge — JavaScript treats `-0 === 0` as `true`, so the existing zero-guard catches it, but the test pins the behaviour:\n```ts\nexpect(divide(10, -2)).toBe(-5);\nexpect(() => divide(10, -0)).toThrow(/zero/); // -0 === 0\n```\n\nThe `-0` case is the easy miss — without the test, an accidental refactor to `if (b !== 0)` would pass the existing suite.\n\n**Approve with notes.**"],usage:[{inputTokens:8120,outputTokens:1980,costUsd:.0892},{inputTokens:7300,outputTokens:280,costUsd:.0072},{inputTokens:7440,outputTokens:460,costUsd:.0214},{inputTokens:7440,outputTokens:320,costUsd:.0066},{inputTokens:7620,outputTokens:360,costUsd:.0054},{inputTokens:7720,outputTokens:1180,costUsd:.0508}]},{id:"verify",name:"Verify",kind:"verify",description:"Run the test suite; reviewers confirm coverage.",streams:['## Verify\n\n```\n$ pnpm test src/util/divide.test.ts\n\n ✓ divide > returns a / b for valid inputs\n ✓ divide > handles negative dividends\n ✓ divide > handles negative divisors\n ✓ divide > -0 is treated as 0 (throws "zero")\n ✓ divide > throws "zero" for b=0\n ✓ divide > throws "non-finite" for NaN\n ✓ divide > throws "non-finite" for \xb1Infinity\n ✓ divide > non-finite check precedes zero check\n ✓ DivideError > extends Error\n ✓ DivideError > exposes reason discriminant\n\n Tests: 12 passed (12)\n Coverage: 100% lines, 100% branches\n Lint: clean\n Types: clean\n Time: 1.42s\n```',"## Codex review \xb7 verify\n\nTest report loaded.\n\n✓ 12/12 pass, 0 fail, 0 skip\n✓ Coverage 100/100/100\n✓ Lint + types clean\n\nEvery spec case has a corresponding test. The `-0` row is what the implement-phase review asked for; merged correctly.\n\n**Approve** — nothing to add.","## Gemini review \xb7 verify\n\nReading the report:\n```\nTests: 12 passed (12)\nCoverage: 100% lines, 100% branches\n```\n\nNo flakes, no skips. The `Tests: 12 passed (12)` line is exactly what the merge gate looks for.\n\nCoverage 100/100/100 satisfies the production-utility bar.\n\n**Approve.**","## Claude (sonnet) review \xb7 verify\n\n12 tests for a 13-line function is honest coverage, not theatre. Each test asserts a real boundary condition.\n\nThe `non-finite check precedes zero check` assertion is doing real work — it pins the order-of-checks decision so a future refactor cannot silently swap them.\n\n**Approve.**","## Kimi review (via opencode) \xb7 verify\n\n✓ 12/12 pass\n✓ Coverage 100/100/100\n✓ No flakes, no skips\n\nShip it.\n\n**Approve.**","## DeepSeek review \xb7 verify\n\nPulling test report + spec for cross-check.\n\n12 tests for a 13-line function is honest coverage, not theatre. Each test asserts a real boundary:\n\n- happy path \xd7 4\n- zero divisor + -0\n- NaN + \xb1Infinity\n- order-of-checks invariant\n- DivideError shape + discriminant\n\nThe `non-finite check precedes zero check` assertion pins the order-of-checks decision so a future refactor cannot silently swap them.\n\n**Approve.**"],usage:[{inputTokens:8980,outputTokens:1340,costUsd:.0641},{inputTokens:8060,outputTokens:80,costUsd:.0021},{inputTokens:8230,outputTokens:360,costUsd:.0179},{inputTokens:8230,outputTokens:280,costUsd:.0058},{inputTokens:8410,outputTokens:220,costUsd:.0033},{inputTokens:8520,outputTokens:1060,costUsd:.0418}]},{id:"pr",name:"Ship",kind:"pr",description:"Doer drafts the PR; reviewers approve merge.",streams:["## PR draft\n\n**Title:** `feat(util): production-safe divide() with DivideError + 100% branch coverage`\n\n**Body:**\n```\nIntroduces a hardened `divide()` per the attached spec.\n\nWhat:\n- New DivideError class with typed reason discriminant\n- divide(a, b) rejects non-finite + zero divisor\n- 12 new tests; 100% line + branch coverage\n- Two existing callers updated\n\nWhy:\n- Silent Infinity from divide(x, 0) was a footgun in /billing\n- IEEE 754 currency math driving audit-trail drift; companion\n divideMoney(cents, n) lands in #4129\n\nRisk:\n- Two callers updated; no other call sites in repo\n- Rollback: revert this commit (no schema touched)\n- Backward-compat: divide() v1 stays exported for one minor\n\nCloses #4127\n```","## Codex review \xb7 PR\n\nTitle is clear and accurate. Body follows the What/Why/Risk structure the merge gate expects.\n\nTwo-caller scope is small enough to revert cleanly if needed.\n\nCloses link is correct.\n\n**Approve merge.**","## Gemini review \xb7 PR\n\nContext is well-summarised. Calling out `divideMoney` as the follow-up PR (#4129) sets the right expectation for reviewers.\n\n`Closes #4127` ties the work to the original bug report — the audit trail is intact.\n\n**Approve merge.**","## Claude (sonnet) review \xb7 PR\n\nNo surprises. Two-caller scope is bounded, rollback is a single revert, backward-compat note covers the cutover.\n\nOn-call will not be paged at 3am over this one.\n\n**Approve merge.**","## Kimi review (via opencode) \xb7 PR\n\nTitle + body land the message in three sentences. Verify report linked. Risk section names the actual callers.\n\nShip it.\n\n**Approve merge.**","## DeepSeek review \xb7 PR\n\nPR + verify report cross-loaded. Risk + rollback note is the kind of thing on-call appreciates.\n\nVerify report (12 tests, 100% branch) is linked. Closes link to #4127 ties the work to the original bug.\n\nBackward-compat note covers the cutover window:\n> divide() v1 stays exported for one minor before removal\n\nNothing held back.\n\n**Approve merge.**"],usage:[{inputTokens:9420,outputTokens:1480,costUsd:.0712},{inputTokens:8460,outputTokens:60,costUsd:.0017},{inputTokens:8640,outputTokens:320,costUsd:.0163},{inputTokens:8640,outputTokens:280,costUsd:.0058},{inputTokens:8820,outputTokens:240,costUsd:.0036},{inputTokens:8930,outputTokens:920,costUsd:.0388}]}];function N(e,n){return{participant:`${e}-${n.agentName}`,role:e,agentName:n.agentName,lineage:n.lineage,hasAnswer:!1,model:n.model,pending:!1}}function E(e,n,t,i){return{participant:`${e}-${n.agentName}`,role:e,agentName:n.agentName,lineage:n.lineage,hasAnswer:!0,answer:t,durationMs:n.durationMs,model:n.model,binaryUsed:n.binaryUsed,modelUsed:n.model,usage:i}}function M(){return[N("doer",y),...k.map(e=>N("reviewer",e))]}let D=[{round:1,participants:M()}],A={id:"demo-complex-6way",name:"Plan → Ship Workflow",description:"Five-phase workflow with five reviewers per phase.",category:"review",agreementThreshold:"majority",onThresholdMet:"auto-finalize",maxRounds:1,driver:"external",driverHandoff:!1,verificationGate:"auto",costCapUsd:0,yoloDefault:!1,onError:"fail",notify:"dashboard-only",yaml:"",authorHandle:"demo",forks:0,popularity:0,phases:x.map(e=>({id:e.id,name:e.name,description:e.description,kind:e.kind,gate:"auto",doer:{lineage:"claude",models:["claude-opus-4-7"]},reviewer:{require:2,crossLineage:!0,candidates:["codex","gemini","opencode"],candidatesWithModels:k.map(e=>({lineage:e.lineage,models:[e.model]}))},artifact:{label:"Artifact",hint:"",maxBytes:1048576},inputs:{include:[],exclude:[]},iterate:{max:1,onMax:"fail"},blindSpots:[],execution:"parallel",builtin:!0}))},I=(e,n,t)=>{let i=[],o=n.id;for(let[r,a]of T.entries())i.push({atMs:t+30*r,payload:{type:"phase_start",payload:{phaseIdx:e,phaseId:o,kind:n.kind,role:0===r?"doer":"reviewer",agent:a.agentName},ts:Date.now()}});for(let[e,r]of T.entries()){let a=0===e?"doer":"reviewer",s=function(e){let n=Math.floor(.3*e.length),t=Math.floor(.65*e.length);return[e.slice(0,n),e.slice(0,t),e]}(n.streams[e]),d=[.25,.55,.85].map(e=>Math.round(r.doneAtMs*e));for(let[e,n]of s.entries())i.push({atMs:t+d[e],payload:{type:"phase_progress",payload:{phaseId:o,round:1,role:a,agent:r.agentName,elapsedMs:d[e],output:n},ts:Date.now()}})}for(let[e,n]of T.entries()){let r=0===e?"doer":"reviewer";i.push({atMs:t+n.doneAtMs,payload:{type:"participant_done",payload:{phaseId:o,round:1,role:r,agent:n.agentName},ts:Date.now()}})}return i.push({atMs:t+5e3-100,payload:{type:"phase_done",payload:{phaseId:o,phaseIdx:e,kind:n.kind},ts:Date.now()}}),i},U=(()=>{let e=[];for(let[n,t]of x.entries())e.push(...I(n,t,200+5e3*n));return e.push({atMs:200+5e3*x.length+300,payload:{type:"chat_done",payload:{status:"merged",verdict:"approve",prUrl:"https://github.com/example/repo/pull/4128"},ts:Date.now()}}),e})(),S={"simple-6way":{template:m,initialRounds:h,work:"Review src/util/divide.ts for production-readiness — six lineages, one pass, blockers welcome.",buildDataSource:function(){let e={currentParticipants:p.map(u)};return{createEventSource:()=>d(b,(n,t)=>{!function(e,n,t){if("participant_done"!==n)return;let i=t.agent;if(!i)return;let o=p.find(e=>e.agentName===i);o&&(e.currentParticipants=e.currentParticipants.map(e=>e.agentName===i?{participant:`reviewer-${o.agentName}`,role:"reviewer",agentName:o.agentName,lineage:o.lineage,hasAnswer:!0,answer:o.answer,durationMs:o.durationMs,model:o.model,binaryUsed:o.binaryUsed,modelUsed:o.model,usage:o.usage}:e))}(e,n,t)}),fetchArtifacts:()=>({rounds:[{round:1,participants:e.currentParticipants}]})}}},"complex-6way":{template:A,initialRounds:D,work:"feat(util): production-safe divide() — Plan → Spec → Implement → Verify → Ship • closes #4127",buildDataSource:function(){let e={currentPhaseIdx:0,currentParticipants:M()};return{createEventSource:()=>d(U,(n,t)=>{!function(e,n,t){if("phase_start"===n){let n=t.phaseIdx;"number"==typeof n&&n!==e.currentPhaseIdx&&(e.currentPhaseIdx=n,e.currentParticipants=M());return}if("participant_done"===n){let n=t.agent;if(!n)return;let i=T.findIndex(e=>e.agentName===n);if(i<0)return;let o=T[i],r=x[e.currentPhaseIdx];if(!r)return;let a=E(0===i?"doer":"reviewer",o,r.streams[i],r.usage[i]);e.currentParticipants=e.currentParticipants.map(e=>e.agentName===n?a:e);return}if("chat_done"===n){let n=x[x.length-1];e.currentParticipants=T.map((e,t)=>E(0===t?"doer":"reviewer",e,n.streams[t],n.usage[t])),e.currentPhaseIdx=x.length-1}}(e,n,t)}),fetchArtifacts:()=>({rounds:[{round:1,participants:e.currentParticipants}]})}}}};function R({params:e}){let{scenario:n}=(0,o.use)(e),t=S[n];t||(0,r.notFound)();let d=(0,o.useMemo)(()=>`demo-${n}-${Math.random().toString(36).slice(2,8)}`,[n]),c=(0,o.useMemo)(()=>t.buildDataSource(),[t]);return(0,i.jsx)(a.G,{children:(0,i.jsx)("div",{className:"mx-auto max-w-[1700px] px-6 py-6",children:(0,i.jsx)(s.LiveRunReal,{chatId:d,initialStatus:"reviewing",initialRounds:t.initialRounds,template:t.template,templateId:t.template.id,work:t.work,demoDataSource:c})})})}},6255:(e,n,t)=>{Promise.resolve().then(t.bind(t,5249))}},e=>{e.O(0,[116,720,641,344,977,506,128,358],()=>e(e.s=6255)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[91],{4372:(e,n,t)=>{"use strict";t.d(n,{G:()=>a});var i=t(9442),o=t(821),r=t(8344);function a({children:e}){return(0,i.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,i.jsx)(o.AppSidebar,{}),(0,i.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,i.jsx)(r.MobileTopBar,{}),(0,i.jsx)("main",{className:"flex-1 overflow-y-auto",children:e})]})]})}},5249:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>R});var i=t(9442),o=t(6074),r=t(5902),a=t(4372),s=t(1245);function d(e,n){let t=[],i=!1,o={onmessage:null,onerror:null,onopen:null,readyState:0,url:"mock://demo",withCredentials:!1,addEventListener:()=>{},removeEventListener:()=>{},dispatchEvent:()=>!0,close:()=>{for(let e of(i=!0,t))clearTimeout(e)}};for(let r of[...e].sort((e,n)=>e.atMs-n.atMs)){let e=setTimeout(()=>{if(i)return;if(n){let e=r.payload;n("string"==typeof e.type?e.type:"",e.payload??{})}let e=o.onmessage;e&&e({data:JSON.stringify(r.payload)})},r.atMs);t.push(e)}return o}let c="review",l="**Verdict: approve**\n\n",p=[{agentName:"codex-cli-0",lineage:"codex",model:"gpt-5.5",binaryUsed:"codex",doneAtMs:3200,durationMs:3e3,usage:{inputTokens:6480,outputTokens:380,costUsd:.0094},answer:"## Codex review: `divide(a, b)`\n\n"+l+'Math is correct, types flow naturally, function is small and obvious. Approving with two notes.\n\n**The current helper:**\n```ts\nexport function divide(a: number, b: number) {\n return a / b;\n}\n```\n\n**Two minors before merge:**\n1. **Add a divide-by-zero guard.** `divide(x, 0)` silently returns `Infinity` — a footgun in any pipeline that math-chains:\n ```ts\n if (b === 0) throw new RangeError("divide: zero divisor");\n ```\n2. **Add a JSDoc block.** Three lines. Saves the next reader from reading the body to learn the type contract.'},{agentName:"gemini-cli-1",lineage:"gemini",model:"gemini-3.1-pro-preview",binaryUsed:"gemini-cli",doneAtMs:4400,durationMs:4200,usage:{inputTokens:6720,outputTokens:720,costUsd:.0258},answer:"## Gemini review: `divide(a, b)`\n\n"+l+'No structural issues. The function does one thing and the implementation matches its name. Approving with a strong suggestion to harden the test surface.\n\n**Suggested spec coverage:**\n```ts\ndescribe("divide", () => {\n it("returns a / b for finite inputs", () => {\n expect(divide(10, 2)).toBe(5);\n });\n it("rejects zero divisor", () => {\n expect(() => divide(10, 0)).toThrow();\n });\n it("rejects NaN", () => {\n expect(() => divide(NaN, 2)).toThrow();\n });\n it("rejects Infinity", () => {\n expect(() => divide(Infinity, 2)).toThrow();\n });\n});\n```\n\nFour cases close every hole I see by construction.'},{agentName:"claude-code-2",lineage:"claude",model:"claude-opus-4-7",binaryUsed:"claude-code",doneAtMs:5400,durationMs:5200,usage:{inputTokens:7100,outputTokens:1240,costUsd:.0517},answer:"## Claude review: `divide(a, b)`\n\n"+l+'Reads cleanly. The function does one thing and is trivially testable. Approving with two notes — neither blocking.\n\n**Note 1 — Zero-guard.**\n`divide(x, 0)` returns `Infinity` in JavaScript. That value flows silently through arithmetic and ends up in logs/dashboards as a real number. A typed error would prevent the silent corruption:\n```ts\nclass DivideError extends Error {}\nif (b === 0) throw new DivideError("zero divisor");\n```\n\n**Note 2 — Currency callers.**\nIf this lives on a billing/ledger hot path, prefer integer-cents or `decimal.js` over floats. IEEE 754 will accumulate cent-level drift in a high-volume ledger:\n```ts\n// safer for currency:\nexport function divideMoney(cents: number, n: number): number {\n return Math.round(cents / n);\n}\n```'},{agentName:"opencode-cli-3",lineage:"opencode",model:"opencode-go/kimi-k2.6",binaryUsed:"opencode",doneAtMs:2700,durationMs:2500,usage:{inputTokens:6240,outputTokens:280,costUsd:.0042},answer:"## Kimi review (via opencode)\n\n"+l+'Pragmatic helper. The math is correct; the holes are at the boundary, not the body. Approving — both fixes below are 60-second jobs that can land in a follow-up if you want to ship now.\n\n**Suggested patch:**\n```ts\n/**\n * Divide two finite numbers. Throws on zero divisor or non-finite input.\n */\nexport function divide(a: number, b: number): number {\n if (b === 0) throw new Error("divide: zero divisor");\n return a / b;\n}\n```\n\nAnd one test:\n```ts\nexpect(() => divide(1, 0)).toThrow("zero divisor");\n```'},{agentName:"opencode-cli-4",lineage:"opencode",model:"opencode-go/deepseek-v4-pro",binaryUsed:"opencode",doneAtMs:6200,durationMs:6e3,usage:{inputTokens:7340,outputTokens:1460,costUsd:.0228},answer:'## DeepSeek review (via opencode)\n\n**Verdict: request changes**\n\nThree blockers in a financial context. This helper would land me in a post-mortem inside three months on a busy ledger.\n\n**Blocker 1 — No divide-by-zero guard.**\n```ts\ndivide(100, 0); // → Infinity, silent corruption downstream\n```\nRequired:\n```ts\nif (b === 0) throw new DivideError("zero");\n```\n\n**Blocker 2 — No input validation.**\n```ts\ndivide("5" as any, 2); // → 2.5 (silent string coercion)\ndivide(NaN, 2); // → NaN (poisons later math)\ndivide(undefined as any, 2); // → NaN\n```\nRequired: `Number.isFinite(a) && Number.isFinite(b)` at the top.\n\n**Blocker 3 — Floats for money.**\nIEEE 754 + currency = audit-trail nightmare. Use integer-cents or `decimal.js`. Reproducer:\n```ts\n0.1 + 0.2 === 0.3; // false\ndivide(0.3, 0.1); // 2.9999999999999996\n```'},{agentName:"opencode-cli-5",lineage:"opencode",model:"opencode-go/qwen3.6-plus",binaryUsed:"opencode",doneAtMs:3700,durationMs:3500,usage:{inputTokens:6420,outputTokens:320,costUsd:.0061},answer:"## Qwen review (via opencode)\n\n"+l+"Reads cleanly. No defects in the body.\n\n**Minor — Missing documentation.**\nThree lines of JSDoc would let editor tooling surface the contract:\n```ts\n/**\n * @param a - dividend (finite number)\n * @param b - divisor (finite, non-zero)\n * @returns the quotient a / b\n */\n```\n\nHelpful for downstream callers, not blocking the merge."}];function u(e){return{participant:`reviewer-${e.agentName}`,role:"reviewer",agentName:e.agentName,lineage:e.lineage,hasAnswer:!1,model:e.model,pending:!1}}let h=[{round:1,participants:p.map(u)}],m={id:"demo-simple-6way",name:"External Review \xb7 Six Voices",description:"Six reviewers critique the artifact independently.",category:"review",agreementThreshold:"majority",onThresholdMet:"ask-user",maxRounds:1,driver:"external",driverHandoff:!1,verificationGate:"auto",costCapUsd:0,yoloDefault:!1,onError:"fail",notify:"dashboard-only",yaml:"",authorHandle:"demo",forks:0,popularity:0,phases:[{id:c,name:"External Review",description:"Six lineages critique the supplied artifact independently.",kind:"review_only",gate:"auto",doer:{lineage:"claude",models:[]},reviewer:{require:2,crossLineage:!0,candidates:["codex","gemini","claude","opencode"],candidatesWithModels:p.map(e=>({lineage:e.lineage,models:[e.model]}))},artifact:{label:"Artifact",hint:"",maxBytes:1048576},inputs:{include:[],exclude:[]},iterate:{max:1,onMax:"fail"},blindSpots:[],execution:"parallel",builtin:!0}]},v=e=>({type:"phase_start",payload:{phaseIdx:0,phaseId:c,kind:"review_only",role:"reviewer",agent:e},ts:Date.now()}),g=(e,n,t)=>({type:"phase_progress",payload:{phaseId:c,round:1,role:"reviewer",agent:e,elapsedMs:t,output:n},ts:Date.now()}),f=e=>({type:"participant_done",payload:{phaseId:c,round:1,role:"reviewer",agent:e},ts:Date.now()}),w={"codex-cli-0":"## Reviewing src/util/divide.ts\n\nCurrent implementation:\n```ts\nexport function divide(a: number, b: number) {\n return a / b;\n}\n```\n\nChecking input handling first.\n\nSpotted: no zero-guard. `divide(x, 0)` silently returns `Infinity`. In a billing pipeline that math-chains downstream, that becomes a ledger row.\n\nNo JSDoc either — readers have to read the body to learn the type contract.\n\nVerdict drafting: two minors, leaning approve with notes.","gemini-cli-1":"## Review \xb7 `divide(a, b)`\n\nReading the helper. Checking the type contract first:\n```ts\n(a: number, b: number) => number\n```\n\nCoverage gaps surfacing: `NaN`, `Infinity`, zero divisor — none asserted.\n\nDrafting a four-case spec block to close the holes by construction:\n```ts\nexpect(divide(10, 2)).toBe(5);\nexpect(() => divide(10, 0)).toThrow();\nexpect(() => divide(NaN, 2)).toThrow();\nexpect(() => divide(Infinity, 2)).toThrow();\n```\n\nApproving with this spec block as a follow-up.","claude-code-2":"## Review: divide helper\n\nLoading + cross-referencing the two callers:\n```ts\n// /billing/invoice.ts:42 — currently produces silent Infinity\nconst unitPrice = divide(invoice.total, invoice.quantity);\n\n// /reports/avg.ts:18 — already wraps in try/catch\nconst average = divide(sum, count);\n```\n\n`/billing/invoice.ts:42` is the smoking gun — confirms the silent-Infinity bug class is real, not theoretical.\n\nRecommendation:\n1. Add a zero-guard returning a typed `DivideError`.\n2. Stage `divideMoney(cents, n)` for currency callers in a follow-up.\n\nApproving the helper rewrite with these two notes.","opencode-cli-3":'## Kimi review (via opencode)\n\nInspecting `divide(a, b)`. Quick pass — math is correct, the holes are at the boundary.\n\nSuggested patch:\n```ts\n/** Divide two finite numbers. Throws on zero divisor or non-finite input. */\nexport function divide(a: number, b: number): number {\n if (b === 0) throw new Error("divide: zero divisor");\n return a / b;\n}\n```\n\nApproving — both fixes are 60-second jobs.',"opencode-cli-4":'## DeepSeek review (via opencode)\n\nLoading `divide()` + the two callers + the existing spec.\n\nReproducing the failure modes locally:\n```ts\ndivide(100, 0); // Infinity (silent corruption)\ndivide("5", 2); // 2.5 (silent string coercion)\ndivide(0.3, 0.1); // 2.9999999999999996 (IEEE 754)\n```\n\nThree blockers, all reproducible in <30 lines:\n1. **No divide-by-zero guard** — required: `Number.isFinite` check + typed error.\n2. **No input validation** — TypeScript types are erased at runtime; `as any` slips through.\n3. **Floats for money** — IEEE 754 + currency = audit-trail nightmare. Need integer-cents.\n\nWill request changes.',"opencode-cli-5":"## Qwen review (via opencode)\n\nQuick read — public API surface only.\n\nNo defects in the body. The implementation matches its name.\n\nDocumentation gap noted — three lines of JSDoc would let editor tooling surface the contract:\n```ts\n/**\n * @param a - dividend (finite number)\n * @param b - divisor (finite, non-zero)\n * @returns the quotient a / b\n */\n```\n\nApproving — JSDoc is the only minor."},b=(()=>{let e=[];for(let[n,t]of p.entries())e.push({atMs:200+20*n,payload:v(t.agentName)});for(let n of p){let t=function(e){let n=Math.floor(.3*e.length),t=Math.floor(.65*e.length);return[e.slice(0,n),e.slice(0,t),e]}(w[n.agentName]),i=[.25,.55,.85].map(e=>Math.round(n.doneAtMs*e));for(let[o,r]of t.entries())e.push({atMs:i[o],payload:g(n.agentName,r,i[o])})}for(let n of p)e.push({atMs:n.doneAtMs,payload:f(n.agentName)});let n=Math.max(...p.map(e=>e.doneAtMs));return e.push({atMs:n+200,payload:{type:"phase_done",payload:{phaseId:c,phaseIdx:0,kind:"review_only"},ts:Date.now()}}),e.push({atMs:n+400,payload:{type:"chat_done",payload:{status:"completed",verdict:"request_changes"},ts:Date.now()}}),e})(),y={agentName:"claude-code-doer",lineage:"claude",model:"claude-opus-4-7",binaryUsed:"claude-code",doneAtMs:3700,durationMs:3500},k=[{agentName:"codex-cli-0",lineage:"codex",model:"gpt-5.5",binaryUsed:"codex",doneAtMs:2800,durationMs:2600},{agentName:"gemini-cli-1",lineage:"gemini",model:"gemini-3.1-pro-preview",binaryUsed:"gemini-cli",doneAtMs:3500,durationMs:3300},{agentName:"claude-code-2",lineage:"claude",model:"claude-sonnet-4-6",binaryUsed:"claude-code",doneAtMs:3100,durationMs:2900},{agentName:"opencode-cli-3",lineage:"opencode",model:"opencode-go/kimi-k2.6",binaryUsed:"opencode",doneAtMs:3900,durationMs:3700},{agentName:"opencode-cli-4",lineage:"opencode",model:"opencode-go/deepseek-v4-pro",binaryUsed:"opencode",doneAtMs:4500,durationMs:4300}],T=[y,...k],x=[{id:"plan",name:"Plan",kind:"plan",description:"Doer drafts the implementation approach; three reviewers critique.",streams:["## Plan: divide() helper rewrite\n\n**Goal:** production-safe wrapper over `a / b`.\n\n**Three deliverables:**\n1. Zero-guard returning a typed `DivideError`.\n2. Strict input validation (numbers only, finite, non-NaN).\n3. Switch currency callers to integer-cents (`divideMoney(cents, n)` follow-up PR).\n\n**Acceptance tests:**\n```ts\nexpect(divide(10, 2)).toBe(5);\nexpect(() => divide(10, 0)).toThrow(DivideError);\nexpect(() => divide(NaN, 2)).toThrow(DivideError);\nexpect(() => divide(Infinity, 2)).toThrow(DivideError);\n```\n\n**Risks:** API churn for two callers (`/billing/invoice.ts:42`, `/reports/avg.ts:18`). Mitigation: ship v2 alongside, deprecate v1 over one minor.\n\n**Rollback:** revert single commit; no schema/migration touched.","## Codex review \xb7 plan\n\nReading the plan…\n\nThree-piece breakdown looks right:\n- zero-guard ✓\n- input validation ✓\n- decimal precision ✓\n\nAcceptance tests match the spec contract.\n\n**Approve** — sound plan. One ask: add a `bigint` handling note. The current plan is implicitly Number-only, which is the right call, but worth saying so explicitly so the next reader does not assume `BigInt` support.","## Gemini review \xb7 plan\n\nCross-checking acceptance tests against the spec contract:\n```ts\ndivide(10, 2) // 5 ✓\ndivide(10, 0) // throw ✓\ndivide(NaN, 2) // throw ✓\ndivide(Inf, 2) // throw ✓\n```\n\nConcrete enough to drive TDD.\n\n**Approve** — explicit zero-guard is the right move. One follow-up: surface the deprecation timeline in the PR body so the two affected callers can plan their cutover.","## Claude (sonnet) review \xb7 plan\n\nReading the plan + skimming the existing call sites.\n\nThree-piece breakdown is right. The `divideMoney` carve-out is the right ergonomic — keep `divide` for general arithmetic, steer money paths to integer-cents.\n\n**Approve** — one ask: pin the deprecation timeline (one minor? one major?) so the two callers can plan.","## Kimi review (via opencode) \xb7 plan\n\nPlan looks tight. Three deliverables map cleanly to three commits if you want to split for review.\n\nAcceptance test set is the right shape — unit tests against the contract, not the implementation.\n\n**Approve** — pragmatic and shippable.","## DeepSeek review \xb7 plan\n\nPulling the existing `divide()` implementation for context:\n```ts\nexport function divide(a, b) { return a / b; }\n```\n\nCross-checking against the silent-Infinity bug class.\n\nNeed a non-finite-input row added to the acceptance tests:\n```ts\nexpect(() => divide(Number.POSITIVE_INFINITY, 2)).toThrow(DivideError);\nexpect(() => divide(2, Number.NEGATIVE_INFINITY)).toThrow(DivideError);\n```\n\nThe silent-Infinity bug is what triggered this rewrite, so the test set should explicitly cover both directions.\n\n**Approve with notes** — solid plan, just close that gap."],usage:[{inputTokens:6420,outputTokens:1840,costUsd:.0682},{inputTokens:5800,outputTokens:380,costUsd:.0094},{inputTokens:6020,outputTokens:540,costUsd:.0241},{inputTokens:6020,outputTokens:410,costUsd:.0086},{inputTokens:6240,outputTokens:320,costUsd:.0048},{inputTokens:6280,outputTokens:1140,costUsd:.0488}]},{id:"spec",name:"Spec",kind:"spec",description:"Doer derives the API contract; reviewers check alignment.",streams:['## Spec: `divide(a, b)`\n\n```ts\nexport class DivideError extends Error {\n constructor(public readonly reason: "zero" | "non-finite") {\n super(`divide: ${reason}`);\n this.name = "DivideError";\n }\n}\n\nexport function divide(a: number, b: number): number;\n```\n\n**Contract:**\n- `b === 0` → throws `DivideError("zero")`\n- `!Number.isFinite(a)` → throws `DivideError("non-finite")`\n- `!Number.isFinite(b)` → throws `DivideError("non-finite")`\n- otherwise → returns `a / b`\n\n**Order of checks:** non-finite first so `divide(NaN, 0)` reports the more specific failure.',"## Codex review \xb7 spec\n\nReading the type signature:\n```ts\n(a: number, b: number) => number\n```\n\nClean. Examples cover happy + zero + non-finite.\n\n**Approve** — suggest adding NaN explicitly to the example block:\n```ts\nexpect(() => divide(NaN, 5)).toThrow(/non-finite/);\n```\n\n`Number.isFinite(NaN)` returns false so it is covered, but enumerating it makes the intent explicit.",'## Gemini review \xb7 spec\n\nThe `reason` discriminant on the error class is the right ergonomic for callers that need to branch:\n```ts\ntry { return divide(a, b); }\ncatch (err) {\n if (err instanceof DivideError && err.reason === "zero") return 0;\n throw err;\n}\n```\n\nThat pattern beats string parsing on `err.message`.\n\n**Approve** — no structural concerns.','## Claude (sonnet) review \xb7 spec\n\n`DivideError` class is well-scoped. The `name = "DivideError"` assignment is the kind of detail that pays off in stack traces:\n```\nDivideError: divide: zero\n at /billing/invoice.ts:42\n```\n\n**Approve.**',"## Kimi review (via opencode) \xb7 spec\n\nType signature is unambiguous. The `reason` discriminant lets callers branch on failure type without string parsing.\n\nOrder-of-checks (non-finite first) is the right call.\n\n**Approve** — ready for implement.","## DeepSeek review \xb7 spec\n\nLoading spec + cross-checking against plan.\n\nExamples should include negatives and -Infinity:\n```ts\nexpect(divide(-10, 2)).toBe(-5);\nexpect(divide(10, -2)).toBe(-5);\nexpect(() => divide(Number.NEGATIVE_INFINITY, 2)).toThrow();\n```\n\nThe spec contract handles them correctly via `Number.isFinite`, but the example block sets the test surface and should be exhaustive.\n\n**Approve with notes.**"],usage:[{inputTokens:7240,outputTokens:1620,costUsd:.0731},{inputTokens:6500,outputTokens:320,costUsd:.0086},{inputTokens:6720,outputTokens:460,costUsd:.0218},{inputTokens:6720,outputTokens:380,costUsd:.0078},{inputTokens:6900,outputTokens:280,costUsd:.0042},{inputTokens:6980,outputTokens:980,costUsd:.0431}]},{id:"implement",name:"Implement",kind:"implement",description:"Doer writes the code blind to tests; reviewers find bugs.",streams:['## Implementation: `src/util/divide.ts`\n\n```ts\nexport class DivideError extends Error {\n constructor(public readonly reason: "zero" | "non-finite") {\n super(`divide: ${reason}`);\n this.name = "DivideError";\n }\n}\n\nexport function divide(a: number, b: number): number {\n if (!Number.isFinite(a) || !Number.isFinite(b)) {\n throw new DivideError("non-finite");\n }\n if (b === 0) {\n throw new DivideError("zero");\n }\n return a / b;\n}\n```\n\n**Notes:**\n- Non-finite check first so `divide(NaN, 0)` reports `"non-finite"`, not `"zero"`.\n- `name` set on `DivideError` so stack traces read `DivideError: divide: zero`.','## Codex review \xb7 diff\n\nPulling the diff. Reading each branch:\n\n✓ `Number.isFinite` — rejects NaN, \xb1Infinity, non-numbers via type system.\n✓ Zero-check after — order is correct.\n✓ `DivideError` extends `Error` with `name` set.\n\nOrder of checks decision is the correct call:\n```ts\ndivide(NaN, 0); // → "non-finite" (more specific failure first)\n```\n\n**Approve** — implementation is clean. Nothing to push back on.','## Gemini review \xb7 diff\n\nThe patch matches the spec line-for-line.\n\nThe `name` assignment on `DivideError`:\n```ts\nthis.name = "DivideError";\n```\n\nis the kind of detail that pays off the first time someone reads a stack trace — `DivideError: divide: zero` is actionable; `Error: divide: zero` looks like a generic throw and gets noise-suppressed.\n\n**Approve.**',"## Claude (sonnet) review \xb7 diff\n\nReads cleanly. Inline validation is fine for two args; would extract `isInvalid()` if this grew.\n\nThe `name` assignment on `DivideError` is the right detail — actionable stack traces over generic `Error: ...` lines.\n\n**Approve.**","## Kimi review (via opencode) \xb7 diff\n\nSmall, obvious, complete. 13 lines that do exactly what the spec said.\n\nReads in one breath:\n```ts\nif (!Number.isFinite(a) || !Number.isFinite(b)) throw …;\nif (b === 0) throw …;\nreturn a / b;\n```\n\n**Approve.**","## DeepSeek review \xb7 diff\n\nDiff loaded. Walking each branch.\n\nWant a `-0` test note before merge — JavaScript treats `-0 === 0` as `true`, so the existing zero-guard catches it, but the test pins the behaviour:\n```ts\nexpect(divide(10, -2)).toBe(-5);\nexpect(() => divide(10, -0)).toThrow(/zero/); // -0 === 0\n```\n\nThe `-0` case is the easy miss — without the test, an accidental refactor to `if (b !== 0)` would pass the existing suite.\n\n**Approve with notes.**"],usage:[{inputTokens:8120,outputTokens:1980,costUsd:.0892},{inputTokens:7300,outputTokens:280,costUsd:.0072},{inputTokens:7440,outputTokens:460,costUsd:.0214},{inputTokens:7440,outputTokens:320,costUsd:.0066},{inputTokens:7620,outputTokens:360,costUsd:.0054},{inputTokens:7720,outputTokens:1180,costUsd:.0508}]},{id:"verify",name:"Verify",kind:"verify",description:"Run the test suite; reviewers confirm coverage.",streams:['## Verify\n\n```\n$ pnpm test src/util/divide.test.ts\n\n ✓ divide > returns a / b for valid inputs\n ✓ divide > handles negative dividends\n ✓ divide > handles negative divisors\n ✓ divide > -0 is treated as 0 (throws "zero")\n ✓ divide > throws "zero" for b=0\n ✓ divide > throws "non-finite" for NaN\n ✓ divide > throws "non-finite" for \xb1Infinity\n ✓ divide > non-finite check precedes zero check\n ✓ DivideError > extends Error\n ✓ DivideError > exposes reason discriminant\n\n Tests: 12 passed (12)\n Coverage: 100% lines, 100% branches\n Lint: clean\n Types: clean\n Time: 1.42s\n```',"## Codex review \xb7 verify\n\nTest report loaded.\n\n✓ 12/12 pass, 0 fail, 0 skip\n✓ Coverage 100/100/100\n✓ Lint + types clean\n\nEvery spec case has a corresponding test. The `-0` row is what the implement-phase review asked for; merged correctly.\n\n**Approve** — nothing to add.","## Gemini review \xb7 verify\n\nReading the report:\n```\nTests: 12 passed (12)\nCoverage: 100% lines, 100% branches\n```\n\nNo flakes, no skips. The `Tests: 12 passed (12)` line is exactly what the merge gate looks for.\n\nCoverage 100/100/100 satisfies the production-utility bar.\n\n**Approve.**","## Claude (sonnet) review \xb7 verify\n\n12 tests for a 13-line function is honest coverage, not theatre. Each test asserts a real boundary condition.\n\nThe `non-finite check precedes zero check` assertion is doing real work — it pins the order-of-checks decision so a future refactor cannot silently swap them.\n\n**Approve.**","## Kimi review (via opencode) \xb7 verify\n\n✓ 12/12 pass\n✓ Coverage 100/100/100\n✓ No flakes, no skips\n\nShip it.\n\n**Approve.**","## DeepSeek review \xb7 verify\n\nPulling test report + spec for cross-check.\n\n12 tests for a 13-line function is honest coverage, not theatre. Each test asserts a real boundary:\n\n- happy path \xd7 4\n- zero divisor + -0\n- NaN + \xb1Infinity\n- order-of-checks invariant\n- DivideError shape + discriminant\n\nThe `non-finite check precedes zero check` assertion pins the order-of-checks decision so a future refactor cannot silently swap them.\n\n**Approve.**"],usage:[{inputTokens:8980,outputTokens:1340,costUsd:.0641},{inputTokens:8060,outputTokens:80,costUsd:.0021},{inputTokens:8230,outputTokens:360,costUsd:.0179},{inputTokens:8230,outputTokens:280,costUsd:.0058},{inputTokens:8410,outputTokens:220,costUsd:.0033},{inputTokens:8520,outputTokens:1060,costUsd:.0418}]},{id:"pr",name:"Ship",kind:"pr",description:"Doer drafts the PR; reviewers approve merge.",streams:["## PR draft\n\n**Title:** `feat(util): production-safe divide() with DivideError + 100% branch coverage`\n\n**Body:**\n```\nIntroduces a hardened `divide()` per the attached spec.\n\nWhat:\n- New DivideError class with typed reason discriminant\n- divide(a, b) rejects non-finite + zero divisor\n- 12 new tests; 100% line + branch coverage\n- Two existing callers updated\n\nWhy:\n- Silent Infinity from divide(x, 0) was a footgun in /billing\n- IEEE 754 currency math driving audit-trail drift; companion\n divideMoney(cents, n) lands in #4129\n\nRisk:\n- Two callers updated; no other call sites in repo\n- Rollback: revert this commit (no schema touched)\n- Backward-compat: divide() v1 stays exported for one minor\n\nCloses #4127\n```","## Codex review \xb7 PR\n\nTitle is clear and accurate. Body follows the What/Why/Risk structure the merge gate expects.\n\nTwo-caller scope is small enough to revert cleanly if needed.\n\nCloses link is correct.\n\n**Approve merge.**","## Gemini review \xb7 PR\n\nContext is well-summarised. Calling out `divideMoney` as the follow-up PR (#4129) sets the right expectation for reviewers.\n\n`Closes #4127` ties the work to the original bug report — the audit trail is intact.\n\n**Approve merge.**","## Claude (sonnet) review \xb7 PR\n\nNo surprises. Two-caller scope is bounded, rollback is a single revert, backward-compat note covers the cutover.\n\nOn-call will not be paged at 3am over this one.\n\n**Approve merge.**","## Kimi review (via opencode) \xb7 PR\n\nTitle + body land the message in three sentences. Verify report linked. Risk section names the actual callers.\n\nShip it.\n\n**Approve merge.**","## DeepSeek review \xb7 PR\n\nPR + verify report cross-loaded. Risk + rollback note is the kind of thing on-call appreciates.\n\nVerify report (12 tests, 100% branch) is linked. Closes link to #4127 ties the work to the original bug.\n\nBackward-compat note covers the cutover window:\n> divide() v1 stays exported for one minor before removal\n\nNothing held back.\n\n**Approve merge.**"],usage:[{inputTokens:9420,outputTokens:1480,costUsd:.0712},{inputTokens:8460,outputTokens:60,costUsd:.0017},{inputTokens:8640,outputTokens:320,costUsd:.0163},{inputTokens:8640,outputTokens:280,costUsd:.0058},{inputTokens:8820,outputTokens:240,costUsd:.0036},{inputTokens:8930,outputTokens:920,costUsd:.0388}]}];function N(e,n){return{participant:`${e}-${n.agentName}`,role:e,agentName:n.agentName,lineage:n.lineage,hasAnswer:!1,model:n.model,pending:!1}}function E(e,n,t,i){return{participant:`${e}-${n.agentName}`,role:e,agentName:n.agentName,lineage:n.lineage,hasAnswer:!0,answer:t,durationMs:n.durationMs,model:n.model,binaryUsed:n.binaryUsed,modelUsed:n.model,usage:i}}function M(){return[N("doer",y),...k.map(e=>N("reviewer",e))]}let D=[{round:1,participants:M()}],A={id:"demo-complex-6way",name:"Plan → Ship Workflow",description:"Five-phase workflow with five reviewers per phase.",category:"review",agreementThreshold:"majority",onThresholdMet:"auto-finalize",maxRounds:1,driver:"external",driverHandoff:!1,verificationGate:"auto",costCapUsd:0,yoloDefault:!1,onError:"fail",notify:"dashboard-only",yaml:"",authorHandle:"demo",forks:0,popularity:0,phases:x.map(e=>({id:e.id,name:e.name,description:e.description,kind:e.kind,gate:"auto",doer:{lineage:"claude",models:["claude-opus-4-7"]},reviewer:{require:2,crossLineage:!0,candidates:["codex","gemini","opencode"],candidatesWithModels:k.map(e=>({lineage:e.lineage,models:[e.model]}))},artifact:{label:"Artifact",hint:"",maxBytes:1048576},inputs:{include:[],exclude:[]},iterate:{max:1,onMax:"fail"},blindSpots:[],execution:"parallel",builtin:!0}))},I=(e,n,t)=>{let i=[],o=n.id;for(let[r,a]of T.entries())i.push({atMs:t+30*r,payload:{type:"phase_start",payload:{phaseIdx:e,phaseId:o,kind:n.kind,role:0===r?"doer":"reviewer",agent:a.agentName},ts:Date.now()}});for(let[e,r]of T.entries()){let a=0===e?"doer":"reviewer",s=function(e){let n=Math.floor(.3*e.length),t=Math.floor(.65*e.length);return[e.slice(0,n),e.slice(0,t),e]}(n.streams[e]),d=[.25,.55,.85].map(e=>Math.round(r.doneAtMs*e));for(let[e,n]of s.entries())i.push({atMs:t+d[e],payload:{type:"phase_progress",payload:{phaseId:o,round:1,role:a,agent:r.agentName,elapsedMs:d[e],output:n},ts:Date.now()}})}for(let[e,n]of T.entries()){let r=0===e?"doer":"reviewer";i.push({atMs:t+n.doneAtMs,payload:{type:"participant_done",payload:{phaseId:o,round:1,role:r,agent:n.agentName},ts:Date.now()}})}return i.push({atMs:t+5e3-100,payload:{type:"phase_done",payload:{phaseId:o,phaseIdx:e,kind:n.kind},ts:Date.now()}}),i},U=(()=>{let e=[];for(let[n,t]of x.entries())e.push(...I(n,t,200+5e3*n));return e.push({atMs:200+5e3*x.length+300,payload:{type:"chat_done",payload:{status:"merged",verdict:"approve",prUrl:"https://github.com/example/repo/pull/4128"},ts:Date.now()}}),e})(),S={"simple-6way":{template:m,initialRounds:h,work:"Review src/util/divide.ts for production-readiness — six lineages, one pass, blockers welcome.",buildDataSource:function(){let e={currentParticipants:p.map(u)};return{createEventSource:()=>d(b,(n,t)=>{!function(e,n,t){if("participant_done"!==n)return;let i=t.agent;if(!i)return;let o=p.find(e=>e.agentName===i);o&&(e.currentParticipants=e.currentParticipants.map(e=>e.agentName===i?{participant:`reviewer-${o.agentName}`,role:"reviewer",agentName:o.agentName,lineage:o.lineage,hasAnswer:!0,answer:o.answer,durationMs:o.durationMs,model:o.model,binaryUsed:o.binaryUsed,modelUsed:o.model,usage:o.usage}:e))}(e,n,t)}),fetchArtifacts:()=>({rounds:[{round:1,participants:e.currentParticipants}]})}}},"complex-6way":{template:A,initialRounds:D,work:"feat(util): production-safe divide() — Plan → Spec → Implement → Verify → Ship • closes #4127",buildDataSource:function(){let e={currentPhaseIdx:0,currentParticipants:M()};return{createEventSource:()=>d(U,(n,t)=>{!function(e,n,t){if("phase_start"===n){let n=t.phaseIdx;"number"==typeof n&&n!==e.currentPhaseIdx&&(e.currentPhaseIdx=n,e.currentParticipants=M());return}if("participant_done"===n){let n=t.agent;if(!n)return;let i=T.findIndex(e=>e.agentName===n);if(i<0)return;let o=T[i],r=x[e.currentPhaseIdx];if(!r)return;let a=E(0===i?"doer":"reviewer",o,r.streams[i],r.usage[i]);e.currentParticipants=e.currentParticipants.map(e=>e.agentName===n?a:e);return}if("chat_done"===n){let n=x[x.length-1];e.currentParticipants=T.map((e,t)=>E(0===t?"doer":"reviewer",e,n.streams[t],n.usage[t])),e.currentPhaseIdx=x.length-1}}(e,n,t)}),fetchArtifacts:()=>({rounds:[{round:1,participants:e.currentParticipants}]})}}}};function R({params:e}){let{scenario:n}=(0,o.use)(e),t=S[n];t||(0,r.notFound)();let d=(0,o.useMemo)(()=>`demo-${n}-${Math.random().toString(36).slice(2,8)}`,[n]),c=(0,o.useMemo)(()=>t.buildDataSource(),[t]);return(0,i.jsx)(a.G,{children:(0,i.jsx)("div",{className:"mx-auto max-w-[1700px] px-6 py-6",children:(0,i.jsx)(s.LiveRunReal,{chatId:d,initialStatus:"reviewing",initialRounds:t.initialRounds,template:t.template,templateId:t.template.id,work:t.work,demoDataSource:c})})})}},6255:(e,n,t)=>{Promise.resolve().then(t.bind(t,5249))}},e=>{e.O(0,[116,720,641,344,245,506,128,358],()=>e(e.s=6255)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[308],{4720:(e,s,n)=>{Promise.resolve().then(n.bind(n,821)),Promise.resolve().then(n.bind(n,1245)),Promise.resolve().then(n.bind(n,8344))}},e=>{e.O(0,[116,720,641,344,245,506,128,358],()=>e(e.s=4720)),_N_E=e.O()}]);
|