@sma1lboy/rove 0.9.278-next.14 → 0.9.278-next.15

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.
@@ -111,42 +111,42 @@ void main() {
111
111
  `)}),i===`gate`&&a&&(0,V.jsx)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:a.options.map(e=>(0,V.jsxs)(H,{disabled:d,title:e.detail,onClick:()=>void p(()=>wT(t,a.id,{option:e.key})),children:[`[ `,e.key===a.recommended?`★ `:``,e.label,` ]`]},e.key))}),i===`menu`&&r&&(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[Ev.map(e=>(0,V.jsxs)(H,{disabled:d,onClick:()=>void p(()=>CT(t,n,r,e.bytes(!1))),children:[`[ `,e.cap,` ]`]},e.id)),(0,V.jsx)(H,{onClick:e.onOpenTab,children:z(`inbox.openTab`)})]}),(i===`reply`||i===`gate`)&&(0,V.jsxs)(`form`,{className:`flex min-w-0 items-center gap-2`,onSubmit:e=>{e.preventDefault(),m()},children:[(0,V.jsx)(`input`,{className:`min-w-0 flex-1 rounded-sm border-hairline border-line bg-paper px-2 py-1.5 font-mono text-ink focus-visible:border-line-active focus-visible:outline-none touch:min-h-10 touch:text-display`,value:l,disabled:d,placeholder:z(`inbox.replyPlaceholder`),"aria-label":z(`inbox.replyPlaceholder`),autoComplete:`off`,enterKeyHint:`send`,onChange:e=>u(e.target.value)}),(0,V.jsx)(H,{type:`submit`,disabled:d||l.trim()===``,children:z(`inbox.send`)})]})]})}function kT({text:e}){return(0,V.jsx)(`span`,{className:`inline-flex flex-wrap gap-x-3 gap-y-0`,children:e.split(`·`).map(e=>e.trim()).filter(Boolean).map(e=>(0,V.jsx)(`span`,{children:e},e))})}var AT={accent:`text-accent`,muted:`text-subtle`,attention:`text-error`,warning:`text-warning`,info:`text-info`,success:`text-success`,added:`text-diff-added`,removed:`text-diff-removed`},jT={accent:`text-accent`,muted:`text-subtle`,attention:`text-error`,warning:`text-warning`,success:`text-success`,info:`text-accent`,ink:`text-ink`},MT=6;function NT(e,t){return e?`${e.repo.split(`/`).filter(Boolean).pop()??e.repo} › ${e.label}`:t}function PT({model:e}){B();let t=v(e.tasks),n=v(e.visits),r=v(e.tabs),[i,a]=(0,g.useState)(0),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(Date.now());(0,g.useEffect)(()=>{let e=window.setInterval(()=>l(Date.now()),3e4);return()=>window.clearInterval(e)},[]);let u=new Map((t?.tasks??[]).map(e=>[e.id,e])),d=(e,t)=>e&&t&&r[e]?.find(e=>e.id===t)?.title||``,f=Ro(t?.attention??[],t?.tasks.map(e=>e.id)??[]).map((e,t)=>{let n=e.taskId?u.get(e.taskId):void 0;return{key:`a${t}:${e.taskId}:${e.tabId}`,section:`attention`,taskId:e.taskId,tabId:e.tabId,identity:NT(n,e.label??e.taskId??``),subtitle:d(e.taskId,e.tabId)||n?.branch||``,at:e.at,attention:e}}),p=new Set(f.map(e=>`${e.taskId}:${e.tabId}`)),m=n.filter(e=>u.has(e.taskId)&&!p.has(`${e.taskId}:${e.tabId}`)).slice(0,MT).map(e=>({key:`r:${e.taskId}:${e.tabId}`,section:`recent`,taskId:e.taskId,tabId:e.tabId,identity:NT(u.get(e.taskId),e.taskId),subtitle:d(e.taskId,e.tabId)||u.get(e.taskId)?.branch||``,at:e.at})),h=[...f,...m],_=h[Math.min(i,h.length-1)],y=async t=>{if(t.attention&&Io(t.attention.state))return Mo(e,t.attention);!t.attention?.taskId||t.attention.gateId||await e.client.request(`attention.dismiss`,{taskId:t.attention.taskId,...t.tabId?{tabId:t.tabId}:{}}).catch(e=>G(String(e),`error`))},b=t=>{if(t.attention&&Io(t.attention.state))return No(e,t.attention);t.attention&&y(t),t.taskId&&u.has(t.taskId)&&(e.select(t.taskId,t.tabId),Sn())};(0,g.useEffect)(()=>{let e=e=>{if(!(e.target instanceof HTMLElement&&e.target.closest(`input, textarea`))){if(e.key===`ArrowDown`||e.key===`j`)a(e=>Math.min(h.length-1,e+1));else if(e.key===`ArrowUp`||e.key===`k`)a(e=>Math.max(0,e-1));else if(e.key===`Enter`&&_)b(_);else if(e.key===`d`&&_?.attention)y(_);else return;e.preventDefault()}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)});let x=n=>{let r=n.attention?Po(n.attention.state):null,i=n===_,l=n.attention,d=n.taskId?u.get(n.taskId):void 0,f=l?.gateId?t?.gates?.find(e=>e.id===l.gateId&&e.status===`open`):void 0,p=n.tabId??f?.tabId??null,m=!!l&&!!d&&!d.machine&&!Io(l.state)&&(!l.gateId||!!f)&&(!!p||!!f),g=l?.state===`permission_needed`||!!p&&d?.tabStatus?.[p]?.kind===`needs-input`,v=f?`gate`:l?.state===`dead`?`readonly`:g?`menu`:`reply`,y=`${n.taskId}:${n.tabId}:${l?.gateId??``}`,x=m&&o===y;return(0,V.jsxs)(`li`,{children:[(0,V.jsxs)(`div`,{className:Zn,children:[(0,V.jsxs)(`button`,{type:`button`,className:`${tr({selected:i,stack:!0})} ${Qn}`,onMouseEnter:()=>a(h.indexOf(n)),onClick:()=>b(n),children:[(0,V.jsxs)(`span`,{className:Yn,children:[(0,V.jsx)(`span`,{className:nr,children:n.identity}),r&&(0,V.jsxs)(`span`,{className:`flex-none font-mono text-meta font-normal normal-nums ${jT[r.tone]}`,children:[r.glyph,` `,z(r.stateKey)]}),(0,V.jsx)(`span`,{className:Xn,children:Fo(c-n.at)})]}),n.subtitle&&(0,V.jsx)(`span`,{className:`truncate font-mono text-meta font-normal normal-nums text-muted`,children:n.subtitle})]}),m&&(0,V.jsx)(H,{className:`flex-none whitespace-nowrap pr-2 font-mono text-meta`,"aria-expanded":x,onClick:()=>{a(h.indexOf(n)),s(x?null:y)},children:z(x?`inbox.hide`:`inbox.reply`)})]}),x&&n.taskId&&(0,V.jsx)(OT,{model:e,taskId:n.taskId,tabId:p,mode:v,gate:f,onOpenTab:()=>b(n)})]},n.key)};return(0,V.jsx)(sr,{title:z(`inbox.title`),wide:!0,children:(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsx)(`p`,{className:`${U} text-muted ${Kn} touch:hidden!`,children:(0,V.jsx)(kT,{text:z(`inbox.hints`)})}),(0,V.jsx)(`h2`,{className:`${U} text-muted ${qn}`,children:z(`inbox.attention`)}),f.length===0?(0,V.jsx)(`p`,{className:`mono text-muted`,children:z(`inbox.empty`)}):(0,V.jsx)(`ul`,{className:Jn,children:f.map(x)}),m.length>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted mt-1`,children:z(`inbox.recent`)}),(0,V.jsx)(`ul`,{className:`m-0 flex list-none flex-col gap-0.5 p-0`,children:m.map(x)})]})]})})}var FT=[`project`,`state`],IT=`rove.railGroup`,LT=_(FT.find(e=>e===localStorage.getItem(IT))??`project`);function RT(e){LT.set(e),localStorage.setItem(IT,e)}var zT=`rove.activeSortMode`;function BT(){let e=localStorage.getItem(zT);return nw.find(t=>t===e)??`recent`}var VT=_(BT());function HT(e){VT.set(e),localStorage.setItem(zT,e)}function UT(){HT(nw[(nw.indexOf(VT.get())+1)%nw.length]??`default`)}var WT=_(!1),GT=_(null);function KT(e){e&&(VT.get()!=="default"||LT.get()===`state`)&&(HT(`default`),RT(`project`),G(q(`tasks`,`sort.reorderSwitched`))),e||GT.set(null),WT.set(e)}async function qT(e,t,n){let r=n<0?`up`:`down`;try{await e.client.request(`task.move`,{taskId:t.task.id,direction:r})}catch(e){G(q(`tasks`,`toast.moveFailed`,{error:e instanceof Error?e.message:String(e)}),`error`)}}async function JT(e,t,n){let r=n<0?`up`:`down`;try{for(let i=0;i<Math.abs(n);i++)await e.client.request(`task.move`,{taskId:t,direction:r})}catch(e){G(q(`tasks`,`toast.moveFailed`,{error:e instanceof Error?e.message:String(e)}),`error`)}}async function YT(e,t,n){if(n.pin!==void 0)try{await e.client.request(`task.pin`,{taskId:t,pinned:n.pin})}catch(e){G(q(`tasks`,`toast.moveFailed`,{error:e instanceof Error?e.message:String(e)}),`error`);return}await JT(e,t,n.steps)}var XT=`-my-0.75 -mr-0.5 ml-0 flex flex-none self-stretch`,ZT=`before:absolute before:top-0 before:left-1 before:content-[''] before:[border-left:var(--hairline)_solid_var(--line-active)]`,QT={blank:``,pipe:`${ZT} before:bottom-0`,tee:`${ZT} before:bottom-0`,elbow:`${ZT} before:right-0 before:bottom-1/2 before:rounded-bl-[6px] before:[border-bottom:var(--hairline)_solid_var(--line-active)]`},$T=e=>`relative w-3 ${QT[e]}`,eE=`-mx-1 inline-flex min-w-6 cursor-pointer items-center justify-center gap-1 self-stretch rounded-xs px-2 font-mono hover:bg-hover`,tE=`inline-flex items-center gap-1`,nE=e=>`fixed z-35 flex max-h-[min(380px,60vh)] w-85 max-w-[calc(100vw-24px)] animate-pr-list-in flex-col overflow-y-auto overscroll-contain rounded-md border-hairline border-line bg-surface p-1.5 shadow-popover transition-[opacity,translate] duration-120 ease-in motion-reduce:animate-none motion-reduce:transition-none ${e?`-translate-x-1 opacity-0`:``}`,rE=`pointer-events-none fixed z-35 max-w-80 -translate-y-1/2 animate-row-tip-in rounded-sm border-hairline border-line bg-inset px-2.5 py-1.5 text-meta leading-[1.4] whitespace-normal wrap-anywhere text-ink shadow-popover motion-reduce:animate-none`,iE=`inline-flex flex-none items-center text-subtle`,aE=`group/rail rail @container row-1 flex min-h-0 flex-col focus:outline-none ${He}`,oE=`flex min-w-0 items-center gap-2.5 overflow-hidden px-3.5 pt-3.5 pb-2.5 whitespace-nowrap`,sE=`flex gap-1 px-3.5 pb-2 text-meta`,cE=`flex flex-col gap-0.5 px-3.5 pb-2 font-mono text-meta`,lE=`flex items-center justify-between gap-2.5 text-muted`,uE=`flex flex-wrap items-center gap-x-1.5 gap-y-0.5`,dE=e=>`${e?`text-accent`:`text-ink`} hover:underline`,fE=`min-w-0 flex-1 border-none bg-transparent p-0 text-ink [font:inherit] outline-none placeholder:text-subtle`,pE=e=>`flex-1 overflow-y-auto px-1.5 pt-1 pb-3 scrollbar-none ${e?`[&>[data-row]]:[transition:transform_150ms_ease-out] motion-reduce:[&>[data-row]]:transition-none`:``}`,mE=`group-focus-within/rail:[box-shadow:inset_0_0_0_1px_var(--focus)]`,hE=e=>`group/head mx-2 mt-1.5 mb-1 flex items-center gap-1 font-mono text-meta font-semibold normal-nums text-subtle not-first:mt-4.5 ${e.moving||e.dragging?`bg-accent-soft`:``} ${e.moving?`after:font-mono after:text-meta after:font-medium after:normal-nums after:text-accent after:content-['move']`:``}`,gE=`touch:relative touch:after:absolute touch:after:-inset-x-1.5 touch:after:-inset-y-3 touch:after:content-['']`,_E=`group/toggle -ml-1 inline-flex min-w-0 cursor-pointer items-center gap-1 rounded-xs border-none bg-transparent px-1 py-0.5 text-inherit [font:inherit] hover:text-ink ${gE}`,vE=e=>e?``:`opacity-0 group-hover/head:opacity-100 group-focus-visible/toggle:opacity-100 touch:opacity-100`,yE=`-mr-[4.5px] ml-auto size-5 cursor-pointer rounded-xs border-none bg-transparent text-muted opacity-0 [font:400_var(--fs-display)/1_var(--sans)] group-hover/head:opacity-100 hover:bg-hover hover:text-ink focus-visible:opacity-100 touch:opacity-100 ${gE}`,bE=1e4;function xE(e,t){let n=e.hostLabel||e.alias;if(e.state===`online`)return e.version?`${n} · v${e.version}`:n;let r=t[e.state];return e.state===`mismatch`?e.version?`${n} · ⚠ v${e.version} (${r})`:`${n} · ⚠ ${r}`:`${n} · ${r}`}function SE(e,t,n,r=e){let i=t?.hostLabel&&t.hostLabel!==e?` (${t.hostLabel})`:``,a=n.runsOn.replace(`{host}`,t?`${e}${i}`:r);return!t||t.state===`online`?a:`${a}${xE(t,n).slice((t.hostLabel||t.alias).length)}`}function CE(e,t,n){if(e.kind!==`task`||e.machine===void 0)return null;let r=e.machine;return SE(r,t.find(e=>e.alias===r),n,e.task.machine?.label)}function wE({label:e}){return(0,V.jsx)(`span`,{className:iE,title:e,role:`img`,"aria-label":e,children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,width:`12`,height:`12`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M4.5 13a3 3 0 0 1-.4-5.97A4.5 4.5 0 0 1 12.8 6.6 3.2 3.2 0 0 1 12.3 13Z`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinejoin:`round`})})})}function TE({host:e,onMachines:t}){return B(),(0,V.jsxs)(`div`,{className:Kt,children:[(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`machine.filesElsewhere`,{host:e})}),(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`machine.filesHint`,{host:e})}),(0,V.jsx)(`div`,{children:(0,V.jsx)(H,{hit:`tight`,onClick:t,children:z(`machines.open`)})})]})}function EE(e){let t=v(e.client.conn),n=v(e.remote),[r,i]=(0,g.useState)(()=>Bs(e,`machines.list`)?.machines??[]),a=[...new Set(n.map(e=>`${e.machine?.id}:${e.machine?.stale??!1}`))].join();return(0,g.useEffect)(()=>{if(t.state!==`open`)return;let n=!0,r=()=>Hs(e,`machines.list`).then(e=>n&&i(e.machines),()=>{});r();let a=window.setInterval(r,bE);return()=>{n=!1,window.clearInterval(a)}},[e.client,t.state,a]),r}var DE=`flex min-h-0 min-w-0 flex-1 flex-col p-4 font-mono text-meta leading-[1.5] font-normal not-italic normal-nums`,OE=`flex flex-1 flex-col items-center justify-center gap-1.5 text-center`,kE=`mx-auto flex w-full max-w-[104ch] flex-col gap-2`,AE=`flex flex-col gap-2 rounded-md border-hairline border-line bg-surface px-3 py-2.5 focus-within:border-line-active`,jE=`flex flex-wrap items-center justify-end gap-1.5`,ME=`max-h-[40vh] min-h-[4.5em] w-full bg-transparent text-ink [border:0] [outline:0]`,NE=`flex flex-wrap items-center gap-1.5 px-1`,PE=`flex-1`,FE=`size-3.25 flex-none fill-none stroke-current [stroke-linecap:round] [stroke-linejoin:round] [stroke-width:1.3]`,IE=(e=!1)=>`inline-flex max-w-[28ch] items-center gap-1.5 overflow-hidden rounded-full border-hairline px-2.5 py-0.75 text-ellipsis whitespace-nowrap touch:py-1.75 [&:hover]:bg-hover [&:hover]:text-ink aria-expanded:bg-hover aria-expanded:text-ink ${e?`border-[color-mix(in_srgb,var(--accent)_45%,transparent)] bg-accent-soft text-accent`:`border-line text-muted`}`,LE=`disabled:cursor-default disabled:opacity-60`,RE=`group/chip relative inline-flex`,zE=`flex min-h-0 flex-col gap-1 overflow-y-auto p-1.5 [outline:0]`,BE=`flex min-h-0 flex-col overflow-y-auto`,VE=`sticky top-0 z-1 m-0 bg-surface px-1.5 pt-1.5 pb-0.5 text-left`,HE=e=>`flex w-full items-baseline gap-2 rounded-[calc(var(--radius)-6px)] px-2 py-1 text-left touch:py-2.5 disabled:cursor-default disabled:opacity-50 ${e.dim?`text-subtle`:`text-ink`} ${e.cursor?`bg-hover`:``}`,UE=`flex-[0_0_1.5ch] text-accent`,WE=`ml-auto pl-3 inline-flex items-center gap-1`,GE=`flex-none whitespace-nowrap`,KE=`flex flex-col gap-0.5 px-1.5 py-0.5`,qE=`min-w-[36ch]`,JE=`flex items-center gap-1.5 p-1.5`;function YE(){return(0,V.jsx)(`svg`,{className:FE,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M2 4.5a1 1 0 0 1 1-1h3l1.5 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z`})})}function XE(){return(0,V.jsxs)(`svg`,{className:FE,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:[(0,V.jsx)(`circle`,{cx:`4.5`,cy:`3.5`,r:`1.5`}),(0,V.jsx)(`circle`,{cx:`4.5`,cy:`12.5`,r:`1.5`}),(0,V.jsx)(`circle`,{cx:`11.5`,cy:`5`,r:`1.5`}),(0,V.jsx)(`path`,{d:`M4.5 5v6M11.5 6.5c0 3-7 2-7 4.5`})]})}function ZE(){return(0,V.jsx)(`svg`,{className:FE,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M10.5 4.5 5.8 9.2a1.4 1.4 0 0 0 2 2l5-5a2.8 2.8 0 0 0-4-4l-5.2 5.2a4.2 4.2 0 0 0 6 6L13 9`})})}function QE(){return(0,V.jsxs)(`svg`,{className:FE,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:[(0,V.jsx)(`circle`,{cx:`8`,cy:`8`,r:`5.75`}),(0,V.jsx)(`path`,{d:`M8 4.75V8l2.25 1.5`})]})}function $E(e){let[t,n]=(0,g.useState)(!1),r=(0,g.useRef)(null),i=(0,g.useRef)(null),a=(0,g.useRef)(null);(0,g.useLayoutEffect)(()=>{let e=a.current;if(!t||!e)return;let n=e.getBoundingClientRect(),r=n.right>window.innerWidth-8?window.innerWidth-8-n.right:n.left<8?8-n.left:0;r&&(e.style.transform=`translateX(${Math.round(r)}px)`)},[t]);let o=()=>{n(!1),i.current?.focus()};return(0,g.useEffect)(()=>{if(!t)return;let e=e=>{r.current?.contains(e.target)||n(!1)};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[t]),(0,V.jsxs)(`span`,{ref:r,className:RE,onKeyDown:e=>{e.key!==`Escape`||!t||(e.preventDefault(),e.stopPropagation(),o())},children:[(0,V.jsx)(`button`,{ref:i,type:`button`,className:IE(),"data-field":e.field,title:e.title,"aria-haspopup":`menu`,"aria-expanded":t,disabled:e.disabled,onClick:()=>n(e=>!e),children:e.label}),t&&(0,V.jsx)(`div`,{ref:a,className:`absolute bottom-[calc(100%+6px)] left-0 z-20 flex max-h-[min(50vh,420px)] max-w-[min(52ch,calc(100vw-16px))] min-w-[min(34ch,calc(100vw-16px))] flex-col overflow-hidden rounded-md border-hairline border-line-active bg-surface shadow-popover group-last-of-type/chip:right-0 group-last-of-type/chip:left-auto`,children:e.children(o)})]})}function eD(e){let[t,n]=(0,g.useState)(0),r=[...e.extra?[e.extra]:[],...e.rows,...e.more??[]],i=Math.min(t,Math.max(0,r.length-1)),a=(0,g.useRef)(null);return(0,g.useEffect)(()=>{a.current?.scrollIntoView({block:`nearest`})},[i,e.rows]),(0,V.jsxs)(`div`,{className:zE,children:[(0,V.jsx)(`input`,{className:tn,autoFocus:!0,spellCheck:!1,placeholder:e.placeholder,value:e.query,onChange:t=>{n(0),e.onQuery(t.target.value)},onKeyDown:t=>{if(!t.nativeEvent.isComposing){if(t.key===`ArrowDown`||t.key===`ArrowUp`)t.preventDefault(),n(Math.max(0,Math.min(r.length-1,i+(t.key===`ArrowDown`?1:-1))));else if(t.key===`Enter`){t.preventDefault();let n=r[i];n&&e.onPick(n.key)}}}}),(0,V.jsxs)(`div`,{className:BE,children:[r.length===0&&(0,V.jsx)(`p`,{className:`mx-2 my-1 text-muted`,children:e.empty}),r.map((t,r)=>(0,V.jsxs)(g.Fragment,{children:[e.moreLabel&&t===e.more?.[0]&&(0,V.jsx)(`p`,{className:`mx-2 mt-2 mb-0.5 text-muted`,children:e.moreLabel}),(0,V.jsxs)(`button`,{type:`button`,"aria-current":t.checked===!0,ref:r===i?a:void 0,tabIndex:-1,title:t.title,className:HE({cursor:r===i}),onMouseMove:()=>n(r),onClick:()=>e.onPick(t.key),children:[(0,V.jsx)(`span`,{className:UE,children:t.checked?`✓`:``}),(0,V.jsx)(`span`,{className:GE,children:t.text}),t.dim&&(0,V.jsx)(`span`,{className:`ml-auto pl-3 text-muted ${t.title?`min-w-0 overflow-hidden text-ellipsis whitespace-nowrap`:``}`,children:t.dim})]})]},t.key))]})]})}function tD(e){return(0,V.jsxs)(`button`,{type:`button`,role:e.multi?`menuitemcheckbox`:`menuitemradio`,"aria-checked":e.checked,tabIndex:-1,disabled:e.option.disabled,className:HE({cursor:e.cursor,dim:e.option.dim}),onMouseMove:e.onHover,onClick:e.onPick,children:[(0,V.jsx)(`span`,{className:UE,children:e.checked?`✓`:``}),(0,V.jsx)(`span`,{children:e.option.label}),!e.checked&&e.digit!==void 0&&!e.option.disabled&&(0,V.jsx)(`span`,{className:`ml-auto pl-3 text-muted`,children:e.digit})]})}function nD(e){let[t,n]=(0,g.useState)(()=>Math.max(0,e.options.findIndex(t=>t.id===e.value))),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>r.current?.focus(),[]),(0,V.jsxs)(`div`,{ref:r,role:`menu`,tabIndex:-1,className:zE,onKeyDown:r=>{if(!(r.ctrlKey||r.metaKey||r.altKey||r.nativeEvent.isComposing)){if(r.key===`ArrowDown`||r.key===`ArrowUp`)r.preventDefault(),n(Math.max(0,Math.min(e.options.length-1,t+(r.key===`ArrowDown`?1:-1))));else if(r.key===`Enter`){r.preventDefault();let n=e.options[t];n&&!n.disabled&&e.onPick(n.id)}else if(e.onBack&&(r.key===`Escape`||r.key===`ArrowLeft`))r.preventDefault(),r.stopPropagation(),e.onBack();else{let t=e.digits?js(r.key,e.options.length):null,n=t===null?void 0:e.options[t];if(!n||n.disabled)return;r.preventDefault(),e.onPick(n.id)}}},children:[e.onBack?(0,V.jsxs)(`button`,{type:`button`,className:`${VE} ${U} text-muted`,tabIndex:-1,onClick:e.onBack,children:[`‹ `,e.heading]}):(0,V.jsx)(`p`,{className:`${VE} ${U} text-muted`,children:e.heading}),e.options.map((r,i)=>(0,V.jsx)(tD,{option:r,checked:e.values?e.values.includes(r.id):r.id===e.value,multi:e.values!==void 0,cursor:i===t,digit:e.digits&&i<9?i+1:void 0,onHover:()=>n(i),onPick:()=>e.onPick(r.id)},r.id)),e.footer]})}function rD(e){let[t,n]=(0,g.useState)(`root`),r=e.models.length+ +(e.efforts.length>0),[i,a]=(0,g.useState)(()=>Math.max(0,e.models.findIndex(t=>t.id===e.model))),o=(0,g.useRef)(null);if((0,g.useEffect)(()=>{t===`root`&&o.current?.focus()},[t]),t===`effort`)return(0,V.jsx)(nD,{heading:z(`newSession.effort`),options:e.efforts,value:e.effort,onBack:()=>n(`root`),onPick:t=>{e.onEffort(t),e.close()}});let s=t=>{e.onModel(t),e.close()},c=e.efforts.find(t=>t.id===e.effort)?.label??``;return(0,V.jsxs)(`div`,{ref:o,role:`menu`,tabIndex:-1,className:zE,onKeyDown:t=>{if(!(t.ctrlKey||t.metaKey||t.altKey||t.nativeEvent.isComposing)){if(t.key===`ArrowDown`||t.key===`ArrowUp`)t.preventDefault(),a(Math.max(0,Math.min(r-1,i+(t.key===`ArrowDown`?1:-1))));else if(t.key===`Enter`||t.key===`ArrowRight`&&i>=e.models.length){t.preventDefault();let r=e.models[i];r?s(r.id):e.efforts.length>0&&n(`effort`)}else{let n=js(t.key,e.models.length),r=n===null?void 0:e.models[n];if(!r)return;t.preventDefault(),s(r.id)}}},children:[(0,V.jsx)(`p`,{className:`${VE} ${U} text-muted`,children:z(`newSession.modelHeading`)}),e.models.map((t,n)=>(0,V.jsx)(tD,{option:t,checked:t.id===e.model,multi:!1,cursor:n===i,digit:n<9?n+1:void 0,onHover:()=>a(n),onPick:()=>s(t.id)},t.id)),e.efforts.length>0&&(0,V.jsxs)(`button`,{type:`button`,role:`menuitem`,tabIndex:-1,className:`${HE({cursor:i===e.models.length})} mt-1 border-t-hairline border-t-line`,onMouseMove:()=>a(e.models.length),onClick:()=>n(`effort`),children:[(0,V.jsx)(`span`,{className:`flex-[0_0_1.5ch] text-accent`}),(0,V.jsx)(`span`,{children:z(`newSession.effort`)}),(0,V.jsxs)(`span`,{className:`${WE} text-muted`,children:[c,(0,V.jsx)(Fa,{right:!0})]})]})]})}function iD(e){return(0,V.jsxs)(`div`,{className:`${zE} ${qE}`,children:[(0,V.jsx)(`p`,{className:`${VE} ${U} text-muted`,children:z(`newSession.branches`)}),(0,V.jsxs)(`label`,{className:KE,children:[(0,V.jsx)(`span`,{className:`text-muted`,children:z(`newSession.branchName`)}),(0,V.jsx)(`input`,{className:tn,autoFocus:!0,spellCheck:!1,placeholder:z(`newSession.branchNamePlaceholder`),value:e.branch,onChange:t=>e.onBranch(t.target.value)})]}),e.repos.map(t=>(0,V.jsxs)(`label`,{className:KE,children:[(0,V.jsxs)(`span`,{children:[t.name,t.primary&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,z(`newSession.primary`)]})]}),(0,V.jsx)(`select`,{className:tn,"aria-label":t.name,value:t.base||t.current,onChange:n=>e.onBase(t.path,n.target.value),children:(t.branches.includes(t.base||t.current)?t.branches:[t.base||t.current,...t.branches]).filter(e=>e!==``).map(e=>(0,V.jsx)(`option`,{value:e,children:e},e))})]},t.path))]})}function aD(e){return e.id.startsWith(`root:`)?e.primary??e.checkouts[0]??e.id:e.id}function oD(e,t){if(!e)return null;let n=t.find(t=>t.id===e||t.checkouts.includes(e));return n?{ref:aD(n),clone:!1}:e.startsWith(`/`)?{ref:e,clone:!1}:null}function sD(e,t,n){let r=t.toLowerCase();return n?e.some(e=>e.toLowerCase()===`github.com/${r}`):e.some(e=>is(e).base.toLowerCase()===(r.split(`/`)[1]??``))}function cD(e){let t=e.begin?``:rs(e.prompt);return{repo:e.pick.ref,machine:e.machine,...e.pick.clone?{clone:!0}:{},...e.baseRef?{baseBranch:e.baseRef}:{},...e.begin&&e.prompt?{prompt:e.prompt}:{},...t?{title:t}:{},...e.engine?{engine:e.engine}:{}}}var lD={offline:`newSession.remoteOffline`,outdated:`newSession.remoteOutdated`},uD=(e,t)=>Hs(e,`machines.repos`,{machine:t});function dD(e,t){let n=t.filter(e=>e.state===`online`).map(e=>e.alias).join(`
112
112
  `);(0,g.useEffect)(()=>{for(let t of n?n.split(`
113
113
  `):[])uD(e,t).catch(()=>{})},[e,n])}function fD(e,t){B();let[n,r]=(0,g.useState)(null);if((0,g.useEffect)(()=>{if(!t)return;let n=!1;return uD(e,t).then(e=>!n&&r({machine:t,reply:e,failed:``})).catch(e=>!n&&r({machine:t,reply:null,failed:String(e)})),()=>{n=!0}},[e,t]),!t)return{repos:[],loaded:!0,problem:``};let i=n?.machine===t?n:void 0,a=Bs(e,`machines.repos`,{machine:t});if(!i&&!a)return{repos:[],loaded:!1,problem:``};let o=i?i.reply:a;if(!o)return{repos:[],loaded:!0,problem:z(`newSession.remoteFailed`,{machine:t,message:i?.failed??``})};let s=o.reason?lD[o.reason]:void 0,c=o.reason?s?z(s,{machine:t}):z(`newSession.remoteFailed`,{machine:t,message:o.message??o.reason}):``;return{repos:o.repos,loaded:!0,problem:c}}function pD(e,t){return t.problem?t.problem:t.loaded?z(`newSession.remoteNone`,{machine:e}):z(`newSession.remoteLoading`,{machine:e})}function mD(){return(0,V.jsxs)(`svg`,{className:FE,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:[(0,V.jsx)(`rect`,{x:`2`,y:`3`,width:`12`,height:`8`,rx:`1`}),(0,V.jsx)(`path`,{d:`M5.5 13.5h5M8 11v2.5`})]})}function hD(e){let t=(B()===`zh`?Ar:kr).machine,n=e.machines.find(t=>t.alias===e.value),r=e.value?n?.hostLabel||e.value:z(`newSession.thisMachine`);return(0,V.jsx)($E,{field:`machine`,title:z(`newSession.machine`),label:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(mD,{}),r]}),children:n=>(0,V.jsx)(nD,{heading:z(`newSession.machine`),options:[{id:``,label:z(`newSession.thisMachine`)},...e.machines.map(e=>({id:e.alias,label:xE(e,t),disabled:e.state!==`online`}))],value:e.value,digits:!0,onPick:t=>{e.onPick(t),n()}})})}function gD(e){let[t,n]=(0,g.useState)(``),r=t.trim();return(0,V.jsx)($E,{field:`branch`,title:z(`newSession.branch`),label:e.value||z(`newSession.branch`),children:i=>(0,V.jsx)(eD,{placeholder:z(`newSession.branchTypeRef`),empty:``,rows:[{key:``,text:z(`newSession.branchRemoteDefault`),checked:e.value===``}],query:t,onQuery:n,extra:r?{key:r,text:r,checked:e.value===r}:null,onPick:t=>{e.onPick(t),n(``),i()}})})}async function _D(e,t){return(await e.client.request(`task.spawn`,cD(t))).taskIds[0]}function vD(e){return e instanceof u_&&e.code===`CLONE_FAILED`?q(`newTask`,`error.cloneFailed`,{error:e.message}):e instanceof Error?e.message:String(e)}function yD(e){let[t,n]=(0,g.useState)(``);if(e.ungrouped)return null;if(e.remote)return e.remotePick&&(0,V.jsx)(gD,{value:e.remoteBase,onPick:e.onRemoteBase});let{repos:r,bases:i,inPlace:a}=e,o=r[0]??``,s=e.probes[o]??null,c=i[o]||s?.current||``,l=as(s?.branches??[],t).map(e=>({key:e,text:e,checked:e===(i[o]||s?.current)})),u=r.map(t=>({path:t,name:is(t).base,primary:t===o,branches:e.probes[t]?.branches??[],current:e.probes[t]?.current??``,base:i[t]??``}));return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`button`,{type:`button`,className:`${IE(!a)} ${LE}`,"aria-pressed":!a,disabled:r.length>1,title:r.length>1?z(`newSession.worktreeMulti`):z(a?`newSession.worktreeOff`:`newSession.worktreeOn`),onClick:e.onToggleWorktree,children:[(0,V.jsx)(XE,{}),z(`newSession.worktree`)]}),r.length>1?(0,V.jsx)($E,{field:`branch`,title:z(`newSession.branches`),label:z(`newSession.branches`),children:()=>(0,V.jsx)(iD,{repos:u,branch:e.branchName,onBranch:e.onBranchName,onBase:e.onBase})}):!a&&s?.ok&&c&&(0,V.jsx)($E,{field:`branch`,title:z(`newSession.branch`),label:c,children:r=>(0,V.jsx)(eD,{placeholder:z(`newSession.branchSearch`),empty:z(`newSession.branchEmpty`),rows:l,query:t,onQuery:n,onPick:t=>{e.onBase(o,t),n(``),r()}})})]})}function bD(e,t){let[n,r]=(0,g.useState)(null),i=t&&n!==null,a=i?n:e.engine?[e.engine]:[];return{ids:a,comparing:i,setComparing:e=>r(e?a:null),toggle(t){let n=Es(a,t);r(n),n[0]&&n[0]!==e.engine&&e.setEngine(n[0])}}}function xD(e){let{picks:t,choice:n}=e,r=n.engines;if(r.length<2)return null;let i=t.ids.map(e=>r.find(t=>t.id===e)?.name??e);return(0,V.jsx)($E,{field:`engine`,title:z(`newSession.engine`),label:Ds(i)||z(`newSession.engine`),children:i=>(0,V.jsx)(nD,{heading:z(`newSession.engine`),options:r.map(e=>({id:e.id,label:e.name,dim:e.ready===!1})),value:n.engine,...t.comparing?{values:t.ids}:{},onPick:e=>{if(t.comparing)return t.toggle(e);n.setEngine(e),i()},footer:e.available&&r.length>1?(0,V.jsx)(H,{className:`mx-2 mt-1 mb-0.5 self-start font-mono`,"data-field":`compare-engines`,hit:`tight`,onClick:()=>t.setComparing(!t.comparing),children:z(t.comparing?`compare.oneEngine`:`compare.severalEngines`)}):null})})}function SD(e){return(0,V.jsx)($E,{field:`model`,title:z(`newSession.model`),label:Ts(e.models,e.model,e.effort,z(`newSession.modelDefault`)),children:t=>(0,V.jsx)(rD,{...e,close:t})})}var CD=6e4,wD=/^(?:(today|tomorrow|今天|明天)\s*)?(\d{1,2})(?::(\d{2}))?\s*(am|pm)?$/i,TD=/^\+\s*(?:(\d+)\s*h)?\s*(?:(\d+)\s*m)?$/i;function ED(e,t){let n=e.trim(),r=TD.exec(n);if(r&&(r[1]||r[2])){let e=Number(r[1]??0)*60+Number(r[2]??0);return e>0?new Date(t.getTime()+e*CD):null}let i=wD.exec(n);if(!i)return null;let a=i[1]?.toLowerCase(),o=Number(i[2]),s=Number(i[3]??0),c=i[4]?.toLowerCase();if(c){if(o<1||o>12)return null;o=o%12+(c===`pm`?12:0)}if(o>23||s>59)return null;let l=new Date(t.getFullYear(),t.getMonth(),t.getDate(),o,s);if(a===`tomorrow`||a===`明天`)l.setDate(l.getDate()+1);else if(l.getTime()<=t.getTime()){if(a)return null;l.setDate(l.getDate()+1)}return l.getTime()>t.getTime()?l:null}function DD(e,t=new Date){let n=e.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});return e.toDateString()===t.toDateString()?n:`${e.toLocaleDateString([],{weekday:`short`})} ${n}`}async function OD(e,t,n,r){await e.request(`task.scheduleStart`,{taskId:t,at:n.toISOString(),prompt:r})}function kD(e){let[t,n]=(0,g.useState)(``);return(0,V.jsx)($E,{field:`later`,title:z(`newSession.later`),disabled:e.disabled,label:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(QE,{}),z(`newSession.later`)]}),children:r=>{let i=()=>{let n=ED(t,new Date);if(!n)return e.onInvalid(z(`newSession.laterBad`));r(),e.onSchedule(n)};return(0,V.jsxs)(`div`,{className:JE,children:[(0,V.jsx)(`input`,{className:`${tn} min-w-0 flex-1`,value:t,placeholder:z(`newSession.laterPlaceholder`),"aria-label":z(`newSession.later`),spellCheck:!1,autoComplete:`off`,autoFocus:!0,onChange:e=>n(e.target.value),onKeyDown:e=>{e.key!==`Enter`||e.nativeEvent.isComposing||(e.preventDefault(),e.stopPropagation(),i())}}),(0,V.jsx)(H,{variant:`filled`,disabled:!t.trim(),onClick:i,children:z(`newSession.laterConfirm`)})]})}})}var AD=`clone:`;function jD(e){let{model:t,saved:n,picked:r,primary:i,home:a,query:o,remote:s}=e,[c,l]=(0,g.useState)(()=>Bs(t,`github.repos`)??null);(0,g.useEffect)(()=>{let e=!1;return Hs(t,`github.repos`).then(t=>!e&&l(t)).catch(()=>!e&&l({repos:[],reason:`failed`})),()=>{e=!0}},[t]);let u=o.trim(),d=as(n,o),f=z(`rail.noProject`),p=e.ungrouped&&(!u||f.toLowerCase().includes(u.toLowerCase()))?[{key:dw,text:f,dim:a,checked:e.ungrouped.on}]:[],m=d.map(e=>{let{base:t,dir:n}=is(e);return{key:e,text:t,dim:e===i&&r.length>1?`${z(`newSession.primary`)}, ${n}`:n,checked:r.includes(e)}}),h=vs(u),_=h&&(h.includes(`:`)||d.length===0)?h:null,v=!_&&os(u)&&!n.includes(u)&&(!s||u.startsWith(`/`))?cs(ss(u,a)):``,y=_?{key:AD+_,text:s?z(`newSession.cloneRowOn`,{source:_,machine:s.name}):z(`newSession.cloneRow`,{source:_})}:v?{key:v,text:v,checked:r.includes(v)}:null,b=u.toLowerCase(),x=(c?.repos??[]).filter(e=>e.nameWithOwner.toLowerCase().includes(b)).filter(e=>!sD(n,e.nameWithOwner,s!==void 0)).map(e=>({key:AD+e.nameWithOwner,text:e.nameWithOwner,dim:e.description,title:e.description}));return(0,V.jsx)(eD,{placeholder:z(s?`newSession.repoSearchRemote`:`newSession.repoSearch`),empty:s?.empty??z(`newSession.repoEmpty`),rows:s?.blocked?[]:[...p,...m],query:o,onQuery:e.onQuery,extra:s?.blocked?null:y,more:s?.blocked?[]:x,moreLabel:z(`newSession.githubGroup`),onPick:t=>{if(t===`~scratch`)return e.ungrouped?.pick(),e.close();if(!t.startsWith(`clone:`))return e.onToggle(t);e.onClone(t.slice(6)),e.close()}})}function MD(e){document.querySelector(`.dialog [data-field="${e}"]:not([hidden] *)`)?.focus()}function ND(e){let[t,n]=(0,g.useState)(0),r=e.open&&e.items.length>0,i=Math.min(t,Math.max(0,e.items.length-1)),a=(0,g.useRef)(null),{onCursor:o}=e;return(0,g.useEffect)(()=>o?.(i),[i,o]),(0,g.useEffect)(()=>{a.current?.scrollIntoView({block:`nearest`})},[i,e.items]),(0,V.jsxs)(`div`,{className:`relative`,children:[(0,V.jsx)(`input`,{className:tn,"data-field":e.field,spellCheck:!1,autoComplete:`off`,autoFocus:e.autoFocus,placeholder:e.placeholder,value:e.value,onChange:t=>{n(0),e.onChange(t.target.value.replace(/[\r\n]+/g,``))},onKeyDown:t=>{if(!t.nativeEvent.isComposing){if(t.key===`ArrowDown`||t.key===`ArrowUp`){if(!r)return;t.preventDefault(),n(Math.max(0,Math.min(e.items.length-1,i+(t.key===`ArrowDown`?1:-1))))}else t.key===`Tab`&&!t.shiftKey&&r&&e.onComplete?.(i)?(t.preventDefault(),n(0)):t.key===`Enter`&&!t.ctrlKey&&!t.metaKey&&(t.preventDefault(),r?((e.onEnterRow??e.onPick)(i),n(0)):e.onEnter?.())}}}),r&&(0,V.jsx)(`ul`,{className:`mx-0 mt-1 mb-0 max-h-47 list-none overflow-y-auto rounded-sm border-hairline border-line bg-inset p-0.5 font-mono text-meta`,children:e.items.map((t,n)=>(0,V.jsx)(`li`,{ref:n===i?a:void 0,children:(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":n===i,className:Qt({cursor:n===i,accent:!!t.accent}),onMouseDown:t=>{t.preventDefault(),e.onPick(n)},children:[(0,V.jsx)(`span`,{children:t.text}),t.dim&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,t.dim]})]})},t.key))})]})}function PD({model:e,engine:t,busy:n,error:r,run:i}){let[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(()=>localStorage.getItem(`rove.web.cloneParent`)||`~/`),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(`main`),[p,m]=(0,g.useState)(``),[h,_]=(0,g.useState)(!1),[v,y]=(0,g.useState)({base:``,home:``,names:[]});(0,g.useEffect)(()=>{let t=!1,n=setTimeout(()=>{e.client.request(`fs.subdirs`,{path:s}).then(e=>!t&&y(e)).catch(()=>{})},60);return()=>{t=!0,clearTimeout(n)}},[e,s]);let b=l??ms(a),x=ss(s.trim(),v.home),S=()=>i(async()=>{if(!a.trim())throw MD(`url`),Error(q(`newTask`,`error.gitUrlRequired`));let n;try{m(``),n=await e.client.request(`repo.clone`,{url:a.trim(),parentDir:x,...l?.trim()?{folder:l.trim()}:{}},m)}catch(e){throw e instanceof u_&&e.code===`CLONE_FAILED`?Error(q(`newTask`,`error.cloneFailed`,{error:e.message})):e}localStorage.setItem(hs,s.trim());let r=(await e.client.request(`task.spawn`,{repo:n.path,...t?{engine:t}:{},...d.trim()?{baseBranch:d.trim()}:{}})).taskIds[0];r&&e.selectWhenListed(r)});return(0,V.jsxs)(`form`,{className:Ln,onSubmit:e=>{e.preventDefault(),S()},children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.gitUrl`)}),(0,V.jsx)(`input`,{className:tn,"data-field":`url`,spellCheck:!1,placeholder:`https://github.com/user/repo.git`,value:a,onChange:e=>o(e.target.value.replace(/[\r\n]+/g,``)),onKeyDown:e=>{e.key!==`Enter`||e.ctrlKey||e.metaKey||(e.preventDefault(),a.trim()&&MD(`parent`))}})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.parentDir`)}),(0,V.jsx)(ND,{field:`parent`,value:s,placeholder:`~/`,onChange:e=>{_(!0),c(e)},items:v.names.map(e=>({key:e,text:`${e}/`})),open:h,onPick:e=>{let t=v.names[e];t!==void 0&&c(us(s,v.base,t,v.home)),_(!1),MD(`folder`)},onComplete:e=>{let t=v.names[e];if(t===void 0)return!1;let n=`${us(s,v.base,t,v.home)}/`;return n!==s&&(c(n),!0)},onEnter:()=>MD(`folder`)}),(0,V.jsx)(`span`,{className:`text-muted`,children:q(`newTask`,`hint.remembered`)})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.folderName`)}),(0,V.jsx)(`input`,{className:tn,"data-field":`folder`,spellCheck:!1,placeholder:q(`newTask`,`placeholder.folderName`),value:b,onChange:e=>u(e.target.value.replace(/[\r\n]+/g,``)),onKeyDown:e=>{e.key!==`Enter`||e.ctrlKey||e.metaKey||(e.preventDefault(),MD(`clone-base`))}})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.baseBranch`)}),(0,V.jsx)(`input`,{className:tn,"data-field":`clone-base`,spellCheck:!1,placeholder:`main`,value:d,onChange:e=>f(e.target.value.replace(/[\r\n]+/g,``))})]}),n&&(0,V.jsx)(`p`,{className:`text-muted`,"data-field":`clone-progress`,children:p||q(`newTask`,`clone.progressInto`,{target:`${x}/${b}`})}),r&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,r]}),(0,V.jsx)(fr,{busy:n,submitLabel:q(`newTask`,n?`button.cloning`:`button.create`)})]})}function FD({model:e,engine:t,busy:n,error:r,run:i,repo:a,active:o}){let[s,c]=(0,g.useState)(``),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(new Set),[p,m]=(0,g.useState)(0),h=a.expanded;(0,g.useEffect)(()=>{if(!o||!h)return;let t=!1;return u(null),f(new Set),e.client.request(`repo.probe`,{path:h,adoptable:!0}).then(e=>!t&&u(e.worktrees??[])).catch(()=>!t&&u([])),()=>{t=!0}},[e,o,h]);let _=bs(l??[],s),v=e=>f(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),y=()=>i(async()=>{let n=d.size>0?_.filter(e=>d.has(e.path)):_.slice(p,p+1);if(n.length===0)throw Error(q(`newTask`,`error.noAdoptable`));let r=0,i,a;for(let o of n){let n={repo:h,worktreePath:o.path,branch:o.branch,...t?{engine:t}:{}};try{let t;try{t=await e.client.request(`worktree.adopt`,n)}catch(r){if(!(r instanceof u_&&r.code===`UNKNOWN_REPO`))throw r;await e.client.request(`task.openMain`,{repo:h}),t=await e.client.request(`worktree.adopt`,n)}a=t.taskId,r++}catch(e){i??=e instanceof Error?e.message:String(e)}}if(r===0)throw Error(q(`newTask`,`adopt.summaryNone`,{error:i??``}));G(r<n.length?q(`newTask`,`adopt.summaryPartial`,{done:r,total:n.length}):q(`newTask`,`adopt.summaryAll`,{count:r})),a&&e.selectWhenListed(a)}),b=d.size>0?q(`newTask`,`adopt.hintSelected`,{count:d.size}):q(`newTask`,`adopt.hintDefault`);return(0,V.jsxs)(`form`,{className:Ln,onSubmit:e=>{e.preventDefault(),y()},onKeyDown:e=>{e.ctrlKey&&!e.shiftKey&&!e.metaKey&&e.key.toLowerCase()===`a`&&(e.preventDefault(),e.stopPropagation(),f(e=>_.every(t=>e.has(t.path))?new Set:new Set(_.map(e=>e.path))))},children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.adoptFilter`)}),(0,V.jsx)(ND,{field:`filter`,value:s,placeholder:q(`newTask`,`placeholder.adoptFilter`),onChange:c,items:_.map(e=>{let t=[e.dirty===!0?`dirty`:e.dirty===null?`dirty?`:``,e.roveManaged?``:`external`].filter(Boolean).join(`,`);return{key:e.path,text:`${d.has(e.path)?`[x]`:`[ ]`} ${e.branch}${t?` (${t})`:``}`,dim:e.path,accent:d.has(e.path)}}),open:!0,onPick:e=>{let t=_[e];t&&v(t.path)},onCursor:m,onEnter:()=>{}}),(0,V.jsx)(`span`,{className:`text-muted`,children:q(`newTask`,`adopt.repoLine`,{path:h||q(`newTask`,`adopt.repoNone`)})}),l===null&&h&&(0,V.jsx)(`span`,{className:`text-muted`,children:q(`newTask`,`hint.scanningWorktrees`)}),l!==null&&_.length===0&&(0,V.jsx)(`span`,{className:`text-muted`,children:q(`newTask`,l.length===0?`adopt.noUnlinked`:`adopt.noMatch`)}),_.length>0&&(0,V.jsx)(`span`,{className:`text-muted`,children:(0,V.jsx)(kT,{text:ns(b)})})]}),r&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,r]}),(0,V.jsx)(fr,{busy:n,submitLabel:q(`newTask`,`button.create`)})]})}var ID=[`existing`,`clone`,`adopt`];function LD(e,t){let n=Bs(e,`repos.list`)?.repos,[r,i]=(0,g.useState)(n??[]),[a,o]=(0,g.useState)(()=>Bs(e,`fs.subdirs`,{path:`~/`})?.home??``),[s,c]=(0,g.useState)(()=>{let e=t??n?.[0];return e?ps(e,n??[]):``}),[l,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null);(0,g.useEffect)(()=>{Promise.all([Hs(e,`repos.list`),Hs(e,`fs.subdirs`,{path:`~/`})]).then(([e,n])=>{i(e.repos),o(n.home);let r=t??e.repos[0]??``;c(t=>t||ps(r,e.repos))}).catch(()=>{})},[e,t]);let h=os(s.trim())&&!r.includes(s.trim());(0,g.useEffect)(()=>{if(!h)return;let t=!1,n=setTimeout(()=>{e.client.request(`fs.subdirs`,{path:s}).then(e=>!t&&f({base:e.base,names:e.names})).catch(()=>!t&&f({base:``,names:[]}))},60);return()=>{t=!0,clearTimeout(n)}},[e,h,s]);let _=fs(s,r),v=_.kind===`path`?_.path:``,y=v.startsWith(`~`)&&!a?``:v.replace(/^~(?=\/|$)/,a).replace(/(.)\/+$/,`$1`);(0,g.useEffect)(()=>{if(m(null),!y)return;let t=!1,n=setTimeout(()=>{e.client.request(`repo.probe`,{path:y}).then(e=>!t&&m(e)).catch(()=>{})},150);return()=>{t=!0,clearTimeout(n)}},[e,y]);let b=new Set((e.tasks.get()?.tasks??[]).filter(e=>e.kind===`main`).map(e=>e.repo.replace(/\/+$/,``))),x=h?d?.names??[]:[],S=as(r,s),C=h?x.map(e=>({key:e,text:`${e}/`})):S.map(e=>{let{base:t,dir:n}=is(e);return{key:e,text:t,dim:n,accent:e===y}});return{text:s,saved:r,home:a,expanded:y,ambiguous:_.kind===`ambiguous`?_.name:null,mainRepos:b,open:!l,items:C,probe:p,setText:e=>{u(!1),c(e)},pick:e=>{if(h){let t=x[e];t!==void 0&&c(us(s,d?.base??``,t,a))}else{let t=S[e];t!==void 0&&c(ps(t,r))}u(!0),MD(`branch`)},complete:e=>{if(l)return!1;if(h){let t=x[e];if(t===void 0)return!1;let n=ds(s,d?.base??``,t,a);return n!==s&&(c(n),!0)}let t=S[e];if(t===void 0)return!1;let n=ps(t,r);return n!==s.trim()&&(c(n),u(!0),!0)},reopen:()=>u(!1)}}function RD(e){let{model:t,repo:n}=e,[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(!1),[s,c]=(0,g.useState)(!0),[l,u]=(0,g.useState)(`task`),d=n.mainRepos.has(n.expanded),f=n.probe?.ok?n.probe:null,p=f?.branches??[];(0,g.useEffect)(()=>{!a&&f?.current&&i(f.current)},[a,f]),(0,g.useEffect)(()=>u(`task`),[n.expanded]);let m=as(p,r),h=i=>e.run(async()=>{if(n.ambiguous)throw n.reopen(),MD(`repo`),Error(q(`newTask`,`error.repoAmbiguous`,{name:n.ambiguous}));if(!n.expanded)throw MD(`repo`),Error(z(`newTask.needRepo`));let e=await t.client.request(`repo.probe`,{path:n.expanded});if(!e.ok)throw MD(`repo`),Error(e.reason??n.expanded);if(l===`project`&&d){let n=await t.client.request(`task.openMain`,{repo:e.repo});t.selectWhenListed(n.taskId);return}hn(e.repo,(i??r).trim())});return(0,V.jsxs)(`form`,{className:Ln,onSubmit:e=>{e.preventDefault(),h()},children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.repo`)}),(0,V.jsx)(ND,{field:`repo`,value:n.text,onChange:n.setText,items:n.items,open:n.open,onPick:n.pick,onComplete:n.complete,onEnter:()=>MD(`branch`)})]}),d&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`newTask`,`field.opens`)}),(0,V.jsx)(Qo,{label:q(`newTask`,`field.opens`),field:`intent`,value:l,onChange:e=>u(e===`project`?`project`:`task`),choices:[{id:`task`,label:q(`newTask`,`intent.task`)},{id:`project`,label:q(`newTask`,`intent.project`)}]})]}),!(l===`project`&&d)&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`newTask`,`field.fromBranch`)}),(0,V.jsx)(ND,{field:`branch`,value:r,placeholder:`main`,onChange:e=>{o(!0),c(!0),i(e)},items:m.map(e=>({key:e,text:e,accent:e===r.trim()})),open:s,onPick:e=>{let t=m[e];t!==void 0&&(i(t),o(!0),c(!1),MD(`create`))},onEnterRow:e=>{let t=r.trim(),n=t?m.find(e=>e.toLowerCase()===t.toLowerCase()):void 0;h(n??m[e]??t)},onEnter:()=>void h()}),m.length===0&&e.error==null&&(0,V.jsx)(`span`,{className:`text-muted`,children:q(`newTask`,p.length===0?`hint.noBranchesFound`:`hint.noMatchBranch`)})]}),e.error&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,e.error]}),(0,V.jsx)(fr,{busy:e.busy,submitLabel:q(`newTask`,`button.create`)})]})}function zD({model:e,repo:t}){B();let[n,r]=(0,g.useState)(`existing`),{busy:i,error:a,setError:o,submit:s}=cr(),c=e.selection.get().taskId,l=e.tasks.get()?.tasks.find(e=>e.id===c)?.repo,u=MC(e,t??l),d=LD(e,t??l),f=(0,g.useRef)(null),p=(0,g.useRef)(!0);(0,g.useEffect)(()=>{if(o(null),p.current){p.current=!1,f.current?.querySelector(`[data-field=mode] [aria-pressed=true]`)?.focus();return}MD(n===`existing`?`repo`:n===`clone`?`url`:`filter`)},[n]);let m=u.engines.filter(e=>e.ready!==!1),h=()=>{let e=m.length>0?m:u.engines,t=e[(e.findIndex(e=>e.id===u.engine)+1)%e.length];t&&u.setEngine(t.id)},_=e=>r(t=>ID[(ID.indexOf(t)+e+ID.length)%ID.length]),v={model:e,engine:u.engine,busy:i,error:a,setError:o,run:s};return(0,V.jsx)(sr,{title:q(`newTask`,`title`),wide:!0,children:(0,V.jsxs)(`div`,{ref:f,onKeyDown:e=>{if(!(!e.ctrlKey||e.metaKey||e.altKey)){if(e.key===`]`||e.key===`[`)_(e.key===`]`?1:-1);else if(e.key.toLowerCase()===`e`&&!e.shiftKey)h();else return;e.preventDefault(),e.stopPropagation()}},children:[(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.mode`)}),(0,V.jsx)(Qo,{label:q(`newTask`,`field.mode`),field:`mode`,value:n,onChange:e=>r(e),choices:ID.map(e=>({id:e,label:q(`newTask`,`tabs.${e}`)}))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:q(`newTask`,`field.engine`)}),(0,V.jsx)(RC,{engines:u.engines,value:u.engine,onChange:u.setEngine})]})]}),(0,V.jsx)(`div`,{hidden:n!==`existing`,children:(0,V.jsx)(RD,{...v,repo:d})}),(0,V.jsx)(`div`,{hidden:n!==`clone`,children:(0,V.jsx)(PD,{...v})}),(0,V.jsx)(`div`,{hidden:n!==`adopt`,children:(0,V.jsx)(FD,{...v,repo:d,active:n===`adopt`})}),(0,V.jsx)(`p`,{className:`keys-only mx-0 mt-2 mb-0 ${Jt}`,children:q(`newTask`,`legend`,{enter:q(`newTask`,`enterNext`)})})]})})}function BD(e,t){let n=e.scratch||e.noProject,r=n?[]:t.extraRepos??[];return{...n?{ungrouped:!0}:{repo:t.repo},...t.baseRef?{baseBranch:t.baseRef}:{},...r.length>0?{extras:r}:{},...e.machine?{machine:e.machine.id}:{},prompt:t.prompt,...t.engine?{engine:t.engine}:{},worktree:e.kind===`task`,retryOf:{id:e.id,label:e.label}}}function VD(e,t){return e?[e,...(t.extras??[]).map(e=>e.repo)]:[]}function HD(e,t){return e?{...t.baseBranch?{[e]:t.baseBranch}:{},...Object.fromEntries((t.extras??[]).flatMap(e=>e.baseRef?[[e.repo,e.baseRef]]:[]))}:{}}function UD(e,t){return e.retryOf&&e.engine&&e.engine===t?e.retryOf.id:void 0}async function WD(e,t){try{let{task:n}=await e.client.request(`task.get`,{taskId:t.id});if(!n.prompt)return void G(z(`menu.retryNoPrompt`),`error`);gn(BD(t,{...n,prompt:n.prompt}))}catch(e){G(K(e),`error`)}}function GD(e,t){let n=async n=>{await e.client.request(`task.archive`,{taskId:t.id,archived:!0,...n?{force:n}:{}}),G(q(`tasks`,`archive.done`,{title:t.label}))};W.set((0,V.jsx)(ur,{title:z(`newSession.retryArchiveTitle`,{title:t.label}),body:z(`newSession.retryArchiveBody`),confirmLabel:q(`tasks`,`menu.archive`),onConfirm:()=>n(!1),escalate:{when:e=>e instanceof u_&&e.code===`TASK_BUSY`,label:q(`tasks`,`archive.busyConfirm`),title:q(`tasks`,`archive.busyTitle`),body:()=>q(`tasks`,`archive.busyBody`,{title:t.label}),run:()=>n(!0)}}))}var KD=_([]),qD=()=>v(KD);async function JD(e){KD.set((await e.request(`snippets.get`)).snippets)}async function YD(e,t){KD.set((await e.request(`snippets.save`,{name:t.name,text:t.text})).snippets)}async function XD(e,t){KD.set((await e.request(`snippets.remove`,{name:t})).snippets)}var ZD=/^[A-Za-z0-9][\w-]{0,31}$/;function QD(e,t){let n=t;for(;n>0&&/[\w-]/.test(e[n-1]??``);)n--;if(n===0||e[n-1]!==`@`)return null;let r=e[n-2];if(r!==void 0&&!/\s/.test(r))return null;let i=t;for(;i<e.length&&/[\w-]/.test(e[i]??``);)i++;return{start:n-1,end:i,query:e.slice(n,t)}}function $D(e,t){let n=t.toLowerCase(),r=e.filter(e=>e.name.toLowerCase().startsWith(n));return[...r.filter(e=>e.name.toLowerCase()===n),...r.filter(e=>e.name.toLowerCase()!==n)]}function eO(e,t,n){return{text:e.slice(0,t.start)+n.text+e.slice(t.end),caret:t.start+n.text.length}}var tO=e=>e.split(`
114
- `,1)[0]??``;function nO(e){return(0,V.jsx)(`ul`,{className:`${Zt} ${e.className}`,children:e.items.map((t,n)=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(H,{variant:`row`,tabIndex:-1,"aria-pressed":n===e.at,className:Qt({cursor:n===e.at,accent:!1}),onMouseDown:t=>{t.preventDefault(),e.onPick(n)},children:[(0,V.jsxs)(`span`,{className:`text-accent`,children:[`@`,t.name]}),(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,tO(t.text)]})]})},t.name))})}function rO(e){let t=qD(),[n,r]=(0,g.useState)(0),[i,a]=(0,g.useState)(0),[o,s]=(0,g.useState)(null),c=(0,g.useRef)(null),l=QD(e.value,Math.min(n,e.value.length)),u=l?$D(t,l.query):[],d=l!==null&&u.length>0&&o!==l.start,f=Math.min(i,Math.max(0,u.length-1));(0,g.useLayoutEffect)(()=>{let t=c.current,n=e.area.current;t===null||!n||(c.current=null,n.setSelectionRange(t,t),r(t))});let p=t=>{let n=u[t];if(!l||!n)return;let r=eO(e.value,l,n);c.current=r.caret,a(0),e.onChange(r.text)},m=e=>{if(!d||e.nativeEvent.isComposing)return!1;if(e.key===`ArrowDown`||e.key===`ArrowUp`)a(Math.max(0,Math.min(u.length-1,f+(e.key===`ArrowDown`?1:-1))));else if(e.key===`Tab`&&!e.shiftKey||e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey)p(f);else if(e.key===`Escape`)s(l?.start??null),e.stopPropagation();else return!1;return e.preventDefault(),!0};return{list:d?(0,V.jsx)(nO,{items:u,at:f,className:e.listClassName??``,onPick:p}):null,field:{onChange:t=>{r(t.target.selectionStart),a(0),e.onChange(t.target.value)},onSelect:e=>r(e.currentTarget.selectionStart),onKeyDown:t=>{m(t)||!e.onEnter||t.key!==`Enter`||t.shiftKey||t.nativeEvent.isComposing||(t.preventDefault(),e.onEnter())}}}}function iO(e,t){hn(e,void 0,t)}function aO(){hn(void 0,void 0,void 0,void 0,!0)}var oO=`rove.web.newSession.worktree`,sO=``;function cO({model:e,seed:t}){let n=t.repo;B();let r=v(e.selection).taskId,i=e.tasks.get()?.tasks.find(e=>e.id===r)?.repo,a=MC(e,n??i,t.engine),o=Bs(e,`repos.list`)?.repos,s=e=>t.ungrouped?void 0:(t.machine?void 0:n)??i??e?.[0],[c,l]=(0,g.useState)(o??[]),[u,d]=(0,g.useState)(()=>Bs(e,`fs.subdirs`,{path:`~/`})?.home??``),[f,p]=(0,g.useState)(()=>VD(s(o),t)),[m,h]=(0,g.useState)(()=>Object.fromEntries(f.flatMap(t=>{let n=Bs(e,`repo.probe`,{path:t});return n?[[t,n]]:[]}))),_=(0,g.useRef)(new Set),[y,b]=(0,g.useState)(t.ungrouped===!0),x=()=>{b(!0),p([])},[S,C]=(0,g.useState)(()=>HD(s(o),t)),[w,T]=(0,g.useState)(``),[E,D]=(0,g.useState)(``),[O,k]=(0,g.useState)(()=>(t.prompt!==void 0&&(sO=t.prompt),sO)),A=e=>{sO=e,k(e)},[j,ee]=(0,g.useState)(``),[M,N]=(0,g.useState)(``),[P,F]=(0,g.useState)(!1),[I,te]=(0,g.useState)(``),[L,ne]=(0,g.useState)(()=>t.worktree??localStorage.getItem(oO)!==`0`),re=e=>{localStorage.setItem(oO,e?`1`:`0`),ne(e)},[ie,R]=(0,g.useState)(null),{attachments:ae,attach:oe,remove:se,clear:ce}=Xo(e,R),le=(0,g.useRef)(null),ue=EE(e),[de,fe]=(0,g.useState)(t.machine??``),pe=de!==``,me=pe?null:Ko(e=>void oe(e)),he=ue.find(e=>e.alias===de)?.hostLabel||de,ge=fD(e,de);dD(e,ue);let[_e,ve]=(0,g.useState)(null),[ye,be]=(0,g.useState)(``);(0,g.useEffect)(()=>{Promise.all([Hs(e,`repos.list`),Hs(e,`fs.subdirs`,{path:`~/`})]).then(([e,n])=>{l(e.repos),d(n.home);let r=s(e.repos);p(e=>e.length>0||!r?e:VD(r,t)),C(e=>({...e,...HD(r,t)}))}).catch(()=>{})},[e,n]);let xe=!pe&&!L&&f.length===1,Se=f[0]??``;(0,g.useEffect)(()=>{for(let t of f)_.current.has(t)||(_.current.add(t),Hs(e,`repo.probe`,{path:t}).then(e=>h(n=>({...n,[t]:e}))).catch(()=>{}))},[e,f]),(0,g.useEffect)(()=>{!pe||!ge.loaded||de!==t.machine||ve(e=>e??oD(n,ge.repos))},[ge.loaded]),(0,g.useEffect)(()=>le.current?.focus(),[]);let Ce=!pe&&!y&&!xe,we=bD(a,Ce),Te=a.engines.find(e=>e.id===a.engine),Ee=Cs(Te,z(`newSession.modelDefault`)),De=ws(Te,z(`newSession.effortDefault`)),Oe=Ee.some(e=>e.id===j)?j:``,ke=De.some(e=>e.id===M)?M:``,Ae=async t=>{R(null),F(!0),te(z(`newSession.cloning`,{source:t}));try{let n=cs(ss((localStorage.getItem(`rove.web.cloneParent`)||`~/`).trim(),u)),r=await e.client.request(`repo.clone`,{url:t,parentDir:n},te);l(e=>e.includes(r.path)?e:[...e,r.path]),p(e=>e.includes(r.path)?e:As(e,r.path)),b(!1),D(``)}catch(e){R(vD(e))}finally{F(!1),te(``)}},je=async n=>{if(!_e)return R(z(`newSession.needRepo`));if(n&&!O.trim())return R(z(`newSession.needPrompt`));F(!0),te(_e.clone?z(`newSession.cloningOn`,{source:_e.ref,machine:he}):z(`newSession.startingOn`,{machine:he}));try{let r=await _D(e,{pick:_e,machine:de,engine:a.engine,prompt:O.trim(),begin:n,baseRef:ye});sO=``,mn.set(null),r&&e.selectWhenListed(r),t.retryOf&&r&&GD(e,t.retryOf)}catch(e){R(vD(e))}finally{F(!1),te(``)}},Me=async(n=!0,r)=>{if(R(null),pe)return je(n);if(!Se&&!y)return R(z(`newSession.needRepo`));if((n||r)&&!O.trim())return R(z(`newSession.needPrompt`));F(!0);let i=Jo(O.trim(),ae);try{let o=await Promise.all(f.map(t=>e.client.request(`repo.probe`,{path:t}))),s=o.find(e=>!e.ok);if(s)throw Error(s.reason??s.repo);let c,l;if(y)c=await Ns(e.client.request.bind(e.client),a.engine,O,n);else if(xe)c=await Ps(e.client.request.bind(e.client),o[0]?.repo??Se,a.engine,O,n,i);else{let r=await e.client.request(`task.spawn`,Ms({repos:f.map((e,t)=>({repo:o[t]?.repo??e,baseRef:S[e]??``})),branch:w.trim(),engine:a.engine,commandFrom:UD(t,a.engine),engines:n?we.ids:[],prompt:i,begin:n,model:Oe,effort:ke}));c=r.taskIds[0],l=r.groupId}r&&c&&await OD(e.client,c,r,i).then(()=>G(z(`newSession.laterSet`,{time:DD(r)}))).catch(e=>G(vD(e),`error`)),sO=``,ce(),mn.set(null),l?ya(l):c&&e.selectWhenListed(c),t.retryOf&&c&&GD(e,t.retryOf)}catch(e){let t=Os(e);t?(sO=``,ce(),mn.set(null),G(e instanceof Error?e.message:String(e),`error`),ya(t)):R(e instanceof Error?e.message:String(e))}finally{F(!1)}},Ne=rO({value:O,onChange:A,area:le,onEnter:()=>void Me()});return(0,V.jsxs)(`div`,{className:DE,children:[(0,V.jsxs)(`div`,{className:OE,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-title font-semibold text-accent`,children:z(`newSession.title`)}),(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:z(`newSession.tagline`)})]}),(0,V.jsxs)(`form`,{className:kE,onSubmit:e=>{e.preventDefault(),Me()},children:[(0,V.jsxs)(`div`,{className:AE,...me?.drop,children:[!pe&&(0,V.jsx)(Zo,{attachments:ae,onRemove:se}),(0,V.jsx)(`textarea`,{ref:le,className:ME,rows:4,spellCheck:!1,placeholder:z(`newSession.placeholder`),value:O,disabled:P,onPaste:me?.onPaste,...Ne.field}),Ne.list,(0,V.jsxs)(`div`,{className:jE,children:[(0,V.jsx)(`button`,{type:`button`,className:IE(),disabled:P||we.comparing,title:we.comparing?z(`compare.needsPrompt`):void 0,onClick:()=>void Me(!1),children:z(`newSession.createOnly`)}),(0,V.jsx)(`button`,{type:`submit`,className:Pe(),disabled:P,children:z(`newSession.start`)})]})]}),(0,V.jsxs)(`div`,{className:NE,children:[(0,V.jsx)(hD,{machines:ue,value:de,onPick:e=>{fe(e),ve(null),be(``),D(``),R(null),b(!1)}}),(0,V.jsx)($E,{field:`repo`,title:!pe&&f.length>1?z(`newSession.repoCount`,{count:f.length}):z(`newSession.repo`),label:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(YE,{}),ks(pe?_e?[_e.ref]:[]:f)||z(y?`rail.noProject`:`newSession.repo`),_e?.clone&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,z(`newSession.cloneTag`)]})]}),children:t=>(0,V.jsx)(jD,{model:e,saved:pe?ge.repos.map(aD):c,picked:pe?_e?[_e.ref]:[]:f,primary:pe?``:Se,home:pe?``:u,query:E,onQuery:D,onToggle:e=>{if(R(null),!pe)return b(!1),p(t=>As(t,e));ve({ref:e,clone:!1}),t()},onClone:e=>pe?ve({ref:e,clone:!0}):void Ae(e),close:t,remote:pe?{name:he,empty:pD(de,ge),blocked:ge.problem!==``}:void 0,ungrouped:pe?void 0:{on:y,pick:x}})}),(0,V.jsx)(yD,{remote:pe,remotePick:_e,remoteBase:ye,onRemoteBase:be,ungrouped:y,inPlace:xe,onToggleWorktree:()=>re(!L),repos:f,probes:m,bases:S,onBase:(e,t)=>C(n=>({...n,[e]:t})),branchName:w,onBranchName:T}),me&&(0,V.jsxs)(qo,{className:`${IE(ae.length>0)} cursor-pointer`,title:z(`newSession.attachHint`),disabled:P,onFiles:e=>void oe(e),children:[(0,V.jsx)(ZE,{}),z(`newSession.attach`)]}),!pe&&!y&&!we.comparing&&(0,V.jsx)(kD,{disabled:P,onSchedule:e=>void Me(!1,e),onInvalid:R}),(0,V.jsx)(`span`,{className:PE}),(0,V.jsx)(xD,{choice:a,picks:we,available:Ce}),!xe&&!pe&&!y&&!we.comparing&&(Ee.length>0||De.length>0)&&(0,V.jsx)(SD,{models:Ee,model:Oe,onModel:ee,efforts:De,effort:ke,onEffort:N})]}),P&&I&&(0,V.jsx)(`p`,{className:`text-muted`,"data-field":`clone-progress`,children:I}),ie&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,ie]})]}),!pe&&(0,V.jsx)(`button`,{type:`button`,className:`mt-2 self-center px-1.5 py-0.5 text-subtle focus-visible:text-ink touch:mt-0.5 touch:py-2 [&:hover]:text-ink`,onClick:()=>W.set((0,V.jsx)(zD,{model:e,repo:Se||void 0})),children:z(`newSession.moreWays`)})]})}var lO=[`needs`,`working`,`ready`,`idle`],uO=`~state:`;function dO(e){switch(e.rowStatus?.kind){case`attention`:case`needs-input`:case`unseen`:return`needs`;case`busy`:case`running`:return`working`}switch(e.group){case`waiting-on-you`:return`needs`;case`working`:return`working`;case`landing`:case`ready-for-review`:return`ready`}return e.pr?.lifecycle===`open`||e.status===`done`?`ready`:`idle`}var fO=e=>e&&e.kind!==`main`&&!fw(e)?KC(e.repo):void 0;function pO(e,t){let n=pw(e,t.sort),{children:r,nested:i}=vw([{repo:``,label:``,tasks:n}]),a=n.filter(e=>!i.has(e.id)),o=$C(a),s=e=>{let t=[],n=new Set,i=e=>{if(!n.has(e.id)){n.add(e.id),t.push(e);for(let t of r.get(e.id)??[])i(t)}};return i(e),t},c=new Map;for(let e of a){let t=QC(e),n=((t===null?void 0:o.get(t))??[e]).map(s),r=n.flat().map(dO).reduce((e,t)=>lO.indexOf(t)<lO.indexOf(e)?t:e);for(let e of n)for(let t of e)c.set(t.id,r)}return lO.flatMap(e=>{let t=n.filter(t=>c.get(t.id)===e);return t.length===0?[]:[{repo:``,label:z(`rail.state.${e}`),key:`${uO}${e}`,tasks:t}]})}function mO(e){let t=new Set(e.machines.map(e=>e.alias));return{rows:hO(xw(pO([...e.tasks.filter(e=>!e.routine),...e.remote.filter(e=>!e.routine&&e.machine!==void 0&&t.has(e.machine.id))],e),e.query,e.fold).map(e=>{if(e.kind!==`project`)return e;let t=e.id.slice(`project:${uO}`.length);return{id:`state:${t}`,kind:`state`,state:t,label:e.label,count:0}})),groups:[]}}function hO(e){let t=new Map,n=``;for(let r of e)r.kind===`state`?n=r.id:r.kind===`task`&&t.set(n,(t.get(n)??0)+1);return e.map(e=>e.kind===`state`?{...e,count:t.get(e.id)??0}:e)}var gO=new Set([`refused`,`timeout`,`host-key-changed`,`host-key-unverified`,`auth-denied`,`unresolved`,`ssh-failed`,`no-rove`,`no-daemon`,`bad-status`,`handshake`,`no-forwarding`,`lost`]);function _O(e){return e&&gO.has(e)?`machines.reason.${e}`:null}function vO(e,t){return e.filter(e=>e.machine?.id===t&&!e.routine&&!e.deleting)}function yO(e){let t=lO.map(e=>({state:e,tasks:[]}));for(let n of e)t[lO.indexOf(dO(n))]?.tasks.push(n);return t.filter(e=>e.tasks.length>0)}var bO=`flex flex-col font-mono text-meta`,xO=`flex flex-col gap-1 border-t-hairline border-line py-2.5 first:border-t-0 first:pt-0`,SO=`flex flex-wrap items-baseline gap-x-2.5 gap-y-0.5`,CO=`min-w-0 text-ink wrap-anywhere`,wO=`m-0 text-muted wrap-anywhere`,TO=`flex flex-wrap gap-x-3.5 gap-y-1 pt-0.5 whitespace-nowrap`,EO=`mt-1.5 mb-0.5 text-subtle`,DO=`flex min-w-0 items-baseline gap-2 pl-2`,OO=`min-w-0 flex-1 truncate text-left`,kO=`min-w-0 max-w-[55%] flex-none truncate text-muted`;function AO(e){W.set((0,V.jsx)(PO,{model:e}))}function jO({model:e,tasks:t}){let n=t=>{Sn(),e.select(t.id),ga()};return yO(t).map(e=>(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`${EO} m-0`,children:z(`rail.state.${e.state}`)}),e.tasks.map(e=>(0,V.jsxs)(H,{variant:`row`,className:`${DO} w-full rounded-sm py-0.5 hover:bg-hover`,onClick:()=>n(e),children:[(0,V.jsx)(`span`,{className:OO,children:e.label}),(0,V.jsx)(`span`,{className:kO,children:e.branch})]},e.id))]},e.state))}function MO({model:e,alias:t}){let[n,r]=(0,g.useState)(null);return(0,g.useEffect)(()=>{let n=!0;return Hs(e,`machines.repos`,{machine:t}).then(e=>n&&r(e),e=>n&&r({failed:e instanceof Error?e.message:String(e)})),()=>{n=!1}},[e,t]),n?`failed`in n?(0,V.jsx)(`p`,{className:wO,children:z(`machines.reposFailed`,{message:n.failed})}):n.reason?(0,V.jsx)(`p`,{className:wO,children:z(`machines.reposFailed`,{message:n.message??n.reason})}):n.repos.length===0?(0,V.jsx)(`p`,{className:wO,children:z(`machines.noRepos`)}):n.repos.map(e=>(0,V.jsxs)(`div`,{className:DO,children:[(0,V.jsx)(`span`,{className:OO,children:e.id}),(0,V.jsx)(`span`,{className:kO,title:e.primary??e.checkouts[0],children:e.primary??e.checkouts[0]??``})]},e.id)):(0,V.jsx)(`p`,{className:wO,children:z(`machines.loading`)})}function NO(e){let{model:t,row:n,tasks:r,words:i}=e,[a,o]=(0,g.useState)(null),s=n.state===`online`,c=_O(n.reason),l=yO(r).map(e=>`${e.tasks.length} ${z(`rail.state.${e.state}`)}`),u=e=>o(a===e?null:e);return(0,V.jsxs)(`section`,{className:xO,children:[(0,V.jsxs)(`div`,{className:SO,children:[(0,V.jsx)(`span`,{className:`${CO} ${s?``:AT.warning}`,children:xE(n,i)}),(0,V.jsx)(`span`,{className:`text-muted`,children:l.length>0?l.join(` · `):z(`machines.noTasks`)})]}),c&&(0,V.jsx)(`p`,{className:`m-0 text-muted wrap-anywhere`,children:z(c)}),(0,V.jsxs)(`div`,{className:TO,children:[s&&(0,V.jsx)(H,{hit:`tight`,onClick:()=>{Sn(),iO(void 0,n.alias)},children:z(`machines.newHere`)}),r.length>0&&(0,V.jsx)(H,{hit:`tight`,"aria-expanded":a===`tasks`,onClick:()=>u(`tasks`),children:z(a===`tasks`?`machines.hide`:`machines.tasks`)}),s&&(0,V.jsx)(H,{hit:`tight`,"aria-expanded":a===`repos`,onClick:()=>u(`repos`),children:z(a===`repos`?`machines.hide`:`machines.repos`)})]}),a===`tasks`&&(0,V.jsx)(jO,{model:t,tasks:r}),a===`repos`&&(0,V.jsx)(MO,{model:t,alias:n.alias})]})}function PO({model:e}){let t=B(),n=EE(e),r=v(e.remote),i=(t===`zh`?Ar:kr).machine;return(0,V.jsx)(sr,{title:z(`machines.title`),wide:!0,children:(0,V.jsxs)(`div`,{className:`${Ln} ${bO}`,children:[n.length===0&&(0,V.jsx)(`p`,{className:`m-0 text-muted wrap-anywhere`,children:z(`machines.none`)}),n.map(t=>(0,V.jsx)(NO,{model:e,row:t,tasks:vO(r,t.alias),words:i},t.alias))]})})}function FO(e,t,n=300){let r=0,i,a=()=>{r++,i?.(),i=void 0};return{stop:a,run:o=>{a();let s=o.trim();if(s.length<2){t({kind:`idle`});return}let c=r,l=setTimeout(()=>{t({kind:`searching`}),e(s).then(e=>c===r&&t({kind:`done`,query:s,reply:e}),e=>c===r&&t({kind:`failed`,message:e instanceof Error?e.message:String(e)}))},n);i=()=>clearTimeout(l)}}}var IO=`mx-1.5 mt-2 mb-0.5 font-mono text-meta font-semibold normal-nums text-subtle first:mt-0`,LO=`mx-1.5 my-1 text-meta text-muted [overflow-wrap:anywhere]`,RO=e=>`flex w-full min-w-0 cursor-pointer flex-col gap-0.5 rounded-sm px-1.5 py-1.5 text-left text-ink [font:inherit] touch:py-2.5 ${e?`is-selected bg-hover`:``}`,zO=`flex min-w-0 items-baseline gap-2`,BO=`min-w-0 flex-1 truncate text-body`,VO=`whitespace-nowrap text-meta text-muted`,HO=`text-meta text-muted [overflow-wrap:anywhere]`,UO=`rounded-xs bg-accent/25 text-ink`;function WO(e,t){let[n,r]=(0,g.useState)({kind:`idle`});return(0,g.useEffect)(()=>{let n=FO(t=>e.client.request(`sessions.search`,{query:t}),r);return n.run(t),n.stop},[e,t]),n}function GO(e,t){let n=[],r=e.toLowerCase(),i=t.toLowerCase(),a=0;for(let t=r.indexOf(i);i&&t>=0;t=r.indexOf(i,t+i.length))t>a&&n.push(e.slice(a,t)),n.push({hit:e.slice(t,t+i.length),at:t}),a=t+i.length;return n.push(e.slice(a)),n.map(e=>typeof e==`string`?e:(0,V.jsx)(`mark`,{className:UO,children:e.hit},e.at))}function KO({children:e}){return(0,V.jsx)(`h3`,{className:IO,children:e})}function qO({children:e,error:t}){return(0,V.jsx)(`p`,{className:`${LO} ${t?`text-error`:``}`,children:e})}function JO(e){return(0,V.jsx)(H,{variant:`row`,className:RO(e.selected),onMouseEnter:e.onHover,onClick:e.onOpen,children:(0,V.jsxs)(`span`,{className:zO,children:[(0,V.jsx)(`span`,{className:BO,children:e.title}),(0,V.jsx)(`span`,{className:VO,children:e.repo})]})})}function YO(e){let{hit:t}=e;return(0,V.jsxs)(H,{variant:`row`,className:RO(e.selected),onMouseEnter:e.onHover,onClick:e.onOpen,children:[(0,V.jsxs)(`span`,{className:zO,children:[(0,V.jsx)(`span`,{className:BO,children:t.title}),(0,V.jsxs)(`span`,{className:VO,children:[z(t.role===`user`?`search.you`:`search.agent`),` · `,Fo(Date.now()-Date.parse(t.at))]})]}),(0,V.jsx)(`span`,{className:HO,children:GO(t.snippet,e.query)})]})}var XO=_(`issues`);function ZO(e,t,n){return{repo:e.repo,baseBranch:t,prompt:n,worktree:!0}}var QO=.2,$O=[`files`,`chat`,`diff`,`browser`,`quota`];function ek(){return{top:{tabs:[{id:`t1`,kind:`files`}],active:`t1`},bottom:null,ratio:.5,focus:`top`,recent:[`t1`],next:2}}function tk(e){return e.bottom?[[`top`,e.top],[`bottom`,e.bottom]]:[[`top`,e.top]]}function nk(e){let t=e=>Number(e.id.slice(1));return tk(e).flatMap(([,e])=>e.tabs).sort((e,n)=>t(e)-t(n))}function rk(e,t){for(let[n,r]of tk(e)){let e=r.tabs.find(e=>e.id===t);if(e)return{tab:e,name:n,group:r}}return null}function ik(e,t){let n=nk(e).filter(e=>e.kind===t);for(let t of[...e.recent].reverse()){let e=n.find(e=>e.id===t);if(e)return e}return n[0]??null}function ak(e){return e.urls[e.at]??``}function ok(e){return e.slice(e.lastIndexOf(`/`)+1)}function sk(e){try{return new URL(e).host.replace(/^www\./,``)}catch{return e}}function ck(e,t){for(let[n,r]of tk(e))if(r.tabs.some(e=>e.kind===t))return n;return e.bottom?e.focus:`top`}function lk(e,t,n){let r=e.tabs.filter(e=>e.id!==n).map(e=>e.id);for(let e of[...t].reverse())if(r.includes(e))return e;return r[0]??null}function uk(e){let{top:t,bottom:n}=e;n&&n.tabs.length===0&&(n=null),t.tabs.length===0&&n&&([t,n]=[n,null]);let r=new Set([...t.tabs,...n?.tabs??[]].map(e=>e.id)),i=e.recent.filter(e=>r.has(e)),a=e=>e.active&&e.tabs.some(t=>t.id===e.active)?e:{...e,active:lk(e,i)};return{...e,top:a(t),bottom:n&&a(n),recent:i,focus:n?e.focus:`top`}}function dk(e,t,n){return t===`top`?{...e,top:n}:{...e,bottom:n}}function fk(e,t){let n=rk(e,t);if(!n)return e;let{group:r,name:i}=n,a=[...e.recent.filter(e=>e!==t),t];return r.active===t&&e.focus===i&&e.recent.at(-1)===t?e:{...dk(e,i,{...r,active:t}),focus:i,recent:a}}function pk(e){let t=nk(e);if(t.length<=12)return e;let n=new Set(tk(e).map(([,e])=>e.active)),r=t.filter(e=>!n.has(e.id)).sort((t,n)=>e.recent.indexOf(t.id)-e.recent.indexOf(n.id))[0];return r?Ek(e,r.id):e}function mk(e,t,n){let r=`t${e.next}`,i=t===`bottom`&&e.bottom?`bottom`:`top`,a=i===`bottom`&&e.bottom?e.bottom:e.top;return pk(fk(dk({...e,next:e.next+1},i,{...a,tabs:[...a.tabs,n(r)]}),r))}var hk=e=>({id:e,kind:`browser`,urls:[],at:-1});function gk(e,t){return mk(e,t,e=>({id:e,kind:`files`}))}function _k(e,t){return mk(e,t,hk)}function vk(e,t,n){let r=nk(e).find(e=>e.kind===`diff`&&e.path===t);return r?r.kind===`diff`&&r.scope!==n?fk(Ck(e,{...r,scope:n}),r.id):fk(e,r.id):mk(e,ck(e,`diff`),e=>({id:e,kind:`diff`,path:t,scope:n}))}function yk(e,t){let n=nk(e).filter(e=>e.kind===`browser`),r=n.find(e=>ak(e)===t);if(r)return fk(e,r.id);let i=n.find(e=>ak(e)===``);return i?wk(e,i.id,t):wk(mk(e,ck(e,`browser`),hk),`t${e.next}`,t)}function bk(e,t){let n=ik(e,t);return n?fk(e,n.id):t===`diff`?vk(e,`.`,`working`):mk(e,ck(e,t),e=>t===`files`||t===`chat`||t===`quota`?{id:e,kind:t}:hk(e))}function xk(e){let t=e.recent.at(-1),n=t?rk(e,t):null,r=n&&n.group.active===t?t:e.top.active;return(r?rk(e,r)?.tab.kind:null)??null}function Sk(e,t,n){return t&&xk(e)===n?{panel:e,open:!1}:{panel:bk(e,n),open:!0}}function Ck(e,t){let n=e=>({...e,tabs:e.tabs.map(e=>e.id===t.id?t:e)});return{...e,top:n(e.top),bottom:e.bottom&&n(e.bottom)}}function wk(e,t,n){let r=rk(e,t)?.tab;if(r?.kind!==`browser`||ak(r)===n)return e;let i=[...r.urls.slice(0,r.at+1),n].slice(-30);return Ck(e,{...r,urls:i,at:i.length-1})}function Tk(e,t,n){let r=rk(e,t)?.tab;return r?.kind!==`browser`||n===r.at||n<0||n>=r.urls.length?e:Ck(e,{...r,at:n})}function Ek(e,t){let n=rk(e,t);if(!n)return e;let{group:r}=n,i=r.tabs.filter(e=>e.id!==t),a=e.recent.filter(e=>e!==t),o=r.active===t?lk(r,a,t):r.active;return uk({...dk(e,n.name,{tabs:i,active:o}),recent:a})}function Dk(e,t){return nk(e).reduce((e,n)=>n.id===t?e:Ek(e,n.id),e)}function Ok(e,t,n,r){let i=rk(e,t);if(!i)return e;let a=i.group,o=a.tabs.filter(e=>e.id!==t),s=a.tabs.findIndex(e=>e.id===t);if(i.name===n){let c=Math.max(0,Math.min(o.length,(r??o.length)-+(r!==void 0&&r>s)));return fk(c===s?e:dk(e,n,{...a,tabs:[...o.slice(0,c),i.tab,...o.slice(c)]}),t)}let c=e.recent.filter(e=>e!==t),l=dk(e,i.name,{tabs:o,active:a.active===t?lk(a,c,t):a.active}),u=(n===`top`?l.top:l.bottom)?.tabs??[],d=Math.max(0,Math.min(u.length,r??u.length));return fk(uk(dk({...l,recent:c},n,{tabs:[...u.slice(0,d),i.tab,...u.slice(d)],active:t})),t)}function kk(e,t){let n=Math.max(QO,Math.min(.8,t));return Math.abs(n-e.ratio)<.001?e:{...e,ratio:n}}function Ak(e,t,n){let r=new Map(n.map(e=>[e.id,e.kind])),i=[...e.filter(e=>r.has(e)&&!t.includes(e)),...t.filter(e=>r.has(e))],a=i.filter(e=>r.get(e)===`browser`),o=new Set(a.slice(0,Math.max(0,a.length-3)).filter(e=>!t.includes(e)));return i=i.filter(e=>!o.has(e)),i}function jk(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.id!=`string`||!/^t\d+$/.test(t.id))return null;if(t.kind===`files`||t.kind===`chat`||t.kind===`quota`)return{id:t.id,kind:t.kind};if(t.kind===`diff`&&typeof t.path==`string`&&t.path!==``){let e=t.scope===`branch`||t.scope===`task`?t.scope:`working`;return{id:t.id,kind:`diff`,path:t.path,scope:e}}if(t.kind===`browser`&&Array.isArray(t.urls)){let e=t.urls.filter(e=>typeof e==`string`&&e!==``).slice(-30),n=typeof t.at==`number`&&Number.isInteger(t.at)?Math.min(e.length-1,Math.max(-1,t.at)):e.length-1;return{id:t.id,kind:`browser`,urls:e,at:e.length===0?-1:Math.max(0,n)}}return null}function Mk(e,t){if(!e||typeof e!=`object`||!(`tabs`in e)||!Array.isArray(e.tabs))return null;let n=[];for(let r of e.tabs){let e=jk(r);!e||t.has(e.id)||(t.add(e.id),n.push(e))}return{tabs:n,active:`active`in e&&typeof e.active==`string`?e.active:null}}function Nk(e){if(!e||typeof e!=`object`)return null;let t=e,n=new Set,r=Mk(t.top,n);if(!r)return null;let i=Mk(t.bottom,n),a=Math.max(0,...[...n].map(e=>Number(e.slice(1)))),o=typeof t.ratio==`number`&&Number.isFinite(t.ratio)?t.ratio:.5;return uk({top:r,bottom:i,ratio:Math.max(QO,Math.min(.8,o)),focus:t.focus===`bottom`?`bottom`:`top`,recent:Array.isArray(t.recent)?t.recent.filter(e=>typeof e==`string`):[],next:Math.max(a+1,typeof t.next==`number`&&Number.isInteger(t.next)?t.next:0)})}function Pk(e,t){let n=ek(),r=typeof t==`string`&&t!==``?t:``;if(e!==`browser`&&!r)return n;let i=_k(n,`top`),a=r?wk(i,`t2`,r):i;return e===`browser`?a:fk(a,`t1`)}function Fk(e){try{let t=JSON.parse(e??`{}`);return t&&typeof t==`object`&&!Array.isArray(t)?Object.entries(t):[]}catch{return[]}}function Ik(e,t,n){let r=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t));r[t]=n;for(let e of Object.keys(r).slice(0,-50))delete r[e];return r}function Lk(e,t){let n={};for(let[t,r]of Fk(e)){let e=Nk(r);e&&(n[t]=e)}let r=new Map(Fk(t.tab).filter(([,e])=>$O.includes(e))),i=new Map(Fk(t.url)),a=[...new Set([...r.keys(),...i.keys()])].filter(e=>!(e in n));n={...Object.fromEntries(a.map(e=>[e,Pk(r.get(e),i.get(e))])),...n};for(let e of Object.keys(n).slice(0,-50))delete n[e];return n}var Rk=[`files`,`diff`,`browser`];function zk(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.taskId==`string`&&t.taskId!==``&&Rk.includes(t.view)&&typeof t.at==`number`&&(t.url===void 0||typeof t.url==`string`)&&(t.path===void 0||typeof t.path==`string`)}function Bk(e){return e.narrow?{panel:!1,panelOpen:!1,narrow:!0}:{panel:!0,panelOpen:e.panelOpen&&!e.zen,narrow:!1}}function Vk(e,t){return{tab:e.path?`diff`:e.view,...e.view===`browser`&&e.url?{url:e.url}:{},...e.view!==`browser`&&e.path?{diff:e.path}:{},show:t.taskId===e.taskId&&!t.narrow}}function Hk(e,t){return t.url?yk(e,t.url):t.diff?vk(e,t.diff,`working`):bk(e,t.tab)}var Uk=`rove.web.panels`,Wk=`rove.web.panelTab`,Gk=`rove.web.panelUrl`;function Kk(){let e={tab:localStorage.getItem(Wk),url:localStorage.getItem(Gk)},t=Lk(localStorage.getItem(Uk),e);return(e.tab!==null||e.url!==null)&&(localStorage.setItem(Uk,JSON.stringify(t)),localStorage.removeItem(Wk),localStorage.removeItem(Gk)),t}var qk=_(Kk()),Jk=ek();function Yk(e){return v(qk)[e]??Jk}function Xk(e,t){let n=qk.get()[e]??Jk,r=t(n);if(r===n)return;let i=Ik(qk.get(),e,r);qk.set(i),localStorage.setItem(Uk,JSON.stringify(i))}function Zk(e,t){Xk(e,e=>bk(e,t)),Ka.set(!0),Sa()&&Ha.set(t)}function Qk(e,t){let n=Sk(qk.get()[e]??Jk,Ka.get()&&!pn.get(),t);Xk(e,()=>n.panel),Ka.set(n.open),n.open&&pn.get()&&pn.set(!1)}function $k(e){Xk(e.taskId,t=>vk(t,e.path,e.scope)),Ka.set(!0),pn.get()&&pn.set(!1),Sa()&&Ha.set(`diff`)}function eA(e,t){Xk(e,e=>yk(e,t)),Ka.set(!0),pn.get()&&pn.set(!1),Sa()&&Ha.set(`browser`)}function tA(e,t){Xk(e,e=>Ek(e,t));let n=Ha.get();Sa()&&n!==`terminal`&&!ik(qk.get()[e]??Jk,n)&&Zk(e,`files`)}function nA(e,t){let n=Vk(e,{taskId:t,narrow:Sa()});Xk(e.taskId,e=>Hk(e,n)),n.show&&(Ka.set(!0),pn.get()&&pn.set(!1))}var rA=_(null),iA=0;function aA(e,t){rA.set({taskId:e,hit:t,nonce:++iA}),Zk(e,`chat`),pn.get()&&pn.set(!1)}var oA=10;function sA(e,t){let n=e=>e.surface===t?0:e.surface?1:2,r=Qi().filter(n=>$i(n,t)&&n.live?.(e)!==!1).map((e,t)=>({command:e,index:t})).sort((e,t)=>n(e.command)-n(t.command)||Number(e.command.prefix)-Number(t.command.prefix)||e.index-t.index),i=new Set,a=[];for(let{command:e}of r){let t=e.chords[0];!t||e.id===`palette.open`||i.has(e.id)||(i.add(e.id),a.push({command:e,name:Co(e.id),raw:e.prefix?`${ei()} + ${t}`:t}))}return a}function cA(e){let t=document.activeElement instanceof HTMLElement?document.activeElement:null;W.set((0,V.jsx)(uA,{model:e,surface:ta(),origin:t}))}var lA=8;function uA({model:e,surface:t,origin:n}){B();let[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(0),s=(0,g.useRef)(null),c=v(Yr),l=v(e.tasks),u=v(e.remote),d=(0,g.useMemo)(()=>sA(e,t),[e,t,c]).filter(e=>lo(r,e.name,e.raw)),f=(EE(e).length>0?[{name:z(`machines.title`)}]:[]).filter(e=>lo(r,e.name,``)),p=r.trim(),m=p===``?[]:[...l?.tasks??[],...u].filter(e=>!e.routine&&!e.deleting&&[e.label,e.title,e.branch,KC(e.repo)].some(e=>e!==``&&to(p,e))).slice(0,lA),h=v(e.installedMods).has(`issues`),_=[{id:`usage`,name:z(`usage.title`)},...h?[{id:`issues`,name:z(`reviewQueue.palette`),source:`reviews`}]:[]].filter(e=>p===``||to(p,e.name)),y=WO(e,r),b=y.kind===`done`?y.reply.matches:[],x=[...d.map(e=>({kind:`command`,row:e})),..._.map(e=>({kind:`page`,...e})),...f.map(e=>({kind:`machines`,...e})),...m.map(e=>({kind:`task`,task:e})),...b.map(e=>({kind:`hit`,hit:e}))],S=Math.min(a,Math.max(0,x.length-1));(0,g.useEffect)(()=>()=>n?.focus(),[n]),(0,g.useEffect)(()=>{s.current?.querySelector(`.is-selected`)?.scrollIntoView({block:`nearest`})},[S]);let C=t=>{if(t.kind===`machines`){AO(e);return}if(Sn(),n?.focus(),t.kind===`command`){t.row.command.live?.(e)===!1?G(bo(`unavailable`),`error`):t.row.command.run(e);return}if(t.kind===`page`){t.source&&XO.set(t.source),va(t.id);return}t.kind===`task`?e.select(t.task.id):e.select(t.hit.taskId,t.hit.tabId??null),ga(),t.kind===`hit`&&aA(t.hit.taskId,t.hit)},w=e=>{if(e.key===`ArrowDown`)o(Math.min(x.length-1,S+1));else if(e.key===`ArrowUp`)o(Math.max(0,S-1));else if(e.key===`Enter`){let e=x[S];e&&C(e)}else return;e.preventDefault()},T=p!==``&&(m.length>0||p.length>=2),E=0,D=()=>E++;return(0,V.jsx)(sr,{title:bo(`palette`),wide:!0,children:(0,V.jsxs)(`div`,{className:`${Ln} palette`,onKeyDown:w,children:[(0,V.jsx)(`input`,{className:pt,autoFocus:!0,spellCheck:!1,value:r,placeholder:bo(`search`),onChange:e=>{i(e.target.value),o(0)}}),(0,V.jsxs)(`div`,{className:ut,ref:s,style:{maxHeight:`${(T?18:oA)*1.9}em`},children:[x.length===0&&y.kind!==`searching`&&(0,V.jsx)(`p`,{className:`text-muted`,children:bo(`noResults`)}),T&&d.length>0&&(0,V.jsx)(KO,{children:z(`search.commands`)}),d.map(e=>{let t=D();return(0,V.jsx)(`button`,{type:`button`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`command`,row:e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},e.command.id)}),_.map(e=>{let t=D();return(0,V.jsx)(H,{variant:`row`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`page`,...e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},e.id)}),f.map(e=>{let t=D();return(0,V.jsx)(H,{variant:`row`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`machines`,...e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},`machines`)}),m.length>0&&(0,V.jsx)(KO,{children:z(`search.tasks`)}),m.map(e=>{let t=D();return(0,V.jsx)(JO,{title:e.label,repo:KC(e.repo),selected:t===S,onHover:()=>o(t),onOpen:()=>C({kind:`task`,task:e})},e.id)}),y.kind!==`idle`&&(0,V.jsx)(KO,{children:z(`search.inConversations`)}),y.kind===`searching`&&(0,V.jsx)(qO,{children:z(`search.searching`)}),y.kind===`failed`&&(0,V.jsx)(qO,{error:!0,children:y.message}),y.kind===`done`&&b.length===0&&(0,V.jsx)(qO,{children:z(`search.none`,{query:y.query})}),b.map(e=>{let t=D();return(0,V.jsx)(YO,{hit:e,query:y.kind===`done`?y.query:``,selected:t===S,onHover:()=>o(t),onOpen:()=>C({kind:`hit`,hit:e})},`${e.taskId}:${e.tabId??``}:${e.at}:${t}`)}),y.kind===`done`&&y.reply.truncated&&(0,V.jsx)(qO,{children:z(`search.truncated`)}),y.kind===`done`&&y.reply.skipped.length>0&&(0,V.jsx)(qO,{children:z(`search.skipped`,{count:y.reply.skipped.length})})]}),(0,V.jsx)(`p`,{className:`keys-only text-muted`,children:bo(`run`)})]})})}var dA=_(null);function fA(e){let t=(document.activeElement?.closest(`.rail`)==null?null:dA.get())??e.selection.get().taskId;return e.tasks.get()?.tasks.find(e=>e.id===t)??null}t(((e,t)=>{t.exports={}}))();var pA={$schema:`https://json.schemastore.org/package.json`,name:`@sma1lboy/rove`,version:`0.9.277`,description:`Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.`,keywords:[`terminal`,`tui`,`cli`,`multiplexer`,`ai-agents`,`coding-agent`,`ai-coding-assistant`,`agentic-ai`,`parallel-agents`,`git-worktree`,`claude-code`,`codex`,`llm`,`developer-tools`],type:`module`,packageManager:`bun@1.3.13`,bin:{rove:`dist/cli/rove.js`},files:[`dist/cli`,`dist/completions`,`dist/web`,`dist/web-ui`,`dist/skills`,`dist/*.wav`,`README.md`,`LICENSE`],publishConfig:{access:`public`},repository:{type:`git`,url:`git+https://github.com/Sma1lboy/rove.git`},homepage:`https://rove.run`,bugs:{url:`https://github.com/Sma1lboy/rove/issues`},engines:{bun:`>=1.3.11`},scripts:{dev:`ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts`,"dev:mock":`ROVE_DEV=1 bun ./src/tui-react/mock/host.tsx`,"dev:sandbox":`bun run scripts/dev-sandbox.ts run`,"dev:sandbox:reset":`bun run scripts/dev-sandbox.ts reset`,build:`bun run scripts/build.ts`,"build:rubric":`bun run scripts/build-tier-rubric.ts`,compile:`bun run scripts/compile.ts`,typecheck:`tsc --noEmit`,"check-i18n":`bun run scripts/check-i18n.ts`,test:`bun run test:fast && bun run test:socket`,"perf:golden":`bun scripts/perf-golden.ts`,"pty:soak":`bun scripts/pty-soak.ts`,"test:fast":`vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8`,"test:socket":`ROVE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests`,"test:socket:coverage":`ROVE_INCLUDE_SOCKET=1 ROVE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests`,"test:behavior":`ROVE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests`,"test:render":`bun scripts/render-track.mjs`,coverage:`vitest run --coverage --passWithNoTests`,bench:`vitest bench --run`,lint:`biome check .`,knip:`knip-bun`,postinstall:`bun run scripts/check-preview-deps.ts || true`,prepublishOnly:`bun run typecheck && bun run build`,"plugin-sandbox":`bun run scripts/plugin-sandbox.ts`},"//":`biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).`,dependencies:{"@ansi-tools/parser":`^1.0.15`,"@opentui/core":`0.4.3`,"@opentui/react":`0.4.3`,"@xterm/addon-serialize":`^0.14.0`,"@xterm/addon-unicode11":`^0.9.0`,"@xterm/headless":`^6.0.0`,react:`^19.2.8`,"smol-toml":`^1.7.1`,ws:`^8.21.3`},optionalDependencies:{"node-pty":`^1.1.0`},devDependencies:{"@biomejs/biome":`1.9.4`,"@sma1lboy/rove-daemon":`0.7.23`,"@tsconfig/bun":`1.0.11`,"@types/bun":`1.3.14`,"@types/node":`25.6.2`,"@types/react":`^19.2.0`,"@vitest/coverage-v8":`2.1.9`,knip:`^6.14.2`,"react-devtools-core":`^7.0.1`,"rove-bridge":`0.0.38`,"rove-weixin":`0.0.38`,typescript:`5.8.2`,vitest:`2.1.9`},trustedDependencies:[]};pA.version,pA.name;var mA=[`latest`,`next`,`nightly`],hA={autoRouting:{title:`Auto routing`,hint:"Routing by depth: a task says how deep the work is — swift, standard, deep — and this table says which engine, model and reasoning effort that depth runs on. Pick a depth in the new-task dialog (or `rove api add --tier`) and Rove fills those three fields from the row; you still see them and can change them before the task starts. enter (or click) a row to point it somewhere else, with the same picker a task uses. A row whose target cannot start says why here, not at launch.",unconfigured:`Auto routing is off: a depth has nowhere to route — its engine is blank. Point it somewhere below, or remove the empty autoRouting.<tier>.engine from state.json.`,engineDefault:`engine default`,ready:`● ready`,unavailable:`! unavailable — {reason}`,classifierTitle:`Classifier`,classifierHint:"The rows above say what each depth RUNS. This says who CHOOSES one: switch it on and `rove api add --tier auto` reads the task's first message and picks the depth for you. It is off by default, it is never required, and it can never fail a create — no key, no network, a timeout, or an answer it is not confident enough about all leave you on the depth you would have had.",classifierDataFlow:"! Turning the classifier on sends the task's first message to a third party that is NOT the engine vendor you picked — TypeSafe System One for `jev`, or whatever address you point `custom` at. It reads the text before your engine does. Nothing leaves this machine while it is off.",classifierLabel:`Choose with`,classifierOff:`off`,classifierCustomLabel:`custom`,classifierOffHint:`— nothing is sent anywhere`,classifierJevHint:`— TypeSafe System One, billed to your own key`,classifierCustomHint:`— your endpoint: POST the text, answer with a depth and a confidence`,endpointLabel:`Endpoint`,endpointUnset:`(none — enter one, then set Choose with to custom)`,endpointTitle:`Custom classifier endpoint`,endpointField:`URL`,endpointInvalidTitle:`Not a URL`,endpointInvalidBody:`The endpoint has to start with https://, or http:// for a loopback address (127.0.0.1, localhost, ::1) — over a network, plain http would carry the task's first 1,200 characters in cleartext. Leave it empty to clear it.`,thresholdLabel:`Confidence floor`,thresholdHint:`— below this, the depth is left alone`,thresholdTitle:`Confidence floor`,thresholdField:`0 to 1`,thresholdInvalidTitle:`Not a confidence`,thresholdInvalidBody:`The floor is a number between 0 and 1. 0.5 is the shipped default.`,keyLabel:`API key`,keyStored:`stored {hint} — enter to replace, empty to clear`,keyFromEnv:"from ${env} — the environment wins over a stored key",keyNone:`not set — enter to paste one`,keyTitle:`{env}`,keyPlaceholder:`paste the key; leave empty to clear the stored one`,keySaved:`● key stored in ~/.rove/secrets.json (owner-only, never in state.json)`,keyCustomUnused:`● no Authorization header is sent to a custom endpoint — set autoRouting.classifierCustomKeyEnv to the variable holding its key if it needs one`,keyNoVariableTitle:`No key variable for this endpoint`,keyNoVariableBody:`A custom classifier endpoint is sent no Authorization header until autoRouting.classifierCustomKeyEnv names the variable its key lives in. Set that first — a key stored under a name nothing reads is a key at rest for no purpose.`,keyWriteFailedTitle:`Key not saved`,keyWriteFailedBody:`~/.rove/secrets.json could not be written: {reason}. Check directory permissions and disk space, then save again.`,keyMissing:`! no key — nothing is chosen and tasks keep their usual depth`,keyPresentEnv:"● key read from ${env} in this process's environment"}},gA={autoRouting:{title:`自动路由`,hint:"按深度路由:任务说明这活有多深——轻快、标准、深入——这张表说明那一档跑在哪个引擎、哪个模型、哪个推理强度上。在新建任务对话框里选一档(或 `rove api add --tier`),Rove 就照那一行填进这三个字段;任务启动前你仍然看得见、改得了。enter(或点击)某一行,用和任务一样的选择器把它指到别处。目标起不来的行会在这里说明原因,而不是等到启动时才炸。",unconfigured:`自动路由已关闭:有一档无处可去——它的引擎是空的。在下面把它指到某个引擎,或从 state.json 里删掉空的 autoRouting.<tier>.engine。`,engineDefault:`引擎默认`,ready:`● 可用`,unavailable:`! 不可用——{reason}`,classifierTitle:`分类器`,classifierHint:"上面几行说的是每一档**跑什么**,这里决定**由谁来选**:打开之后,`rove api add --tier auto` 会读任务的第一句话替你选档。默认关着,从来不是必需的,也永远不会让建 task 失败——没 key、断网、超时、或者它自己没把握,都只是让你停在本来就会用的那一档上。",classifierDataFlow:"! 打开分类器,任务的第一句话会发给一个**不是你选的那个引擎厂商**的第三方——`jev` 是 TypeSafe System One,`custom` 是你自己填的地址。它比你的引擎更早读到这段文字。关着的时候什么都不发。",classifierLabel:`选档方式`,classifierOff:`关`,classifierCustomLabel:`自定义`,classifierOffHint:`——不向任何地方发送`,classifierJevHint:`——TypeSafe System One,走你自己的 key 计费`,classifierCustomHint:`——你自己的接口:POST 那段文本,返回一个档位加一个置信度`,endpointLabel:`接口地址`,endpointUnset:`(未填——先填一个,再把「选档方式」切到自定义)`,endpointTitle:`自定义分类器接口`,endpointField:`URL`,endpointInvalidTitle:`不是一个 URL`,endpointInvalidBody:`接口地址要以 https:// 开头;http:// 只在回环地址(127.0.0.1、localhost、::1)上接受——发到网络上的话,明文 http 会把任务的前 1200 个字符原样带走。留空则清除。`,thresholdLabel:`置信度下限`,thresholdHint:`——低于这个值就不动档位`,thresholdTitle:`置信度下限`,thresholdField:`0 到 1`,thresholdInvalidTitle:`不是一个置信度`,thresholdInvalidBody:`下限是 0 到 1 之间的数。出厂默认 0.5。`,keyLabel:`API key`,keyStored:`已存 {hint}——enter 可替换,留空清除`,keyFromEnv:"来自环境变量 ${env}——环境变量优先于存起来的那个",keyNone:`未设置——enter 粘贴一个`,keyTitle:`{env}`,keyPlaceholder:`粘贴 key;留空则清除已存的那个`,keySaved:`● key 存在 ~/.rove/secrets.json(仅本人可读,不会进 state.json)`,keyCustomUnused:`● 自定义接口不会收到 Authorization 头——它若需要凭据,把 autoRouting.classifierCustomKeyEnv 指向存它的变量`,keyNoVariableTitle:`这个接口还没有 key 变量`,keyNoVariableBody:`在 autoRouting.classifierCustomKeyEnv 指定存 key 的变量之前,自定义分类器接口不会收到任何 Authorization 头。先设那个——存在一个没人读的名字下面的 key,只是白白落在盘上。`,keyWriteFailedTitle:`key 没存下`,keyWriteFailedBody:`写不了 ~/.rove/secrets.json:{reason}。请检查目录权限和磁盘空间,再次保存。`,keyMissing:`! 没有 key——不会替你选档,任务保持原来的档位`,keyPresentEnv:"● key 来自本进程环境变量 ${env}"}},_A={dev:{reset:`Reset UI state`,resetHint:`Clears ~/.config/rove/state.json and ~/.rove/tasks.json, then quits Rove — relaunch to start fresh. Working session list, pane sizes, theme, model picks all reset. Worktrees on disk and engine session history are not touched.`,resetButton:`[enter] Reset`,restart:`Restart backend`,restartHint:`Stops the Rove daemon and relaunches this window on the installed build — picks up daemon / orchestrator / engine edits without quitting by hand. Running engine sessions live in the PTY host and survive it; other attached Rove windows reconnect on their own.`,restartButton:`[enter] Restart`,reload:`Reload settings`,reloadHint:"Applies hand edits to ~/.config/rove/state.json (from `rove config`) to this window without a restart.",reloadButton:`[enter] Reload`,reloadDone:`Reloaded: {count} changed.`,reloadUnchanged:`Already matches state.json; nothing changed.`,reloadFailed:`state.json could not be read, nothing changed: {error}`,doctorHint:"Daemon wedged or unresponsive? Restart backend above does it from here; from a shell it is `rove daemon restart`. Hosted engine sessions stay alive across a daemon restart.",experimental:`Experimental`,remoteHint:"Remote projects (SSH): register a project whose git worktrees live on another host, driven from this local Rove. Unfinished — Hosted PTY engine launch over SSH is not implemented, and file/diff panes still degrade. Enables `rove add --remote`.",remote:`Remote projects`,autoStatusHint:`Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.`,autoStatus:`Auto status flow`,dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`rove api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`rove api dispatch`). Web-hosted sessions receive the relays today.",dispatcher:`Field-notes dispatcher`}},vA={dev:{reset:`重置 UI 状态`,resetHint:`清空 ~/.config/rove/state.json 和 ~/.rove/tasks.json,然后退出 Rove——重新启动即可从头开始。工作会话列表、面板尺寸、主题、模型选择都会重置。磁盘上的 worktree 和引擎会话历史不受影响。`,resetButton:`[enter] 重置`,restart:`重启后端`,restartHint:`停止 Rove daemon,并以已安装的版本重新启动当前窗口——无需手动退出即可应用 daemon / orchestrator / engine 的改动。正在运行的引擎会话由 PTY host 托管,不受影响;其他已连接的 Rove 窗口会自行重连。`,restartButton:`[enter] 重启`,reload:`重新加载设置`,reloadHint:"把对 ~/.config/rove/state.json 的手动修改(来自 `rove config`)应用到当前窗口,无需重启。",reloadButton:`[enter] 重新加载`,reloadDone:`已重新加载:{count} 项有变化。`,reloadUnchanged:`已与 state.json 一致,没有变化。`,reloadFailed:`无法读取 state.json,未做任何改动:{error}`,doctorHint:"daemon 卡住或无响应?上面的「重启后端」就能在这里完成;在 shell 里则是 `rove daemon restart`。Hosted PTY 引擎会话不会因 daemon 重启而退出。",experimental:`实验性`,remoteHint:"远程项目(SSH):注册一个 git worktree + 引擎都通过 SSH 跑在另一台主机上、由本地 Rove 驱动的项目。尚未完成——文件/diff 面板对远程仍会降级。启用 `rove add --remote`。",remote:`远程项目`,autoStatusHint:`自动状态流转:backlog 任务在其引擎开始一轮时移到 in_progress,新会话会拿到一条系统提示,告诉 agent 完成后自行设为 in_review。绝不触碰 done/canceled。`,autoStatus:`自动状态流转`,dispatcherHint:"现场笔记调度器:任务会话提交一行经验(`rove api note`),daemon 将每条转发给仓库的主会话,主会话再把它们转达给能受益的进行中任务(`rove api dispatch`)。目前由 Web 托管的会话会收到转达。",dispatcher:`现场笔记调度器`}},yA={engines:{title:`Engines`,hint:`Engines Rove can start on this machine. New tasks start with the default engine; switch an engine off to stop offering it.`,keys:`space available · d default · enter launch command · r rename · x reset/remove`,customTag:`custom`,available:`available`,off:`off`,defaultMark:`default`,makeDefault:`Make default`,status:{checking:`Checking…`,unknown:`Status unknown`,ready:`Ready`,notInstalled:`Not installed`,notOnPath:`Not on PATH`,signIn:`Sign in needed`,integrationMissing:`Integration not installed`,integrationOutdated:`Integration outdated`,integrationBlocked:`Integration blocked`},detail:{program:`Program`,command:`Command`,signIn:`Sign-in`,reporting:`Live status`,adapter:`Adapter`,programFound:`{binary} found at {path}.`,programMissing:`{binary} is not on PATH. Install the engine's CLI, or point its launch command at it.`,programUnknown:`Rove could not check for {binary}.`,commandDefault:`{command} (the default)`,commandCustom:`{command} (yours)`,signedIn:`Signed in.`,signedInAs:`Signed in as {who}.`,apiKey:`An API key is configured.`,token:`A token is configured ({source}).`,signedOut:`Not signed in. Sign in with the engine's own CLI.`,signInUnknown:`Rove can't see whether this engine is signed in.`,signInFailed:`Sign-in check failed: {error}`,hooksInstalled:`Rove's hooks are installed, so tabs report their state as it changes.`,hooksOutdated:`Rove's hooks are from an older version; reinstall them under Engine integrations.`,hooksMissing:`Rove's hooks are not installed; install them under Engine integrations.`,hooksAwaitEngine:`Rove's hooks can be installed once the engine is.`,hooksUnsupported:`This engine has no hooks for Rove to install.`,hooksBlocked:`Rove can't write its hooks into {file}: {reason}`,hooksBlockedHere:`Rove can't write its hooks into the engine's config: {reason}`,markersYes:`It leaves turn-complete markers that Rove reads back.`,markersNo:`It leaves no turn-complete markers.`,screenYes:`Screen rules cover what the hooks don't.`,screenNo:`No screen rules.`,screenNotNeeded:`No screen rules; the hooks report everything.`,adapterDeclared:`Borrows the {protocol} adapter.`,adapterGeneric:`Generic adapter: no transcript reader, sign-in check or resume.`,skill:`Rove skill`,skillInstalled:`Installed in {dir}.`,skillInstalledHere:`Installed and current.`,skillOutdated:`From an older Rove; reinstall it under Rove agent skill.`,skillMissing:`Not installed; install it under Rove agent skill.`},skill:{title:`Rove agent skill`,hint:`Teaches the agent in each engine to drive Rove itself (rove api): start tasks, read other sessions, message them.`,install:`Install ({count})`,noEngines:`No engine here takes the skill`,failed:`Install failed: {reason}`,bannerTitle:`ROVE SKILL NOT INSTALLED`,bannerHint:`{engines} can't drive Rove yet (start tasks, read other sessions). Click here to install.`,bannerHintWeb:`{engines} can't drive Rove yet (start tasks, read other sessions).`},integrations:{title:`Engine integrations`,hint:`Hooks Rove writes into each engine's own config, so a tab shows working, waiting or done the moment it happens.`,summary:`{installed} of {total} installed`,install:`Install missing ({count})`,upToDate:`All up to date`,remove:`Remove all ({count})`,noneInstalled:`Nothing to remove`},addEngine:`+ Add engine`,launchCommandTitle:`{name} launch command`,displayNameTitle:`{name} display name (blank = default)`,addTitle:`Add engine`,addStepTitle:`Add engine · {id}`,protocolTitle:`Add engine · {id} — protocol`,protocolNone:`None — generic adapter`,protocolFooter:`↑↓ choose · enter pick · esc cancel`,protocolRow:`protocol {protocol}`,protocolGeneric:`generic`,idPlaceholder:`lowercase slug, e.g. aider`,commandPlaceholder:`e.g. aider --model sonnet`,hookTrustHint:`Open {command} in the engine and approve hooks yourself. Written hooks are not proof of trust.`,readiness:`CLI: {cli} · login: {login} · hooks: {hooks}`,cliReady:`available`,cliMissing:`missing; install the engine CLI`,loginReady:`detected`,loginMissing:`sign in with the engine CLI`,readinessUnknown:`not observable`,hooksWritten:`written`,hooksMissing:`not written; Settings → Engines`,hooksOutdated:`outdated; Settings → Engines`,hookWaiting:`No hook event received yet. After approval, send a short prompt to verify activity.`,hookReceived:`Hook event recorded for this tab. Send a short prompt to check current reporting; current trust is not inferred.`,readinessFailed:`Readiness check unavailable; run rove doctor. No authorization is inferred.`},accounts:{checking:`Checking…`,notLoggedIn:`○ Not logged in`,loggedIn:`● Logged in: {email}`,apiKeyConfigured:`● API key configured`,chatgptLogin:`● ChatGPT login: {email}`,tokenConfigured:`● Token configured ({source})`,detected:`● Login detected`}},bA={engines:{title:`引擎`,hint:`Rove 能在这台机器上启动的引擎。新任务默认用「默认」引擎;关掉某个引擎,选引擎时就不再列出它。`,keys:`space 可用 · d 设为默认 · enter 启动命令 · r 重命名 · x 重置/移除`,customTag:`自定义`,available:`可用`,off:`已关`,defaultMark:`默认`,makeDefault:`设为默认`,status:{checking:`检查中…`,unknown:`状态未知`,ready:`就绪`,notInstalled:`未安装`,notOnPath:`不在 PATH 上`,signIn:`需要登录`,integrationMissing:`未安装接入`,integrationOutdated:`接入已过期`,integrationBlocked:`接入被拒绝`},detail:{program:`程序`,command:`命令`,signIn:`登录`,reporting:`实时状态`,adapter:`适配器`,programFound:`{binary} 位于 {path}。`,programMissing:`{binary} 不在 PATH 上。请安装引擎 CLI,或把启动命令指向它。`,programUnknown:`Rove 无法检查 {binary}。`,commandDefault:`{command}(默认)`,commandCustom:`{command}(自定义)`,signedIn:`已登录。`,signedInAs:`已登录:{who}。`,apiKey:`已配置 API key。`,token:`已配置 Token({source})。`,signedOut:`未登录。请用引擎自己的命令行登录。`,signInUnknown:`Rove 无法得知该引擎是否已登录。`,signInFailed:`登录检查失败:{error}`,hooksInstalled:`Rove 的钩子已安装,标签页的状态会实时上报。`,hooksOutdated:`Rove 的钩子来自旧版本;请在「引擎接入」里重新安装。`,hooksMissing:`Rove 的钩子未安装;请在「引擎接入」里安装。`,hooksAwaitEngine:`引擎安装后才能装 Rove 的钩子。`,hooksUnsupported:`该引擎没有可供 Rove 安装的钩子。`,hooksBlocked:`Rove 无法把钩子写入 {file}:{reason}`,hooksBlockedHere:`Rove 无法把钩子写入引擎配置:{reason}`,markersYes:`它会留下回合完成标记,Rove 可以读回。`,markersNo:`它不留下回合完成标记。`,screenYes:`读屏规则兜底钩子覆盖不到的状态。`,screenNo:`没有读屏规则。`,screenNotNeeded:`没有读屏规则;钩子已报全所有状态。`,adapterDeclared:`借用 {protocol} 适配器。`,adapterGeneric:`通用适配器:没有会话记录读取、登录检查和恢复。`,skill:`Rove 技能`,skillInstalled:`已安装在 {dir}。`,skillInstalledHere:`已安装,是最新版。`,skillOutdated:`来自旧版 Rove;请在「Rove 智能体技能」里重新安装。`,skillMissing:`未安装;请在「Rove 智能体技能」里安装。`},skill:{title:`Rove 智能体技能`,hint:`教会各引擎里的智能体自己操作 Rove(rove api):开任务、读其他会话、给它们发消息。`,install:`安装({count})`,noEngines:`这台机器上没有能装技能的引擎`,failed:`安装失败:{reason}`,bannerTitle:`ROVE 技能未安装`,bannerHint:`{engines} 还不能操作 Rove(开任务、读其他会话)。点这里安装。`,bannerHintWeb:`{engines} 还不能操作 Rove(开任务、读其他会话)。`},integrations:{title:`引擎接入`,hint:`Rove 写进各引擎自身配置的钩子,让标签页在工作、等待、完成的那一刻就显示出来。`,summary:`已安装 {installed}/{total}`,install:`安装缺失的({count})`,upToDate:`全部已是最新`,remove:`全部移除({count})`,noneInstalled:`没有可移除的`},addEngine:`+ 添加引擎`,launchCommandTitle:`{name} 的启动命令`,displayNameTitle:`{name} 的显示名称(留空 = 默认)`,addTitle:`添加引擎`,addStepTitle:`添加引擎 · {id}`,protocolTitle:`添加引擎 · {id} —— 协议`,protocolNone:`无 —— 通用适配器`,protocolFooter:`↑↓ 选择 · enter 确认 · esc 取消`,protocolRow:`协议 {protocol}`,protocolGeneric:`通用`,idPlaceholder:`小写短名,如 aider`,commandPlaceholder:`如 aider --model sonnet`,hookTrustHint:`在引擎中打开 {command},由你自行批准 hooks。写入不代表已授权。`,readiness:`CLI:{cli} · 登录:{login} · hooks:{hooks}`,cliReady:`可用`,cliMissing:`缺失;请安装引擎 CLI`,loginReady:`已检测到`,loginMissing:`请通过引擎 CLI 登录`,readinessUnknown:`无法观测`,hooksWritten:`已写入`,hooksMissing:`未写入;设置 → 引擎`,hooksOutdated:`已过时;设置 → 引擎`,hookWaiting:`尚未收到 hook 事件。授权后发送一条简短提示,验证活动状态。`,hookReceived:`已记录此标签页的 hook 事件。发送简短提示以检查当前上报;不据此推断当前授权。`,readinessFailed:`无法检查就绪状态;请运行 rove doctor。不会据此推断已授权。`},accounts:{checking:`检查中…`,notLoggedIn:`○ 未登录`,loggedIn:`● 已登录: {email}`,apiKeyConfigured:`● 已配置 API key`,chatgptLogin:`● ChatGPT 登录: {email}`,tokenConfigured:`● 已配置 Token ({source})`,detected:`● 检测到登录`}},xA={plugins:{title:`Plugins`,hint:"Rove's first-party mods first: enter (or click) installs or uninstalls one, and uninstalling keeps its data on disk. Then the plugins registered in ~/.rove/plugins.json: enter toggles one on or off — the daemon watches the file, so the change applies live. Rows indented under a plugin are the settings it declares; enter edits one, and the value reaches the plugin on its next run. Install and remove them from the shell: `rove plugin install <owner/repo>`, `rove plugin link <dir>`.",empty:"Kanban and Issues are first-party mods: enter (or click) installs one. No other plugins registered; add one with `rove plugin install <owner/repo>` — browse the `rove-plugin` topic on GitHub.",sourceLink:`linked {path}`,sourceGithub:`{spec}`,sourceBuiltIn:`first-party mod · not installed`,sourceBuiltInInstalled:`first-party mod · installed`,updateAvailable:`update available — rove plugin update`,declares:`{actions} actions · {events} events · {panes} panes`,declaresWithEngines:`{actions} actions · {events} events · {panes} panes · {engines} engines`,declaresPages:`· {pages} pages`,pageFailed:`page {detail}`,manifestUnreadable:`manifest unreadable; check the rove-plugin.toml path and TOML syntax`,unsupportedPlatform:`· not supported on this platform`,noHooks:`· no hooks declared`,lastRun:`· last run {label} {status} {ago} ago`,neverRun:`· never run`,runOk:`ok`,runRunning:`still running`,runFailed:"failed to start; inspect `rove plugin log <id>`",runExit:`exit {code}`,settingUnset:`(unset — enter to edit)`,settingInvalidTitle:`Not a number`,settingInvalidBody:`{label} only accepts a number. Keeping the previous value.`},marketplace:{title:`Marketplace`,hint:"Plugins published under the `rove-plugin` topic on GitHub, most-starred first. enter (or click) shows what the install would run and asks before running any of it. The listing is re-queried each time you open this section.",loading:`Searching GitHub…`,empty:`No plugins listed.`,offline:`GitHub is unreachable — showing first-party plugins only. Re-open this section to retry.`,installedTag:`installed`,firstParty:`first-party`,preparing:`cloning {ref}…`,installing:`building and registering {name}…`,installed:`installed {id} v{version} — it is enabled, and appears under Plugins.`,cancelled:`install cancelled; nothing was run.`,failed:`install failed: {error}. Check the build output and retry from Marketplace.`,alreadyInstalled:`already installed as {id} — manage it under Plugins.`,confirmTitle:`Install {name}?`,confirmInstall:`install`,previewSource:`source: {source}`,previewCommands:`Commands this plugin declares:`,previewNoCommands:`This plugin declares no commands.`,previewWarning:`warning: {warning}`,previewTrust:`Installing runs the build commands above, and the rest run later on the events they declare. They run as you, with your environment, and nothing is sandboxed.`}},SA={plugins:{title:`插件`,hint:"先列 Rove 官方 mod:enter(或点击)安装或卸载,卸载后数据仍留在磁盘上。再列在 ~/.rove/plugins.json 里注册的插件:enter 切换启用/禁用——daemon 监听该文件,改动实时生效。插件下方缩进的行是它声明的设置项,enter 编辑,新值在插件下次运行时生效。安装与移除在 shell 里做:`rove plugin install <owner/repo>`、`rove plugin link <dir>`。",empty:"Kanban 和 Issues 是官方 mod:enter(或点击)安装。尚未注册其他插件;用 `rove plugin install <owner/repo>` 安装一个——可在 GitHub 的 `rove-plugin` 话题下浏览。",sourceLink:`本地链接 {path}`,sourceGithub:`{spec}`,sourceBuiltIn:`官方 mod · 未安装`,sourceBuiltInInstalled:`官方 mod · 已安装`,updateAvailable:`有新版本 — rove plugin update`,declares:`{actions} 个动作 · {events} 个事件 · {panes} 个面板`,declaresWithEngines:`{actions} 个动作 · {events} 个事件 · {panes} 个面板 · {engines} 个引擎`,declaresPages:`· {pages} 个页面`,pageFailed:`页面 {detail}`,manifestUnreadable:`manifest 无法解析;请检查rove-plugin.toml 的路径和 TOML 语法`,unsupportedPlatform:`· 不支持当前平台`,noHooks:`· 未声明钩子`,lastRun:`· 上次运行 {label} {status} {ago}前`,neverRun:`· 尚未运行过`,runOk:`成功`,runRunning:`仍在运行`,runFailed:"启动失败;请查看 `rove plugin log <id>`",runExit:`退出码 {code}`,settingUnset:`(未设置 — enter 编辑)`,settingInvalidTitle:`不是数字`,settingInvalidBody:`{label} 只接受数字,保留原值。`},marketplace:{title:`插件市场`,hint:"GitHub 上 `rove-plugin` 话题下发布的插件,按 star 数排序。enter(或点击)会先列出安装会执行的命令,确认后才真正执行。每次进入本区块都会重新查询列表。",loading:`正在搜索 GitHub…`,empty:`列表为空。`,offline:`GitHub 不可达——只显示首方插件。重新进入本区块可再试一次。`,installedTag:`已安装`,firstParty:`首方`,preparing:`正在克隆 {ref}…`,installing:`正在构建并注册 {name}…`,installed:`已安装 {id} v{version}——已启用,可在「插件」区块管理。`,cancelled:`已取消安装,没有执行任何命令。`,failed:`安装失败:{error}。请检查构建输出,再从插件市场重试。`,alreadyInstalled:`已安装为 {id}——在「插件」区块管理。`,confirmTitle:`安装 {name}?`,confirmInstall:`安装`,previewSource:`来源:{source}`,previewCommands:`该插件声明的命令:`,previewNoCommands:`该插件未声明任何命令。`,previewWarning:`警告:{warning}`,previewTrust:`安装会执行上面的 build 命令,其余命令会在它们声明的事件发生时执行。它们以你的身份、带你的环境变量运行,没有任何沙箱。`}},CA={en:{appearance:{enabled:`On`,disabled:`Off`,borderFlow:`Flowing gradient`,borderStill:`Still`,glyphsBraille:`Braille`,glyphsStarburst:`Starburst (needs a font with the Dingbats block)`,glyphsAscii:`ASCII`,titleShimmer:`Shimmer`,titleStill:`Still`,preview:`Workspace preview`,tasks:`Tasks`,terminal:`Terminal`,files:`Files`,testsPassed:`Tests passed`,transparent:`Transparent background`,opaque:`Opaque background`,modeDark:`Dark`,modeLight:`Light`,modeAuto:`Auto (follow the terminal)`,openHint:`Enter to choose an option and preview it.`,chooseHint:`↑/↓ or j/k preview · enter apply · esc cancel`},title:`Settings`,esc:`esc`,nav:{default:`j/k pick · h/l switch level · enter activate · esc close`,feedback:`tab next field · enter sends on Send · esc close`},sections:{general:`General`,engines:`Engines`,autoRouting:`Auto routing`,plugins:`Plugins`,marketplace:`Marketplace`,keys:`Keybindings`,feedback:`Feedback`,dev:`Dev`},general:{usage:`USAGE`,theme:`Theme`,themeMode:`Mode`,themeHint:`l to enter list · j/k to highlight · enter to apply`,language:`Language`,languageHint:`Display language for Rove's UI. l to enter list · j/k to highlight · enter to apply.`,transparent:`Transparent background`,transparentHint:`Drops the renderer's bg fill so the host terminal shows through. enter toggles.`,on:`[x] on`,off:`[ ] off`,focusAccent:`Focus accent`,focusAccentHint:`Color of focused pane title, ▌ marker, and split borders.`,accentPrimary:`Primary (brand accent)`,accentSuccess:`Success (legacy green)`,accentInfo:`Info (cool blue)`,appearance:`Appearance`,appearanceHint:`How split panes draw.`,splitStyle:`Split panes`,workingBorder:`Working border`,taskColors:`Task colors`,glyphSet:`State glyphs`,colorblind:`Colorblind diff colours`,runningTitle:`Running title`,splitBox:`Box frames`,splitLine:`Divider line`,splitRail:`Accent rail`,splitRule:`Top rule`,notifications:`Notifications`,notificationsHint:`When a background tab finishes or pauses on an approval.`,toast:`Toast`,toastHint:`bottom-right popup`,sound:`Sound`,soundHint:`bell + chime + an OSC 9 desktop notification (rides SSH)`,soundVolume:`Chime volume — {percent}%`,soundVolumeHint:`enter cycles; applies to the next chime`,crossTask:`Cross-task`,crossTaskHint:`also for a task you switched away from`,finishedAlerts:`Finished turns`,finishedAlertsHint:`off: only approvals and errors alert; the unread dot stays`,keyHints:`Keyboard hints`,keyHintsHint:`The status-bar reminder and the first-use hints in the sidebar and files panes.`,keyHintsShow:`Show keyboard hints`,keyHintsShowHint:`re-enabling relights hints dismissed by use`,zen:`Zen mode`,zenHint:"The `zen` chip and `prefix`+z hide Files, keeping the Tasks rail and workspace.",zenDefaultOn:`Start in zen mode`,updates:`Updates`,updatesHint:`Stable is the default channel; next previews the coming release; nightly is built from main every day.`,updateChannelTitle:`Release channel`,updateChannel:`Channel: {channel}`,updateChannelHint:"enter cycles stable / next / nightly; `rove update` follows it",updateChannelName:{latest:`stable`,next:`next preview`,nightly:`nightly preview`},updateNotify:`Notify on updates`,updateNotifyHint:`new versions on this channel; off hides the update chip, and checking by hand still reports`,updateCheck:`[ Check for updates ]`,updateCheckHint:`asks npm for the newest release on this channel right now`,updateCheckButton:`Check for updates`,updateChecking:`Checking…`,updateOpenPage:`Open Update page`,updateOpenPageRow:`[ Open Update page ]`,railFold:`Folded task rail`,railFoldHint:`What the rail shows once folded away from its corner control.`,railFoldRow:`Folded rail shows: {style}`,railFoldRowHint:`enter cycles`,railFoldGlyphs:`status glyphs`,railFoldInitials:`glyph + initials`,railFoldHairline:`colour band only`,editor:`Editor`,editorHint:`What enter opens a file with in the file tree — diff mode when the editor supports it, the read-only preview when it isn't installed.`,editorRow:`editor: < {kind} >`,editorRowHint:`auto follows $VISUAL / $EDITOR, else nvim / vim / emacs / nano`,editorCustom:`custom: {cmd}`,editorCustomUnset:`(unset — enter to edit)`,worktree:`Worktree location`,worktreeHint:`Where new task worktrees are created. New tasks only.`,worktreeBase:`location: < {kind} >`,worktreeBaseHint:"custom takes `~`, a relative path, or a leading `$project_dir`",worktreeKindDefault:`default ~/.rove/worktrees`,worktreeKindNext:`next to project`,worktreeKindCustom:`custom`,worktreeCustom:`custom: {path}`,worktreeCustomUnset:`(unset — enter to edit)`,worktreeBaseTitle:`Custom worktree location (blank = default; $project_dir = project root)`,worktreeBaseField:`PATH`,editorCustomTitle:`Custom editor command (use {file} for the path)`,worktreeBaseInvalidTitle:`Can't use that worktree location`,worktreeBaseTokenBody:`{token} only expands as the leading path segment (e.g. {token}/../rove-worktrees). Keeping the previous setting.`,worktreeBaseUnusableBody:`{path} isn't usable ({error}). Keeping the previous setting — pick a writable directory.`,terminal:`Terminal`,terminalHint:`Applies to terminals opened after the change.`,scrollbackRow:`scrollback: {rows} rows`,scrollbackRowHint:`100–100000 · larger costs proportionally more CPU per redraw`,scrollbackTitle:`Terminal scrollback rows (100–100000)`,scrollbackField:`ROWS`,scrollbackInvalidTitle:`Not a number`,scrollbackInvalidBody:`Scrollback must be a number of rows (e.g. 1000). Keeping the previous setting.`,tabStripRow:`tab strip: {mode}`,tabStripMode:{never:`off — the sidebar tree lists tabs`,multipleOnly:`only with 2+ tabs`,always:`always`}},field:{command:`COMMAND`,name:`NAME`,id:`ID`},action:{save:`save`,next:`next`,add:`add`},reset:{title:`Reset UI state?`,body:`Wipes ~/.config/rove/state.json and ~/.rove/tasks.json, then quits Rove — relaunch for a fresh start with an empty working session list. Worktrees on disk and engine session history are NOT touched.`,done:`Rove: UI state reset. Relaunch Rove to start fresh.`,failedTitle:`UI state was not reset`,failedBody:`Could not write the settings file. Your settings and tasks have been kept. Try resetting again.`},restart:{title:`Restart backend?`,body:`Stops the daemon and relaunches this Rove on the installed build, so daemon / orchestrator / engine edits take effect. Running engine sessions live in the PTY host and keep going; open tabs come back. Any other attached windows reconnect on their own.`,done:`Rove: restarting the backend...`},stateWrite:{failedTitle:`Settings were not saved`,failedBody:`{file} could not be written ({keys}). Check its directory permissions and free disk space, then save again.`},...hA,...yA,...xA,keybindings:{title:`Keybindings`,hint:`Rebind direct and prefix chords in your own YAML file; changes reload live. Press F1 anywhere for the live keymap with every binding id.`,configFile:`Config file`,notCreated:` (not created yet)`,prefixTitle:`Command layer ({prefix})`,prefixHint:`Bare keys act in the focused pane; a small one-press set covers frequent Rove actions; {prefix} opens the command layer ({timeout}ms second-stroke window). Prefix bindings keep their pane scope and modal rules.`,tapPresentation:`Prefix tap`,tapPresentationHint:`Choose whether the complete guide also marks controls already on screen.`,tapPresentationLocal:`On-screen entries + complete guide (default)`,tapPresentationGuide:`Complete guide only`,prefixDisabled:`disabled`,fixed:`Fixed (not rebindable): {ids}.`,createHint:`No overrides file yet. Rove can write one for you, fully commented — nothing is rebound until you uncomment a line.`,createFile:`[enter] Create keybindings.yaml`,overridesApplied:`Overrides applied`,none:`none`,unbound:`(unbound)`,defaultKeys:`default: {keys}`,warnings:`Warnings`},feedback:{title:`Feedback`,hint:"Sends a GitHub Discussion to the Rove repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:`title`,titlePlaceholder:`Short summary`,descriptionLabel:`description`,descriptionPlaceholder:`What happened? (enter for a new line · tab to Send)`,send:`[enter] Send to GitHub Discussions`},..._A},zh:{appearance:{enabled:`开启`,disabled:`关闭`,borderFlow:`流动渐变`,borderStill:`静止`,glyphsBraille:`盲文点`,glyphsStarburst:`星芒(需要含 Dingbats 符号区的字体)`,glyphsAscii:`ASCII`,titleShimmer:`流光`,titleStill:`静止`,preview:`工作区预览`,tasks:`任务`,terminal:`终端`,files:`文件`,testsPassed:`测试通过`,transparent:`透明背景`,opaque:`不透明背景`,modeDark:`深色`,modeLight:`浅色`,modeAuto:`自动(跟随终端)`,openHint:`按 Enter 打开选项和预览。`,chooseHint:`↑/↓ 或 j/k 预览 · enter 应用 · esc 取消`},title:`设置`,esc:`esc`,nav:{default:`j/k 选择 · h/l 切换层级 · enter 确认 · esc 关闭`,feedback:`tab 下一项 · enter 在发送项发送 · esc 关闭`},sections:{general:`通用`,autoRouting:`自动路由`,engines:`引擎`,plugins:`插件`,marketplace:`插件市场`,keys:`快捷键`,feedback:`反馈`,dev:`开发`},general:{usage:`用量`,theme:`主题`,themeMode:`明暗`,themeHint:`l 进入列表 · j/k 高亮 · enter 应用`,language:`语言`,languageHint:`Rove 界面的显示语言。l 进入列表 · j/k 高亮 · enter 应用。`,transparent:`透明背景`,transparentHint:`去掉渲染器的背景填充,让宿主终端透出来。按 enter 切换。`,on:`[x] 开`,off:`[ ] 关`,focusAccent:`聚焦强调色`,focusAccentHint:`聚焦面板标题、▌ 标记和分隔边框的颜色。`,accentPrimary:`主色(品牌强调色)`,accentSuccess:`成功色(传统绿)`,accentInfo:`信息色(冷蓝)`,appearance:`外观`,appearanceHint:`分屏面板怎么画边。`,splitStyle:`分屏面板`,workingBorder:`运行中边框`,taskColors:`任务配色`,glyphSet:`状态符号`,colorblind:`色盲友好的增删配色`,runningTitle:`运行中标题`,splitBox:`方框边框`,splitLine:`单线分隔`,splitRail:`左侧强调条`,splitRule:`顶部横线`,notifications:`通知`,notificationsHint:`后台标签完成或在审批处暂停时触发。`,toast:`Toast 弹窗`,toastHint:`右下角弹窗`,sound:`声音`,soundHint:`响铃 + 提示音 + OSC 9 桌面通知(经 SSH 直达本地)`,soundVolume:`提示音音量 — {percent}%`,soundVolumeHint:`回车循环切换;下一声提示音生效`,crossTask:`跨任务`,crossTaskHint:`你已切走的任务也通知`,finishedAlerts:`回合完成`,finishedAlertsHint:`关闭后只有审批和错误会提醒;未读标记照常`,keyHints:`键盘提示`,keyHintsHint:`状态栏提醒,以及侧栏和文件面板的首用提示。`,keyHintsShow:`显示键盘提示`,keyHintsShowHint:`重新开启会点亮已因使用而熄灭的提示`,zen:`禅模式`,zenHint:"`zen` 标记和 `prefix`+z 隐藏 Files,保留 Tasks 侧栏与 workspace。",zenDefaultOn:`启动即进入禅模式`,updates:`更新`,updatesHint:`稳定版是默认渠道;next 预览即将发布的版本;nightly 每天从 main 自动构建。`,updateChannelTitle:`发布渠道`,updateChannel:`渠道:{channel}`,updateChannelHint:"enter 在稳定版 / next / nightly 间切换;`rove update` 跟随它",updateChannelName:{latest:`稳定版`,next:`next 预览版`,nightly:`nightly 预览版`},updateNotify:`有新版本时通知我`,updateNotifyHint:`只针对所选渠道;关闭后不再显示更新标记,手动检查仍会给出结果`,updateCheck:`[ 检查更新 ]`,updateCheckHint:`立即向 npm 查询所选渠道的最新版本`,updateCheckButton:`检查更新`,updateChecking:`检查中…`,updateOpenPage:`打开更新页`,updateOpenPageRow:`[ 打开更新页 ]`,railFold:`折叠后的任务栏`,railFoldHint:`任务栏从角标折叠之后显示什么。`,railFoldRow:`折叠后显示:{style}`,railFoldRowHint:`enter 切换`,railFoldGlyphs:`状态字形`,railFoldInitials:`字形 + 首字母`,railFoldHairline:`仅色带`,editor:`编辑器`,editorHint:`文件树里按 enter 用什么打开文件——支持时走编辑器 diff 模式,未安装时回退到只读预览。`,editorRow:`编辑器: < {kind} >`,editorRowHint:`auto 跟随 $VISUAL / $EDITOR,否则 nvim / vim / emacs / nano`,editorCustom:`自定义: {cmd}`,editorCustomUnset:`(未设置 — enter 编辑)`,worktree:`工作树位置`,worktreeHint:`新任务工作树的创建位置。仅对新任务生效。`,worktreeBase:`位置: < {kind} >`,worktreeBaseHint:"自定义可填 `~`、相对路径或以 `$project_dir` 开头",worktreeKindDefault:`默认 ~/.rove/worktrees`,worktreeKindNext:`项目旁边`,worktreeKindCustom:`自定义`,worktreeCustom:`自定义: {path}`,worktreeCustomUnset:`(未设置 — enter 编辑)`,worktreeBaseTitle:`自定义工作树位置(留空 = 默认;$project_dir = 项目根目录)`,worktreeBaseField:`路径`,editorCustomTitle:`自定义编辑器命令(用 {file} 代表文件路径)`,worktreeBaseInvalidTitle:`无法使用该工作树位置`,worktreeBaseTokenBody:`{token} 只能作为路径的第一段展开(如 {token}/../rove-worktrees)。保留原设置。`,worktreeBaseUnusableBody:`{path} 不可用({error})。保留原设置 —— 请选择一个可写目录。`,terminal:`终端`,terminalHint:`对修改后新打开的终端生效。`,scrollbackRow:`回滚行数: {rows} 行`,scrollbackRowHint:`100–100000 · 调大会按比例增加每次重绘的 CPU`,scrollbackTitle:`终端回滚行数(100–100000)`,scrollbackField:`行数`,scrollbackInvalidTitle:`不是数字`,scrollbackInvalidBody:`回滚行数必须是数字(如 1000)。保留原设置。`,tabStripRow:`标签栏: {mode}`,tabStripMode:{never:`关闭 — 标签在左侧树里`,multipleOnly:`仅 2 个以上标签时显示`,always:`始终显示`}},field:{command:`命令`,name:`名称`,id:`标识`},action:{save:`保存`,next:`下一步`,add:`添加`},reset:{title:`重置界面状态?`,body:`将清除 ~/.config/rove/state.json 和 ~/.rove/tasks.json 并退出 Rove —— 重新启动后会是一个干净的开始,工作会话列表为空。磁盘上的工作树和引擎会话历史不受影响。`,done:`Rove:界面状态已重置。重新启动 Rove 即可从头开始。`,failedTitle:`UI 状态未能重置`,failedBody:`无法写入设置文件。设置和任务均已保留,请稍后重新尝试重置。`},restart:{title:`重启后端?`,body:`会停掉 daemon,并以已安装的版本重新启动当前 Rove 窗口,从而让 daemon / orchestrator / 引擎的改动生效。正在运行的引擎会话由 PTY host 托管,不会中断;已打开的标签页会恢复。其他已连接的窗口会自行重连。`,done:`Rove:正在重启后端……`},stateWrite:{failedTitle:`设置未能保存`,failedBody:`{file} 写入失败({keys})。请检查目录权限和磁盘空间,再次保存。`},...gA,...bA,...SA,keybindings:{title:`快捷键`,hint:`在你自己的 YAML 文件里重绑定直接按键和 prefix 组合;修改会实时加载。任意位置按 F1 查看带每个绑定 id 的实时键位表。`,configFile:`配置文件`,notCreated:` (尚未创建)`,prefixTitle:`命令层({prefix})`,prefixHint:`裸键作用于当前聚焦面板;少量单次快捷键覆盖高频 Rove 操作;{prefix} 打开命令层(第二击窗口 {timeout}ms)。Prefix 绑定保持原有的面板作用域和 modal 规则。`,tapPresentation:`点按 Prefix`,tapPresentationHint:`选择完整指南是否同时标记当前屏幕上的入口。`,tapPresentationLocal:`屏幕入口 + 完整指南(默认)`,tapPresentationGuide:`仅完整指南`,prefixDisabled:`已禁用`,fixed:`固定(不可重绑定):{ids}。`,createHint:`还没有覆盖文件。Rove 可以帮你写一份带完整注释的——在你取消注释之前不会改动任何按键。`,createFile:`[enter] 创建 keybindings.yaml`,overridesApplied:`已应用的覆盖`,none:`无`,unbound:`(已解绑)`,defaultKeys:`默认: {keys}`,warnings:`警告`},feedback:{title:`反馈`,hint:"通过 `gh` 向 Rove 仓库发一条 GitHub Discussion。需要 `gh auth login`;分类默认为 Feedback。",titleLabel:`标题`,titlePlaceholder:`简短概括`,descriptionLabel:`描述`,descriptionPlaceholder:`发生了什么?(enter 换行 · tab 跳到发送)`,send:`[enter] 发送到 GitHub Discussions`},...vA}},wA={en:kr,zh:Ar};function $(e,t){return Ae(CA,e,t)}function TA(e,t){return Ae(wA,e,t)}function EA({label:e,value:t,picks:n,onPick:r}){return(0,V.jsx)(`fieldset`,{"aria-label":e,className:`m-0 inline-flex min-w-0 flex-wrap gap-0.5 rounded-sm border-hairline border-line bg-inset p-0.5`,children:n.map(e=>{let n=e.value===t;return(0,V.jsx)(`button`,{type:`button`,"aria-pressed":n,className:Me(`rounded-xs px-2.5 py-1 font-sans text-meta whitespace-nowrap touch:min-h-9`,`focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-focus`,n?`bg-menu text-ink`:`text-muted hover:bg-hover`),onClick:()=>!n&&r(e.value),children:e.label},e.value)})})}function DA({label:e,value:t,picks:n,onPick:r}){return(0,V.jsxs)(`span`,{className:`relative inline-flex max-w-full min-w-0 text-ink`,children:[(0,V.jsx)(`select`,{"aria-label":e,value:t,className:`max-w-full min-w-0 truncate rounded-sm border-hairline border-line bg-paper py-1.25 pr-7 pl-2.5 font-sans text-meta hover:border-line-active focus-visible:border-line-active focus-visible:outline-none touch:min-h-10`,onChange:e=>{let t=n.find(t=>String(t.value)===e.target.value);t&&r(t.value)},children:n.map(e=>(0,V.jsx)(`option`,{value:e.value,children:e.label},e.value))}),(0,V.jsx)(Fa,{className:`pointer-events-none absolute top-1/2 right-2.5 -translate-y-1/2 text-subtle`})]})}var OA=`${Mn} w-narrow:pt-0`,kA=`dialog relative m-0 flex h-[min(640px,80vh)] w-[min(880px,calc(100vw-32px))] overflow-hidden rounded-md border-hairline border-line bg-surface text-inherit shadow-dialog focus:outline-none motion-safe:animate-rise-in [.is-leaving_&]:animate-sink-out w-narrow:h-dvh w-narrow:w-screen w-narrow:flex-col w-narrow:rounded-none w-narrow:border-0 short:h-[calc(100dvh-24px)]`,AA=`absolute top-3 right-3 z-1 grid size-7 place-items-center rounded-sm text-display leading-none text-muted hover:bg-inset hover:text-ink focus-visible:bg-inset focus-visible:text-ink touch:size-10`,jA=`flex w-56 flex-none flex-col gap-5 overflow-y-auto scrollbar-none [border-right:var(--hairline)_solid_var(--line)] px-2.5 py-4 w-narrow:w-full w-narrow:flex-1 w-narrow:[border-right:none] w-narrow:px-3 w-narrow:py-3`,MA=`m-0 px-2 pb-0.5 font-sans text-title font-semibold normal-nums text-ink`,NA=`flex flex-col gap-0.5`,PA=`m-0 px-2 pb-1 font-mono text-meta font-normal text-subtle`,FA=(e,t)=>`flex items-center rounded-sm px-2 py-1.25 text-left font-sans text-body touch:min-h-10 w-narrow:min-h-11 w-narrow:px-3 ${e?`bg-menu text-ink`:`${t?`text-muted`:`text-ink`} [&:hover]:bg-hover`}`,IA=`ml-auto hidden text-subtle w-narrow:block`,LA=`flex flex-col`,RA=`m-0 pb-2 text-meta text-subtle`,zA=`flex flex-col border-t-hairline border-t-line [&>*]:border-b-hairline [&>*]:border-b-line`,BA=`flex items-center justify-between gap-x-6 gap-y-2 py-3 w-narrow:flex-col w-narrow:items-stretch`,VA=`flex items-center justify-between gap-x-6 py-3`,HA=`flex flex-col gap-3 py-3`,UA=`flex min-w-0 flex-1 flex-col gap-0.5`,WA=`text-body text-ink`,GA=`text-meta text-muted [&_a]:text-accent`,KA=`max-w-90 min-w-0 truncate font-mono text-meta text-muted [overflow-wrap:anywhere]`,qA=`m-0 py-3 text-body text-muted`,JA=`rounded-sm border-hairline border-line bg-paper px-2.5 py-1.5 font-sans text-body text-ink focus-visible:border-line-active focus-visible:outline-none`,YA=`${JA} w-24 text-right`,XA=`flex flex-col gap-1.5`,ZA=`text-meta font-medium text-muted`,QA=`min-h-30 max-h-[50vh] leading-[1.45]`,$A=`flex flex-wrap items-center justify-end gap-2.5`,ej=`flex items-center gap-2.5 rounded-sm bg-inset px-3 py-2 text-meta`,tj=`grid grid-cols-[minmax(0,1fr)_104px_72px] items-center gap-3`,nj=`flex flex-col`,rj=`${tj} pb-1.5 pl-7.5 font-sans text-meta font-medium normal-nums text-subtle [&>span:not(:first-child)]:text-center`,ij=`border-b-hairline border-b-line first:border-t-hairline first:border-t-line`,aj=`${tj} group/eng rounded-sm py-1.5 pr-1 pl-0`,oj=`flex min-w-0 items-center gap-2 rounded-sm py-1.5 pr-0 pl-1.5 text-left focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-focus`,sj=e=>`mx-0.5 ${e?`text-muted`:`text-subtle`}`,cj=`flex min-w-0 flex-col gap-0.5`,lj=e=>`truncate text-body leading-[inherit] font-medium ${e?`text-muted`:`text-ink`}`,uj=`ml-2 text-meta leading-[inherit] font-normal text-subtle`,dj={ready:`bg-success`,attention:`bg-warning`,error:`bg-error`,absent:`bg-subtle`},fj=e=>`inline-flex items-center gap-1.5 text-meta leading-[inherit] ${e===`error`?`text-error`:`text-muted`}`,pj=e=>`size-1.75 flex-none rounded-full ${dj[e]}`,mj=`flex justify-center`,hj=`rounded-full bg-accent-soft px-2.5 py-0.5 font-sans text-meta font-medium normal-nums capitalize text-accent`,gj=`rounded-full border-hairline border-line px-2.5 py-0.5 text-meta leading-[inherit] whitespace-nowrap text-muted opacity-0 transition-opacity duration-120 ease-[ease] group-hover/eng:opacity-100 group-focus-within/eng:opacity-100 hover:border-line-active hover:text-ink motion-reduce:transition-none touch:opacity-100`,_j=`mt-0 mr-1 mb-3 ml-7 flex flex-col gap-2.5 px-1.5 py-1`,vj=`m-0 grid grid-cols-[max-content_minmax(0,1fr)] gap-x-3.5 gap-y-1.5 text-meta leading-[1.5]`,yj=`text-subtle`,bj=e=>`m-0 wrap-anywhere ${e?`text-warning`:`text-ink`}`,xj=`flex items-center gap-2`,Sj=`flex-1 px-2 py-1.25`,Cj=`text-meta leading-[inherit] text-success`,wj=`flex items-center gap-3 py-2.5`,Tj=`flex min-w-0 flex-1 flex-col gap-0.5`,Ej=(e=!1)=>`overflow-hidden text-ellipsis text-meta text-muted ${e?`whitespace-normal`:`whitespace-nowrap`}`,Dj=`flex flex-col gap-1 py-3`,Oj=`flex items-baseline gap-3`,kj=`flex flex-col gap-2.5 pt-2`,Aj=`grid grid-cols-[repeat(auto-fill,minmax(96px,1fr))] gap-2`,jj=`m-0 pb-1.5 text-meta font-medium text-subtle`,Mj=e=>e?`border-accent bg-accent-soft`:`border-line hover:bg-hover`,Nj=`flex h-9 overflow-hidden rounded-xs border-hairline`,Pj=`flex w-2/5 flex-col gap-0.75 p-1`,Fj=`flex min-w-0 flex-1 flex-col gap-0.75 p-1`,Ij=`h-0.75 rounded-xs`,Lj=`mt-auto flex gap-0.75`,Rj=`size-1 rounded-xs`,zj=`flex min-w-0 items-baseline gap-1.5 font-sans text-meta`,Bj=`group relative h-4.5 w-7.5 flex-none justify-self-center rounded-full border-hairline border-line bg-inset transition-[background,border-color] duration-120 ease-[ease] aria-checked:border-accent aria-checked:bg-accent motion-reduce:transition-none`,Vj=`absolute top-0.5 left-0.5 size-3 rounded-full bg-muted transition-[transform,background] duration-120 ease-[ease] group-aria-checked:[transform:translateX(12px)] group-aria-checked:bg-paper motion-reduce:transition-none`;function Hj({on:e,...t}){return(0,V.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,className:Bj,...t,children:(0,V.jsx)(`span`,{className:Vj})})}function Uj(e){return(0,V.jsxs)(`section`,{className:LA,children:[e.title&&(0,V.jsx)(`h2`,{className:`m-0 pb-1.5 font-sans text-meta font-medium normal-nums text-muted`,children:e.title}),e.hint&&(0,V.jsx)(`p`,{className:`m-0 pb-2 text-meta text-subtle`,children:e.hint}),(0,V.jsx)(`div`,{className:zA,children:e.children})]})}function Wj(e){let t=(0,V.jsxs)(`div`,{className:UA,children:[(0,V.jsx)(`span`,{id:e.labelId,className:WA,children:e.label}),e.hint&&(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:e.hint})]});return e.stack?(0,V.jsxs)(`div`,{className:HA,children:[t,e.children]}):(0,V.jsxs)(`div`,{className:e.inline?VA:BA,children:[t,e.children&&(0,V.jsx)(`div`,{className:`flex min-w-0 flex-none items-center justify-end gap-2 w-narrow:justify-start`,children:e.children})]})}function Gj(e){let t=(0,g.useId)();return(0,V.jsx)(Wj,{label:e.label,hint:e.hint,labelId:t,inline:!0,children:(0,V.jsx)(Hj,{on:e.checked,"aria-labelledby":t,disabled:e.disabled,onClick:()=>e.onChange(!e.checked)})})}var Kj=36;function qj(e){let t=e.picks.length<=4&&e.picks.reduce((e,t)=>e+t.label.length,0)<=Kj?EA:DA;return(0,V.jsx)(Wj,{label:e.label,hint:e.hint,children:(0,V.jsx)(t,{label:e.label,value:e.value,picks:e.picks,onPick:e.onPick})})}function Jj(e){return(0,V.jsx)(Wj,{label:e.label,hint:e.note,children:(0,V.jsx)(`span`,{className:KA,children:e.value})})}var Yj=`flex items-baseline justify-between`,Xj=`[&_b]:mr-2.5`,Zj=`my-2.5 flex flex-col`,Qj=e=>`flex gap-3 rounded-sm px-2 py-1 text-left text-[length:var(--fs-body)] ${e?`bg-menu`:``}`,$j=`min-w-[14ch]`,eM=`whitespace-nowrap text-[length:var(--fs-meta)] text-warning`,tM=`rail-tight:hidden`,nM=`[&_h2]:mx-0 [&_h2]:mt-3.5 [&_h2]:mb-1 [&_h2]:text-[length:var(--fs-body)]`,rM=`max-h-[55vh] overflow-x-hidden overflow-y-auto`,iM=`mr-auto text-[length:var(--fs-meta)]`,aM=`text-[length:var(--fs-body)] leading-[1.55] wrap-anywhere [&_h3]:mx-0 [&_h3]:mt-3 [&_h3]:mb-1.5 [&_h3]:font-sans [&_h3]:text-meta [&_h3]:font-medium [&_h3]:normal-nums [&_h3]:text-muted [&_h3:first-child]:mt-0 [&_ul]:m-0 [&_ul]:pl-4.5 [&_li+li]:mt-2 [&_p]:mx-0 [&_p]:mt-0 [&_p]:mb-2 [&_a]:text-accent [&_a]:underline [&_a]:underline-offset-2 [&_code]:rounded-sm [&_code]:bg-inset [&_code]:px-1 [&_code]:py-0 [&_code]:font-mono [&_code]:text-meta [&_code]:font-normal [&_code]:normal-nums`,oM=`mt-3`,sM=e=>`rounded-sm px-2 py-1.25 ${e?`bg-menu`:``}`,cM=`flex items-baseline gap-2 text-[length:var(--fs-body)]`,lM=`flex items-baseline justify-between gap-2`,uM=`font-mono`,dM=`truncate`,fM=`mt-4 text-[length:var(--fs-meta)]`;function pM(e){return e.replace(/\[`[0-9a-f]{7,40}`\]\([^)]*\)\s*/g,``).replace(/\s+[—-]\s+\[@[^\]]+\]\([^)]*\)\s*$/,``).trim()}function mM(e){let t=[],n=(e,n)=>t.push({kind:e,text:n,id:t.length});for(let r of e.split(/\r?\n/)){let e=r.trimEnd();if(e.trim()===``)continue;let i=/^#{1,6}\s+(.*)$/.exec(e);if(i){n(`heading`,i[1]??``);continue}let a=/^\s*[-*]\s+(.*)$/.exec(e);if(a){n(`item`,a[1]??``);continue}let o=t.at(-1);o&&o.kind!==`heading`?o.text=`${o.text} ${e.trim()}`:n(`para`,e.trim())}return t.map(e=>e.kind===`item`?{...e,text:pM(e.text)}:e)}var hM=/\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)|`([^`]+)`|\*\*([^*]+)\*\*/g;function gM(e){let t=[],n=0;for(let r of e.matchAll(hM)){let i=r.index??0;i>n&&t.push(e.slice(n,i));let[a,o,s,c,l]=r;o!==void 0&&s!==void 0?t.push((0,V.jsx)(`a`,{href:s,target:`_blank`,rel:`noopener noreferrer`,children:gM(o)},i)):c===void 0?l!==void 0&&t.push((0,V.jsx)(`b`,{children:l},i)):t.push((0,V.jsx)(`code`,{children:c},i)),n=i+a.length}return n<e.length&&t.push(e.slice(n)),t}function _M({body:e}){let t=mM(e),n=[],r=[],i=()=>{r.length>0&&n.push((0,V.jsx)(`ul`,{children:r},`ul-${n.length}`)),r=[]};for(let e of t){if(e.kind===`item`){r.push((0,V.jsx)(`li`,{children:gM(e.text)},e.id));continue}i(),n.push(e.kind===`heading`?(0,V.jsx)(`h3`,{children:e.text},e.id):(0,V.jsx)(`p`,{children:gM(e.text)},e.id))}return i(),(0,V.jsx)(`div`,{className:aM,children:n})}var vM=`page min-h-0 flex-1 rounded-md border-hairline border-line bg-paper px-4.5 py-3.5 focus:outline-none`,yM=`${vM} overflow-y-auto`,bM=`page-title mx-0 mt-0 mb-1.5 font-sans text-title font-bold normal-nums`,xM=`flex items-baseline justify-between gap-4 [&_.page-title]:m-0`,SM=e=>`min-w-0 truncate text-meta ${e?``:`leading-[inherit]`}`,CM=`flex flex-wrap items-center gap-2`,wM={row:`touch:after:-inset-x-0.75 touch:after:-inset-y-0.5`,kanban:`touch:after:-inset-x-0.75 touch:after:-top-1.5 touch:after:-bottom-1`,header:`touch:after:-inset-x-0.75 touch:after:-top-2.5 touch:after:-bottom-1.25`},TM=`mt-2.5 flex flex-col gap-1.5`,EM=e=>`flex cursor-pointer flex-col gap-0.5 rounded-sm px-2.5 py-1.5 ${e?`bg-menu`:``}`,DM=`flex min-w-0 items-baseline gap-2.5`,OM=`whitespace-nowrap text-muted`,kM=`flex gap-2.5 pl-[4ch] text-meta leading-[inherit] text-muted`,AM=`min-w-0 flex-1 truncate`,jM=`flex flex-col px-1.5 pb-2`,MM=`relative flex flex-col px-1.5 pt-1.5 pb-0.5`,NM=e=>`flex items-center rounded-sm px-2 py-0.75 text-left touch:min-h-10 ${e?`bg-menu text-ink`:`text-muted [&:hover]:bg-hover`}`,PM=`ml-auto -mr-[4.5px] w-5 text-center font-sans text-display leading-none font-normal text-accent normal-nums`,FM=`mr-[7px] size-3.5 flex-none fill-none stroke-current stroke-[1.75] [stroke-linecap:round] [stroke-linejoin:round]`,IM=_(null),LM=(e,t)=>e.replace(/\{(\w+)\}/g,(e,n)=>t[n]??e),RM=e=>`https://github.com/Sma1lboy/rove/releases/tag/v${e}`;function zM(){return B()===`zh`?Pr:Nr}function BM(e,t){return e.request(`update.check`,{force:!0,locale:Ee.get(),channel:t}).then(e=>(IM.set(e),!0),()=>!1)}function VM(){let e=zM(),t=v(IM),{prefs:n}=L_();return!n.updateNotify||!t?.info?.hasUpdate?null:(0,V.jsxs)(`button`,{type:`button`,className:`${U} text-muted ${eM} ${Ge}`,title:LM(e.chip,{version:t.info.latest}),onClick:()=>va(`update`),children:[`↑`,(0,V.jsxs)(`span`,{className:tM,children:[` `,t.info.latest]})]})}function HM({client:e}){let t=zM(),n=v(IM),[r,i]=(0,g.useState)(!1),[a,o]=(0,g.useState)(`release`),[s,c]=(0,g.useState)(null),l=(0,g.useRef)(null);(0,g.useEffect)(()=>{l.current?.focus(),BM(e).finally(()=>i(!0))},[e]);let u=n?.info??null,d=n?.current??``,f=u?.latest??d,p=u?.hasUpdate===!0,m=r&&u===null,h=r&&u!==null&&!p,_=n?.notes??[],y=_[0]?.url??(f?RM(f):null),b=[{id:`release`,key:`R`,label:t.actions.openRelease,detail:y??t.releaseUrlUnavailable},{id:`close`,key:`Q`,label:t.actions.close,detail:t.actions.closeDetail}],x=e=>{if(e===`close`)return ln.set(null);c(y&&window.open(y,`_blank`,`noopener`)!==null?t.statusReleaseOpened:t.statusReleaseError)};return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:l,onKeyDown:e=>{if(e.ctrlKey&&!e.metaKey&&!e.altKey&&e.key.toLowerCase()===`c`&&!window.getSelection()?.toString())return e.preventDefault(),x(`close`);if(e.metaKey||e.ctrlKey||e.altKey)return;let t=b.findIndex(e=>e.id===a);if(e.key===`j`||e.key===`ArrowDown`)o(b[(t+1)%b.length]?.id??`close`);else if(e.key===`k`||e.key===`ArrowUp`)o(b[(t-1+b.length)%b.length]?.id??`close`);else if(e.key===`Enter`)x(a);else if(e.key===`r`)x(`release`);else if(e.key===`q`||e.key===`Escape`)x(`close`);else return;e.preventDefault()},children:[(0,V.jsxs)(`div`,{className:Yj,children:[(0,V.jsx)(`h1`,{className:bM,children:t.pageTitle}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} mono`,onClick:()=>x(`close`),children:$o()?z(`dialog.close`):t.closeHint})]}),(0,V.jsxs)(`p`,{className:`mono ${Xj}`,children:[(0,V.jsx)(`span`,{className:`text-muted`,children:t.current}),` `,(0,V.jsxs)(`b`,{children:[`v`,d]}),` `,(0,V.jsx)(`span`,{className:`text-muted`,children:t.latest}),` `,m?(0,V.jsx)(`b`,{className:`text-muted`,children:t.latestUnknown}):r?(0,V.jsxs)(`b`,{className:p?`text-warning`:`text-success`,children:[`v`,f]}):(0,V.jsx)(`span`,{className:`text-muted`,children:`…`})]}),m&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.registryRetry}),h&&(0,V.jsx)(`p`,{className:`text-success`,children:t.upToDate}),p&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:`rove update`}),(0,V.jsx)(`div`,{className:Zj,children:b.map(e=>(0,V.jsxs)(`button`,{type:`button`,className:Qj(a===e.id),onClick:()=>x(e.id),children:[(0,V.jsxs)(`span`,{className:`mono keys-only text-accent`,children:[`[`,e.key,`]`]}),(0,V.jsx)(`span`,{className:$j,children:e.label}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.detail})]},e.id))}),s&&(0,V.jsx)(`p`,{className:`mono text-accent`,children:s}),p&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:LM(t.changesSectionHeader,{from:d,to:f})}),!r&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.loadingNotes}),r&&p&&_.length===0&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.notesUnavailable}),_.map(e=>(0,V.jsxs)(`section`,{className:nM,children:[(0,V.jsxs)(`h2`,{className:`mono`,children:[`v`,e.version]}),(0,V.jsx)(_M,{body:e.body})]},e.version))]})}var UM=`rove.whatsNewSeenVersion`,WM=e=>e.split(/[.-]/).slice(0,3).map(Number),GM=(e,t)=>{let[n,r]=[WM(e),WM(t)];for(let e=0;e<3;e++)if((n[e]??0)!==(r[e]??0))return(n[e]??0)>(r[e]??0);return!1};function KM(e,t){let n=localStorage.getItem(UM);localStorage.setItem(UM,t),!(!n||!GM(t,n))&&e.request(`release.notes`,{version:t.replace(/-.*$/,``),locale:Ee.get()}).then(e=>W.set((0,V.jsx)(qM,{from:n,to:t,notes:e.notes})),()=>W.set((0,V.jsx)(qM,{from:n,to:t,notes:null})))}function qM(e){let t=zM(),n=(0,g.useRef)(null);return(0,g.useEffect)(()=>n.current?.focus(),[]),(0,g.useEffect)(()=>{let e=e=>{e.key===`q`&&W.set(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,V.jsxs)(sr,{title:t.whatsNew.title,wide:!0,children:[(0,V.jsx)(`p`,{className:`text-muted`,children:LM(t.whatsNew.upgraded,{from:e.from,to:e.to})}),(0,V.jsx)(`div`,{className:rM,children:e.notes?(0,V.jsx)(_M,{body:e.notes.body}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.whatsNew.notesUnavailable})}),(0,V.jsxs)(`div`,{className:nn,children:[(0,V.jsx)(`span`,{className:`mono text-muted ${iM} touch:hidden!`,children:z(`whatsNew.keys`)}),(0,V.jsx)(`a`,{className:$t,href:e.notes?.url??RM(e.to),target:`_blank`,rel:`noopener noreferrer`,children:z(`whatsNew.openRelease`)}),(0,V.jsx)(`button`,{ref:n,type:`button`,className:Pe(),onClick:()=>W.set(null),children:z(`whatsNew.continue`)})]})]})}var JM=(e,t)=>e.replace(`{version}`,t);function YM({client:e}){let t=zM(),n=v(IM),{prefs:r}=L_(),[i,a]=(0,g.useState)(`idle`),o=()=>{a(`checking`),BM(e,r.updateChannel).then(e=>a(e?`done`:`failed`))},s=t=>{a(`idle`),I_(e,`updateChannel`,t)},c=n?.info??null,l=i===`failed`||i===`done`&&c===null,u=i===`done`&&n&&c?c.hasUpdate?JM(t.available,c.latest):t.upToDate:l?t.latestUnknown:void 0,d=l?`text-muted`:c?.hasUpdate?`text-warning`:`text-success`;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(qj,{label:$(`general.updateChannelTitle`),hint:$(`general.updatesHint`),value:r.updateChannel,picks:mA.map(e=>({value:e,label:$(`general.updateChannelName.${e}`)})),onPick:s}),(0,V.jsx)(Gj,{label:$(`general.updateNotify`),hint:$(`general.updateNotifyHint`),checked:r.updateNotify,onChange:t=>void I_(e,`updateNotify`,t)}),(0,V.jsxs)(Wj,{label:$(`general.updates`),hint:$(`general.updateCheckHint`),children:[i===`done`&&c?.hasUpdate&&(0,V.jsx)(H,{variant:`action`,onClick:()=>va(`update`),children:$(`general.updateOpenPage`)}),(0,V.jsx)(H,{variant:`action`,disabled:i===`checking`,onClick:o,children:$(i===`checking`?`general.updateChecking`:`general.updateCheckButton`)})]}),u&&(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:d,children:u}),hint:c?.hasUpdate?(0,V.jsx)(`code`,{className:`font-mono`,children:`rove update`}):void 0,children:i===`done`&&n&&c&&(0,V.jsx)(`span`,{className:`max-w-90 min-w-0 truncate font-mono text-meta text-muted [overflow-wrap:anywhere]`,title:`${t.latest} v${c.latest}`,children:`${t.current} v${n.current} · ${t.latest} v${c.latest}`})})]})}function XM({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`daemon.info`)??null);return(0,g.useEffect)(()=>{Hs(e,`daemon.info`).then(n,()=>n(null))},[e]),(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{title:z(`settings.about.groupRove`),children:[t?.daemonVersion&&(0,V.jsx)(Wj,{label:z(`settings.about.daemon`),hint:z(t.stale?`settings.about.daemonStale`:`settings.about.daemonCurrent`,{version:t.daemonVersion})}),(0,V.jsx)(YM,{client:e})]}),(0,V.jsx)(Uj,{title:z(`settings.about.browser`),children:(0,V.jsx)(Wj,{label:z(`settings.about.signOut`),hint:z(`settings.about.browserHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>void Ma().then(()=>window.location.reload()),children:z(`settings.about.signOut`)})})})]})}async function ZM(e,t){let{taskId:n}=await e.client.request(`task.openScratch`);await BC(e,n,{kind:`engine`,prompt:t}),Sn()}var QM=_(null);function $M({theme:e,mode:t}){let n=e[t],r=(e,t)=>({background:e,width:t});return(0,V.jsxs)(`span`,{className:Nj,style:{background:n.background,borderColor:n.border},"aria-hidden":!0,children:[(0,V.jsxs)(`span`,{className:Pj,style:{background:n.backgroundPanel},children:[(0,V.jsx)(`span`,{className:Ij,style:r(n.primary,`70%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`85%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`55%`)})]}),(0,V.jsxs)(`span`,{className:Fj,children:[(0,V.jsx)(`span`,{className:Ij,style:r(n.text,`90%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`65%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.accent??n.primary,`40%`)}),(0,V.jsx)(`span`,{className:Lj,children:[n.success,n.warning,n.error,n.info].map((e,t)=>(0,V.jsx)(`span`,{className:Rj,style:{background:e}},t))})]})]})}function eN(e){return(0,V.jsxs)(H,{variant:`card`,"aria-pressed":e.active,className:Mj(e.active),onMouseEnter:()=>O_.set(e.theme),onFocus:()=>O_.set(e.theme),onClick:e.onClick,children:[(0,V.jsx)($M,{theme:e.theme,mode:e.mode}),(0,V.jsxs)(`span`,{className:zj,children:[(0,V.jsx)(`span`,{className:`truncate text-ink`,children:e.theme.name}),e.tag&&(0,V.jsx)(`span`,{className:`text-subtle`,children:e.tag})]})]})}function tN({children:e}){return(0,V.jsx)(`div`,{className:Aj,onMouseLeave:()=>O_.set(null),onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||O_.set(null)},children:e})}function nN(e){let{model:t}=e,{client:n}=t,r=v(QM),[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(!1),[u,d]=(0,g.useState)(!1);(0,g.useEffect)(()=>()=>O_.set(null),[]),(0,g.useEffect)(()=>void F_(n).catch(()=>void 0),[n]),(0,g.useEffect)(()=>{QM.get()===null&&n.request(`theme.hosted`).then(e=>QM.set(e),()=>QM.set({themes:[],dir:null}))},[n]);let f=e=>{l(!1),ZM(t,z(`prefs.themeAgentPrompt`,{dir:e})).catch(()=>l(!0))},p=r?.dir??null,m=async e=>{a(e),s(null);try{await n.request(`theme.install`,{name:e}),await F_(n),await I_(n,`theme`,e)}catch{s(e)}finally{a(null)}},h=new Set(e.themes.map(e=>e.name)),_=(r?.themes??[]).filter(e=>!h.has(e.name));return(0,V.jsxs)(Wj,{label:e.label,hint:z(`prefs.themePreviewHint`),stack:!0,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:jj,children:z(`prefs.themeInstalled`)}),(0,V.jsx)(tN,{children:e.themes.map(t=>(0,V.jsx)(eN,{theme:t,mode:e.mode,active:t.name===e.value,tag:t.bundled?void 0:z(`prefs.themeUser`),onClick:()=>t.name!==e.value&&void I_(n,`theme`,t.name)},t.name))})]}),_.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(H,{className:`inline-flex items-center gap-1.5`,"aria-expanded":u,onClick:()=>d(!u),children:[(0,V.jsx)(Fa,{right:!u}),u?z(`prefs.themeHide`):z(`prefs.themeBrowse`,{count:_.length})]}),u&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`m-0 pb-1.5 text-meta font-medium text-subtle mt-2.5`,children:z(`prefs.themeMoreHint`)}),(0,V.jsx)(tN,{children:_.map(t=>(0,V.jsx)(eN,{theme:t,mode:e.mode,active:!1,tag:i===t.name?z(`prefs.themeInstalling`):o===t.name?z(`prefs.themeInstallFailed`):z(`prefs.themeGet`),onClick:()=>i===null&&void m(t.name)},t.name))})]})]}),p&&(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2.5`,children:[(0,V.jsx)(H,{variant:`action`,onClick:()=>f(p),children:z(`prefs.themeAgent`)}),(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:z(c?`prefs.themeAgentFailed`:`prefs.themeAgentHint`)})]})]})}var rN=_({}),iN=``,aN=`(prefers-color-scheme: dark)`;function oN(e){let t=window.matchMedia(aN);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function sN(){return(0,g.useSyncExternalStore)(oN,()=>window.matchMedia(aN).matches)}function cN(){let e=sN();return g_(L_().prefs.themeMode,e)}function lN(e){let t=cN(),n=L_();(0,g.useEffect)(()=>{if(!n.loaded||n.prefs.taskColors!==`on`)return;let r=`${n.prefs.theme}/${t}`;r!==iN&&(iN=r,rN.set({}));let i=()=>{let i=rN.get(),a=e.tasks.get(),o=[...a?.tasks??[],...a?.archived??[]].map(e=>e.id).filter(e=>!(e in i));o.length!==0&&e.client.request(`theme.taskColors`,{theme:n.prefs.theme,mode:t,taskIds:o}).then(e=>{iN===r&&rN.set({...rN.get(),...e.colors})}).catch(()=>void 0)};return i(),e.tasks.subscribe(i)},[e,t,n.loaded,n.prefs.taskColors,n.prefs.theme])}function uN(e){let t=L_(),n=v(rN);return e&&t.prefs.taskColors===`on`?n[e]:void 0}var dN={themeMode:{dark:`appearance.modeDark`,light:`appearance.modeLight`,auto:`appearance.modeAuto`},focusAccent:{primary:`general.accentPrimary`,success:`general.accentSuccess`,info:`general.accentInfo`},splitStyle:{box:`general.splitBox`,line:`general.splitLine`,rail:`general.splitRail`,rule:`general.splitRule`},railFold:{glyphs:`general.railFoldGlyphs`,initials:`general.railFoldInitials`,hairline:`general.railFoldHairline`},workingBorder:{flow:`appearance.borderFlow`,still:`appearance.borderStill`},glyphSet:{braille:`appearance.glyphsBraille`,starburst:`appearance.glyphsStarburst`,ascii:`appearance.glyphsAscii`},runningTitle:{shimmer:`appearance.titleShimmer`,still:`appearance.titleStill`}};function fN({model:e}){let{client:t}=e,n=L_(),r=cN(),i=v(LT),a=(e,n)=>void I_(t,e,n),o=(e,t,r)=>(0,V.jsx)(qj,{label:$(t),hint:r,value:n.prefs[e],picks:R_(n,e).map(t=>({value:t,label:e===`themeMode`&&t===`auto`?z(`prefs.modeAuto`):$(dN[e]?.[String(t)]??String(t))})),onPick:t=>a(e,t)}),s=(e,t,r)=>(0,V.jsx)(Gj,{label:$(t),hint:r,checked:e===`transparent`?n.prefs.transparent:n.prefs[e]===`on`,onChange:t=>a(e,e===`transparent`?t:t?`on`:`off`)});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{children:[(0,V.jsx)(nN,{model:e,label:$(`general.theme`),themes:n.themes,value:n.prefs.theme,mode:r}),o(`themeMode`,`general.themeMode`)]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupColours`),children:[o(`focusAccent`,`general.focusAccent`,$(`general.focusAccentHint`)),s(`taskColors`,`general.taskColors`,z(`settings.appearance.taskColorsNote`)),s(`colorblind`,`general.colorblind`,z(`settings.appearance.colorblindNote`))]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupTasks`),children:[o(`workingBorder`,`general.workingBorder`,z(`settings.appearance.workingBorderNote`)),o(`runningTitle`,`general.runningTitle`),o(`glyphSet`,`general.glyphSet`),o(`railFold`,`general.railFold`,$(`general.railFoldHint`)),(0,V.jsx)(qj,{label:z(`settings.appearance.railGroup`),value:i,picks:FT.map(e=>({value:e,label:z(e===`state`?`settings.appearance.railGroupState`:`settings.appearance.railGroupProject`)})),onPick:RT})]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupTerminal`),hint:z(`prefs.terminalOnly`),children:[s(`transparent`,`general.transparent`),o(`splitStyle`,`general.splitStyle`)]})]})}function pN(e,t,n){if(t===`offline`)return`offline`;if(t===`unsupported`||t===`mismatch`)return`outdated`;if(!e)return`loading`;let r=e.status;return r?r.gh?r.account?r.account===n?`same`:`different`:`signedOut`:`noGh`:e.reason===`failed`||!e.reason?`failed`:e.reason}var mN=2e3,hN=e=>e?.login?.state===`pending`||e?.login?.state===`syncing`;function gN(e){let{client:t}=e,n=EE(e),[r,i]=(0,g.useState)({}),a=n.flatMap(e=>e.state===`online`?[e.alias]:[]).join(`
114
+ `,1)[0]??``;function nO(e){return(0,V.jsx)(`ul`,{className:`${Zt} ${e.className}`,children:e.items.map((t,n)=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(H,{variant:`row`,tabIndex:-1,"aria-pressed":n===e.at,className:Qt({cursor:n===e.at,accent:!1}),onMouseDown:t=>{t.preventDefault(),e.onPick(n)},children:[(0,V.jsxs)(`span`,{className:`text-accent`,children:[`@`,t.name]}),(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,tO(t.text)]})]})},t.name))})}function rO(e){let t=qD(),[n,r]=(0,g.useState)(0),[i,a]=(0,g.useState)(0),[o,s]=(0,g.useState)(null),c=(0,g.useRef)(null),l=QD(e.value,Math.min(n,e.value.length)),u=l?$D(t,l.query):[],d=l!==null&&u.length>0&&o!==l.start,f=Math.min(i,Math.max(0,u.length-1));(0,g.useLayoutEffect)(()=>{let t=c.current,n=e.area.current;t===null||!n||(c.current=null,n.setSelectionRange(t,t),r(t))});let p=t=>{let n=u[t];if(!l||!n)return;let r=eO(e.value,l,n);c.current=r.caret,a(0),e.onChange(r.text)},m=e=>{if(!d||e.nativeEvent.isComposing)return!1;if(e.key===`ArrowDown`||e.key===`ArrowUp`)a(Math.max(0,Math.min(u.length-1,f+(e.key===`ArrowDown`?1:-1))));else if(e.key===`Tab`&&!e.shiftKey||e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey)p(f);else if(e.key===`Escape`)s(l?.start??null),e.stopPropagation();else return!1;return e.preventDefault(),!0};return{list:d?(0,V.jsx)(nO,{items:u,at:f,className:e.listClassName??``,onPick:p}):null,field:{onChange:t=>{r(t.target.selectionStart),a(0),e.onChange(t.target.value)},onSelect:e=>r(e.currentTarget.selectionStart),onKeyDown:t=>{m(t)||!e.onEnter||t.key!==`Enter`||t.shiftKey||t.nativeEvent.isComposing||(t.preventDefault(),e.onEnter())}}}}function iO(e,t){hn(e,void 0,t)}function aO(){hn(void 0,void 0,void 0,void 0,!0)}var oO=`rove.web.newSession.worktree`,sO=``;function cO({model:e,seed:t}){let n=t.repo;B();let r=v(e.selection).taskId,i=e.tasks.get()?.tasks.find(e=>e.id===r)?.repo,a=MC(e,n??i,t.engine),o=Bs(e,`repos.list`)?.repos,s=e=>t.ungrouped?void 0:(t.machine?void 0:n)??i??e?.[0],[c,l]=(0,g.useState)(o??[]),[u,d]=(0,g.useState)(()=>Bs(e,`fs.subdirs`,{path:`~/`})?.home??``),[f,p]=(0,g.useState)(()=>VD(s(o),t)),[m,h]=(0,g.useState)(()=>Object.fromEntries(f.flatMap(t=>{let n=Bs(e,`repo.probe`,{path:t});return n?[[t,n]]:[]}))),_=(0,g.useRef)(new Set),[y,b]=(0,g.useState)(t.ungrouped===!0),x=()=>{b(!0),p([])},[S,C]=(0,g.useState)(()=>HD(s(o),t)),[w,T]=(0,g.useState)(``),[E,D]=(0,g.useState)(``),[O,k]=(0,g.useState)(()=>(t.prompt!==void 0&&(sO=t.prompt),sO)),A=e=>{sO=e,k(e)},[j,ee]=(0,g.useState)(``),[M,N]=(0,g.useState)(``),[P,F]=(0,g.useState)(!1),[I,te]=(0,g.useState)(``),[L,ne]=(0,g.useState)(()=>t.worktree??localStorage.getItem(oO)!==`0`),re=e=>{localStorage.setItem(oO,e?`1`:`0`),ne(e)},[ie,R]=(0,g.useState)(null),{attachments:ae,attach:oe,remove:se,clear:ce}=Xo(e,R),le=(0,g.useRef)(null),ue=EE(e),[de,fe]=(0,g.useState)(t.machine??``),pe=de!==``,me=pe?null:Ko(e=>void oe(e)),he=ue.find(e=>e.alias===de)?.hostLabel||de,ge=fD(e,de);dD(e,ue);let[_e,ve]=(0,g.useState)(null),[ye,be]=(0,g.useState)(``);(0,g.useEffect)(()=>{Promise.all([Hs(e,`repos.list`),Hs(e,`fs.subdirs`,{path:`~/`})]).then(([e,n])=>{l(e.repos),d(n.home);let r=s(e.repos);p(e=>e.length>0||!r?e:VD(r,t)),C(e=>({...e,...HD(r,t)}))}).catch(()=>{})},[e,n]);let xe=!pe&&!L&&f.length===1,Se=f[0]??``;(0,g.useEffect)(()=>{for(let t of f)_.current.has(t)||(_.current.add(t),Hs(e,`repo.probe`,{path:t}).then(e=>h(n=>({...n,[t]:e}))).catch(()=>{}))},[e,f]),(0,g.useEffect)(()=>{!pe||!ge.loaded||de!==t.machine||ve(e=>e??oD(n,ge.repos))},[ge.loaded]),(0,g.useEffect)(()=>le.current?.focus(),[]);let Ce=!pe&&!y&&!xe,we=bD(a,Ce),Te=a.engines.find(e=>e.id===a.engine),Ee=Cs(Te,z(`newSession.modelDefault`)),De=ws(Te,z(`newSession.effortDefault`)),Oe=Ee.some(e=>e.id===j)?j:``,ke=De.some(e=>e.id===M)?M:``,Ae=async t=>{R(null),F(!0),te(z(`newSession.cloning`,{source:t}));try{let n=cs(ss((localStorage.getItem(`rove.web.cloneParent`)||`~/`).trim(),u)),r=await e.client.request(`repo.clone`,{url:t,parentDir:n},te);l(e=>e.includes(r.path)?e:[...e,r.path]),p(e=>e.includes(r.path)?e:As(e,r.path)),b(!1),D(``)}catch(e){R(vD(e))}finally{F(!1),te(``)}},je=async n=>{if(!_e)return R(z(`newSession.needRepo`));if(n&&!O.trim())return R(z(`newSession.needPrompt`));F(!0),te(_e.clone?z(`newSession.cloningOn`,{source:_e.ref,machine:he}):z(`newSession.startingOn`,{machine:he}));try{let r=await _D(e,{pick:_e,machine:de,engine:a.engine,prompt:O.trim(),begin:n,baseRef:ye});sO=``,mn.set(null),r&&e.selectWhenListed(r),t.retryOf&&r&&GD(e,t.retryOf)}catch(e){R(vD(e))}finally{F(!1),te(``)}},Me=async(n=!0,r)=>{if(R(null),pe)return je(n);if(!Se&&!y)return R(z(`newSession.needRepo`));if((n||r)&&!O.trim())return R(z(`newSession.needPrompt`));F(!0);let i=Jo(O.trim(),ae);try{let o=await Promise.all(f.map(t=>e.client.request(`repo.probe`,{path:t}))),s=o.find(e=>!e.ok);if(s)throw Error(s.reason??s.repo);let c,l;if(y)c=await Ns(e.client.request.bind(e.client),a.engine,O,n);else if(xe)c=await Ps(e.client.request.bind(e.client),o[0]?.repo??Se,a.engine,O,n,i);else{let r=await e.client.request(`task.spawn`,Ms({repos:f.map((e,t)=>({repo:o[t]?.repo??e,baseRef:S[e]??``})),branch:w.trim(),engine:a.engine,commandFrom:UD(t,a.engine),engines:n?we.ids:[],prompt:i,begin:n,model:Oe,effort:ke}));c=r.taskIds[0],l=r.groupId}r&&c&&await OD(e.client,c,r,i).then(()=>G(z(`newSession.laterSet`,{time:DD(r)}))).catch(e=>G(vD(e),`error`)),sO=``,ce(),mn.set(null),l?ya(l):c&&e.selectWhenListed(c),t.retryOf&&c&&GD(e,t.retryOf)}catch(e){let t=Os(e);t?(sO=``,ce(),mn.set(null),G(e instanceof Error?e.message:String(e),`error`),ya(t)):R(e instanceof Error?e.message:String(e))}finally{F(!1)}},Ne=rO({value:O,onChange:A,area:le,onEnter:()=>void Me()});return(0,V.jsxs)(`div`,{className:DE,children:[(0,V.jsxs)(`div`,{className:OE,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-title font-semibold text-accent`,children:z(`newSession.title`)}),(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:z(`newSession.tagline`)})]}),(0,V.jsxs)(`form`,{className:kE,onSubmit:e=>{e.preventDefault(),Me()},children:[(0,V.jsxs)(`div`,{className:AE,...me?.drop,children:[!pe&&(0,V.jsx)(Zo,{attachments:ae,onRemove:se}),(0,V.jsx)(`textarea`,{ref:le,className:ME,rows:4,spellCheck:!1,placeholder:z(`newSession.placeholder`),value:O,disabled:P,onPaste:me?.onPaste,...Ne.field}),Ne.list,(0,V.jsxs)(`div`,{className:jE,children:[(0,V.jsx)(`button`,{type:`button`,className:IE(),disabled:P||we.comparing,title:we.comparing?z(`compare.needsPrompt`):void 0,onClick:()=>void Me(!1),children:z(`newSession.createOnly`)}),(0,V.jsx)(`button`,{type:`submit`,className:Pe(),disabled:P,children:z(`newSession.start`)})]})]}),(0,V.jsxs)(`div`,{className:NE,children:[(0,V.jsx)(hD,{machines:ue,value:de,onPick:e=>{fe(e),ve(null),be(``),D(``),R(null),b(!1)}}),(0,V.jsx)($E,{field:`repo`,title:!pe&&f.length>1?z(`newSession.repoCount`,{count:f.length}):z(`newSession.repo`),label:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(YE,{}),ks(pe?_e?[_e.ref]:[]:f)||z(y?`rail.noProject`:`newSession.repo`),_e?.clone&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,z(`newSession.cloneTag`)]})]}),children:t=>(0,V.jsx)(jD,{model:e,saved:pe?ge.repos.map(aD):c,picked:pe?_e?[_e.ref]:[]:f,primary:pe?``:Se,home:pe?``:u,query:E,onQuery:D,onToggle:e=>{if(R(null),!pe)return b(!1),p(t=>As(t,e));ve({ref:e,clone:!1}),t()},onClone:e=>pe?ve({ref:e,clone:!0}):void Ae(e),close:t,remote:pe?{name:he,empty:pD(de,ge),blocked:ge.problem!==``}:void 0,ungrouped:pe?void 0:{on:y,pick:x}})}),(0,V.jsx)(yD,{remote:pe,remotePick:_e,remoteBase:ye,onRemoteBase:be,ungrouped:y,inPlace:xe,onToggleWorktree:()=>re(!L),repos:f,probes:m,bases:S,onBase:(e,t)=>C(n=>({...n,[e]:t})),branchName:w,onBranchName:T}),me&&(0,V.jsxs)(qo,{className:`${IE(ae.length>0)} cursor-pointer`,title:z(`newSession.attachHint`),disabled:P,onFiles:e=>void oe(e),children:[(0,V.jsx)(ZE,{}),z(`newSession.attach`)]}),!pe&&!y&&!we.comparing&&(0,V.jsx)(kD,{disabled:P,onSchedule:e=>void Me(!1,e),onInvalid:R}),(0,V.jsx)(`span`,{className:PE}),(0,V.jsx)(xD,{choice:a,picks:we,available:Ce}),!xe&&!pe&&!y&&!we.comparing&&(Ee.length>0||De.length>0)&&(0,V.jsx)(SD,{models:Ee,model:Oe,onModel:ee,efforts:De,effort:ke,onEffort:N})]}),P&&I&&(0,V.jsx)(`p`,{className:`text-muted`,"data-field":`clone-progress`,children:I}),ie&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,ie]})]}),!pe&&(0,V.jsx)(`button`,{type:`button`,className:`mt-2 self-center px-1.5 py-0.5 text-subtle focus-visible:text-ink touch:mt-0.5 touch:py-2 [&:hover]:text-ink`,onClick:()=>W.set((0,V.jsx)(zD,{model:e,repo:Se||void 0})),children:z(`newSession.moreWays`)})]})}var lO=[`needs`,`working`,`ready`,`idle`],uO=`~state:`;function dO(e){switch(e.rowStatus?.kind){case`attention`:case`needs-input`:case`unseen`:return`needs`;case`busy`:case`running`:return`working`}switch(e.group){case`waiting-on-you`:return`needs`;case`working`:return`working`;case`landing`:case`ready-for-review`:return`ready`}return e.pr?.lifecycle===`open`||e.status===`done`?`ready`:`idle`}var fO=e=>e&&e.kind!==`main`&&!fw(e)?KC(e.repo):void 0;function pO(e,t){let n=pw(e,t.sort),{children:r,nested:i}=vw([{repo:``,label:``,tasks:n}]),a=n.filter(e=>!i.has(e.id)),o=$C(a),s=e=>{let t=[],n=new Set,i=e=>{if(!n.has(e.id)){n.add(e.id),t.push(e);for(let t of r.get(e.id)??[])i(t)}};return i(e),t},c=new Map;for(let e of a){let t=QC(e),n=((t===null?void 0:o.get(t))??[e]).map(s),r=n.flat().map(dO).reduce((e,t)=>lO.indexOf(t)<lO.indexOf(e)?t:e);for(let e of n)for(let t of e)c.set(t.id,r)}return lO.flatMap(e=>{let t=n.filter(t=>c.get(t.id)===e);return t.length===0?[]:[{repo:``,label:z(`rail.state.${e}`),key:`${uO}${e}`,tasks:t}]})}function mO(e){let t=new Set(e.machines.map(e=>e.alias));return{rows:hO(xw(pO([...e.tasks.filter(e=>!e.routine),...e.remote.filter(e=>!e.routine&&e.machine!==void 0&&t.has(e.machine.id))],e),e.query,e.fold).map(e=>{if(e.kind!==`project`)return e;let t=e.id.slice(`project:${uO}`.length);return{id:`state:${t}`,kind:`state`,state:t,label:e.label,count:0}})),groups:[]}}function hO(e){let t=new Map,n=``;for(let r of e)r.kind===`state`?n=r.id:r.kind===`task`&&t.set(n,(t.get(n)??0)+1);return e.map(e=>e.kind===`state`?{...e,count:t.get(e.id)??0}:e)}var gO=new Set([`refused`,`timeout`,`host-key-changed`,`host-key-unverified`,`auth-denied`,`unresolved`,`ssh-failed`,`no-rove`,`no-daemon`,`bad-status`,`handshake`,`no-forwarding`,`lost`]);function _O(e){return e&&gO.has(e)?`machines.reason.${e}`:null}function vO(e,t){return e.filter(e=>e.machine?.id===t&&!e.routine&&!e.deleting)}function yO(e){let t=lO.map(e=>({state:e,tasks:[]}));for(let n of e)t[lO.indexOf(dO(n))]?.tasks.push(n);return t.filter(e=>e.tasks.length>0)}var bO=`flex flex-col font-mono text-meta`,xO=`flex flex-col gap-1 border-t-hairline border-line py-2.5 first:border-t-0 first:pt-0`,SO=`flex flex-wrap items-baseline gap-x-2.5 gap-y-0.5`,CO=`min-w-0 text-ink wrap-anywhere`,wO=`m-0 text-muted wrap-anywhere`,TO=`flex flex-wrap gap-x-3.5 gap-y-1 pt-0.5 whitespace-nowrap`,EO=`mt-1.5 mb-0.5 text-subtle`,DO=`flex min-w-0 items-baseline gap-2 pl-2`,OO=`min-w-0 flex-1 truncate text-left`,kO=`min-w-0 max-w-[55%] flex-none truncate text-muted`;function AO(e){W.set((0,V.jsx)(PO,{model:e}))}function jO({model:e,tasks:t}){let n=t=>{Sn(),e.select(t.id),ga()};return yO(t).map(e=>(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`${EO} m-0`,children:z(`rail.state.${e.state}`)}),e.tasks.map(e=>(0,V.jsxs)(H,{variant:`row`,className:`${DO} w-full rounded-sm py-0.5 hover:bg-hover`,onClick:()=>n(e),children:[(0,V.jsx)(`span`,{className:OO,children:e.label}),(0,V.jsx)(`span`,{className:kO,children:e.branch})]},e.id))]},e.state))}function MO({model:e,alias:t}){let[n,r]=(0,g.useState)(null);return(0,g.useEffect)(()=>{let n=!0;return Hs(e,`machines.repos`,{machine:t}).then(e=>n&&r(e),e=>n&&r({failed:e instanceof Error?e.message:String(e)})),()=>{n=!1}},[e,t]),n?`failed`in n?(0,V.jsx)(`p`,{className:wO,children:z(`machines.reposFailed`,{message:n.failed})}):n.reason?(0,V.jsx)(`p`,{className:wO,children:z(`machines.reposFailed`,{message:n.message??n.reason})}):n.repos.length===0?(0,V.jsx)(`p`,{className:wO,children:z(`machines.noRepos`)}):n.repos.map(e=>(0,V.jsxs)(`div`,{className:DO,children:[(0,V.jsx)(`span`,{className:OO,children:e.id}),(0,V.jsx)(`span`,{className:kO,title:e.primary??e.checkouts[0],children:e.primary??e.checkouts[0]??``})]},e.id)):(0,V.jsx)(`p`,{className:wO,children:z(`machines.loading`)})}function NO(e){let{model:t,row:n,tasks:r,words:i}=e,[a,o]=(0,g.useState)(null),s=n.state===`online`,c=_O(n.reason),l=yO(r).map(e=>`${e.tasks.length} ${z(`rail.state.${e.state}`)}`),u=e=>o(a===e?null:e);return(0,V.jsxs)(`section`,{className:xO,children:[(0,V.jsxs)(`div`,{className:SO,children:[(0,V.jsx)(`span`,{className:`${CO} ${s?``:AT.warning}`,children:xE(n,i)}),(0,V.jsx)(`span`,{className:`text-muted`,children:l.length>0?l.join(` · `):z(`machines.noTasks`)})]}),c&&(0,V.jsx)(`p`,{className:`m-0 text-muted wrap-anywhere`,children:z(c)}),(0,V.jsxs)(`div`,{className:TO,children:[s&&(0,V.jsx)(H,{hit:`tight`,onClick:()=>{Sn(),iO(void 0,n.alias)},children:z(`machines.newHere`)}),r.length>0&&(0,V.jsx)(H,{hit:`tight`,"aria-expanded":a===`tasks`,onClick:()=>u(`tasks`),children:z(a===`tasks`?`machines.hide`:`machines.tasks`)}),s&&(0,V.jsx)(H,{hit:`tight`,"aria-expanded":a===`repos`,onClick:()=>u(`repos`),children:z(a===`repos`?`machines.hide`:`machines.repos`)})]}),a===`tasks`&&(0,V.jsx)(jO,{model:t,tasks:r}),a===`repos`&&(0,V.jsx)(MO,{model:t,alias:n.alias})]})}function PO({model:e}){let t=B(),n=EE(e),r=v(e.remote),i=(t===`zh`?Ar:kr).machine;return(0,V.jsx)(sr,{title:z(`machines.title`),wide:!0,children:(0,V.jsxs)(`div`,{className:`${Ln} ${bO}`,children:[n.length===0&&(0,V.jsx)(`p`,{className:`m-0 text-muted wrap-anywhere`,children:z(`machines.none`)}),n.map(t=>(0,V.jsx)(NO,{model:e,row:t,tasks:vO(r,t.alias),words:i},t.alias))]})})}function FO(e,t,n=300){let r=0,i,a=()=>{r++,i?.(),i=void 0};return{stop:a,run:o=>{a();let s=o.trim();if(s.length<2){t({kind:`idle`});return}let c=r,l=setTimeout(()=>{t({kind:`searching`}),e(s).then(e=>c===r&&t({kind:`done`,query:s,reply:e}),e=>c===r&&t({kind:`failed`,message:e instanceof Error?e.message:String(e)}))},n);i=()=>clearTimeout(l)}}}var IO=`mx-1.5 mt-2 mb-0.5 font-mono text-meta font-semibold normal-nums text-subtle first:mt-0`,LO=`mx-1.5 my-1 text-meta text-muted [overflow-wrap:anywhere]`,RO=e=>`flex w-full min-w-0 cursor-pointer flex-col gap-0.5 rounded-sm px-1.5 py-1.5 text-left text-ink [font:inherit] touch:py-2.5 ${e?`is-selected bg-hover`:``}`,zO=`flex min-w-0 items-baseline gap-2`,BO=`min-w-0 flex-1 truncate text-body`,VO=`whitespace-nowrap text-meta text-muted`,HO=`text-meta text-muted [overflow-wrap:anywhere]`,UO=`rounded-xs bg-accent/25 text-ink`;function WO(e,t){let[n,r]=(0,g.useState)({kind:`idle`});return(0,g.useEffect)(()=>{let n=FO(t=>e.client.request(`sessions.search`,{query:t}),r);return n.run(t),n.stop},[e,t]),n}function GO(e,t){let n=[],r=e.toLowerCase(),i=t.toLowerCase(),a=0;for(let t=r.indexOf(i);i&&t>=0;t=r.indexOf(i,t+i.length))t>a&&n.push(e.slice(a,t)),n.push({hit:e.slice(t,t+i.length),at:t}),a=t+i.length;return n.push(e.slice(a)),n.map(e=>typeof e==`string`?e:(0,V.jsx)(`mark`,{className:UO,children:e.hit},e.at))}function KO({children:e}){return(0,V.jsx)(`h3`,{className:IO,children:e})}function qO({children:e,error:t}){return(0,V.jsx)(`p`,{className:`${LO} ${t?`text-error`:``}`,children:e})}function JO(e){return(0,V.jsx)(H,{variant:`row`,className:RO(e.selected),onMouseEnter:e.onHover,onClick:e.onOpen,children:(0,V.jsxs)(`span`,{className:zO,children:[(0,V.jsx)(`span`,{className:BO,children:e.title}),(0,V.jsx)(`span`,{className:VO,children:e.repo})]})})}function YO(e){let{hit:t}=e;return(0,V.jsxs)(H,{variant:`row`,className:RO(e.selected),onMouseEnter:e.onHover,onClick:e.onOpen,children:[(0,V.jsxs)(`span`,{className:zO,children:[(0,V.jsx)(`span`,{className:BO,children:t.title}),(0,V.jsxs)(`span`,{className:VO,children:[z(t.role===`user`?`search.you`:`search.agent`),` · `,Fo(Date.now()-Date.parse(t.at))]})]}),(0,V.jsx)(`span`,{className:HO,children:GO(t.snippet,e.query)})]})}var XO=_(`issues`);function ZO(e,t,n){return{repo:e.repo,baseBranch:t,prompt:n,worktree:!0}}var QO=.2,$O=[`files`,`chat`,`diff`,`browser`,`quota`];function ek(){return{top:{tabs:[{id:`t1`,kind:`files`}],active:`t1`},bottom:null,ratio:.5,focus:`top`,recent:[`t1`],next:2}}function tk(e){return e.bottom?[[`top`,e.top],[`bottom`,e.bottom]]:[[`top`,e.top]]}function nk(e){let t=e=>Number(e.id.slice(1));return tk(e).flatMap(([,e])=>e.tabs).sort((e,n)=>t(e)-t(n))}function rk(e,t){for(let[n,r]of tk(e)){let e=r.tabs.find(e=>e.id===t);if(e)return{tab:e,name:n,group:r}}return null}function ik(e,t){let n=nk(e).filter(e=>e.kind===t);for(let t of[...e.recent].reverse()){let e=n.find(e=>e.id===t);if(e)return e}return n[0]??null}function ak(e){return e.urls[e.at]??``}function ok(e){return e.slice(e.lastIndexOf(`/`)+1)}function sk(e){try{return new URL(e).host.replace(/^www\./,``)}catch{return e}}function ck(e,t){for(let[n,r]of tk(e))if(r.tabs.some(e=>e.kind===t))return n;return e.bottom?e.focus:`top`}function lk(e,t,n){let r=e.tabs.filter(e=>e.id!==n).map(e=>e.id);for(let e of[...t].reverse())if(r.includes(e))return e;return r[0]??null}function uk(e){let{top:t,bottom:n}=e;n&&n.tabs.length===0&&(n=null),t.tabs.length===0&&n&&([t,n]=[n,null]);let r=new Set([...t.tabs,...n?.tabs??[]].map(e=>e.id)),i=e.recent.filter(e=>r.has(e)),a=e=>e.active&&e.tabs.some(t=>t.id===e.active)?e:{...e,active:lk(e,i)};return{...e,top:a(t),bottom:n&&a(n),recent:i,focus:n?e.focus:`top`}}function dk(e,t,n){return t===`top`?{...e,top:n}:{...e,bottom:n}}function fk(e,t){let n=rk(e,t);if(!n)return e;let{group:r,name:i}=n,a=[...e.recent.filter(e=>e!==t),t];return r.active===t&&e.focus===i&&e.recent.at(-1)===t?e:{...dk(e,i,{...r,active:t}),focus:i,recent:a}}function pk(e){let t=nk(e);if(t.length<=12)return e;let n=new Set(tk(e).map(([,e])=>e.active)),r=t.filter(e=>!n.has(e.id)).sort((t,n)=>e.recent.indexOf(t.id)-e.recent.indexOf(n.id))[0];return r?Ek(e,r.id):e}function mk(e,t,n){let r=`t${e.next}`,i=t===`bottom`&&e.bottom?`bottom`:`top`,a=i===`bottom`&&e.bottom?e.bottom:e.top;return pk(fk(dk({...e,next:e.next+1},i,{...a,tabs:[...a.tabs,n(r)]}),r))}var hk=e=>({id:e,kind:`browser`,urls:[],at:-1});function gk(e,t){return mk(e,t,e=>({id:e,kind:`files`}))}function _k(e,t){return mk(e,t,hk)}function vk(e,t,n){let r=nk(e).find(e=>e.kind===`diff`&&e.path===t);return r?r.kind===`diff`&&r.scope!==n?fk(Ck(e,{...r,scope:n}),r.id):fk(e,r.id):mk(e,ck(e,`diff`),e=>({id:e,kind:`diff`,path:t,scope:n}))}function yk(e,t){let n=nk(e).filter(e=>e.kind===`browser`),r=n.find(e=>ak(e)===t);if(r)return fk(e,r.id);let i=n.find(e=>ak(e)===``);return i?wk(e,i.id,t):wk(mk(e,ck(e,`browser`),hk),`t${e.next}`,t)}function bk(e,t){let n=ik(e,t);return n?fk(e,n.id):t===`diff`?vk(e,`.`,`working`):mk(e,ck(e,t),e=>t===`files`||t===`chat`||t===`quota`?{id:e,kind:t}:hk(e))}function xk(e){let t=e.recent.at(-1),n=t?rk(e,t):null,r=n&&n.group.active===t?t:e.top.active;return(r?rk(e,r)?.tab.kind:null)??null}function Sk(e,t,n){return t&&xk(e)===n?{panel:e,open:!1}:{panel:bk(e,n),open:!0}}function Ck(e,t){let n=e=>({...e,tabs:e.tabs.map(e=>e.id===t.id?t:e)});return{...e,top:n(e.top),bottom:e.bottom&&n(e.bottom)}}function wk(e,t,n){let r=rk(e,t)?.tab;if(r?.kind!==`browser`||ak(r)===n)return e;let i=[...r.urls.slice(0,r.at+1),n].slice(-30);return Ck(e,{...r,urls:i,at:i.length-1})}function Tk(e,t,n){let r=rk(e,t)?.tab;return r?.kind!==`browser`||n===r.at||n<0||n>=r.urls.length?e:Ck(e,{...r,at:n})}function Ek(e,t){let n=rk(e,t);if(!n)return e;let{group:r}=n,i=r.tabs.filter(e=>e.id!==t),a=e.recent.filter(e=>e!==t),o=r.active===t?lk(r,a,t):r.active;return uk({...dk(e,n.name,{tabs:i,active:o}),recent:a})}function Dk(e,t){return nk(e).reduce((e,n)=>n.id===t?e:Ek(e,n.id),e)}function Ok(e,t,n,r){let i=rk(e,t);if(!i)return e;let a=i.group,o=a.tabs.filter(e=>e.id!==t),s=a.tabs.findIndex(e=>e.id===t);if(i.name===n){let c=Math.max(0,Math.min(o.length,(r??o.length)-+(r!==void 0&&r>s)));return fk(c===s?e:dk(e,n,{...a,tabs:[...o.slice(0,c),i.tab,...o.slice(c)]}),t)}let c=e.recent.filter(e=>e!==t),l=dk(e,i.name,{tabs:o,active:a.active===t?lk(a,c,t):a.active}),u=(n===`top`?l.top:l.bottom)?.tabs??[],d=Math.max(0,Math.min(u.length,r??u.length));return fk(uk(dk({...l,recent:c},n,{tabs:[...u.slice(0,d),i.tab,...u.slice(d)],active:t})),t)}function kk(e,t){let n=Math.max(QO,Math.min(.8,t));return Math.abs(n-e.ratio)<.001?e:{...e,ratio:n}}function Ak(e,t,n){let r=new Map(n.map(e=>[e.id,e.kind])),i=[...e.filter(e=>r.has(e)&&!t.includes(e)),...t.filter(e=>r.has(e))],a=i.filter(e=>r.get(e)===`browser`),o=new Set(a.slice(0,Math.max(0,a.length-3)).filter(e=>!t.includes(e)));return i=i.filter(e=>!o.has(e)),i}function jk(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.id!=`string`||!/^t\d+$/.test(t.id))return null;if(t.kind===`files`||t.kind===`chat`||t.kind===`quota`)return{id:t.id,kind:t.kind};if(t.kind===`diff`&&typeof t.path==`string`&&t.path!==``){let e=t.scope===`branch`||t.scope===`task`?t.scope:`working`;return{id:t.id,kind:`diff`,path:t.path,scope:e}}if(t.kind===`browser`&&Array.isArray(t.urls)){let e=t.urls.filter(e=>typeof e==`string`&&e!==``).slice(-30),n=typeof t.at==`number`&&Number.isInteger(t.at)?Math.min(e.length-1,Math.max(-1,t.at)):e.length-1;return{id:t.id,kind:`browser`,urls:e,at:e.length===0?-1:Math.max(0,n)}}return null}function Mk(e,t){if(!e||typeof e!=`object`||!(`tabs`in e)||!Array.isArray(e.tabs))return null;let n=[];for(let r of e.tabs){let e=jk(r);!e||t.has(e.id)||(t.add(e.id),n.push(e))}return{tabs:n,active:`active`in e&&typeof e.active==`string`?e.active:null}}function Nk(e){if(!e||typeof e!=`object`)return null;let t=e,n=new Set,r=Mk(t.top,n);if(!r)return null;let i=Mk(t.bottom,n),a=Math.max(0,...[...n].map(e=>Number(e.slice(1)))),o=typeof t.ratio==`number`&&Number.isFinite(t.ratio)?t.ratio:.5;return uk({top:r,bottom:i,ratio:Math.max(QO,Math.min(.8,o)),focus:t.focus===`bottom`?`bottom`:`top`,recent:Array.isArray(t.recent)?t.recent.filter(e=>typeof e==`string`):[],next:Math.max(a+1,typeof t.next==`number`&&Number.isInteger(t.next)?t.next:0)})}function Pk(e,t){let n=ek(),r=typeof t==`string`&&t!==``?t:``;if(e!==`browser`&&!r)return n;let i=_k(n,`top`),a=r?wk(i,`t2`,r):i;return e===`browser`?a:fk(a,`t1`)}function Fk(e){try{let t=JSON.parse(e??`{}`);return t&&typeof t==`object`&&!Array.isArray(t)?Object.entries(t):[]}catch{return[]}}function Ik(e,t,n){let r=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t));r[t]=n;for(let e of Object.keys(r).slice(0,-50))delete r[e];return r}function Lk(e,t){let n={};for(let[t,r]of Fk(e)){let e=Nk(r);e&&(n[t]=e)}let r=new Map(Fk(t.tab).filter(([,e])=>$O.includes(e))),i=new Map(Fk(t.url)),a=[...new Set([...r.keys(),...i.keys()])].filter(e=>!(e in n));n={...Object.fromEntries(a.map(e=>[e,Pk(r.get(e),i.get(e))])),...n};for(let e of Object.keys(n).slice(0,-50))delete n[e];return n}var Rk=[`files`,`diff`,`browser`];function zk(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.taskId==`string`&&t.taskId!==``&&Rk.includes(t.view)&&typeof t.at==`number`&&(t.url===void 0||typeof t.url==`string`)&&(t.path===void 0||typeof t.path==`string`)}function Bk(e){return e.narrow?{panel:!1,panelOpen:!1,narrow:!0}:{panel:!0,panelOpen:e.panelOpen&&!e.zen,narrow:!1}}function Vk(e,t){return{tab:e.path?`diff`:e.view,...e.view===`browser`&&e.url?{url:e.url}:{},...e.view!==`browser`&&e.path?{diff:e.path}:{},show:t.taskId===e.taskId&&!t.narrow}}function Hk(e,t){return t.url?yk(e,t.url):t.diff?vk(e,t.diff,`working`):bk(e,t.tab)}var Uk=`rove.web.panels`,Wk=`rove.web.panelTab`,Gk=`rove.web.panelUrl`;function Kk(){let e={tab:localStorage.getItem(Wk),url:localStorage.getItem(Gk)},t=Lk(localStorage.getItem(Uk),e);return(e.tab!==null||e.url!==null)&&(localStorage.setItem(Uk,JSON.stringify(t)),localStorage.removeItem(Wk),localStorage.removeItem(Gk)),t}var qk=_(Kk()),Jk=ek();function Yk(e){return v(qk)[e]??Jk}function Xk(e,t){let n=qk.get()[e]??Jk,r=t(n);if(r===n)return;let i=Ik(qk.get(),e,r);qk.set(i),localStorage.setItem(Uk,JSON.stringify(i))}function Zk(e,t){Xk(e,e=>bk(e,t)),Ka.set(!0),Sa()&&Ha.set(t)}function Qk(e,t){let n=Sk(qk.get()[e]??Jk,Ka.get()&&!pn.get(),t);Xk(e,()=>n.panel),Ka.set(n.open),n.open&&pn.get()&&pn.set(!1)}function $k(e){Xk(e.taskId,t=>vk(t,e.path,e.scope)),Ka.set(!0),pn.get()&&pn.set(!1),Sa()&&Ha.set(`diff`)}function eA(e,t){Xk(e,e=>yk(e,t)),Ka.set(!0),pn.get()&&pn.set(!1),Sa()&&Ha.set(`browser`)}function tA(e,t){Xk(e,e=>Ek(e,t));let n=Ha.get();Sa()&&n!==`terminal`&&!ik(qk.get()[e]??Jk,n)&&Zk(e,`files`)}function nA(e,t){let n=Vk(e,{taskId:t,narrow:Sa()});Xk(e.taskId,e=>Hk(e,n)),n.show&&(Ka.set(!0),pn.get()&&pn.set(!1))}var rA=_(null),iA=0;function aA(e,t){rA.set({taskId:e,hit:t,nonce:++iA}),Zk(e,`chat`),pn.get()&&pn.set(!1)}var oA=10;function sA(e,t){let n=e=>e.surface===t?0:e.surface?1:2,r=Qi().filter(n=>$i(n,t)&&n.live?.(e)!==!1).map((e,t)=>({command:e,index:t})).sort((e,t)=>n(e.command)-n(t.command)||Number(e.command.prefix)-Number(t.command.prefix)||e.index-t.index),i=new Set,a=[];for(let{command:e}of r){let t=e.chords[0];!t||e.id===`palette.open`||i.has(e.id)||(i.add(e.id),a.push({command:e,name:Co(e.id),raw:e.prefix?`${ei()} + ${t}`:t}))}return a}function cA(e){let t=document.activeElement instanceof HTMLElement?document.activeElement:null;W.set((0,V.jsx)(uA,{model:e,surface:ta(),origin:t}))}var lA=8;function uA({model:e,surface:t,origin:n}){B();let[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(0),s=(0,g.useRef)(null),c=v(Yr),l=v(e.tasks),u=v(e.remote),d=(0,g.useMemo)(()=>sA(e,t),[e,t,c]).filter(e=>lo(r,e.name,e.raw)),f=(EE(e).length>0?[{name:z(`machines.title`)}]:[]).filter(e=>lo(r,e.name,``)),p=r.trim(),m=p===``?[]:[...l?.tasks??[],...u].filter(e=>!e.routine&&!e.deleting&&[e.label,e.title,e.branch,KC(e.repo)].some(e=>e!==``&&to(p,e))).slice(0,lA),h=v(e.installedMods).has(`issues`),_=[{id:`usage`,name:z(`usage.title`)},...h?[{id:`issues`,name:z(`reviewQueue.palette`),source:`reviews`}]:[]].filter(e=>p===``||to(p,e.name)),y=WO(e,r),b=y.kind===`done`?y.reply.matches:[],x=[...d.map(e=>({kind:`command`,row:e})),..._.map(e=>({kind:`page`,...e})),...f.map(e=>({kind:`machines`,...e})),...m.map(e=>({kind:`task`,task:e})),...b.map(e=>({kind:`hit`,hit:e}))],S=Math.min(a,Math.max(0,x.length-1));(0,g.useEffect)(()=>()=>n?.focus(),[n]),(0,g.useEffect)(()=>{s.current?.querySelector(`.is-selected`)?.scrollIntoView({block:`nearest`})},[S]);let C=t=>{if(t.kind===`machines`){AO(e);return}if(Sn(),n?.focus(),t.kind===`command`){t.row.command.live?.(e)===!1?G(bo(`unavailable`),`error`):t.row.command.run(e);return}if(t.kind===`page`){t.source&&XO.set(t.source),va(t.id);return}t.kind===`task`?e.select(t.task.id):e.select(t.hit.taskId,t.hit.tabId??null),ga(),t.kind===`hit`&&aA(t.hit.taskId,t.hit)},w=e=>{if(e.key===`ArrowDown`)o(Math.min(x.length-1,S+1));else if(e.key===`ArrowUp`)o(Math.max(0,S-1));else if(e.key===`Enter`){let e=x[S];e&&C(e)}else return;e.preventDefault()},T=p!==``&&(m.length>0||p.length>=2),E=0,D=()=>E++;return(0,V.jsx)(sr,{title:bo(`palette`),wide:!0,children:(0,V.jsxs)(`div`,{className:`${Ln} palette`,onKeyDown:w,children:[(0,V.jsx)(`input`,{className:pt,autoFocus:!0,spellCheck:!1,value:r,placeholder:bo(`search`),onChange:e=>{i(e.target.value),o(0)}}),(0,V.jsxs)(`div`,{className:ut,ref:s,style:{maxHeight:`${(T?18:oA)*1.9}em`},children:[x.length===0&&y.kind!==`searching`&&(0,V.jsx)(`p`,{className:`text-muted`,children:bo(`noResults`)}),T&&d.length>0&&(0,V.jsx)(KO,{children:z(`search.commands`)}),d.map(e=>{let t=D();return(0,V.jsx)(`button`,{type:`button`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`command`,row:e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},e.command.id)}),_.map(e=>{let t=D();return(0,V.jsx)(H,{variant:`row`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`page`,...e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},e.id)}),f.map(e=>{let t=D();return(0,V.jsx)(H,{variant:`row`,className:dt(t===S),title:e.name,onMouseEnter:()=>o(t),onClick:()=>C({kind:`machines`,...e}),children:(0,V.jsx)(`span`,{className:ft,children:`${t===S?`› `:` `}${e.name}`})},`machines`)}),m.length>0&&(0,V.jsx)(KO,{children:z(`search.tasks`)}),m.map(e=>{let t=D();return(0,V.jsx)(JO,{title:e.label,repo:KC(e.repo),selected:t===S,onHover:()=>o(t),onOpen:()=>C({kind:`task`,task:e})},e.id)}),y.kind!==`idle`&&(0,V.jsx)(KO,{children:z(`search.inConversations`)}),y.kind===`searching`&&(0,V.jsx)(qO,{children:z(`search.searching`)}),y.kind===`failed`&&(0,V.jsx)(qO,{error:!0,children:y.message}),y.kind===`done`&&b.length===0&&(0,V.jsx)(qO,{children:z(`search.none`,{query:y.query})}),b.map(e=>{let t=D();return(0,V.jsx)(YO,{hit:e,query:y.kind===`done`?y.query:``,selected:t===S,onHover:()=>o(t),onOpen:()=>C({kind:`hit`,hit:e})},`${e.taskId}:${e.tabId??``}:${e.at}:${t}`)}),y.kind===`done`&&y.reply.truncated&&(0,V.jsx)(qO,{children:z(`search.truncated`)}),y.kind===`done`&&y.reply.skipped.length>0&&(0,V.jsx)(qO,{children:z(`search.skipped`,{count:y.reply.skipped.length})})]}),(0,V.jsx)(`p`,{className:`keys-only text-muted`,children:bo(`run`)})]})})}var dA=_(null);function fA(e){let t=(document.activeElement?.closest(`.rail`)==null?null:dA.get())??e.selection.get().taskId;return e.tasks.get()?.tasks.find(e=>e.id===t)??null}t(((e,t)=>{t.exports={}}))();var pA={$schema:`https://json.schemastore.org/package.json`,name:`@sma1lboy/rove`,version:`0.9.277`,description:`Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.`,keywords:[`terminal`,`tui`,`cli`,`multiplexer`,`ai-agents`,`coding-agent`,`ai-coding-assistant`,`agentic-ai`,`parallel-agents`,`git-worktree`,`claude-code`,`codex`,`llm`,`developer-tools`],type:`module`,packageManager:`bun@1.3.13`,bin:{rove:`dist/cli/rove.js`},files:[`dist/cli`,`dist/completions`,`dist/web`,`dist/web-ui`,`dist/skills`,`dist/*.wav`,`README.md`,`LICENSE`],publishConfig:{access:`public`},repository:{type:`git`,url:`git+https://github.com/Sma1lboy/rove.git`},homepage:`https://rove.run`,bugs:{url:`https://github.com/Sma1lboy/rove/issues`},engines:{bun:`>=1.3.11`},scripts:{dev:`ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts`,"dev:mock":`ROVE_DEV=1 bun ./src/tui-react/mock/host.tsx`,"dev:sandbox":`bun run scripts/dev-sandbox.ts run`,"dev:sandbox:reset":`bun run scripts/dev-sandbox.ts reset`,build:`bun run scripts/build.ts`,"build:rubric":`bun run scripts/build-tier-rubric.ts`,compile:`bun run scripts/compile.ts`,typecheck:`tsc --noEmit`,"check-i18n":`bun run scripts/check-i18n.ts`,test:`bun run test:fast && bun run test:socket`,"perf:golden":`bun scripts/perf-golden.ts`,"pty:soak":`bun scripts/pty-soak.ts`,"test:fast":`vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8`,"test:socket":`ROVE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests`,"test:socket:coverage":`ROVE_INCLUDE_SOCKET=1 ROVE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests`,"test:behavior":`ROVE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests`,"test:render":`bun scripts/render-track.mjs`,coverage:`vitest run --coverage --passWithNoTests`,bench:`vitest bench --run`,lint:`biome check .`,knip:`knip-bun`,postinstall:`bun run scripts/check-preview-deps.ts || true`,prepublishOnly:`bun run typecheck && bun run build`,"plugin-sandbox":`bun run scripts/plugin-sandbox.ts`},"//":`biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).`,dependencies:{"@ansi-tools/parser":`^1.0.15`,"@opentui/core":`0.4.3`,"@opentui/react":`0.4.3`,"@xterm/addon-serialize":`^0.14.0`,"@xterm/addon-unicode11":`^0.9.0`,"@xterm/headless":`^6.0.0`,react:`^19.2.8`,"smol-toml":`^1.7.1`,ws:`^8.21.3`},optionalDependencies:{"node-pty":`^1.1.0`},devDependencies:{"@biomejs/biome":`1.9.4`,"@sma1lboy/rove-daemon":`0.7.23`,"@tsconfig/bun":`1.0.11`,"@types/bun":`1.3.14`,"@types/node":`25.6.2`,"@types/react":`^19.2.0`,"@vitest/coverage-v8":`2.1.9`,knip:`^6.14.2`,"react-devtools-core":`^7.0.1`,"rove-bridge":`0.0.38`,"rove-weixin":`0.0.38`,typescript:`5.8.2`,vitest:`2.1.9`},trustedDependencies:[]};pA.version,pA.name;var mA=[`latest`,`next`,`nightly`],hA={autoRouting:{title:`Auto routing`,hint:"Routing by depth: a task says how deep the work is — swift, standard, deep — and this table says which engine, model and reasoning effort that depth runs on. Pick a depth in the new-task dialog (or `rove api add --tier`) and Rove fills those three fields from the row; you still see them and can change them before the task starts. enter (or click) a row to point it somewhere else, with the same picker a task uses. A row whose target cannot start says why here, not at launch.",unconfigured:`Auto routing is off: a depth has nowhere to route — its engine is blank. Point it somewhere below, or remove the empty autoRouting.<tier>.engine from state.json.`,engineDefault:`engine default`,ready:`● ready`,unavailable:`! unavailable — {reason}`,classifierTitle:`Classifier`,classifierHint:"The rows above say what each depth RUNS. This says who CHOOSES one: switch it on and `rove api add --tier auto` reads the task's first message and picks the depth for you. It is off by default, it is never required, and it can never fail a create — no key, no network, a timeout, or an answer it is not confident enough about all leave you on the depth you would have had.",classifierDataFlow:"! Turning the classifier on sends the task's first message to a third party that is NOT the engine vendor you picked — TypeSafe System One for `jev`, or whatever address you point `custom` at. It reads the text before your engine does. Nothing leaves this machine while it is off.",classifierLabel:`Choose with`,classifierOff:`off`,classifierCustomLabel:`custom`,classifierOffHint:`— nothing is sent anywhere`,classifierJevHint:`— TypeSafe System One, billed to your own key`,classifierCustomHint:`— your endpoint: POST the text, answer with a depth and a confidence`,endpointLabel:`Endpoint`,endpointUnset:`(none — enter one, then set Choose with to custom)`,endpointTitle:`Custom classifier endpoint`,endpointField:`URL`,endpointInvalidTitle:`Not a URL`,endpointInvalidBody:`The endpoint has to start with https://, or http:// for a loopback address (127.0.0.1, localhost, ::1) — over a network, plain http would carry the task's first 1,200 characters in cleartext. Leave it empty to clear it.`,thresholdLabel:`Confidence floor`,thresholdHint:`— below this, the depth is left alone`,thresholdTitle:`Confidence floor`,thresholdField:`0 to 1`,thresholdInvalidTitle:`Not a confidence`,thresholdInvalidBody:`The floor is a number between 0 and 1. 0.5 is the shipped default.`,keyLabel:`API key`,keyStored:`stored {hint} — enter to replace, empty to clear`,keyFromEnv:"from ${env} — the environment wins over a stored key",keyNone:`not set — enter to paste one`,keyTitle:`{env}`,keyPlaceholder:`paste the key; leave empty to clear the stored one`,keySaved:`● key stored in ~/.rove/secrets.json (owner-only, never in state.json)`,keyCustomUnused:`● no Authorization header is sent to a custom endpoint — set autoRouting.classifierCustomKeyEnv to the variable holding its key if it needs one`,keyNoVariableTitle:`No key variable for this endpoint`,keyNoVariableBody:`A custom classifier endpoint is sent no Authorization header until autoRouting.classifierCustomKeyEnv names the variable its key lives in. Set that first — a key stored under a name nothing reads is a key at rest for no purpose.`,keyWriteFailedTitle:`Key not saved`,keyWriteFailedBody:`~/.rove/secrets.json could not be written: {reason}. Check directory permissions and disk space, then save again.`,keyMissing:`! no key — nothing is chosen and tasks keep their usual depth`,keyPresentEnv:"● key read from ${env} in this process's environment"}},gA={autoRouting:{title:`自动路由`,hint:"按深度路由:任务说明这活有多深——轻快、标准、深入——这张表说明那一档跑在哪个引擎、哪个模型、哪个推理强度上。在新建任务对话框里选一档(或 `rove api add --tier`),Rove 就照那一行填进这三个字段;任务启动前你仍然看得见、改得了。enter(或点击)某一行,用和任务一样的选择器把它指到别处。目标起不来的行会在这里说明原因,而不是等到启动时才炸。",unconfigured:`自动路由已关闭:有一档无处可去——它的引擎是空的。在下面把它指到某个引擎,或从 state.json 里删掉空的 autoRouting.<tier>.engine。`,engineDefault:`引擎默认`,ready:`● 可用`,unavailable:`! 不可用——{reason}`,classifierTitle:`分类器`,classifierHint:"上面几行说的是每一档**跑什么**,这里决定**由谁来选**:打开之后,`rove api add --tier auto` 会读任务的第一句话替你选档。默认关着,从来不是必需的,也永远不会让建 task 失败——没 key、断网、超时、或者它自己没把握,都只是让你停在本来就会用的那一档上。",classifierDataFlow:"! 打开分类器,任务的第一句话会发给一个**不是你选的那个引擎厂商**的第三方——`jev` 是 TypeSafe System One,`custom` 是你自己填的地址。它比你的引擎更早读到这段文字。关着的时候什么都不发。",classifierLabel:`选档方式`,classifierOff:`关`,classifierCustomLabel:`自定义`,classifierOffHint:`——不向任何地方发送`,classifierJevHint:`——TypeSafe System One,走你自己的 key 计费`,classifierCustomHint:`——你自己的接口:POST 那段文本,返回一个档位加一个置信度`,endpointLabel:`接口地址`,endpointUnset:`(未填——先填一个,再把「选档方式」切到自定义)`,endpointTitle:`自定义分类器接口`,endpointField:`URL`,endpointInvalidTitle:`不是一个 URL`,endpointInvalidBody:`接口地址要以 https:// 开头;http:// 只在回环地址(127.0.0.1、localhost、::1)上接受——发到网络上的话,明文 http 会把任务的前 1200 个字符原样带走。留空则清除。`,thresholdLabel:`置信度下限`,thresholdHint:`——低于这个值就不动档位`,thresholdTitle:`置信度下限`,thresholdField:`0 到 1`,thresholdInvalidTitle:`不是一个置信度`,thresholdInvalidBody:`下限是 0 到 1 之间的数。出厂默认 0.5。`,keyLabel:`API key`,keyStored:`已存 {hint}——enter 可替换,留空清除`,keyFromEnv:"来自环境变量 ${env}——环境变量优先于存起来的那个",keyNone:`未设置——enter 粘贴一个`,keyTitle:`{env}`,keyPlaceholder:`粘贴 key;留空则清除已存的那个`,keySaved:`● key 存在 ~/.rove/secrets.json(仅本人可读,不会进 state.json)`,keyCustomUnused:`● 自定义接口不会收到 Authorization 头——它若需要凭据,把 autoRouting.classifierCustomKeyEnv 指向存它的变量`,keyNoVariableTitle:`这个接口还没有 key 变量`,keyNoVariableBody:`在 autoRouting.classifierCustomKeyEnv 指定存 key 的变量之前,自定义分类器接口不会收到任何 Authorization 头。先设那个——存在一个没人读的名字下面的 key,只是白白落在盘上。`,keyWriteFailedTitle:`key 没存下`,keyWriteFailedBody:`写不了 ~/.rove/secrets.json:{reason}。请检查目录权限和磁盘空间,再次保存。`,keyMissing:`! 没有 key——不会替你选档,任务保持原来的档位`,keyPresentEnv:"● key 来自本进程环境变量 ${env}"}},_A={dev:{reset:`Reset UI state`,resetHint:`Clears ~/.config/rove/state.json and ~/.rove/tasks.json, then quits Rove — relaunch to start fresh. Working session list, pane sizes, theme, model picks all reset. Worktrees on disk and engine session history are not touched.`,resetButton:`[enter] Reset`,restart:`Restart backend`,restartHint:`Stops the Rove daemon and relaunches this window on the installed build — picks up daemon / orchestrator / engine edits without quitting by hand. Running engine sessions live in the PTY host and survive it; other attached Rove windows reconnect on their own.`,restartButton:`[enter] Restart`,reload:`Reload settings`,reloadHint:"Applies hand edits to ~/.config/rove/state.json (from `rove config`) to this window without a restart.",reloadButton:`[enter] Reload`,reloadDone:`Reloaded: {count} changed.`,reloadUnchanged:`Already matches state.json; nothing changed.`,reloadFailed:`state.json could not be read, nothing changed: {error}`,doctorHint:"Daemon wedged or unresponsive? Restart backend above does it from here; from a shell it is `rove daemon restart`. Hosted engine sessions stay alive across a daemon restart.",experimental:`Experimental`,remoteHint:"Remote projects (SSH): register a project whose git worktrees live on another host, driven from this local Rove. Unfinished — Hosted PTY engine launch over SSH is not implemented, and file/diff panes still degrade. Enables `rove add --remote`.",remote:`Remote projects`,autoStatusHint:`Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.`,autoStatus:`Auto status flow`,dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`rove api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`rove api dispatch`). Web-hosted sessions receive the relays today.",dispatcher:`Field-notes dispatcher`}},vA={dev:{reset:`重置 UI 状态`,resetHint:`清空 ~/.config/rove/state.json 和 ~/.rove/tasks.json,然后退出 Rove——重新启动即可从头开始。工作会话列表、面板尺寸、主题、模型选择都会重置。磁盘上的 worktree 和引擎会话历史不受影响。`,resetButton:`[enter] 重置`,restart:`重启后端`,restartHint:`停止 Rove daemon,并以已安装的版本重新启动当前窗口——无需手动退出即可应用 daemon / orchestrator / engine 的改动。正在运行的引擎会话由 PTY host 托管,不受影响;其他已连接的 Rove 窗口会自行重连。`,restartButton:`[enter] 重启`,reload:`重新加载设置`,reloadHint:"把对 ~/.config/rove/state.json 的手动修改(来自 `rove config`)应用到当前窗口,无需重启。",reloadButton:`[enter] 重新加载`,reloadDone:`已重新加载:{count} 项有变化。`,reloadUnchanged:`已与 state.json 一致,没有变化。`,reloadFailed:`无法读取 state.json,未做任何改动:{error}`,doctorHint:"daemon 卡住或无响应?上面的「重启后端」就能在这里完成;在 shell 里则是 `rove daemon restart`。Hosted PTY 引擎会话不会因 daemon 重启而退出。",experimental:`实验性`,remoteHint:"远程项目(SSH):注册一个 git worktree + 引擎都通过 SSH 跑在另一台主机上、由本地 Rove 驱动的项目。尚未完成——文件/diff 面板对远程仍会降级。启用 `rove add --remote`。",remote:`远程项目`,autoStatusHint:`自动状态流转:backlog 任务在其引擎开始一轮时移到 in_progress,新会话会拿到一条系统提示,告诉 agent 完成后自行设为 in_review。绝不触碰 done/canceled。`,autoStatus:`自动状态流转`,dispatcherHint:"现场笔记调度器:任务会话提交一行经验(`rove api note`),daemon 将每条转发给仓库的主会话,主会话再把它们转达给能受益的进行中任务(`rove api dispatch`)。目前由 Web 托管的会话会收到转达。",dispatcher:`现场笔记调度器`}},yA={engines:{title:`Engines`,hint:`Engines Rove can start on this machine. New tasks start with the default engine; switch an engine off to stop offering it.`,keys:`space available · d default · enter launch command · r rename · x reset/remove`,customTag:`custom`,available:`available`,off:`off`,defaultMark:`default`,makeDefault:`Make default`,status:{checking:`Checking…`,unknown:`Status unknown`,ready:`Ready`,notInstalled:`Not installed`,notOnPath:`Not on PATH`,signIn:`Sign in needed`,integrationMissing:`Integration not installed`,integrationOutdated:`Integration outdated`,integrationBlocked:`Integration blocked`},detail:{program:`Program`,command:`Command`,signIn:`Sign-in`,reporting:`Live status`,adapter:`Adapter`,programFound:`{binary} found at {path}.`,programMissing:`{binary} is not on PATH. Install the engine's CLI, or point its launch command at it.`,programUnknown:`Rove could not check for {binary}.`,commandDefault:`{command} (the default)`,commandCustom:`{command} (yours)`,signedIn:`Signed in.`,signedInAs:`Signed in as {who}.`,apiKey:`An API key is configured.`,token:`A token is configured ({source}).`,signedOut:`Not signed in. Sign in with the engine's own CLI.`,signInUnknown:`Rove can't see whether this engine is signed in.`,signInFailed:`Sign-in check failed: {error}`,hooksInstalled:`Rove's hooks are installed, so tabs report their state as it changes.`,hooksOutdated:`Rove's hooks are from an older version; reinstall them under Engine integrations.`,hooksMissing:`Rove's hooks are not installed; install them under Engine integrations.`,hooksAwaitEngine:`Rove's hooks can be installed once the engine is.`,hooksUnsupported:`This engine has no hooks for Rove to install.`,hooksBlocked:`Rove can't write its hooks into {file}: {reason}`,hooksBlockedHere:`Rove can't write its hooks into the engine's config: {reason}`,markersYes:`It leaves turn-complete markers that Rove reads back.`,markersNo:`It leaves no turn-complete markers.`,screenYes:`Screen rules cover what the hooks don't.`,screenNo:`No screen rules.`,screenNotNeeded:`No screen rules; the hooks report everything.`,adapterDeclared:`Borrows the {protocol} adapter.`,adapterGeneric:`Generic adapter: no transcript reader, sign-in check or resume.`,skill:`Rove skill`,skillInstalled:`Installed in {dir}.`,skillInstalledHere:`Installed and current.`,skillOutdated:`From an older Rove; reinstall it under Rove agent skill.`,skillMissing:`Not installed; install it under Rove agent skill.`},skill:{title:`Rove agent skill`,hint:`Teaches the agent in each engine to drive Rove itself (rove api): start tasks, read other sessions, message them.`,install:`Install ({count})`,noEngines:`No engine here takes the skill`,failed:`Install failed: {reason}`,bannerTitle:`ROVE SKILL NOT INSTALLED`,bannerHint:`{engines} can't drive Rove yet (start tasks, read other sessions). Click here to install.`,bannerHintWeb:`{engines} can't drive Rove yet (start tasks, read other sessions).`},integrations:{title:`Engine integrations`,hint:`Hooks Rove writes into each engine's own config, so a tab shows working, waiting or done the moment it happens.`,summary:`{installed} of {total} installed`,install:`Install missing ({count})`,upToDate:`All up to date`,remove:`Remove all ({count})`,noneInstalled:`Nothing to remove`},addEngine:`+ Add engine`,launchCommandTitle:`{name} launch command`,displayNameTitle:`{name} display name (blank = default)`,addTitle:`Add engine`,addStepTitle:`Add engine · {id}`,protocolTitle:`Add engine · {id} — protocol`,protocolNone:`None — generic adapter`,protocolFooter:`↑↓ choose · enter pick · esc cancel`,protocolRow:`protocol {protocol}`,protocolGeneric:`generic`,idPlaceholder:`lowercase slug, e.g. aider`,commandPlaceholder:`e.g. aider --model sonnet`,hookTrustHint:`Open {command} in the engine and approve hooks yourself. Written hooks are not proof of trust.`,readiness:`CLI: {cli} · login: {login} · hooks: {hooks}`,cliReady:`available`,cliMissing:`missing; install the engine CLI`,loginReady:`detected`,loginMissing:`sign in with the engine CLI`,readinessUnknown:`not observable`,hooksWritten:`written`,hooksMissing:`not written; Settings → Engines`,hooksOutdated:`outdated; Settings → Engines`,hookWaiting:`No hook event received yet. After approval, send a short prompt to verify activity.`,hookReceived:`Hook event recorded for this tab. Send a short prompt to check current reporting; current trust is not inferred.`,readinessFailed:`Readiness check unavailable; run rove doctor. No authorization is inferred.`},accounts:{checking:`Checking…`,notLoggedIn:`○ Not logged in`,loggedIn:`● Logged in: {email}`,apiKeyConfigured:`● API key configured`,chatgptLogin:`● ChatGPT login: {email}`,tokenConfigured:`● Token configured ({source})`,detected:`● Login detected`}},bA={engines:{title:`引擎`,hint:`Rove 能在这台机器上启动的引擎。新任务默认用「默认」引擎;关掉某个引擎,选引擎时就不再列出它。`,keys:`space 可用 · d 设为默认 · enter 启动命令 · r 重命名 · x 重置/移除`,customTag:`自定义`,available:`可用`,off:`已关`,defaultMark:`默认`,makeDefault:`设为默认`,status:{checking:`检查中…`,unknown:`状态未知`,ready:`就绪`,notInstalled:`未安装`,notOnPath:`不在 PATH 上`,signIn:`需要登录`,integrationMissing:`未安装接入`,integrationOutdated:`接入已过期`,integrationBlocked:`接入被拒绝`},detail:{program:`程序`,command:`命令`,signIn:`登录`,reporting:`实时状态`,adapter:`适配器`,programFound:`{binary} 位于 {path}。`,programMissing:`{binary} 不在 PATH 上。请安装引擎 CLI,或把启动命令指向它。`,programUnknown:`Rove 无法检查 {binary}。`,commandDefault:`{command}(默认)`,commandCustom:`{command}(自定义)`,signedIn:`已登录。`,signedInAs:`已登录:{who}。`,apiKey:`已配置 API key。`,token:`已配置 Token({source})。`,signedOut:`未登录。请用引擎自己的命令行登录。`,signInUnknown:`Rove 无法得知该引擎是否已登录。`,signInFailed:`登录检查失败:{error}`,hooksInstalled:`Rove 的钩子已安装,标签页的状态会实时上报。`,hooksOutdated:`Rove 的钩子来自旧版本;请在「引擎接入」里重新安装。`,hooksMissing:`Rove 的钩子未安装;请在「引擎接入」里安装。`,hooksAwaitEngine:`引擎安装后才能装 Rove 的钩子。`,hooksUnsupported:`该引擎没有可供 Rove 安装的钩子。`,hooksBlocked:`Rove 无法把钩子写入 {file}:{reason}`,hooksBlockedHere:`Rove 无法把钩子写入引擎配置:{reason}`,markersYes:`它会留下回合完成标记,Rove 可以读回。`,markersNo:`它不留下回合完成标记。`,screenYes:`读屏规则兜底钩子覆盖不到的状态。`,screenNo:`没有读屏规则。`,screenNotNeeded:`没有读屏规则;钩子已报全所有状态。`,adapterDeclared:`借用 {protocol} 适配器。`,adapterGeneric:`通用适配器:没有会话记录读取、登录检查和恢复。`,skill:`Rove 技能`,skillInstalled:`已安装在 {dir}。`,skillInstalledHere:`已安装,是最新版。`,skillOutdated:`来自旧版 Rove;请在「Rove 智能体技能」里重新安装。`,skillMissing:`未安装;请在「Rove 智能体技能」里安装。`},skill:{title:`Rove 智能体技能`,hint:`教会各引擎里的智能体自己操作 Rove(rove api):开任务、读其他会话、给它们发消息。`,install:`安装({count})`,noEngines:`这台机器上没有能装技能的引擎`,failed:`安装失败:{reason}`,bannerTitle:`ROVE 技能未安装`,bannerHint:`{engines} 还不能操作 Rove(开任务、读其他会话)。点这里安装。`,bannerHintWeb:`{engines} 还不能操作 Rove(开任务、读其他会话)。`},integrations:{title:`引擎接入`,hint:`Rove 写进各引擎自身配置的钩子,让标签页在工作、等待、完成的那一刻就显示出来。`,summary:`已安装 {installed}/{total}`,install:`安装缺失的({count})`,upToDate:`全部已是最新`,remove:`全部移除({count})`,noneInstalled:`没有可移除的`},addEngine:`+ 添加引擎`,launchCommandTitle:`{name} 的启动命令`,displayNameTitle:`{name} 的显示名称(留空 = 默认)`,addTitle:`添加引擎`,addStepTitle:`添加引擎 · {id}`,protocolTitle:`添加引擎 · {id} —— 协议`,protocolNone:`无 —— 通用适配器`,protocolFooter:`↑↓ 选择 · enter 确认 · esc 取消`,protocolRow:`协议 {protocol}`,protocolGeneric:`通用`,idPlaceholder:`小写短名,如 aider`,commandPlaceholder:`如 aider --model sonnet`,hookTrustHint:`在引擎中打开 {command},由你自行批准 hooks。写入不代表已授权。`,readiness:`CLI:{cli} · 登录:{login} · hooks:{hooks}`,cliReady:`可用`,cliMissing:`缺失;请安装引擎 CLI`,loginReady:`已检测到`,loginMissing:`请通过引擎 CLI 登录`,readinessUnknown:`无法观测`,hooksWritten:`已写入`,hooksMissing:`未写入;设置 → 引擎`,hooksOutdated:`已过时;设置 → 引擎`,hookWaiting:`尚未收到 hook 事件。授权后发送一条简短提示,验证活动状态。`,hookReceived:`已记录此标签页的 hook 事件。发送简短提示以检查当前上报;不据此推断当前授权。`,readinessFailed:`无法检查就绪状态;请运行 rove doctor。不会据此推断已授权。`},accounts:{checking:`检查中…`,notLoggedIn:`○ 未登录`,loggedIn:`● 已登录: {email}`,apiKeyConfigured:`● 已配置 API key`,chatgptLogin:`● ChatGPT 登录: {email}`,tokenConfigured:`● 已配置 Token ({source})`,detected:`● 检测到登录`}},xA={plugins:{title:`Plugins`,hint:"Rove's first-party mods first: enter (or click) installs or uninstalls one, and uninstalling keeps its data on disk. Then the plugins registered in ~/.rove/plugins.json: enter toggles one on or off — the daemon watches the file, so the change applies live. Rows indented under a plugin are the settings it declares; enter edits one, and the value reaches the plugin on its next run. Install and remove them from the shell: `rove plugin install <owner/repo>`, `rove plugin link <dir>`.",empty:"Kanban and Issues are first-party mods: enter (or click) installs one. No other plugins registered; add one with `rove plugin install <owner/repo>` — browse the `rove-plugin` topic on GitHub.",sourceLink:`linked {path}`,sourceGithub:`{spec}`,sourceBuiltIn:`first-party mod · not installed`,sourceBuiltInInstalled:`first-party mod · installed`,updateAvailable:`update available — rove plugin update`,declares:`{actions} actions · {events} events · {panes} panes`,declaresWithEngines:`{actions} actions · {events} events · {panes} panes · {engines} engines`,declaresPages:`· {pages} pages`,pageFailed:`page {detail}`,manifestUnreadable:`manifest unreadable; check the rove-plugin.toml path and TOML syntax`,unsupportedPlatform:`· not supported on this platform`,noHooks:`· no hooks declared`,lastRun:`· last run {label} {status} {ago} ago`,neverRun:`· never run`,runOk:`ok`,runRunning:`still running`,runFailed:"failed to start; inspect `rove plugin log <id>`",runExit:`exit {code}`,settingUnset:`(unset — enter to edit)`,settingInvalidTitle:`Not a number`,settingInvalidBody:`{label} only accepts a number. Keeping the previous value.`},marketplace:{title:`Marketplace`,hint:"Plugins published under the `rove-plugin` topic on GitHub, most-starred first. enter (or click) shows what the install would run and asks before running any of it. The listing is re-queried each time you open this section.",loading:`Searching GitHub…`,empty:`No plugins listed.`,offline:`GitHub is unreachable — showing first-party plugins only. Re-open this section to retry.`,installedTag:`installed`,firstParty:`first-party`,preparing:`cloning {ref}…`,installing:`building and registering {name}…`,installed:`installed {id} v{version} — it is enabled, and appears under Plugins.`,cancelled:`install cancelled; nothing was run.`,failed:`install failed: {error}. Check the build output and retry from Marketplace.`,alreadyInstalled:`already installed as {id} — manage it under Plugins.`,confirmTitle:`Install {name}?`,confirmInstall:`install`,previewSource:`source: {source}`,previewCommands:`Commands this plugin declares:`,previewNoCommands:`This plugin declares no commands.`,previewWarning:`warning: {warning}`,previewTrust:`Installing runs the build commands above, and the rest run later on the events they declare. They run as you, with your environment, and nothing is sandboxed.`}},SA={plugins:{title:`插件`,hint:"先列 Rove 官方 mod:enter(或点击)安装或卸载,卸载后数据仍留在磁盘上。再列在 ~/.rove/plugins.json 里注册的插件:enter 切换启用/禁用——daemon 监听该文件,改动实时生效。插件下方缩进的行是它声明的设置项,enter 编辑,新值在插件下次运行时生效。安装与移除在 shell 里做:`rove plugin install <owner/repo>`、`rove plugin link <dir>`。",empty:"Kanban 和 Issues 是官方 mod:enter(或点击)安装。尚未注册其他插件;用 `rove plugin install <owner/repo>` 安装一个——可在 GitHub 的 `rove-plugin` 话题下浏览。",sourceLink:`本地链接 {path}`,sourceGithub:`{spec}`,sourceBuiltIn:`官方 mod · 未安装`,sourceBuiltInInstalled:`官方 mod · 已安装`,updateAvailable:`有新版本 — rove plugin update`,declares:`{actions} 个动作 · {events} 个事件 · {panes} 个面板`,declaresWithEngines:`{actions} 个动作 · {events} 个事件 · {panes} 个面板 · {engines} 个引擎`,declaresPages:`· {pages} 个页面`,pageFailed:`页面 {detail}`,manifestUnreadable:`manifest 无法解析;请检查rove-plugin.toml 的路径和 TOML 语法`,unsupportedPlatform:`· 不支持当前平台`,noHooks:`· 未声明钩子`,lastRun:`· 上次运行 {label} {status} {ago}前`,neverRun:`· 尚未运行过`,runOk:`成功`,runRunning:`仍在运行`,runFailed:"启动失败;请查看 `rove plugin log <id>`",runExit:`退出码 {code}`,settingUnset:`(未设置 — enter 编辑)`,settingInvalidTitle:`不是数字`,settingInvalidBody:`{label} 只接受数字,保留原值。`},marketplace:{title:`插件市场`,hint:"GitHub 上 `rove-plugin` 话题下发布的插件,按 star 数排序。enter(或点击)会先列出安装会执行的命令,确认后才真正执行。每次进入本区块都会重新查询列表。",loading:`正在搜索 GitHub…`,empty:`列表为空。`,offline:`GitHub 不可达——只显示首方插件。重新进入本区块可再试一次。`,installedTag:`已安装`,firstParty:`首方`,preparing:`正在克隆 {ref}…`,installing:`正在构建并注册 {name}…`,installed:`已安装 {id} v{version}——已启用,可在「插件」区块管理。`,cancelled:`已取消安装,没有执行任何命令。`,failed:`安装失败:{error}。请检查构建输出,再从插件市场重试。`,alreadyInstalled:`已安装为 {id}——在「插件」区块管理。`,confirmTitle:`安装 {name}?`,confirmInstall:`安装`,previewSource:`来源:{source}`,previewCommands:`该插件声明的命令:`,previewNoCommands:`该插件未声明任何命令。`,previewWarning:`警告:{warning}`,previewTrust:`安装会执行上面的 build 命令,其余命令会在它们声明的事件发生时执行。它们以你的身份、带你的环境变量运行,没有任何沙箱。`}},CA={en:{appearance:{enabled:`On`,disabled:`Off`,borderFlow:`Flowing gradient`,borderStill:`Still`,glyphsBraille:`Braille`,glyphsStarburst:`Starburst (needs a font with the Dingbats block)`,glyphsAscii:`ASCII`,titleShimmer:`Shimmer`,titleStill:`Still`,preview:`Workspace preview`,tasks:`Tasks`,terminal:`Terminal`,files:`Files`,testsPassed:`Tests passed`,transparent:`Transparent background`,opaque:`Opaque background`,modeDark:`Dark`,modeLight:`Light`,modeAuto:`Auto (follow the terminal)`,openHint:`Enter to choose an option and preview it.`,chooseHint:`↑/↓ or j/k preview · enter apply · esc cancel`},title:`Settings`,esc:`esc`,nav:{default:`j/k pick · h/l switch level · enter activate · esc close`,feedback:`tab next field · enter sends on Send · esc close`},sections:{general:`General`,engines:`Engines`,autoRouting:`Auto routing`,plugins:`Plugins`,marketplace:`Marketplace`,keys:`Keybindings`,feedback:`Feedback`,dev:`Dev`},general:{usage:`USAGE`,theme:`Theme`,themeMode:`Mode`,themeHint:`l to enter list · j/k to highlight · enter to apply`,language:`Language`,languageHint:`Display language for Rove's UI. l to enter list · j/k to highlight · enter to apply.`,transparent:`Transparent background`,transparentHint:`Drops the renderer's bg fill so the host terminal shows through. enter toggles.`,on:`[x] on`,off:`[ ] off`,focusAccent:`Focus accent`,focusAccentHint:`Color of focused pane title, ▌ marker, and split borders.`,accentPrimary:`Primary (brand accent)`,accentSuccess:`Success (legacy green)`,accentInfo:`Info (cool blue)`,appearance:`Appearance`,appearanceHint:`How split panes draw.`,splitStyle:`Split panes`,workingBorder:`Working border`,taskColors:`Task colors`,glyphSet:`State glyphs`,colorblind:`Colorblind diff colours`,runningTitle:`Running title`,splitBox:`Box frames`,splitLine:`Divider line`,splitRail:`Accent rail`,splitRule:`Top rule`,notifications:`Notifications`,notificationsHint:`When a background tab finishes or pauses on an approval.`,toast:`Toast`,toastHint:`bottom-right popup`,sound:`Sound`,soundHint:`bell + chime + an OSC 9 desktop notification (rides SSH)`,soundVolume:`Chime volume — {percent}%`,soundVolumeHint:`enter cycles; applies to the next chime`,crossTask:`Cross-task`,crossTaskHint:`also for a task you switched away from`,finishedAlerts:`Finished turns`,finishedAlertsHint:`off: only approvals and errors alert; the unread dot stays`,keyHints:`Keyboard hints`,keyHintsHint:`The status-bar reminder and the first-use hints in the sidebar and files panes.`,keyHintsShow:`Show keyboard hints`,keyHintsShowHint:`re-enabling relights hints dismissed by use`,zen:`Zen mode`,zenHint:"The `zen` chip and `prefix`+z hide Files, keeping the Tasks rail and workspace.",zenDefaultOn:`Start in zen mode`,updates:`Updates`,updatesHint:`Stable is the default channel; next previews the coming release; nightly is built from main every day.`,updateChannelTitle:`Release channel`,updateChannel:`Channel: {channel}`,updateChannelHint:"enter cycles stable / next / nightly; `rove update` follows it",updateChannelName:{latest:`stable`,next:`next preview`,nightly:`nightly preview`},updateNotify:`Notify on updates`,updateNotifyHint:`new versions on this channel; off hides the update chip, and checking by hand still reports`,updateCheck:`[ Check for updates ]`,updateCheckHint:`asks npm for the newest release on this channel right now`,updateCheckButton:`Check for updates`,updateChecking:`Checking…`,updateOpenPage:`Open Update page`,updateOpenPageRow:`[ Open Update page ]`,railFold:`Folded task rail`,railFoldHint:`What the rail shows once folded away from its corner control.`,railFoldRow:`Folded rail shows: {style}`,railFoldRowHint:`enter cycles`,railFoldGlyphs:`status glyphs`,railFoldInitials:`glyph + initials`,railFoldHairline:`colour band only`,editor:`Editor`,editorHint:`What enter opens a file with in the file tree — diff mode when the editor supports it, the read-only preview when it isn't installed.`,editorRow:`editor: < {kind} >`,editorRowHint:`auto follows $VISUAL / $EDITOR, else nvim / vim / emacs / nano`,editorCustom:`custom: {cmd}`,editorCustomUnset:`(unset — enter to edit)`,worktree:`Worktree location`,worktreeHint:`Where new task worktrees are created. New tasks only.`,worktreeBase:`location: < {kind} >`,worktreeBaseHint:"custom takes `~`, a relative path, or a leading `$project_dir`",worktreeKindDefault:`default ~/.rove/worktrees`,worktreeKindNext:`next to project`,worktreeKindCustom:`custom`,worktreeCustom:`custom: {path}`,worktreeCustomUnset:`(unset — enter to edit)`,worktreeBaseTitle:`Custom worktree location (blank = default; $project_dir = project root)`,worktreeBaseField:`PATH`,editorCustomTitle:`Custom editor command (use {file} for the path)`,worktreeBaseInvalidTitle:`Can't use that worktree location`,worktreeBaseTokenBody:`{token} only expands as the leading path segment (e.g. {token}/../rove-worktrees). Keeping the previous setting.`,worktreeBaseUnusableBody:`{path} isn't usable ({error}). Keeping the previous setting — pick a writable directory.`,terminal:`Terminal`,terminalHint:`Applies to terminals opened after the change.`,scrollbackRow:`scrollback: {rows} rows`,scrollbackRowHint:`100–100000 · larger costs proportionally more CPU per redraw`,scrollbackTitle:`Terminal scrollback rows (100–100000)`,scrollbackField:`ROWS`,scrollbackInvalidTitle:`Not a number`,scrollbackInvalidBody:`Scrollback must be a number of rows (e.g. 1000). Keeping the previous setting.`,tabStripRow:`tab strip: {mode}`,tabStripMode:{never:`off — the sidebar tree lists tabs`,multipleOnly:`only with 2+ tabs`,always:`always`}},field:{command:`COMMAND`,name:`NAME`,id:`ID`},action:{save:`save`,next:`next`,add:`add`},reset:{title:`Reset UI state?`,body:`Wipes ~/.config/rove/state.json and ~/.rove/tasks.json, then quits Rove — relaunch for a fresh start with an empty working session list. Worktrees on disk and engine session history are NOT touched.`,done:`Rove: UI state reset. Relaunch Rove to start fresh.`,failedTitle:`UI state was not reset`,failedBody:`Could not write the settings file. Your settings and tasks have been kept. Try resetting again.`},restart:{title:`Restart backend?`,body:`Stops the daemon and relaunches this Rove on the installed build, so daemon / orchestrator / engine edits take effect. Running engine sessions live in the PTY host and keep going; open tabs come back. Any other attached windows reconnect on their own.`,done:`Rove: restarting the backend...`},stateWrite:{failedTitle:`Settings were not saved`,failedBody:`{file} could not be written ({keys}). Check its directory permissions and free disk space, then save again.`},...hA,...yA,...xA,keybindings:{title:`Keybindings`,hint:`Rebind direct and prefix chords in your own YAML file; changes reload live. Press F1 anywhere for the live keymap with every binding id.`,configFile:`Config file`,notCreated:` (not created yet)`,prefixTitle:`Command layer ({prefix})`,prefixHint:`Bare keys act in the focused pane; a small one-press set covers frequent Rove actions; {prefix} opens the command layer ({timeout}ms second-stroke window). Prefix bindings keep their pane scope and modal rules.`,tapPresentation:`Prefix tap`,tapPresentationHint:`Choose whether the complete guide also marks controls already on screen.`,tapPresentationLocal:`On-screen entries + complete guide (default)`,tapPresentationGuide:`Complete guide only`,prefixDisabled:`disabled`,fixed:`Fixed (not rebindable): {ids}.`,createHint:`No overrides file yet. Rove can write one for you, fully commented — nothing is rebound until you uncomment a line.`,createFile:`[enter] Create keybindings.yaml`,overridesApplied:`Overrides applied`,none:`none`,unbound:`(unbound)`,defaultKeys:`default: {keys}`,warnings:`Warnings`},feedback:{title:`Feedback`,hint:"Sends a GitHub Discussion to the Rove repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:`title`,titlePlaceholder:`Short summary`,descriptionLabel:`description`,descriptionPlaceholder:`What happened? (enter for a new line · tab to Send)`,send:`[enter] Send to GitHub Discussions`},..._A},zh:{appearance:{enabled:`开启`,disabled:`关闭`,borderFlow:`流动渐变`,borderStill:`静止`,glyphsBraille:`盲文点`,glyphsStarburst:`星芒(需要含 Dingbats 符号区的字体)`,glyphsAscii:`ASCII`,titleShimmer:`流光`,titleStill:`静止`,preview:`工作区预览`,tasks:`任务`,terminal:`终端`,files:`文件`,testsPassed:`测试通过`,transparent:`透明背景`,opaque:`不透明背景`,modeDark:`深色`,modeLight:`浅色`,modeAuto:`自动(跟随终端)`,openHint:`按 Enter 打开选项和预览。`,chooseHint:`↑/↓ 或 j/k 预览 · enter 应用 · esc 取消`},title:`设置`,esc:`esc`,nav:{default:`j/k 选择 · h/l 切换层级 · enter 确认 · esc 关闭`,feedback:`tab 下一项 · enter 在发送项发送 · esc 关闭`},sections:{general:`通用`,autoRouting:`自动路由`,engines:`引擎`,plugins:`插件`,marketplace:`插件市场`,keys:`快捷键`,feedback:`反馈`,dev:`开发`},general:{usage:`用量`,theme:`主题`,themeMode:`明暗`,themeHint:`l 进入列表 · j/k 高亮 · enter 应用`,language:`语言`,languageHint:`Rove 界面的显示语言。l 进入列表 · j/k 高亮 · enter 应用。`,transparent:`透明背景`,transparentHint:`去掉渲染器的背景填充,让宿主终端透出来。按 enter 切换。`,on:`[x] 开`,off:`[ ] 关`,focusAccent:`聚焦强调色`,focusAccentHint:`聚焦面板标题、▌ 标记和分隔边框的颜色。`,accentPrimary:`主色(品牌强调色)`,accentSuccess:`成功色(传统绿)`,accentInfo:`信息色(冷蓝)`,appearance:`外观`,appearanceHint:`分屏面板怎么画边。`,splitStyle:`分屏面板`,workingBorder:`运行中边框`,taskColors:`任务配色`,glyphSet:`状态符号`,colorblind:`色盲友好的增删配色`,runningTitle:`运行中标题`,splitBox:`方框边框`,splitLine:`单线分隔`,splitRail:`左侧强调条`,splitRule:`顶部横线`,notifications:`通知`,notificationsHint:`后台标签完成或在审批处暂停时触发。`,toast:`Toast 弹窗`,toastHint:`右下角弹窗`,sound:`声音`,soundHint:`响铃 + 提示音 + OSC 9 桌面通知(经 SSH 直达本地)`,soundVolume:`提示音音量 — {percent}%`,soundVolumeHint:`回车循环切换;下一声提示音生效`,crossTask:`跨任务`,crossTaskHint:`你已切走的任务也通知`,finishedAlerts:`回合完成`,finishedAlertsHint:`关闭后只有审批和错误会提醒;未读标记照常`,keyHints:`键盘提示`,keyHintsHint:`状态栏提醒,以及侧栏和文件面板的首用提示。`,keyHintsShow:`显示键盘提示`,keyHintsShowHint:`重新开启会点亮已因使用而熄灭的提示`,zen:`禅模式`,zenHint:"`zen` 标记和 `prefix`+z 隐藏 Files,保留 Tasks 侧栏与 workspace。",zenDefaultOn:`启动即进入禅模式`,updates:`更新`,updatesHint:`稳定版是默认渠道;next 预览即将发布的版本;nightly 每天从 main 自动构建。`,updateChannelTitle:`发布渠道`,updateChannel:`渠道:{channel}`,updateChannelHint:"enter 在稳定版 / next / nightly 间切换;`rove update` 跟随它",updateChannelName:{latest:`稳定版`,next:`next 预览版`,nightly:`nightly 预览版`},updateNotify:`有新版本时通知我`,updateNotifyHint:`只针对所选渠道;关闭后不再显示更新标记,手动检查仍会给出结果`,updateCheck:`[ 检查更新 ]`,updateCheckHint:`立即向 npm 查询所选渠道的最新版本`,updateCheckButton:`检查更新`,updateChecking:`检查中…`,updateOpenPage:`打开更新页`,updateOpenPageRow:`[ 打开更新页 ]`,railFold:`折叠后的任务栏`,railFoldHint:`任务栏从角标折叠之后显示什么。`,railFoldRow:`折叠后显示:{style}`,railFoldRowHint:`enter 切换`,railFoldGlyphs:`状态字形`,railFoldInitials:`字形 + 首字母`,railFoldHairline:`仅色带`,editor:`编辑器`,editorHint:`文件树里按 enter 用什么打开文件——支持时走编辑器 diff 模式,未安装时回退到只读预览。`,editorRow:`编辑器: < {kind} >`,editorRowHint:`auto 跟随 $VISUAL / $EDITOR,否则 nvim / vim / emacs / nano`,editorCustom:`自定义: {cmd}`,editorCustomUnset:`(未设置 — enter 编辑)`,worktree:`工作树位置`,worktreeHint:`新任务工作树的创建位置。仅对新任务生效。`,worktreeBase:`位置: < {kind} >`,worktreeBaseHint:"自定义可填 `~`、相对路径或以 `$project_dir` 开头",worktreeKindDefault:`默认 ~/.rove/worktrees`,worktreeKindNext:`项目旁边`,worktreeKindCustom:`自定义`,worktreeCustom:`自定义: {path}`,worktreeCustomUnset:`(未设置 — enter 编辑)`,worktreeBaseTitle:`自定义工作树位置(留空 = 默认;$project_dir = 项目根目录)`,worktreeBaseField:`路径`,editorCustomTitle:`自定义编辑器命令(用 {file} 代表文件路径)`,worktreeBaseInvalidTitle:`无法使用该工作树位置`,worktreeBaseTokenBody:`{token} 只能作为路径的第一段展开(如 {token}/../rove-worktrees)。保留原设置。`,worktreeBaseUnusableBody:`{path} 不可用({error})。保留原设置 —— 请选择一个可写目录。`,terminal:`终端`,terminalHint:`对修改后新打开的终端生效。`,scrollbackRow:`回滚行数: {rows} 行`,scrollbackRowHint:`100–100000 · 调大会按比例增加每次重绘的 CPU`,scrollbackTitle:`终端回滚行数(100–100000)`,scrollbackField:`行数`,scrollbackInvalidTitle:`不是数字`,scrollbackInvalidBody:`回滚行数必须是数字(如 1000)。保留原设置。`,tabStripRow:`标签栏: {mode}`,tabStripMode:{never:`关闭 — 标签在左侧树里`,multipleOnly:`仅 2 个以上标签时显示`,always:`始终显示`}},field:{command:`命令`,name:`名称`,id:`标识`},action:{save:`保存`,next:`下一步`,add:`添加`},reset:{title:`重置界面状态?`,body:`将清除 ~/.config/rove/state.json 和 ~/.rove/tasks.json 并退出 Rove —— 重新启动后会是一个干净的开始,工作会话列表为空。磁盘上的工作树和引擎会话历史不受影响。`,done:`Rove:界面状态已重置。重新启动 Rove 即可从头开始。`,failedTitle:`UI 状态未能重置`,failedBody:`无法写入设置文件。设置和任务均已保留,请稍后重新尝试重置。`},restart:{title:`重启后端?`,body:`会停掉 daemon,并以已安装的版本重新启动当前 Rove 窗口,从而让 daemon / orchestrator / 引擎的改动生效。正在运行的引擎会话由 PTY host 托管,不会中断;已打开的标签页会恢复。其他已连接的窗口会自行重连。`,done:`Rove:正在重启后端……`},stateWrite:{failedTitle:`设置未能保存`,failedBody:`{file} 写入失败({keys})。请检查目录权限和磁盘空间,再次保存。`},...gA,...bA,...SA,keybindings:{title:`快捷键`,hint:`在你自己的 YAML 文件里重绑定直接按键和 prefix 组合;修改会实时加载。任意位置按 F1 查看带每个绑定 id 的实时键位表。`,configFile:`配置文件`,notCreated:` (尚未创建)`,prefixTitle:`命令层({prefix})`,prefixHint:`裸键作用于当前聚焦面板;少量单次快捷键覆盖高频 Rove 操作;{prefix} 打开命令层(第二击窗口 {timeout}ms)。Prefix 绑定保持原有的面板作用域和 modal 规则。`,tapPresentation:`点按 Prefix`,tapPresentationHint:`选择完整指南是否同时标记当前屏幕上的入口。`,tapPresentationLocal:`屏幕入口 + 完整指南(默认)`,tapPresentationGuide:`仅完整指南`,prefixDisabled:`已禁用`,fixed:`固定(不可重绑定):{ids}。`,createHint:`还没有覆盖文件。Rove 可以帮你写一份带完整注释的——在你取消注释之前不会改动任何按键。`,createFile:`[enter] 创建 keybindings.yaml`,overridesApplied:`已应用的覆盖`,none:`无`,unbound:`(已解绑)`,defaultKeys:`默认: {keys}`,warnings:`警告`},feedback:{title:`反馈`,hint:"通过 `gh` 向 Rove 仓库发一条 GitHub Discussion。需要 `gh auth login`;分类默认为 Feedback。",titleLabel:`标题`,titlePlaceholder:`简短概括`,descriptionLabel:`描述`,descriptionPlaceholder:`发生了什么?(enter 换行 · tab 跳到发送)`,send:`[enter] 发送到 GitHub Discussions`},...vA}},wA={en:kr,zh:Ar};function $(e,t){return Ae(CA,e,t)}function TA(e,t){return Ae(wA,e,t)}function EA({label:e,value:t,picks:n,onPick:r}){return(0,V.jsx)(`fieldset`,{"aria-label":e,className:`m-0 inline-flex min-w-0 flex-wrap gap-0.5 rounded-sm border-hairline border-line bg-inset p-0.5`,children:n.map(e=>{let n=e.value===t;return(0,V.jsx)(`button`,{type:`button`,"aria-pressed":n,className:Me(`rounded-xs px-2.5 py-1 font-sans text-meta whitespace-nowrap touch:min-h-9`,`focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-focus`,n?`bg-menu text-ink`:`text-muted hover:bg-hover`),onClick:()=>!n&&r(e.value),children:e.label},e.value)})})}function DA({label:e,value:t,picks:n,onPick:r}){return(0,V.jsxs)(`span`,{className:`relative inline-flex max-w-full min-w-0 text-ink`,children:[(0,V.jsx)(`select`,{"aria-label":e,value:t,className:`max-w-full min-w-0 truncate rounded-sm border-hairline border-line bg-paper py-1.25 pr-7 pl-2.5 font-sans text-meta hover:border-line-active focus-visible:border-line-active focus-visible:outline-none touch:min-h-10`,onChange:e=>{let t=n.find(t=>String(t.value)===e.target.value);t&&r(t.value)},children:n.map(e=>(0,V.jsx)(`option`,{value:e.value,children:e.label},e.value))}),(0,V.jsx)(Fa,{className:`pointer-events-none absolute top-1/2 right-2.5 -translate-y-1/2 text-subtle`})]})}var OA=`${Mn} w-narrow:pt-0`,kA=`dialog relative m-0 flex h-[min(640px,80vh)] w-[min(880px,calc(100vw-32px))] overflow-hidden rounded-md border-hairline border-line bg-surface text-inherit shadow-dialog focus:outline-none motion-safe:animate-rise-in [.is-leaving_&]:animate-sink-out w-narrow:h-dvh w-narrow:w-screen w-narrow:flex-col w-narrow:rounded-none w-narrow:border-0 short:h-[calc(100dvh-24px)]`,AA=`absolute top-3 right-3 z-1 grid size-7 place-items-center rounded-sm text-display leading-none text-muted hover:bg-inset hover:text-ink focus-visible:bg-inset focus-visible:text-ink touch:size-10`,jA=`flex w-56 flex-none flex-col gap-5 overflow-y-auto scrollbar-none [border-right:var(--hairline)_solid_var(--line)] px-2.5 py-4 w-narrow:w-full w-narrow:flex-1 w-narrow:[border-right:none] w-narrow:px-3 w-narrow:py-3`,MA=`m-0 px-2 pb-0.5 font-sans text-title font-semibold normal-nums text-ink`,NA=`flex flex-col gap-0.5`,PA=`m-0 px-2 pb-1 font-mono text-meta font-normal text-subtle`,FA=(e,t)=>`flex items-center rounded-sm px-2 py-1.25 text-left font-sans text-body touch:min-h-10 w-narrow:min-h-11 w-narrow:px-3 ${e?`bg-menu text-ink`:`${t?`text-muted`:`text-ink`} [&:hover]:bg-hover`}`,IA=`ml-auto hidden text-subtle w-narrow:block`,LA=`flex flex-col`,RA=`m-0 pb-2 text-meta text-subtle`,zA=`flex flex-col border-t-hairline border-t-line [&>*]:border-b-hairline [&>*]:border-b-line`,BA=`flex items-center justify-between gap-x-6 gap-y-2 py-3 w-narrow:flex-col w-narrow:items-stretch`,VA=`flex items-center justify-between gap-x-6 py-3`,HA=`flex flex-col gap-3 py-3`,UA=`flex min-w-0 flex-1 flex-col gap-0.5`,WA=`text-body text-ink`,GA=`text-meta text-muted [&_a]:text-accent`,KA=`max-w-90 min-w-0 truncate font-mono text-meta text-muted [overflow-wrap:anywhere]`,qA=`m-0 py-3 text-body text-muted`,JA=`rounded-sm border-hairline border-line bg-paper px-2.5 py-1.5 font-sans text-body text-ink focus-visible:border-line-active focus-visible:outline-none`,YA=`${JA} w-24 text-right`,XA=`flex flex-col gap-1.5`,ZA=`text-meta font-medium text-muted`,QA=`min-h-30 max-h-[50vh] leading-[1.45]`,$A=`flex flex-wrap items-center justify-end gap-2.5`,ej=`flex items-center gap-2.5 rounded-sm bg-inset px-3 py-2 text-meta`,tj=`grid grid-cols-[minmax(0,1fr)_104px_72px] items-center gap-3`,nj=`flex flex-col`,rj=`${tj} pb-1.5 pl-7.5 font-sans text-meta font-medium normal-nums text-subtle [&>span:not(:first-child)]:text-center`,ij=`border-b-hairline border-b-line first:border-t-hairline first:border-t-line`,aj=`${tj} group/eng rounded-sm py-1.5 pr-1 pl-0`,oj=`flex min-w-0 items-center gap-2 rounded-sm py-1.5 pr-0 pl-1.5 text-left focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-focus`,sj=e=>`mx-0.5 ${e?`text-muted`:`text-subtle`}`,cj=`flex min-w-0 flex-col gap-0.5`,lj=e=>`truncate text-body leading-[inherit] font-medium ${e?`text-muted`:`text-ink`}`,uj=`ml-2 text-meta leading-[inherit] font-normal text-subtle`,dj={ready:`bg-success`,attention:`bg-warning`,error:`bg-error`,absent:`bg-subtle`},fj=e=>`inline-flex items-center gap-1.5 text-meta leading-[inherit] ${e===`error`?`text-error`:`text-muted`}`,pj=e=>`size-1.75 flex-none rounded-full ${dj[e]}`,mj=`flex justify-center`,hj=`rounded-full bg-accent-soft px-2.5 py-0.5 font-sans text-meta font-medium normal-nums capitalize text-accent`,gj=`rounded-full border-hairline border-line px-2.5 py-0.5 text-meta leading-[inherit] whitespace-nowrap text-muted opacity-0 transition-opacity duration-120 ease-[ease] group-hover/eng:opacity-100 group-focus-within/eng:opacity-100 hover:border-line-active hover:text-ink motion-reduce:transition-none touch:opacity-100`,_j=`mt-0 mr-1 mb-3 ml-7 flex flex-col gap-2.5 px-1.5 py-1`,vj=`m-0 grid grid-cols-[max-content_minmax(0,1fr)] gap-x-3.5 gap-y-1.5 text-meta leading-[1.5]`,yj=`text-subtle`,bj=e=>`m-0 wrap-anywhere ${e?`text-warning`:`text-ink`}`,xj=`flex items-center gap-2`,Sj=`flex-1 px-2 py-1.25`,Cj=`text-meta leading-[inherit] text-success`,wj=`flex items-center gap-3 py-2.5`,Tj=`flex min-w-0 flex-1 flex-col gap-0.5`,Ej=(e=!1)=>`overflow-hidden text-ellipsis text-meta text-muted ${e?`whitespace-normal`:`whitespace-nowrap`}`,Dj=`flex flex-col gap-1 py-3`,Oj=`flex items-baseline gap-3`,kj=`flex flex-col gap-2.5 pt-2`,Aj=`grid grid-cols-[repeat(auto-fill,minmax(96px,1fr))] gap-2`,jj=`m-0 pb-1.5 text-meta font-medium text-subtle`,Mj=e=>e?`border-accent bg-accent-soft`:`border-line hover:bg-hover`,Nj=`flex h-9 overflow-hidden rounded-xs border-hairline`,Pj=`flex w-2/5 flex-col gap-0.75 p-1`,Fj=`flex min-w-0 flex-1 flex-col gap-0.75 p-1`,Ij=`h-0.75 rounded-xs`,Lj=`mt-auto flex gap-0.75`,Rj=`size-1 rounded-xs`,zj=`flex min-w-0 items-baseline gap-1.5 font-sans text-meta`,Bj=`group relative h-4.5 w-7.5 flex-none justify-self-center rounded-full border-hairline border-line bg-inset transition-[background,border-color] duration-120 ease-[ease] aria-checked:border-accent aria-checked:bg-accent motion-reduce:transition-none`,Vj=`absolute top-0.5 left-0.5 size-3 rounded-full bg-muted transition-[transform,background] duration-120 ease-[ease] group-aria-checked:[transform:translateX(12px)] group-aria-checked:bg-paper motion-reduce:transition-none`;function Hj({on:e,...t}){return(0,V.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,className:Bj,...t,children:(0,V.jsx)(`span`,{className:Vj})})}function Uj(e){return(0,V.jsxs)(`section`,{className:LA,children:[e.title&&(0,V.jsx)(`h2`,{className:`m-0 pb-1.5 font-sans text-meta font-medium normal-nums text-muted`,children:e.title}),e.hint&&(0,V.jsx)(`p`,{className:`m-0 pb-2 text-meta text-subtle`,children:e.hint}),(0,V.jsx)(`div`,{className:zA,children:e.children})]})}function Wj(e){let t=(0,V.jsxs)(`div`,{className:UA,children:[(0,V.jsx)(`span`,{id:e.labelId,className:WA,children:e.label}),e.hint&&(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:e.hint})]});return e.stack?(0,V.jsxs)(`div`,{className:HA,children:[t,e.children]}):(0,V.jsxs)(`div`,{className:e.inline?VA:BA,children:[t,e.children&&(0,V.jsx)(`div`,{className:`flex min-w-0 flex-none items-center justify-end gap-2 w-narrow:justify-start`,children:e.children})]})}function Gj(e){let t=(0,g.useId)();return(0,V.jsx)(Wj,{label:e.label,hint:e.hint,labelId:t,inline:!0,children:(0,V.jsx)(Hj,{on:e.checked,"aria-labelledby":t,disabled:e.disabled,onClick:()=>e.onChange(!e.checked)})})}var Kj=36;function qj(e){let t=e.picks.length<=4&&e.picks.reduce((e,t)=>e+t.label.length,0)<=Kj?EA:DA;return(0,V.jsx)(Wj,{label:e.label,hint:e.hint,children:(0,V.jsx)(t,{label:e.label,value:e.value,picks:e.picks,onPick:e.onPick})})}function Jj(e){return(0,V.jsx)(Wj,{label:e.label,hint:e.note,children:(0,V.jsx)(`span`,{className:KA,children:e.value})})}var Yj=`flex items-baseline justify-between`,Xj=`[&_b]:mr-2.5`,Zj=`my-2.5 flex flex-col`,Qj=e=>`flex gap-3 rounded-sm px-2 py-1 text-left text-[length:var(--fs-body)] ${e?`bg-menu`:``}`,$j=`min-w-[14ch]`,eM=`whitespace-nowrap text-[length:var(--fs-meta)] text-warning`,tM=`rail-tight:hidden`,nM=`[&_h2]:mx-0 [&_h2]:mt-3.5 [&_h2]:mb-1 [&_h2]:text-[length:var(--fs-body)]`,rM=`max-h-[55vh] overflow-x-hidden overflow-y-auto`,iM=`mr-auto text-[length:var(--fs-meta)]`,aM=`text-[length:var(--fs-body)] leading-[1.55] wrap-anywhere [&_h3]:mx-0 [&_h3]:mt-3 [&_h3]:mb-1.5 [&_h3]:font-sans [&_h3]:text-meta [&_h3]:font-medium [&_h3]:normal-nums [&_h3]:text-muted [&_h3:first-child]:mt-0 [&_ul]:m-0 [&_ul]:pl-4.5 [&_li+li]:mt-2 [&_p]:mx-0 [&_p]:mt-0 [&_p]:mb-2 [&_a]:text-accent [&_a]:underline [&_a]:underline-offset-2 [&_code]:rounded-sm [&_code]:bg-inset [&_code]:px-1 [&_code]:py-0 [&_code]:font-mono [&_code]:text-meta [&_code]:font-normal [&_code]:normal-nums`,oM=`mt-3`,sM=e=>`rounded-sm px-2 py-1.25 ${e?`bg-menu`:``}`,cM=`flex items-baseline gap-2 text-[length:var(--fs-body)]`,lM=`flex items-baseline justify-between gap-2`,uM=`font-mono`,dM=`truncate`,fM=`mt-4 text-[length:var(--fs-meta)]`;function pM(e){return e.replace(/\[`[0-9a-f]{7,40}`\]\([^)]*\)\s*/g,``).replace(/\s+[—-]\s+\[@[^\]]+\]\([^)]*\)\s*$/,``).trim()}function mM(e){let t=[],n=(e,n)=>t.push({kind:e,text:n,id:t.length});for(let r of e.split(/\r?\n/)){let e=r.trimEnd();if(e.trim()===``)continue;let i=/^#{1,6}\s+(.*)$/.exec(e);if(i){n(`heading`,i[1]??``);continue}let a=/^\s*[-*]\s+(.*)$/.exec(e);if(a){n(`item`,a[1]??``);continue}let o=t.at(-1);o&&o.kind!==`heading`?o.text=`${o.text} ${e.trim()}`:n(`para`,e.trim())}return t.map(e=>e.kind===`item`?{...e,text:pM(e.text)}:e)}var hM=/\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)|`([^`]+)`|\*\*([^*]+)\*\*/g;function gM(e){let t=[],n=0;for(let r of e.matchAll(hM)){let i=r.index??0;i>n&&t.push(e.slice(n,i));let[a,o,s,c,l]=r;o!==void 0&&s!==void 0?t.push((0,V.jsx)(`a`,{href:s,target:`_blank`,rel:`noopener noreferrer`,children:gM(o)},i)):c===void 0?l!==void 0&&t.push((0,V.jsx)(`b`,{children:l},i)):t.push((0,V.jsx)(`code`,{children:c},i)),n=i+a.length}return n<e.length&&t.push(e.slice(n)),t}function _M({body:e}){let t=mM(e),n=[],r=[],i=()=>{r.length>0&&n.push((0,V.jsx)(`ul`,{children:r},`ul-${n.length}`)),r=[]};for(let e of t){if(e.kind===`item`){r.push((0,V.jsx)(`li`,{children:gM(e.text)},e.id));continue}i(),n.push(e.kind===`heading`?(0,V.jsx)(`h3`,{children:e.text},e.id):(0,V.jsx)(`p`,{children:gM(e.text)},e.id))}return i(),(0,V.jsx)(`div`,{className:aM,children:n})}var vM=`page min-h-0 flex-1 rounded-md border-hairline border-line bg-paper px-4.5 py-3.5 focus:outline-none`,yM=`${vM} overflow-y-auto`,bM=`page-title mx-0 mt-0 mb-1.5 font-sans text-title font-bold normal-nums`,xM=`flex items-baseline justify-between gap-4 [&_.page-title]:m-0`,SM=e=>`min-w-0 truncate text-meta ${e?``:`leading-[inherit]`}`,CM=`flex flex-wrap items-center gap-2`,wM={row:`touch:after:-inset-x-0.75 touch:after:-inset-y-0.5`,kanban:`touch:after:-inset-x-0.75 touch:after:-top-1.5 touch:after:-bottom-1`,header:`touch:after:-inset-x-0.75 touch:after:-top-2.5 touch:after:-bottom-1.25`},TM=`mt-2.5 flex flex-col gap-1.5`,EM=e=>`flex cursor-pointer flex-col gap-0.5 rounded-sm px-2.5 py-1.5 ${e?`bg-menu`:``}`,DM=`flex min-w-0 items-baseline gap-2.5`,OM=`whitespace-nowrap text-muted`,kM=`flex gap-2.5 pl-[4ch] text-meta leading-[inherit] text-muted`,AM=`min-w-0 flex-1 truncate`,jM=`flex flex-col px-1.5 pb-2`,MM=`flex flex-col border-t-hairline border-t-line px-1.5 pt-0.5 pb-0.5`,NM=`relative flex flex-col`,PM=e=>`flex items-center rounded-sm px-2 py-0.75 text-left touch:min-h-10 ${e?`bg-menu text-ink`:`text-muted [&:hover]:bg-hover`}`,FM=`ml-auto -mr-[4.5px] w-5 text-center font-sans text-display leading-none font-normal text-accent normal-nums`,IM=`mr-[7px] size-3.5 flex-none fill-none stroke-current stroke-[1.75] [stroke-linecap:round] [stroke-linejoin:round]`,LM=_(null),RM=(e,t)=>e.replace(/\{(\w+)\}/g,(e,n)=>t[n]??e),zM=e=>`https://github.com/Sma1lboy/rove/releases/tag/v${e}`;function BM(){return B()===`zh`?Pr:Nr}function VM(e,t){return e.request(`update.check`,{force:!0,locale:Ee.get(),channel:t}).then(e=>(LM.set(e),!0),()=>!1)}function HM(){let e=BM(),t=v(LM),{prefs:n}=L_();return!n.updateNotify||!t?.info?.hasUpdate?null:(0,V.jsxs)(`button`,{type:`button`,className:`${U} text-muted ${eM} ${Ge}`,title:RM(e.chip,{version:t.info.latest}),onClick:()=>va(`update`),children:[`↑`,(0,V.jsxs)(`span`,{className:tM,children:[` `,t.info.latest]})]})}function UM({client:e}){let t=BM(),n=v(LM),[r,i]=(0,g.useState)(!1),[a,o]=(0,g.useState)(`release`),[s,c]=(0,g.useState)(null),l=(0,g.useRef)(null);(0,g.useEffect)(()=>{l.current?.focus(),VM(e).finally(()=>i(!0))},[e]);let u=n?.info??null,d=n?.current??``,f=u?.latest??d,p=u?.hasUpdate===!0,m=r&&u===null,h=r&&u!==null&&!p,_=n?.notes??[],y=_[0]?.url??(f?zM(f):null),b=[{id:`release`,key:`R`,label:t.actions.openRelease,detail:y??t.releaseUrlUnavailable},{id:`close`,key:`Q`,label:t.actions.close,detail:t.actions.closeDetail}],x=e=>{if(e===`close`)return ln.set(null);c(y&&window.open(y,`_blank`,`noopener`)!==null?t.statusReleaseOpened:t.statusReleaseError)};return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:l,onKeyDown:e=>{if(e.ctrlKey&&!e.metaKey&&!e.altKey&&e.key.toLowerCase()===`c`&&!window.getSelection()?.toString())return e.preventDefault(),x(`close`);if(e.metaKey||e.ctrlKey||e.altKey)return;let t=b.findIndex(e=>e.id===a);if(e.key===`j`||e.key===`ArrowDown`)o(b[(t+1)%b.length]?.id??`close`);else if(e.key===`k`||e.key===`ArrowUp`)o(b[(t-1+b.length)%b.length]?.id??`close`);else if(e.key===`Enter`)x(a);else if(e.key===`r`)x(`release`);else if(e.key===`q`||e.key===`Escape`)x(`close`);else return;e.preventDefault()},children:[(0,V.jsxs)(`div`,{className:Yj,children:[(0,V.jsx)(`h1`,{className:bM,children:t.pageTitle}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} mono`,onClick:()=>x(`close`),children:$o()?z(`dialog.close`):t.closeHint})]}),(0,V.jsxs)(`p`,{className:`mono ${Xj}`,children:[(0,V.jsx)(`span`,{className:`text-muted`,children:t.current}),` `,(0,V.jsxs)(`b`,{children:[`v`,d]}),` `,(0,V.jsx)(`span`,{className:`text-muted`,children:t.latest}),` `,m?(0,V.jsx)(`b`,{className:`text-muted`,children:t.latestUnknown}):r?(0,V.jsxs)(`b`,{className:p?`text-warning`:`text-success`,children:[`v`,f]}):(0,V.jsx)(`span`,{className:`text-muted`,children:`…`})]}),m&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.registryRetry}),h&&(0,V.jsx)(`p`,{className:`text-success`,children:t.upToDate}),p&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:`rove update`}),(0,V.jsx)(`div`,{className:Zj,children:b.map(e=>(0,V.jsxs)(`button`,{type:`button`,className:Qj(a===e.id),onClick:()=>x(e.id),children:[(0,V.jsxs)(`span`,{className:`mono keys-only text-accent`,children:[`[`,e.key,`]`]}),(0,V.jsx)(`span`,{className:$j,children:e.label}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.detail})]},e.id))}),s&&(0,V.jsx)(`p`,{className:`mono text-accent`,children:s}),p&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:RM(t.changesSectionHeader,{from:d,to:f})}),!r&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.loadingNotes}),r&&p&&_.length===0&&(0,V.jsx)(`p`,{className:`text-muted`,children:t.notesUnavailable}),_.map(e=>(0,V.jsxs)(`section`,{className:nM,children:[(0,V.jsxs)(`h2`,{className:`mono`,children:[`v`,e.version]}),(0,V.jsx)(_M,{body:e.body})]},e.version))]})}var WM=`rove.whatsNewSeenVersion`,GM=e=>e.split(/[.-]/).slice(0,3).map(Number),KM=(e,t)=>{let[n,r]=[GM(e),GM(t)];for(let e=0;e<3;e++)if((n[e]??0)!==(r[e]??0))return(n[e]??0)>(r[e]??0);return!1};function qM(e,t){let n=localStorage.getItem(WM);localStorage.setItem(WM,t),!(!n||!KM(t,n))&&e.request(`release.notes`,{version:t.replace(/-.*$/,``),locale:Ee.get()}).then(e=>W.set((0,V.jsx)(JM,{from:n,to:t,notes:e.notes})),()=>W.set((0,V.jsx)(JM,{from:n,to:t,notes:null})))}function JM(e){let t=BM(),n=(0,g.useRef)(null);return(0,g.useEffect)(()=>n.current?.focus(),[]),(0,g.useEffect)(()=>{let e=e=>{e.key===`q`&&W.set(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,V.jsxs)(sr,{title:t.whatsNew.title,wide:!0,children:[(0,V.jsx)(`p`,{className:`text-muted`,children:RM(t.whatsNew.upgraded,{from:e.from,to:e.to})}),(0,V.jsx)(`div`,{className:rM,children:e.notes?(0,V.jsx)(_M,{body:e.notes.body}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.whatsNew.notesUnavailable})}),(0,V.jsxs)(`div`,{className:nn,children:[(0,V.jsx)(`span`,{className:`mono text-muted ${iM} touch:hidden!`,children:z(`whatsNew.keys`)}),(0,V.jsx)(`a`,{className:$t,href:e.notes?.url??zM(e.to),target:`_blank`,rel:`noopener noreferrer`,children:z(`whatsNew.openRelease`)}),(0,V.jsx)(`button`,{ref:n,type:`button`,className:Pe(),onClick:()=>W.set(null),children:z(`whatsNew.continue`)})]})]})}var YM=(e,t)=>e.replace(`{version}`,t);function XM({client:e}){let t=BM(),n=v(LM),{prefs:r}=L_(),[i,a]=(0,g.useState)(`idle`),o=()=>{a(`checking`),VM(e,r.updateChannel).then(e=>a(e?`done`:`failed`))},s=t=>{a(`idle`),I_(e,`updateChannel`,t)},c=n?.info??null,l=i===`failed`||i===`done`&&c===null,u=i===`done`&&n&&c?c.hasUpdate?YM(t.available,c.latest):t.upToDate:l?t.latestUnknown:void 0,d=l?`text-muted`:c?.hasUpdate?`text-warning`:`text-success`;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(qj,{label:$(`general.updateChannelTitle`),hint:$(`general.updatesHint`),value:r.updateChannel,picks:mA.map(e=>({value:e,label:$(`general.updateChannelName.${e}`)})),onPick:s}),(0,V.jsx)(Gj,{label:$(`general.updateNotify`),hint:$(`general.updateNotifyHint`),checked:r.updateNotify,onChange:t=>void I_(e,`updateNotify`,t)}),(0,V.jsxs)(Wj,{label:$(`general.updates`),hint:$(`general.updateCheckHint`),children:[i===`done`&&c?.hasUpdate&&(0,V.jsx)(H,{variant:`action`,onClick:()=>va(`update`),children:$(`general.updateOpenPage`)}),(0,V.jsx)(H,{variant:`action`,disabled:i===`checking`,onClick:o,children:$(i===`checking`?`general.updateChecking`:`general.updateCheckButton`)})]}),u&&(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:d,children:u}),hint:c?.hasUpdate?(0,V.jsx)(`code`,{className:`font-mono`,children:`rove update`}):void 0,children:i===`done`&&n&&c&&(0,V.jsx)(`span`,{className:`max-w-90 min-w-0 truncate font-mono text-meta text-muted [overflow-wrap:anywhere]`,title:`${t.latest} v${c.latest}`,children:`${t.current} v${n.current} · ${t.latest} v${c.latest}`})})]})}function ZM({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`daemon.info`)??null);return(0,g.useEffect)(()=>{Hs(e,`daemon.info`).then(n,()=>n(null))},[e]),(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{title:z(`settings.about.groupRove`),children:[t?.daemonVersion&&(0,V.jsx)(Wj,{label:z(`settings.about.daemon`),hint:z(t.stale?`settings.about.daemonStale`:`settings.about.daemonCurrent`,{version:t.daemonVersion})}),(0,V.jsx)(XM,{client:e})]}),(0,V.jsx)(Uj,{title:z(`settings.about.browser`),children:(0,V.jsx)(Wj,{label:z(`settings.about.signOut`),hint:z(`settings.about.browserHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>void Ma().then(()=>window.location.reload()),children:z(`settings.about.signOut`)})})})]})}async function QM(e,t){let{taskId:n}=await e.client.request(`task.openScratch`);await BC(e,n,{kind:`engine`,prompt:t}),Sn()}var $M=_(null);function eN({theme:e,mode:t}){let n=e[t],r=(e,t)=>({background:e,width:t});return(0,V.jsxs)(`span`,{className:Nj,style:{background:n.background,borderColor:n.border},"aria-hidden":!0,children:[(0,V.jsxs)(`span`,{className:Pj,style:{background:n.backgroundPanel},children:[(0,V.jsx)(`span`,{className:Ij,style:r(n.primary,`70%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`85%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`55%`)})]}),(0,V.jsxs)(`span`,{className:Fj,children:[(0,V.jsx)(`span`,{className:Ij,style:r(n.text,`90%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.textMuted,`65%`)}),(0,V.jsx)(`span`,{className:Ij,style:r(n.accent??n.primary,`40%`)}),(0,V.jsx)(`span`,{className:Lj,children:[n.success,n.warning,n.error,n.info].map((e,t)=>(0,V.jsx)(`span`,{className:Rj,style:{background:e}},t))})]})]})}function tN(e){return(0,V.jsxs)(H,{variant:`card`,"aria-pressed":e.active,className:Mj(e.active),onMouseEnter:()=>O_.set(e.theme),onFocus:()=>O_.set(e.theme),onClick:e.onClick,children:[(0,V.jsx)(eN,{theme:e.theme,mode:e.mode}),(0,V.jsxs)(`span`,{className:zj,children:[(0,V.jsx)(`span`,{className:`truncate text-ink`,children:e.theme.name}),e.tag&&(0,V.jsx)(`span`,{className:`text-subtle`,children:e.tag})]})]})}function nN({children:e}){return(0,V.jsx)(`div`,{className:Aj,onMouseLeave:()=>O_.set(null),onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||O_.set(null)},children:e})}function rN(e){let{model:t}=e,{client:n}=t,r=v($M),[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(!1),[u,d]=(0,g.useState)(!1);(0,g.useEffect)(()=>()=>O_.set(null),[]),(0,g.useEffect)(()=>void F_(n).catch(()=>void 0),[n]),(0,g.useEffect)(()=>{$M.get()===null&&n.request(`theme.hosted`).then(e=>$M.set(e),()=>$M.set({themes:[],dir:null}))},[n]);let f=e=>{l(!1),QM(t,z(`prefs.themeAgentPrompt`,{dir:e})).catch(()=>l(!0))},p=r?.dir??null,m=async e=>{a(e),s(null);try{await n.request(`theme.install`,{name:e}),await F_(n),await I_(n,`theme`,e)}catch{s(e)}finally{a(null)}},h=new Set(e.themes.map(e=>e.name)),_=(r?.themes??[]).filter(e=>!h.has(e.name));return(0,V.jsxs)(Wj,{label:e.label,hint:z(`prefs.themePreviewHint`),stack:!0,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:jj,children:z(`prefs.themeInstalled`)}),(0,V.jsx)(nN,{children:e.themes.map(t=>(0,V.jsx)(tN,{theme:t,mode:e.mode,active:t.name===e.value,tag:t.bundled?void 0:z(`prefs.themeUser`),onClick:()=>t.name!==e.value&&void I_(n,`theme`,t.name)},t.name))})]}),_.length>0&&(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(H,{className:`inline-flex items-center gap-1.5`,"aria-expanded":u,onClick:()=>d(!u),children:[(0,V.jsx)(Fa,{right:!u}),u?z(`prefs.themeHide`):z(`prefs.themeBrowse`,{count:_.length})]}),u&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`m-0 pb-1.5 text-meta font-medium text-subtle mt-2.5`,children:z(`prefs.themeMoreHint`)}),(0,V.jsx)(nN,{children:_.map(t=>(0,V.jsx)(tN,{theme:t,mode:e.mode,active:!1,tag:i===t.name?z(`prefs.themeInstalling`):o===t.name?z(`prefs.themeInstallFailed`):z(`prefs.themeGet`),onClick:()=>i===null&&void m(t.name)},t.name))})]})]}),p&&(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2.5`,children:[(0,V.jsx)(H,{variant:`action`,onClick:()=>f(p),children:z(`prefs.themeAgent`)}),(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:z(c?`prefs.themeAgentFailed`:`prefs.themeAgentHint`)})]})]})}var iN=_({}),aN=``,oN=`(prefers-color-scheme: dark)`;function sN(e){let t=window.matchMedia(oN);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function cN(){return(0,g.useSyncExternalStore)(sN,()=>window.matchMedia(oN).matches)}function lN(){let e=cN();return g_(L_().prefs.themeMode,e)}function uN(e){let t=lN(),n=L_();(0,g.useEffect)(()=>{if(!n.loaded||n.prefs.taskColors!==`on`)return;let r=`${n.prefs.theme}/${t}`;r!==aN&&(aN=r,iN.set({}));let i=()=>{let i=iN.get(),a=e.tasks.get(),o=[...a?.tasks??[],...a?.archived??[]].map(e=>e.id).filter(e=>!(e in i));o.length!==0&&e.client.request(`theme.taskColors`,{theme:n.prefs.theme,mode:t,taskIds:o}).then(e=>{aN===r&&iN.set({...iN.get(),...e.colors})}).catch(()=>void 0)};return i(),e.tasks.subscribe(i)},[e,t,n.loaded,n.prefs.taskColors,n.prefs.theme])}function dN(e){let t=L_(),n=v(iN);return e&&t.prefs.taskColors===`on`?n[e]:void 0}var fN={themeMode:{dark:`appearance.modeDark`,light:`appearance.modeLight`,auto:`appearance.modeAuto`},focusAccent:{primary:`general.accentPrimary`,success:`general.accentSuccess`,info:`general.accentInfo`},splitStyle:{box:`general.splitBox`,line:`general.splitLine`,rail:`general.splitRail`,rule:`general.splitRule`},railFold:{glyphs:`general.railFoldGlyphs`,initials:`general.railFoldInitials`,hairline:`general.railFoldHairline`},workingBorder:{flow:`appearance.borderFlow`,still:`appearance.borderStill`},glyphSet:{braille:`appearance.glyphsBraille`,starburst:`appearance.glyphsStarburst`,ascii:`appearance.glyphsAscii`},runningTitle:{shimmer:`appearance.titleShimmer`,still:`appearance.titleStill`}};function pN({model:e}){let{client:t}=e,n=L_(),r=lN(),i=v(LT),a=(e,n)=>void I_(t,e,n),o=(e,t,r)=>(0,V.jsx)(qj,{label:$(t),hint:r,value:n.prefs[e],picks:R_(n,e).map(t=>({value:t,label:e===`themeMode`&&t===`auto`?z(`prefs.modeAuto`):$(fN[e]?.[String(t)]??String(t))})),onPick:t=>a(e,t)}),s=(e,t,r)=>(0,V.jsx)(Gj,{label:$(t),hint:r,checked:e===`transparent`?n.prefs.transparent:n.prefs[e]===`on`,onChange:t=>a(e,e===`transparent`?t:t?`on`:`off`)});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{children:[(0,V.jsx)(rN,{model:e,label:$(`general.theme`),themes:n.themes,value:n.prefs.theme,mode:r}),o(`themeMode`,`general.themeMode`)]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupColours`),children:[o(`focusAccent`,`general.focusAccent`,$(`general.focusAccentHint`)),s(`taskColors`,`general.taskColors`,z(`settings.appearance.taskColorsNote`)),s(`colorblind`,`general.colorblind`,z(`settings.appearance.colorblindNote`))]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupTasks`),children:[o(`workingBorder`,`general.workingBorder`,z(`settings.appearance.workingBorderNote`)),o(`runningTitle`,`general.runningTitle`),o(`glyphSet`,`general.glyphSet`),o(`railFold`,`general.railFold`,$(`general.railFoldHint`)),(0,V.jsx)(qj,{label:z(`settings.appearance.railGroup`),value:i,picks:FT.map(e=>({value:e,label:z(e===`state`?`settings.appearance.railGroupState`:`settings.appearance.railGroupProject`)})),onPick:RT})]}),(0,V.jsxs)(Uj,{title:z(`settings.appearance.groupTerminal`),hint:z(`prefs.terminalOnly`),children:[s(`transparent`,`general.transparent`),o(`splitStyle`,`general.splitStyle`)]})]})}function mN(e,t,n){if(t===`offline`)return`offline`;if(t===`unsupported`||t===`mismatch`)return`outdated`;if(!e)return`loading`;let r=e.status;return r?r.gh?r.account?r.account===n?`same`:`different`:`signedOut`:`noGh`:e.reason===`failed`||!e.reason?`failed`:e.reason}var hN=2e3,gN=e=>e?.login?.state===`pending`||e?.login?.state===`syncing`;function _N(e){let{client:t}=e,n=EE(e),[r,i]=(0,g.useState)({}),a=n.flatMap(e=>e.state===`online`?[e.alias]:[]).join(`
115
115
  `),o=(0,g.useMemo)(()=>a?a.split(`
116
- `):[],[a]),s=(0,g.useRef)(new Set),c=(0,g.useCallback)(async e=>{let n=e===``?{}:{machine:e},r=await t.request(`github.status`,n).catch(e=>({status:null,reason:`failed`,message:K(e)}));i(t=>({...t,[e]:r}))},[t]),l=(0,g.useCallback)(()=>Promise.all([``,...o].map(c)).then(()=>{}),[c,o]);return(0,g.useEffect)(()=>{l()},[l]),(0,g.useEffect)(()=>{let e=new Set(Object.entries(r).flatMap(([e,t])=>hN(t.status)?[e]:[])),t=[...s.current].some(t=>!e.has(t));if(s.current=e,t&&l(),e.size===0)return;let n=window.setTimeout(()=>{for(let t of e)c(t)},mN);return()=>window.clearTimeout(n)},[r,c,l]),{machines:n,probes:r,refresh:l,probe:c,act:(0,g.useCallback)(async(e,n)=>{try{let r=await t.request(e,n);return r.ok||G(r.message,`error`),r}catch(e){return G(K(e),`error`),null}},[t])}}var _N={same:`markSame`,different:`markDifferent`,signedOut:`markSignedOut`,noGh:`markNoGh`,outdated:`markOutdated`,offline:`markOffline`,denied:`markDenied`,failed:`markFailed`},vN=(e,t)=>z(`settings.connectors.${e}`,t),yN={same:`text-diff-added`,signedOut:`text-diff-removed`,failed:`text-diff-removed`,denied:`text-diff-removed`,different:`text-warning`,outdated:`text-warning`,offline:`text-muted`,noGh:`text-muted`,loading:`text-muted`};function bN(e,t){return e===`loading`?vN(`loading`):vN(_N[e],{login:t?.account??``})}function xN(e){if(!e?.gh)return``;let t=e.ssh.ok?`✓ ${e.ssh.user??``}`.trim():`✗`;return vN(`detail`,{protocol:e.protocol??`—`,ssh:t})}function SN(){return(0,V.jsx)(`svg`,{className:`flex-none`,viewBox:`0 0 16 16`,width:`22`,height:`22`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{fill:`currentColor`,d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z`})})}function CN(e){navigator.clipboard.writeText(e).then(()=>G(vN(`codeCopied`)),()=>{})}function wN({login:e,onCancel:t}){return e.state===`failed`?(0,V.jsxs)(`div`,{className:ej,children:[(0,V.jsx)(`span`,{className:`text-muted`,children:vN(`loginFailed`,{error:e.error??``})}),(0,V.jsx)(H,{className:`ml-auto`,onClick:t,children:vN(`dismiss`)})]}):e.state===`syncing`?(0,V.jsx)(`div`,{className:ej,children:(0,V.jsx)(`span`,{className:`text-muted`,children:vN(`syncing`)})}):(0,V.jsxs)(`div`,{className:ej,children:[e.code?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`font-mono font-normal normal-nums rounded-sm border-hairline border-dashed border-line px-2 py-0.5 text-display tracking-code`,title:vN(`codeHint`),onClick:()=>CN(e.code??``),children:e.code}),(0,V.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,children:vN(`openGithub`)})]}):(0,V.jsx)(`span`,{className:`text-muted`,children:vN(`loading`)}),(0,V.jsx)(H,{className:`ml-auto`,onClick:t,children:z(`dialog.cancel`)})]})}function TN(e){let t=pN(e.probe,e.machine,e.rove),n=e.probe?.status??null,r=hN(n),i=t===`different`||t===`signedOut`,a=n?.login;return(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{className:wj,children:[(0,V.jsxs)(`div`,{className:Tj,children:[(0,V.jsx)(`span`,{className:WA,children:e.name}),(0,V.jsx)(`span`,{className:Ej(),title:[n?.authDetail,n?.ssh.detail].filter(Boolean).join(`, `)||void 0,children:xN(n)})]}),(0,V.jsx)(`span`,{className:`whitespace-nowrap text-meta ${yN[t]}`,title:e.probe?.message,children:bN(t,n)}),e.onSync&&i&&e.rove&&!r&&(0,V.jsx)(H,{variant:`action`,disabled:e.busy,onClick:e.onSync,children:vN(`useRove`)}),e.onLogin&&i&&!r&&(0,V.jsx)(H,{variant:`action`,disabled:e.busy,onClick:e.onLogin,children:vN(`loginThere`)})]}),a&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsx)(wN,{login:a,onCancel:e.onCancel})})]})}function EN({model:e}){let{machines:t,probes:n,refresh:r,probe:i,act:a}=gN(e),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(!1),u=n[``],d=u?.status?.account??null,f=hN(u?.status),p=async(e,t)=>{s(e);try{await t()}finally{s(null)}},m=e=>p(e,async()=>{await a(`github.login`,e===``?{}:{machine:e}),await i(e)}),h=e=>p(e,async()=>{await a(`github.login`,e===``?{cancel:!0}:{machine:e,cancel:!0}),await i(e)}),_=e=>p(e,async()=>{(await a(`github.sync`,{machine:e}))?.ok&&G(vN(`synced`,{machine:e,login:d??``})),await i(e)}),v=()=>p(``,async()=>{(await a(`github.logout`,{}))?.ok&&l(!1),await r()});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Uj,{children:(0,V.jsxs)(`div`,{children:[(0,V.jsx)(Wj,{label:(0,V.jsxs)(`span`,{className:`flex items-center gap-2.5`,children:[(0,V.jsx)(SN,{}),`GitHub`]}),hint:vN(`githubDescription`),children:d?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`span`,{className:KA,children:[`@`,d]}),(0,V.jsx)(H,{variant:`action`,disabled:o!==null,onClick:()=>l(!0),children:vN(`disconnect`)})]}):!f&&(0,V.jsx)(H,{variant:`filled`,disabled:o!==null||!u,onClick:()=>void m(``),children:vN(`connect`)})}),c&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-inset px-3 py-2.5 [&_p]:m-0 [&_p]:text-meta [&_p]:text-muted`,children:[(0,V.jsx)(`p`,{children:vN(`disconnectBody`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2.5`,children:[(0,V.jsx)(H,{onClick:()=>l(!1),children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:`danger`,disabled:o!==null,onClick:()=>void v(),children:vN(`disconnect`)})]})]})}),!d&&u?.status?.login&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsx)(wN,{login:u.status.login,onCancel:()=>void h(``)})})]})}),d&&(0,V.jsxs)(Uj,{title:vN(`machines`),children:[(0,V.jsx)(TN,{name:vN(`thisMachine`),probe:u,machine:null,rove:d,busy:o!==null,onCancel:()=>void h(``)}),t.map(e=>(0,V.jsx)(TN,{name:e.alias,probe:n[e.alias],machine:e.state,rove:d,busy:o!==null,onSync:()=>void _(e.alias),onLogin:()=>void m(e.alias),onCancel:()=>void h(e.alias)},e.alias)),(0,V.jsx)(`div`,{className:`py-2.5`,children:(0,V.jsx)(H,{onClick:()=>void r(),children:vN(`refresh`)})})]})]})}function DN({model:e}){return(0,V.jsx)(EN,{model:e})}var ON=[{key:`remoteProjects`,label:`dev.remote`,hint:`dev.remoteHint`},{key:`autoStatus`,label:`dev.autoStatus`,hint:`dev.autoStatusHint`},{key:`dispatcher`,label:`dev.dispatcher`,hint:`dev.dispatcherHint`}];function kN({client:e}){let{prefs:t}=L_(),[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(!1),o=async()=>{if(n){a(!0);try{if(n===`reset`){await e.request(`dev.reset`),localStorage.removeItem(`rove.prefs`),window.location.reload();return}await e.request(`daemon.restart`),G($(`restart.done`)),r(null)}catch(e){G(K(e),`error`)}finally{a(!1)}}},s=(e,t,a,s,c)=>(0,V.jsxs)(`div`,{children:[(0,V.jsx)(Wj,{label:t,hint:a,children:(0,V.jsx)(H,{variant:`action`,onClick:()=>r(e),children:s})}),n===e&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-inset px-3 py-2.5 [&_p]:m-0 [&_p]:text-meta [&_p]:text-muted`,children:[(0,V.jsx)(`strong`,{children:$(`${e}.title`)}),(0,V.jsx)(`p`,{children:z(e===`reset`?`prefs.resetBody`:`prefs.restartBody`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2.5`,children:[(0,V.jsx)(H,{onClick:()=>r(null),children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:c?`danger`:`filled`,disabled:i,onClick:()=>void o(),children:s})]})]})})]});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Uj,{title:$(`dev.experimental`),children:ON.map(n=>(0,V.jsx)(Gj,{label:$(n.label),hint:$(n.hint),checked:t[n.key],onChange:t=>void I_(e,n.key,t)},n.key))}),(0,V.jsxs)(Uj,{hint:$(`dev.doctorHint`),children:[s(`restart`,$(`dev.restart`),z(`prefs.restartHint`),z(`prefs.restartButton`),!1),s(`reset`,$(`dev.reset`),z(`prefs.resetHint`),z(`prefs.resetButton`),!0)]})]})}function AN(e){return e.binaryFound===void 0?{key:`settings.engines.status.checking`,tone:`unknown`}:e.binaryFound===null?{key:`settings.engines.status.unknown`,tone:`unknown`}:e.binaryFound?e.configIssue?{key:`settings.engines.status.integrationBlocked`,tone:`error`}:e.login===`no`?{key:`settings.engines.status.signIn`,tone:`attention`}:e.hooks===`outdated`?{key:`settings.engines.status.integrationOutdated`,tone:`attention`}:e.hooks===`not-installed`?{key:`settings.engines.status.integrationMissing`,tone:`attention`}:{key:`settings.engines.status.ready`,tone:`ready`}:e.commandChosen?{key:`settings.engines.status.notOnPath`,tone:`attention`}:{key:`settings.engines.status.notInstalled`,tone:`absent`}}var jN=_([]),MN=3e4;function NN(e){return e.request(`skill.missing`).then(e=>jN.set(e.engines),()=>{})}function PN(e){(0,g.useEffect)(()=>{let t=e.onOpen(()=>void NN(e)),n=window.setInterval(()=>void NN(e),MN);return()=>{t(),window.clearInterval(n)}},[e])}function FN(e){return e.request(`skill.install`).then(e=>{e.error&&G($(`engines.skill.failed`,{reason:e.error}),`error`)}).catch(e=>G(K(e),`error`)).then(()=>NN(e))}function IN(e){return AN({binaryFound:e.binaryFound,login:e.login,hooks:e.hooks,configIssue:e.configIssue,commandChosen:e.custom||e.customized})}var LN={ready:`ready`,attention:`attention`,error:`error`,absent:`absent`,unknown:`absent`};function RN({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`engines.settings`)?.engines??null),[r,i]=(0,g.useState)(null),a=(0,g.useCallback)(()=>Hs(e,`engines.settings`).then(e=>n(e.engines),e=>G(K(e),`error`)),[e]);(0,g.useEffect)(()=>{a()},[a]);let o=(t,n={})=>void e.request(t,n).then(a).catch(e=>G(K(e),`error`));return t?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`p`,{className:RA,children:$(`engines.hint`)}),(0,V.jsxs)(`div`,{className:nj,children:[(0,V.jsxs)(`div`,{className:rj,"aria-hidden":`true`,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{children:$(`engines.defaultMark`)}),(0,V.jsx)(`span`,{children:$(`engines.available`)})]}),t.map(e=>(0,V.jsx)(zN,{engine:e,open:r===e.id,onToggleOpen:()=>i(r===e.id?null:e.id),run:o},e.id))]})]}),(0,V.jsx)(HN,{engines:t,run:o}),(0,V.jsx)(UN,{engines:t,client:e,reload:a})]}):(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)})}function zN(e){let{engine:t,run:n}=e,r=(0,g.useId)(),i=IN(t);return(0,V.jsxs)(`div`,{className:ij,children:[(0,V.jsxs)(`div`,{className:aj,children:[(0,V.jsxs)(`button`,{type:`button`,className:oj,"aria-expanded":e.open,"aria-controls":r,onClick:e.onToggleOpen,children:[(0,V.jsx)(Fa,{right:!e.open,className:sj(e.open)}),(0,V.jsxs)(`span`,{className:cj,children:[(0,V.jsxs)(`span`,{className:lj(!t.enabled),children:[t.name,t.renamedFrom?(0,V.jsx)(`span`,{className:uj,children:t.renamedFrom}):null,t.custom&&!t.renamedFrom?(0,V.jsx)(`span`,{className:uj,children:$(`engines.customTag`)}):null]}),(0,V.jsxs)(`span`,{className:fj(LN[i.tone]),children:[(0,V.jsx)(`span`,{className:pj(LN[i.tone]),"aria-hidden":`true`}),$(i.key.slice(9))]})]})]}),(0,V.jsx)(`div`,{className:mj,children:t.isDefault?(0,V.jsx)(`span`,{className:hj,children:$(`engines.defaultMark`)}):t.canBeDefault?(0,V.jsx)(`button`,{type:`button`,className:gj,"aria-label":z(`settings.engines.default`,{name:t.name}),onClick:()=>n(`engine.setDefault`,{id:t.id}),children:$(`engines.makeDefault`)}):null}),(0,V.jsx)(Hj,{on:t.enabled,"aria-label":z(`settings.engines.enabled`,{name:t.name}),onClick:()=>n(`engine.setEnabled`,{id:t.id,enabled:!t.enabled})})]}),e.open?(0,V.jsx)(VN,{id:r,engine:t,run:n}):null]})}function BN(e){if(e.configIssue)return $(`engines.detail.hooksBlockedHere`,{reason:e.configIssue});switch(e.hooks){case`installed`:return $(`engines.detail.hooksInstalled`);case`outdated`:return $(`engines.detail.hooksOutdated`);case`not-installed`:return e.binaryFound===!1?$(`engines.detail.hooksAwaitEngine`):$(`engines.detail.hooksMissing`);default:return $(`engines.detail.hooksUnsupported`)}}function VN(e){let{engine:t,run:n}=e,[r,i]=(0,g.useState)(null),a=t.binaryFound===!0?$(`engines.detail.programFound`,{binary:t.binary,path:t.binaryPath??t.binary}):t.binaryFound===!1?$(`engines.detail.programMissing`,{binary:t.binary}):$(`engines.detail.programUnknown`,{binary:t.binary}),o=t.login===`yes`?$(`engines.detail.signedIn`):t.login===`no`?$(`engines.detail.signedOut`):$(`engines.detail.signInUnknown`),s=[BN(t),$(t.markers?`engines.detail.markersYes`:`engines.detail.markersNo`),$(t.screen?`engines.detail.screenYes`:t.hooks===`installed`?`engines.detail.screenNotNeeded`:`engines.detail.screenNo`)];return(0,V.jsxs)(`div`,{id:e.id,className:_j,children:[(0,V.jsxs)(`dl`,{className:vj,children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.program`)}),(0,V.jsx)(`dd`,{className:bj(t.binaryFound===!1),children:a}),(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.signIn`)}),(0,V.jsx)(`dd`,{className:bj(t.login===`no`),children:o}),(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.reporting`)}),(0,V.jsx)(`dd`,{className:bj(!1),children:s.map(e=>(0,V.jsx)(`span`,{className:`block`,children:e},e))}),t.skill===`unsupported`?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.skill`)}),(0,V.jsx)(`dd`,{className:bj(t.skill!==`installed`),children:$(t.skill===`installed`?`engines.detail.skillInstalledHere`:t.skill===`outdated`?`engines.detail.skillOutdated`:`engines.detail.skillMissing`)})]}),t.custom?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.adapter`)}),(0,V.jsx)(`dd`,{className:bj(!1),children:t.protocol?$(`engines.detail.adapterDeclared`,{protocol:t.protocol}):$(`engines.detail.adapterGeneric`)})]}):null]}),r===null?(0,V.jsxs)(`div`,{className:xj,children:[(0,V.jsx)(H,{variant:`action`,onClick:()=>i(t.name),children:z(`settings.engines.rename`)}),t.custom||t.customized?(0,V.jsx)(H,{variant:`action`,onClick:()=>n(`engine.reset`,{id:t.id}),children:t.custom?z(`settings.engines.remove`):z(`settings.engines.reset`)}):null]}):(0,V.jsxs)(`form`,{className:xj,onSubmit:e=>{e.preventDefault(),n(`engine.rename`,{id:t.id,name:r}),i(null)},children:[(0,V.jsx)(`input`,{className:`${en} w-full ${Sj}`,autoFocus:!0,value:r,"aria-label":z(`settings.engines.rename`),placeholder:z(`settings.engines.namePlaceholder`),onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),i(null))}}),(0,V.jsx)(H,{variant:`filled`,type:`submit`,children:z(`settings.engines.save`)}),(0,V.jsx)(H,{variant:`action`,onClick:()=>i(null),children:z(`settings.engines.cancel`)})]})]})}function HN({engines:e,run:t}){let n=e.filter(e=>e.hooks!==`unsupported`),r=n.filter(e=>e.binaryFound!==!1),i=r.filter(e=>e.hooks===`installed`).length,a=r.length-i,o=n.filter(e=>e.hooks!==`not-installed`).length;return n.length===0?null:(0,V.jsx)(Uj,{title:$(`engines.integrations.title`),hint:$(`engines.integrations.hint`),children:(0,V.jsx)(Wj,{label:$(`engines.integrations.summary`,{installed:i,total:r.length}),children:(0,V.jsxs)(`div`,{className:$A,children:[a>0?(0,V.jsx)(H,{variant:`filled`,onClick:()=>t(`engines.hooks.install`),children:$(`engines.integrations.install`,{count:a})}):(0,V.jsx)(`span`,{className:Cj,children:$(`engines.integrations.upToDate`)}),o>0?(0,V.jsx)(H,{variant:`action`,onClick:()=>t(`engines.hooks.uninstall`),children:$(`engines.integrations.remove`,{count:o})}):null]})})})}function UN(e){let t=e.engines.filter(e=>e.skill!==`unsupported`),n=t.filter(e=>e.skill===`installed`).length,r=t.length-n;return(0,V.jsx)(Uj,{title:$(`engines.skill.title`),hint:$(`engines.skill.hint`),children:(0,V.jsx)(Wj,{label:t.length>0?$(`engines.integrations.summary`,{installed:n,total:t.length}):$(`engines.skill.noEngines`),children:r>0?(0,V.jsx)(H,{variant:`filled`,onClick:()=>void FN(e.client).then(e.reload),children:$(`engines.skill.install`,{count:r})}):t.length>0?(0,V.jsx)(`span`,{className:Cj,children:$(`engines.integrations.upToDate`)}):null})})}function WN({client:e}){let[t,n]=(0,g.useState)(``),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(!1);return(0,V.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:a=>{a.preventDefault(),!(!t.trim()||!r.trim())&&(o(!0),e.request(`feedback.send`,{title:t.trim(),body:r}).then(e=>{G(z(`settings.feedback.sent`,{url:e.discussion?.url??``})),n(``),i(``)}).catch(e=>G(K(e),`error`)).finally(()=>o(!1)))},children:[(0,V.jsx)(`p`,{className:`m-0 ${GA}`,children:z(`settings.feedback.hint`)}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`settings.feedback.titleLabel`)}),(0,V.jsx)(`input`,{className:`${JA} w-full`,value:t,onChange:e=>n(e.target.value)})]}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`settings.feedback.body`)}),(0,V.jsx)(`textarea`,{className:`${JA} ${QA} w-full`,rows:6,value:r,onChange:e=>i(e.target.value)})]}),(0,V.jsx)(`div`,{className:$A,children:(0,V.jsx)(H,{variant:`filled`,type:`submit`,disabled:a||!t.trim()||!r.trim(),children:z(`settings.feedback.send`)})})]})}var GN=[{value:`en`,label:`English`},{value:`zh`,label:`中文`}],KN={default:`general.worktreeKindDefault`,nextToProject:`general.worktreeKindNext`,custom:`general.worktreeKindCustom`};function qN({model:e}){let{client:t}=e,n=L_(),{prefs:r,info:i}=n,a=(e,n)=>void I_(t,e,n),o=[`default`,`nextToProject`];(i.worktreeCustomPath||r.worktreeBase===`custom`)&&o.push(`custom`);let s=o.map(e=>({value:e,label:$(KN[e])}));return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{title:z(`settings.general.groupInterface`),children:[(0,V.jsx)(qj,{label:$(`general.language`),hint:z(`prefs.languageHint`),value:r.locale,picks:GN,onPick:e=>a(`locale`,e)}),(0,V.jsx)(Gj,{label:$(`general.keyHintsShow`),hint:$(`general.keyHintsHint`),checked:r.keyHints,onChange:e=>a(`keyHints`,e)}),(0,V.jsx)(Gj,{label:$(`general.zenDefaultOn`),hint:z(`prefs.zenHint`),checked:r.zen,onChange:e=>a(`zen`,e)}),(0,V.jsx)(qj,{label:z(`settings.general.tabStrip`),value:r.tabStrip,picks:R_(n,`tabStrip`).map(e=>({value:e,label:$(`general.tabStripMode.${e}`)})),onPick:e=>a(`tabStrip`,e)})]}),(0,V.jsxs)(Uj,{title:z(`settings.general.groupFiles`),children:[(0,V.jsx)(qj,{label:$(`general.editor`),hint:z(`settings.general.editorNote`),value:r.editorKind,picks:R_(n,`editorKind`).map(e=>({value:e,label:e})),onPick:e=>a(`editorKind`,e)}),(0,V.jsx)(qj,{label:$(`general.worktree`),hint:$(`general.worktreeHint`),value:r.worktreeBase,picks:s,onPick:e=>a(`worktreeBase`,e)})]}),(0,V.jsx)(Uj,{title:z(`settings.general.groupTerminal`),hint:$(`general.terminalHint`),children:(0,V.jsx)(JN,{client:t})})]})}function JN({client:e}){let t=L_(),n=t.options.scrollbackRows,r=n&&`min`in n?n:{min:100,max:1e5},[i,a]=(0,g.useState)(String(t.prefs.scrollbackRows));return(0,g.useEffect)(()=>a(String(t.prefs.scrollbackRows)),[t.prefs.scrollbackRows]),(0,V.jsx)(Wj,{label:z(`settings.general.scrollback`),hint:$(`general.scrollbackRowHint`),children:(0,V.jsx)(`input`,{className:YA,inputMode:`numeric`,value:i,"aria-label":$(`general.scrollbackTitle`),onChange:e=>a(e.target.value),onBlur:()=>{let n=Number(i);if(i.trim()===``||!Number.isInteger(n)){a(String(t.prefs.scrollbackRows));return}let o=Math.min(r.max,Math.max(r.min,n));o===t.prefs.scrollbackRows?a(String(o)):I_(e,`scrollbackRows`,o)},onKeyDown:e=>e.key===`Enter`&&e.currentTarget.blur()})})}[...Array.from({length:12},(e,t)=>`f${t+1}`)];var YN={"diff.review.cursor":`diff-review cursor is a fixed raw binding (j/k), not keymap-driven`,"diff.review.range":`diff-review range anchor is a fixed raw binding (v), not keymap-driven`,"diff.review.note":`diff-review note is a fixed raw binding (c), not keymap-driven`,"diff.review.send":`diff-review send is a fixed raw binding (s), not keymap-driven`,"diff.review.drop":`diff-review drop-note is a fixed raw binding (x), not keymap-driven`,"diff.review.reload":`preview reload is a fixed raw binding (r), not keymap-driven`};function XN(e,t){let n=`alternating [${e}, ${t}] pairs`;return{layout:n,validateCount:e=>e>=2&&e%2==0?null:`needs ${n} (an even number of chords — got ${e})`}}XN(`top (double-tap)`,`bottom`),XN(`down`,`up`),XN(`down`,`up`),XN(`down`,`up`),XN(`collapse`,`expand`),XN(`previous tab`,`next tab`);async function ZN(e){try{(await e.request(`keybindings.createFile`)).created||G(z(`keys.exists`),`error`),await Qr(e)}catch(e){G(K(e),`error`)}}function QN({model:e}){let{client:t}=e,{prefs:n}=L_(),r=v(Yr),[i,a]=(0,g.useState)(!1);(0,g.useEffect)(()=>void Qr(t),[t]);let o=r.prefix.key??$(`keybindings.prefixDisabled`),s=Object.keys(YN).sort();return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{children:[(0,V.jsx)(qj,{label:$(`keybindings.tapPresentation`),hint:$(`keybindings.tapPresentationHint`),value:n.prefixTap,picks:[{value:`local`,label:$(`keybindings.tapPresentationLocal`)},{value:`guide`,label:$(`keybindings.tapPresentationGuide`)}],onPick:e=>void I_(t,`prefixTap`,e)}),(0,V.jsx)(Wj,{label:$(`keybindings.prefixTitle`,{prefix:o}),hint:$(`keybindings.prefixHint`,{prefix:o,timeout:r.prefix.timeoutMs})})]}),(0,V.jsxs)(Uj,{title:$(`keybindings.configFile`),hint:`${$(`keybindings.hint`)} ${z(`prefs.keysYaml`)}`,children:[(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono break-all`,children:r.path+(r.exists?``:$(`keybindings.notCreated`))})}),!r.exists&&(0,V.jsx)(Wj,{label:z(`keys.createFile`),hint:$(`keybindings.createHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>void ZN(t),children:z(`keys.createFile`)})}),(0,V.jsx)(Wj,{label:z(`keys.agent`),hint:z(i?`keys.agentFailed`:`keys.agentHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>{a(!1),ZM(e,z(`keys.agentPrompt`,{path:r.path})).catch(()=>a(!0))},children:z(`keys.agent`)})})]}),r.exists&&(0,V.jsxs)(Uj,{title:$(`keybindings.overridesApplied`),children:[r.applied.length===0&&(0,V.jsx)(Wj,{label:$(`keybindings.none`)}),r.applied.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono`,children:e.id}),hint:`${e.keys.length>0?e.keys.join(` / `):$(`keybindings.unbound`)} (${$(`keybindings.defaultKeys`,{keys:e.defaultKeys.join(` / `)})})`},e.id))]}),r.warnings.length>0&&(0,V.jsx)(Uj,{title:$(`keybindings.warnings`),children:r.warnings.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`text-warning`,children:e})},e))}),r.plugins.length>0&&(0,V.jsx)(Uj,{title:z(`keys.pluginChords`),children:r.plugins.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono`,children:e.chord}),hint:(0,V.jsx)(`span`,{className:`font-mono`,children:`${e.kind}:${e.target}`})},e.chord))}),(0,V.jsx)(`p`,{className:RA,children:$(`keybindings.fixed`,{ids:s.join(`, `)})})]})}var $N=`/assets/pulse-3XJkP4CJ.wav`;function eP(e,t){return e===`error`||t}function tP(e,t){return t||e.kind!==`done`||e.turnEnd!==!0}function nP(e,t){return t&&e.silent!==!0}function rP(e){return e===`permission_needed`?`needs_input`:e===`error`||e===`rate_limited`||e===`dead`?`error`:e===`turn_complete`?`done`:null}function iP(e,t,n,r){if(e===null)return[];let i=[];for(let[a,o]of t){if(a===n||e.get(a)===o)continue;let t=r(o);t&&i.push({key:a,kind:t})}return i}function aP(){return window.isSecureContext&&`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window}var oP=()=>navigator.serviceWorker.register(`sw.js`);async function sP(e){if(!aP())return`unsupported`;if(Notification.permission===`denied`)return`blocked`;let t=await(await navigator.serviceWorker.getRegistration())?.pushManager.getSubscription();if(!t)return`off`;let{subscribed:n}=await e.request(`push.status`,{endpoint:t.endpoint});return n?`on`:`off`}async function cP(e){if(!aP())return`unsupported`;if(await Notification.requestPermission()!==`granted`)return`blocked`;let t=await oP();await navigator.serviceWorker.ready;let{publicKey:n}=await e.request(`push.key`),r=await t.pushManager.getSubscription();return r?.options.applicationServerKey&&pP(r.options.applicationServerKey)!==n&&(await r.unsubscribe(),r=null),r??=await t.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:fP(n)}),await e.request(`push.subscribe`,{subscription:r.toJSON()}),`on`}async function lP(e){let t=await(await navigator.serviceWorker.getRegistration())?.pushManager.getSubscription();return t&&(await e.request(`push.unsubscribe`,{endpoint:t.endpoint}),await t.unsubscribe()),`off`}async function uP(e,t,n,r){let i={body:r,tag:`task:${e}:${t}`,icon:`icon-192.png`,data:{taskId:e}},a=`serviceWorker`in navigator?await navigator.serviceWorker.getRegistration():void 0;a?await a.showNotification(`Rove — ${n}`,i):new Notification(`Rove — ${n}`,i)}function dP(e){let t=new URLSearchParams(window.location.search),n=t.get(`task`);if(n){t.delete(`task`);let r=t.toString();history.replaceState(null,``,`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`),e.selectWhenListed(n)}if(!(`serviceWorker`in navigator))return()=>{};let r=t=>{let n=t.data;n?.type===`rove.openTask`&&typeof n.taskId==`string`&&n.taskId&&e.selectWhenListed(n.taskId)};return navigator.serviceWorker.addEventListener(`message`,r),()=>navigator.serviceWorker.removeEventListener(`message`,r)}function fP(e){let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`));return Uint8Array.from(t,e=>e.charCodeAt(0))}function pP(e){return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var mP={done:`✓`,needs_input:`?`,error:`✕`};function hP(e){let t=new Audio($N);t.volume=Math.min(1,Math.max(0,e)),t.play().catch(()=>void 0)}function gP(e,t,n){!document.hidden||typeof Notification>`u`||Notification.permission!==`granted`||uP(e,t,n,mP[t]).catch(()=>void 0)}function _P(){typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission()}function vP(e){let t=new Map;for(let n of e.tasks)n.activity&&t.set(n.id,n.activity.state);return t}function yP(e){let t=(0,g.useRef)(null);(0,g.useEffect)(()=>{let n=()=>{let n=e.tasks.get();if(!n)return;let r=vP(n),i=iP(t.current,r,null,rP);t.current=r;let{prefs:a}=M_.get();if(!a.crossTask)return;let o=e.selection.get().taskId,s=new Map(n.tasks.map(e=>[e.id,e.label]));for(let{key:e,kind:t}of i){if(e===o||!tP({kind:t,turnEnd:!0},a.finishedAlerts))continue;let n=s.get(e)??e;eP(t,a.toast)&&G(`${mP[t]} ${n}`,t===`error`?`error`:`info`),nP({},a.sound)&&(hP(a.soundVolume),gP(e,t,n))}};return n(),e.tasks.subscribe(n)},[e])}function bP({client:e}){let[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(null);(0,g.useEffect)(()=>{sP(e).then(n,()=>n(`off`))},[e]);let a=t=>{i(null),(t?cP(e):lP(e)).then(n,e=>i(e instanceof Error?e.message:String(e)))},o=r?z(`prefs.pushFailed`,{error:r}):z(t===`unsupported`?`prefs.pushUnsupported`:t===`blocked`?`prefs.pushBlocked`:`prefs.pushHint`);return(0,V.jsx)(Gj,{label:z(`prefs.push`),hint:o,checked:t===`on`,disabled:t===null||t===`unsupported`||t===`blocked`,onChange:a})}function xP({model:e}){let{client:t}=e,n=L_(),{prefs:r}=n,i=(e,n)=>void I_(t,e,n);return(0,V.jsxs)(Uj,{children:[(0,V.jsx)(Gj,{label:$(`general.toast`),hint:z(`settings.notifications.toastNote`),checked:r.toast,onChange:e=>i(`toast`,e)}),(0,V.jsx)(Gj,{label:$(`general.sound`),hint:z(`prefs.soundHint`),checked:r.sound,onChange:e=>{e&&_P(),i(`sound`,e)}}),(0,V.jsx)(qj,{label:z(`settings.notifications.volume`),hint:z(`prefs.soundVolumeHint`),value:r.soundVolume,picks:R_(n,`soundVolume`).map(e=>({value:e,label:`${Math.round(e*100)}%`})),onPick:e=>{M_.get().prefs.sound&&hP(e),i(`soundVolume`,e)}}),(0,V.jsx)(Gj,{label:$(`general.crossTask`),hint:$(`general.crossTaskHint`),checked:r.crossTask,onChange:e=>i(`crossTask`,e)}),(0,V.jsx)(Gj,{label:$(`general.finishedAlerts`),hint:$(`general.finishedAlertsHint`),checked:r.finishedAlerts,onChange:e=>i(`finishedAlerts`,e)}),(0,V.jsx)(bP,{client:t})]})}var SP={kanban:`kanban`,issues:`issues`};function CP({model:e}){let t=v(e.installedMods),[n,r]=(0,g.useState)(()=>Bs(e,`builtinMods.list`)?.mods??null);if((0,g.useEffect)(()=>{Hs(e,`builtinMods.list`).then(e=>r(e.mods),()=>r([])),e.refreshMods()},[e]),!n||n.length===0)return null;let i=n=>{let r=!t.has(n.id);e.client.request(`builtinMod.setInstalled`,{id:n.id,installed:r}).then(()=>(!r&&ln.get()===SP[n.id]&&ln.set(null),e.refreshMods())).catch(e=>G(K(e),`error`))};return(0,V.jsx)(Uj,{title:z(`settings.plugins.builtIn`),hint:z(`settings.plugins.builtInHint`),children:n.map(e=>(0,V.jsx)(Wj,{label:e.name,hint:e.description,inline:!0,children:(0,V.jsx)(Hj,{on:t.has(e.id),"aria-label":z(`settings.plugins.turnOn`,{name:e.name}),onClick:()=>i(e)})},e.id))})}function wP({model:e}){let{client:t}=e,[n,r]=(0,g.useState)(()=>Bs(t,`plugins.list`)?.plugins??null),i=(0,g.useCallback)(()=>Hs(t,`plugins.list`).then(e=>r(e.plugins),e=>G(K(e),`error`)),[t]);return(0,g.useEffect)(()=>{i()},[i]),(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(CP,{model:e}),(0,V.jsx)(Uj,{title:z(`settings.plugins.registered`),children:n?n.length===0?(0,V.jsx)(`p`,{className:qA,children:z(`settings.plugins.empty`)}):n.map(e=>(0,V.jsx)(Wj,{label:e.id,hint:[e.version,e.linked?z(`settings.plugins.linked`):null,e.platformOk===!1?z(`settings.plugins.unsupportedPlatform`):null].filter(Boolean).join(`, `),inline:!0,children:(0,V.jsx)(Hj,{on:e.enabled,"aria-label":e.id,onClick:()=>void t.request(`plugin.setEnabled`,{id:e.id,enabled:!e.enabled}).then(i).catch(e=>G(K(e),`error`))})},e.id)):(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)})})]})}function TP(e){let[t,n]=(0,g.useState)(e.tier.engine),[r,i]=(0,g.useState)(e.tier.model??``),[a,o]=(0,g.useState)(e.tier.effort??``),s=e.engines.find(e=>e.id===t);return(0,V.jsxs)(`form`,{className:kj,onSubmit:n=>{n.preventDefault(),e.onSave(t,s?.takesModel?r.trim():``,a)},onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),e.onCancel())},children:[(0,V.jsx)(EA,{label:$(`sections.engines`),value:t,picks:e.engines.map(e=>({value:e.id,label:e.name})),onPick:t=>{let r=e.engines.find(e=>e.id===t);n(t),r&&!r.effortLevels.includes(a)&&o(``),r&&!r.takesModel&&i(``)}}),s&&s.effortLevels.length>0&&(0,V.jsx)(EA,{label:z(`prefs.tierEffort`),value:a,picks:[``,...s.effortLevels].map(e=>({value:e,label:e||$(`autoRouting.engineDefault`)})),onPick:o}),s?.takesModel&&(0,V.jsx)(`input`,{className:`rounded-sm border-hairline border-line bg-paper px-2.5 py-1.5 font-sans text-body text-ink focus-visible:border-line-active focus-visible:outline-none`,value:r,spellCheck:!1,placeholder:$(`autoRouting.engineDefault`),"aria-label":z(`prefs.tierModel`),onChange:e=>i(e.target.value)}),(0,V.jsxs)(`div`,{className:$A,children:[(0,V.jsx)(H,{onClick:e.onCancel,children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:`filled`,type:`submit`,children:$(`action.save`)})]})]})}function EP({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`autoRouting.get`)??null),[r,i]=(0,g.useState)(null),a=(0,g.useCallback)(()=>Hs(e,`autoRouting.get`).then(n,e=>G(K(e),`error`)),[e]);(0,g.useEffect)(()=>{a()},[a]);let o=(t,n)=>e.request(t,n).then(a).catch(e=>G(K(e),`error`));if(!t)return(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)});let s=t.classifier,c=[{value:`off`,label:$(`autoRouting.classifierOff`)},{value:`jev`,label:`jev`},...s.canCustom||s.mode===`custom`?[{value:`custom`,label:$(`autoRouting.classifierCustomLabel`)}]:[]],l=s.mode===`off`?$(`autoRouting.classifierOffHint`):s.mode===`jev`?$(`autoRouting.classifierJevHint`):$(`autoRouting.classifierCustomHint`),u=s.keySource===`env`?$(`autoRouting.keyPresentEnv`,{env:s.keyEnv??``}):s.keySource===`file`?$(`autoRouting.keySaved`):s.keyConfigured?$(`autoRouting.keyMissing`):$(`autoRouting.keyCustomUnused`);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{hint:$(`autoRouting.hint`),children:[!t.configured&&(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`text-warning`,children:$(`autoRouting.unconfigured`)})}),t.tiers.map(e=>(0,V.jsxs)(`div`,{className:Dj,children:[(0,V.jsxs)(`div`,{className:Oj,children:[(0,V.jsx)(`span`,{className:WA,children:TA(`tier.${e.tier}`)}),(0,V.jsx)(`span`,{className:`${GA} min-w-0 truncate`,children:[e.engineName,e.model??$(`autoRouting.engineDefault`),e.effort??$(`autoRouting.engineDefault`)].join(` · `)}),(0,V.jsx)(H,{className:`ml-auto`,onClick:()=>i(r===e.tier?null:e.tier),children:z(`prefs.tierEdit`)})]}),(0,V.jsx)(`span`,{className:GA,children:TA(`tierDesc.${e.tier}`)}),(0,V.jsx)(`span`,{className:`text-meta ${e.block?`text-warning`:`text-success`}`,children:e.block?$(`autoRouting.unavailable`,{reason:e.block}):$(`autoRouting.ready`)}),r===e.tier&&(0,V.jsx)(TP,{tier:e,engines:t.engines,onCancel:()=>i(null),onSave:(t,n,r)=>{i(null),o(`autoRouting.setTier`,{tier:e.tier,engine:t,model:n,effort:r})}})]},e.tier))]}),(0,V.jsxs)(Uj,{title:$(`autoRouting.classifierTitle`),hint:$(`autoRouting.classifierHint`),children:[(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:s.mode===`off`?`text-muted`:`text-warning`,children:$(`autoRouting.classifierDataFlow`)})}),(0,V.jsx)(qj,{label:$(`autoRouting.classifierLabel`),hint:l.replace(/^[—\s]+/,``),value:s.mode,picks:c,onPick:e=>void o(`autoRouting.setClassifier`,{mode:e})})]}),(0,V.jsxs)(Uj,{title:z(`prefs.classifierConnection`),hint:z(`prefs.editInTui`),children:[(0,V.jsx)(Jj,{label:$(`autoRouting.endpointLabel`),value:s.endpointHost||z(`prefs.unset`)}),(0,V.jsx)(Jj,{label:$(`autoRouting.thresholdLabel`),value:s.threshold.toFixed(2)}),(0,V.jsx)(Wj,{label:$(`autoRouting.keyLabel`),hint:u})]})]})}var DP=[{id:`preferences`,sections:[`general`,`appearance`,`notifications`,`snippets`,`keys`]},{id:`agents`,sections:[`engines`,`autoRouting`,`connectors`,`plugins`]},{id:`more`,sections:[`about`,`feedback`,`dev`]}],OP=e=>({section:e??`general`,drilled:e!==void 0});function kP(e,t){return t&&e.drilled?`list`:`close`}var AP=e=>e.split(`
117
- `,1)[0]??``;function jP(e){let[t,n]=(0,g.useState)(e.editing?.name??``),[r,i]=(0,g.useState)(e.editing?.text??``),[a,o]=(0,g.useState)(!1),s=ZD.test(t)&&r.trim()!==``;return(0,V.jsxs)(`form`,{className:`flex flex-col gap-3`,onSubmit:n=>{n.preventDefault(),s&&(o(!0),YD(e.client,{name:t,text:r}).then(e.onDone).catch(e=>{G(K(e),`error`),o(!1)}))},children:[(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`snippets.name`)}),(0,V.jsx)(`input`,{className:`${JA} w-full font-mono`,value:t,maxLength:32,spellCheck:!1,autoComplete:`off`,autoFocus:!e.editing,readOnly:e.editing!==void 0,placeholder:z(`snippets.namePlaceholder`),onChange:e=>n(e.target.value)}),t!==``&&!ZD.test(t)&&(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:z(`snippets.badName`)})]}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`snippets.text`)}),(0,V.jsx)(`textarea`,{className:`${JA} ${QA} w-full`,rows:5,value:r,maxLength:8e3,placeholder:z(`snippets.textPlaceholder`),onChange:e=>i(e.target.value)})]}),(0,V.jsxs)(`div`,{className:$A,children:[(0,V.jsx)(H,{onClick:e.onDone,children:z(`snippets.cancel`)}),(0,V.jsx)(H,{type:`submit`,disabled:a||!s,children:z(`snippets.save`)})]})]})}function MP({model:e}){let{client:t}=e,n=qD(),[r,i]=(0,g.useState)(null);return(0,g.useEffect)(()=>void JD(t).catch(()=>void 0),[t]),(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsxs)(Uj,{children:[n.length===0&&r===null&&(0,V.jsx)(Wj,{label:z(`snippets.empty`)}),n.map(e=>(0,V.jsxs)(Wj,{label:(0,V.jsxs)(`span`,{className:`font-mono`,children:[`@`,e.name]}),hint:AP(e.text),children:[(0,V.jsx)(H,{onClick:()=>i(e),children:z(`snippets.edit`)}),(0,V.jsx)(H,{onClick:()=>void XD(t,e.name).then(()=>{i(null),G(z(`snippets.removed`,{name:e.name}))}).catch(e=>G(K(e),`error`)),children:z(`snippets.remove`)})]},e.name))]}),r===null?(0,V.jsx)(`div`,{className:$A,children:(0,V.jsx)(H,{onClick:()=>i(`new`),children:z(`snippets.add`)})}):(0,V.jsx)(jP,{client:t,editing:r===`new`?void 0:r,onDone:()=>i(null)},r===`new`?`new`:r.name)]})}var NP=e=>e>=95?`crit`:e>=75?`warn`:`ok`,PP=e=>String(e).padStart(2,`0`);function FP(e,t){if(e==null||e<=t)return``;let n=new Date(e),r=`${PP(n.getHours())}:${PP(n.getMinutes())}`;return e-t<864e5?`→ ${r}`:`→ ${n.getMonth()+1}/${n.getDate()} ${r}`}function IP(e,t){let n=e.windows.find(e=>e.kind===`session`)??e.windows[0];return n?{label:n.label,percentText:`${n.percent}%`,resetText:FP(n.resetsAt,t),tone:NP(n.percent)}:null}function LP(e){if(!e)return null;let t=e.contextWindowTokens;if(t===void 0||t<=0)return null;let n=Math.min(100,Math.max(0,Math.round(e.contextTokens/t*100)));return{label:`ctx`,percentText:`${n}%${e.approximate?`~`:``}`,resetText:``,tone:NP(n)}}function RP(e){return!e||e.inputTokens===void 0&&e.outputTokens===void 0?null:{label:`Σ`,text:zP((e.inputTokens??0)+(e.outputTokens??0))}}function zP(e){return e<1e3?String(e):e<1e6?`${Math.floor(e/1e3)}k`:`${(Math.floor(e/1e5)/10).toFixed(1)}M`}var BP=1e4;function VP({percentText:e,tone:t}){let n=Math.min(100,Math.max(0,Number.parseInt(e,10)||0));return(0,V.jsx)(`span`,{className:Vt(t),style:{"--fill":`${n}%`}})}function HP({client:e,taskId:t,tabId:n,inset:r=!0}){let i=v(e.conn),[a,o]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(i.state!==`open`)return;let r=!0,a=()=>e.request(`usage.get`,t&&n?{taskId:t,tabId:n}:{}).then(e=>{r&&o(e)}).catch(()=>{});a();let s=window.setInterval(a,BP);return()=>{r=!1,window.clearInterval(s)}},[e,i.state,t,n]);let s=LP(a?.context),c=RP(a?.context),l=Date.now(),u=(a?.usage??[]).flatMap(e=>{let t=IP({capturedAt:e.capturedAt,windows:e.windows},l);return t?[{vendor:e.vendor,name:e.name,chip:t}]:[]});return!s&&!c&&u.length===0?null:(0,V.jsxs)(`div`,{className:`${Rt} ${r?`px-3.5`:``}`,children:[s&&(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{children:s.label}),(0,V.jsx)(VP,{percentText:s.percentText,tone:s.tone}),(0,V.jsx)(`span`,{className:Bt[s.tone],children:s.percentText})]}),c&&(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{children:c.label}),(0,V.jsx)(`span`,{className:`text-muted`,children:c.text})]}),u.map(({vendor:e,name:t,chip:n})=>(0,V.jsxs)(H,{variant:`row`,className:`${zt} cursor-pointer hover:text-ink`,title:`${t} · ${n.label} ${n.percentText} ${n.resetText}`.trim(),"aria-label":`${z(`usage.open`)}: ${t}`,onClick:()=>{Sn(),va(`usage`)},children:[(0,V.jsx)(`span`,{children:t}),(0,V.jsx)(`span`,{className:Bt[n.tone],children:n.percentText})]},e))]})}var UP={general:e=>(0,V.jsx)(qN,{model:e}),appearance:e=>(0,V.jsx)(fN,{model:e}),notifications:e=>(0,V.jsx)(xP,{model:e}),snippets:e=>(0,V.jsx)(MP,{model:e}),keys:e=>(0,V.jsx)(QN,{model:e}),engines:e=>(0,V.jsx)(RN,{client:e.client}),autoRouting:e=>(0,V.jsx)(EP,{client:e.client}),connectors:e=>(0,V.jsx)(DN,{model:e}),plugins:e=>(0,V.jsx)(wP,{model:e}),about:e=>(0,V.jsx)(XM,{client:e.client}),feedback:e=>(0,V.jsx)(WN,{client:e.client}),dev:e=>(0,V.jsx)(kN,{client:e.client})},WP={general:`sections.general`,engines:`sections.engines`,autoRouting:`sections.autoRouting`,plugins:`sections.plugins`,keys:`sections.keys`,feedback:`sections.feedback`,dev:`sections.dev`},GP=e=>{let t=WP[e];return t?$(t):z(`settings.sections.${e}`)};function KP(e){return(0,V.jsxs)(`nav`,{className:jA,"aria-label":z(`settings.title`),children:[(0,V.jsx)(`h1`,{className:MA,children:z(`settings.title`)}),DP.map(t=>(0,V.jsxs)(`div`,{className:NA,children:[(0,V.jsx)(`p`,{className:PA,children:z(`settings.groups.${t.id}`)}),t.sections.map(n=>(0,V.jsxs)(H,{variant:`row`,className:FA(!e.narrow&&e.current===n,t.id===`more`),"aria-current":!e.narrow&&e.current===n?`page`:void 0,onClick:()=>e.onPick(n),children:[GP(n),(0,V.jsx)(Fa,{right:!0,className:IA})]},n))]},t.id))]})}function qP({model:e,section:t}){B();let[n,r]=(0,g.useState)(()=>OP(t)),i=wa(),a=()=>kP(n,i)===`list`?r({...n,drilled:!1}):Sn();(0,g.useEffect)(()=>{let e=document.querySelector(`.dialog`);e&&!e.contains(document.activeElement)&&e.focus()},[]),(0,g.useEffect)(()=>{let e=e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),a())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)});let o=!i||!n.drilled,s=!i||n.drilled;return(0,V.jsx)(`div`,{className:OA,onMouseDown:e=>e.target===e.currentTarget&&Sn(),children:(0,V.jsxs)(`dialog`,{tabIndex:-1,open:!0,className:kA,"aria-label":z(`settings.title`),onKeyDown:e=>{let t=e.target;e.key===`Escape`&&(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement)&&(t.blur(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation())},children:[(0,V.jsx)(H,{variant:`row`,className:AA,"aria-label":z(`dialog.close`),title:z(`dialog.close`),onClick:Sn,children:`×`}),i&&n.drilled&&(0,V.jsx)(H,{variant:`row`,className:`hidden flex-none items-center px-4 py-3 pr-12 text-left font-mono text-meta font-bold text-accent w-narrow:flex touch:min-h-11`,onClick:a,children:`‹ ${z(`settings.title`)}`}),o&&(0,V.jsx)(KP,{current:n.section,narrow:i,onPick:e=>r({section:e,drilled:!0})}),i&&o&&(0,V.jsx)(HP,{client:e.client,taskId:null,tabId:null,inset:!1}),s&&(0,V.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto scrollbar-none`,children:(0,V.jsxs)(`div`,{className:`flex w-full flex-col gap-7 px-8 pt-7 pb-10 w-narrow:gap-6 w-narrow:px-4 w-narrow:pt-1 w-narrow:pb-10`,children:[(0,V.jsxs)(`header`,{className:`flex flex-col gap-1 pr-8`,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-display font-semibold normal-nums text-ink`,children:GP(n.section)}),(0,V.jsx)(`p`,{className:`m-0 text-body text-muted`,children:z(`settings.pages.${n.section}`)})]}),(0,V.jsx)(`div`,{className:`flex flex-col gap-7 w-narrow:gap-6`,children:UP[n.section](e)})]})},n.section)]})})}function JP(e){let t=e.todos;return!t||t.length===0?null:{done:t.filter(e=>e.done).length,total:t.length}}function YP(e){return(e.todos??[]).filter(e=>!e.done)}function XP(e){let t=YP(e);return t.length===0?null:`Please work through these remaining todos for this task, and tell me what you did for each:\n${t.map(e=>`- ${e.text}`).join(`
118
- `)}`}var ZP=/LAND_CONFLICT/,QP=/MAIN_CHECKOUT_DIRTY/,$P=/SYNC_CONFLICT(?:: )?(.*)/,eF=/SYNC_WORKTREE_DIRTY(?:: )?(.*)/;function tF(e){let t=K(e);return ZP.test(t)?q(`worktrees`,`land.conflict`,{files:t}):QP.test(t)?q(`worktrees`,`land.dirtyBase`):q(`worktrees`,`land.failed`,{error:t})}async function nF(e,t,n){if(t.machine){rF(e,t,t.machine.label,n);return}let r;try{r=await e.client.request(`task.landPreflight`,{taskId:t.id})}catch(e){G(q(`worktrees`,`land.failed`,{error:K(e)}),`error`);return}if(r.refusal){G(r.refusal===`MAIN_CHECKOUT_DIRTY`?q(`worktrees`,`land.dirtyBase`):q(`worktrees`,`land.failed`,{error:r.message??r.refusal}),`error`);return}let i=t.branch||t.title,a=YP(e.tasks.get()?.tasks.find(e=>e.id===t.id)??{}).length;W.set((0,V.jsx)(ur,{title:q(`worktrees`,`land.confirmTitle`),body:[q(`worktrees`,r.ahead===1?`land.confirmBodyOne`:`land.confirmBody`,{branch:i,landedOn:r.landedOn,commits:r.ahead??`?`}),...a>0?[z(`files.landTodos`,{count:a})]:[]].join(`
116
+ `):[],[a]),s=(0,g.useRef)(new Set),c=(0,g.useCallback)(async e=>{let n=e===``?{}:{machine:e},r=await t.request(`github.status`,n).catch(e=>({status:null,reason:`failed`,message:K(e)}));i(t=>({...t,[e]:r}))},[t]),l=(0,g.useCallback)(()=>Promise.all([``,...o].map(c)).then(()=>{}),[c,o]);return(0,g.useEffect)(()=>{l()},[l]),(0,g.useEffect)(()=>{let e=new Set(Object.entries(r).flatMap(([e,t])=>gN(t.status)?[e]:[])),t=[...s.current].some(t=>!e.has(t));if(s.current=e,t&&l(),e.size===0)return;let n=window.setTimeout(()=>{for(let t of e)c(t)},hN);return()=>window.clearTimeout(n)},[r,c,l]),{machines:n,probes:r,refresh:l,probe:c,act:(0,g.useCallback)(async(e,n)=>{try{let r=await t.request(e,n);return r.ok||G(r.message,`error`),r}catch(e){return G(K(e),`error`),null}},[t])}}var vN={same:`markSame`,different:`markDifferent`,signedOut:`markSignedOut`,noGh:`markNoGh`,outdated:`markOutdated`,offline:`markOffline`,denied:`markDenied`,failed:`markFailed`},yN=(e,t)=>z(`settings.connectors.${e}`,t),bN={same:`text-diff-added`,signedOut:`text-diff-removed`,failed:`text-diff-removed`,denied:`text-diff-removed`,different:`text-warning`,outdated:`text-warning`,offline:`text-muted`,noGh:`text-muted`,loading:`text-muted`};function xN(e,t){return e===`loading`?yN(`loading`):yN(vN[e],{login:t?.account??``})}function SN(e){if(!e?.gh)return``;let t=e.ssh.ok?`✓ ${e.ssh.user??``}`.trim():`✗`;return yN(`detail`,{protocol:e.protocol??`—`,ssh:t})}function CN(){return(0,V.jsx)(`svg`,{className:`flex-none`,viewBox:`0 0 16 16`,width:`22`,height:`22`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{fill:`currentColor`,d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z`})})}function wN(e){navigator.clipboard.writeText(e).then(()=>G(yN(`codeCopied`)),()=>{})}function TN({login:e,onCancel:t}){return e.state===`failed`?(0,V.jsxs)(`div`,{className:ej,children:[(0,V.jsx)(`span`,{className:`text-muted`,children:yN(`loginFailed`,{error:e.error??``})}),(0,V.jsx)(H,{className:`ml-auto`,onClick:t,children:yN(`dismiss`)})]}):e.state===`syncing`?(0,V.jsx)(`div`,{className:ej,children:(0,V.jsx)(`span`,{className:`text-muted`,children:yN(`syncing`)})}):(0,V.jsxs)(`div`,{className:ej,children:[e.code?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`font-mono font-normal normal-nums rounded-sm border-hairline border-dashed border-line px-2 py-0.5 text-display tracking-code`,title:yN(`codeHint`),onClick:()=>wN(e.code??``),children:e.code}),(0,V.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,children:yN(`openGithub`)})]}):(0,V.jsx)(`span`,{className:`text-muted`,children:yN(`loading`)}),(0,V.jsx)(H,{className:`ml-auto`,onClick:t,children:z(`dialog.cancel`)})]})}function EN(e){let t=mN(e.probe,e.machine,e.rove),n=e.probe?.status??null,r=gN(n),i=t===`different`||t===`signedOut`,a=n?.login;return(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{className:wj,children:[(0,V.jsxs)(`div`,{className:Tj,children:[(0,V.jsx)(`span`,{className:WA,children:e.name}),(0,V.jsx)(`span`,{className:Ej(),title:[n?.authDetail,n?.ssh.detail].filter(Boolean).join(`, `)||void 0,children:SN(n)})]}),(0,V.jsx)(`span`,{className:`whitespace-nowrap text-meta ${bN[t]}`,title:e.probe?.message,children:xN(t,n)}),e.onSync&&i&&e.rove&&!r&&(0,V.jsx)(H,{variant:`action`,disabled:e.busy,onClick:e.onSync,children:yN(`useRove`)}),e.onLogin&&i&&!r&&(0,V.jsx)(H,{variant:`action`,disabled:e.busy,onClick:e.onLogin,children:yN(`loginThere`)})]}),a&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsx)(TN,{login:a,onCancel:e.onCancel})})]})}function DN({model:e}){let{machines:t,probes:n,refresh:r,probe:i,act:a}=_N(e),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(!1),u=n[``],d=u?.status?.account??null,f=gN(u?.status),p=async(e,t)=>{s(e);try{await t()}finally{s(null)}},m=e=>p(e,async()=>{await a(`github.login`,e===``?{}:{machine:e}),await i(e)}),h=e=>p(e,async()=>{await a(`github.login`,e===``?{cancel:!0}:{machine:e,cancel:!0}),await i(e)}),_=e=>p(e,async()=>{(await a(`github.sync`,{machine:e}))?.ok&&G(yN(`synced`,{machine:e,login:d??``})),await i(e)}),v=()=>p(``,async()=>{(await a(`github.logout`,{}))?.ok&&l(!1),await r()});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Uj,{children:(0,V.jsxs)(`div`,{children:[(0,V.jsx)(Wj,{label:(0,V.jsxs)(`span`,{className:`flex items-center gap-2.5`,children:[(0,V.jsx)(CN,{}),`GitHub`]}),hint:yN(`githubDescription`),children:d?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`span`,{className:KA,children:[`@`,d]}),(0,V.jsx)(H,{variant:`action`,disabled:o!==null,onClick:()=>l(!0),children:yN(`disconnect`)})]}):!f&&(0,V.jsx)(H,{variant:`filled`,disabled:o!==null||!u,onClick:()=>void m(``),children:yN(`connect`)})}),c&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-inset px-3 py-2.5 [&_p]:m-0 [&_p]:text-meta [&_p]:text-muted`,children:[(0,V.jsx)(`p`,{children:yN(`disconnectBody`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2.5`,children:[(0,V.jsx)(H,{onClick:()=>l(!1),children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:`danger`,disabled:o!==null,onClick:()=>void v(),children:yN(`disconnect`)})]})]})}),!d&&u?.status?.login&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsx)(TN,{login:u.status.login,onCancel:()=>void h(``)})})]})}),d&&(0,V.jsxs)(Uj,{title:yN(`machines`),children:[(0,V.jsx)(EN,{name:yN(`thisMachine`),probe:u,machine:null,rove:d,busy:o!==null,onCancel:()=>void h(``)}),t.map(e=>(0,V.jsx)(EN,{name:e.alias,probe:n[e.alias],machine:e.state,rove:d,busy:o!==null,onSync:()=>void _(e.alias),onLogin:()=>void m(e.alias),onCancel:()=>void h(e.alias)},e.alias)),(0,V.jsx)(`div`,{className:`py-2.5`,children:(0,V.jsx)(H,{onClick:()=>void r(),children:yN(`refresh`)})})]})]})}function ON({model:e}){return(0,V.jsx)(DN,{model:e})}var kN=[{key:`remoteProjects`,label:`dev.remote`,hint:`dev.remoteHint`},{key:`autoStatus`,label:`dev.autoStatus`,hint:`dev.autoStatusHint`},{key:`dispatcher`,label:`dev.dispatcher`,hint:`dev.dispatcherHint`}];function AN({client:e}){let{prefs:t}=L_(),[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(!1),o=async()=>{if(n){a(!0);try{if(n===`reset`){await e.request(`dev.reset`),localStorage.removeItem(`rove.prefs`),window.location.reload();return}await e.request(`daemon.restart`),G($(`restart.done`)),r(null)}catch(e){G(K(e),`error`)}finally{a(!1)}}},s=(e,t,a,s,c)=>(0,V.jsxs)(`div`,{children:[(0,V.jsx)(Wj,{label:t,hint:a,children:(0,V.jsx)(H,{variant:`action`,onClick:()=>r(e),children:s})}),n===e&&(0,V.jsx)(`div`,{className:`pb-3`,children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-inset px-3 py-2.5 [&_p]:m-0 [&_p]:text-meta [&_p]:text-muted`,children:[(0,V.jsx)(`strong`,{children:$(`${e}.title`)}),(0,V.jsx)(`p`,{children:z(e===`reset`?`prefs.resetBody`:`prefs.restartBody`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2.5`,children:[(0,V.jsx)(H,{onClick:()=>r(null),children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:c?`danger`:`filled`,disabled:i,onClick:()=>void o(),children:s})]})]})})]});return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Uj,{title:$(`dev.experimental`),children:kN.map(n=>(0,V.jsx)(Gj,{label:$(n.label),hint:$(n.hint),checked:t[n.key],onChange:t=>void I_(e,n.key,t)},n.key))}),(0,V.jsxs)(Uj,{hint:$(`dev.doctorHint`),children:[s(`restart`,$(`dev.restart`),z(`prefs.restartHint`),z(`prefs.restartButton`),!1),s(`reset`,$(`dev.reset`),z(`prefs.resetHint`),z(`prefs.resetButton`),!0)]})]})}function jN(e){return e.binaryFound===void 0?{key:`settings.engines.status.checking`,tone:`unknown`}:e.binaryFound===null?{key:`settings.engines.status.unknown`,tone:`unknown`}:e.binaryFound?e.configIssue?{key:`settings.engines.status.integrationBlocked`,tone:`error`}:e.login===`no`?{key:`settings.engines.status.signIn`,tone:`attention`}:e.hooks===`outdated`?{key:`settings.engines.status.integrationOutdated`,tone:`attention`}:e.hooks===`not-installed`?{key:`settings.engines.status.integrationMissing`,tone:`attention`}:{key:`settings.engines.status.ready`,tone:`ready`}:e.commandChosen?{key:`settings.engines.status.notOnPath`,tone:`attention`}:{key:`settings.engines.status.notInstalled`,tone:`absent`}}var MN=_([]),NN=3e4;function PN(e){return e.request(`skill.missing`).then(e=>MN.set(e.engines),()=>{})}function FN(e){(0,g.useEffect)(()=>{let t=e.onOpen(()=>void PN(e)),n=window.setInterval(()=>void PN(e),NN);return()=>{t(),window.clearInterval(n)}},[e])}function IN(e){return e.request(`skill.install`).then(e=>{e.error&&G($(`engines.skill.failed`,{reason:e.error}),`error`)}).catch(e=>G(K(e),`error`)).then(()=>PN(e))}function LN(e){return jN({binaryFound:e.binaryFound,login:e.login,hooks:e.hooks,configIssue:e.configIssue,commandChosen:e.custom||e.customized})}var RN={ready:`ready`,attention:`attention`,error:`error`,absent:`absent`,unknown:`absent`};function zN({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`engines.settings`)?.engines??null),[r,i]=(0,g.useState)(null),a=(0,g.useCallback)(()=>Hs(e,`engines.settings`).then(e=>n(e.engines),e=>G(K(e),`error`)),[e]);(0,g.useEffect)(()=>{a()},[a]);let o=(t,n={})=>void e.request(t,n).then(a).catch(e=>G(K(e),`error`));return t?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`p`,{className:RA,children:$(`engines.hint`)}),(0,V.jsxs)(`div`,{className:nj,children:[(0,V.jsxs)(`div`,{className:rj,"aria-hidden":`true`,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{children:$(`engines.defaultMark`)}),(0,V.jsx)(`span`,{children:$(`engines.available`)})]}),t.map(e=>(0,V.jsx)(BN,{engine:e,open:r===e.id,onToggleOpen:()=>i(r===e.id?null:e.id),run:o},e.id))]})]}),(0,V.jsx)(UN,{engines:t,run:o}),(0,V.jsx)(WN,{engines:t,client:e,reload:a})]}):(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)})}function BN(e){let{engine:t,run:n}=e,r=(0,g.useId)(),i=LN(t);return(0,V.jsxs)(`div`,{className:ij,children:[(0,V.jsxs)(`div`,{className:aj,children:[(0,V.jsxs)(`button`,{type:`button`,className:oj,"aria-expanded":e.open,"aria-controls":r,onClick:e.onToggleOpen,children:[(0,V.jsx)(Fa,{right:!e.open,className:sj(e.open)}),(0,V.jsxs)(`span`,{className:cj,children:[(0,V.jsxs)(`span`,{className:lj(!t.enabled),children:[t.name,t.renamedFrom?(0,V.jsx)(`span`,{className:uj,children:t.renamedFrom}):null,t.custom&&!t.renamedFrom?(0,V.jsx)(`span`,{className:uj,children:$(`engines.customTag`)}):null]}),(0,V.jsxs)(`span`,{className:fj(RN[i.tone]),children:[(0,V.jsx)(`span`,{className:pj(RN[i.tone]),"aria-hidden":`true`}),$(i.key.slice(9))]})]})]}),(0,V.jsx)(`div`,{className:mj,children:t.isDefault?(0,V.jsx)(`span`,{className:hj,children:$(`engines.defaultMark`)}):t.canBeDefault?(0,V.jsx)(`button`,{type:`button`,className:gj,"aria-label":z(`settings.engines.default`,{name:t.name}),onClick:()=>n(`engine.setDefault`,{id:t.id}),children:$(`engines.makeDefault`)}):null}),(0,V.jsx)(Hj,{on:t.enabled,"aria-label":z(`settings.engines.enabled`,{name:t.name}),onClick:()=>n(`engine.setEnabled`,{id:t.id,enabled:!t.enabled})})]}),e.open?(0,V.jsx)(HN,{id:r,engine:t,run:n}):null]})}function VN(e){if(e.configIssue)return $(`engines.detail.hooksBlockedHere`,{reason:e.configIssue});switch(e.hooks){case`installed`:return $(`engines.detail.hooksInstalled`);case`outdated`:return $(`engines.detail.hooksOutdated`);case`not-installed`:return e.binaryFound===!1?$(`engines.detail.hooksAwaitEngine`):$(`engines.detail.hooksMissing`);default:return $(`engines.detail.hooksUnsupported`)}}function HN(e){let{engine:t,run:n}=e,[r,i]=(0,g.useState)(null),a=t.binaryFound===!0?$(`engines.detail.programFound`,{binary:t.binary,path:t.binaryPath??t.binary}):t.binaryFound===!1?$(`engines.detail.programMissing`,{binary:t.binary}):$(`engines.detail.programUnknown`,{binary:t.binary}),o=t.login===`yes`?$(`engines.detail.signedIn`):t.login===`no`?$(`engines.detail.signedOut`):$(`engines.detail.signInUnknown`),s=[VN(t),$(t.markers?`engines.detail.markersYes`:`engines.detail.markersNo`),$(t.screen?`engines.detail.screenYes`:t.hooks===`installed`?`engines.detail.screenNotNeeded`:`engines.detail.screenNo`)];return(0,V.jsxs)(`div`,{id:e.id,className:_j,children:[(0,V.jsxs)(`dl`,{className:vj,children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.program`)}),(0,V.jsx)(`dd`,{className:bj(t.binaryFound===!1),children:a}),(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.signIn`)}),(0,V.jsx)(`dd`,{className:bj(t.login===`no`),children:o}),(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.reporting`)}),(0,V.jsx)(`dd`,{className:bj(!1),children:s.map(e=>(0,V.jsx)(`span`,{className:`block`,children:e},e))}),t.skill===`unsupported`?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.skill`)}),(0,V.jsx)(`dd`,{className:bj(t.skill!==`installed`),children:$(t.skill===`installed`?`engines.detail.skillInstalledHere`:t.skill===`outdated`?`engines.detail.skillOutdated`:`engines.detail.skillMissing`)})]}),t.custom?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:yj,children:$(`engines.detail.adapter`)}),(0,V.jsx)(`dd`,{className:bj(!1),children:t.protocol?$(`engines.detail.adapterDeclared`,{protocol:t.protocol}):$(`engines.detail.adapterGeneric`)})]}):null]}),r===null?(0,V.jsxs)(`div`,{className:xj,children:[(0,V.jsx)(H,{variant:`action`,onClick:()=>i(t.name),children:z(`settings.engines.rename`)}),t.custom||t.customized?(0,V.jsx)(H,{variant:`action`,onClick:()=>n(`engine.reset`,{id:t.id}),children:t.custom?z(`settings.engines.remove`):z(`settings.engines.reset`)}):null]}):(0,V.jsxs)(`form`,{className:xj,onSubmit:e=>{e.preventDefault(),n(`engine.rename`,{id:t.id,name:r}),i(null)},children:[(0,V.jsx)(`input`,{className:`${en} w-full ${Sj}`,autoFocus:!0,value:r,"aria-label":z(`settings.engines.rename`),placeholder:z(`settings.engines.namePlaceholder`),onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Escape`&&(e.stopPropagation(),i(null))}}),(0,V.jsx)(H,{variant:`filled`,type:`submit`,children:z(`settings.engines.save`)}),(0,V.jsx)(H,{variant:`action`,onClick:()=>i(null),children:z(`settings.engines.cancel`)})]})]})}function UN({engines:e,run:t}){let n=e.filter(e=>e.hooks!==`unsupported`),r=n.filter(e=>e.binaryFound!==!1),i=r.filter(e=>e.hooks===`installed`).length,a=r.length-i,o=n.filter(e=>e.hooks!==`not-installed`).length;return n.length===0?null:(0,V.jsx)(Uj,{title:$(`engines.integrations.title`),hint:$(`engines.integrations.hint`),children:(0,V.jsx)(Wj,{label:$(`engines.integrations.summary`,{installed:i,total:r.length}),children:(0,V.jsxs)(`div`,{className:$A,children:[a>0?(0,V.jsx)(H,{variant:`filled`,onClick:()=>t(`engines.hooks.install`),children:$(`engines.integrations.install`,{count:a})}):(0,V.jsx)(`span`,{className:Cj,children:$(`engines.integrations.upToDate`)}),o>0?(0,V.jsx)(H,{variant:`action`,onClick:()=>t(`engines.hooks.uninstall`),children:$(`engines.integrations.remove`,{count:o})}):null]})})})}function WN(e){let t=e.engines.filter(e=>e.skill!==`unsupported`),n=t.filter(e=>e.skill===`installed`).length,r=t.length-n;return(0,V.jsx)(Uj,{title:$(`engines.skill.title`),hint:$(`engines.skill.hint`),children:(0,V.jsx)(Wj,{label:t.length>0?$(`engines.integrations.summary`,{installed:n,total:t.length}):$(`engines.skill.noEngines`),children:r>0?(0,V.jsx)(H,{variant:`filled`,onClick:()=>void IN(e.client).then(e.reload),children:$(`engines.skill.install`,{count:r})}):t.length>0?(0,V.jsx)(`span`,{className:Cj,children:$(`engines.integrations.upToDate`)}):null})})}function GN({client:e}){let[t,n]=(0,g.useState)(``),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(!1);return(0,V.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:a=>{a.preventDefault(),!(!t.trim()||!r.trim())&&(o(!0),e.request(`feedback.send`,{title:t.trim(),body:r}).then(e=>{G(z(`settings.feedback.sent`,{url:e.discussion?.url??``})),n(``),i(``)}).catch(e=>G(K(e),`error`)).finally(()=>o(!1)))},children:[(0,V.jsx)(`p`,{className:`m-0 ${GA}`,children:z(`settings.feedback.hint`)}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`settings.feedback.titleLabel`)}),(0,V.jsx)(`input`,{className:`${JA} w-full`,value:t,onChange:e=>n(e.target.value)})]}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`settings.feedback.body`)}),(0,V.jsx)(`textarea`,{className:`${JA} ${QA} w-full`,rows:6,value:r,onChange:e=>i(e.target.value)})]}),(0,V.jsx)(`div`,{className:$A,children:(0,V.jsx)(H,{variant:`filled`,type:`submit`,disabled:a||!t.trim()||!r.trim(),children:z(`settings.feedback.send`)})})]})}var KN=[{value:`en`,label:`English`},{value:`zh`,label:`中文`}],qN={default:`general.worktreeKindDefault`,nextToProject:`general.worktreeKindNext`,custom:`general.worktreeKindCustom`};function JN({model:e}){let{client:t}=e,n=L_(),{prefs:r,info:i}=n,a=(e,n)=>void I_(t,e,n),o=[`default`,`nextToProject`];(i.worktreeCustomPath||r.worktreeBase===`custom`)&&o.push(`custom`);let s=o.map(e=>({value:e,label:$(qN[e])}));return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{title:z(`settings.general.groupInterface`),children:[(0,V.jsx)(qj,{label:$(`general.language`),hint:z(`prefs.languageHint`),value:r.locale,picks:KN,onPick:e=>a(`locale`,e)}),(0,V.jsx)(Gj,{label:$(`general.keyHintsShow`),hint:$(`general.keyHintsHint`),checked:r.keyHints,onChange:e=>a(`keyHints`,e)}),(0,V.jsx)(Gj,{label:$(`general.zenDefaultOn`),hint:z(`prefs.zenHint`),checked:r.zen,onChange:e=>a(`zen`,e)}),(0,V.jsx)(qj,{label:z(`settings.general.tabStrip`),value:r.tabStrip,picks:R_(n,`tabStrip`).map(e=>({value:e,label:$(`general.tabStripMode.${e}`)})),onPick:e=>a(`tabStrip`,e)})]}),(0,V.jsxs)(Uj,{title:z(`settings.general.groupFiles`),children:[(0,V.jsx)(qj,{label:$(`general.editor`),hint:z(`settings.general.editorNote`),value:r.editorKind,picks:R_(n,`editorKind`).map(e=>({value:e,label:e})),onPick:e=>a(`editorKind`,e)}),(0,V.jsx)(qj,{label:$(`general.worktree`),hint:$(`general.worktreeHint`),value:r.worktreeBase,picks:s,onPick:e=>a(`worktreeBase`,e)})]}),(0,V.jsx)(Uj,{title:z(`settings.general.groupTerminal`),hint:$(`general.terminalHint`),children:(0,V.jsx)(YN,{client:t})})]})}function YN({client:e}){let t=L_(),n=t.options.scrollbackRows,r=n&&`min`in n?n:{min:100,max:1e5},[i,a]=(0,g.useState)(String(t.prefs.scrollbackRows));return(0,g.useEffect)(()=>a(String(t.prefs.scrollbackRows)),[t.prefs.scrollbackRows]),(0,V.jsx)(Wj,{label:z(`settings.general.scrollback`),hint:$(`general.scrollbackRowHint`),children:(0,V.jsx)(`input`,{className:YA,inputMode:`numeric`,value:i,"aria-label":$(`general.scrollbackTitle`),onChange:e=>a(e.target.value),onBlur:()=>{let n=Number(i);if(i.trim()===``||!Number.isInteger(n)){a(String(t.prefs.scrollbackRows));return}let o=Math.min(r.max,Math.max(r.min,n));o===t.prefs.scrollbackRows?a(String(o)):I_(e,`scrollbackRows`,o)},onKeyDown:e=>e.key===`Enter`&&e.currentTarget.blur()})})}[...Array.from({length:12},(e,t)=>`f${t+1}`)];var XN={"diff.review.cursor":`diff-review cursor is a fixed raw binding (j/k), not keymap-driven`,"diff.review.range":`diff-review range anchor is a fixed raw binding (v), not keymap-driven`,"diff.review.note":`diff-review note is a fixed raw binding (c), not keymap-driven`,"diff.review.send":`diff-review send is a fixed raw binding (s), not keymap-driven`,"diff.review.drop":`diff-review drop-note is a fixed raw binding (x), not keymap-driven`,"diff.review.reload":`preview reload is a fixed raw binding (r), not keymap-driven`};function ZN(e,t){let n=`alternating [${e}, ${t}] pairs`;return{layout:n,validateCount:e=>e>=2&&e%2==0?null:`needs ${n} (an even number of chords — got ${e})`}}ZN(`top (double-tap)`,`bottom`),ZN(`down`,`up`),ZN(`down`,`up`),ZN(`down`,`up`),ZN(`collapse`,`expand`),ZN(`previous tab`,`next tab`);async function QN(e){try{(await e.request(`keybindings.createFile`)).created||G(z(`keys.exists`),`error`),await Qr(e)}catch(e){G(K(e),`error`)}}function $N({model:e}){let{client:t}=e,{prefs:n}=L_(),r=v(Yr),[i,a]=(0,g.useState)(!1);(0,g.useEffect)(()=>void Qr(t),[t]);let o=r.prefix.key??$(`keybindings.prefixDisabled`),s=Object.keys(XN).sort();return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{children:[(0,V.jsx)(qj,{label:$(`keybindings.tapPresentation`),hint:$(`keybindings.tapPresentationHint`),value:n.prefixTap,picks:[{value:`local`,label:$(`keybindings.tapPresentationLocal`)},{value:`guide`,label:$(`keybindings.tapPresentationGuide`)}],onPick:e=>void I_(t,`prefixTap`,e)}),(0,V.jsx)(Wj,{label:$(`keybindings.prefixTitle`,{prefix:o}),hint:$(`keybindings.prefixHint`,{prefix:o,timeout:r.prefix.timeoutMs})})]}),(0,V.jsxs)(Uj,{title:$(`keybindings.configFile`),hint:`${$(`keybindings.hint`)} ${z(`prefs.keysYaml`)}`,children:[(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono break-all`,children:r.path+(r.exists?``:$(`keybindings.notCreated`))})}),!r.exists&&(0,V.jsx)(Wj,{label:z(`keys.createFile`),hint:$(`keybindings.createHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>void QN(t),children:z(`keys.createFile`)})}),(0,V.jsx)(Wj,{label:z(`keys.agent`),hint:z(i?`keys.agentFailed`:`keys.agentHint`),children:(0,V.jsx)(H,{variant:`action`,onClick:()=>{a(!1),QM(e,z(`keys.agentPrompt`,{path:r.path})).catch(()=>a(!0))},children:z(`keys.agent`)})})]}),r.exists&&(0,V.jsxs)(Uj,{title:$(`keybindings.overridesApplied`),children:[r.applied.length===0&&(0,V.jsx)(Wj,{label:$(`keybindings.none`)}),r.applied.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono`,children:e.id}),hint:`${e.keys.length>0?e.keys.join(` / `):$(`keybindings.unbound`)} (${$(`keybindings.defaultKeys`,{keys:e.defaultKeys.join(` / `)})})`},e.id))]}),r.warnings.length>0&&(0,V.jsx)(Uj,{title:$(`keybindings.warnings`),children:r.warnings.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`text-warning`,children:e})},e))}),r.plugins.length>0&&(0,V.jsx)(Uj,{title:z(`keys.pluginChords`),children:r.plugins.map(e=>(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`font-mono`,children:e.chord}),hint:(0,V.jsx)(`span`,{className:`font-mono`,children:`${e.kind}:${e.target}`})},e.chord))}),(0,V.jsx)(`p`,{className:RA,children:$(`keybindings.fixed`,{ids:s.join(`, `)})})]})}var eP=`/assets/pulse-3XJkP4CJ.wav`;function tP(e,t){return e===`error`||t}function nP(e,t){return t||e.kind!==`done`||e.turnEnd!==!0}function rP(e,t){return t&&e.silent!==!0}function iP(e){return e===`permission_needed`?`needs_input`:e===`error`||e===`rate_limited`||e===`dead`?`error`:e===`turn_complete`?`done`:null}function aP(e,t,n,r){if(e===null)return[];let i=[];for(let[a,o]of t){if(a===n||e.get(a)===o)continue;let t=r(o);t&&i.push({key:a,kind:t})}return i}function oP(){return window.isSecureContext&&`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window}var sP=()=>navigator.serviceWorker.register(`sw.js`);async function cP(e){if(!oP())return`unsupported`;if(Notification.permission===`denied`)return`blocked`;let t=await(await navigator.serviceWorker.getRegistration())?.pushManager.getSubscription();if(!t)return`off`;let{subscribed:n}=await e.request(`push.status`,{endpoint:t.endpoint});return n?`on`:`off`}async function lP(e){if(!oP())return`unsupported`;if(await Notification.requestPermission()!==`granted`)return`blocked`;let t=await sP();await navigator.serviceWorker.ready;let{publicKey:n}=await e.request(`push.key`),r=await t.pushManager.getSubscription();return r?.options.applicationServerKey&&mP(r.options.applicationServerKey)!==n&&(await r.unsubscribe(),r=null),r??=await t.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:pP(n)}),await e.request(`push.subscribe`,{subscription:r.toJSON()}),`on`}async function uP(e){let t=await(await navigator.serviceWorker.getRegistration())?.pushManager.getSubscription();return t&&(await e.request(`push.unsubscribe`,{endpoint:t.endpoint}),await t.unsubscribe()),`off`}async function dP(e,t,n,r){let i={body:r,tag:`task:${e}:${t}`,icon:`icon-192.png`,data:{taskId:e}},a=`serviceWorker`in navigator?await navigator.serviceWorker.getRegistration():void 0;a?await a.showNotification(`Rove — ${n}`,i):new Notification(`Rove — ${n}`,i)}function fP(e){let t=new URLSearchParams(window.location.search),n=t.get(`task`);if(n){t.delete(`task`);let r=t.toString();history.replaceState(null,``,`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`),e.selectWhenListed(n)}if(!(`serviceWorker`in navigator))return()=>{};let r=t=>{let n=t.data;n?.type===`rove.openTask`&&typeof n.taskId==`string`&&n.taskId&&e.selectWhenListed(n.taskId)};return navigator.serviceWorker.addEventListener(`message`,r),()=>navigator.serviceWorker.removeEventListener(`message`,r)}function pP(e){let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`));return Uint8Array.from(t,e=>e.charCodeAt(0))}function mP(e){return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var hP={done:`✓`,needs_input:`?`,error:`✕`};function gP(e){let t=new Audio(eP);t.volume=Math.min(1,Math.max(0,e)),t.play().catch(()=>void 0)}function _P(e,t,n){!document.hidden||typeof Notification>`u`||Notification.permission!==`granted`||dP(e,t,n,hP[t]).catch(()=>void 0)}function vP(){typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission()}function yP(e){let t=new Map;for(let n of e.tasks)n.activity&&t.set(n.id,n.activity.state);return t}function bP(e){let t=(0,g.useRef)(null);(0,g.useEffect)(()=>{let n=()=>{let n=e.tasks.get();if(!n)return;let r=yP(n),i=aP(t.current,r,null,iP);t.current=r;let{prefs:a}=M_.get();if(!a.crossTask)return;let o=e.selection.get().taskId,s=new Map(n.tasks.map(e=>[e.id,e.label]));for(let{key:e,kind:t}of i){if(e===o||!nP({kind:t,turnEnd:!0},a.finishedAlerts))continue;let n=s.get(e)??e;tP(t,a.toast)&&G(`${hP[t]} ${n}`,t===`error`?`error`:`info`),rP({},a.sound)&&(gP(a.soundVolume),_P(e,t,n))}};return n(),e.tasks.subscribe(n)},[e])}function xP({client:e}){let[t,n]=(0,g.useState)(null),[r,i]=(0,g.useState)(null);(0,g.useEffect)(()=>{cP(e).then(n,()=>n(`off`))},[e]);let a=t=>{i(null),(t?lP(e):uP(e)).then(n,e=>i(e instanceof Error?e.message:String(e)))},o=r?z(`prefs.pushFailed`,{error:r}):z(t===`unsupported`?`prefs.pushUnsupported`:t===`blocked`?`prefs.pushBlocked`:`prefs.pushHint`);return(0,V.jsx)(Gj,{label:z(`prefs.push`),hint:o,checked:t===`on`,disabled:t===null||t===`unsupported`||t===`blocked`,onChange:a})}function SP({model:e}){let{client:t}=e,n=L_(),{prefs:r}=n,i=(e,n)=>void I_(t,e,n);return(0,V.jsxs)(Uj,{children:[(0,V.jsx)(Gj,{label:$(`general.toast`),hint:z(`settings.notifications.toastNote`),checked:r.toast,onChange:e=>i(`toast`,e)}),(0,V.jsx)(Gj,{label:$(`general.sound`),hint:z(`prefs.soundHint`),checked:r.sound,onChange:e=>{e&&vP(),i(`sound`,e)}}),(0,V.jsx)(qj,{label:z(`settings.notifications.volume`),hint:z(`prefs.soundVolumeHint`),value:r.soundVolume,picks:R_(n,`soundVolume`).map(e=>({value:e,label:`${Math.round(e*100)}%`})),onPick:e=>{M_.get().prefs.sound&&gP(e),i(`soundVolume`,e)}}),(0,V.jsx)(Gj,{label:$(`general.crossTask`),hint:$(`general.crossTaskHint`),checked:r.crossTask,onChange:e=>i(`crossTask`,e)}),(0,V.jsx)(Gj,{label:$(`general.finishedAlerts`),hint:$(`general.finishedAlertsHint`),checked:r.finishedAlerts,onChange:e=>i(`finishedAlerts`,e)}),(0,V.jsx)(xP,{client:t})]})}var CP={kanban:`kanban`,issues:`issues`};function wP({model:e}){let t=v(e.installedMods),[n,r]=(0,g.useState)(()=>Bs(e,`builtinMods.list`)?.mods??null);if((0,g.useEffect)(()=>{Hs(e,`builtinMods.list`).then(e=>r(e.mods),()=>r([])),e.refreshMods()},[e]),!n||n.length===0)return null;let i=n=>{let r=!t.has(n.id);e.client.request(`builtinMod.setInstalled`,{id:n.id,installed:r}).then(()=>(!r&&ln.get()===CP[n.id]&&ln.set(null),e.refreshMods())).catch(e=>G(K(e),`error`))};return(0,V.jsx)(Uj,{title:z(`settings.plugins.builtIn`),hint:z(`settings.plugins.builtInHint`),children:n.map(e=>(0,V.jsx)(Wj,{label:e.name,hint:e.description,inline:!0,children:(0,V.jsx)(Hj,{on:t.has(e.id),"aria-label":z(`settings.plugins.turnOn`,{name:e.name}),onClick:()=>i(e)})},e.id))})}function TP({model:e}){let{client:t}=e,[n,r]=(0,g.useState)(()=>Bs(t,`plugins.list`)?.plugins??null),i=(0,g.useCallback)(()=>Hs(t,`plugins.list`).then(e=>r(e.plugins),e=>G(K(e),`error`)),[t]);return(0,g.useEffect)(()=>{i()},[i]),(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(wP,{model:e}),(0,V.jsx)(Uj,{title:z(`settings.plugins.registered`),children:n?n.length===0?(0,V.jsx)(`p`,{className:qA,children:z(`settings.plugins.empty`)}):n.map(e=>(0,V.jsx)(Wj,{label:e.id,hint:[e.version,e.linked?z(`settings.plugins.linked`):null,e.platformOk===!1?z(`settings.plugins.unsupportedPlatform`):null].filter(Boolean).join(`, `),inline:!0,children:(0,V.jsx)(Hj,{on:e.enabled,"aria-label":e.id,onClick:()=>void t.request(`plugin.setEnabled`,{id:e.id,enabled:!e.enabled}).then(i).catch(e=>G(K(e),`error`))})},e.id)):(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)})})]})}function EP(e){let[t,n]=(0,g.useState)(e.tier.engine),[r,i]=(0,g.useState)(e.tier.model??``),[a,o]=(0,g.useState)(e.tier.effort??``),s=e.engines.find(e=>e.id===t);return(0,V.jsxs)(`form`,{className:kj,onSubmit:n=>{n.preventDefault(),e.onSave(t,s?.takesModel?r.trim():``,a)},onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),e.onCancel())},children:[(0,V.jsx)(EA,{label:$(`sections.engines`),value:t,picks:e.engines.map(e=>({value:e.id,label:e.name})),onPick:t=>{let r=e.engines.find(e=>e.id===t);n(t),r&&!r.effortLevels.includes(a)&&o(``),r&&!r.takesModel&&i(``)}}),s&&s.effortLevels.length>0&&(0,V.jsx)(EA,{label:z(`prefs.tierEffort`),value:a,picks:[``,...s.effortLevels].map(e=>({value:e,label:e||$(`autoRouting.engineDefault`)})),onPick:o}),s?.takesModel&&(0,V.jsx)(`input`,{className:`rounded-sm border-hairline border-line bg-paper px-2.5 py-1.5 font-sans text-body text-ink focus-visible:border-line-active focus-visible:outline-none`,value:r,spellCheck:!1,placeholder:$(`autoRouting.engineDefault`),"aria-label":z(`prefs.tierModel`),onChange:e=>i(e.target.value)}),(0,V.jsxs)(`div`,{className:$A,children:[(0,V.jsx)(H,{onClick:e.onCancel,children:z(`dialog.cancel`)}),(0,V.jsx)(H,{variant:`filled`,type:`submit`,children:$(`action.save`)})]})]})}function DP({client:e}){let[t,n]=(0,g.useState)(()=>Bs(e,`autoRouting.get`)??null),[r,i]=(0,g.useState)(null),a=(0,g.useCallback)(()=>Hs(e,`autoRouting.get`).then(n,e=>G(K(e),`error`)),[e]);(0,g.useEffect)(()=>{a()},[a]);let o=(t,n)=>e.request(t,n).then(a).catch(e=>G(K(e),`error`));if(!t)return(0,V.jsx)(`p`,{className:qA,children:z(`preview.loading`)});let s=t.classifier,c=[{value:`off`,label:$(`autoRouting.classifierOff`)},{value:`jev`,label:`jev`},...s.canCustom||s.mode===`custom`?[{value:`custom`,label:$(`autoRouting.classifierCustomLabel`)}]:[]],l=s.mode===`off`?$(`autoRouting.classifierOffHint`):s.mode===`jev`?$(`autoRouting.classifierJevHint`):$(`autoRouting.classifierCustomHint`),u=s.keySource===`env`?$(`autoRouting.keyPresentEnv`,{env:s.keyEnv??``}):s.keySource===`file`?$(`autoRouting.keySaved`):s.keyConfigured?$(`autoRouting.keyMissing`):$(`autoRouting.keyCustomUnused`);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Uj,{hint:$(`autoRouting.hint`),children:[!t.configured&&(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:`text-warning`,children:$(`autoRouting.unconfigured`)})}),t.tiers.map(e=>(0,V.jsxs)(`div`,{className:Dj,children:[(0,V.jsxs)(`div`,{className:Oj,children:[(0,V.jsx)(`span`,{className:WA,children:TA(`tier.${e.tier}`)}),(0,V.jsx)(`span`,{className:`${GA} min-w-0 truncate`,children:[e.engineName,e.model??$(`autoRouting.engineDefault`),e.effort??$(`autoRouting.engineDefault`)].join(` · `)}),(0,V.jsx)(H,{className:`ml-auto`,onClick:()=>i(r===e.tier?null:e.tier),children:z(`prefs.tierEdit`)})]}),(0,V.jsx)(`span`,{className:GA,children:TA(`tierDesc.${e.tier}`)}),(0,V.jsx)(`span`,{className:`text-meta ${e.block?`text-warning`:`text-success`}`,children:e.block?$(`autoRouting.unavailable`,{reason:e.block}):$(`autoRouting.ready`)}),r===e.tier&&(0,V.jsx)(EP,{tier:e,engines:t.engines,onCancel:()=>i(null),onSave:(t,n,r)=>{i(null),o(`autoRouting.setTier`,{tier:e.tier,engine:t,model:n,effort:r})}})]},e.tier))]}),(0,V.jsxs)(Uj,{title:$(`autoRouting.classifierTitle`),hint:$(`autoRouting.classifierHint`),children:[(0,V.jsx)(Wj,{label:(0,V.jsx)(`span`,{className:s.mode===`off`?`text-muted`:`text-warning`,children:$(`autoRouting.classifierDataFlow`)})}),(0,V.jsx)(qj,{label:$(`autoRouting.classifierLabel`),hint:l.replace(/^[—\s]+/,``),value:s.mode,picks:c,onPick:e=>void o(`autoRouting.setClassifier`,{mode:e})})]}),(0,V.jsxs)(Uj,{title:z(`prefs.classifierConnection`),hint:z(`prefs.editInTui`),children:[(0,V.jsx)(Jj,{label:$(`autoRouting.endpointLabel`),value:s.endpointHost||z(`prefs.unset`)}),(0,V.jsx)(Jj,{label:$(`autoRouting.thresholdLabel`),value:s.threshold.toFixed(2)}),(0,V.jsx)(Wj,{label:$(`autoRouting.keyLabel`),hint:u})]})]})}var OP=[{id:`preferences`,sections:[`general`,`appearance`,`notifications`,`snippets`,`keys`]},{id:`agents`,sections:[`engines`,`autoRouting`,`connectors`,`plugins`]},{id:`more`,sections:[`about`,`feedback`,`dev`]}],kP=e=>({section:e??`general`,drilled:e!==void 0});function AP(e,t){return t&&e.drilled?`list`:`close`}var jP=e=>e.split(`
117
+ `,1)[0]??``;function MP(e){let[t,n]=(0,g.useState)(e.editing?.name??``),[r,i]=(0,g.useState)(e.editing?.text??``),[a,o]=(0,g.useState)(!1),s=ZD.test(t)&&r.trim()!==``;return(0,V.jsxs)(`form`,{className:`flex flex-col gap-3`,onSubmit:n=>{n.preventDefault(),s&&(o(!0),YD(e.client,{name:t,text:r}).then(e.onDone).catch(e=>{G(K(e),`error`),o(!1)}))},children:[(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`snippets.name`)}),(0,V.jsx)(`input`,{className:`${JA} w-full font-mono`,value:t,maxLength:32,spellCheck:!1,autoComplete:`off`,autoFocus:!e.editing,readOnly:e.editing!==void 0,placeholder:z(`snippets.namePlaceholder`),onChange:e=>n(e.target.value)}),t!==``&&!ZD.test(t)&&(0,V.jsx)(`span`,{className:`text-meta text-muted [&_a]:text-accent`,children:z(`snippets.badName`)})]}),(0,V.jsxs)(`label`,{className:XA,children:[(0,V.jsx)(`span`,{className:ZA,children:z(`snippets.text`)}),(0,V.jsx)(`textarea`,{className:`${JA} ${QA} w-full`,rows:5,value:r,maxLength:8e3,placeholder:z(`snippets.textPlaceholder`),onChange:e=>i(e.target.value)})]}),(0,V.jsxs)(`div`,{className:$A,children:[(0,V.jsx)(H,{onClick:e.onDone,children:z(`snippets.cancel`)}),(0,V.jsx)(H,{type:`submit`,disabled:a||!s,children:z(`snippets.save`)})]})]})}function NP({model:e}){let{client:t}=e,n=qD(),[r,i]=(0,g.useState)(null);return(0,g.useEffect)(()=>void JD(t).catch(()=>void 0),[t]),(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsxs)(Uj,{children:[n.length===0&&r===null&&(0,V.jsx)(Wj,{label:z(`snippets.empty`)}),n.map(e=>(0,V.jsxs)(Wj,{label:(0,V.jsxs)(`span`,{className:`font-mono`,children:[`@`,e.name]}),hint:jP(e.text),children:[(0,V.jsx)(H,{onClick:()=>i(e),children:z(`snippets.edit`)}),(0,V.jsx)(H,{onClick:()=>void XD(t,e.name).then(()=>{i(null),G(z(`snippets.removed`,{name:e.name}))}).catch(e=>G(K(e),`error`)),children:z(`snippets.remove`)})]},e.name))]}),r===null?(0,V.jsx)(`div`,{className:$A,children:(0,V.jsx)(H,{onClick:()=>i(`new`),children:z(`snippets.add`)})}):(0,V.jsx)(MP,{client:t,editing:r===`new`?void 0:r,onDone:()=>i(null)},r===`new`?`new`:r.name)]})}var PP=e=>e>=95?`crit`:e>=75?`warn`:`ok`,FP=e=>String(e).padStart(2,`0`);function IP(e,t){if(e==null||e<=t)return``;let n=new Date(e),r=`${FP(n.getHours())}:${FP(n.getMinutes())}`;return e-t<864e5?`→ ${r}`:`→ ${n.getMonth()+1}/${n.getDate()} ${r}`}function LP(e,t){let n=e.windows.find(e=>e.kind===`session`)??e.windows[0];return n?{label:n.label,percentText:`${n.percent}%`,resetText:IP(n.resetsAt,t),tone:PP(n.percent)}:null}function RP(e){if(!e)return null;let t=e.contextWindowTokens;if(t===void 0||t<=0)return null;let n=Math.min(100,Math.max(0,Math.round(e.contextTokens/t*100)));return{label:`ctx`,percentText:`${n}%${e.approximate?`~`:``}`,resetText:``,tone:PP(n)}}function zP(e){return!e||e.inputTokens===void 0&&e.outputTokens===void 0?null:{label:`Σ`,text:BP((e.inputTokens??0)+(e.outputTokens??0))}}function BP(e){return e<1e3?String(e):e<1e6?`${Math.floor(e/1e3)}k`:`${(Math.floor(e/1e5)/10).toFixed(1)}M`}var VP=1e4;function HP({percentText:e,tone:t}){let n=Math.min(100,Math.max(0,Number.parseInt(e,10)||0));return(0,V.jsx)(`span`,{className:Vt(t),style:{"--fill":`${n}%`}})}function UP({client:e,taskId:t,tabId:n,inset:r=!0}){let i=v(e.conn),[a,o]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(i.state!==`open`)return;let r=!0,a=()=>e.request(`usage.get`,t&&n?{taskId:t,tabId:n}:{}).then(e=>{r&&o(e)}).catch(()=>{});a();let s=window.setInterval(a,VP);return()=>{r=!1,window.clearInterval(s)}},[e,i.state,t,n]);let s=RP(a?.context),c=zP(a?.context),l=Date.now(),u=(a?.usage??[]).flatMap(e=>{let t=LP({capturedAt:e.capturedAt,windows:e.windows},l);return t?[{vendor:e.vendor,name:e.name,chip:t}]:[]});return!s&&!c&&u.length===0?null:(0,V.jsxs)(`div`,{className:`${Rt} ${r?`px-2`:``}`,children:[s&&(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{children:s.label}),(0,V.jsx)(HP,{percentText:s.percentText,tone:s.tone}),(0,V.jsx)(`span`,{className:Bt[s.tone],children:s.percentText})]}),c&&(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,V.jsx)(`span`,{children:c.label}),(0,V.jsx)(`span`,{className:`text-muted`,children:c.text})]}),u.map(({vendor:e,name:t,chip:n})=>(0,V.jsxs)(H,{variant:`row`,className:`${zt} cursor-pointer hover:text-ink`,title:`${t} · ${n.label} ${n.percentText} ${n.resetText}`.trim(),"aria-label":`${z(`usage.open`)}: ${t}`,onClick:()=>{Sn(),va(`usage`)},children:[(0,V.jsx)(`span`,{children:t}),(0,V.jsx)(`span`,{children:n.label}),(0,V.jsx)(`span`,{className:Bt[n.tone],children:n.percentText})]},e))]})}var WP={general:e=>(0,V.jsx)(JN,{model:e}),appearance:e=>(0,V.jsx)(pN,{model:e}),notifications:e=>(0,V.jsx)(SP,{model:e}),snippets:e=>(0,V.jsx)(NP,{model:e}),keys:e=>(0,V.jsx)($N,{model:e}),engines:e=>(0,V.jsx)(zN,{client:e.client}),autoRouting:e=>(0,V.jsx)(DP,{client:e.client}),connectors:e=>(0,V.jsx)(ON,{model:e}),plugins:e=>(0,V.jsx)(TP,{model:e}),about:e=>(0,V.jsx)(ZM,{client:e.client}),feedback:e=>(0,V.jsx)(GN,{client:e.client}),dev:e=>(0,V.jsx)(AN,{client:e.client})},GP={general:`sections.general`,engines:`sections.engines`,autoRouting:`sections.autoRouting`,plugins:`sections.plugins`,keys:`sections.keys`,feedback:`sections.feedback`,dev:`sections.dev`},KP=e=>{let t=GP[e];return t?$(t):z(`settings.sections.${e}`)};function qP(e){return(0,V.jsxs)(`nav`,{className:jA,"aria-label":z(`settings.title`),children:[(0,V.jsx)(`h1`,{className:MA,children:z(`settings.title`)}),OP.map(t=>(0,V.jsxs)(`div`,{className:NA,children:[(0,V.jsx)(`p`,{className:PA,children:z(`settings.groups.${t.id}`)}),t.sections.map(n=>(0,V.jsxs)(H,{variant:`row`,className:FA(!e.narrow&&e.current===n,t.id===`more`),"aria-current":!e.narrow&&e.current===n?`page`:void 0,onClick:()=>e.onPick(n),children:[KP(n),(0,V.jsx)(Fa,{right:!0,className:IA})]},n))]},t.id))]})}function JP({model:e,section:t}){B();let[n,r]=(0,g.useState)(()=>kP(t)),i=wa(),a=()=>AP(n,i)===`list`?r({...n,drilled:!1}):Sn();(0,g.useEffect)(()=>{let e=document.querySelector(`.dialog`);e&&!e.contains(document.activeElement)&&e.focus()},[]),(0,g.useEffect)(()=>{let e=e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),a())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)});let o=!i||!n.drilled,s=!i||n.drilled;return(0,V.jsx)(`div`,{className:OA,onMouseDown:e=>e.target===e.currentTarget&&Sn(),children:(0,V.jsxs)(`dialog`,{tabIndex:-1,open:!0,className:kA,"aria-label":z(`settings.title`),onKeyDown:e=>{let t=e.target;e.key===`Escape`&&(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement)&&(t.blur(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation())},children:[(0,V.jsx)(H,{variant:`row`,className:AA,"aria-label":z(`dialog.close`),title:z(`dialog.close`),onClick:Sn,children:`×`}),i&&n.drilled&&(0,V.jsx)(H,{variant:`row`,className:`hidden flex-none items-center px-4 py-3 pr-12 text-left font-mono text-meta font-bold text-accent w-narrow:flex touch:min-h-11`,onClick:a,children:`‹ ${z(`settings.title`)}`}),o&&(0,V.jsx)(qP,{current:n.section,narrow:i,onPick:e=>r({section:e,drilled:!0})}),i&&o&&(0,V.jsx)(UP,{client:e.client,taskId:null,tabId:null,inset:!1}),s&&(0,V.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto scrollbar-none`,children:(0,V.jsxs)(`div`,{className:`flex w-full flex-col gap-7 px-8 pt-7 pb-10 w-narrow:gap-6 w-narrow:px-4 w-narrow:pt-1 w-narrow:pb-10`,children:[(0,V.jsxs)(`header`,{className:`flex flex-col gap-1 pr-8`,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-display font-semibold normal-nums text-ink`,children:KP(n.section)}),(0,V.jsx)(`p`,{className:`m-0 text-body text-muted`,children:z(`settings.pages.${n.section}`)})]}),(0,V.jsx)(`div`,{className:`flex flex-col gap-7 w-narrow:gap-6`,children:WP[n.section](e)})]})},n.section)]})})}function YP(e){let t=e.todos;return!t||t.length===0?null:{done:t.filter(e=>e.done).length,total:t.length}}function XP(e){return(e.todos??[]).filter(e=>!e.done)}function ZP(e){let t=XP(e);return t.length===0?null:`Please work through these remaining todos for this task, and tell me what you did for each:\n${t.map(e=>`- ${e.text}`).join(`
118
+ `)}`}var QP=/LAND_CONFLICT/,$P=/MAIN_CHECKOUT_DIRTY/,eF=/SYNC_CONFLICT(?:: )?(.*)/,tF=/SYNC_WORKTREE_DIRTY(?:: )?(.*)/;function nF(e){let t=K(e);return QP.test(t)?q(`worktrees`,`land.conflict`,{files:t}):$P.test(t)?q(`worktrees`,`land.dirtyBase`):q(`worktrees`,`land.failed`,{error:t})}async function rF(e,t,n){if(t.machine){iF(e,t,t.machine.label,n);return}let r;try{r=await e.client.request(`task.landPreflight`,{taskId:t.id})}catch(e){G(q(`worktrees`,`land.failed`,{error:K(e)}),`error`);return}if(r.refusal){G(r.refusal===`MAIN_CHECKOUT_DIRTY`?q(`worktrees`,`land.dirtyBase`):q(`worktrees`,`land.failed`,{error:r.message??r.refusal}),`error`);return}let i=t.branch||t.title,a=XP(e.tasks.get()?.tasks.find(e=>e.id===t.id)??{}).length;W.set((0,V.jsx)(ur,{title:q(`worktrees`,`land.confirmTitle`),body:[q(`worktrees`,r.ahead===1?`land.confirmBodyOne`:`land.confirmBody`,{branch:i,landedOn:r.landedOn,commits:r.ahead??`?`}),...a>0?[z(`files.landTodos`,{count:a})]:[]].join(`
119
119
 
120
- `),confirmLabel:q(`worktrees`,`land.button`),onConfirm:async()=>{try{let r=await e.client.request(`task.land`,{taskId:t.id});G(q(`worktrees`,`land.done`,{branch:i,landedOn:r.landedOn,commit:r.commit.slice(0,8)})),n?.()}catch(e){throw Error(tF(e))}}}))}function rF(e,t,n,r){let i=t.branch||t.title;W.set((0,V.jsx)(ur,{title:z(`taskops.publishTitle`),body:z(`taskops.publishBody`,{branch:i,host:n}),confirmLabel:z(`taskops.publishButton`),onConfirm:async()=>{let n=await e.client.request(`task.land`,{taskId:t.id}),a=n.published?.prUrl;a?G(z(`taskops.publishedPr`,{branch:i,url:a})):G(z(`taskops.publishedNoPr`,{branch:i,reason:aF(n.published?.prError??``)}),`error`),r?.()}}))}async function iF(e,t){try{let n=await e.client.request(`task.syncBase`,{taskId:t});G(q(`tasks`,n.alreadyCurrent?`sync.alreadyCurrent`:`sync.done`,{base:n.baseRef}))}catch(e){let t=K(e),n=$P.exec(t),r=eF.exec(t);G(n?q(`tasks`,`sync.conflict`,{files:n[1]?.trim()||`?`}):r?q(`tasks`,`sync.dirty`,{files:r[1]?.trim()||`?`}):q(`tasks`,`sync.failed`,{error:t}),`error`)}}function aF(e){return e.split(`
121
- `).find(e=>e.trim().length>0)?.trim()??e.trim()}async function oF(e,t,n){try{let r=await e.client.request(`task.fixChecks`,e.engineTarget(t));r.outcome===`unavailable`?G(q(`files`,`toast.ciChecksUnavailable`,{detail:aF(r.detail??``)}),`error`):r.outcome===`none`?G(q(`files`,`toast.ciNoFailingChecks`),`error`):G(n)}catch(e){G(K(e),`error`)}}async function sF(e,t){try{let n=await e.client.request(`task.openEditor`,{taskId:t});n.outcome===`noEditor`?G(q(`tasks`,`toast.noEditor`),`error`):n.outcome===`failed`&&G(q(`tasks`,`toast.openWorktreeFailed`,{label:n.label??``}),`error`)}catch(e){G(q(`tasks`,`toast.worktreeErrorGeneric`,{message:K(e)}),`error`)}}function cF(e,t){let n=e.tasks.get();return[...n?.tasks??[],...n?.archived??[]].filter(e=>e.parentTaskId===t)}function lF(e,t){let n=cF(e,t.id),r=n.length>0,i=n=>e.client.request(`task.delete`,{taskId:t.id,...n}).then(()=>{});return(0,V.jsx)(ur,{title:r?q(`tasks`,`confirm.childrenTitle`,{title:t.label,count:String(n.length)}):q(`tasks`,t.kind===`dir`?`confirm.deleteTitleDir`:`confirm.deleteTitle`,{title:t.label}),body:r?q(`tasks`,`confirm.childrenBody`):q(`tasks`,t.kind===`dir`?`confirm.deleteBodyDir`:`confirm.deleteBodyTask`),confirmLabel:q(`tasks`,r?`confirm.childrenPromote`:`confirm.deleteConfirm`),onConfirm:()=>i({}),...r?{secondary:{label:q(`tasks`,`confirm.childrenCascade`),onConfirm:()=>i({cascade:!0})}}:{},escalate:{when:e=>e instanceof u_&&e.code===`DIRTY_WORKTREE`,label:q(`tasks`,`confirm.forceDeleteConfirm`),title:q(`tasks`,`confirm.forceDeleteTitle`,{title:t.label}),body:e=>`${q(`worktrees`,`delete.forceBody`,{branch:t.branch||t.title})}\n\n${q(`worktrees`,`delete.forceReason`,{reason:K(e).replace(`task ${t.id} `,``)})}`,run:e=>i({force:!0,...e?{cascade:!0}:{}})}})}function uF(e,t){let n=cF(e,t.id),r=n.length>0,i=t.label,a=async()=>{let{tabs:n}=await e.client.request(`task.tabs`,{taskId:t.id});for(let r of n)await e.client.request(`tab.close`,{taskId:t.id,tabId:r.id});await e.refreshTabsNow()},o,s=async t=>{for(let r of n)try{await e.client.request(`task.delete`,{taskId:r.id,cascade:!0,...t?{force:!0}:{}})}catch(e){throw o=r.title,e}await a()};return(0,V.jsx)(ur,{title:r?q(`tasks`,`confirm.childrenTitle`,{title:i,count:String(n.length)}):q(`tasks`,`confirm.deleteTitleDir`,{title:i}),body:q(`tasks`,r?`confirm.childrenBodyMain`:`confirm.deleteBodyMain`),confirmLabel:q(`tasks`,r?`confirm.childrenKeepMain`:`confirm.deleteConfirm`),onConfirm:a,...r?{secondary:{label:q(`tasks`,`confirm.childrenCascadeMain`),onConfirm:()=>s(!1)}}:{},escalate:{when:e=>e instanceof u_&&e.code===`DIRTY_WORKTREE`,label:q(`tasks`,`confirm.forceDeleteConfirm`),title:q(`tasks`,`confirm.forceDeleteTitle`,{title:i}),body:e=>`${q(`worktrees`,`delete.forceBody`,{branch:o??i})}\n\n${K(e)}`,run:()=>s(!0)}})}async function dF(e,t){let n=t.archived!==!0,r=t.label,i=async i=>{await e.client.request(`task.archive`,{taskId:t.id,archived:n,...i?{force:!0}:{}}),G(q(`tasks`,n?`archive.done`:`archive.restored`,{title:r}))};try{await i(!1)}catch(e){if(n&&e instanceof u_&&e.code===`TASK_BUSY`){W.set((0,V.jsx)(ur,{title:q(`tasks`,`archive.busyTitle`),body:q(`tasks`,`archive.busyBody`,{title:r}),confirmLabel:q(`tasks`,`archive.busyConfirm`),onConfirm:()=>i(!0)}));return}G(q(`tasks`,n?`archive.failed`:`archive.restoreFailed`,{error:K(e)}),`error`)}}function fF(e,t,n){return(0,V.jsx)(ur,{title:q(`tasks`,`confirm.forgetProjectTitle`,{title:n}),body:q(`tasks`,`confirm.forgetProjectBody`),confirmLabel:q(`tasks`,`confirm.forgetProjectConfirm`),onConfirm:async()=>{try{await e.client.request(`project.forget`,{repo:t})}catch(e){throw Error(q(`tasks`,`toast.forgetProjectFailed`,{error:K(e)}))}}})}var pF=e=>{let{taskId:t}=e.selection.get();return e.tasks.get()?.tasks.find(e=>e.id===t)??null},mF=e=>{let{taskId:t,tabId:n}=e.selection.get(),r=t?e.tabs.get()[t]?.find(e=>e.id===n):void 0;return!!r&&!Dw(r.split)},hF=[{id:`app.refresh`,live:()=>li.get().stale,run:e=>pi(e.client)},{id:`palette.open`,live:()=>!0,run:cA},{id:`task.new.global`,live:()=>!0,run:e=>iO(pF(e)?.repo)},{id:`chat.tab.fork`,live:e=>!!pF(e),run:e=>{let t=pF(e);t&&W.set((0,V.jsx)(GC,{model:e,taskId:t.id,context:`continue`}))}},{id:`chat.fork.new`,live:e=>!!pF(e),run:e=>{let t=pF(e);t&&W.set((0,V.jsx)(GC,{model:e,taskId:t.id,destination:`fork`}))}},{id:`settings.open`,live:()=>!0,run:e=>W.set((0,V.jsx)(qP,{model:e}))},{id:`inbox.show`,live:()=>!0,run:e=>W.set((0,V.jsx)(PT,{model:e}))},{id:`focus.previous`,live:()=>!0,run:()=>Ji(-1)},{id:`focus.next`,live:()=>!0,run:()=>Ji(1)},{id:`workspace.zenToggle`,live:e=>!!pF(e),run:()=>pn.set(!pn.get())},{id:`files.createPR`,live:e=>!!pF(e),run:e=>{let t=pF(e);t&&e.client.request(`tab.requestPR`,e.engineTarget(t.id)).then(()=>G(z(`files.prRequested`))).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},{id:`chat.tab.close`,live:e=>!!e.selection.get().tabId&&mF(e),run:e=>{let{taskId:t,tabId:n}=e.selection.get();!t||!n||e.client.request(`tab.close`,{taskId:t,tabId:n}).then(()=>e.refreshTabsNow()).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},{id:`kanban.open`,live:e=>e.installedMods.get().has(`kanban`),run:()=>va(`kanban`)},{id:`automations.open`,live:()=>!0,run:()=>va(`routines`)},{id:`workItems.open`,live:e=>e.installedMods.get().has(`issues`),run:()=>va(`issues`)},{id:`task.moveMode`,live:e=>!!fA(e),run:()=>{KT(!WT.get()),document.querySelector(`.rail`)?.focus()}},{id:`files.syncBase`,live:e=>fA(e)?.kind===`task`,run:e=>{let t=fA(e);t&&iF(e,t.id)}},{id:`files.fixChecks`,live:e=>!!fA(e),run:e=>{let t=fA(e);t&&oF(e,t.id,z(`taskops.fixSent`))}},{id:`task.openEditor`,live:e=>!!fA(e),run:e=>{let t=fA(e);t&&sF(e,t.id)}}];Xi(()=>hF.map(e=>({id:e.id,chords:ai(e.id),prefix:!0,live:e.live,run:e.run})));function gF(e){return Qa(e[0]??``)}function _F(e,t){let n=ta(),r=Qi().filter(t=>t.prefix&&$i(t,n)&&t.live?.(e)!==!1);for(let e of t){let t=r.filter(t=>t.chords.includes(e)).sort((e,t)=>ea(e,n)-ea(t,n))[0];if(t)return t}}var vF=null,yF=null;function bF(){vF=null,yF!==null&&window.clearTimeout(yF),yF=null;let e=tT.get();e.guide?.kind===`prefix`&&tT.set({...e,guide:null})}function xF(){if(vF!==null){bF();return}W.get()||ei()===null||(vF=Date.now(),tT.set({...tT.get(),guide:{kind:`prefix`,armedAt:vF}}),yF!==null&&window.clearTimeout(yF),yF=window.setTimeout(bF,Yr.get().prefix.timeoutMs))}function SF(e,t){bF();let n=typeof t==`string`?[t]:t,r=_F(e,n);rT(gF(n),r?.id??null),r?.run(e)}var CF=null;function wF(){CF!==null&&window.clearTimeout(CF),CF=null;let e=tT.get();e.guide?.kind===`direct`&&tT.set({...e,guide:null})}function TF(){CF!==null||W.get()||(CF=window.setTimeout(()=>{bF(),tT.set({...tT.get(),guide:{kind:`direct`}})},400))}function EF(e){(0,g.useEffect)(()=>{let t=t=>{if(t.key===`Control`){t.repeat||TF();return}if(wF(),[`Shift`,`Alt`,`Meta`].includes(t.key))return;let n=Za(t),{firstStrokes:r,timeoutMs:i}=Yr.get().prefix;if(vF!==null&&Date.now()-vF<=i){if(t.preventDefault(),t.stopImmediatePropagation(),t.key===`Escape`)return bF();SF(e,n);return}bF(),!W.get()&&n.some(e=>r.includes(e))&&(t.preventDefault(),t.stopImmediatePropagation(),xF())},n=e=>e.key===`Control`&&wF(),r=e=>{vF!==null&&(e.target instanceof Element&&e.target.closest(`.prefix-guide, .shortcut-badge, [data-prefix-arm]`)||bF())};return window.addEventListener(`keydown`,t,{capture:!0}),window.addEventListener(`keyup`,n,{capture:!0}),window.addEventListener(`pointerdown`,r,{capture:!0}),window.addEventListener(`blur`,wF),()=>{window.removeEventListener(`keydown`,t,{capture:!0}),window.removeEventListener(`keyup`,n,{capture:!0}),window.removeEventListener(`pointerdown`,r,{capture:!0}),window.removeEventListener(`blur`,wF),wF(),bF()}},[e])}function DF(e){let t=ta(),n=new Map;for(let r of Qi()){if(!r.prefix||!$i(r,t)||r.live?.(e)===!1)continue;let i=ea(r,t);for(let e of r.chords){let t=n.get(e);(!t||i<t.rank)&&n.set(e,{action:r.id,rank:i})}}return[...n].map(([e,{action:t}])=>({stroke:e,action:t}))}function OF(e){let t=new Map(Wr.map((e,t)=>[e.id,t])),n=new Map;for(let{stroke:t,action:r}of e)n.set(r,[...n.get(r)??[],t]);let r=new Map,i=[...n].sort(([e],[n])=>(t.get(e)??2**53-1)-(t.get(n)??2**53-1));for(let[e,t]of i){let n=co(e);r.set(n,[...r.get(n)??[],{action:e,strokes:t}])}return[...r].map(([e,t])=>({category:e,actions:t}))}var kF=e=>e===`prefix.moreCommands`?bo(`moreCommandsPrefix`):wo(e);function AF(e){let[,t]=(0,g.useState)(0);(0,g.useEffect)(()=>{if(e===null)return;let n=window.setTimeout(()=>t(e=>e+1),Math.max(30,e-Date.now()));return()=>window.clearTimeout(n)},[e])}function jF({model:e}){B();let t=v(tT);v(Yr),v(e.selection);let n=Date.now(),r=t.entries.filter(e=>n-e.at<eT),i=t.guide?.kind===`prefix`?t.guide.armedAt:null,a=i!==null&&n-i<$w?i+$w:null;AF(a??(r[0]?r[0].at+eT:null));let o=t.guide?.kind===`direct`||i!==null&&a===null;if(!o&&!t.guide&&r.length===0)return null;if(o&&t.guide){let n=t.guide.kind===`direct`,r=n?Zw(na(e,ta()),ei()):DF(e);return(0,V.jsxs)(`output`,{className:`mono ${it}`,onMouseDown:e=>e.preventDefault(),children:[(0,V.jsxs)(`div`,{className:ot,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:n?bo(`directLayer`):bo(`commandLayer`,{prefix:ei()??``})}),(0,V.jsx)(`span`,{className:`keys-only text-muted`,children:bo(n?`releaseCtrl`:`escCancel`)})]}),(0,V.jsx)(`div`,{className:st,children:OF(r).map(t=>(0,V.jsxs)(`div`,{className:ct,children:[(0,V.jsx)(`div`,{className:`text-accent`,children:To(t.category)}),t.actions.map(({action:t,strokes:r})=>(0,V.jsxs)(`button`,{type:`button`,className:lt,disabled:n,onClick:()=>r[0]&&SF(e,r[0]),children:[(0,V.jsx)(`span`,{className:at,children:r.map(Qa).join(`/`)}),(0,V.jsx)(`span`,{children:kF(t)})]},t))]},t.category))})]})}return(0,V.jsxs)(`output`,{className:St,children:[r.map(e=>(0,V.jsxs)(MF,{at:e.at,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:ei()}),` + `,e.stroke,` →`,` `,e.action?kF(e.action):(0,V.jsx)(`span`,{className:`text-muted`,children:`∅`})]},e.id)),i!==null&&(0,V.jsxs)(`div`,{className:Ct(!1),children:[(0,V.jsx)(`span`,{className:`text-accent`,children:ei()}),` ⋯`]})]})}function MF({at:e,children:t}){let[n]=(0,g.useState)(Date.now),r=n-e>140,i={"--hud-out":`${e+eT-140-n}ms`};return(0,V.jsx)(`div`,{className:Ct(r),style:i,children:t})}function NF({model:e,bindingId:t,head:n=!1}){let r=v(tT);v(Yr);let i=L_().prefs.prefixTap;if(r.guide?.kind!==`prefix`||i!==`local`)return null;let a=Xw({bindingId:t,reachability:na(e,ta()),prefixKey:ei()});if(!a)return null;let o=Qi().find(e=>e.id===t&&e.prefix)?.chords[0];return(0,V.jsx)(`button`,{type:`button`,className:`mono ${Xe(n)}`,onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),o&&SF(e,o)},children:a})}var PF=[`workingBorder`,`runningTitle`,`taskColors`,`glyphSet`,`colorblind`];function FF(e){let{client:t}=e,n=L_(),r=cN(),i=v(O_);lN(e),yP(e),(0,g.useEffect)(()=>{let e=()=>{F_(t).catch(()=>void 0),JD(t).catch(()=>void 0)},n=()=>document.visibilityState===`visible`&&e(),r=t.onOpen(e);return window.addEventListener(`focus`,e),document.addEventListener(`visibilitychange`,n),()=>{r(),window.removeEventListener(`focus`,e),document.removeEventListener(`visibilitychange`,n)}},[t]),(0,g.useEffect)(()=>{let e=document.documentElement,t=i?i[r]:__(n.themes,n.prefs.theme,r),a=t?T_(t,n.prefs):{};for(let[t,n]of Object.entries(a))e.style.setProperty(t,n);e.style.colorScheme=r;for(let t of PF)e.dataset[t]=String(n.prefs[t]);D_.set(t?E_(t):null);let o=document.querySelector(`meta[name="theme-color"]`);o||(o=document.createElement(`meta`),o.name=`theme-color`,document.head.append(o)),o.content=getComputedStyle(document.body).backgroundColor},[n,r,i]),(0,g.useEffect)(()=>{n.loaded&&pn.get()!==n.prefs.zen&&pn.set(n.prefs.zen)},[n.loaded,n.prefs.zen]),(0,g.useEffect)(()=>pn.subscribe(()=>{pn.get()!==M_.get().prefs.zen&&I_(t,`zen`,pn.get())}),[t])}var IF={sidebar:[{id:`sidebar.nav`,msg:`move`},{id:`sidebar.select`,msg:`open`}],files:[{id:`files.nav`,msg:`move`},{id:`files.hierarchy`,msg:`collapse`},{id:`files.open`,msg:`open`,always:!0},{id:`files.diff`,msg:`diff`,always:!0}]};function LF(e,t){return IF[e].flatMap(e=>{if(t===`always`&&e.always!==!0)return[];let n=ro(e.id);return n?[{cap:n,msg:e.msg}]:[]})}var RF=e=>`rove.web.hintUsed.${e}`,zF=_({sidebar:localStorage.getItem(RF(`sidebar`))===`1`});function BF(e){zF.get()[e]||(localStorage.setItem(RF(e),`1`),zF.set({...zF.get(),[e]:!0}))}function VF(e,t){return e.kind===`task`&&t.kind===`task`?e.taskId===t.taskId:e.kind===`page`&&t.kind===`page`?e.id===t.id:e.kind===`new`&&t.kind===`new`}var HF={entries:[],at:-1};function UF(e,t){let n=e.entries[e.at];if(n&&VF(n,t)){let n=[...e.entries];return n[e.at]=t,{entries:n,at:e.at}}let r=[...e.entries.slice(0,e.at+1),t].slice(-50);return{entries:r,at:r.length-1}}function WF(e,t,n){for(let r=e.at+t;r>=0&&r<e.entries.length;r+=t){let t=e.entries[r];if(t&&n(t))return r}return-1}var GF=_(HF);function KF(e){let t=ln.get();if(t)return{kind:`page`,id:t};let n=mn.get();if(n)return{kind:`new`,start:n};let{taskId:r,tabId:i}=e.selection.get();return r?{kind:`task`,taskId:r,tabId:i}:null}function qF(e,t){if(t.kind!==`task`)return!0;let n=e.tasks.get()?.tasks.find(e=>e.id===t.taskId);return n!==void 0&&!n.deleting}var JF=!1;function YF(e){let t=!1,n=()=>{t||(t=!0,queueMicrotask(()=>{if(t=!1,JF)return;let n=KF(e);n&&GF.set(UF(GF.get(),n))}))};n();let r=[e.selection.subscribe(n),ln.subscribe(n),mn.subscribe(n)];return()=>{for(let e of r)e()}}function XF(e,t){let n=GF.get(),r=WF(n,t,t=>qF(e,t)),i=n.entries[r];i&&(JF=!0,i.kind===`task`?(ln.set(null),mn.set(null),e.select(i.taskId,i.tabId)):i.kind===`page`?(mn.set(null),va(i.id)):(ln.set(null),mn.set(i.start)),GF.set({entries:n.entries,at:r}),queueMicrotask(()=>{JF=!1}))}var ZF={working:`info`,waiting:`warning`,error:`attention`,done:`success`,idle:`muted`},QF={prOpen:``,prMerged:``,prClosed:``};function $F(e){let t=eI(e);return{look:t,tone:ZF[t]}}function eI(e){switch(e?.kind){case`busy`:case`running`:return`working`;case`needs-input`:return`waiting`;case`attention`:return e.reason===`rate_limited`?`waiting`:`error`;case`unseen`:return`done`;default:return`idle`}}function tI(e){return e.rowStatus?.kind===`needs-input`||e.rowStatus?.kind===`attention`}var nI={busy:0,attention:1,"needs-input":2,running:3,unseen:4,idle:5};function rI(e){let t;for(let{rowStatus:n}of e)n&&(!t||nI[n.kind]<nI[t.kind]||n.kind===t.kind&&n.since>t.since)&&(t=n);return t}function iI(e,t,n){if(!e)return null;if(e.lifecycle===`merged`)return{glyph:QF.prMerged,tone:n?`text-muted`:`text-merged`,state:`merged`};if(e.lifecycle===`closed`)return{glyph:QF.prClosed,tone:`text-muted`,state:`closed`};if(e.lifecycle!==`open`&&e.lifecycle!==`ready_to_merge`&&e.lifecycle!==`unknown`)return null;let r=t===`conflict`?`conflict`:t===`failing`?`failing`:t===`passing`?`passing`:e.checkState===`pending`?`pending`:void 0,i=n?`text-muted`:r===`conflict`||r===`failing`?`text-error`:r===`passing`?`text-success`:`text-muted`;return{glyph:QF.prOpen,tone:i,state:`open`,...r?{checks:r}:{}}}function aI(e){return iI(e.pr,e.prChip,e.prChipStale===!0)}function oI(e){return iI(e,(e.mergeable??``).toUpperCase()===`CONFLICTING`?`conflict`:e.checkState===`failing`?`failing`:e.checkState===`passing`?`passing`:null,!1)}function sI(e){let t=e=>e.state===`open`?e.tone===`text-error`?0:1:e.state===`merged`?2:3;return[...e].sort((e,n)=>t(e)-t(n))[0]}var cI=192,lI=`rove.web.railWidth`,uI=`rove.web.railFolded`;function dI(){let e=Number(localStorage.getItem(lI));return Number.isFinite(e)&&e>0?e:null}var fI=_(dI());fI.subscribe(()=>{let e=fI.get();e===null?localStorage.removeItem(lI):localStorage.setItem(lI,String(Math.round(e)))}),fI.subscribe(Tn);var pI=_(localStorage.getItem(uI)===`1`);pI.subscribe(()=>localStorage.setItem(uI,pI.get()?`1`:`0`));var mI=_(!1),hI=null;function gI(e){hI!==null&&window.clearTimeout(hI),hI=null,e?mI.set(!0):hI=window.setTimeout(()=>mI.set(!1),250)}pI.subscribe(()=>mI.set(!1)),pI.subscribe(Tn);function _I(e,t=window.innerWidth){let n=Math.max(cI,t-320);return Math.max(cI,Math.min(n,Math.round(e)))}var vI=`flex-none fill-none stroke-current [stroke-linecap:round] [stroke-linejoin:round] [stroke-width:1.25]`,yI=(e={})=>`relative grid cursor-pointer place-items-center rounded-sm border-none p-0 disabled:cursor-default disabled:opacity-35 [&_svg]:fill-none [&_svg]:stroke-current [&_svg]:[stroke-linecap:round] [&_svg]:[stroke-linejoin:round] [&_svg]:[stroke-width:1.25] touch:after:absolute touch:after:-inset-x-px touch:after:-top-2 touch:after:-bottom-1.25 touch:after:content-[''] touch:first:after:-left-2 ${e.tool?`size-5.5 flex-none`:`size-6.5`} ${e.tool||e.small?`[&_svg]:size-3.5`:`[&_svg]:size-4`} ${e.on?`bg-accent-soft text-accent`:`bg-transparent text-subtle enabled:hover:bg-hover enabled:hover:text-ink`}`,bI=`absolute top-2 left-2 z-7 flex items-center gap-0.5`,xI=`[&.is-resizing_iframe]:pointer-events-none`,SI=e=>`side-panel ${We} relative row-1 flex min-h-0 min-w-0 flex-col ${xI} ${e?`flex-1 p-0`:`pt-2 pr-1 pb-1 pl-0`}`,CI=`grid min-h-0 flex-1 grid-cols-[minmax(0,1fr)] [--divider:5px] *:col-1 ${xI}`,wI=e=>`side-head flex min-h-6.5 min-w-0 items-center gap-0.5 pb-1.5 font-mono text-meta normal-nums ${e?`px-2 pt-0`:`narrow:px-2 narrow:pt-0`}`,TI=`scrollbar-none flex min-w-0 flex-1 gap-0.5 overflow-x-auto`,EI=e=>`group/ptab relative flex max-w-40 items-center hover:text-ink data-[drop=after]:shadow-[inset_-2px_0_0_var(--accent)] data-[drop=before]:shadow-[inset_2px_0_0_var(--accent)] ${e.active?`is-active text-ink`:`text-muted`} ${e.compact&&!e.active?`min-w-0 max-w-24 flex-none`:`min-w-18 flex-initial`}`,DI=e=>`flex min-w-0 cursor-pointer items-center gap-1.5 border-none bg-transparent text-inherit [font:inherit] ${e?`py-1 pr-1.75 pl-2`:`py-1 pr-0.5 pl-2`}`,OI=`truncate`,kI=`touch:relative size-4 flex-none cursor-pointer rounded-xs border-none bg-transparent p-0 mr-1 font-mono text-title leading-none text-subtle opacity-0 group-hover/ptab:opacity-100 hover:bg-hover hover:text-ink focus-visible:opacity-100 [@media(hover:none)]:opacity-100 touch:after:absolute touch:after:-inset-1.5 touch:after:-left-1 touch:after:content-['']`,AI=`ml-auto flex gap-0.5`,jI=`relative row-3 cursor-row-resize touch-none before:absolute before:inset-x-0 before:top-[calc(var(--divider)/2)] before:h-px before:bg-line before:content-[''] hover:before:bg-line-active after:absolute after:inset-x-0 after:-inset-y-0.75 after:content-['']`,MI=`side-view flex min-h-0 min-w-0 flex-col [&[hidden]]:hidden`,NI=`row-2 m-auto flex max-w-[44ch] flex-col items-center gap-2.5 p-4 text-center font-mono text-meta leading-[1.5] text-subtle normal-nums`,PI=`flex min-h-0 flex-1 flex-col gap-1.5`,FI=`flex items-center gap-0.5 [&_svg]:flex-none`,II=`mx-0.5 min-w-0 flex-1 rounded-sm border-none bg-inset px-2 py-1 text-ink [font-size:var(--fs-meta)] focus:bg-hover focus:outline-none aria-invalid:text-muted`,LI=`min-w-0 flex-1 rounded-sm border-none bg-paper`;function RI({edge:e,className:t,...n}){return(0,V.jsx)(`div`,{"data-grip":``,className:Me(`absolute inset-y-0 z-5 w-1.5 cursor-col-resize touch-none`,`after:absolute after:inset-y-0 after:w-0.5 after:bg-line-active after:opacity-0 after:transition-opacity after:duration-120`,`hover:after:opacity-100 hover:after:delay-250 active:after:bg-accent active:after:opacity-100 active:after:delay-0`,e===`right`?`right-0 after:right-0`:`left-0 after:left-0`,t),...n})}var zI=400;function BI({rail:e}){B();let t=(0,g.useRef)(null),n=(0,g.useRef)(0);return(0,V.jsx)(RI,{edge:`right`,title:z(`layout.railResize`),onPointerDown:n=>{t.current={x:n.clientX,width:e.current?.getBoundingClientRect().width??0,moved:!1},n.currentTarget.setPointerCapture(n.pointerId),En(!0)},onPointerMove:e=>{let n=t.current;!n||e.clientX===n.x||(n.moved=!0,fI.set(_I(n.width+e.clientX-n.x)))},onPointerUp:()=>{let e=t.current;if(t.current=null,!e)return;if(e.moved){n.current=0;return}let r=Date.now();r-n.current<zI?(n.current=0,fI.set(null)):n.current=r},onLostPointerCapture:()=>En(!1)})}function VI({side:e}){return(0,V.jsxs)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:[(0,V.jsx)(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`11`,rx:`2.5`}),(0,V.jsx)(`path`,{d:e===`left`?`M6 2.5v11`:`M10 2.5v11`})]})}function HI({model:e}){B();let t=v(GF),n=v(pI),r=v(e.tasks),i=t=>qF(e,t),a=z(n?`layout.railUnfold`:`layout.railFold`),o=n&&(r?.tasks??[]).some(tI);return(0,V.jsxs)(`div`,{className:bI,onMouseEnter:()=>n&&mI.get()&&gI(!0),onMouseLeave:()=>n&&mI.get()&&gI(!1),children:[(0,V.jsxs)(`button`,{type:`button`,className:yI(),title:a,"aria-label":a,onClick:()=>pI.set(!n),children:[(0,V.jsx)(VI,{side:`left`}),o&&(0,V.jsx)(`span`,{className:`absolute top-0.75 right-0.75 size-1.5 rounded-full bg-accent`})]}),(0,V.jsx)(`button`,{type:`button`,className:yI(),title:z(`layout.navBack`),"aria-label":z(`layout.navBack`),disabled:WF(t,-1,i)<0,onClick:()=>XF(e,-1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M10 3.5 5.5 8l4.5 4.5`})})}),(0,V.jsx)(`button`,{type:`button`,className:yI(),title:z(`layout.navForward`),"aria-label":z(`layout.navForward`),disabled:WF(t,1,i)<0,onClick:()=>XF(e,1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M6 3.5 10.5 8 6 12.5`})})})]})}var UI={terminal:`layout.narrowTerminal`,chat:`layout.narrowChat`,files:`layout.narrowFiles`,diff:`layout.narrowDiff`,browser:`layout.narrowBrowser`,quota:`layout.narrowQuota`};function WI({taskId:e}){B();let t=v(Ha);return(0,V.jsxs)(`div`,{className:Ke,children:[(0,V.jsx)(`button`,{type:`button`,className:`mono ${qe}`,onClick:_a,children:(0,V.jsx)(`span`,{className:`text-accent`,children:`‹ ${Eo(`narrowBack`)}`})}),e&&(0,V.jsx)(`span`,{className:`mono ml-auto flex gap-0.5`,role:`tablist`,children:[`terminal`,...Va].map(n=>(0,V.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===n,className:Je,onClick:()=>n===`terminal`?Ha.set(n):Zk(e,n),children:z(UI[n])},n))})]})}function GI({title:e}){return B(),(0,V.jsxs)(`button`,{type:`button`,className:tr({}),onClick:ga,children:[(0,V.jsx)(`span`,{className:`${ar} font-bold text-accent`,children:`↩`}),(0,V.jsx)(`span`,{className:nr,children:Do(`recentJump`,{title:e})})]})}function KI({pane:e}){B();let{prefs:t}=L_(),n=v(zF)[e];if(!t.keyHints)return null;let r=LF(e,n?`always`:`firstUse`);return r.length===0?null:(0,V.jsx)(`p`,{className:`mono text-muted ${Ye}`,children:(0,V.jsx)(kT,{text:r.map(e=>`${Jr(e.cap)} ${xo(`pane.${e.msg}`)}`).join(` · `)})})}var qI=`rove.awaySeen`,JI=6e4,YI=e=>e.filter(e=>!e.deleting),XI=e=>e.pr?.lifecycle===`merged`,ZI={error:!0,dead:!0};function QI(e,t,n){if(!t||n-t.at<=6e5)return null;let r=YI(e),i=e=>(e.activity?.since??0)>t.at,a=r.filter(e=>ZI[e.activity?.state??``]===!0&&i(e)),o=r.filter(e=>e.group===`waiting-on-you`&&!a.includes(e)),s=r.filter(e=>e.activity?.state===`turn_complete`&&i(e)),c=r.filter(e=>XI(e)&&!t.merged.includes(e.id));return s.length+o.length+a.length+c.length===0?null:{since:t.at,finished:s,needs:o,failed:a,merged:c}}var $I=_(null);function eL(){try{let e=JSON.parse(localStorage.getItem(qI)??`null`);return e&&typeof e.at==`number`&&Array.isArray(e.merged)?e:null}catch{return null}}function tL(e,t){let n={at:t,merged:YI(e).filter(XI).map(e=>e.id)};try{localStorage.setItem(qI,JSON.stringify(n))}catch{}}var nL=8e3;function rL(e,t){let n=null,r=0,i,a=()=>{let t=e();t&&!document.hidden&&tL(t.tasks,Date.now())},o=()=>{n=null,a()},s=()=>{let t=e();if(!t||document.hidden)return;let s=Date.now();if(!n){let e=eL();e&&s-e.at>6e5&&(n=e,r=s+nL,i=setTimeout(o,nL))}if(!n){a();return}let c=QI(t.tasks,n,r-nL);c&&$I.set(c)};s();let c=t(s);document.addEventListener(`visibilitychange`,s);let l=setInterval(()=>{n||a()},JI);return()=>{c(),document.removeEventListener(`visibilitychange`,s),clearInterval(l),clearTimeout(i)}}var iL=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});function aL(e,t,n){let r=t.currentTarget.getBoundingClientRect();on.set({x:r.left,y:r.bottom,target:t.currentTarget,items:n.map(t=>({label:t.label,run:()=>e.select(t.id)}))})}function oL({model:e}){B(),(0,g.useEffect)(()=>rL(()=>e.tasks.get(),t=>e.tasks.subscribe(t)),[e]);let t=v($I);if(!t)return null;let n=[{key:`finished`,rows:t.finished,open:n=>aL(e,n,t.finished)},{key:`needs`,rows:t.needs,open:()=>W.set((0,V.jsx)(PT,{model:e}))},{key:`failed`,rows:t.failed,open:n=>aL(e,n,t.failed)},{key:`merged`,rows:t.merged,open:n=>aL(e,n,t.merged)}];return(0,V.jsxs)(`div`,{className:cE,children:[(0,V.jsxs)(`div`,{className:lE,children:[(0,V.jsx)(`span`,{children:z(`rail.recap.since`,{time:iL(t.since)})}),(0,V.jsx)(H,{variant:`row`,hit:`tight`,className:`text-muted hover:text-ink`,"aria-label":z(`rail.recap.dismiss`),title:z(`rail.recap.dismiss`),onClick:()=>$I.set(null),children:`×`})]}),(0,V.jsx)(`div`,{className:uE,children:n.filter(e=>e.rows.length>0).map((e,t)=>(0,V.jsxs)(`span`,{className:`inline-flex gap-1.5`,children:[t>0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`·`}),(0,V.jsx)(H,{variant:`row`,hit:`tight`,className:dE(e.key===`needs`),onClick:e.open,children:z(`rail.recap.${e.key}`,{count:e.rows.length})})]},e.key))})]})}function sL(e,t){return e.filter(e=>e.groupId===t).sort((e,t)=>(e.createdAt??``).localeCompare(t.createdAt??``)||e.title.localeCompare(t.title))}var cL=400;function lL(e){let t=null;for(let n of e.history?.messages??[]){if(n.role!==`assistant`)continue;let e=(n.blocks??[]).flatMap(e=>e.type===`text`&&e.text?[e.text]:[]).join(`
120
+ `),confirmLabel:q(`worktrees`,`land.button`),onConfirm:async()=>{try{let r=await e.client.request(`task.land`,{taskId:t.id});G(q(`worktrees`,`land.done`,{branch:i,landedOn:r.landedOn,commit:r.commit.slice(0,8)})),n?.()}catch(e){throw Error(nF(e))}}}))}function iF(e,t,n,r){let i=t.branch||t.title;W.set((0,V.jsx)(ur,{title:z(`taskops.publishTitle`),body:z(`taskops.publishBody`,{branch:i,host:n}),confirmLabel:z(`taskops.publishButton`),onConfirm:async()=>{let n=await e.client.request(`task.land`,{taskId:t.id}),a=n.published?.prUrl;a?G(z(`taskops.publishedPr`,{branch:i,url:a})):G(z(`taskops.publishedNoPr`,{branch:i,reason:oF(n.published?.prError??``)}),`error`),r?.()}}))}async function aF(e,t){try{let n=await e.client.request(`task.syncBase`,{taskId:t});G(q(`tasks`,n.alreadyCurrent?`sync.alreadyCurrent`:`sync.done`,{base:n.baseRef}))}catch(e){let t=K(e),n=eF.exec(t),r=tF.exec(t);G(n?q(`tasks`,`sync.conflict`,{files:n[1]?.trim()||`?`}):r?q(`tasks`,`sync.dirty`,{files:r[1]?.trim()||`?`}):q(`tasks`,`sync.failed`,{error:t}),`error`)}}function oF(e){return e.split(`
121
+ `).find(e=>e.trim().length>0)?.trim()??e.trim()}async function sF(e,t,n){try{let r=await e.client.request(`task.fixChecks`,e.engineTarget(t));r.outcome===`unavailable`?G(q(`files`,`toast.ciChecksUnavailable`,{detail:oF(r.detail??``)}),`error`):r.outcome===`none`?G(q(`files`,`toast.ciNoFailingChecks`),`error`):G(n)}catch(e){G(K(e),`error`)}}async function cF(e,t){try{let n=await e.client.request(`task.openEditor`,{taskId:t});n.outcome===`noEditor`?G(q(`tasks`,`toast.noEditor`),`error`):n.outcome===`failed`&&G(q(`tasks`,`toast.openWorktreeFailed`,{label:n.label??``}),`error`)}catch(e){G(q(`tasks`,`toast.worktreeErrorGeneric`,{message:K(e)}),`error`)}}function lF(e,t){let n=e.tasks.get();return[...n?.tasks??[],...n?.archived??[]].filter(e=>e.parentTaskId===t)}function uF(e,t){let n=lF(e,t.id),r=n.length>0,i=n=>e.client.request(`task.delete`,{taskId:t.id,...n}).then(()=>{});return(0,V.jsx)(ur,{title:r?q(`tasks`,`confirm.childrenTitle`,{title:t.label,count:String(n.length)}):q(`tasks`,t.kind===`dir`?`confirm.deleteTitleDir`:`confirm.deleteTitle`,{title:t.label}),body:r?q(`tasks`,`confirm.childrenBody`):q(`tasks`,t.kind===`dir`?`confirm.deleteBodyDir`:`confirm.deleteBodyTask`),confirmLabel:q(`tasks`,r?`confirm.childrenPromote`:`confirm.deleteConfirm`),onConfirm:()=>i({}),...r?{secondary:{label:q(`tasks`,`confirm.childrenCascade`),onConfirm:()=>i({cascade:!0})}}:{},escalate:{when:e=>e instanceof u_&&e.code===`DIRTY_WORKTREE`,label:q(`tasks`,`confirm.forceDeleteConfirm`),title:q(`tasks`,`confirm.forceDeleteTitle`,{title:t.label}),body:e=>`${q(`worktrees`,`delete.forceBody`,{branch:t.branch||t.title})}\n\n${q(`worktrees`,`delete.forceReason`,{reason:K(e).replace(`task ${t.id} `,``)})}`,run:e=>i({force:!0,...e?{cascade:!0}:{}})}})}function dF(e,t){let n=lF(e,t.id),r=n.length>0,i=t.label,a=async()=>{let{tabs:n}=await e.client.request(`task.tabs`,{taskId:t.id});for(let r of n)await e.client.request(`tab.close`,{taskId:t.id,tabId:r.id});await e.refreshTabsNow()},o,s=async t=>{for(let r of n)try{await e.client.request(`task.delete`,{taskId:r.id,cascade:!0,...t?{force:!0}:{}})}catch(e){throw o=r.title,e}await a()};return(0,V.jsx)(ur,{title:r?q(`tasks`,`confirm.childrenTitle`,{title:i,count:String(n.length)}):q(`tasks`,`confirm.deleteTitleDir`,{title:i}),body:q(`tasks`,r?`confirm.childrenBodyMain`:`confirm.deleteBodyMain`),confirmLabel:q(`tasks`,r?`confirm.childrenKeepMain`:`confirm.deleteConfirm`),onConfirm:a,...r?{secondary:{label:q(`tasks`,`confirm.childrenCascadeMain`),onConfirm:()=>s(!1)}}:{},escalate:{when:e=>e instanceof u_&&e.code===`DIRTY_WORKTREE`,label:q(`tasks`,`confirm.forceDeleteConfirm`),title:q(`tasks`,`confirm.forceDeleteTitle`,{title:i}),body:e=>`${q(`worktrees`,`delete.forceBody`,{branch:o??i})}\n\n${K(e)}`,run:()=>s(!0)}})}async function fF(e,t){let n=t.archived!==!0,r=t.label,i=async i=>{await e.client.request(`task.archive`,{taskId:t.id,archived:n,...i?{force:!0}:{}}),G(q(`tasks`,n?`archive.done`:`archive.restored`,{title:r}))};try{await i(!1)}catch(e){if(n&&e instanceof u_&&e.code===`TASK_BUSY`){W.set((0,V.jsx)(ur,{title:q(`tasks`,`archive.busyTitle`),body:q(`tasks`,`archive.busyBody`,{title:r}),confirmLabel:q(`tasks`,`archive.busyConfirm`),onConfirm:()=>i(!0)}));return}G(q(`tasks`,n?`archive.failed`:`archive.restoreFailed`,{error:K(e)}),`error`)}}function pF(e,t,n){return(0,V.jsx)(ur,{title:q(`tasks`,`confirm.forgetProjectTitle`,{title:n}),body:q(`tasks`,`confirm.forgetProjectBody`),confirmLabel:q(`tasks`,`confirm.forgetProjectConfirm`),onConfirm:async()=>{try{await e.client.request(`project.forget`,{repo:t})}catch(e){throw Error(q(`tasks`,`toast.forgetProjectFailed`,{error:K(e)}))}}})}var mF=e=>{let{taskId:t}=e.selection.get();return e.tasks.get()?.tasks.find(e=>e.id===t)??null},hF=e=>{let{taskId:t,tabId:n}=e.selection.get(),r=t?e.tabs.get()[t]?.find(e=>e.id===n):void 0;return!!r&&!Dw(r.split)},gF=[{id:`app.refresh`,live:()=>li.get().stale,run:e=>pi(e.client)},{id:`palette.open`,live:()=>!0,run:cA},{id:`task.new.global`,live:()=>!0,run:e=>iO(mF(e)?.repo)},{id:`chat.tab.fork`,live:e=>!!mF(e),run:e=>{let t=mF(e);t&&W.set((0,V.jsx)(GC,{model:e,taskId:t.id,context:`continue`}))}},{id:`chat.fork.new`,live:e=>!!mF(e),run:e=>{let t=mF(e);t&&W.set((0,V.jsx)(GC,{model:e,taskId:t.id,destination:`fork`}))}},{id:`settings.open`,live:()=>!0,run:e=>W.set((0,V.jsx)(JP,{model:e}))},{id:`inbox.show`,live:()=>!0,run:e=>W.set((0,V.jsx)(PT,{model:e}))},{id:`focus.previous`,live:()=>!0,run:()=>Ji(-1)},{id:`focus.next`,live:()=>!0,run:()=>Ji(1)},{id:`workspace.zenToggle`,live:e=>!!mF(e),run:()=>pn.set(!pn.get())},{id:`files.createPR`,live:e=>!!mF(e),run:e=>{let t=mF(e);t&&e.client.request(`tab.requestPR`,e.engineTarget(t.id)).then(()=>G(z(`files.prRequested`))).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},{id:`chat.tab.close`,live:e=>!!e.selection.get().tabId&&hF(e),run:e=>{let{taskId:t,tabId:n}=e.selection.get();!t||!n||e.client.request(`tab.close`,{taskId:t,tabId:n}).then(()=>e.refreshTabsNow()).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},{id:`kanban.open`,live:e=>e.installedMods.get().has(`kanban`),run:()=>va(`kanban`)},{id:`automations.open`,live:()=>!0,run:()=>va(`routines`)},{id:`workItems.open`,live:e=>e.installedMods.get().has(`issues`),run:()=>va(`issues`)},{id:`task.moveMode`,live:e=>!!fA(e),run:()=>{KT(!WT.get()),document.querySelector(`.rail`)?.focus()}},{id:`files.syncBase`,live:e=>fA(e)?.kind===`task`,run:e=>{let t=fA(e);t&&aF(e,t.id)}},{id:`files.fixChecks`,live:e=>!!fA(e),run:e=>{let t=fA(e);t&&sF(e,t.id,z(`taskops.fixSent`))}},{id:`task.openEditor`,live:e=>!!fA(e),run:e=>{let t=fA(e);t&&cF(e,t.id)}}];Xi(()=>gF.map(e=>({id:e.id,chords:ai(e.id),prefix:!0,live:e.live,run:e.run})));function _F(e){return Qa(e[0]??``)}function vF(e,t){let n=ta(),r=Qi().filter(t=>t.prefix&&$i(t,n)&&t.live?.(e)!==!1);for(let e of t){let t=r.filter(t=>t.chords.includes(e)).sort((e,t)=>ea(e,n)-ea(t,n))[0];if(t)return t}}var yF=null,bF=null;function xF(){yF=null,bF!==null&&window.clearTimeout(bF),bF=null;let e=tT.get();e.guide?.kind===`prefix`&&tT.set({...e,guide:null})}function SF(){if(yF!==null){xF();return}W.get()||ei()===null||(yF=Date.now(),tT.set({...tT.get(),guide:{kind:`prefix`,armedAt:yF}}),bF!==null&&window.clearTimeout(bF),bF=window.setTimeout(xF,Yr.get().prefix.timeoutMs))}function CF(e,t){xF();let n=typeof t==`string`?[t]:t,r=vF(e,n);rT(_F(n),r?.id??null),r?.run(e)}var wF=null;function TF(){wF!==null&&window.clearTimeout(wF),wF=null;let e=tT.get();e.guide?.kind===`direct`&&tT.set({...e,guide:null})}function EF(){wF!==null||W.get()||(wF=window.setTimeout(()=>{xF(),tT.set({...tT.get(),guide:{kind:`direct`}})},400))}function DF(e){(0,g.useEffect)(()=>{let t=t=>{if(t.key===`Control`){t.repeat||EF();return}if(TF(),[`Shift`,`Alt`,`Meta`].includes(t.key))return;let n=Za(t),{firstStrokes:r,timeoutMs:i}=Yr.get().prefix;if(yF!==null&&Date.now()-yF<=i){if(t.preventDefault(),t.stopImmediatePropagation(),t.key===`Escape`)return xF();CF(e,n);return}xF(),!W.get()&&n.some(e=>r.includes(e))&&(t.preventDefault(),t.stopImmediatePropagation(),SF())},n=e=>e.key===`Control`&&TF(),r=e=>{yF!==null&&(e.target instanceof Element&&e.target.closest(`.prefix-guide, .shortcut-badge, [data-prefix-arm]`)||xF())};return window.addEventListener(`keydown`,t,{capture:!0}),window.addEventListener(`keyup`,n,{capture:!0}),window.addEventListener(`pointerdown`,r,{capture:!0}),window.addEventListener(`blur`,TF),()=>{window.removeEventListener(`keydown`,t,{capture:!0}),window.removeEventListener(`keyup`,n,{capture:!0}),window.removeEventListener(`pointerdown`,r,{capture:!0}),window.removeEventListener(`blur`,TF),TF(),xF()}},[e])}function OF(e){let t=ta(),n=new Map;for(let r of Qi()){if(!r.prefix||!$i(r,t)||r.live?.(e)===!1)continue;let i=ea(r,t);for(let e of r.chords){let t=n.get(e);(!t||i<t.rank)&&n.set(e,{action:r.id,rank:i})}}return[...n].map(([e,{action:t}])=>({stroke:e,action:t}))}function kF(e){let t=new Map(Wr.map((e,t)=>[e.id,t])),n=new Map;for(let{stroke:t,action:r}of e)n.set(r,[...n.get(r)??[],t]);let r=new Map,i=[...n].sort(([e],[n])=>(t.get(e)??2**53-1)-(t.get(n)??2**53-1));for(let[e,t]of i){let n=co(e);r.set(n,[...r.get(n)??[],{action:e,strokes:t}])}return[...r].map(([e,t])=>({category:e,actions:t}))}var AF=e=>e===`prefix.moreCommands`?bo(`moreCommandsPrefix`):wo(e);function jF(e){let[,t]=(0,g.useState)(0);(0,g.useEffect)(()=>{if(e===null)return;let n=window.setTimeout(()=>t(e=>e+1),Math.max(30,e-Date.now()));return()=>window.clearTimeout(n)},[e])}function MF({model:e}){B();let t=v(tT);v(Yr),v(e.selection);let n=Date.now(),r=t.entries.filter(e=>n-e.at<eT),i=t.guide?.kind===`prefix`?t.guide.armedAt:null,a=i!==null&&n-i<$w?i+$w:null;jF(a??(r[0]?r[0].at+eT:null));let o=t.guide?.kind===`direct`||i!==null&&a===null;if(!o&&!t.guide&&r.length===0)return null;if(o&&t.guide){let n=t.guide.kind===`direct`,r=n?Zw(na(e,ta()),ei()):OF(e);return(0,V.jsxs)(`output`,{className:`mono ${it}`,onMouseDown:e=>e.preventDefault(),children:[(0,V.jsxs)(`div`,{className:ot,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:n?bo(`directLayer`):bo(`commandLayer`,{prefix:ei()??``})}),(0,V.jsx)(`span`,{className:`keys-only text-muted`,children:bo(n?`releaseCtrl`:`escCancel`)})]}),(0,V.jsx)(`div`,{className:st,children:kF(r).map(t=>(0,V.jsxs)(`div`,{className:ct,children:[(0,V.jsx)(`div`,{className:`text-accent`,children:To(t.category)}),t.actions.map(({action:t,strokes:r})=>(0,V.jsxs)(`button`,{type:`button`,className:lt,disabled:n,onClick:()=>r[0]&&CF(e,r[0]),children:[(0,V.jsx)(`span`,{className:at,children:r.map(Qa).join(`/`)}),(0,V.jsx)(`span`,{children:AF(t)})]},t))]},t.category))})]})}return(0,V.jsxs)(`output`,{className:St,children:[r.map(e=>(0,V.jsxs)(NF,{at:e.at,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:ei()}),` + `,e.stroke,` →`,` `,e.action?AF(e.action):(0,V.jsx)(`span`,{className:`text-muted`,children:`∅`})]},e.id)),i!==null&&(0,V.jsxs)(`div`,{className:Ct(!1),children:[(0,V.jsx)(`span`,{className:`text-accent`,children:ei()}),` ⋯`]})]})}function NF({at:e,children:t}){let[n]=(0,g.useState)(Date.now),r=n-e>140,i={"--hud-out":`${e+eT-140-n}ms`};return(0,V.jsx)(`div`,{className:Ct(r),style:i,children:t})}function PF({model:e,bindingId:t,head:n=!1}){let r=v(tT);v(Yr);let i=L_().prefs.prefixTap;if(r.guide?.kind!==`prefix`||i!==`local`)return null;let a=Xw({bindingId:t,reachability:na(e,ta()),prefixKey:ei()});if(!a)return null;let o=Qi().find(e=>e.id===t&&e.prefix)?.chords[0];return(0,V.jsx)(`button`,{type:`button`,className:`mono ${Xe(n)}`,onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),o&&CF(e,o)},children:a})}var FF=[`workingBorder`,`runningTitle`,`taskColors`,`glyphSet`,`colorblind`];function IF(e){let{client:t}=e,n=L_(),r=lN(),i=v(O_);uN(e),bP(e),(0,g.useEffect)(()=>{let e=()=>{F_(t).catch(()=>void 0),JD(t).catch(()=>void 0)},n=()=>document.visibilityState===`visible`&&e(),r=t.onOpen(e);return window.addEventListener(`focus`,e),document.addEventListener(`visibilitychange`,n),()=>{r(),window.removeEventListener(`focus`,e),document.removeEventListener(`visibilitychange`,n)}},[t]),(0,g.useEffect)(()=>{let e=document.documentElement,t=i?i[r]:__(n.themes,n.prefs.theme,r),a=t?T_(t,n.prefs):{};for(let[t,n]of Object.entries(a))e.style.setProperty(t,n);e.style.colorScheme=r;for(let t of FF)e.dataset[t]=String(n.prefs[t]);D_.set(t?E_(t):null);let o=document.querySelector(`meta[name="theme-color"]`);o||(o=document.createElement(`meta`),o.name=`theme-color`,document.head.append(o)),o.content=getComputedStyle(document.body).backgroundColor},[n,r,i]),(0,g.useEffect)(()=>{n.loaded&&pn.get()!==n.prefs.zen&&pn.set(n.prefs.zen)},[n.loaded,n.prefs.zen]),(0,g.useEffect)(()=>pn.subscribe(()=>{pn.get()!==M_.get().prefs.zen&&I_(t,`zen`,pn.get())}),[t])}var LF={sidebar:[{id:`sidebar.nav`,msg:`move`},{id:`sidebar.select`,msg:`open`}],files:[{id:`files.nav`,msg:`move`},{id:`files.hierarchy`,msg:`collapse`},{id:`files.open`,msg:`open`,always:!0},{id:`files.diff`,msg:`diff`,always:!0}]};function RF(e,t){return LF[e].flatMap(e=>{if(t===`always`&&e.always!==!0)return[];let n=ro(e.id);return n?[{cap:n,msg:e.msg}]:[]})}var zF=e=>`rove.web.hintUsed.${e}`,BF=_({sidebar:localStorage.getItem(zF(`sidebar`))===`1`});function VF(e){BF.get()[e]||(localStorage.setItem(zF(e),`1`),BF.set({...BF.get(),[e]:!0}))}function HF(e,t){return e.kind===`task`&&t.kind===`task`?e.taskId===t.taskId:e.kind===`page`&&t.kind===`page`?e.id===t.id:e.kind===`new`&&t.kind===`new`}var UF={entries:[],at:-1};function WF(e,t){let n=e.entries[e.at];if(n&&HF(n,t)){let n=[...e.entries];return n[e.at]=t,{entries:n,at:e.at}}let r=[...e.entries.slice(0,e.at+1),t].slice(-50);return{entries:r,at:r.length-1}}function GF(e,t,n){for(let r=e.at+t;r>=0&&r<e.entries.length;r+=t){let t=e.entries[r];if(t&&n(t))return r}return-1}var KF=_(UF);function qF(e){let t=ln.get();if(t)return{kind:`page`,id:t};let n=mn.get();if(n)return{kind:`new`,start:n};let{taskId:r,tabId:i}=e.selection.get();return r?{kind:`task`,taskId:r,tabId:i}:null}function JF(e,t){if(t.kind!==`task`)return!0;let n=e.tasks.get()?.tasks.find(e=>e.id===t.taskId);return n!==void 0&&!n.deleting}var YF=!1;function XF(e){let t=!1,n=()=>{t||(t=!0,queueMicrotask(()=>{if(t=!1,YF)return;let n=qF(e);n&&KF.set(WF(KF.get(),n))}))};n();let r=[e.selection.subscribe(n),ln.subscribe(n),mn.subscribe(n)];return()=>{for(let e of r)e()}}function ZF(e,t){let n=KF.get(),r=GF(n,t,t=>JF(e,t)),i=n.entries[r];i&&(YF=!0,i.kind===`task`?(ln.set(null),mn.set(null),e.select(i.taskId,i.tabId)):i.kind===`page`?(mn.set(null),va(i.id)):(ln.set(null),mn.set(i.start)),KF.set({entries:n.entries,at:r}),queueMicrotask(()=>{YF=!1}))}var QF={working:`info`,waiting:`warning`,error:`attention`,done:`success`,idle:`muted`},$F={prOpen:``,prMerged:``,prClosed:``};function eI(e){let t=tI(e);return{look:t,tone:QF[t]}}function tI(e){switch(e?.kind){case`busy`:case`running`:return`working`;case`needs-input`:return`waiting`;case`attention`:return e.reason===`rate_limited`?`waiting`:`error`;case`unseen`:return`done`;default:return`idle`}}function nI(e){return e.rowStatus?.kind===`needs-input`||e.rowStatus?.kind===`attention`}var rI={busy:0,attention:1,"needs-input":2,running:3,unseen:4,idle:5};function iI(e){let t;for(let{rowStatus:n}of e)n&&(!t||rI[n.kind]<rI[t.kind]||n.kind===t.kind&&n.since>t.since)&&(t=n);return t}function aI(e,t,n){if(!e)return null;if(e.lifecycle===`merged`)return{glyph:$F.prMerged,tone:n?`text-muted`:`text-merged`,state:`merged`};if(e.lifecycle===`closed`)return{glyph:$F.prClosed,tone:`text-muted`,state:`closed`};if(e.lifecycle!==`open`&&e.lifecycle!==`ready_to_merge`&&e.lifecycle!==`unknown`)return null;let r=t===`conflict`?`conflict`:t===`failing`?`failing`:t===`passing`?`passing`:e.checkState===`pending`?`pending`:void 0,i=n?`text-muted`:r===`conflict`||r===`failing`?`text-error`:r===`passing`?`text-success`:`text-muted`;return{glyph:$F.prOpen,tone:i,state:`open`,...r?{checks:r}:{}}}function oI(e){return aI(e.pr,e.prChip,e.prChipStale===!0)}function sI(e){return aI(e,(e.mergeable??``).toUpperCase()===`CONFLICTING`?`conflict`:e.checkState===`failing`?`failing`:e.checkState===`passing`?`passing`:null,!1)}function cI(e){let t=e=>e.state===`open`?e.tone===`text-error`?0:1:e.state===`merged`?2:3;return[...e].sort((e,n)=>t(e)-t(n))[0]}var lI=192,uI=`rove.web.railWidth`,dI=`rove.web.railFolded`;function fI(){let e=Number(localStorage.getItem(uI));return Number.isFinite(e)&&e>0?e:null}var pI=_(fI());pI.subscribe(()=>{let e=pI.get();e===null?localStorage.removeItem(uI):localStorage.setItem(uI,String(Math.round(e)))}),pI.subscribe(Tn);var mI=_(localStorage.getItem(dI)===`1`);mI.subscribe(()=>localStorage.setItem(dI,mI.get()?`1`:`0`));var hI=_(!1),gI=null;function _I(e){gI!==null&&window.clearTimeout(gI),gI=null,e?hI.set(!0):gI=window.setTimeout(()=>hI.set(!1),250)}mI.subscribe(()=>hI.set(!1)),mI.subscribe(Tn);function vI(e,t=window.innerWidth){let n=Math.max(lI,t-320);return Math.max(lI,Math.min(n,Math.round(e)))}var yI=`flex-none fill-none stroke-current [stroke-linecap:round] [stroke-linejoin:round] [stroke-width:1.25]`,bI=(e={})=>`relative grid cursor-pointer place-items-center rounded-sm border-none p-0 disabled:cursor-default disabled:opacity-35 [&_svg]:fill-none [&_svg]:stroke-current [&_svg]:[stroke-linecap:round] [&_svg]:[stroke-linejoin:round] [&_svg]:[stroke-width:1.25] touch:after:absolute touch:after:-inset-x-px touch:after:-top-2 touch:after:-bottom-1.25 touch:after:content-[''] touch:first:after:-left-2 ${e.tool?`size-5.5 flex-none`:`size-6.5`} ${e.tool||e.small?`[&_svg]:size-3.5`:`[&_svg]:size-4`} ${e.on?`bg-accent-soft text-accent`:`bg-transparent text-subtle enabled:hover:bg-hover enabled:hover:text-ink`}`,xI=`absolute top-2 left-2 z-7 flex items-center gap-0.5`,SI=`[&.is-resizing_iframe]:pointer-events-none`,CI=e=>`side-panel ${We} relative row-1 flex min-h-0 min-w-0 flex-col ${SI} ${e?`flex-1 p-0`:`pt-2 pr-1 pb-1 pl-0`}`,wI=`grid min-h-0 flex-1 grid-cols-[minmax(0,1fr)] [--divider:5px] *:col-1 ${SI}`,TI=e=>`side-head flex min-h-6.5 min-w-0 items-center gap-0.5 pb-1.5 font-mono text-meta normal-nums ${e?`px-2 pt-0`:`narrow:px-2 narrow:pt-0`}`,EI=`scrollbar-none flex min-w-0 flex-1 gap-0.5 overflow-x-auto`,DI=e=>`group/ptab relative flex max-w-40 items-center hover:text-ink data-[drop=after]:shadow-[inset_-2px_0_0_var(--accent)] data-[drop=before]:shadow-[inset_2px_0_0_var(--accent)] ${e.active?`is-active text-ink`:`text-muted`} ${e.compact&&!e.active?`min-w-0 max-w-24 flex-none`:`min-w-18 flex-initial`}`,OI=e=>`flex min-w-0 cursor-pointer items-center gap-1.5 border-none bg-transparent text-inherit [font:inherit] ${e?`py-1 pr-1.75 pl-2`:`py-1 pr-0.5 pl-2`}`,kI=`truncate`,AI=`touch:relative size-4 flex-none cursor-pointer rounded-xs border-none bg-transparent p-0 mr-1 font-mono text-title leading-none text-subtle opacity-0 group-hover/ptab:opacity-100 hover:bg-hover hover:text-ink focus-visible:opacity-100 [@media(hover:none)]:opacity-100 touch:after:absolute touch:after:-inset-1.5 touch:after:-left-1 touch:after:content-['']`,jI=`ml-auto flex gap-0.5`,MI=`relative row-3 cursor-row-resize touch-none before:absolute before:inset-x-0 before:top-[calc(var(--divider)/2)] before:h-px before:bg-line before:content-[''] hover:before:bg-line-active after:absolute after:inset-x-0 after:-inset-y-0.75 after:content-['']`,NI=`side-view flex min-h-0 min-w-0 flex-col [&[hidden]]:hidden`,PI=`row-2 m-auto flex max-w-[44ch] flex-col items-center gap-2.5 p-4 text-center font-mono text-meta leading-[1.5] text-subtle normal-nums`,FI=`flex min-h-0 flex-1 flex-col gap-1.5`,II=`flex items-center gap-0.5 [&_svg]:flex-none`,LI=`mx-0.5 min-w-0 flex-1 rounded-sm border-none bg-inset px-2 py-1 text-ink [font-size:var(--fs-meta)] focus:bg-hover focus:outline-none aria-invalid:text-muted`,RI=`min-w-0 flex-1 rounded-sm border-none bg-paper`;function zI({edge:e,className:t,...n}){return(0,V.jsx)(`div`,{"data-grip":``,className:Me(`absolute inset-y-0 z-5 w-1.5 cursor-col-resize touch-none`,`after:absolute after:inset-y-0 after:w-0.5 after:bg-line-active after:opacity-0 after:transition-opacity after:duration-120`,`hover:after:opacity-100 hover:after:delay-250 active:after:bg-accent active:after:opacity-100 active:after:delay-0`,e===`right`?`right-0 after:right-0`:`left-0 after:left-0`,t),...n})}var BI=400;function VI({rail:e}){B();let t=(0,g.useRef)(null),n=(0,g.useRef)(0);return(0,V.jsx)(zI,{edge:`right`,title:z(`layout.railResize`),onPointerDown:n=>{t.current={x:n.clientX,width:e.current?.getBoundingClientRect().width??0,moved:!1},n.currentTarget.setPointerCapture(n.pointerId),En(!0)},onPointerMove:e=>{let n=t.current;!n||e.clientX===n.x||(n.moved=!0,pI.set(vI(n.width+e.clientX-n.x)))},onPointerUp:()=>{let e=t.current;if(t.current=null,!e)return;if(e.moved){n.current=0;return}let r=Date.now();r-n.current<BI?(n.current=0,pI.set(null)):n.current=r},onLostPointerCapture:()=>En(!1)})}function HI({side:e}){return(0,V.jsxs)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:[(0,V.jsx)(`rect`,{x:`1.5`,y:`2.5`,width:`13`,height:`11`,rx:`2.5`}),(0,V.jsx)(`path`,{d:e===`left`?`M6 2.5v11`:`M10 2.5v11`})]})}function UI({model:e}){B();let t=v(KF),n=v(mI),r=v(e.tasks),i=t=>JF(e,t),a=z(n?`layout.railUnfold`:`layout.railFold`),o=n&&(r?.tasks??[]).some(nI);return(0,V.jsxs)(`div`,{className:xI,onMouseEnter:()=>n&&hI.get()&&_I(!0),onMouseLeave:()=>n&&hI.get()&&_I(!1),children:[(0,V.jsxs)(`button`,{type:`button`,className:bI(),title:a,"aria-label":a,onClick:()=>mI.set(!n),children:[(0,V.jsx)(HI,{side:`left`}),o&&(0,V.jsx)(`span`,{className:`absolute top-0.75 right-0.75 size-1.5 rounded-full bg-accent`})]}),(0,V.jsx)(`button`,{type:`button`,className:bI(),title:z(`layout.navBack`),"aria-label":z(`layout.navBack`),disabled:GF(t,-1,i)<0,onClick:()=>ZF(e,-1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M10 3.5 5.5 8l4.5 4.5`})})}),(0,V.jsx)(`button`,{type:`button`,className:bI(),title:z(`layout.navForward`),"aria-label":z(`layout.navForward`),disabled:GF(t,1,i)<0,onClick:()=>ZF(e,1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M6 3.5 10.5 8 6 12.5`})})})]})}var WI={terminal:`layout.narrowTerminal`,chat:`layout.narrowChat`,files:`layout.narrowFiles`,diff:`layout.narrowDiff`,browser:`layout.narrowBrowser`,quota:`layout.narrowQuota`};function GI({taskId:e}){B();let t=v(Ha);return(0,V.jsxs)(`div`,{className:Ke,children:[(0,V.jsx)(`button`,{type:`button`,className:`mono ${qe}`,onClick:_a,children:(0,V.jsx)(`span`,{className:`text-accent`,children:`‹ ${Eo(`narrowBack`)}`})}),e&&(0,V.jsx)(`span`,{className:`mono ml-auto flex gap-0.5`,role:`tablist`,children:[`terminal`,...Va].map(n=>(0,V.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===n,className:Je,onClick:()=>n===`terminal`?Ha.set(n):Zk(e,n),children:z(WI[n])},n))})]})}function KI({title:e}){return B(),(0,V.jsxs)(`button`,{type:`button`,className:tr({}),onClick:ga,children:[(0,V.jsx)(`span`,{className:`${ar} font-bold text-accent`,children:`↩`}),(0,V.jsx)(`span`,{className:nr,children:Do(`recentJump`,{title:e})})]})}function qI({pane:e}){B();let{prefs:t}=L_(),n=v(BF)[e];if(!t.keyHints)return null;let r=RF(e,n?`always`:`firstUse`);return r.length===0?null:(0,V.jsx)(`p`,{className:`mono text-muted ${Ye}`,children:(0,V.jsx)(kT,{text:r.map(e=>`${Jr(e.cap)} ${xo(`pane.${e.msg}`)}`).join(` · `)})})}var JI=`rove.awaySeen`,YI=6e4,XI=e=>e.filter(e=>!e.deleting),ZI=e=>e.pr?.lifecycle===`merged`,QI={error:!0,dead:!0};function $I(e,t,n){if(!t||n-t.at<=6e5)return null;let r=XI(e),i=e=>(e.activity?.since??0)>t.at,a=r.filter(e=>QI[e.activity?.state??``]===!0&&i(e)),o=r.filter(e=>e.group===`waiting-on-you`&&!a.includes(e)),s=r.filter(e=>e.activity?.state===`turn_complete`&&i(e)),c=r.filter(e=>ZI(e)&&!t.merged.includes(e.id));return s.length+o.length+a.length+c.length===0?null:{since:t.at,finished:s,needs:o,failed:a,merged:c}}var eL=_(null);function tL(){try{let e=JSON.parse(localStorage.getItem(JI)??`null`);return e&&typeof e.at==`number`&&Array.isArray(e.merged)?e:null}catch{return null}}function nL(e,t){let n={at:t,merged:XI(e).filter(ZI).map(e=>e.id)};try{localStorage.setItem(JI,JSON.stringify(n))}catch{}}var rL=8e3;function iL(e,t){let n=null,r=0,i,a=()=>{let t=e();t&&!document.hidden&&nL(t.tasks,Date.now())},o=()=>{n=null,a()},s=()=>{let t=e();if(!t||document.hidden)return;let s=Date.now();if(!n){let e=tL();e&&s-e.at>6e5&&(n=e,r=s+rL,i=setTimeout(o,rL))}if(!n){a();return}let c=$I(t.tasks,n,r-rL);c&&eL.set(c)};s();let c=t(s);document.addEventListener(`visibilitychange`,s);let l=setInterval(()=>{n||a()},YI);return()=>{c(),document.removeEventListener(`visibilitychange`,s),clearInterval(l),clearTimeout(i)}}var aL=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});function oL(e,t,n){let r=t.currentTarget.getBoundingClientRect();on.set({x:r.left,y:r.bottom,target:t.currentTarget,items:n.map(t=>({label:t.label,run:()=>e.select(t.id)}))})}function sL({model:e}){B(),(0,g.useEffect)(()=>iL(()=>e.tasks.get(),t=>e.tasks.subscribe(t)),[e]);let t=v(eL);if(!t)return null;let n=[{key:`finished`,rows:t.finished,open:n=>oL(e,n,t.finished)},{key:`needs`,rows:t.needs,open:()=>W.set((0,V.jsx)(PT,{model:e}))},{key:`failed`,rows:t.failed,open:n=>oL(e,n,t.failed)},{key:`merged`,rows:t.merged,open:n=>oL(e,n,t.merged)}];return(0,V.jsxs)(`div`,{className:cE,children:[(0,V.jsxs)(`div`,{className:lE,children:[(0,V.jsx)(`span`,{children:z(`rail.recap.since`,{time:aL(t.since)})}),(0,V.jsx)(H,{variant:`row`,hit:`tight`,className:`text-muted hover:text-ink`,"aria-label":z(`rail.recap.dismiss`),title:z(`rail.recap.dismiss`),onClick:()=>eL.set(null),children:`×`})]}),(0,V.jsx)(`div`,{className:uE,children:n.filter(e=>e.rows.length>0).map((e,t)=>(0,V.jsxs)(`span`,{className:`inline-flex gap-1.5`,children:[t>0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`·`}),(0,V.jsx)(H,{variant:`row`,hit:`tight`,className:dE(e.key===`needs`),onClick:e.open,children:z(`rail.recap.${e.key}`,{count:e.rows.length})})]},e.key))})]})}function cL(e,t){return e.filter(e=>e.groupId===t).sort((e,t)=>(e.createdAt??``).localeCompare(t.createdAt??``)||e.title.localeCompare(t.title))}var lL=400;function uL(e){let t=null;for(let n of e.history?.messages??[]){if(n.role!==`assistant`)continue;let e=(n.blocks??[]).flatMap(e=>e.type===`text`&&e.text?[e.text]:[]).join(`
122
122
  `).trim(),r=n.timestamp??``;e&&(!t||r>t.at)&&(t={at:r,text:e})}let n=(e.terminal?.tail??[]).map(e=>e.trimEnd()).filter(e=>e.trim()!==``),r=t?.text??n.slice(-6).join(`
123
- `);return r?r.length>cL?`${r.slice(0,cL).trimEnd()}…`:r:null}function uL(e){let t=e.files.filter(e=>e.scope===`working`),n=t.length>0?`working`:`branch`,r=n===`working`?t:e.files.filter(e=>e.scope===`branch`);return{scope:n,files:r,added:r.reduce((e,t)=>e+(t.added??0),0),deleted:r.reduce((e,t)=>e+(t.deleted??0),0)}}async function dL(e,t,n){let r=new Set(e.tasks.get()?.tasks.map(e=>e.id)),i=0;try{for(let a of t.filter(e=>r.has(e)))await e.client.request(`task.archive`,{taskId:a,archived:!0,...n?{force:!0}:{}}),i++}catch(e){if(i>0&&G(z(`compare.archived`,{count:i})),e instanceof u_&&e.code===`TASK_BUSY`)throw e;G(z(`compare.archiveFailed`,{error:K(e)}),`error`);return}G(z(`compare.archived`,{count:i}))}async function fL(e,t,n){try{for(let r of n)r.id!==t.id&&r.kept&&await e.client.request(`task.keep`,{taskId:r.id,kept:!1});await e.client.request(`task.keep`,{taskId:t.id,kept:!0})}catch(e){G(z(`compare.keepFailed`,{error:K(e)}),`error`);return}G(z(`compare.keptToast`,{title:t.label}));let r=n.filter(e=>e.id!==t.id).map(e=>e.id);r.length!==0&&W.set((0,V.jsx)(ur,{title:z(`compare.archiveTitle`),body:z(`compare.archiveBody`,{count:r.length}),confirmLabel:z(`compare.archiveConfirm`),onConfirm:()=>dL(e,r,!1),escalate:{when:e=>e instanceof u_&&e.code===`TASK_BUSY`,label:z(`compare.archiveBusyConfirm`),title:z(`compare.archiveBusyTitle`),body:()=>z(`compare.archiveBusyBody`),run:()=>dL(e,r,!0)}}))}async function pL(e,t){try{await e.client.request(`task.keep`,{taskId:t.id,kept:!1}),G(z(`compare.unkeptToast`,{title:t.label}))}catch(e){G(z(`compare.keepFailed`,{error:K(e)}),`error`)}}var mL={title:`ROUTINES`,holdingDaemon:`keeping the daemon awake`,notHolding:`none active`,needAttention:`{count} of {total} need you ·`,paused:`paused`,newTitle:`New routine`,composerLegend:`enter create · tab fields · ←→ ↑↓ edit the focused field · esc cancel`,fieldName:`NAME`,fieldRepo:`REPO`,fieldTarget:`DELIVER TO`,fieldTargetTab:`EXISTING ENGINE TAB`,targetFresh:`New task on each run`,targetStanding:`Routine-owned standing task`,targetExisting:`Existing conversation: {task} / {tab}. Never creates or revives a session.`,fieldPrompt:`PROMPT`,fieldSchedule:`SCHEDULE (FIVE-FIELD CRON)`,namePlaceholder:`weekday dependency audit`,promptPlaceholder:`Audit dependencies and summarize risky changes.`,noProject:`Ungrouped`,cronInvalid:`not a five-field cron`,cronField:{minute:`min`,hour:`hour`,dayOfMonth:`day`,month:`month`,dayOfWeek:`weekday`},schedule:{everyDay:`every day {at}`,weekdays:`weekdays {at}`,weekends:`weekends {at}`,onWeekday:`{weekday} {at}`,everyMinute:`every minute`,everyMinutes:`every {n}m`,everyHours:`every {n}h`,hourlyAt:`hourly at :{minute}`,atClock:`at {time}`,dow:{MON:`Mondays`,TUE:`Tuesdays`,WED:`Wednesdays`,THU:`Thursdays`,FRI:`Fridays`,SAT:`Saturdays`,SUN:`Sundays`}},when:{inMinutes:`in {n}m`,inHours:`in {n}h`,inDays:`in {n}d`,minutesAgo:`{n}m ago`,hoursAgo:`{n}h ago`,now:`now`,justNow:`just now`,dateTime:`{date}, {time}`},runStatus:{dispatched:`dispatched`,revived:`revived`,skipped_cancelled:`cancelled before delivery`,skipped_precheck:`skipped (precheck)`,skipped_blocked:`skipped (task can't use it)`,skipped_missed:`skipped (missed)`,skipped_unavailable:`skipped (unavailable)`,dispatch_failed:`dispatch failed`,ran:`ran`,script_failed:`script failed`},cronNever:`valid, but never fires`,missing:{target:`Choose an existing task.`,targetTab:`Enter an existing tab id, e.g. tab-2.`,name:`Give it a name.`,repo:`Pick a project.`,prompt:`Say what it should do.`,schedule:`That schedule will not run.`},empty:`No routines scheduled.`,emptyHint:`Press n to create one.`,precheck:`precheck: {command}`,lastFailed:`last failed {when}: {reason}`,recentRuns:`RECENT RUNS`,precheckDetail:`WHY IT SKIPPED — precheck {exit} in {duration}ms`,precheckExited:`exited {code}`,precheckTimedOut:`timed out`,precheckStdout:`stdout`,precheckStderr:`stderr`,precheckNoOutput:`(no output)`,noRuns:`Not run yet.`,responses:`RESPONSES`,noResponses:"No run has reported back yet. Agents answer with `routine-respond`.",responseAwaiting:`awaiting response`,responseMissing:`no response`,noSelection:`A routine runs its prompt in a project on a schedule.`,running:`Running {name}…`,ranWith:`{name}: {status}`,latestRunNoTask:`The latest run created no task.`,runNow:`[ run now ]`,deleteTitle:`Delete routine?`,deleteBody:`{name} and its run history will be removed. Tasks it already created are untouched.`,deleteButton:`Delete`,createFailed:`Couldn't create the routine: {error}`,deleteFailed:`Couldn't delete "{name}": {error}`,enableFailed:`"{name}" stays paused: {error}`,disableFailed:`"{name}" stays enabled: {error}`,runFailed:`Couldn't run "{name}" now — schedule unchanged: {error}`},hL={title:`例行任务`,holdingDaemon:`正在保持守护进程常驻`,notHolding:`无启用项`,needAttention:`{total} 个中有 {count} 个需要处理 ·`,paused:`已暂停`,newTitle:`新建例行任务`,composerLegend:`enter 创建 · tab 切字段 · ←→ ↑↓ 编辑当前字段 · esc 取消`,fieldName:`名称`,fieldTarget:`投递目标`,fieldTargetTab:`既有引擎标签页`,targetFresh:`每次新建任务`,targetStanding:`例行任务自有的常驻任务`,targetExisting:`既有会话:{task} / {tab}。不会创建或重启会话。`,fieldRepo:`仓库`,fieldPrompt:`提示词`,fieldSchedule:`调度(五段 cron)`,namePlaceholder:`工作日依赖审计`,promptPlaceholder:`审计依赖并总结有风险的变更。`,noProject:`未分组`,cronInvalid:`不是合法的五段 cron`,cronField:{minute:`分`,hour:`时`,dayOfMonth:`日`,month:`月`,dayOfWeek:`星期`},schedule:{everyDay:`每天{at}`,weekdays:`工作日{at}`,weekends:`周末{at}`,onWeekday:`{weekday}{at}`,everyMinute:`每分钟`,everyMinutes:`每 {n} 分钟`,everyHours:`每 {n} 小时`,hourlyAt:`每小时的 :{minute}`,atClock:`{time}`,dow:{MON:`每周一`,TUE:`每周二`,WED:`每周三`,THU:`每周四`,FRI:`每周五`,SAT:`每周六`,SUN:`每周日`}},when:{inMinutes:`{n} 分钟后`,inHours:`{n} 小时后`,inDays:`{n} 天后`,minutesAgo:`{n} 分钟前`,hoursAgo:`{n} 小时前`,now:`即将`,justNow:`刚刚`,dateTime:`{date} {time}`},runStatus:{dispatched:`已派发`,revived:`已重启会话`,skipped_cancelled:`交付前已取消`,skipped_precheck:`已跳过(预检)`,skipped_blocked:`已跳过(任务暂不能接收)`,skipped_missed:`已跳过(错过时间)`,skipped_unavailable:`已跳过(不可用)`,dispatch_failed:`派发失败`,ran:`已运行`,script_failed:`脚本失败`},cronNever:`语法合法,但永远不会触发`,missing:{target:`请选择既有任务。`,targetTab:`请输入既有标签页 ID,例如 tab-2。`,name:`起个名字。`,repo:`选一个项目。`,prompt:`说明它要做什么。`,schedule:`这个调度不会触发。`},empty:`还没有例行任务。`,emptyHint:`按 n 新建一条。`,precheck:`预检:{command}`,lastFailed:`上次失败({when}):{reason}`,recentRuns:`最近执行`,precheckDetail:`为什么跳过 —— 预检{exit},耗时 {duration}ms`,precheckExited:`退出码 {code}`,precheckTimedOut:`超时`,precheckStdout:`标准输出`,precheckStderr:`标准错误`,precheckNoOutput:`(无输出)`,noRuns:`尚未执行。`,responses:`回报`,noResponses:"还没有执行回报。agent 用 `routine-respond` 回报。",responseAwaiting:`等待回报`,responseMissing:`未回报`,noSelection:`例行任务会按调度在某个项目里跑它的提示词。`,running:`正在运行 {name}…`,ranWith:`{name}:{status}`,latestRunNoTask:`最近一次执行没有创建任务。`,runNow:`[ 立即运行 ]`,deleteTitle:`删除这条例行任务?`,deleteBody:`将删除 {name} 及其执行记录。它已经创建的任务不受影响。`,deleteButton:`删除`,createFailed:`创建例行任务失败:{error}`,deleteFailed:`删除“{name}”失败:{error}`,enableFailed:`“{name}”仍处于暂停状态:{error}`,disableFailed:`“{name}”仍处于启用状态:{error}`,runFailed:`无法立即运行“{name}”——排程未受影响:{error}`},gL={title:`Kanban`,hint:`tab project · ←↓↑→ card · enter detail · n new · d delete · r refresh · esc close`,loading:`Loading issues…`,noRepos:"No projects yet — add one with `rove add <path>`, or file a story with `rove api issue-create`.",empty:"No issues — agents file them via `rove api issue-create`.",readFailed:"Couldn't read this project's stories: {error}. Run `rove doctor`, then reopen Kanban.",readFailedToast:`Couldn't read stories for {repo}: {error}`,columnEmpty:`No cards`,column:{backlog:`Backlog`,inProgress:`In progress`,parked:`Parked`,done:`Done`},more:`+{count} more`,attention:`{count} need you`,turnComplete:`turn done`,menu:{setStatus:`status → {status}`},detail:{status:{open:`open`,doing:`doing`,hold:`hold`,done:`done`},statusLabel:`STATUS`,created:`created {date}`,linked:`linked to a session`,titleLabel:`TITLE`,description:`DESCRIPTION`,noDescription:`No description.`,attachHint:`paste a path / ctrl+v screenshot → inserts an image placeholder`,engine:`ENGINE`,workspace:`WORKSPACE`,placement:{worktree:`New worktree task — its own workspace`,projectWorktree:`New worktree — as a chattab in the project workspace`,project:`Project checkout — a new chattab, no worktree`},jumpLabel:`AFTER START`,jump:{stay:`Stay on the board`,follow:`Jump to the session`},startLegend:`enter/ctrl+enter start · tab fields · ←→ status/engine · ↑↓ workspace · esc save & close`,sessionLabel:`SESSION`,openAction:`Open the linked session ↵`,unlinkAction:`Unlink`,openLegend:`enter open the focused action · tab fields · ←→ status · unlink returns the card to Backlog · esc save & close`,eventsLabel:`EVENTS`,eventsLoading:`Loading events…`,eventsNone:`No engine events recorded yet.`,doneNote:`Done stories have nothing left to start — set the status back to reopen one · esc save & close`,startedBackground:`Started in background: {title}`,newStory:`NEW STORY`,createLegend:`ctrl+s save · enter/ctrl+enter save & start · tab fields · esc cancel`},confirmDelete:{title:`Delete story #{id}?`,body:`“{title}” will be removed from the tracker. A linked task, branch, or worktree is left untouched.`},deleteFailed:`Couldn't delete story #{id}: {error}`,createFailed:`Couldn't create the story: {error}`,updateFailed:`Couldn't save story #{id}: {error}`,statusFailed:`Story #{id} stays in its old column: {error}`,linkFailed:`Story #{id} isn't linked to its task: {error}`,unlinkFailed:`Story #{id} is still linked: {error}`},_L={title:`看板`,hint:`tab 切项目 · ←↓↑→ 选卡片 · enter 详情 · n 新建 · d 删除 · r 刷新 · esc 关闭`,loading:`正在加载 issues…`,noRepos:"还没有项目——用 `rove add <路径>` 添加一个,或用 `rove api issue-create` 创建一个 story。",empty:"暂无 issue——agent 可通过 `rove api issue-create` 创建。",readFailed:"读取该项目的 story 失败:{error}。请运行 `rove doctor`,再重新打开看板。",readFailedToast:`读取 {repo} 的 story 失败:{error}`,columnEmpty:`暂无卡片`,column:{backlog:`待办`,inProgress:`进行中`,parked:`搁置`,done:`已完成`},more:`还有 {count} 条`,attention:`{count} 张等你处理`,turnComplete:`回合完成`,menu:{setStatus:`状态 → {status}`},detail:{status:{open:`待办`,doing:`进行中`,hold:`搁置`,done:`已完成`},statusLabel:`状态`,created:`创建于 {date}`,linked:`已关联会话`,titleLabel:`标题`,description:`描述`,noDescription:`暂无描述。`,attachHint:`粘贴路径 / ctrl+v 贴截图 → 插入图片占位行`,engine:`引擎`,workspace:`工作区`,placement:{worktree:`新建 worktree 任务——独立工作区`,projectWorktree:`新建 worktree——作为项目工作区里的 chattab`,project:`项目主目录——新开 chattab,不建 worktree`},jumpLabel:`启动后`,jump:{stay:`留在看板`,follow:`跳转到会话`},startLegend:`enter/ctrl+enter 启动 · tab 切字段 · ←→ 状态/引擎 · ↑↓ 工作区 · esc 保存关闭`,sessionLabel:`会话`,openAction:`打开关联会话 ↵`,unlinkAction:`解除关联`,openLegend:`enter 执行选中操作 · tab 切字段 · ←→ 状态 · 解除关联把卡片退回 Backlog · esc 保存关闭`,eventsLabel:`事件`,eventsLoading:`正在加载事件…`,eventsNone:`暂无引擎事件记录。`,doneNote:`已完成的 story 无需启动——改回状态即可重新打开 · esc 保存关闭`,startedBackground:`已在后台启动:{title}`,newStory:`新建 STORY`,createLegend:`ctrl+s 仅保存 · enter/ctrl+enter 保存并启动 · tab 切字段 · esc 取消`},confirmDelete:{title:`删除 story #{id}?`,body:`「{title}」将从 tracker 中移除。已关联的任务、分支、worktree 不受影响。`},deleteFailed:`删除 story #{id} 失败:{error}`,createFailed:`创建 story 失败:{error}`,updateFailed:`保存 story #{id} 失败:{error}`,statusFailed:`Story #{id} 仍留在原来的列:{error}`,linkFailed:`Story #{id} 未能关联到它的任务:{error}`,unlinkFailed:`Story #{id} 仍处于关联状态:{error}`},vL={title:`ISSUES`,noRepo:`no project`,empty:`No open issues.`,assignedFilter:`assigned to me`,starting:`Starting work on #{number}…`,startedNoEngine:`Created {title}, but its engine did not start.`,linkedChip:`→ {title}`,openingLinked:`Opening {title}…`,startFailed:`Couldn't start work on #{number}: {error}`,errorHint:{noRemote:"Add a GitHub remote (`git remote add origin <url>`) and try again, or press q / esc to close.",ghMissing:"Install the `gh` CLI and authenticate, or press q / esc to close.",auth:"Run `gh auth login`, or press q / esc to close.",fallback:`{message} · press q / esc to close`}},yL={title:`议题`,noRepo:`无项目`,empty:`没有开放的议题。`,assignedFilter:`分配给我的`,starting:`正在开始处理 #{number}…`,startedNoEngine:`已创建 {title},但引擎没有启动。`,linkedChip:`→ {title}`,openingLinked:`正在打开 {title}…`,startFailed:`开始处理 #{number} 失败:{error}`,errorHint:{noRemote:"添加 GitHub remote(`git remote add origin <url>`)后重试,或按 q / esc 关闭。",ghMissing:"安装 `gh` CLI 并登录,或按 q / esc 关闭。",auth:"执行 `gh auth login`,或按 q / esc 关闭。",fallback:`{message} · 按 q / esc 关闭`}};function bL(){let e=B()===`zh`;return{kanban:e?_L:gL,auto:e?hL:mL,items:e?yL:vL,nav:(e?Ar:kr).nav,group:(e?Ar:kr).group,common:e?mr:pr}}function xL(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??e))}function SL(){let{auto:e}=bL();return(t,n)=>{let r=e;for(let e of t.replace(/^automations\./,``).split(`.`))r=r&&typeof r==`object`?Reflect.get(r,e):void 0;return typeof r==`string`?n?xL(r,n):r:t}}function CL(e){return e instanceof Error?e.message:String(e)}function wL(e){return e.replace(/^\/private\//,`/`).replace(/\/+$/,``)}function TL(e,t){let n=e.split(`/`).filter(Boolean),r=n[n.length-1]??e;return t.some(t=>t!==e&&t.split(`/`).filter(Boolean).pop()===r)&&n.length>1?`${n[n.length-2]}/${r}`:r}function EL(...e){let t=new Set,n=[];for(let r of e.flat()){if(!r||r.startsWith(`ssh://`))continue;let e=wL(r);t.has(e)||(t.add(e),n.push(r))}return n}function DL(e){return EL((v(e.tasks)?.tasks??[]).filter(e=>!fw(e)).map(e=>e.repo))}function OL(e){let t=v(e.tasks),{taskId:n}=v(e.selection);return t?.tasks.find(e=>e.id===n)?.repo}function kL(e){let[t,n]=(0,g.useState)(0);return(0,g.useEffect)(()=>{let t=window.setInterval(()=>n(e=>e+1),e);return()=>window.clearInterval(t)},[e]),[t,(0,g.useCallback)(()=>n(e=>e+1),[])]}function AL(e){return e instanceof HTMLElement?e.isContentEditable||[`INPUT`,`TEXTAREA`,`SELECT`].includes(e.tagName):!1}function jL(e){let t=(0,g.useRef)(e);t.current=e,(0,g.useEffect)(()=>{let e=e=>{if(e.defaultPrevented||W.get()||on.get())return;let n=e.target instanceof HTMLElement?e.target:null;AL(n)||n?.closest(`.rail, .side-panel, .xterm`)||e.metaKey||e.altKey||e.ctrlKey&&e.key.toLowerCase()===`c`&&window.getSelection()?.toString()||t.current(e)&&(e.preventDefault(),e.stopPropagation())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[])}function ML(){let e=(0,g.useRef)(null);return(0,g.useEffect)(()=>e.current?.focus(),[]),e}function NL({tone:e,children:t}){return(0,V.jsx)(`span`,{className:Me(`flex-none font-mono text-meta`,e&&AT[e]),children:t})}var PL=`mt-3 grid grid-cols-[repeat(auto-fit,minmax(min(100%,17rem),1fr))] items-start gap-x-5 gap-y-6`,FL=e=>e?`flex min-w-0 flex-col gap-2 pt-2 [border-top:var(--hairline)_solid_var(--accent)]`:`flex min-w-0 flex-col gap-2 pt-2 [border-top:var(--hairline)_solid_var(--line)]`,IL=`flex min-w-0 items-center gap-2`,LL=`min-w-0 truncate font-bold`,RL=`truncate font-mono text-meta text-muted`,zL=`m-0 line-clamp-6 whitespace-pre-wrap wrap-anywhere`,BL=`flex min-w-0 flex-col`,VL=`flex min-w-0 items-baseline gap-2 py-px font-mono text-meta`,HL=`flex flex-wrap gap-x-3.5 gap-y-1 font-mono text-meta`,UL=`flex min-w-0 flex-wrap items-center gap-x-3.5 gap-y-0.5 px-2.5 py-1 font-mono text-meta`,WL=1.2,GL=.3,KL=20,qL=.35,JL=.25,YL=.12,XL=2,ZL=1,QL={error:{dots:[0,4,8,2,6],bright:1},done:{dots:[3,7,5,2],bright:1},idle:{dots:[1,2,5,8,7,6,3,0],bright:.6}},$L=Array.from({length:9},(e,t)=>Math.hypot(t%3-1,Math.floor(t/3)-1));function eR(e){return qL+.65*(.5+.5*Math.cos(2*Math.PI*e/WL))}function tR(e,t,n,r=1){switch(e){case`working`:{let e=t*80/1e3/r;return $L.map(t=>eR(e-t*GL))}case`waiting`:{let e=[0,1,4,5].includes(Math.floor(t/r)%KL);return Array(9).fill(e?JL:1)}default:{let t=QL[e],r=Array(9).fill(YL);return t?.dots.forEach((e,i)=>{let a=Math.min(Math.max(n-i*ZL,0),XL)/XL;r[e]=t.bright*a+YL*(1-a)}),r}}}function nR(e,t){let n=QL[e];return!n||t<(n.dots.length-1)*ZL+XL}var rR=3,iR=new Set,aR;function oR(e,t){let n=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,r=1/0,i=e.held+t-e.step,a=nR(e.look,n?r:i);return tR(e.look,t,n?r:i,n?rR:1).forEach((t,n)=>{let r=e.el.children[n].style;r.opacity=t.toFixed(3)}),a}function sR(){let e=Math.floor(performance.now()/80);for(let t of iR)oR(t,e)||iR.delete(t);cR()}function cR(){aR=iR.size?window.setTimeout(sR,80-performance.now()%80+2):void 0}function lR(e,t,n){let r=Math.floor(performance.now()/80),i=n>0?Math.max(Date.now()-n,0):1/0,a={el:e,look:t,step:r,held:Math.floor(i/80)};return oR(a,r)&&(iR.add(a),aR===void 0&&cR()),()=>{iR.delete(a)}}function uR({status:e}){let{look:t,tone:n}=$F(e);return(0,V.jsx)(fR,{look:t,tone:n,since:e?.since??0},t)}var dR=e=>e===`muted`?`text-muted`:e===`ink`?`text-ink`:AT[e];function fR({look:e,tone:t,since:n}){let r=(0,g.useRef)(null),[i]=(0,g.useState)(n);return(0,g.useLayoutEffect)(()=>{let t=r.current;return t?lR(t,e,i):void 0},[e,i]),(0,V.jsx)(`span`,{ref:r,className:`inline-grid flex-none grid-cols-[repeat(3,3px)] auto-rows-[3px] gap-px self-center ${dR(t)}`,"aria-hidden":`true`,children:Array.from({length:9},(e,t)=>(0,V.jsx)(`i`,{className:`rounded-full bg-current opacity-12`},t))})}var pR=6;function mR(e,t){let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.id})??null),o=`${t.rowStatus?.kind??``}:${t.rowStatus?.since??0}`,s=JSON.stringify(t.changes??null);return(0,g.useEffect)(()=>{let n=!0;return Hs(e,`output.read`,{taskId:t.id,limit:8}).then(e=>n&&r(lL(e)),()=>n&&r(null)),()=>{n=!1}},[e,t.id,o]),(0,g.useEffect)(()=>{let n=!0;return Hs(e,`diff.files`,{taskId:t.id}).then(e=>n&&a(e),()=>{}),()=>{n=!1}},[e,t.id,s,o]),{reply:n,changes:i?uL(i):null}}function hR({changes:e,onOpen:t}){if(!e)return(0,V.jsx)(`p`,{className:qt,children:`…`});if(e.files.length===0)return(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`compare.noChanges`)});let n=e.files.length-pR;return(0,V.jsxs)(`div`,{className:BL,children:[(0,V.jsxs)(`p`,{className:`m-0 flex gap-2 font-mono text-meta text-muted`,children:[(0,V.jsx)(`span`,{children:z(`compare.files`,{count:e.files.length})}),e.added>0&&(0,V.jsxs)(NL,{tone:`added`,children:[`+`,e.added]}),e.deleted>0&&(0,V.jsxs)(NL,{tone:`removed`,children:[`−`,e.deleted]})]}),e.files.slice(0,pR).map(n=>(0,V.jsxs)(H,{variant:`row`,className:`${VL} text-left [&:hover]:underline`,title:n.path,onClick:()=>t(n.path,e.scope),children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:n.path}),n.added?(0,V.jsxs)(NL,{tone:`added`,children:[`+`,n.added]}):null,n.deleted?(0,V.jsxs)(NL,{tone:`removed`,children:[`−`,n.deleted]}):null]},n.path)),n>0&&(0,V.jsx)(`span`,{className:`font-mono text-meta text-subtle`,children:z(`compare.more`,{count:n})})]})}function gR({model:e,row:t,round:n}){let{reply:r,changes:i}=mR(e,t),{look:a}=$F(t.rowStatus),o=t.kept===!0,s=(n,r)=>{e.select(t.id),$k({taskId:t.id,path:n,scope:r})};return(0,V.jsxs)(`section`,{className:FL(o),"data-attempt":t.id,children:[(0,V.jsxs)(`div`,{className:IL,children:[(0,V.jsx)(uR,{status:t.rowStatus}),(0,V.jsx)(`span`,{className:LL,children:t.engine?.name??t.label}),(0,V.jsx)(`span`,{className:`flex-none text-meta text-muted`,children:z(`compare.status.${a}`)}),o&&(0,V.jsx)(`span`,{className:`ml-auto flex-none font-mono text-meta text-accent`,children:z(`compare.kept`)})]}),(0,V.jsx)(`span`,{className:RL,title:t.branch,children:t.branch}),r?(0,V.jsx)(`p`,{className:zL,children:r}):(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:z(`compare.noReply`)}),(0,V.jsx)(hR,{changes:i,onOpen:s}),(0,V.jsxs)(`div`,{className:HL,children:[(0,V.jsx)(H,{hit:`tight`,onClick:()=>e.select(t.id),children:z(`compare.terminal`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>s(`.`,i?.scope??`working`),children:z(`compare.diff`)}),o?(0,V.jsx)(H,{hit:`tight`,onClick:()=>void pL(e,t),children:z(`compare.unkeep`)}):(0,V.jsx)(H,{hit:`tight`,onClick:()=>void fL(e,t,n),children:z(`compare.keep`)})]})]})}function _R({model:e}){B();let t=v(dn),n=v(e.tasks),r=ML(),i=t&&n?sL(n.tasks,t):[];return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:r,onKeyDown:e=>{e.metaKey||e.ctrlKey||e.altKey||e.key!==`q`&&e.key!==`Escape`||(e.preventDefault(),ln.set(null))},children:[(0,V.jsx)(`h1`,{className:bM,children:z(`compare.title`)}),i.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`compare.empty`)}):(0,V.jsx)(`div`,{className:PL,children:i.map(t=>(0,V.jsx)(gR,{model:e,row:t,round:i},t.id))})]})}function vR(e){let t=Math.floor(e/6e4),n=Math.floor(t/60);return{minutes:t,hours:n,days:Math.floor(n/24)}}function yR(e,t=Date.now()){let n=Math.max(0,t-e),r=Math.floor(n/1e3);if(r<60)return`${r}s`;let{minutes:i,hours:a,days:o}=vR(n);return i<60?`${i}m`:a<24?`${a}h`:`${o}d`}var bR=[{id:`issues`,label:`reviewQueue.sourceIssues`},{id:`reviews`,label:`reviewQueue.sourceReviews`}];function xR(){B();let e=v(XO);return(0,V.jsx)(`span`,{className:`flex items-baseline gap-3 font-mono text-meta`,children:bR.map(t=>t.id===e?(0,V.jsx)(`span`,{className:`text-ink`,children:z(t.label)},t.id):(0,V.jsx)(H,{onClick:()=>XO.set(t.id),children:z(t.label)},t.id))})}var SR={passing:`reviewQueue.checksPassing`,failing:`reviewQueue.checksFailing`,pending:`reviewQueue.checksPending`},CR={missing:`reviewQueue.gh.missing`,unauthenticated:`reviewQueue.gh.unauthenticated`,failed:`reviewQueue.gh.failed`};function wR(e){let{pr:t}=e,n=Date.parse(t.createdAt),r=[t.isDraft?z(`reviewQueue.draft`):``,t.fork?z(`reviewQueue.fork`):``,t.checks?z(SR[t.checks]):``];return(0,V.jsxs)(`div`,{"data-row":e.index,className:EM(e.at),onClick:e.onPick,children:[(0,V.jsxs)(`div`,{className:DM,children:[(0,V.jsxs)(`span`,{className:`mono ${OM}`,children:[t.nameWithOwner.split(`/`)[1],`#`,t.number]}),(0,V.jsx)(`span`,{className:AM,children:t.title}),(0,V.jsx)(H,{disabled:e.busy,onClick:e.onReview,children:z(`reviewQueue.start`)})]}),(0,V.jsxs)(`div`,{className:kM,children:[(0,V.jsx)(`span`,{className:AM,children:[t.author,...r].filter(Boolean).join(`, `)}),(0,V.jsxs)(`span`,{className:`mono`,children:[`+`,t.additions,` −`,t.deletions]}),(0,V.jsx)(`span`,{className:`mono`,children:Number.isFinite(n)?yR(n,e.now):``})]})]})}function TR({model:e}){B();let t=e.client,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(0),[c,l]=(0,g.useState)(null),[u,d]=(0,g.useState)(null),[f,p]=(0,g.useState)(0),m=(0,g.useRef)(!1),h=ML(),_=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0,n=m.current;return m.current=!1,a(null),t.request(`review.queue`,n?{refresh:!0}:{}).then(t=>e&&r(t)).catch(t=>{e&&(a(CL(t)),r({prs:[],other:0}))}),()=>{e=!1}},[t,f]);let v=n?.prs??[],y=Math.min(o,Math.max(0,v.length-1));(0,g.useEffect)(()=>{_.current?.querySelector(`[data-row="${y}"]`)?.scrollIntoView({block:`nearest`})},[y]);let b=async e=>{if(c===null){l(e.number),d(z(`reviewQueue.preparing`,{number:e.number}));try{let{ref:n}=await t.request(`review.prepare`,{repo:e.repo,number:e.number});gn(ZO(e,n,z(`reviewQueue.prompt`,{number:e.number,repo:e.nameWithOwner,title:e.title,url:e.url,head:e.headRef,base:e.baseRef})))}catch(t){G(z(`reviewQueue.failed`,{number:e.number,error:CL(t)}),`error`)}finally{l(null),d(null)}}};jL(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return s(Math.min(v.length-1,y+1)),!0;case`k`:case`ArrowUp`:return s(Math.max(0,y-1)),!0;case`r`:return m.current=!0,p(e=>e+1),!0;case`Enter`:{let e=v[y];return e&&b(e),!0}default:return!1}});let x=Date.now();return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:h,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:z(`reviewQueue.title`)}),(0,V.jsx)(xR,{})]}),i?(0,V.jsx)(`p`,{className:`text-error`,children:i}):n===null?(0,V.jsx)(`p`,{className:`text-muted`,children:`…`}):n.reason?(0,V.jsx)(`p`,{className:`text-muted`,children:z(CR[n.reason])}):v.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`reviewQueue.empty`)}):(0,V.jsx)(`div`,{className:TM,ref:_,children:v.map((e,t)=>(0,V.jsx)(wR,{pr:e,index:t,at:t===y,now:x,busy:c!==null,onPick:()=>s(t),onReview:()=>void b(e)},`${e.nameWithOwner}#${e.number}`))}),n&&n.other>0&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:z(`reviewQueue.other`,{count:n.other})}),u&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:u})]})}var ER=30;function DR(){let{items:e}=bL();return t=>{let n=t.indexOf(`: `);switch(n>=0?t.slice(0,n):`failed`){case`no-remote`:return e.errorHint.noRemote;case`gh-missing`:return e.errorHint.ghMissing;case`auth`:return e.errorHint.auth;default:return xL(e.errorHint.fallback,{message:t})}}}function OR({model:e}){let{items:t,common:n}=bL(),r=DR(),i=e.client,a=v(e.tasks),o=DL(e),s=OL(e),[c,l]=(0,g.useState)(()=>{let e=s?o.findIndex(e=>wL(e)===wL(s)):-1;return Math.max(0,e)}),u=o[c],d=(e,t)=>({repo:e,limit:ER,...t?{assignee:`@me`}:{}}),f=e=>Object.fromEntries(e.links.map(e=>[e.number,e.taskId])),[p,m]=(0,g.useState)(()=>u?Bs(i,`workitem.list`,d(u,!1))?.items??null:null),[h,_]=(0,g.useState)(()=>{let e=u?Bs(i,`workitem.links`,{repo:u}):void 0;return e?f(e):{}}),[y,b]=(0,g.useState)(null),[x,S]=(0,g.useState)(!1),[C,w]=(0,g.useState)(0),[T,E]=(0,g.useState)(0),[D,O]=(0,g.useState)(!1),[k,A]=(0,g.useState)(null),j=ML(),ee=(0,g.useRef)(!1);(0,g.useEffect)(()=>{let e=!0;if(!u){m([]);return}b(null);let t=ee.current;ee.current=!1;let n=d(u,x),r=Bs(i,`workitem.list`,n);return r&&m(r.items),i.request(`workitem.list`,{...n,...t?{refresh:!0}:{}}).then(t=>e&&m(Vs(i,`workitem.list`,n,t).items)).catch(t=>{e&&(b(CL(t)),m([]))}),Hs(i,`workitem.links`,{repo:u}).then(t=>e&&_(f(t))).catch(()=>e&&_({})),()=>{e=!1}},[i,u,x,C,a?.tasks.length]);let M=p??[],N=Math.min(T,Math.max(0,M.length-1));(0,g.useEffect)(()=>A(null),[u,x]);let P=(0,g.useRef)(null);(0,g.useEffect)(()=>{P.current?.querySelector(`[data-row="${N}"]`)?.scrollIntoView({block:`nearest`})},[N]);let F=e=>a?.tasks.find(t=>t.id===e)?.label??e,I=t=>{ln.set(null),e.select(t)},te=async()=>{let e=M[N];if(!e||!u||D)return;let n=h[e.number];if(n){A(xL(t.openingLinked,{title:F(n)})),I(n);return}O(!0),A(xL(t.starting,{number:e.number}));try{let n=await i.request(`workitem.start`,{repo:u,number:e.number});n.started?I(n.taskId):A(xL(t.startedNoEngine,{title:n.title}))}catch(n){G(xL(t.startFailed,{number:e.number,error:CL(n)}),`error`)}finally{O(!1)}};jL(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return E(Math.min(M.length-1,N+1)),!0;case`k`:case`ArrowUp`:return E(Math.max(0,N-1)),!0;case`Tab`:return l(t=>o.length?(t+(e.shiftKey?o.length-1:1))%o.length:0),!0;case`a`:return S(e=>!e),!0;case`r`:return ee.current=!0,w(e=>e+1),!0;case`Enter`:return te(),!0;default:return!1}});let L=Date.now();return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:j,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(xR,{}),(0,V.jsxs)(`span`,{className:`mono touch:empty:hidden! text-muted ${SM(!0)}`,children:[u?TL(u,o):t.noRepo,x?` ${t.assignedFilter}`:``]})]}),y?(0,V.jsxs)(`div`,{className:TM,children:[(0,V.jsx)(`p`,{className:`text-error`,children:y}),(0,V.jsx)(`p`,{className:`text-muted`,children:r(y)})]}):p===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.loading}):M.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.empty}):(0,V.jsx)(`div`,{className:TM,ref:P,children:M.map((e,n)=>{let r=h[e.number],i=Date.parse(e.updatedAt);return(0,V.jsxs)(`div`,{"data-row":n,className:EM(n===N),onClick:()=>n===N?void te():E(n),children:[(0,V.jsxs)(`div`,{className:DM,children:[(0,V.jsxs)(`span`,{className:`mono ${OM}`,children:[`#`,e.number]}),(0,V.jsx)(`span`,{children:e.title})]}),(0,V.jsxs)(`div`,{className:kM,children:[(0,V.jsx)(`span`,{className:AM,children:[e.author,...e.labels.slice(0,2)].filter(Boolean).join(`, `)}),r&&(0,V.jsx)(`span`,{children:xL(t.linkedChip,{title:F(r)})}),(0,V.jsx)(`span`,{className:`mono`,children:Number.isFinite(i)?yR(i,L):``})]})]},e.number)})}),k&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:k})]})}function kR({model:e}){return v(XO)===`reviews`?(0,V.jsx)(TR,{model:e}):(0,V.jsx)(OR,{model:e})}var AR={backlog:`active`,in_progress:`active`,in_review:`parked`,error:`parked`,done:`terminal`,canceled:`terminal`,open:`active`,doing:`active`,hold:`parked`};function jR(e){return AR[e]??`parked`}var MR=[`backlog`,`in_progress`,`parked`,`done`];function NR(e,t,n){let r=e.find(e=>e.issues.length>0)?.issues[0]?.id??null;if(t==null)return r;let i=-1,a=-1;for(let[n,r]of e.entries()){let e=r.issues.findIndex(e=>e.id===t);if(e!==-1){i=n,a=e;break}}if(i===-1)return r;if(n===`up`||n===`down`){let r=e[i]?.issues??[],o=n===`up`?a-1:a+1;return r[Math.max(0,Math.min(o,r.length-1))]?.id??t}let o=n===`left`?-1:1;for(let n=i+o;n>=0&&n<e.length;n+=o){let r=e[n]?.issues??[];if(r.length!==0)return r[Math.min(a,r.length-1)]?.id??t}return t}function PR(e,t){let n=jR(e.status);return n===`terminal`?`done`:n===`parked`?`parked`:e.taskId!==void 0&&e.taskId!==``&&(t?.(e.taskId)??!0)||e.status===`doing`?`in_progress`:`backlog`}function FR(e,t){let n=0;return{columns:e.map(e=>{if(e.key!==`in_progress`)return e;let r=[],i=[];for(let n of e.issues)n.taskId!==void 0&&n.taskId!==``&&t(n.taskId)?r.push(n):i.push(n);return n=r.length,r.length===0?e:{...e,issues:[...r,...i]}}),attentionCount:n}}function IR(e,t){return e.created===t.created?t.id-e.id:e.created<t.created?1:-1}function LR(e,t){let n={backlog:[],in_progress:[],parked:[],done:[]};for(let r of e)n[PR(r,t)].push(r);return MR.map(e=>{let t=e===`done`||e===`parked`,r=n[e].sort(IR);return!t||r.length<=20?{key:e,issues:r,hiddenCount:0}:{key:e,issues:r.slice(0,20),hiddenCount:r.length-20}})}var RR=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`application/pdf`],zR=5242880;function BR(e,t){return/\.pdf$/i.test(e)?`pdf[${t}]`:`images[${t}]`}function VR(e){let t=-1;for(let n of e.matchAll(/^(?:images|pdf)\[(\d+)\]:/gm)){let e=Number.parseInt(n[1],10);e>t&&(t=e)}return t+1}function HR(e,t){let n=e.replace(/\s+$/,``),r=VR(e);for(let e of t){let t=`${BR(e,r)}: ${e}`;n=n.length>0?`${n}\n${t}`:t,r+=1}return n}function UR(e){return Array.from(e??[]).filter(e=>RR.includes(e.type))}function WR(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}async function GR(e,t){let n=WR(new Uint8Array(await t.arrayBuffer()));return(await e.request(`attachment.put`,{mime:t.type,data:n})).path}var KR=[`worktree`,`projectWorktree`,`project`];async function qR(e,t){let n=t.placement===`project`?`project`:`worktree`,{title:r,prompt:i}=await e.request(`issue.prompt`,{repo:t.repo,id:t.issue.id,where:n}),a=[];if(t.placement!==`project`){let{taskId:n}=await e.request(`task.create`,{repo:t.repo,engine:t.engine,title:r,prompt:i});if(await e.request(`issue.update`,{repo:t.repo,id:t.issue.id,task:n}).catch(e=>a.push({kind:`link`,error:CL(e)})),t.placement===`worktree`)return{taskId:n,warnings:a};let o=await e.request(`task.openMain`,{repo:t.repo}),s=await e.request(`tab.openViewport`,{taskId:o.taskId,viewTaskId:n});return{taskId:o.taskId,tabId:s.tabId,warnings:a}}let{taskId:o}=await e.request(`task.openMain`,{repo:t.repo}),{tabId:s,taskId:c=o}=await e.request(`tab.new`,{taskId:o,kind:`engine`,engine:t.engine,prompt:i});return await e.request(`issue.setStatus`,{repo:t.repo,id:t.issue.id,status:`doing`}).catch(e=>a.push({kind:`status`,error:CL(e)})),{taskId:c,tabId:s,warnings:a}}var JR=`text-meta leading-[inherit]`,YR=`text-meta`,XR=`flex flex-col gap-2 overflow-hidden`,ZR=`flex min-w-0 items-baseline gap-3`,QR=`font-bold whitespace-nowrap text-accent touch:relative touch:after:absolute touch:after:-inset-x-2 touch:after:-inset-y-1 touch:after:content-['']`,$R=`min-w-0 truncate ${YR}`,ez=`ml-auto ${JR}`,tz=`grid min-h-0 flex-1 grid-cols-4 gap-2`,nz=`flex min-h-0 flex-1 flex-col gap-2`,rz=`flex gap-4 ${YR}`,iz=e=>`touch:relative touch:after:absolute touch:after:-inset-x-1.5 touch:after:-top-1 touch:after:-bottom-3 touch:after:content-[''] ${e?`font-bold text-accent`:`text-muted`}`,az={in_progress:`text-accent`,parked:`text-warning`,done:`text-success`},oz=e=>`flex min-h-0 flex-col rounded-md border-hairline border-line p-2 ${e?`flex-1`:``}`,sz=e=>`m-0 mb-2 flex justify-between gap-2 font-mono text-meta font-bold normal-nums ${az[e]??`text-muted`}`,cz=`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto`,lz=`m-0 ${YR}`,uz=e=>`flex flex-none cursor-pointer flex-col gap-1 rounded-sm border-hairline bg-surface px-2.5 py-2 ${e.selected?`border-accent`:e.attention?`border-warning`:`border-line hover:border-line-active`}`,dz=`flex justify-between gap-2`,fz=e=>`min-w-0 font-bold wrap-anywhere ${e?`text-muted`:``}`,pz=`h-[2.8em] overflow-hidden whitespace-pre-wrap wrap-anywhere ${JR}`,mz=`flex justify-between gap-2 ${YR}`,hz=`w-[min(680px,calc(100vw-32px))]!`,gz=`flex items-baseline gap-3.5`,_z=`flex items-baseline gap-2.5`,vz=`tracking-[0] normal-case`,yz=`min-h-40 font-mono`,bz=`flex flex-col items-start gap-0.5`,xz=e=>`text-left font-mono text-meta whitespace-pre-wrap normal-nums ${e?`font-bold text-accent`:`font-normal text-muted`}`,Sz=JR,Cz=`flex flex-col gap-1 [&_p]:m-0`,wz=`flex gap-2 ${YR}`,Tz=`min-w-[4ch] text-right`,Ez=`rounded-sm border-hairline border-transparent p-1 focus:border-accent focus:outline-none`,Dz={choice:`radiogroup`,list:`listbox`,cells:`group`};function Oz(e){return(0,V.jsx)(`div`,{ref:e.fieldRef,role:Dz[e.kind??`choice`],tabIndex:0,"aria-label":e.label,className:`${Ez} ${e.className??``}`,onKeyDown:e.onKeyDown,onClick:e.onClick,children:e.children})}var kz=[`open`,`doing`,`hold`,`done`];function Az({model:e,taskId:t}){let{kanban:n}=bL(),[r,i]=(0,g.useState)(null);return(0,g.useEffect)(()=>{let n=!0;return e.client.request(`task.events`,{taskId:t}).then(e=>n&&i(e.events)).catch(()=>n&&i([])),()=>{n=!1}},[e,t]),(0,V.jsxs)(`div`,{className:Cz,children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:n.detail.eventsLabel}),r===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.detail.eventsLoading}):r.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:n.detail.eventsNone}):r.map(e=>(0,V.jsxs)(`div`,{className:`mono ${wz}`,children:[(0,V.jsx)(`span`,{className:`text-muted ${Tz}`,children:yR(e.at)}),(0,V.jsx)(`span`,{children:e.kind}),e.tail&&(0,V.jsx)(`span`,{className:`text-muted`,children:e.tail})]},`${e.at}:${e.kind}:${e.tail}`))]})}function jz(e){let{kanban:t}=bL(),{issue:n,mode:r}=e,i=r===`create`,a=!i&&n.taskId?n.taskId:null,o=i||!a&&n.status!==`done`,[s,c]=(0,g.useState)(n.title),[l,u]=(0,g.useState)(n.body),[d,f]=(0,g.useState)(n.status),[p,m]=(0,g.useState)(e.defaultEngine),[h,_]=(0,g.useState)(KR[0]),[v,y]=(0,g.useState)(!1),[b,x]=(0,g.useState)(!1),S=(0,g.useRef)({}),C=e=>t=>{S.current[e]=t},w=i?`title`:o?`workspace`:a?`open`:`title`;(0,g.useEffect)(()=>S.current[w]?.focus(),[w]);let T=()=>({title:s.trim()||n.title,body:l,status:d}),E=()=>({engine:p,placement:h,jump:v}),D=t=>{Sn(),t&&e.onOutcome(t)},O=()=>s.trim()?!0:(S.current.title?.focus(),!1),k=()=>{i?O()&&D({kind:`create`,title:s.trim(),body:l,start:E()}):o?D({kind:`start`,...E(),...T()}):a&&D({kind:`open`,taskId:a,...T()})},A=()=>{i&&O()&&D({kind:`create`,title:s.trim(),body:l,start:null})},j=()=>D(i?null:{kind:`close`,...T()}),ee=(0,g.useRef)({commit:k,saveOnly:A,close:j});ee.current={commit:k,saveOnly:A,close:j},(0,g.useEffect)(()=>{let e=e=>{let t=e.key===`Escape`?ee.current.close:e.key===`Enter`&&(e.ctrlKey||e.metaKey)?ee.current.commit:e.key.toLowerCase()===`s`&&e.ctrlKey&&!e.metaKey?ee.current.saveOnly:null;t&&(e.preventDefault(),e.stopImmediatePropagation(),t())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let M=async t=>{let n=t.find(e=>e.size>zR);if(n){G(z(`pages.attachTooLarge`,{name:n.name||n.type}),`error`);return}x(!0);try{let n=await Promise.all(t.map(t=>GR(e.model.client,t)));u(e=>HR(e,n))}catch(e){G(K(e),`error`)}finally{x(!1)}},N=e=>{let t=UR(e.clipboardData.files);t.length!==0&&(e.preventDefault(),M(t))},P=e=>{let t=UR(e.dataTransfer.files);e.preventDefault(),t.length>0&&M(t)},F=(e,t,n)=>e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length],I=(e,t,n)=>r=>{if(r.ctrlKey||r.metaKey||r.altKey)return;let i=(e===`x`?{ArrowRight:1,l:1,ArrowLeft:-1,h:-1}:{ArrowDown:1,ArrowUp:-1})[r.key];if(i)t(i);else if(r.key===`Enter`&&n)n();else return;r.preventDefault()},te=d===`done`?`text-success`:d===`hold`?`text-warning`:d===`doing`?`text-accent`:`text-muted`,L=e=>t.detail.status[e];return(0,V.jsx)(`div`,{className:Mn,onMouseDown:e=>e.target===e.currentTarget&&ee.current.close(),children:(0,V.jsxs)(`dialog`,{open:!0,className:`${Nn(!0)} ${hz}`,"aria-label":i?t.detail.newStory:`#${n.id}`,onPaste:N,onDrop:P,onDragOver:e=>e.preventDefault(),children:[(0,V.jsxs)(`div`,{className:Pn,children:[i?(0,V.jsx)(`h1`,{className:`${U} text-muted`,children:t.detail.newStory}):(0,V.jsxs)(`h1`,{className:`${U} text-muted ${gz}`,children:[(0,V.jsxs)(`span`,{children:[`#`,n.id]}),(0,V.jsx)(`span`,{className:te,children:L(d)}),(0,V.jsx)(`span`,{className:`text-muted`,children:xL(t.detail.created,{date:n.created})}),a&&(0,V.jsx)(`span`,{className:`text-accent`,children:t.detail.linked})]}),(0,V.jsx)(`button`,{type:`button`,className:In,"aria-label":z(`dialog.close`),title:z(`dialog.close`),onClick:()=>ee.current.close(),children:`×`})]}),(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.detail.titleLabel}),(0,V.jsx)(`input`,{ref:C(`title`),className:tn,spellCheck:!1,value:s,onChange:e=>c(e.target.value.replace(/[\r\n]+/g,` `)),onKeyDown:e=>{e.key===`Enter`&&!e.ctrlKey&&!e.metaKey&&(e.preventDefault(),S.current.description?.focus())}})]}),(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.detail.description,(0,V.jsx)(`span`,{className:`text-muted ${vz}`,children:$o()?z(`pages.attachHintTouch`):t.detail.attachHint}),b&&(0,V.jsx)(`span`,{className:`text-accent`,children:`…`})]}),(0,V.jsx)(`textarea`,{ref:C(`description`),className:`${tn} ${On} ${yz}`,rows:8,spellCheck:!1,placeholder:t.detail.noDescription,value:l,onChange:e=>u(e.target.value)})]}),!i&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsxs)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted flex items-baseline gap-2.5`,children:[t.detail.statusLabel,(0,V.jsx)(`span`,{className:`keys-only text-muted tracking-[0] normal-case`,children:`←/→`})]}),(0,V.jsx)(Oz,{fieldRef:C(`status`),label:t.detail.statusLabel,className:`flex flex-wrap gap-1.5`,onKeyDown:I(`x`,e=>f(F(kz,d,e))),children:kz.map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===d,className:An(e===d),onClick:()=>{f(e),S.current.status?.focus()},children:L(e)},e))})]}),o?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.detail.engine,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`←/→`})]}),(0,V.jsx)(Oz,{fieldRef:C(`engine`),label:t.detail.engine,className:kn,onKeyDown:I(`x`,t=>m(F(e.engines.map(e=>e.id),p,t)),k),children:e.engines.map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e.id===p,className:An(e.id===p),onClick:()=>{m(e.id),S.current.engine?.focus()},children:e.name},e.id))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.detail.workspace,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`↑/↓`})]}),(0,V.jsx)(Oz,{fieldRef:C(`workspace`),label:t.detail.workspace,className:bz,onKeyDown:I(`y`,e=>_(F(KR,h,e)),k),children:KR.map(e=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===h,className:`touch:py-1.5 ${xz(e===h)}`,onClick:()=>{_(e),S.current.workspace?.focus()},children:[e===h?`▸ `:` `,t.detail.placement[e]]},e))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.detail.jumpLabel,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`←/→`})]}),(0,V.jsx)(Oz,{fieldRef:C(`jump`),label:t.detail.jumpLabel,className:kn,onKeyDown:I(`x`,()=>y(!v),k),children:[!1,!0].map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===v,className:An(e===v),onClick:()=>{y(e),S.current.jump?.focus()},children:e?t.detail.jump.follow:t.detail.jump.stay},String(e)))})]}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Sz}`,children:(0,V.jsx)(kT,{text:ns(i?t.detail.createLegend:t.detail.startLegend)})}),(0,V.jsxs)(`div`,{className:nn,children:[i&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:A,children:z(`pages.storySave`)}),(0,V.jsx)(`button`,{type:`button`,className:Pe(),onClick:k,children:z(i?`pages.storySaveStart`:`pages.storyStart`)})]})]}):a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.detail.sessionLabel}),(0,V.jsxs)(`div`,{className:`${kn} ${Ez}`,children:[(0,V.jsx)(`button`,{ref:C(`open`),type:`button`,className:An(!0),onClick:()=>D({kind:`open`,taskId:a,...T()}),children:t.detail.openAction}),(0,V.jsx)(`button`,{ref:C(`unlink`),type:`button`,className:An(),onClick:()=>D({kind:`unlink`,...T()}),children:t.detail.unlinkAction})]})]}),(0,V.jsx)(Az,{model:e.model,taskId:a}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Sz}`,children:(0,V.jsx)(kT,{text:ns(t.detail.openLegend)})})]}):(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Sz}`,children:(0,V.jsx)(kT,{text:ns(t.detail.doneNote)})})]})]})})}var Mz={"waiting-on-you":`text-error`,landing:`text-success`,"ready-for-review":`text-ink`,working:`text-accent`};function Nz(e){let[t,n]=(0,g.useState)(()=>{let t=Bs(e,`engines.list`);return t?xs(t.engines):[]});return(0,g.useEffect)(()=>{Hs(e,`engines.list`).then(e=>n(xs(e.engines))).catch(()=>n([]))},[e]),{engines:t,defaultEngine:Ss(t)}}function Pz(e,t){let n=DL(e),r=n.join(`
124
- `),[i,a]=(0,g.useState)(()=>Bs(e,`kanban.boards`)??null);return(0,g.useEffect)(()=>{let t=!0,r=e.client,i=e=>r.request(e).then(e=>e.repos).catch(()=>[]);return Promise.all([i(`repos.list`),i(`issue.repos`)]).then(([e,t])=>EL(e,n,t)).then(e=>Promise.all(e.map(e=>r.request(`issue.list`,{repo:e}).catch(t=>({repoRoot:e,nextId:1,issues:[],readError:CL(t)}))))).then(n=>{let r=Vs(e,`kanban.boards`,void 0,[...n].sort((e,t)=>e.repoRoot.localeCompare(t.repoRoot)));t&&a(r)}),()=>{t=!1}},[e,t,r]),i}function Fz(e){let{issue:t}=e,n=t.body.trim();return(0,V.jsxs)(`div`,{"data-issue":t.id,className:uz({selected:e.selected,attention:e.badge?.tone===`text-error`}),onClick:()=>e.selected?e.onOpen():e.onSelect(),onContextMenu:t=>{t.preventDefault(),e.onMenu(t.clientX,t.clientY)},children:[(0,V.jsxs)(`div`,{className:dz,children:[(0,V.jsx)(`span`,{className:fz(e.column===`done`),children:t.title}),(0,V.jsxs)(`span`,{className:`mono text-muted`,children:[`#`,t.id]})]}),(0,V.jsx)(`div`,{className:`text-muted ${pz}`,children:n}),(0,V.jsxs)(`div`,{className:`mono text-muted ${mz}`,children:[(0,V.jsx)(`span`,{children:t.created}),e.badge&&(0,V.jsx)(`span`,{className:e.badge.tone,children:e.badge.label})]})]})}var Iz=5e3,Lz=760;function Rz({model:e}){let{kanban:t,group:n,common:r}=bL(),[i,a]=kL(Iz),o=Pz(e,i),{engines:s,defaultEngine:c}=Nz(e),l=v(e.tasks),u=OL(e),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),h=ML(),[_,y]=(0,g.useState)(!1);(0,g.useEffect)(()=>{let e=h.current;if(!e)return;let t=new ResizeObserver(()=>y(e.clientWidth<Lz));return t.observe(e),()=>t.disconnect()},[h]);let b=o??[],x=u?b.find(e=>e.repoRoot.replace(/^\/private\//,`/`)===u.replace(/^\/private\//,`/`)):void 0,S=Math.max(0,b.findIndex(e=>e.repoRoot===(d??x?.repoRoot))),C=b[S],w=b.map(e=>e.repoRoot),T=b.filter(e=>e.readError).map(e=>`${e.repoRoot}\0${e.readError}`).join(`
125
- `);(0,g.useEffect)(()=>{for(let e of b)e.readError&&G(xL(t.readFailedToast,{repo:TL(e.repoRoot,w),error:e.readError}),`error`)},[T]);let E=l?.tasks??[],D=new Set(E.map(e=>e.id)),O=e=>E.find(t=>t.id===e)?.group,{columns:k,attentionCount:A}=FR(C?LR(C.issues,D.size===0?void 0:e=>D.has(e)):[],e=>O(e)===`waiting-on-you`),j={backlog:t.column.backlog,in_progress:t.column.inProgress,parked:t.column.parked,done:t.column.done},ee=(e,t)=>{let r=e.taskId&&(t===`in_progress`||t===`parked`)?O(e.taskId):void 0,i=r===`waiting-on-you`?n.waitingOnYou:r===`landing`?n.landing:r===`ready-for-review`?n.readyForReview:r===`working`?n.working:null;return r&&i?{label:i,tone:Mz[r]??`text-muted`}:null},M=async(t,n,r,i)=>{try{return await e.client.request(t,{repo:C?.repoRoot,...n})}catch(e){return G(xL(r,{id:String(i),error:CL(e)}),`error`),null}finally{a()}},N=(e,n)=>M(`issue.setStatus`,{id:e.id,status:n},t.statusFailed,e.id),P=t=>{ln.set(null),e.select(t)},F=async(n,r,i)=>{try{let a=await qR(e.client,{repo:n,issue:r,engine:i.engine,placement:i.placement});for(let e of a.warnings)G(xL(e.kind===`link`?t.linkFailed:t.statusFailed,{id:String(r.id),error:e.error}),`error`);i.jump?(ln.set(null),e.selectWhenListed(a.taskId),a.tabId&&await e.refreshTabsNow().then(()=>e.select(a.taskId,a.tabId))):G(xL(t.detail.startedBackground,{title:`#${r.id} ${r.title}`}))}catch(e){G(K(e),`error`)}finally{a()}},I=async(e,n)=>{if(!C||n.kind===`create`)return;let r={};n.title!==e.title&&(r.title=n.title),n.body!==e.body&&(r.body=n.body),(r.title!==void 0||r.body!==void 0)&&await M(`issue.update`,{id:e.id,...r},t.updateFailed,e.id),n.status!==e.status&&await N(e,n.status),n.kind===`open`?P(n.taskId):n.kind===`unlink`?await M(`issue.update`,{id:e.id,task:`none`},t.unlinkFailed,e.id):n.kind===`start`&&await F(C.repoRoot,{...e,...r},n)},te=t=>{C&&(m(t.id),W.set((0,V.jsx)(jz,{model:e,issue:t,mode:`detail`,engines:s,defaultEngine:c,onOutcome:e=>void I(t,e)})))},L=()=>{if(!C)return;let n=C.repoRoot,r={id:C.nextId,title:``,status:`open`,created:new Date().toISOString().slice(0,10),body:``};W.set((0,V.jsx)(jz,{model:e,issue:r,mode:`create`,engines:s,defaultEngine:c,onOutcome:i=>{i.kind===`create`&&(async()=>{try{let t=await e.client.request(`issue.create`,{repo:n,title:i.title,body:i.body});if(a(),!i.start)return;let o=t.issues.find(e=>e.id===r.id)??t.issues.reduce((e,t)=>e&&e.id>t.id?e:t,null);o&&await F(n,o,i.start)}catch(e){G(xL(t.createFailed,{error:CL(e)}),`error`)}})()}}))},ne=()=>{let n=C?.issues.find(e=>e.id===p);if(!C||!n)return;let i=C.repoRoot;W.set((0,V.jsx)(ur,{title:xL(t.confirmDelete.title,{id:String(n.id)}),body:xL(t.confirmDelete.body,{title:n.title}),confirmLabel:r.confirm,onConfirm:async()=>{try{await e.client.request(`issue.delete`,{repo:i,id:n.id}),m(null)}catch(e){G(xL(t.deleteFailed,{id:String(n.id),error:CL(e)}),`error`)}finally{a()}}}))},re=e=>{b.length!==0&&(f(b[(S+e+b.length)%b.length]?.repoRoot??null),m(null))},ie=e=>{let t=NR(k,p,e);t!=null&&m(t)},R=e=>k.some(e=>e.issues.length>0)?ie(e):re(e===`left`?-1:1);jL(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`r`:return a(),!0;case`Tab`:return re(e.shiftKey?-1:1),!0;case`ArrowUp`:return ie(`up`),!0;case`ArrowDown`:return ie(`down`),!0;case`ArrowRight`:case`l`:return R(`right`),!0;case`ArrowLeft`:case`h`:return R(`left`),!0;case`Enter`:{let e=C?.issues.find(e=>e.id===p);return e&&te(e),!0}case`n`:return L(),!0;case`d`:return ne(),!0;default:return!1}});let ae=(0,g.useRef)(null);(0,g.useEffect)(()=>{ae.current?.querySelector(`[data-issue="${p}"]`)?.scrollIntoView({block:`nearest`})},[p]);let oe=(e,n,r)=>{m(e.id),on.set({x:n,y:r,items:kz.filter(t=>t!==e.status).map(n=>({label:xL(t.menu.setStatus,{status:t.detail.status[n]}),run:()=>void N(e,n)}))})},se=k.find(e=>e.issues.some(e=>e.id===p))??k.find(e=>e.issues.length>0)??k[0],ce=(e,n)=>(0,V.jsxs)(`section`,{className:oz(!n),children:[n&&(0,V.jsxs)(`h2`,{className:sz(e.key),children:[(0,V.jsxs)(`span`,{children:[j[e.key],` (`,e.issues.length+e.hiddenCount,`)`]}),e.key===`in_progress`&&A>0&&(0,V.jsx)(`span`,{className:`text-warning`,children:xL(t.attention,{count:String(A)})})]}),(0,V.jsxs)(`div`,{className:cz,children:[e.issues.map(t=>(0,V.jsx)(Fz,{issue:t,column:e.key,selected:t.id===p,badge:ee(t,e.key),onSelect:()=>m(t.id),onOpen:()=>te(t),onMenu:(e,n)=>oe(t,e,n)},t.id)),e.issues.length===0&&e.hiddenCount===0&&(0,V.jsx)(`p`,{className:`mono text-muted ${lz}`,children:t.columnEmpty}),e.hiddenCount>0&&(0,V.jsx)(`p`,{className:`mono text-muted ${lz}`,children:xL(t.more,{count:String(e.hiddenCount)})})]})]},e.key);return(0,V.jsxs)(`div`,{className:`${vM} ${XR}`,tabIndex:0,ref:h,children:[(0,V.jsxs)(`div`,{className:`kb-top`,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(`span`,{className:`mono keys-only text-muted`,children:t.hint}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.kanban}`,disabled:!C,onClick:L,children:z(`pages.new`)}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.kanban}`,disabled:!C?.issues.some(e=>e.id===p),onClick:ne,children:z(`pages.delete`)})]})]}),o===null?(0,V.jsx)(`p`,{className:`text-muted`,children:t.loading}):C?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:ZR,children:[(0,V.jsxs)(`button`,{type:`button`,className:QR,onClick:()=>re(1),children:[TL(C.repoRoot,w),b.length>1&&(0,V.jsx)(`span`,{className:`text-muted`,children:` ${S+1}/${b.length}`})]}),!_&&(0,V.jsx)(`span`,{className:`mono text-muted ${$R}`,children:C.repoRoot}),C.issues.length===0&&!C.readError&&(0,V.jsx)(`span`,{className:`text-muted ${ez}`,children:t.empty})]}),C.readError?(0,V.jsx)(`p`,{className:`text-error`,children:xL(t.readFailed,{error:C.readError})}):_&&se?(0,V.jsxs)(`div`,{className:nz,ref:ae,children:[(0,V.jsx)(`div`,{className:`mono ${rz}`,children:k.map(e=>(0,V.jsxs)(`button`,{type:`button`,className:iz(e.key===se.key),onClick:()=>{let t=e.issues[0];t&&m(t.id)},children:[j[e.key],` (`,e.issues.length+e.hiddenCount,`)`]},e.key))}),ce(se,!1)]}):(0,V.jsx)(`div`,{className:tz,ref:ae,children:k.map(e=>ce(e,!0))})]}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.noRepos})]})}var zz={title:`Mods`,empty:`No mod is drawing anything.`,emptyHint:`A plugin with a [mod] entry draws its panes here, in the TUI and the web alike.`,keys:`↑↓/tab move · enter press · esc back`,pressFailed:`{plugin}: the press did not reach the mod ({reason})`},Bz={title:`Mods`,empty:`当前没有 mod 在绘制内容。`,emptyHint:`声明了 [mod] 的插件会在这里绘制面板,TUI 和 web 显示的是同一份。`,keys:`↑↓/tab 移动 · enter 按下 · esc 返回`,pressFailed:`{plugin}:按键没有送达 mod({reason})`},Vz={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-error`,muted:`text-muted`},Hz=`flex flex-col gap-3`,Uz=`[&_p]:mx-0 [&_p]:my-1`,Wz=`rounded-md border-hairline border-line px-3 pt-2 pb-3 font-mono`,Gz=`mb-2 text-meta leading-[inherit] text-ink`,Kz=(e,t)=>`flex min-w-0 items-start ${e?`[&>form]:flex-[1_1_12em] [&>form]:self-center`:``} ${t?`rounded-sm border-hairline border-line`:``}`,qz=(e,t)=>`whitespace-pre-wrap wrap-anywhere ${e?Vz[e]:`text-ink`} ${t?`font-bold`:``}`,Jz=(e,t)=>`cursor-pointer rounded-sm border-hairline border-current px-2.5 py-0.5 [font:inherit] font-bold! ${Vz[e]} ${t?`bg-[color-mix(in_srgb,currentcolor_18%,transparent)]`:`bg-transparent [&:hover]:bg-[color-mix(in_srgb,currentcolor_18%,transparent)]`}`,Yz=`flex min-w-0 max-w-[40em] self-stretch`,Xz=`w-full font-mono`,Zz=[0,6,12,20];function Qz(e){return`mod-${e.kind}:${e.plugin}/${e.pane}/${e.key}`}function $z(e){let[t,n]=(0,g.useState)(e.value??``);return(0,V.jsx)(`form`,{className:Yz,onSubmit:r=>{r.preventDefault(),e.onSubmit(t),n(e.value??``)},children:(0,V.jsx)(`input`,{id:e.id,className:`${tn} ${Xz}`,spellCheck:!1,value:t,placeholder:e.placeholder,onFocus:e.onFocus,onChange:e=>n(e.target.value)})})}function eB(e){let{node:t}=e;if(t.type===`text`)return(0,V.jsx)(`span`,{className:qz(t.tone,t.bold===!0),children:t.text});if(t.type===`input`){let n={kind:`input`,plugin:e.pane.plugin,pane:e.pane.id,key:t.key};return(0,V.jsx)($z,{id:Qz(n),placeholder:t.placeholder,value:t.value,onFocus:()=>e.onFocus(n),onSubmit:t=>e.onSubmit(n,t)},t.value??``)}if(t.type===`button`){let n={kind:`button`,plugin:e.pane.plugin,pane:e.pane.id,key:t.key};return(0,V.jsx)(`button`,{type:`button`,id:Qz(n),className:Jz(t.tone??`info`,Ei(n,e.cursor)),onFocus:()=>e.onFocus(n),onClick:()=>e.onPress(n),children:t.label})}return(0,V.jsx)(`div`,{className:Kz(t.direction===`row`,t.border===!0),style:{flexDirection:t.direction??`column`,gap:Zz[t.gap??0],padding:Zz[t.padding??0]},children:t.children.map((t,n)=>(0,V.jsx)(eB,{...e,node:t},n))})}function tB({model:e}){let t=B()===`zh`?Bz:zz,n=v(e.mods),r=Ti(n),[i,a]=(0,g.useState)(null),o=Di(r,i),s=ML(),c=(0,g.useRef)(!1),l=(t,n,r={})=>{a(t),!c.current&&(c.current=!0,e.client.request(n,{plugin:t.plugin,pane:t.pane,key:t.key,...r}).catch(e=>G(e instanceof Error?e.message:String(e),`error`)).finally(()=>{c.current=!1}))},u=e=>l(e,`mod.press`),d=(e,t)=>l(e,`mod.submit`,{value:t}),f=e=>{let t=Oi(r,o,e);a(t),t&&document.getElementById(Qz(t))?.focus()};return jL(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`ArrowDown`:return f(1),!0;case`ArrowUp`:return f(-1),!0;case`Enter`:return e.target instanceof HTMLButtonElement?!1:(o?.kind===`button`&&u(o),!0);default:return!1}}),(0,V.jsxs)(`div`,{className:`${yM} ${Hz}`,tabIndex:0,ref:s,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(`span`,{className:`keys-only touch:empty:hidden! text-muted ${SM(!1)}`,children:t.keys})]}),n.length===0?(0,V.jsxs)(`div`,{className:Uz,children:[(0,V.jsx)(`p`,{children:t.empty}),(0,V.jsx)(`p`,{className:`text-muted`,children:t.emptyHint})]}):n.map(e=>(0,V.jsxs)(`section`,{className:Wz,children:[(0,V.jsxs)(`header`,{className:Gz,children:[e.title,` `,(0,V.jsx)(`span`,{className:`text-muted`,children:e.plugin})]}),(0,V.jsx)(eB,{node:e.tree,pane:e,cursor:o,onPress:u,onSubmit:d,onFocus:a})]},`${e.plugin}/${e.id}`))]})}function nB(e){return e===`dispatch_failed`||e===`skipped_unavailable`||e===`script_failed`}function rB(e,t){return e.response?`responded`:e.status!==`dispatched`&&e.status!==`revived`?null:e.deliveryStatus===`missing`?`missing`:e.deliveryStatus===`awaiting`?`awaiting`:t-Date.parse(e.at)>72e5?`missing`:`awaiting`}var iB=6e4,aB=3294,oB=new Map([[`JAN`,1],[`FEB`,2],[`MAR`,3],[`APR`,4],[`MAY`,5],[`JUN`,6],[`JUL`,7],[`AUG`,8],[`SEP`,9],[`OCT`,10],[`NOV`,11],[`DEC`,12]]),sB=new Map([[`SUN`,0],[`MON`,1],[`TUE`,2],[`WED`,3],[`THU`,4],[`FRI`,5],[`SAT`,6]]),cB=256;function lB(e,t,n){let r=e.toUpperCase(),i=t?.get(r);if(i!==void 0)return i;if(!/^\d+$/.test(r))throw Error(`invalid cron ${n}: ${e}`);return Number(r)}function uB(e){let t=new Set;for(let n of e.value.split(`,`)){if(n.length===0)throw Error(`invalid cron ${e.field}: ${e.value}`);let[r,i,...a]=n.split(`/`);if(a.length>0||r===void 0)throw Error(`invalid cron ${e.field}: ${n}`);let o=1;if(i!==void 0&&(!/^\d+$/.test(i)||(o=Number(i),o<1)))throw Error(`invalid cron ${e.field} step: ${n}`);let s,c;if(r===`*`)s=e.min,c=e.max;else if(r.includes(`-`)){let[t,i,...a]=r.split(`-`);if(a.length>0||t===void 0||i===void 0)throw Error(`invalid cron ${e.field} range: ${n}`);s=lB(t,e.names,e.field),c=lB(i,e.names,e.field)}else s=lB(r,e.names,e.field),c=i===void 0?s:e.max;if(s<e.min||c>e.max||s>c)throw Error(`cron ${e.field} out of range: ${n}`);for(let n=s;n<=c;n+=o)t.add(e.normalize?e.normalize(n):n)}return t}function dB(e){if(e.length>cB)throw Error(`cron expression is too long`);let t=e.trim().split(/\s+/).filter(Boolean);if(t.length!==5)throw Error(`cron expression needs 5 fields (minute hour day month weekday), got ${t.length}`);let[n,r,i,a,o]=t;return{minutes:uB({value:n,min:0,max:59,field:`minute`}),hours:uB({value:r,min:0,max:23,field:`hour`}),daysOfMonth:uB({value:i,min:1,max:31,field:`day-of-month`}),months:uB({value:a,min:1,max:12,field:`month`,names:oB}),daysOfWeek:uB({value:o,min:0,max:7,field:`weekday`,names:sB,normalize:e=>e%7}),dayOfMonthRestricted:!i.startsWith(`*`),dayOfWeekRestricted:!o.startsWith(`*`)}}function fB(e){try{return dB(e),!0}catch{return!1}}function pB(e,t,n){return new Date(e.year,e.month-1,e.day,t,n,0,0).getTime()}function mB(e){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}}function hB(e,t){return mB(new Date(e.year,e.month-1,e.day+t,12,0,0,0).getTime())}function gB(e,t){if(!e.months.has(t.month))return!1;let n=e.daysOfMonth.has(t.day),r=e.daysOfWeek.has(new Date(t.year,t.month-1,t.day).getDay());return e.dayOfMonthRestricted&&e.dayOfWeekRestricted?n||r:n&&r}function _B(e){return e-e%iB}function vB(e,t){return[...e].sort((e,n)=>(e-n)*t)}function yB(e,t){let n=dB(e),r=vB(n.hours,1),i=vB(n.minutes,1),a=new Date(_B(t)+iB),o=mB(a.getTime()),s=a.getHours(),c=a.getMinutes();for(let e=0;e<aB;e++){if(gB(n,o)){for(let e of r)if(!(e<s))for(let n of i){if(e===s&&n<c)continue;let r=pB(o,e,n);if(r>t)return r}}o=hB(o,1),s=0,c=0}throw Error(`cron expression never matches: ${e}`)}var bB=[`minute`,`hour`,`dayOfMonth`,`month`,`dayOfWeek`];function xB(e){let t=e.trim().split(/\s+/).filter(Boolean);return bB.map((e,n)=>t[n]??`*`)}function SB(e){return bB.map((t,n)=>e[n]??`*`).join(` `)}var CB=[`*`,`*/5`,`*/10`,`*/15`,`*/30`,...kB(0,59)],wB=[`*`,`*/2`,`*/3`,`*/4`,`*/6`,`*/12`,...kB(0,23)],TB=[`*`,...kB(1,31)],EB=[`*`,`JAN`,`FEB`,`MAR`,`APR`,`MAY`,`JUN`,`JUL`,`AUG`,`SEP`,`OCT`,`NOV`,`DEC`],DB=[`*`,`MON-FRI`,`SAT,SUN`,`MON`,`TUE`,`WED`,`THU`,`FRI`,`SAT`,`SUN`],OB=[`MON`,`TUE`,`WED`,`THU`,`FRI`,`SAT`,`SUN`];function kB(e,t){let n=[];for(let r=e;r<=t;r++)n.push(String(r));return n}var AB={minute:CB,hour:wB,dayOfMonth:TB,month:EB,dayOfWeek:DB};function jB(e,t,n){let r=AB[e],i=r.indexOf(t.trim().toUpperCase());return i<0?(n>0?r[0]:r[r.length-1])??t:r[(i+n+r.length)%r.length]??t}function MB(e,t){return Math.min(Math.max(e+t,0),bB.length-1)}function NB(e,t,n){let r=xB(e);return t<0||t>=bB.length||(r[t]=n),SB(r)}function PB(e,t){let[n,r,i,a,o]=xB(e);if(a!==`*`||i!==`*`||n===void 0||r===void 0||o===void 0)return null;let s=FB(n,r,t);if(!s)return null;let{at:c,bare:l}=s;if(o===`*`)return l?c:t(`automations.schedule.everyDay`,{at:c});if(o===`MON-FRI`)return t(`automations.schedule.weekdays`,{at:c});if(o===`SAT,SUN`)return t(`automations.schedule.weekends`,{at:c});let u=OB.find(e=>e===o.toUpperCase());return u?t(`automations.schedule.onWeekday`,{weekday:t(`automations.schedule.dow.${u}`),at:c}):null}function FB(e,t,n){return t===`*`?e===`*`?{at:n(`automations.schedule.everyMinute`),bare:!0}:e.startsWith(`*/`)?{at:n(`automations.schedule.everyMinutes`,{n:e.slice(2)}),bare:!0}:/^\d+$/.test(e)?{at:n(`automations.schedule.hourlyAt`,{minute:e.padStart(2,`0`)}),bare:!1}:null:t.startsWith(`*/`)&&e===`0`?{at:n(`automations.schedule.everyHours`,{n:t.slice(2)}),bare:!0}:/^\d+$/.test(t)&&/^\d+$/.test(e)?{at:n(`automations.schedule.atClock`,{time:`${t.padStart(2,`0`)}:${e.padStart(2,`0`)}`}),bare:!1}:null}function IB(e,t,n,r){let i=e.trim();if(!fB(i))return{kind:`invalid`};let a;try{a=yB(i,t)}catch{return{kind:`never`}}return{kind:`ok`,nextRunMs:a,relative:LB(a-t,n),absolute:RB(a,t,n,r)}}function LB(e,t){let{minutes:n,hours:r,days:i}=vR(e);return n<60?t(`automations.when.inMinutes`,{n:Math.max(1,n)}):r<24?t(`automations.when.inHours`,{n:r}):t(`automations.when.inDays`,{n:i})}function RB(e,t,n,r){let i=new Date(e),a=`${String(i.getHours()).padStart(2,`0`)}:${String(i.getMinutes()).padStart(2,`0`)}`,o=new Date(t);if(i.getFullYear()===o.getFullYear()&&i.getMonth()===o.getMonth()&&i.getDate()===o.getDate())return a;let s=e-t<5184e5,c=i.toLocaleDateString(r,s?{weekday:`short`}:{weekday:`short`,month:`short`,day:`numeric`});return s?`${c} ${a}`:n(`automations.when.dateTime`,{date:c,time:a})}var zB={name:``,repo:``,prompt:``,schedule:`0 9 * * MON-FRI`};function BB(e){return e.name.trim().length>0&&(e.repo===null||e.repo.trim().length>0)&&e.prompt.trim().length>0&&(!e.target||e.target.taskId.trim().length>0&&/^tab-[\w-]+$/.test(e.target.tabId))&&fB(e.schedule.trim())}function VB(e){return e.name.trim().length===0?`name`:e.repo!==null&&e.repo.trim().length===0?`repo`:e.target&&!e.target.taskId.trim()?`target`:e.target&&!/^tab-[\w-]+$/.test(e.target.tabId)?`targetTab`:e.prompt.trim().length===0?`prompt`:fB(e.schedule.trim())?null:`schedule`}var HB=`flex flex-col overflow-hidden @container`,UB=`mt-2.5 grid min-h-0 flex-1 grid-cols-[minmax(260px,2fr)_minmax(0,3fr)] gap-4 rt-narrow:flex rt-narrow:flex-col rt-narrow:overflow-y-auto`,WB=`flex min-h-0 flex-col gap-3 overflow-y-auto scrollbar-none rt-narrow:shrink-0 rt-narrow:overflow-visible`,GB=`flex gap-1.5 px-2 pt-0 pb-1`,KB=e=>`flex min-w-0 cursor-pointer flex-col gap-0.5 rounded-sm px-2 py-1.5 ${e?`bg-menu`:`[&:hover]:bg-hover`}`,qB=`flex min-w-0 items-baseline gap-2.5`,JB=e=>`min-w-0 flex-1 truncate font-bold ${e?`text-muted`:``}`,YB=`whitespace-nowrap text-meta`,XB=`truncate text-meta`,ZB=`flex min-h-0 flex-col gap-1.5 overflow-y-auto py-0 pr-0 pl-4 [border-left:var(--hairline)_solid_var(--line)] [&_h2]:m-0 [&_p]:m-0 [&>*]:shrink-0 [&>h2]:mt-2.5 rt-narrow:shrink-0 rt-narrow:overflow-visible rt-narrow:pt-3 rt-narrow:pl-0 rt-narrow:[border-left:none] rt-narrow:[border-top:var(--hairline)_solid_var(--line)]`,QB=`flex flex-wrap items-baseline justify-between gap-3`,$B=`font-sans text-display font-bold normal-nums wrap-anywhere`,eV=`mx-0 mt-1 mb-0 grid grid-cols-[max-content_minmax(0,1fr)] items-baseline gap-x-3.5 gap-y-1 [&_dd]:m-0 [&_dd]:wrap-anywhere [&_dd_.mono]:whitespace-pre`,tV=`max-h-[12lh] overflow-y-auto rounded-sm bg-inset px-2.5 py-2 whitespace-pre-wrap wrap-anywhere`,nV=`min-w-0 text-meta leading-[inherit]`,rV=`flex w-full min-w-0 gap-2 text-inherit`,iV=rV,aV=`${rV} cursor-pointer border-none bg-transparent p-0 text-left font-[inherit] [&:hover]:underline`,oV=`min-w-0 flex-1 truncate`,sV=`[&+&]:mt-1.5`,cV=e=>`whitespace-pre-wrap wrap-anywhere text-meta ${e?``:`leading-[inherit]`}`,lV=`text-meta`,uV=`flex gap-4.5`,dV=e=>`flex min-w-[5ch] flex-col gap-0.5 rounded-sm border-hairline px-1.5 py-1 text-left font-mono text-body normal-nums [&>span]:text-meta [&>span]:text-subtle ${e?`border-accent font-bold text-accent`:`border-transparent font-normal`}`,fV=`hidden gap-2 px-1 pt-0.5 pb-1.5 touch:flex`,pV=`h-8 w-11 touch-manipulation rounded-sm border-hairline border-line bg-inset font-mono text-display font-normal normal-nums text-ink`;function mV(e){let{auto:t,common:n}=bL(),r=SL(),i=B()===`zh`?`zh-CN`:`en-US`,[a,o]=(0,g.useState)(()=>({...zB,repo:e.repos.find(t=>e.defaultRepo&&wL(t)===wL(e.defaultRepo))??e.repos[0]??null})),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(null),d=(0,g.useRef)({}),f=e=>t=>{d.current[e]=t};(0,g.useEffect)(()=>d.current.name?.focus(),[]);let p=e=>{o(t=>({...t,...e})),u(null)};(0,g.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),Sn())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let m=()=>{if(BB(a)){Sn(),e.onSubmit({name:a.name.trim(),repo:a.repo===null?null:a.repo.trim(),prompt:a.prompt.trim(),schedule:a.schedule.trim(),...a.target?{target:a.target}:{}});return}let n=VB(a);n&&(d.current[n]?.focus(),u(Reflect.get(t.missing,n)))},h=a.repo===null?[]:e.tasks.filter(e=>wL(e.repo)===wL(a.repo??``)),_=a.target?h.findIndex(e=>e.id===a.target?.taskId)+1:0,v=e=>{let t=(_+e+h.length+1)%(h.length+1),n=h[t-1];p({target:n?{kind:`existing-tab`,taskId:n.id,tabId:`tab-1`}:void 0})},y=[null,...e.repos],b=e=>{let t=Math.min(Math.max(y.indexOf(a.repo)+e,0),y.length-1),n=y[t];n!==void 0&&p({repo:n,target:void 0})},x=e=>t=>{(t.key===`ArrowUp`||t.key===`ArrowDown`)&&(t.preventDefault(),e(t.key===`ArrowDown`?1:-1))},S=e=>t=>{t.key===`Enter`&&(t.preventDefault(),d.current[e]?.focus())},C=xB(a.schedule),w=e=>{let t=bB[s];t&&p({schedule:NB(a.schedule,s,jB(t,C[s]??`*`,e))})},T=e=>{if(!(e.ctrlKey||e.metaKey||e.altKey)){if(e.key===`ArrowLeft`||e.key===`h`)c(MB(s,-1));else if(e.key===`ArrowRight`||e.key===`l`)c(MB(s,1));else if(e.key===`ArrowUp`||e.key===`ArrowDown`)w(e.key===`ArrowUp`?1:-1);else return;e.preventDefault()}},E=IB(a.schedule,Date.now(),r,i),D=PB(a.schedule,r);return(0,V.jsx)(`div`,{className:Mn,onMouseDown:e=>e.target===e.currentTarget&&Sn(),children:(0,V.jsxs)(`dialog`,{open:!0,className:`${Nn(!0)} ${hz}`,"aria-label":t.newTitle,children:[(0,V.jsx)(`h1`,{className:`${U} text-muted`,children:t.newTitle}),(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.fieldName}),(0,V.jsx)(`input`,{ref:f(`name`),className:tn,spellCheck:!1,placeholder:t.namePlaceholder,value:a.name,onChange:e=>p({name:e.target.value}),onKeyDown:S(`repo`)})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.fieldRepo,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`↑/↓`})]}),(0,V.jsx)(Oz,{fieldRef:f(`repo`),kind:`list`,label:t.fieldRepo,className:bz,onKeyDown:x(b),children:y.map(t=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,"aria-selected":t===a.repo,className:`touch:py-1.5 ${xz(t===a.repo)}`,onClick:()=>{p({repo:t,target:void 0}),d.current.repo?.focus()},children:[t===a.repo?`▸ `:` `,t===null?z(`rail.noProject`):TL(t,e.repos)]},t??``))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.fieldTarget,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`↑/↓`})]}),(0,V.jsx)(Oz,{fieldRef:f(`target`),kind:`list`,label:t.fieldTarget,onKeyDown:x(v),onClick:()=>v(1),children:a.target?h[_-1]?.title??a.target.taskId:t.targetFresh})]}),a.target&&(0,V.jsxs)(`label`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:t.fieldTargetTab}),(0,V.jsx)(`input`,{ref:f(`targetTab`),className:tn,spellCheck:!1,value:a.target.tabId,onChange:e=>a.target&&p({target:{...a.target,tabId:e.target.value}}),onKeyDown:S(`prompt`)})]}),(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.fieldPrompt}),(0,V.jsx)(`input`,{ref:f(`prompt`),className:tn,spellCheck:!1,placeholder:t.promptPlaceholder,value:a.prompt,onChange:e=>p({prompt:e.target.value}),onKeyDown:S(`schedule`)})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${_z}`,children:[t.fieldSchedule,(0,V.jsx)(`span`,{className:`keys-only text-muted ${vz}`,children:`←/→ ↑/↓`})]}),(0,V.jsx)(Oz,{fieldRef:f(`schedule`),kind:`cells`,label:t.fieldSchedule,className:uV,onKeyDown:T,children:bB.map((e,n)=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,className:dV(n===s),onClick:()=>{c(n),d.current.schedule?.focus()},children:[C[n]??`*`,(0,V.jsx)(`span`,{children:t.cronField[e]})]},e))}),(0,V.jsx)(`div`,{className:fV,children:[-1,1].map(e=>{let n=t.cronField[bB[s]??`minute`]??``;return(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,className:pV,"aria-label":z(e<0?`pages.cronDown`:`pages.cronUp`,{field:n}),onClick:()=>{w(e),d.current.schedule?.focus()},children:e<0?`−`:`+`},e)})}),E.kind===`ok`?(0,V.jsxs)(`p`,{className:`mono text-success`,children:[D?`${D}, `:``,E.relative,`, `,E.absolute]}):(0,V.jsx)(`p`,{className:`mono text-error`,children:E.kind===`never`?t.cronNever:t.cronInvalid})]}),l&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,l]}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Sz}`,children:(0,V.jsx)(kT,{text:ns(t.composerLegend)})}),(0,V.jsxs)(`div`,{className:nn,children:[(0,V.jsx)(`button`,{type:`button`,className:$t,onClick:Sn,children:n.cancel}),(0,V.jsx)(`button`,{ref:f(`confirm`),type:`button`,className:Pe(),onClick:m,children:n.create})]})]})]})})}var hV=[`ok`,`blocked`,`failed`,`skipped`];function gV(e){switch(e.status){case`dispatched`:case`revived`:case`ran`:return`ok`;case`skipped_blocked`:return`blocked`;case`dispatch_failed`:case`skipped_unavailable`:case`script_failed`:return`failed`;default:return`skipped`}}var _V={scheduled:`schedule`,manual:`manual`,webhook:`webhook`};function vV(e){if(e.status===`skipped_precheck`)return e.precheckResult?.durationMs??null;if(e.status===`ran`||e.status===`script_failed`)return null;let t=Date.parse(e.at),n=Date.parse(e.response?.at??``);return Number.isFinite(t)&&Number.isFinite(n)&&n>=t?n-t:null}function yV(e){if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return n%60==0?`${r}h`:`${r}h ${n%60}m`}function bV(e,t,n){return(t===null?Object.values(e).flat():e[t]??[]).filter(e=>n===null||gV(e)===n).sort((e,t)=>Date.parse(t.at)-Date.parse(e.at)||t.runNumber-e.runNumber)}function xV(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{return{prefix:e.slice(0,t).trim(),value:JSON.parse(e.slice(t,n+1))}}catch{return null}}var SV=(e,t)=>e&&typeof e==`object`?Reflect.get(e,t):void 0;function CV(e){let t=xV(e);if(!t)return{summary:e,full:e};let n=SV(t.value,`error`)??t.value,r=SV(n,`message`),i=SV(n,`code`),a=typeof r==`string`?typeof i==`string`?`${i}: ${r}`:r:null,o=t.prefix.replace(/:$/,``);return{summary:a?`${o} — ${a}`:e,full:`${t.prefix}\n${JSON.stringify(t.value,null,2)}`}}function wV(e){let t=e.trim();if(!/^[[{]/.test(t))return e;try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}}var TV={dispatched:`success`,revived:`success`,skipped_precheck:`muted`,skipped_blocked:`warning`,skipped_cancelled:`muted`,skipped_missed:`warning`,skipped_unavailable:`warning`,dispatch_failed:`error`,ran:`success`,script_failed:`error`},EV={success:`text-success`,muted:`text-muted`,warning:`text-warning`,error:`text-error`},DV={success:`✓`,error:`†`,warning:`!`,muted:`·`},OV=e=>TV[e]??`muted`;function kV(e){let{auto:t}=bL(),{runs:n,when:r}=e,i=e=>t.runStatus[e]??e,a=n.filter(e=>e.response);return(0,V.jsxs)(V.Fragment,{children:[n[0]?.precheckResult&&(0,V.jsx)(AV,{run:n[0]}),(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:t.responses}),a.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.noResponses}):a.map(e=>(0,V.jsxs)(`div`,{className:sV,children:[(0,V.jsx)(`p`,{className:`mono ${lV} ${EV[OV(e.status)]}`,children:`#${e.runNumber} ${i(e.status)}, ${r(e.response?.at)}`}),(0,V.jsx)(`p`,{className:cV(!1),children:wV(e.response?.text??``)})]},e.id))]})}function AV({run:e}){let{auto:t}=bL(),n=e.precheckResult;if(!n)return null;let r=n.timedOut?t.precheckTimedOut:xL(t.precheckExited,{code:String(n.exitCode??`?`)}),i=[{label:t.precheckStdout,text:n.stdout},{label:t.precheckStderr,text:n.stderr}].filter(e=>e.text.trim().length>0);return(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:xL(t.precheckDetail,{exit:r,duration:String(n.durationMs)})}),i.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.precheckNoOutput}):i.map(e=>(0,V.jsx)(`p`,{className:`mono ${cV(!0)}`,children:`${e.label}: ${e.text.replace(/\s+$/,``).split(`
123
+ `);return r?r.length>lL?`${r.slice(0,lL).trimEnd()}…`:r:null}function dL(e){let t=e.files.filter(e=>e.scope===`working`),n=t.length>0?`working`:`branch`,r=n===`working`?t:e.files.filter(e=>e.scope===`branch`);return{scope:n,files:r,added:r.reduce((e,t)=>e+(t.added??0),0),deleted:r.reduce((e,t)=>e+(t.deleted??0),0)}}async function fL(e,t,n){let r=new Set(e.tasks.get()?.tasks.map(e=>e.id)),i=0;try{for(let a of t.filter(e=>r.has(e)))await e.client.request(`task.archive`,{taskId:a,archived:!0,...n?{force:!0}:{}}),i++}catch(e){if(i>0&&G(z(`compare.archived`,{count:i})),e instanceof u_&&e.code===`TASK_BUSY`)throw e;G(z(`compare.archiveFailed`,{error:K(e)}),`error`);return}G(z(`compare.archived`,{count:i}))}async function pL(e,t,n){try{for(let r of n)r.id!==t.id&&r.kept&&await e.client.request(`task.keep`,{taskId:r.id,kept:!1});await e.client.request(`task.keep`,{taskId:t.id,kept:!0})}catch(e){G(z(`compare.keepFailed`,{error:K(e)}),`error`);return}G(z(`compare.keptToast`,{title:t.label}));let r=n.filter(e=>e.id!==t.id).map(e=>e.id);r.length!==0&&W.set((0,V.jsx)(ur,{title:z(`compare.archiveTitle`),body:z(`compare.archiveBody`,{count:r.length}),confirmLabel:z(`compare.archiveConfirm`),onConfirm:()=>fL(e,r,!1),escalate:{when:e=>e instanceof u_&&e.code===`TASK_BUSY`,label:z(`compare.archiveBusyConfirm`),title:z(`compare.archiveBusyTitle`),body:()=>z(`compare.archiveBusyBody`),run:()=>fL(e,r,!0)}}))}async function mL(e,t){try{await e.client.request(`task.keep`,{taskId:t.id,kept:!1}),G(z(`compare.unkeptToast`,{title:t.label}))}catch(e){G(z(`compare.keepFailed`,{error:K(e)}),`error`)}}var hL={title:`ROUTINES`,holdingDaemon:`keeping the daemon awake`,notHolding:`none active`,needAttention:`{count} of {total} need you ·`,paused:`paused`,newTitle:`New routine`,composerLegend:`enter create · tab fields · ←→ ↑↓ edit the focused field · esc cancel`,fieldName:`NAME`,fieldRepo:`REPO`,fieldTarget:`DELIVER TO`,fieldTargetTab:`EXISTING ENGINE TAB`,targetFresh:`New task on each run`,targetStanding:`Routine-owned standing task`,targetExisting:`Existing conversation: {task} / {tab}. Never creates or revives a session.`,fieldPrompt:`PROMPT`,fieldSchedule:`SCHEDULE (FIVE-FIELD CRON)`,namePlaceholder:`weekday dependency audit`,promptPlaceholder:`Audit dependencies and summarize risky changes.`,noProject:`Ungrouped`,cronInvalid:`not a five-field cron`,cronField:{minute:`min`,hour:`hour`,dayOfMonth:`day`,month:`month`,dayOfWeek:`weekday`},schedule:{everyDay:`every day {at}`,weekdays:`weekdays {at}`,weekends:`weekends {at}`,onWeekday:`{weekday} {at}`,everyMinute:`every minute`,everyMinutes:`every {n}m`,everyHours:`every {n}h`,hourlyAt:`hourly at :{minute}`,atClock:`at {time}`,dow:{MON:`Mondays`,TUE:`Tuesdays`,WED:`Wednesdays`,THU:`Thursdays`,FRI:`Fridays`,SAT:`Saturdays`,SUN:`Sundays`}},when:{inMinutes:`in {n}m`,inHours:`in {n}h`,inDays:`in {n}d`,minutesAgo:`{n}m ago`,hoursAgo:`{n}h ago`,now:`now`,justNow:`just now`,dateTime:`{date}, {time}`},runStatus:{dispatched:`dispatched`,revived:`revived`,skipped_cancelled:`cancelled before delivery`,skipped_precheck:`skipped (precheck)`,skipped_blocked:`skipped (task can't use it)`,skipped_missed:`skipped (missed)`,skipped_unavailable:`skipped (unavailable)`,dispatch_failed:`dispatch failed`,ran:`ran`,script_failed:`script failed`},cronNever:`valid, but never fires`,missing:{target:`Choose an existing task.`,targetTab:`Enter an existing tab id, e.g. tab-2.`,name:`Give it a name.`,repo:`Pick a project.`,prompt:`Say what it should do.`,schedule:`That schedule will not run.`},empty:`No routines scheduled.`,emptyHint:`Press n to create one.`,precheck:`precheck: {command}`,lastFailed:`last failed {when}: {reason}`,recentRuns:`RECENT RUNS`,precheckDetail:`WHY IT SKIPPED — precheck {exit} in {duration}ms`,precheckExited:`exited {code}`,precheckTimedOut:`timed out`,precheckStdout:`stdout`,precheckStderr:`stderr`,precheckNoOutput:`(no output)`,noRuns:`Not run yet.`,responses:`RESPONSES`,noResponses:"No run has reported back yet. Agents answer with `routine-respond`.",responseAwaiting:`awaiting response`,responseMissing:`no response`,noSelection:`A routine runs its prompt in a project on a schedule.`,running:`Running {name}…`,ranWith:`{name}: {status}`,latestRunNoTask:`The latest run created no task.`,runNow:`[ run now ]`,deleteTitle:`Delete routine?`,deleteBody:`{name} and its run history will be removed. Tasks it already created are untouched.`,deleteButton:`Delete`,createFailed:`Couldn't create the routine: {error}`,deleteFailed:`Couldn't delete "{name}": {error}`,enableFailed:`"{name}" stays paused: {error}`,disableFailed:`"{name}" stays enabled: {error}`,runFailed:`Couldn't run "{name}" now — schedule unchanged: {error}`},gL={title:`例行任务`,holdingDaemon:`正在保持守护进程常驻`,notHolding:`无启用项`,needAttention:`{total} 个中有 {count} 个需要处理 ·`,paused:`已暂停`,newTitle:`新建例行任务`,composerLegend:`enter 创建 · tab 切字段 · ←→ ↑↓ 编辑当前字段 · esc 取消`,fieldName:`名称`,fieldTarget:`投递目标`,fieldTargetTab:`既有引擎标签页`,targetFresh:`每次新建任务`,targetStanding:`例行任务自有的常驻任务`,targetExisting:`既有会话:{task} / {tab}。不会创建或重启会话。`,fieldRepo:`仓库`,fieldPrompt:`提示词`,fieldSchedule:`调度(五段 cron)`,namePlaceholder:`工作日依赖审计`,promptPlaceholder:`审计依赖并总结有风险的变更。`,noProject:`未分组`,cronInvalid:`不是合法的五段 cron`,cronField:{minute:`分`,hour:`时`,dayOfMonth:`日`,month:`月`,dayOfWeek:`星期`},schedule:{everyDay:`每天{at}`,weekdays:`工作日{at}`,weekends:`周末{at}`,onWeekday:`{weekday}{at}`,everyMinute:`每分钟`,everyMinutes:`每 {n} 分钟`,everyHours:`每 {n} 小时`,hourlyAt:`每小时的 :{minute}`,atClock:`{time}`,dow:{MON:`每周一`,TUE:`每周二`,WED:`每周三`,THU:`每周四`,FRI:`每周五`,SAT:`每周六`,SUN:`每周日`}},when:{inMinutes:`{n} 分钟后`,inHours:`{n} 小时后`,inDays:`{n} 天后`,minutesAgo:`{n} 分钟前`,hoursAgo:`{n} 小时前`,now:`即将`,justNow:`刚刚`,dateTime:`{date} {time}`},runStatus:{dispatched:`已派发`,revived:`已重启会话`,skipped_cancelled:`交付前已取消`,skipped_precheck:`已跳过(预检)`,skipped_blocked:`已跳过(任务暂不能接收)`,skipped_missed:`已跳过(错过时间)`,skipped_unavailable:`已跳过(不可用)`,dispatch_failed:`派发失败`,ran:`已运行`,script_failed:`脚本失败`},cronNever:`语法合法,但永远不会触发`,missing:{target:`请选择既有任务。`,targetTab:`请输入既有标签页 ID,例如 tab-2。`,name:`起个名字。`,repo:`选一个项目。`,prompt:`说明它要做什么。`,schedule:`这个调度不会触发。`},empty:`还没有例行任务。`,emptyHint:`按 n 新建一条。`,precheck:`预检:{command}`,lastFailed:`上次失败({when}):{reason}`,recentRuns:`最近执行`,precheckDetail:`为什么跳过 —— 预检{exit},耗时 {duration}ms`,precheckExited:`退出码 {code}`,precheckTimedOut:`超时`,precheckStdout:`标准输出`,precheckStderr:`标准错误`,precheckNoOutput:`(无输出)`,noRuns:`尚未执行。`,responses:`回报`,noResponses:"还没有执行回报。agent 用 `routine-respond` 回报。",responseAwaiting:`等待回报`,responseMissing:`未回报`,noSelection:`例行任务会按调度在某个项目里跑它的提示词。`,running:`正在运行 {name}…`,ranWith:`{name}:{status}`,latestRunNoTask:`最近一次执行没有创建任务。`,runNow:`[ 立即运行 ]`,deleteTitle:`删除这条例行任务?`,deleteBody:`将删除 {name} 及其执行记录。它已经创建的任务不受影响。`,deleteButton:`删除`,createFailed:`创建例行任务失败:{error}`,deleteFailed:`删除“{name}”失败:{error}`,enableFailed:`“{name}”仍处于暂停状态:{error}`,disableFailed:`“{name}”仍处于启用状态:{error}`,runFailed:`无法立即运行“{name}”——排程未受影响:{error}`},_L={title:`Kanban`,hint:`tab project · ←↓↑→ card · enter detail · n new · d delete · r refresh · esc close`,loading:`Loading issues…`,noRepos:"No projects yet — add one with `rove add <path>`, or file a story with `rove api issue-create`.",empty:"No issues — agents file them via `rove api issue-create`.",readFailed:"Couldn't read this project's stories: {error}. Run `rove doctor`, then reopen Kanban.",readFailedToast:`Couldn't read stories for {repo}: {error}`,columnEmpty:`No cards`,column:{backlog:`Backlog`,inProgress:`In progress`,parked:`Parked`,done:`Done`},more:`+{count} more`,attention:`{count} need you`,turnComplete:`turn done`,menu:{setStatus:`status → {status}`},detail:{status:{open:`open`,doing:`doing`,hold:`hold`,done:`done`},statusLabel:`STATUS`,created:`created {date}`,linked:`linked to a session`,titleLabel:`TITLE`,description:`DESCRIPTION`,noDescription:`No description.`,attachHint:`paste a path / ctrl+v screenshot → inserts an image placeholder`,engine:`ENGINE`,workspace:`WORKSPACE`,placement:{worktree:`New worktree task — its own workspace`,projectWorktree:`New worktree — as a chattab in the project workspace`,project:`Project checkout — a new chattab, no worktree`},jumpLabel:`AFTER START`,jump:{stay:`Stay on the board`,follow:`Jump to the session`},startLegend:`enter/ctrl+enter start · tab fields · ←→ status/engine · ↑↓ workspace · esc save & close`,sessionLabel:`SESSION`,openAction:`Open the linked session ↵`,unlinkAction:`Unlink`,openLegend:`enter open the focused action · tab fields · ←→ status · unlink returns the card to Backlog · esc save & close`,eventsLabel:`EVENTS`,eventsLoading:`Loading events…`,eventsNone:`No engine events recorded yet.`,doneNote:`Done stories have nothing left to start — set the status back to reopen one · esc save & close`,startedBackground:`Started in background: {title}`,newStory:`NEW STORY`,createLegend:`ctrl+s save · enter/ctrl+enter save & start · tab fields · esc cancel`},confirmDelete:{title:`Delete story #{id}?`,body:`“{title}” will be removed from the tracker. A linked task, branch, or worktree is left untouched.`},deleteFailed:`Couldn't delete story #{id}: {error}`,createFailed:`Couldn't create the story: {error}`,updateFailed:`Couldn't save story #{id}: {error}`,statusFailed:`Story #{id} stays in its old column: {error}`,linkFailed:`Story #{id} isn't linked to its task: {error}`,unlinkFailed:`Story #{id} is still linked: {error}`},vL={title:`看板`,hint:`tab 切项目 · ←↓↑→ 选卡片 · enter 详情 · n 新建 · d 删除 · r 刷新 · esc 关闭`,loading:`正在加载 issues…`,noRepos:"还没有项目——用 `rove add <路径>` 添加一个,或用 `rove api issue-create` 创建一个 story。",empty:"暂无 issue——agent 可通过 `rove api issue-create` 创建。",readFailed:"读取该项目的 story 失败:{error}。请运行 `rove doctor`,再重新打开看板。",readFailedToast:`读取 {repo} 的 story 失败:{error}`,columnEmpty:`暂无卡片`,column:{backlog:`待办`,inProgress:`进行中`,parked:`搁置`,done:`已完成`},more:`还有 {count} 条`,attention:`{count} 张等你处理`,turnComplete:`回合完成`,menu:{setStatus:`状态 → {status}`},detail:{status:{open:`待办`,doing:`进行中`,hold:`搁置`,done:`已完成`},statusLabel:`状态`,created:`创建于 {date}`,linked:`已关联会话`,titleLabel:`标题`,description:`描述`,noDescription:`暂无描述。`,attachHint:`粘贴路径 / ctrl+v 贴截图 → 插入图片占位行`,engine:`引擎`,workspace:`工作区`,placement:{worktree:`新建 worktree 任务——独立工作区`,projectWorktree:`新建 worktree——作为项目工作区里的 chattab`,project:`项目主目录——新开 chattab,不建 worktree`},jumpLabel:`启动后`,jump:{stay:`留在看板`,follow:`跳转到会话`},startLegend:`enter/ctrl+enter 启动 · tab 切字段 · ←→ 状态/引擎 · ↑↓ 工作区 · esc 保存关闭`,sessionLabel:`会话`,openAction:`打开关联会话 ↵`,unlinkAction:`解除关联`,openLegend:`enter 执行选中操作 · tab 切字段 · ←→ 状态 · 解除关联把卡片退回 Backlog · esc 保存关闭`,eventsLabel:`事件`,eventsLoading:`正在加载事件…`,eventsNone:`暂无引擎事件记录。`,doneNote:`已完成的 story 无需启动——改回状态即可重新打开 · esc 保存关闭`,startedBackground:`已在后台启动:{title}`,newStory:`新建 STORY`,createLegend:`ctrl+s 仅保存 · enter/ctrl+enter 保存并启动 · tab 切字段 · esc 取消`},confirmDelete:{title:`删除 story #{id}?`,body:`「{title}」将从 tracker 中移除。已关联的任务、分支、worktree 不受影响。`},deleteFailed:`删除 story #{id} 失败:{error}`,createFailed:`创建 story 失败:{error}`,updateFailed:`保存 story #{id} 失败:{error}`,statusFailed:`Story #{id} 仍留在原来的列:{error}`,linkFailed:`Story #{id} 未能关联到它的任务:{error}`,unlinkFailed:`Story #{id} 仍处于关联状态:{error}`},yL={title:`ISSUES`,noRepo:`no project`,empty:`No open issues.`,assignedFilter:`assigned to me`,starting:`Starting work on #{number}…`,startedNoEngine:`Created {title}, but its engine did not start.`,linkedChip:`→ {title}`,openingLinked:`Opening {title}…`,startFailed:`Couldn't start work on #{number}: {error}`,errorHint:{noRemote:"Add a GitHub remote (`git remote add origin <url>`) and try again, or press q / esc to close.",ghMissing:"Install the `gh` CLI and authenticate, or press q / esc to close.",auth:"Run `gh auth login`, or press q / esc to close.",fallback:`{message} · press q / esc to close`}},bL={title:`议题`,noRepo:`无项目`,empty:`没有开放的议题。`,assignedFilter:`分配给我的`,starting:`正在开始处理 #{number}…`,startedNoEngine:`已创建 {title},但引擎没有启动。`,linkedChip:`→ {title}`,openingLinked:`正在打开 {title}…`,startFailed:`开始处理 #{number} 失败:{error}`,errorHint:{noRemote:"添加 GitHub remote(`git remote add origin <url>`)后重试,或按 q / esc 关闭。",ghMissing:"安装 `gh` CLI 并登录,或按 q / esc 关闭。",auth:"执行 `gh auth login`,或按 q / esc 关闭。",fallback:`{message} · 按 q / esc 关闭`}};function xL(){let e=B()===`zh`;return{kanban:e?vL:_L,auto:e?gL:hL,items:e?bL:yL,nav:(e?Ar:kr).nav,group:(e?Ar:kr).group,common:e?mr:pr}}function SL(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??e))}function CL(){let{auto:e}=xL();return(t,n)=>{let r=e;for(let e of t.replace(/^automations\./,``).split(`.`))r=r&&typeof r==`object`?Reflect.get(r,e):void 0;return typeof r==`string`?n?SL(r,n):r:t}}function wL(e){return e instanceof Error?e.message:String(e)}function TL(e){return e.replace(/^\/private\//,`/`).replace(/\/+$/,``)}function EL(e,t){let n=e.split(`/`).filter(Boolean),r=n[n.length-1]??e;return t.some(t=>t!==e&&t.split(`/`).filter(Boolean).pop()===r)&&n.length>1?`${n[n.length-2]}/${r}`:r}function DL(...e){let t=new Set,n=[];for(let r of e.flat()){if(!r||r.startsWith(`ssh://`))continue;let e=TL(r);t.has(e)||(t.add(e),n.push(r))}return n}function OL(e){return DL((v(e.tasks)?.tasks??[]).filter(e=>!fw(e)).map(e=>e.repo))}function kL(e){let t=v(e.tasks),{taskId:n}=v(e.selection);return t?.tasks.find(e=>e.id===n)?.repo}function AL(e){let[t,n]=(0,g.useState)(0);return(0,g.useEffect)(()=>{let t=window.setInterval(()=>n(e=>e+1),e);return()=>window.clearInterval(t)},[e]),[t,(0,g.useCallback)(()=>n(e=>e+1),[])]}function jL(e){return e instanceof HTMLElement?e.isContentEditable||[`INPUT`,`TEXTAREA`,`SELECT`].includes(e.tagName):!1}function ML(e){let t=(0,g.useRef)(e);t.current=e,(0,g.useEffect)(()=>{let e=e=>{if(e.defaultPrevented||W.get()||on.get())return;let n=e.target instanceof HTMLElement?e.target:null;jL(n)||n?.closest(`.rail, .side-panel, .xterm`)||e.metaKey||e.altKey||e.ctrlKey&&e.key.toLowerCase()===`c`&&window.getSelection()?.toString()||t.current(e)&&(e.preventDefault(),e.stopPropagation())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[])}function NL(){let e=(0,g.useRef)(null);return(0,g.useEffect)(()=>e.current?.focus(),[]),e}function PL({tone:e,children:t}){return(0,V.jsx)(`span`,{className:Me(`flex-none font-mono text-meta`,e&&AT[e]),children:t})}var FL=`mt-3 grid grid-cols-[repeat(auto-fit,minmax(min(100%,17rem),1fr))] items-start gap-x-5 gap-y-6`,IL=e=>e?`flex min-w-0 flex-col gap-2 pt-2 [border-top:var(--hairline)_solid_var(--accent)]`:`flex min-w-0 flex-col gap-2 pt-2 [border-top:var(--hairline)_solid_var(--line)]`,LL=`flex min-w-0 items-center gap-2`,RL=`min-w-0 truncate font-bold`,zL=`truncate font-mono text-meta text-muted`,BL=`m-0 line-clamp-6 whitespace-pre-wrap wrap-anywhere`,VL=`flex min-w-0 flex-col`,HL=`flex min-w-0 items-baseline gap-2 py-px font-mono text-meta`,UL=`flex flex-wrap gap-x-3.5 gap-y-1 font-mono text-meta`,WL=`flex min-w-0 flex-wrap items-center gap-x-3.5 gap-y-0.5 px-2.5 py-1 font-mono text-meta`,GL=1.2,KL=.3,qL=20,JL=.35,YL=.25,XL=.12,ZL=2,QL=1,$L={error:{dots:[0,4,8,2,6],bright:1},done:{dots:[3,7,5,2],bright:1},idle:{dots:[1,2,5,8,7,6,3,0],bright:.6}},eR=Array.from({length:9},(e,t)=>Math.hypot(t%3-1,Math.floor(t/3)-1));function tR(e){return JL+.65*(.5+.5*Math.cos(2*Math.PI*e/GL))}function nR(e,t,n,r=1){switch(e){case`working`:{let e=t*80/1e3/r;return eR.map(t=>tR(e-t*KL))}case`waiting`:{let e=[0,1,4,5].includes(Math.floor(t/r)%qL);return Array(9).fill(e?YL:1)}default:{let t=$L[e],r=Array(9).fill(XL);return t?.dots.forEach((e,i)=>{let a=Math.min(Math.max(n-i*QL,0),ZL)/ZL;r[e]=t.bright*a+XL*(1-a)}),r}}}function rR(e,t){let n=$L[e];return!n||t<(n.dots.length-1)*QL+ZL}var iR=3,aR=new Set,oR;function sR(e,t){let n=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,r=1/0,i=e.held+t-e.step,a=rR(e.look,n?r:i);return nR(e.look,t,n?r:i,n?iR:1).forEach((t,n)=>{let r=e.el.children[n].style;r.opacity=t.toFixed(3)}),a}function cR(){let e=Math.floor(performance.now()/80);for(let t of aR)sR(t,e)||aR.delete(t);lR()}function lR(){oR=aR.size?window.setTimeout(cR,80-performance.now()%80+2):void 0}function uR(e,t,n){let r=Math.floor(performance.now()/80),i=n>0?Math.max(Date.now()-n,0):1/0,a={el:e,look:t,step:r,held:Math.floor(i/80)};return sR(a,r)&&(aR.add(a),oR===void 0&&lR()),()=>{aR.delete(a)}}function dR({status:e}){let{look:t,tone:n}=eI(e);return(0,V.jsx)(pR,{look:t,tone:n,since:e?.since??0},t)}var fR=e=>e===`muted`?`text-muted`:e===`ink`?`text-ink`:AT[e];function pR({look:e,tone:t,since:n}){let r=(0,g.useRef)(null),[i]=(0,g.useState)(n);return(0,g.useLayoutEffect)(()=>{let t=r.current;return t?uR(t,e,i):void 0},[e,i]),(0,V.jsx)(`span`,{ref:r,className:`inline-grid flex-none grid-cols-[repeat(3,3px)] auto-rows-[3px] gap-px self-center ${fR(t)}`,"aria-hidden":`true`,children:Array.from({length:9},(e,t)=>(0,V.jsx)(`i`,{className:`rounded-full bg-current opacity-12`},t))})}var mR=6;function hR(e,t){let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.id})??null),o=`${t.rowStatus?.kind??``}:${t.rowStatus?.since??0}`,s=JSON.stringify(t.changes??null);return(0,g.useEffect)(()=>{let n=!0;return Hs(e,`output.read`,{taskId:t.id,limit:8}).then(e=>n&&r(uL(e)),()=>n&&r(null)),()=>{n=!1}},[e,t.id,o]),(0,g.useEffect)(()=>{let n=!0;return Hs(e,`diff.files`,{taskId:t.id}).then(e=>n&&a(e),()=>{}),()=>{n=!1}},[e,t.id,s,o]),{reply:n,changes:i?dL(i):null}}function gR({changes:e,onOpen:t}){if(!e)return(0,V.jsx)(`p`,{className:qt,children:`…`});if(e.files.length===0)return(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`compare.noChanges`)});let n=e.files.length-mR;return(0,V.jsxs)(`div`,{className:VL,children:[(0,V.jsxs)(`p`,{className:`m-0 flex gap-2 font-mono text-meta text-muted`,children:[(0,V.jsx)(`span`,{children:z(`compare.files`,{count:e.files.length})}),e.added>0&&(0,V.jsxs)(PL,{tone:`added`,children:[`+`,e.added]}),e.deleted>0&&(0,V.jsxs)(PL,{tone:`removed`,children:[`−`,e.deleted]})]}),e.files.slice(0,mR).map(n=>(0,V.jsxs)(H,{variant:`row`,className:`${HL} text-left [&:hover]:underline`,title:n.path,onClick:()=>t(n.path,e.scope),children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:n.path}),n.added?(0,V.jsxs)(PL,{tone:`added`,children:[`+`,n.added]}):null,n.deleted?(0,V.jsxs)(PL,{tone:`removed`,children:[`−`,n.deleted]}):null]},n.path)),n>0&&(0,V.jsx)(`span`,{className:`font-mono text-meta text-subtle`,children:z(`compare.more`,{count:n})})]})}function _R({model:e,row:t,round:n}){let{reply:r,changes:i}=hR(e,t),{look:a}=eI(t.rowStatus),o=t.kept===!0,s=(n,r)=>{e.select(t.id),$k({taskId:t.id,path:n,scope:r})};return(0,V.jsxs)(`section`,{className:IL(o),"data-attempt":t.id,children:[(0,V.jsxs)(`div`,{className:LL,children:[(0,V.jsx)(dR,{status:t.rowStatus}),(0,V.jsx)(`span`,{className:RL,children:t.engine?.name??t.label}),(0,V.jsx)(`span`,{className:`flex-none text-meta text-muted`,children:z(`compare.status.${a}`)}),o&&(0,V.jsx)(`span`,{className:`ml-auto flex-none font-mono text-meta text-accent`,children:z(`compare.kept`)})]}),(0,V.jsx)(`span`,{className:zL,title:t.branch,children:t.branch}),r?(0,V.jsx)(`p`,{className:BL,children:r}):(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:z(`compare.noReply`)}),(0,V.jsx)(gR,{changes:i,onOpen:s}),(0,V.jsxs)(`div`,{className:UL,children:[(0,V.jsx)(H,{hit:`tight`,onClick:()=>e.select(t.id),children:z(`compare.terminal`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>s(`.`,i?.scope??`working`),children:z(`compare.diff`)}),o?(0,V.jsx)(H,{hit:`tight`,onClick:()=>void mL(e,t),children:z(`compare.unkeep`)}):(0,V.jsx)(H,{hit:`tight`,onClick:()=>void pL(e,t,n),children:z(`compare.keep`)})]})]})}function vR({model:e}){B();let t=v(dn),n=v(e.tasks),r=NL(),i=t&&n?cL(n.tasks,t):[];return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:r,onKeyDown:e=>{e.metaKey||e.ctrlKey||e.altKey||e.key!==`q`&&e.key!==`Escape`||(e.preventDefault(),ln.set(null))},children:[(0,V.jsx)(`h1`,{className:bM,children:z(`compare.title`)}),i.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`compare.empty`)}):(0,V.jsx)(`div`,{className:FL,children:i.map(t=>(0,V.jsx)(_R,{model:e,row:t,round:i},t.id))})]})}function yR(e){let t=Math.floor(e/6e4),n=Math.floor(t/60);return{minutes:t,hours:n,days:Math.floor(n/24)}}function bR(e,t=Date.now()){let n=Math.max(0,t-e),r=Math.floor(n/1e3);if(r<60)return`${r}s`;let{minutes:i,hours:a,days:o}=yR(n);return i<60?`${i}m`:a<24?`${a}h`:`${o}d`}var xR=[{id:`issues`,label:`reviewQueue.sourceIssues`},{id:`reviews`,label:`reviewQueue.sourceReviews`}];function SR(){B();let e=v(XO);return(0,V.jsx)(`span`,{className:`flex items-baseline gap-3 font-mono text-meta`,children:xR.map(t=>t.id===e?(0,V.jsx)(`span`,{className:`text-ink`,children:z(t.label)},t.id):(0,V.jsx)(H,{onClick:()=>XO.set(t.id),children:z(t.label)},t.id))})}var CR={passing:`reviewQueue.checksPassing`,failing:`reviewQueue.checksFailing`,pending:`reviewQueue.checksPending`},wR={missing:`reviewQueue.gh.missing`,unauthenticated:`reviewQueue.gh.unauthenticated`,failed:`reviewQueue.gh.failed`};function TR(e){let{pr:t}=e,n=Date.parse(t.createdAt),r=[t.isDraft?z(`reviewQueue.draft`):``,t.fork?z(`reviewQueue.fork`):``,t.checks?z(CR[t.checks]):``];return(0,V.jsxs)(`div`,{"data-row":e.index,className:EM(e.at),onClick:e.onPick,children:[(0,V.jsxs)(`div`,{className:DM,children:[(0,V.jsxs)(`span`,{className:`mono ${OM}`,children:[t.nameWithOwner.split(`/`)[1],`#`,t.number]}),(0,V.jsx)(`span`,{className:AM,children:t.title}),(0,V.jsx)(H,{disabled:e.busy,onClick:e.onReview,children:z(`reviewQueue.start`)})]}),(0,V.jsxs)(`div`,{className:kM,children:[(0,V.jsx)(`span`,{className:AM,children:[t.author,...r].filter(Boolean).join(`, `)}),(0,V.jsxs)(`span`,{className:`mono`,children:[`+`,t.additions,` −`,t.deletions]}),(0,V.jsx)(`span`,{className:`mono`,children:Number.isFinite(n)?bR(n,e.now):``})]})]})}function ER({model:e}){B();let t=e.client,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(0),[c,l]=(0,g.useState)(null),[u,d]=(0,g.useState)(null),[f,p]=(0,g.useState)(0),m=(0,g.useRef)(!1),h=NL(),_=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0,n=m.current;return m.current=!1,a(null),t.request(`review.queue`,n?{refresh:!0}:{}).then(t=>e&&r(t)).catch(t=>{e&&(a(wL(t)),r({prs:[],other:0}))}),()=>{e=!1}},[t,f]);let v=n?.prs??[],y=Math.min(o,Math.max(0,v.length-1));(0,g.useEffect)(()=>{_.current?.querySelector(`[data-row="${y}"]`)?.scrollIntoView({block:`nearest`})},[y]);let b=async e=>{if(c===null){l(e.number),d(z(`reviewQueue.preparing`,{number:e.number}));try{let{ref:n}=await t.request(`review.prepare`,{repo:e.repo,number:e.number});gn(ZO(e,n,z(`reviewQueue.prompt`,{number:e.number,repo:e.nameWithOwner,title:e.title,url:e.url,head:e.headRef,base:e.baseRef})))}catch(t){G(z(`reviewQueue.failed`,{number:e.number,error:wL(t)}),`error`)}finally{l(null),d(null)}}};ML(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return s(Math.min(v.length-1,y+1)),!0;case`k`:case`ArrowUp`:return s(Math.max(0,y-1)),!0;case`r`:return m.current=!0,p(e=>e+1),!0;case`Enter`:{let e=v[y];return e&&b(e),!0}default:return!1}});let x=Date.now();return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:h,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:z(`reviewQueue.title`)}),(0,V.jsx)(SR,{})]}),i?(0,V.jsx)(`p`,{className:`text-error`,children:i}):n===null?(0,V.jsx)(`p`,{className:`text-muted`,children:`…`}):n.reason?(0,V.jsx)(`p`,{className:`text-muted`,children:z(wR[n.reason])}):v.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`reviewQueue.empty`)}):(0,V.jsx)(`div`,{className:TM,ref:_,children:v.map((e,t)=>(0,V.jsx)(TR,{pr:e,index:t,at:t===y,now:x,busy:c!==null,onPick:()=>s(t),onReview:()=>void b(e)},`${e.nameWithOwner}#${e.number}`))}),n&&n.other>0&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:z(`reviewQueue.other`,{count:n.other})}),u&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:u})]})}var DR=30;function OR(){let{items:e}=xL();return t=>{let n=t.indexOf(`: `);switch(n>=0?t.slice(0,n):`failed`){case`no-remote`:return e.errorHint.noRemote;case`gh-missing`:return e.errorHint.ghMissing;case`auth`:return e.errorHint.auth;default:return SL(e.errorHint.fallback,{message:t})}}}function kR({model:e}){let{items:t,common:n}=xL(),r=OR(),i=e.client,a=v(e.tasks),o=OL(e),s=kL(e),[c,l]=(0,g.useState)(()=>{let e=s?o.findIndex(e=>TL(e)===TL(s)):-1;return Math.max(0,e)}),u=o[c],d=(e,t)=>({repo:e,limit:DR,...t?{assignee:`@me`}:{}}),f=e=>Object.fromEntries(e.links.map(e=>[e.number,e.taskId])),[p,m]=(0,g.useState)(()=>u?Bs(i,`workitem.list`,d(u,!1))?.items??null:null),[h,_]=(0,g.useState)(()=>{let e=u?Bs(i,`workitem.links`,{repo:u}):void 0;return e?f(e):{}}),[y,b]=(0,g.useState)(null),[x,S]=(0,g.useState)(!1),[C,w]=(0,g.useState)(0),[T,E]=(0,g.useState)(0),[D,O]=(0,g.useState)(!1),[k,A]=(0,g.useState)(null),j=NL(),ee=(0,g.useRef)(!1);(0,g.useEffect)(()=>{let e=!0;if(!u){m([]);return}b(null);let t=ee.current;ee.current=!1;let n=d(u,x),r=Bs(i,`workitem.list`,n);return r&&m(r.items),i.request(`workitem.list`,{...n,...t?{refresh:!0}:{}}).then(t=>e&&m(Vs(i,`workitem.list`,n,t).items)).catch(t=>{e&&(b(wL(t)),m([]))}),Hs(i,`workitem.links`,{repo:u}).then(t=>e&&_(f(t))).catch(()=>e&&_({})),()=>{e=!1}},[i,u,x,C,a?.tasks.length]);let M=p??[],N=Math.min(T,Math.max(0,M.length-1));(0,g.useEffect)(()=>A(null),[u,x]);let P=(0,g.useRef)(null);(0,g.useEffect)(()=>{P.current?.querySelector(`[data-row="${N}"]`)?.scrollIntoView({block:`nearest`})},[N]);let F=e=>a?.tasks.find(t=>t.id===e)?.label??e,I=t=>{ln.set(null),e.select(t)},te=async()=>{let e=M[N];if(!e||!u||D)return;let n=h[e.number];if(n){A(SL(t.openingLinked,{title:F(n)})),I(n);return}O(!0),A(SL(t.starting,{number:e.number}));try{let n=await i.request(`workitem.start`,{repo:u,number:e.number});n.started?I(n.taskId):A(SL(t.startedNoEngine,{title:n.title}))}catch(n){G(SL(t.startFailed,{number:e.number,error:wL(n)}),`error`)}finally{O(!1)}};ML(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return E(Math.min(M.length-1,N+1)),!0;case`k`:case`ArrowUp`:return E(Math.max(0,N-1)),!0;case`Tab`:return l(t=>o.length?(t+(e.shiftKey?o.length-1:1))%o.length:0),!0;case`a`:return S(e=>!e),!0;case`r`:return ee.current=!0,w(e=>e+1),!0;case`Enter`:return te(),!0;default:return!1}});let L=Date.now();return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:j,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(SR,{}),(0,V.jsxs)(`span`,{className:`mono touch:empty:hidden! text-muted ${SM(!0)}`,children:[u?EL(u,o):t.noRepo,x?` ${t.assignedFilter}`:``]})]}),y?(0,V.jsxs)(`div`,{className:TM,children:[(0,V.jsx)(`p`,{className:`text-error`,children:y}),(0,V.jsx)(`p`,{className:`text-muted`,children:r(y)})]}):p===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.loading}):M.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.empty}):(0,V.jsx)(`div`,{className:TM,ref:P,children:M.map((e,n)=>{let r=h[e.number],i=Date.parse(e.updatedAt);return(0,V.jsxs)(`div`,{"data-row":n,className:EM(n===N),onClick:()=>n===N?void te():E(n),children:[(0,V.jsxs)(`div`,{className:DM,children:[(0,V.jsxs)(`span`,{className:`mono ${OM}`,children:[`#`,e.number]}),(0,V.jsx)(`span`,{children:e.title})]}),(0,V.jsxs)(`div`,{className:kM,children:[(0,V.jsx)(`span`,{className:AM,children:[e.author,...e.labels.slice(0,2)].filter(Boolean).join(`, `)}),r&&(0,V.jsx)(`span`,{children:SL(t.linkedChip,{title:F(r)})}),(0,V.jsx)(`span`,{className:`mono`,children:Number.isFinite(i)?bR(i,L):``})]})]},e.number)})}),k&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:k})]})}function AR({model:e}){return v(XO)===`reviews`?(0,V.jsx)(ER,{model:e}):(0,V.jsx)(kR,{model:e})}var jR={backlog:`active`,in_progress:`active`,in_review:`parked`,error:`parked`,done:`terminal`,canceled:`terminal`,open:`active`,doing:`active`,hold:`parked`};function MR(e){return jR[e]??`parked`}var NR=[`backlog`,`in_progress`,`parked`,`done`];function PR(e,t,n){let r=e.find(e=>e.issues.length>0)?.issues[0]?.id??null;if(t==null)return r;let i=-1,a=-1;for(let[n,r]of e.entries()){let e=r.issues.findIndex(e=>e.id===t);if(e!==-1){i=n,a=e;break}}if(i===-1)return r;if(n===`up`||n===`down`){let r=e[i]?.issues??[],o=n===`up`?a-1:a+1;return r[Math.max(0,Math.min(o,r.length-1))]?.id??t}let o=n===`left`?-1:1;for(let n=i+o;n>=0&&n<e.length;n+=o){let r=e[n]?.issues??[];if(r.length!==0)return r[Math.min(a,r.length-1)]?.id??t}return t}function FR(e,t){let n=MR(e.status);return n===`terminal`?`done`:n===`parked`?`parked`:e.taskId!==void 0&&e.taskId!==``&&(t?.(e.taskId)??!0)||e.status===`doing`?`in_progress`:`backlog`}function IR(e,t){let n=0;return{columns:e.map(e=>{if(e.key!==`in_progress`)return e;let r=[],i=[];for(let n of e.issues)n.taskId!==void 0&&n.taskId!==``&&t(n.taskId)?r.push(n):i.push(n);return n=r.length,r.length===0?e:{...e,issues:[...r,...i]}}),attentionCount:n}}function LR(e,t){return e.created===t.created?t.id-e.id:e.created<t.created?1:-1}function RR(e,t){let n={backlog:[],in_progress:[],parked:[],done:[]};for(let r of e)n[FR(r,t)].push(r);return NR.map(e=>{let t=e===`done`||e===`parked`,r=n[e].sort(LR);return!t||r.length<=20?{key:e,issues:r,hiddenCount:0}:{key:e,issues:r.slice(0,20),hiddenCount:r.length-20}})}var zR=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`application/pdf`],BR=5242880;function VR(e,t){return/\.pdf$/i.test(e)?`pdf[${t}]`:`images[${t}]`}function HR(e){let t=-1;for(let n of e.matchAll(/^(?:images|pdf)\[(\d+)\]:/gm)){let e=Number.parseInt(n[1],10);e>t&&(t=e)}return t+1}function UR(e,t){let n=e.replace(/\s+$/,``),r=HR(e);for(let e of t){let t=`${VR(e,r)}: ${e}`;n=n.length>0?`${n}\n${t}`:t,r+=1}return n}function WR(e){return Array.from(e??[]).filter(e=>zR.includes(e.type))}function GR(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}async function KR(e,t){let n=GR(new Uint8Array(await t.arrayBuffer()));return(await e.request(`attachment.put`,{mime:t.type,data:n})).path}var qR=[`worktree`,`projectWorktree`,`project`];async function JR(e,t){let n=t.placement===`project`?`project`:`worktree`,{title:r,prompt:i}=await e.request(`issue.prompt`,{repo:t.repo,id:t.issue.id,where:n}),a=[];if(t.placement!==`project`){let{taskId:n}=await e.request(`task.create`,{repo:t.repo,engine:t.engine,title:r,prompt:i});if(await e.request(`issue.update`,{repo:t.repo,id:t.issue.id,task:n}).catch(e=>a.push({kind:`link`,error:wL(e)})),t.placement===`worktree`)return{taskId:n,warnings:a};let o=await e.request(`task.openMain`,{repo:t.repo}),s=await e.request(`tab.openViewport`,{taskId:o.taskId,viewTaskId:n});return{taskId:o.taskId,tabId:s.tabId,warnings:a}}let{taskId:o}=await e.request(`task.openMain`,{repo:t.repo}),{tabId:s,taskId:c=o}=await e.request(`tab.new`,{taskId:o,kind:`engine`,engine:t.engine,prompt:i});return await e.request(`issue.setStatus`,{repo:t.repo,id:t.issue.id,status:`doing`}).catch(e=>a.push({kind:`status`,error:wL(e)})),{taskId:c,tabId:s,warnings:a}}var YR=`text-meta leading-[inherit]`,XR=`text-meta`,ZR=`flex flex-col gap-2 overflow-hidden`,QR=`flex min-w-0 items-baseline gap-3`,$R=`font-bold whitespace-nowrap text-accent touch:relative touch:after:absolute touch:after:-inset-x-2 touch:after:-inset-y-1 touch:after:content-['']`,ez=`min-w-0 truncate ${XR}`,tz=`ml-auto ${YR}`,nz=`grid min-h-0 flex-1 grid-cols-4 gap-2`,rz=`flex min-h-0 flex-1 flex-col gap-2`,iz=`flex gap-4 ${XR}`,az=e=>`touch:relative touch:after:absolute touch:after:-inset-x-1.5 touch:after:-top-1 touch:after:-bottom-3 touch:after:content-[''] ${e?`font-bold text-accent`:`text-muted`}`,oz={in_progress:`text-accent`,parked:`text-warning`,done:`text-success`},sz=e=>`flex min-h-0 flex-col rounded-md border-hairline border-line p-2 ${e?`flex-1`:``}`,cz=e=>`m-0 mb-2 flex justify-between gap-2 font-mono text-meta font-bold normal-nums ${oz[e]??`text-muted`}`,lz=`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto`,uz=`m-0 ${XR}`,dz=e=>`flex flex-none cursor-pointer flex-col gap-1 rounded-sm border-hairline bg-surface px-2.5 py-2 ${e.selected?`border-accent`:e.attention?`border-warning`:`border-line hover:border-line-active`}`,fz=`flex justify-between gap-2`,pz=e=>`min-w-0 font-bold wrap-anywhere ${e?`text-muted`:``}`,mz=`h-[2.8em] overflow-hidden whitespace-pre-wrap wrap-anywhere ${YR}`,hz=`flex justify-between gap-2 ${XR}`,gz=`w-[min(680px,calc(100vw-32px))]!`,_z=`flex items-baseline gap-3.5`,vz=`flex items-baseline gap-2.5`,yz=`tracking-[0] normal-case`,bz=`min-h-40 font-mono`,xz=`flex flex-col items-start gap-0.5`,Sz=e=>`text-left font-mono text-meta whitespace-pre-wrap normal-nums ${e?`font-bold text-accent`:`font-normal text-muted`}`,Cz=YR,wz=`flex flex-col gap-1 [&_p]:m-0`,Tz=`flex gap-2 ${XR}`,Ez=`min-w-[4ch] text-right`,Dz=`rounded-sm border-hairline border-transparent p-1 focus:border-accent focus:outline-none`,Oz={choice:`radiogroup`,list:`listbox`,cells:`group`};function kz(e){return(0,V.jsx)(`div`,{ref:e.fieldRef,role:Oz[e.kind??`choice`],tabIndex:0,"aria-label":e.label,className:`${Dz} ${e.className??``}`,onKeyDown:e.onKeyDown,onClick:e.onClick,children:e.children})}var Az=[`open`,`doing`,`hold`,`done`];function jz({model:e,taskId:t}){let{kanban:n}=xL(),[r,i]=(0,g.useState)(null);return(0,g.useEffect)(()=>{let n=!0;return e.client.request(`task.events`,{taskId:t}).then(e=>n&&i(e.events)).catch(()=>n&&i([])),()=>{n=!1}},[e,t]),(0,V.jsxs)(`div`,{className:wz,children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:n.detail.eventsLabel}),r===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.detail.eventsLoading}):r.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:n.detail.eventsNone}):r.map(e=>(0,V.jsxs)(`div`,{className:`mono ${Tz}`,children:[(0,V.jsx)(`span`,{className:`text-muted ${Ez}`,children:bR(e.at)}),(0,V.jsx)(`span`,{children:e.kind}),e.tail&&(0,V.jsx)(`span`,{className:`text-muted`,children:e.tail})]},`${e.at}:${e.kind}:${e.tail}`))]})}function Mz(e){let{kanban:t}=xL(),{issue:n,mode:r}=e,i=r===`create`,a=!i&&n.taskId?n.taskId:null,o=i||!a&&n.status!==`done`,[s,c]=(0,g.useState)(n.title),[l,u]=(0,g.useState)(n.body),[d,f]=(0,g.useState)(n.status),[p,m]=(0,g.useState)(e.defaultEngine),[h,_]=(0,g.useState)(qR[0]),[v,y]=(0,g.useState)(!1),[b,x]=(0,g.useState)(!1),S=(0,g.useRef)({}),C=e=>t=>{S.current[e]=t},w=i?`title`:o?`workspace`:a?`open`:`title`;(0,g.useEffect)(()=>S.current[w]?.focus(),[w]);let T=()=>({title:s.trim()||n.title,body:l,status:d}),E=()=>({engine:p,placement:h,jump:v}),D=t=>{Sn(),t&&e.onOutcome(t)},O=()=>s.trim()?!0:(S.current.title?.focus(),!1),k=()=>{i?O()&&D({kind:`create`,title:s.trim(),body:l,start:E()}):o?D({kind:`start`,...E(),...T()}):a&&D({kind:`open`,taskId:a,...T()})},A=()=>{i&&O()&&D({kind:`create`,title:s.trim(),body:l,start:null})},j=()=>D(i?null:{kind:`close`,...T()}),ee=(0,g.useRef)({commit:k,saveOnly:A,close:j});ee.current={commit:k,saveOnly:A,close:j},(0,g.useEffect)(()=>{let e=e=>{let t=e.key===`Escape`?ee.current.close:e.key===`Enter`&&(e.ctrlKey||e.metaKey)?ee.current.commit:e.key.toLowerCase()===`s`&&e.ctrlKey&&!e.metaKey?ee.current.saveOnly:null;t&&(e.preventDefault(),e.stopImmediatePropagation(),t())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let M=async t=>{let n=t.find(e=>e.size>BR);if(n){G(z(`pages.attachTooLarge`,{name:n.name||n.type}),`error`);return}x(!0);try{let n=await Promise.all(t.map(t=>KR(e.model.client,t)));u(e=>UR(e,n))}catch(e){G(K(e),`error`)}finally{x(!1)}},N=e=>{let t=WR(e.clipboardData.files);t.length!==0&&(e.preventDefault(),M(t))},P=e=>{let t=WR(e.dataTransfer.files);e.preventDefault(),t.length>0&&M(t)},F=(e,t,n)=>e[(Math.max(0,e.indexOf(t))+n+e.length)%e.length],I=(e,t,n)=>r=>{if(r.ctrlKey||r.metaKey||r.altKey)return;let i=(e===`x`?{ArrowRight:1,l:1,ArrowLeft:-1,h:-1}:{ArrowDown:1,ArrowUp:-1})[r.key];if(i)t(i);else if(r.key===`Enter`&&n)n();else return;r.preventDefault()},te=d===`done`?`text-success`:d===`hold`?`text-warning`:d===`doing`?`text-accent`:`text-muted`,L=e=>t.detail.status[e];return(0,V.jsx)(`div`,{className:Mn,onMouseDown:e=>e.target===e.currentTarget&&ee.current.close(),children:(0,V.jsxs)(`dialog`,{open:!0,className:`${Nn(!0)} ${gz}`,"aria-label":i?t.detail.newStory:`#${n.id}`,onPaste:N,onDrop:P,onDragOver:e=>e.preventDefault(),children:[(0,V.jsxs)(`div`,{className:Pn,children:[i?(0,V.jsx)(`h1`,{className:`${U} text-muted`,children:t.detail.newStory}):(0,V.jsxs)(`h1`,{className:`${U} text-muted ${_z}`,children:[(0,V.jsxs)(`span`,{children:[`#`,n.id]}),(0,V.jsx)(`span`,{className:te,children:L(d)}),(0,V.jsx)(`span`,{className:`text-muted`,children:SL(t.detail.created,{date:n.created})}),a&&(0,V.jsx)(`span`,{className:`text-accent`,children:t.detail.linked})]}),(0,V.jsx)(`button`,{type:`button`,className:In,"aria-label":z(`dialog.close`),title:z(`dialog.close`),onClick:()=>ee.current.close(),children:`×`})]}),(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.detail.titleLabel}),(0,V.jsx)(`input`,{ref:C(`title`),className:tn,spellCheck:!1,value:s,onChange:e=>c(e.target.value.replace(/[\r\n]+/g,` `)),onKeyDown:e=>{e.key===`Enter`&&!e.ctrlKey&&!e.metaKey&&(e.preventDefault(),S.current.description?.focus())}})]}),(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.detail.description,(0,V.jsx)(`span`,{className:`text-muted ${yz}`,children:$o()?z(`pages.attachHintTouch`):t.detail.attachHint}),b&&(0,V.jsx)(`span`,{className:`text-accent`,children:`…`})]}),(0,V.jsx)(`textarea`,{ref:C(`description`),className:`${tn} ${On} ${bz}`,rows:8,spellCheck:!1,placeholder:t.detail.noDescription,value:l,onChange:e=>u(e.target.value)})]}),!i&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsxs)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted flex items-baseline gap-2.5`,children:[t.detail.statusLabel,(0,V.jsx)(`span`,{className:`keys-only text-muted tracking-[0] normal-case`,children:`←/→`})]}),(0,V.jsx)(kz,{fieldRef:C(`status`),label:t.detail.statusLabel,className:`flex flex-wrap gap-1.5`,onKeyDown:I(`x`,e=>f(F(Az,d,e))),children:Az.map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===d,className:An(e===d),onClick:()=>{f(e),S.current.status?.focus()},children:L(e)},e))})]}),o?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.detail.engine,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`←/→`})]}),(0,V.jsx)(kz,{fieldRef:C(`engine`),label:t.detail.engine,className:kn,onKeyDown:I(`x`,t=>m(F(e.engines.map(e=>e.id),p,t)),k),children:e.engines.map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e.id===p,className:An(e.id===p),onClick:()=>{m(e.id),S.current.engine?.focus()},children:e.name},e.id))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.detail.workspace,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`↑/↓`})]}),(0,V.jsx)(kz,{fieldRef:C(`workspace`),label:t.detail.workspace,className:xz,onKeyDown:I(`y`,e=>_(F(qR,h,e)),k),children:qR.map(e=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===h,className:`touch:py-1.5 ${Sz(e===h)}`,onClick:()=>{_(e),S.current.workspace?.focus()},children:[e===h?`▸ `:` `,t.detail.placement[e]]},e))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.detail.jumpLabel,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`←/→`})]}),(0,V.jsx)(kz,{fieldRef:C(`jump`),label:t.detail.jumpLabel,className:kn,onKeyDown:I(`x`,()=>y(!v),k),children:[!1,!0].map(e=>(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":e===v,className:An(e===v),onClick:()=>{y(e),S.current.jump?.focus()},children:e?t.detail.jump.follow:t.detail.jump.stay},String(e)))})]}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Cz}`,children:(0,V.jsx)(kT,{text:ns(i?t.detail.createLegend:t.detail.startLegend)})}),(0,V.jsxs)(`div`,{className:nn,children:[i&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:A,children:z(`pages.storySave`)}),(0,V.jsx)(`button`,{type:`button`,className:Pe(),onClick:k,children:z(i?`pages.storySaveStart`:`pages.storyStart`)})]})]}):a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.detail.sessionLabel}),(0,V.jsxs)(`div`,{className:`${kn} ${Dz}`,children:[(0,V.jsx)(`button`,{ref:C(`open`),type:`button`,className:An(!0),onClick:()=>D({kind:`open`,taskId:a,...T()}),children:t.detail.openAction}),(0,V.jsx)(`button`,{ref:C(`unlink`),type:`button`,className:An(),onClick:()=>D({kind:`unlink`,...T()}),children:t.detail.unlinkAction})]})]}),(0,V.jsx)(jz,{model:e.model,taskId:a}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Cz}`,children:(0,V.jsx)(kT,{text:ns(t.detail.openLegend)})})]}):(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Cz}`,children:(0,V.jsx)(kT,{text:ns(t.detail.doneNote)})})]})]})})}var Nz={"waiting-on-you":`text-error`,landing:`text-success`,"ready-for-review":`text-ink`,working:`text-accent`};function Pz(e){let[t,n]=(0,g.useState)(()=>{let t=Bs(e,`engines.list`);return t?xs(t.engines):[]});return(0,g.useEffect)(()=>{Hs(e,`engines.list`).then(e=>n(xs(e.engines))).catch(()=>n([]))},[e]),{engines:t,defaultEngine:Ss(t)}}function Fz(e,t){let n=OL(e),r=n.join(`
124
+ `),[i,a]=(0,g.useState)(()=>Bs(e,`kanban.boards`)??null);return(0,g.useEffect)(()=>{let t=!0,r=e.client,i=e=>r.request(e).then(e=>e.repos).catch(()=>[]);return Promise.all([i(`repos.list`),i(`issue.repos`)]).then(([e,t])=>DL(e,n,t)).then(e=>Promise.all(e.map(e=>r.request(`issue.list`,{repo:e}).catch(t=>({repoRoot:e,nextId:1,issues:[],readError:wL(t)}))))).then(n=>{let r=Vs(e,`kanban.boards`,void 0,[...n].sort((e,t)=>e.repoRoot.localeCompare(t.repoRoot)));t&&a(r)}),()=>{t=!1}},[e,t,r]),i}function Iz(e){let{issue:t}=e,n=t.body.trim();return(0,V.jsxs)(`div`,{"data-issue":t.id,className:dz({selected:e.selected,attention:e.badge?.tone===`text-error`}),onClick:()=>e.selected?e.onOpen():e.onSelect(),onContextMenu:t=>{t.preventDefault(),e.onMenu(t.clientX,t.clientY)},children:[(0,V.jsxs)(`div`,{className:fz,children:[(0,V.jsx)(`span`,{className:pz(e.column===`done`),children:t.title}),(0,V.jsxs)(`span`,{className:`mono text-muted`,children:[`#`,t.id]})]}),(0,V.jsx)(`div`,{className:`text-muted ${mz}`,children:n}),(0,V.jsxs)(`div`,{className:`mono text-muted ${hz}`,children:[(0,V.jsx)(`span`,{children:t.created}),e.badge&&(0,V.jsx)(`span`,{className:e.badge.tone,children:e.badge.label})]})]})}var Lz=5e3,Rz=760;function zz({model:e}){let{kanban:t,group:n,common:r}=xL(),[i,a]=AL(Lz),o=Fz(e,i),{engines:s,defaultEngine:c}=Pz(e),l=v(e.tasks),u=kL(e),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),h=NL(),[_,y]=(0,g.useState)(!1);(0,g.useEffect)(()=>{let e=h.current;if(!e)return;let t=new ResizeObserver(()=>y(e.clientWidth<Rz));return t.observe(e),()=>t.disconnect()},[h]);let b=o??[],x=u?b.find(e=>e.repoRoot.replace(/^\/private\//,`/`)===u.replace(/^\/private\//,`/`)):void 0,S=Math.max(0,b.findIndex(e=>e.repoRoot===(d??x?.repoRoot))),C=b[S],w=b.map(e=>e.repoRoot),T=b.filter(e=>e.readError).map(e=>`${e.repoRoot}\0${e.readError}`).join(`
125
+ `);(0,g.useEffect)(()=>{for(let e of b)e.readError&&G(SL(t.readFailedToast,{repo:EL(e.repoRoot,w),error:e.readError}),`error`)},[T]);let E=l?.tasks??[],D=new Set(E.map(e=>e.id)),O=e=>E.find(t=>t.id===e)?.group,{columns:k,attentionCount:A}=IR(C?RR(C.issues,D.size===0?void 0:e=>D.has(e)):[],e=>O(e)===`waiting-on-you`),j={backlog:t.column.backlog,in_progress:t.column.inProgress,parked:t.column.parked,done:t.column.done},ee=(e,t)=>{let r=e.taskId&&(t===`in_progress`||t===`parked`)?O(e.taskId):void 0,i=r===`waiting-on-you`?n.waitingOnYou:r===`landing`?n.landing:r===`ready-for-review`?n.readyForReview:r===`working`?n.working:null;return r&&i?{label:i,tone:Nz[r]??`text-muted`}:null},M=async(t,n,r,i)=>{try{return await e.client.request(t,{repo:C?.repoRoot,...n})}catch(e){return G(SL(r,{id:String(i),error:wL(e)}),`error`),null}finally{a()}},N=(e,n)=>M(`issue.setStatus`,{id:e.id,status:n},t.statusFailed,e.id),P=t=>{ln.set(null),e.select(t)},F=async(n,r,i)=>{try{let a=await JR(e.client,{repo:n,issue:r,engine:i.engine,placement:i.placement});for(let e of a.warnings)G(SL(e.kind===`link`?t.linkFailed:t.statusFailed,{id:String(r.id),error:e.error}),`error`);i.jump?(ln.set(null),e.selectWhenListed(a.taskId),a.tabId&&await e.refreshTabsNow().then(()=>e.select(a.taskId,a.tabId))):G(SL(t.detail.startedBackground,{title:`#${r.id} ${r.title}`}))}catch(e){G(K(e),`error`)}finally{a()}},I=async(e,n)=>{if(!C||n.kind===`create`)return;let r={};n.title!==e.title&&(r.title=n.title),n.body!==e.body&&(r.body=n.body),(r.title!==void 0||r.body!==void 0)&&await M(`issue.update`,{id:e.id,...r},t.updateFailed,e.id),n.status!==e.status&&await N(e,n.status),n.kind===`open`?P(n.taskId):n.kind===`unlink`?await M(`issue.update`,{id:e.id,task:`none`},t.unlinkFailed,e.id):n.kind===`start`&&await F(C.repoRoot,{...e,...r},n)},te=t=>{C&&(m(t.id),W.set((0,V.jsx)(Mz,{model:e,issue:t,mode:`detail`,engines:s,defaultEngine:c,onOutcome:e=>void I(t,e)})))},L=()=>{if(!C)return;let n=C.repoRoot,r={id:C.nextId,title:``,status:`open`,created:new Date().toISOString().slice(0,10),body:``};W.set((0,V.jsx)(Mz,{model:e,issue:r,mode:`create`,engines:s,defaultEngine:c,onOutcome:i=>{i.kind===`create`&&(async()=>{try{let t=await e.client.request(`issue.create`,{repo:n,title:i.title,body:i.body});if(a(),!i.start)return;let o=t.issues.find(e=>e.id===r.id)??t.issues.reduce((e,t)=>e&&e.id>t.id?e:t,null);o&&await F(n,o,i.start)}catch(e){G(SL(t.createFailed,{error:wL(e)}),`error`)}})()}}))},ne=()=>{let n=C?.issues.find(e=>e.id===p);if(!C||!n)return;let i=C.repoRoot;W.set((0,V.jsx)(ur,{title:SL(t.confirmDelete.title,{id:String(n.id)}),body:SL(t.confirmDelete.body,{title:n.title}),confirmLabel:r.confirm,onConfirm:async()=>{try{await e.client.request(`issue.delete`,{repo:i,id:n.id}),m(null)}catch(e){G(SL(t.deleteFailed,{id:String(n.id),error:wL(e)}),`error`)}finally{a()}}}))},re=e=>{b.length!==0&&(f(b[(S+e+b.length)%b.length]?.repoRoot??null),m(null))},ie=e=>{let t=PR(k,p,e);t!=null&&m(t)},R=e=>k.some(e=>e.issues.length>0)?ie(e):re(e===`left`?-1:1);ML(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`r`:return a(),!0;case`Tab`:return re(e.shiftKey?-1:1),!0;case`ArrowUp`:return ie(`up`),!0;case`ArrowDown`:return ie(`down`),!0;case`ArrowRight`:case`l`:return R(`right`),!0;case`ArrowLeft`:case`h`:return R(`left`),!0;case`Enter`:{let e=C?.issues.find(e=>e.id===p);return e&&te(e),!0}case`n`:return L(),!0;case`d`:return ne(),!0;default:return!1}});let ae=(0,g.useRef)(null);(0,g.useEffect)(()=>{ae.current?.querySelector(`[data-issue="${p}"]`)?.scrollIntoView({block:`nearest`})},[p]);let oe=(e,n,r)=>{m(e.id),on.set({x:n,y:r,items:Az.filter(t=>t!==e.status).map(n=>({label:SL(t.menu.setStatus,{status:t.detail.status[n]}),run:()=>void N(e,n)}))})},se=k.find(e=>e.issues.some(e=>e.id===p))??k.find(e=>e.issues.length>0)??k[0],ce=(e,n)=>(0,V.jsxs)(`section`,{className:sz(!n),children:[n&&(0,V.jsxs)(`h2`,{className:cz(e.key),children:[(0,V.jsxs)(`span`,{children:[j[e.key],` (`,e.issues.length+e.hiddenCount,`)`]}),e.key===`in_progress`&&A>0&&(0,V.jsx)(`span`,{className:`text-warning`,children:SL(t.attention,{count:String(A)})})]}),(0,V.jsxs)(`div`,{className:lz,children:[e.issues.map(t=>(0,V.jsx)(Iz,{issue:t,column:e.key,selected:t.id===p,badge:ee(t,e.key),onSelect:()=>m(t.id),onOpen:()=>te(t),onMenu:(e,n)=>oe(t,e,n)},t.id)),e.issues.length===0&&e.hiddenCount===0&&(0,V.jsx)(`p`,{className:`mono text-muted ${uz}`,children:t.columnEmpty}),e.hiddenCount>0&&(0,V.jsx)(`p`,{className:`mono text-muted ${uz}`,children:SL(t.more,{count:String(e.hiddenCount)})})]})]},e.key);return(0,V.jsxs)(`div`,{className:`${vM} ${ZR}`,tabIndex:0,ref:h,children:[(0,V.jsxs)(`div`,{className:`kb-top`,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(`span`,{className:`mono keys-only text-muted`,children:t.hint}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.kanban}`,disabled:!C,onClick:L,children:z(`pages.new`)}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.kanban}`,disabled:!C?.issues.some(e=>e.id===p),onClick:ne,children:z(`pages.delete`)})]})]}),o===null?(0,V.jsx)(`p`,{className:`text-muted`,children:t.loading}):C?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:QR,children:[(0,V.jsxs)(`button`,{type:`button`,className:$R,onClick:()=>re(1),children:[EL(C.repoRoot,w),b.length>1&&(0,V.jsx)(`span`,{className:`text-muted`,children:` ${S+1}/${b.length}`})]}),!_&&(0,V.jsx)(`span`,{className:`mono text-muted ${ez}`,children:C.repoRoot}),C.issues.length===0&&!C.readError&&(0,V.jsx)(`span`,{className:`text-muted ${tz}`,children:t.empty})]}),C.readError?(0,V.jsx)(`p`,{className:`text-error`,children:SL(t.readFailed,{error:C.readError})}):_&&se?(0,V.jsxs)(`div`,{className:rz,ref:ae,children:[(0,V.jsx)(`div`,{className:`mono ${iz}`,children:k.map(e=>(0,V.jsxs)(`button`,{type:`button`,className:az(e.key===se.key),onClick:()=>{let t=e.issues[0];t&&m(t.id)},children:[j[e.key],` (`,e.issues.length+e.hiddenCount,`)`]},e.key))}),ce(se,!1)]}):(0,V.jsx)(`div`,{className:nz,ref:ae,children:k.map(e=>ce(e,!0))})]}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.noRepos})]})}var Bz={title:`Mods`,empty:`No mod is drawing anything.`,emptyHint:`A plugin with a [mod] entry draws its panes here, in the TUI and the web alike.`,keys:`↑↓/tab move · enter press · esc back`,pressFailed:`{plugin}: the press did not reach the mod ({reason})`},Vz={title:`Mods`,empty:`当前没有 mod 在绘制内容。`,emptyHint:`声明了 [mod] 的插件会在这里绘制面板,TUI 和 web 显示的是同一份。`,keys:`↑↓/tab 移动 · enter 按下 · esc 返回`,pressFailed:`{plugin}:按键没有送达 mod({reason})`},Hz={info:`text-info`,success:`text-success`,warning:`text-warning`,error:`text-error`,muted:`text-muted`},Uz=`flex flex-col gap-3`,Wz=`[&_p]:mx-0 [&_p]:my-1`,Gz=`rounded-md border-hairline border-line px-3 pt-2 pb-3 font-mono`,Kz=`mb-2 text-meta leading-[inherit] text-ink`,qz=(e,t)=>`flex min-w-0 items-start ${e?`[&>form]:flex-[1_1_12em] [&>form]:self-center`:``} ${t?`rounded-sm border-hairline border-line`:``}`,Jz=(e,t)=>`whitespace-pre-wrap wrap-anywhere ${e?Hz[e]:`text-ink`} ${t?`font-bold`:``}`,Yz=(e,t)=>`cursor-pointer rounded-sm border-hairline border-current px-2.5 py-0.5 [font:inherit] font-bold! ${Hz[e]} ${t?`bg-[color-mix(in_srgb,currentcolor_18%,transparent)]`:`bg-transparent [&:hover]:bg-[color-mix(in_srgb,currentcolor_18%,transparent)]`}`,Xz=`flex min-w-0 max-w-[40em] self-stretch`,Zz=`w-full font-mono`,Qz=[0,6,12,20];function $z(e){return`mod-${e.kind}:${e.plugin}/${e.pane}/${e.key}`}function eB(e){let[t,n]=(0,g.useState)(e.value??``);return(0,V.jsx)(`form`,{className:Xz,onSubmit:r=>{r.preventDefault(),e.onSubmit(t),n(e.value??``)},children:(0,V.jsx)(`input`,{id:e.id,className:`${tn} ${Zz}`,spellCheck:!1,value:t,placeholder:e.placeholder,onFocus:e.onFocus,onChange:e=>n(e.target.value)})})}function tB(e){let{node:t}=e;if(t.type===`text`)return(0,V.jsx)(`span`,{className:Jz(t.tone,t.bold===!0),children:t.text});if(t.type===`input`){let n={kind:`input`,plugin:e.pane.plugin,pane:e.pane.id,key:t.key};return(0,V.jsx)(eB,{id:$z(n),placeholder:t.placeholder,value:t.value,onFocus:()=>e.onFocus(n),onSubmit:t=>e.onSubmit(n,t)},t.value??``)}if(t.type===`button`){let n={kind:`button`,plugin:e.pane.plugin,pane:e.pane.id,key:t.key};return(0,V.jsx)(`button`,{type:`button`,id:$z(n),className:Yz(t.tone??`info`,Ei(n,e.cursor)),onFocus:()=>e.onFocus(n),onClick:()=>e.onPress(n),children:t.label})}return(0,V.jsx)(`div`,{className:qz(t.direction===`row`,t.border===!0),style:{flexDirection:t.direction??`column`,gap:Qz[t.gap??0],padding:Qz[t.padding??0]},children:t.children.map((t,n)=>(0,V.jsx)(tB,{...e,node:t},n))})}function nB({model:e}){let t=B()===`zh`?Vz:Bz,n=v(e.mods),r=Ti(n),[i,a]=(0,g.useState)(null),o=Di(r,i),s=NL(),c=(0,g.useRef)(!1),l=(t,n,r={})=>{a(t),!c.current&&(c.current=!0,e.client.request(n,{plugin:t.plugin,pane:t.pane,key:t.key,...r}).catch(e=>G(e instanceof Error?e.message:String(e),`error`)).finally(()=>{c.current=!1}))},u=e=>l(e,`mod.press`),d=(e,t)=>l(e,`mod.submit`,{value:t}),f=e=>{let t=Oi(r,o,e);a(t),t&&document.getElementById($z(t))?.focus()};return ML(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`ArrowDown`:return f(1),!0;case`ArrowUp`:return f(-1),!0;case`Enter`:return e.target instanceof HTMLButtonElement?!1:(o?.kind===`button`&&u(o),!0);default:return!1}}),(0,V.jsxs)(`div`,{className:`${yM} ${Uz}`,tabIndex:0,ref:s,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsx)(`span`,{className:`keys-only touch:empty:hidden! text-muted ${SM(!1)}`,children:t.keys})]}),n.length===0?(0,V.jsxs)(`div`,{className:Wz,children:[(0,V.jsx)(`p`,{children:t.empty}),(0,V.jsx)(`p`,{className:`text-muted`,children:t.emptyHint})]}):n.map(e=>(0,V.jsxs)(`section`,{className:Gz,children:[(0,V.jsxs)(`header`,{className:Kz,children:[e.title,` `,(0,V.jsx)(`span`,{className:`text-muted`,children:e.plugin})]}),(0,V.jsx)(tB,{node:e.tree,pane:e,cursor:o,onPress:u,onSubmit:d,onFocus:a})]},`${e.plugin}/${e.id}`))]})}function rB(e){return e===`dispatch_failed`||e===`skipped_unavailable`||e===`script_failed`}function iB(e,t){return e.response?`responded`:e.status!==`dispatched`&&e.status!==`revived`?null:e.deliveryStatus===`missing`?`missing`:e.deliveryStatus===`awaiting`?`awaiting`:t-Date.parse(e.at)>72e5?`missing`:`awaiting`}var aB=6e4,oB=3294,sB=new Map([[`JAN`,1],[`FEB`,2],[`MAR`,3],[`APR`,4],[`MAY`,5],[`JUN`,6],[`JUL`,7],[`AUG`,8],[`SEP`,9],[`OCT`,10],[`NOV`,11],[`DEC`,12]]),cB=new Map([[`SUN`,0],[`MON`,1],[`TUE`,2],[`WED`,3],[`THU`,4],[`FRI`,5],[`SAT`,6]]),lB=256;function uB(e,t,n){let r=e.toUpperCase(),i=t?.get(r);if(i!==void 0)return i;if(!/^\d+$/.test(r))throw Error(`invalid cron ${n}: ${e}`);return Number(r)}function dB(e){let t=new Set;for(let n of e.value.split(`,`)){if(n.length===0)throw Error(`invalid cron ${e.field}: ${e.value}`);let[r,i,...a]=n.split(`/`);if(a.length>0||r===void 0)throw Error(`invalid cron ${e.field}: ${n}`);let o=1;if(i!==void 0&&(!/^\d+$/.test(i)||(o=Number(i),o<1)))throw Error(`invalid cron ${e.field} step: ${n}`);let s,c;if(r===`*`)s=e.min,c=e.max;else if(r.includes(`-`)){let[t,i,...a]=r.split(`-`);if(a.length>0||t===void 0||i===void 0)throw Error(`invalid cron ${e.field} range: ${n}`);s=uB(t,e.names,e.field),c=uB(i,e.names,e.field)}else s=uB(r,e.names,e.field),c=i===void 0?s:e.max;if(s<e.min||c>e.max||s>c)throw Error(`cron ${e.field} out of range: ${n}`);for(let n=s;n<=c;n+=o)t.add(e.normalize?e.normalize(n):n)}return t}function fB(e){if(e.length>lB)throw Error(`cron expression is too long`);let t=e.trim().split(/\s+/).filter(Boolean);if(t.length!==5)throw Error(`cron expression needs 5 fields (minute hour day month weekday), got ${t.length}`);let[n,r,i,a,o]=t;return{minutes:dB({value:n,min:0,max:59,field:`minute`}),hours:dB({value:r,min:0,max:23,field:`hour`}),daysOfMonth:dB({value:i,min:1,max:31,field:`day-of-month`}),months:dB({value:a,min:1,max:12,field:`month`,names:sB}),daysOfWeek:dB({value:o,min:0,max:7,field:`weekday`,names:cB,normalize:e=>e%7}),dayOfMonthRestricted:!i.startsWith(`*`),dayOfWeekRestricted:!o.startsWith(`*`)}}function pB(e){try{return fB(e),!0}catch{return!1}}function mB(e,t,n){return new Date(e.year,e.month-1,e.day,t,n,0,0).getTime()}function hB(e){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}}function gB(e,t){return hB(new Date(e.year,e.month-1,e.day+t,12,0,0,0).getTime())}function _B(e,t){if(!e.months.has(t.month))return!1;let n=e.daysOfMonth.has(t.day),r=e.daysOfWeek.has(new Date(t.year,t.month-1,t.day).getDay());return e.dayOfMonthRestricted&&e.dayOfWeekRestricted?n||r:n&&r}function vB(e){return e-e%aB}function yB(e,t){return[...e].sort((e,n)=>(e-n)*t)}function bB(e,t){let n=fB(e),r=yB(n.hours,1),i=yB(n.minutes,1),a=new Date(vB(t)+aB),o=hB(a.getTime()),s=a.getHours(),c=a.getMinutes();for(let e=0;e<oB;e++){if(_B(n,o)){for(let e of r)if(!(e<s))for(let n of i){if(e===s&&n<c)continue;let r=mB(o,e,n);if(r>t)return r}}o=gB(o,1),s=0,c=0}throw Error(`cron expression never matches: ${e}`)}var xB=[`minute`,`hour`,`dayOfMonth`,`month`,`dayOfWeek`];function SB(e){let t=e.trim().split(/\s+/).filter(Boolean);return xB.map((e,n)=>t[n]??`*`)}function CB(e){return xB.map((t,n)=>e[n]??`*`).join(` `)}var wB=[`*`,`*/5`,`*/10`,`*/15`,`*/30`,...AB(0,59)],TB=[`*`,`*/2`,`*/3`,`*/4`,`*/6`,`*/12`,...AB(0,23)],EB=[`*`,...AB(1,31)],DB=[`*`,`JAN`,`FEB`,`MAR`,`APR`,`MAY`,`JUN`,`JUL`,`AUG`,`SEP`,`OCT`,`NOV`,`DEC`],OB=[`*`,`MON-FRI`,`SAT,SUN`,`MON`,`TUE`,`WED`,`THU`,`FRI`,`SAT`,`SUN`],kB=[`MON`,`TUE`,`WED`,`THU`,`FRI`,`SAT`,`SUN`];function AB(e,t){let n=[];for(let r=e;r<=t;r++)n.push(String(r));return n}var jB={minute:wB,hour:TB,dayOfMonth:EB,month:DB,dayOfWeek:OB};function MB(e,t,n){let r=jB[e],i=r.indexOf(t.trim().toUpperCase());return i<0?(n>0?r[0]:r[r.length-1])??t:r[(i+n+r.length)%r.length]??t}function NB(e,t){return Math.min(Math.max(e+t,0),xB.length-1)}function PB(e,t,n){let r=SB(e);return t<0||t>=xB.length||(r[t]=n),CB(r)}function FB(e,t){let[n,r,i,a,o]=SB(e);if(a!==`*`||i!==`*`||n===void 0||r===void 0||o===void 0)return null;let s=IB(n,r,t);if(!s)return null;let{at:c,bare:l}=s;if(o===`*`)return l?c:t(`automations.schedule.everyDay`,{at:c});if(o===`MON-FRI`)return t(`automations.schedule.weekdays`,{at:c});if(o===`SAT,SUN`)return t(`automations.schedule.weekends`,{at:c});let u=kB.find(e=>e===o.toUpperCase());return u?t(`automations.schedule.onWeekday`,{weekday:t(`automations.schedule.dow.${u}`),at:c}):null}function IB(e,t,n){return t===`*`?e===`*`?{at:n(`automations.schedule.everyMinute`),bare:!0}:e.startsWith(`*/`)?{at:n(`automations.schedule.everyMinutes`,{n:e.slice(2)}),bare:!0}:/^\d+$/.test(e)?{at:n(`automations.schedule.hourlyAt`,{minute:e.padStart(2,`0`)}),bare:!1}:null:t.startsWith(`*/`)&&e===`0`?{at:n(`automations.schedule.everyHours`,{n:t.slice(2)}),bare:!0}:/^\d+$/.test(t)&&/^\d+$/.test(e)?{at:n(`automations.schedule.atClock`,{time:`${t.padStart(2,`0`)}:${e.padStart(2,`0`)}`}),bare:!1}:null}function LB(e,t,n,r){let i=e.trim();if(!pB(i))return{kind:`invalid`};let a;try{a=bB(i,t)}catch{return{kind:`never`}}return{kind:`ok`,nextRunMs:a,relative:RB(a-t,n),absolute:zB(a,t,n,r)}}function RB(e,t){let{minutes:n,hours:r,days:i}=yR(e);return n<60?t(`automations.when.inMinutes`,{n:Math.max(1,n)}):r<24?t(`automations.when.inHours`,{n:r}):t(`automations.when.inDays`,{n:i})}function zB(e,t,n,r){let i=new Date(e),a=`${String(i.getHours()).padStart(2,`0`)}:${String(i.getMinutes()).padStart(2,`0`)}`,o=new Date(t);if(i.getFullYear()===o.getFullYear()&&i.getMonth()===o.getMonth()&&i.getDate()===o.getDate())return a;let s=e-t<5184e5,c=i.toLocaleDateString(r,s?{weekday:`short`}:{weekday:`short`,month:`short`,day:`numeric`});return s?`${c} ${a}`:n(`automations.when.dateTime`,{date:c,time:a})}var BB={name:``,repo:``,prompt:``,schedule:`0 9 * * MON-FRI`};function VB(e){return e.name.trim().length>0&&(e.repo===null||e.repo.trim().length>0)&&e.prompt.trim().length>0&&(!e.target||e.target.taskId.trim().length>0&&/^tab-[\w-]+$/.test(e.target.tabId))&&pB(e.schedule.trim())}function HB(e){return e.name.trim().length===0?`name`:e.repo!==null&&e.repo.trim().length===0?`repo`:e.target&&!e.target.taskId.trim()?`target`:e.target&&!/^tab-[\w-]+$/.test(e.target.tabId)?`targetTab`:e.prompt.trim().length===0?`prompt`:pB(e.schedule.trim())?null:`schedule`}var UB=`flex flex-col overflow-hidden @container`,WB=`mt-2.5 grid min-h-0 flex-1 grid-cols-[minmax(260px,2fr)_minmax(0,3fr)] gap-4 rt-narrow:flex rt-narrow:flex-col rt-narrow:overflow-y-auto`,GB=`flex min-h-0 flex-col gap-3 overflow-y-auto scrollbar-none rt-narrow:shrink-0 rt-narrow:overflow-visible`,KB=`flex gap-1.5 px-2 pt-0 pb-1`,qB=e=>`flex min-w-0 cursor-pointer flex-col gap-0.5 rounded-sm px-2 py-1.5 ${e?`bg-menu`:`[&:hover]:bg-hover`}`,JB=`flex min-w-0 items-baseline gap-2.5`,YB=e=>`min-w-0 flex-1 truncate font-bold ${e?`text-muted`:``}`,XB=`whitespace-nowrap text-meta`,ZB=`truncate text-meta`,QB=`flex min-h-0 flex-col gap-1.5 overflow-y-auto py-0 pr-0 pl-4 [border-left:var(--hairline)_solid_var(--line)] [&_h2]:m-0 [&_p]:m-0 [&>*]:shrink-0 [&>h2]:mt-2.5 rt-narrow:shrink-0 rt-narrow:overflow-visible rt-narrow:pt-3 rt-narrow:pl-0 rt-narrow:[border-left:none] rt-narrow:[border-top:var(--hairline)_solid_var(--line)]`,$B=`flex flex-wrap items-baseline justify-between gap-3`,eV=`font-sans text-display font-bold normal-nums wrap-anywhere`,tV=`mx-0 mt-1 mb-0 grid grid-cols-[max-content_minmax(0,1fr)] items-baseline gap-x-3.5 gap-y-1 [&_dd]:m-0 [&_dd]:wrap-anywhere [&_dd_.mono]:whitespace-pre`,nV=`max-h-[12lh] overflow-y-auto rounded-sm bg-inset px-2.5 py-2 whitespace-pre-wrap wrap-anywhere`,rV=`min-w-0 text-meta leading-[inherit]`,iV=`flex w-full min-w-0 gap-2 text-inherit`,aV=iV,oV=`${iV} cursor-pointer border-none bg-transparent p-0 text-left font-[inherit] [&:hover]:underline`,sV=`min-w-0 flex-1 truncate`,cV=`[&+&]:mt-1.5`,lV=e=>`whitespace-pre-wrap wrap-anywhere text-meta ${e?``:`leading-[inherit]`}`,uV=`text-meta`,dV=`flex gap-4.5`,fV=e=>`flex min-w-[5ch] flex-col gap-0.5 rounded-sm border-hairline px-1.5 py-1 text-left font-mono text-body normal-nums [&>span]:text-meta [&>span]:text-subtle ${e?`border-accent font-bold text-accent`:`border-transparent font-normal`}`,pV=`hidden gap-2 px-1 pt-0.5 pb-1.5 touch:flex`,mV=`h-8 w-11 touch-manipulation rounded-sm border-hairline border-line bg-inset font-mono text-display font-normal normal-nums text-ink`;function hV(e){let{auto:t,common:n}=xL(),r=CL(),i=B()===`zh`?`zh-CN`:`en-US`,[a,o]=(0,g.useState)(()=>({...BB,repo:e.repos.find(t=>e.defaultRepo&&TL(t)===TL(e.defaultRepo))??e.repos[0]??null})),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(null),d=(0,g.useRef)({}),f=e=>t=>{d.current[e]=t};(0,g.useEffect)(()=>d.current.name?.focus(),[]);let p=e=>{o(t=>({...t,...e})),u(null)};(0,g.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),Sn())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let m=()=>{if(VB(a)){Sn(),e.onSubmit({name:a.name.trim(),repo:a.repo===null?null:a.repo.trim(),prompt:a.prompt.trim(),schedule:a.schedule.trim(),...a.target?{target:a.target}:{}});return}let n=HB(a);n&&(d.current[n]?.focus(),u(Reflect.get(t.missing,n)))},h=a.repo===null?[]:e.tasks.filter(e=>TL(e.repo)===TL(a.repo??``)),_=a.target?h.findIndex(e=>e.id===a.target?.taskId)+1:0,v=e=>{let t=(_+e+h.length+1)%(h.length+1),n=h[t-1];p({target:n?{kind:`existing-tab`,taskId:n.id,tabId:`tab-1`}:void 0})},y=[null,...e.repos],b=e=>{let t=Math.min(Math.max(y.indexOf(a.repo)+e,0),y.length-1),n=y[t];n!==void 0&&p({repo:n,target:void 0})},x=e=>t=>{(t.key===`ArrowUp`||t.key===`ArrowDown`)&&(t.preventDefault(),e(t.key===`ArrowDown`?1:-1))},S=e=>t=>{t.key===`Enter`&&(t.preventDefault(),d.current[e]?.focus())},C=SB(a.schedule),w=e=>{let t=xB[s];t&&p({schedule:PB(a.schedule,s,MB(t,C[s]??`*`,e))})},T=e=>{if(!(e.ctrlKey||e.metaKey||e.altKey)){if(e.key===`ArrowLeft`||e.key===`h`)c(NB(s,-1));else if(e.key===`ArrowRight`||e.key===`l`)c(NB(s,1));else if(e.key===`ArrowUp`||e.key===`ArrowDown`)w(e.key===`ArrowUp`?1:-1);else return;e.preventDefault()}},E=LB(a.schedule,Date.now(),r,i),D=FB(a.schedule,r);return(0,V.jsx)(`div`,{className:Mn,onMouseDown:e=>e.target===e.currentTarget&&Sn(),children:(0,V.jsxs)(`dialog`,{open:!0,className:`${Nn(!0)} ${gz}`,"aria-label":t.newTitle,children:[(0,V.jsx)(`h1`,{className:`${U} text-muted`,children:t.newTitle}),(0,V.jsxs)(`div`,{className:Ln,children:[(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.fieldName}),(0,V.jsx)(`input`,{ref:f(`name`),className:tn,spellCheck:!1,placeholder:t.namePlaceholder,value:a.name,onChange:e=>p({name:e.target.value}),onKeyDown:S(`repo`)})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.fieldRepo,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`↑/↓`})]}),(0,V.jsx)(kz,{fieldRef:f(`repo`),kind:`list`,label:t.fieldRepo,className:xz,onKeyDown:x(b),children:y.map(t=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,"aria-selected":t===a.repo,className:`touch:py-1.5 ${Sz(t===a.repo)}`,onClick:()=>{p({repo:t,target:void 0}),d.current.repo?.focus()},children:[t===a.repo?`▸ `:` `,t===null?z(`rail.noProject`):EL(t,e.repos)]},t??``))})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.fieldTarget,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`↑/↓`})]}),(0,V.jsx)(kz,{fieldRef:f(`target`),kind:`list`,label:t.fieldTarget,onKeyDown:x(v),onClick:()=>v(1),children:a.target?h[_-1]?.title??a.target.taskId:t.targetFresh})]}),a.target&&(0,V.jsxs)(`label`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:t.fieldTargetTab}),(0,V.jsx)(`input`,{ref:f(`targetTab`),className:tn,spellCheck:!1,value:a.target.tabId,onChange:e=>a.target&&p({target:{...a.target,tabId:e.target.value}}),onKeyDown:S(`prompt`)})]}),(0,V.jsxs)(`label`,{className:Dn,children:[(0,V.jsx)(`span`,{className:`${U} text-muted`,children:t.fieldPrompt}),(0,V.jsx)(`input`,{ref:f(`prompt`),className:tn,spellCheck:!1,placeholder:t.promptPlaceholder,value:a.prompt,onChange:e=>p({prompt:e.target.value}),onKeyDown:S(`schedule`)})]}),(0,V.jsxs)(`div`,{className:Dn,children:[(0,V.jsxs)(`span`,{className:`${U} text-muted ${vz}`,children:[t.fieldSchedule,(0,V.jsx)(`span`,{className:`keys-only text-muted ${yz}`,children:`←/→ ↑/↓`})]}),(0,V.jsx)(kz,{fieldRef:f(`schedule`),kind:`cells`,label:t.fieldSchedule,className:dV,onKeyDown:T,children:xB.map((e,n)=>(0,V.jsxs)(`button`,{type:`button`,tabIndex:-1,className:fV(n===s),onClick:()=>{c(n),d.current.schedule?.focus()},children:[C[n]??`*`,(0,V.jsx)(`span`,{children:t.cronField[e]})]},e))}),(0,V.jsx)(`div`,{className:pV,children:[-1,1].map(e=>{let n=t.cronField[xB[s]??`minute`]??``;return(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,className:mV,"aria-label":z(e<0?`pages.cronDown`:`pages.cronUp`,{field:n}),onClick:()=>{w(e),d.current.schedule?.focus()},children:e<0?`−`:`+`},e)})}),E.kind===`ok`?(0,V.jsxs)(`p`,{className:`mono text-success`,children:[D?`${D}, `:``,E.relative,`, `,E.absolute]}):(0,V.jsx)(`p`,{className:`mono text-error`,children:E.kind===`never`?t.cronNever:t.cronInvalid})]}),l&&(0,V.jsxs)(`p`,{className:`text-error`,children:[`※ `,l]}),(0,V.jsx)(`p`,{className:`touch:empty:hidden! text-muted ${Cz}`,children:(0,V.jsx)(kT,{text:ns(t.composerLegend)})}),(0,V.jsxs)(`div`,{className:nn,children:[(0,V.jsx)(`button`,{type:`button`,className:$t,onClick:Sn,children:n.cancel}),(0,V.jsx)(`button`,{ref:f(`confirm`),type:`button`,className:Pe(),onClick:m,children:n.create})]})]})]})})}var gV=[`ok`,`blocked`,`failed`,`skipped`];function _V(e){switch(e.status){case`dispatched`:case`revived`:case`ran`:return`ok`;case`skipped_blocked`:return`blocked`;case`dispatch_failed`:case`skipped_unavailable`:case`script_failed`:return`failed`;default:return`skipped`}}var vV={scheduled:`schedule`,manual:`manual`,webhook:`webhook`};function yV(e){if(e.status===`skipped_precheck`)return e.precheckResult?.durationMs??null;if(e.status===`ran`||e.status===`script_failed`)return null;let t=Date.parse(e.at),n=Date.parse(e.response?.at??``);return Number.isFinite(t)&&Number.isFinite(n)&&n>=t?n-t:null}function bV(e){if(e<1e3)return`${Math.max(0,Math.round(e))}ms`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return n%60==0?`${r}h`:`${r}h ${n%60}m`}function xV(e,t,n){return(t===null?Object.values(e).flat():e[t]??[]).filter(e=>n===null||_V(e)===n).sort((e,t)=>Date.parse(t.at)-Date.parse(e.at)||t.runNumber-e.runNumber)}function SV(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{return{prefix:e.slice(0,t).trim(),value:JSON.parse(e.slice(t,n+1))}}catch{return null}}var CV=(e,t)=>e&&typeof e==`object`?Reflect.get(e,t):void 0;function wV(e){let t=SV(e);if(!t)return{summary:e,full:e};let n=CV(t.value,`error`)??t.value,r=CV(n,`message`),i=CV(n,`code`),a=typeof r==`string`?typeof i==`string`?`${i}: ${r}`:r:null,o=t.prefix.replace(/:$/,``);return{summary:a?`${o} — ${a}`:e,full:`${t.prefix}\n${JSON.stringify(t.value,null,2)}`}}function TV(e){let t=e.trim();if(!/^[[{]/.test(t))return e;try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}}var EV={dispatched:`success`,revived:`success`,skipped_precheck:`muted`,skipped_blocked:`warning`,skipped_cancelled:`muted`,skipped_missed:`warning`,skipped_unavailable:`warning`,dispatch_failed:`error`,ran:`success`,script_failed:`error`},DV={success:`text-success`,muted:`text-muted`,warning:`text-warning`,error:`text-error`},OV={success:`✓`,error:`†`,warning:`!`,muted:`·`},kV=e=>EV[e]??`muted`;function AV(e){let{auto:t}=xL(),{runs:n,when:r}=e,i=e=>t.runStatus[e]??e,a=n.filter(e=>e.response);return(0,V.jsxs)(V.Fragment,{children:[n[0]?.precheckResult&&(0,V.jsx)(jV,{run:n[0]}),(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:t.responses}),a.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.noResponses}):a.map(e=>(0,V.jsxs)(`div`,{className:cV,children:[(0,V.jsx)(`p`,{className:`mono ${uV} ${DV[kV(e.status)]}`,children:`#${e.runNumber} ${i(e.status)}, ${r(e.response?.at)}`}),(0,V.jsx)(`p`,{className:lV(!1),children:TV(e.response?.text??``)})]},e.id))]})}function jV({run:e}){let{auto:t}=xL(),n=e.precheckResult;if(!n)return null;let r=n.timedOut?t.precheckTimedOut:SL(t.precheckExited,{code:String(n.exitCode??`?`)}),i=[{label:t.precheckStdout,text:n.stdout},{label:t.precheckStderr,text:n.stderr}].filter(e=>e.text.trim().length>0);return(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:SL(t.precheckDetail,{exit:r,duration:String(n.durationMs)})}),i.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.precheckNoOutput}):i.map(e=>(0,V.jsx)(`p`,{className:`mono ${lV(!0)}`,children:`${e.label}: ${e.text.replace(/\s+$/,``).split(`
126
126
  `).slice(-10).join(`
127
- `)}`},e.label))]})}var jV=30;function MV(e,t,n){let r=t.join(`\0`),[i,a]=(0,g.useState)(()=>Object.fromEntries(t.map(t=>[t,Bs(e,`routine.runs`,{id:t})?.runs??[]])));return(0,g.useEffect)(()=>{let n=!0;for(let r of t)Hs(e,`routine.runs`,{id:r}).then(e=>n&&a(t=>({...t,[r]:e.runs}))).catch(()=>void 0);return()=>{n=!1}},[e,r,n]),i}function NV(e){B();let{auto:t}=bL(),[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null);(0,g.useEffect)(()=>r(null),[e.followId]);let o=n===null?e.followId??``:n,s=o===``?e.routines.map(e=>e.id):[o],c=MV(e.c,s,e.tick),l=new Map(e.routines.map(e=>[e.id,e.name])),u=bV(c,o===``?null:o,i),d=e=>{if(e.status===`skipped_blocked`){let t=e.blocked?.reason;return t?xL(z(`runLog.blockedRun`),{reason:z(`runLog.blocked.${t}`)}):z(`runLog.outcome.blocked`)}return t.runStatus[e.status]??e.status},f=(e,t,n,r)=>(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":t,className:`max-w-40 truncate`,onClick:n,children:`[ ${e} ]`},r);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`runLog.title`)}),e.routines.length>1&&(0,V.jsx)(DA,{label:z(`runLog.routine`),value:o,picks:[{value:``,label:z(`runLog.allRoutines`)},...e.routines.map(e=>({value:e.id,label:e.name}))],onPick:r}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[f(z(`runLog.all`),i===null,()=>a(null),`all`),hV.map(e=>f(z(`runLog.outcome.${e}`),i===e,()=>a(e),e))]}),u.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:bV(c,o===``?null:o,null).length===0?t.noRuns:z(`runLog.empty`)}):u.slice(0,jV).map(n=>{let r=OV(n.status),i=rB(n,e.now),a=i===`awaiting`?`, ${t.responseAwaiting}`:i===`missing`?`, ${t.responseMissing}`:``,s=vV(n),c=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{children:DV[r]}),(0,V.jsx)(`span`,{children:`#${n.runNumber}`}),o===``&&(0,V.jsx)(`span`,{className:`max-w-[20ch] truncate`,children:l.get(n.automationId)??``}),(0,V.jsx)(`span`,{className:oV,children:`${d(n)}${n.tabId?`, ${n.tabId}`:``}${a}`}),(0,V.jsx)(`span`,{className:`text-subtle`,children:z(`runLog.source.${_V[n.trigger]}`)}),s!==null&&(0,V.jsx)(`span`,{className:`text-muted`,children:yV(s)}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.when(n.at)})]}),u=n.error?CV(n.error):null,f=n.taskId,p=i===`missing`?`text-warning`:EV[r];return(0,V.jsxs)(`div`,{className:`${nV} ${p}`,children:[f?(0,V.jsx)(`button`,{type:`button`,className:`mono ${aV}`,onClick:()=>e.openRun(f),children:c}):(0,V.jsx)(`span`,{className:`mono ${iV}`,children:c}),u&&(0,V.jsxs)(`details`,{className:`mono pl-[calc(2ch+16px)] [&_summary]:cursor-pointer [&_summary]:list-none [&_summary]:truncate [&_summary::-webkit-details-marker]:hidden [&[open]_summary]:whitespace-normal [&_pre]:mx-0 [&_pre]:mt-1 [&_pre]:mb-1.5 [&_pre]:max-h-[16lh] [&_pre]:overflow-auto [&_pre]:rounded-sm [&_pre]:bg-inset [&_pre]:px-2 [&_pre]:py-1.5 [&_pre]:whitespace-pre-wrap [&_pre]:wrap-anywhere [&_pre]:text-muted`,children:[(0,V.jsx)(`summary`,{children:u.summary}),(0,V.jsx)(`pre`,{children:u.full})]})]},n.id)}),u.length>jV&&(0,V.jsx)(`p`,{className:`text-muted`,children:z(`runLog.more`,{count:u.length-jV})})]})}var PV=5e3;function FV({model:e}){let{auto:t,common:n}=bL(),r=e.client,[i,a]=kL(PV),o=v(e.tasks),s=DL(e),c=OL(e),[l,u]=(0,g.useState)(()=>Bs(r,`routine.list`)??null),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),[h,_]=(0,g.useState)(null),y=ML(),b=SL(),x=B()===`zh`?`zh-CN`:`en-US`,S=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0;return Hs(r,`routine.list`).then(t=>e&&u(t)).catch(()=>e&&u(e=>e??{automations:[],keepsDaemonAlive:!1})),()=>{e=!1}},[r,i]);let C=l?.automations??[],w=l?.lastRunStatus??{},T=l?.lastFailure??{},E=e=>{let t=w[e.id];return t!==void 0&&nB(t)},D=[{key:`pages.routinesNeedYou`,rows:C.filter(E)},{key:`pages.routinesActive`,rows:C.filter(e=>e.enabled&&!E(e))},{key:`pages.routinesPaused`,rows:C.filter(e=>!e.enabled&&!E(e))}],O=D.flatMap(e=>e.rows),k=Math.max(0,O.findIndex(e=>e.id===d)),A=O[k],j=e=>f(O[e]?.id??null),ee=D[0]?.rows.length??0,M=v(un);(0,g.useEffect)(()=>{M===null||!l||(l.automations.some(e=>e.id===M)&&f(M),un.set(null))},[M,l]);let N=MV(r,A?[A.id]:[],i),P=A?N[A.id]??[]:[];(0,g.useEffect)(()=>_(null),[A?.id]);let F=(0,g.useRef)(null),[I,te]=(0,g.useState)(0),L=(0,g.useRef)(0);(0,g.useEffect)(()=>{let e=S.current,t=I!==L.current;if(L.current=I,t&&e&&F.current&&e.offsetTop>F.current.offsetTop){e.scrollIntoView({block:`start`,behavior:`smooth`});return}F.current?.querySelector(`[data-row="${k}"]`)?.scrollIntoView({block:`nearest`})},[k,I]);let ne=Date.now(),re=e=>{let n=e?Date.parse(e):NaN;if(!Number.isFinite(n))return`—`;let r=n-ne,i=r>=0,a=Math.floor(Math.abs(r)/6e4),o=Math.floor(a/60);return a<1?i?t.when.now:t.when.justNow:a<60?xL(i?t.when.inMinutes:t.when.minutesAgo,{n:a}):o<24?xL(i?t.when.inHours:t.when.hoursAgo,{n:o}):new Date(n).toLocaleDateString()},ie=e=>o?.tasks.find(t=>t.id===e)?.label??e,R=t=>{ln.set(null),e.select(t)},ae=(e,t,n)=>G(xL(e,{name:t,error:CL(n)}),`error`),oe=async()=>{if(!(!A||p)){m(A.id);try{await r.request(`routine.setEnabled`,{id:A.id,enabled:!A.enabled}),a()}catch(e){ae(A.enabled?t.disableFailed:t.enableFailed,A.name,e)}finally{m(null)}}},se=async()=>{if(!(!A||p)){m(A.id),_(xL(t.running,{name:A.name}));try{let e=await r.request(`routine.runNow`,{id:A.id});_(xL(t.ranWith,{name:A.name,status:e.status})),a()}catch(e){ae(t.runFailed,A.name,e)}finally{m(null)}}},ce=async()=>{if(p)return;let e=EL(await r.request(`repos.list`).then(e=>e.repos).catch(()=>[]),s);W.set((0,V.jsx)(mV,{repos:e,tasks:(o?.tasks??[]).filter(e=>!e.deleting).map(e=>({id:e.id,title:e.label,repo:e.repo})),defaultRepo:c,onSubmit:e=>{(async()=>{m(`new`);try{await r.request(`routine.create`,{...e.repo===null?{}:{repo:e.repo},name:e.name,prompt:e.prompt,schedule:e.schedule,...e.target?{targetTask:e.target.taskId,targetTab:e.target.tabId}:{}}),a()}catch(e){G(xL(t.createFailed,{error:CL(e)}),`error`)}finally{m(null)}})()}}))},le=()=>{if(!A||p)return;let e=A;W.set((0,V.jsx)(ur,{title:t.deleteTitle,body:xL(t.deleteBody,{name:e.name}),confirmLabel:t.deleteButton,onConfirm:async()=>{m(e.id);try{await r.request(`routine.delete`,{id:e.id}),a()}catch(n){ae(t.deleteFailed,e.name,n)}finally{m(null)}}}))};jL(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return j(Math.min(O.length-1,k+1)),!0;case`k`:case`ArrowUp`:return j(Math.max(0,k-1)),!0;case`n`:return ce(),!0;case`r`:return a(),!0;case`e`:return oe(),!0;case`s`:return se(),!0;case`d`:return le(),!0;case`Enter`:{let e=P[0]?.taskId;return e?R(e):P.length>0&&_(t.latestRunNoTask),!0}default:return!1}});let ue=A?.target,de=A?PB(A.schedule,b):null,fe=e=>e===void 0?z(`rail.noProject`):TL(e,C.flatMap(e=>e.repo??[])),pe=A?.nextRunAt?Date.parse(A.nextRunAt):NaN;return(0,V.jsxs)(`div`,{className:`${vM} ${HB}`,tabIndex:0,ref:y,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[ee>0&&(0,V.jsx)(`span`,{className:`text-error`,children:xL(t.needAttention,{count:String(ee),total:String(O.length)})}),(0,V.jsx)(`span`,{className:`text-muted`,children:l?.keepsDaemonAlive?t.holdingDaemon:t.notHolding}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.header}`,onClick:()=>void ce(),children:z(`pages.new`)})]})]}),l===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.loading}):O.length===0?(0,V.jsxs)(`div`,{className:TM,children:[(0,V.jsx)(`p`,{className:`text-muted`,children:t.empty}),(0,V.jsx)(`p`,{className:`keys-only`,children:t.emptyHint})]}):(0,V.jsxs)(`div`,{className:UB,children:[(0,V.jsx)(`div`,{className:WB,ref:F,children:D.map(e=>e.rows.length===0?null:(0,V.jsxs)(`section`,{children:[(0,V.jsxs)(`h2`,{className:`${U} ${GB} ${e===D[0]?`text-error`:`text-muted`}`,children:[z(e.key),` `,(0,V.jsx)(`span`,{className:`mono`,children:e.rows.length})]}),e.rows.map(e=>{let n=O.indexOf(e),r=w[e.id],i=r?OV(r):null;return(0,V.jsxs)(`div`,{"data-row":n,className:KB(n===k),onClick:()=>{j(n),te(e=>e+1)},children:[(0,V.jsxs)(`span`,{className:qB,children:[(0,V.jsx)(`span`,{className:JB(!e.enabled),children:e.name}),(0,V.jsx)(`span`,{className:`mono text-muted ${YB}`,children:e.enabled?re(e.nextRunAt):t.paused}),(0,V.jsx)(`span`,{className:`mono ${i?EV[i]:`text-muted`}`,style:{width:`1ch`},children:i?DV[i]:` `})]}),(0,V.jsx)(`span`,{className:`mono text-muted ${XB}`,title:e.schedule,children:`${fe(e.repo)} · ${PB(e.schedule,b)??e.schedule}`}),T[e.id]?(0,V.jsx)(`span`,{className:`mono text-warning ${XB}`,title:T[e.id]?.reason,children:xL(t.lastFailed,{when:re(T[e.id]?.at),reason:T[e.id]?.reason??``})}):null]},e.id)})]},e.key))}),(0,V.jsx)(`div`,{className:ZB,ref:S,children:A?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:QB,children:[(0,V.jsx)(`h2`,{className:$B,children:A.name}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:()=>void se(),children:t.runNow}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:()=>void oe(),children:z(A.enabled?`pages.routinePause`:`pages.routineEnable`)}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:le,children:z(`pages.delete`)})]})]}),(0,V.jsxs)(`dl`,{className:eV,children:[(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineSchedule`)}),(0,V.jsxs)(`dd`,{children:[de??(0,V.jsx)(`span`,{className:`mono`,children:A.schedule}),de&&(0,V.jsx)(`span`,{className:`mono text-muted`,children:` ${A.schedule}`})]}),(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineNext`)}),(0,V.jsx)(`dd`,{className:A.enabled?``:`text-warning`,children:A.enabled?Number.isFinite(pe)?`${re(A.nextRunAt)} · ${new Date(pe).toLocaleString(x,{weekday:`short`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}`:`—`:t.paused}),(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineProject`)}),(0,V.jsx)(`dd`,{children:fe(A.repo)}),!A.script&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineDelivers`)}),(0,V.jsx)(`dd`,{children:ue?xL(t.targetExisting,{task:ie(ue.taskId),tab:ue.tabId}):A.persistentSession?t.targetStanding:t.targetFresh})]})]}),A.precheck&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:xL(t.precheck,{command:A.precheck.command})}),A.script?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`pages.routineScript`)}),(0,V.jsx)(`p`,{className:`mono ${tV}`,children:A.script.command})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`pages.routinePrompt`)}),(0,V.jsx)(`p`,{className:tV,children:A.prompt})]}),(0,V.jsx)(NV,{c:r,tick:i,routines:C,followId:A.id,now:ne,when:re,openRun:R}),(0,V.jsx)(kV,{runs:P,when:re})]}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.noSelection})})]}),h&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:h})]})}var IV=`flex min-w-0 items-baseline gap-2.5 font-mono text-meta whitespace-nowrap`,LV=`${IV} w-full cursor-pointer border-none bg-transparent p-0 text-left text-inherit [font:inherit] [&:hover]:underline`,RV=`w-[5ch] flex-none text-muted`,zV=`w-[16ch] flex-none overflow-hidden text-accent`,BV=`mt-3.5 mb-0.5`,VV=`min-w-0 flex-1 truncate`,HV=`flex-none text-right text-muted`,UV=`${HV} min-w-[5ch]`,WV=`${HV} min-w-[4ch]`,GV=`${HV} min-w-[5ch]`,KV=`w-[8ch] flex-none overflow-hidden text-accent`,qV=`flex flex-wrap gap-x-3 font-mono text-meta text-muted`,JV=`m-0 text-meta text-muted`,YV={turns:0,tokens:0,ms:0},XV=e=>(e.usage?.input_tokens??0)+(e.usage?.output_tokens??0),ZV=e=>Math.max(0,e.endedAt-e.startedAt),QV=(e,t)=>({turns:e.turns+1,tokens:e.tokens+XV(t),ms:e.ms+ZV(t)});function $V(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}function eH(e,t,n,r){let i=[];for(let e=n-1;e>=0;e--){let n=new Date(t);n.setDate(n.getDate()-e),i.push($V(n.getTime()))}let a=new Map(i.map(e=>[e,{sum:YV,byEngine:{}}]));for(let t of e){let e=a.get($V(t.startedAt));if(!e)continue;let n=t.vendor??`unknown`;e.sum=QV(e.sum,t),e.byEngine[n]=(e.byEngine[n]??0)+XV(t)}let o=e.reduce((e,t)=>Math.min(e,t.startedAt),1/0),s=e.length>=r&&Number.isFinite(o)?{count:e.length,day:$V(o)}:null;return{cutoff:s,days:i.map(e=>{let t=a.get(e);return{day:e,...t?.sum??YV,byEngine:t?.byEngine??{},partial:s!==null&&e<=s.day}})}}function tH(e){let t=new Map;for(let n of e){let e=n.vendor??`unknown`,r=n.model??`unknown`,i=`${e}\0${r}`;t.set(i,{engine:e,model:r,...QV(t.get(i)??YV,n)})}return[...t.values()].sort((e,t)=>t.tokens-e.tokens||t.turns-e.turns)}function nH(e,t){let n=new Map;for(let t of e)n.set(t.taskId,{taskId:t.taskId,...QV(n.get(t.taskId)??YV,t)});return[...n.values()].sort((e,t)=>t.tokens-e.tokens||t.turns-e.turns).slice(0,t)}function rH(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4)).replace(/\.0$/,``)}k`:`${(e/1e6).toFixed(+(e<1e7)).replace(/\.0$/,``)}M`}var iH=[``,`▏`,`▎`,`▍`,`▌`,`▋`,`▊`,`▉`];function aH(e,t,n){if(e<=0||t<=0)return``;let r=Math.max(1,Math.round(e/t*n*8));return`${`█`.repeat(Math.floor(r/8))}${iH[r%8]}`}var oH=[`█`,`▓`,`▒`,`░`];function sH(e,t,n,r){return n<=0?``:t.map((t,i)=>{let a=e[t]??0,o=a<=0?0:Math.max(1,Math.round(a/n*r));return(oH[i%oH.length]??`█`).repeat(o)}).join(``)}var cH=.1,lH=/^(\d+)\s*(h|d)$/;function uH(e,t){let n=lH.exec(e.label.trim());if(!n||e.resetsAt===null||e.percent<=0)return null;let r=Number(n[1])*(n[2]===`d`?24:1)*36e5,i=r-(e.resetsAt-t);if(!(i>=r*cH)||i>r)return null;if(e.percent>=100)return{kind:`full`,at:t};let a=t+(100-e.percent)/e.percent*i;return a<e.resetsAt?{kind:`full`,at:a}:{kind:`lasts`}}var dH=14,fH=500,pH=3e4,mH=16,hH=8,gH=8;function _H(e,t,n,r){let i=Bs(e,t,n),[a,o]=(0,g.useState)(i?{kind:`ready`,value:i}:{kind:`loading`}),s=JSON.stringify(n);return(0,g.useEffect)(()=>{let r=!0;return Hs(e,t,n).then(e=>r&&o({kind:`ready`,value:e})).catch(e=>r&&o(t=>t.kind===`ready`?t:{kind:`failed`,error:CL(e)})),()=>{r=!1}},[e,t,s,r]),a}var vH=e=>(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`${UV}`,children:rH(e.tokens)}),(0,V.jsx)(`span`,{className:`${WV}`,children:`${e.turns}t`}),(0,V.jsx)(`span`,{className:`${GV}`,children:yV(e.ms)})]});function yH({usage:e,nameOf:t}){let n=Date.now(),r=e.flatMap(e=>e.windows.map(r=>{let i={engine:e.name||t(e.vendor),label:r.label,percent:Math.round(r.percent)},a=uH(r,n);if(a?.kind===`full`){let t=a.at-n<72e6,o=new Date(a.at).toLocaleString([],{...t?{}:{weekday:`short`},hour:`2-digit`,minute:`2-digit`});return{key:`${e.vendor}:${r.kind}`,text:xL(z(`usage.full`),{...i,time:o})}}return{key:`${e.vendor}:${r.kind}`,text:xL(z(a?`usage.lasts`:`usage.window`),i)}}));return r.length===0?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted ${BV}`,children:z(`usage.quota`)}),r.map(e=>(0,V.jsx)(`p`,{className:`mono ${JV}`,children:e.text},e.key))]})}function bH({row:e,title:t,open:n}){let r=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:VV,children:t}),vH(e)]});return n?(0,V.jsx)(H,{variant:`row`,className:LV,onClick:n,children:r}):(0,V.jsx)(`div`,{className:IV,children:r})}function xH({model:e}){B();let t=ML(),[n]=kL(pH),r=_H(e,`turns.list`,{sinceDays:dH,limit:fH},n),i=_H(e,`engines.list`,{},n),a=_H(e,`usage.get`,{},n),o=v(e.tasks),s=i.kind===`ready`?i.value.engines:[],c=e=>s.find(t=>t.id===e)?.name??e,l=e=>o?.tasks.find(t=>t.id===e)?.label??z(`usage.removedTask`);return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:t,onKeyDown:e=>{e.metaKey||e.ctrlKey||e.altKey||e.key!==`q`&&e.key!==`Escape`||(e.preventDefault(),ln.set(null))},children:[(0,V.jsx)(`h1`,{className:bM,children:z(`usage.title`)}),(()=>{if(r.kind===`loading`)return(0,V.jsx)(`p`,{className:`text-muted`,children:z(`usage.loading`)});if(r.kind===`failed`)return(0,V.jsx)(`p`,{className:`text-error`,children:xL(z(`usage.failed`),{error:r.error})});let t=r.value.turns,n=new Set(r.value.readers??[]),i=eH(t,Date.now(),dH,fH),s=new Map;for(let e of i.days)for(let[t,n]of Object.entries(e.byEngine))s.set(t,(s.get(t)??0)+n);let u=[...s].sort((e,t)=>t[1]-e[1]).map(([e])=>e),d=Math.max(0,...i.days.map(e=>e.tokens)),f=tH(t),p=Math.max(0,...f.map(e=>e.tokens)),m=[...new Set((o?.tasks??[]).flatMap(e=>e.engine?.id&&!n.has(e.engine.id)?[e.engine.id]:[]))];return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:JV,children:xL(z(`usage.range`),{days:dH})}),t.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`usage.empty`)}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted ${BV}`,children:z(`usage.perDay`)}),(0,V.jsx)(`div`,{className:qV,children:u.map((e,t)=>(0,V.jsx)(`span`,{children:`${oH[t%oH.length]} ${c(e)}`},e))}),i.days.map(e=>(0,V.jsxs)(`div`,{className:IV,children:[(0,V.jsx)(`span`,{className:RV,children:`${e.day.slice(5)}${e.partial?`~`:``}`}),(0,V.jsx)(`span`,{className:zV,children:sH(e.byEngine,u,d,mH)}),vH(e)]},e.day)),i.cutoff&&(0,V.jsx)(`p`,{className:`m-0 text-meta text-muted`,children:xL(z(`usage.cutoff`),{count:i.cutoff.count,day:i.cutoff.day.slice(5)})}),(0,V.jsx)(`h2`,{className:`${U} text-muted ${BV}`,children:z(`usage.byModel`)}),f.map(e=>(0,V.jsxs)(`div`,{className:IV,children:[(0,V.jsx)(`span`,{className:VV,title:`${c(e.engine)} · ${e.model}`,children:`${c(e.engine)} · ${e.model}`}),(0,V.jsx)(`span`,{className:KV,children:aH(e.tokens,p,hH)}),vH(e)]},`${e.engine}\0${e.model}`)),(0,V.jsx)(`h2`,{className:`${U} text-muted ${BV}`,children:z(`usage.topTasks`)}),nH(t,gH).map(t=>(0,V.jsx)(bH,{row:t,title:l(t.taskId),open:o?.tasks.some(e=>e.id===t.taskId)?()=>{ln.set(null),e.select(t.taskId)}:null},t.taskId))]}),m.length>0&&(0,V.jsx)(`p`,{className:`m-0 text-meta text-muted`,children:xL(z(`usage.noReader`),{engines:m.map(c).join(`, `)})}),a.kind===`ready`&&a.value.usage&&(0,V.jsx)(yH,{usage:a.value.usage,nameOf:c})]})})()]})}var SH={id:`mods`,label:`mods`},CH=[{id:`kanban`,label:`kanban`,mod:`kanban`},{id:`routines`,label:`automations`},{id:`issues`,label:`issues`,mod:`issues`}];function wH({model:e}){let{nav:t}=bL(),n=v(ln),r=v(e.mods).length>0,i=v(e.installedMods),a=[...CH.filter(e=>!e.mod||i.has(e.mod)),...r?[SH]:[]];return(0,V.jsxs)(`div`,{className:jM,children:[(0,V.jsxs)(`button`,{type:`button`,className:`rail-nav-row ${NM(!1)}`,onClick:()=>iO(),children:[z(`rail.newTask`),(0,V.jsx)(`span`,{className:PM,"aria-hidden":`true`,children:`+`})]}),a.map(e=>(0,V.jsx)(`button`,{type:`button`,className:`rail-nav-row ${NM(n===e.id)}`,"aria-current":n===e.id?`page`:void 0,onClick:()=>va(e.id),children:t[e.label]},e.id))]})}function TH({model:e,page:t}){(0,g.useEffect)(()=>e.selection.subscribe(()=>ln.set(null)),[e]);let n=v(e.installedMods);return t===`kanban`&&n.has(`kanban`)?(0,V.jsx)(Rz,{model:e}):t===`routines`?(0,V.jsx)(FV,{model:e}):t===`issues`&&n.has(`issues`)?(0,V.jsx)(kR,{model:e}):t===`mods`?(0,V.jsx)(tB,{model:e}):t===`compare`?(0,V.jsx)(_R,{model:e}):t===`usage`?(0,V.jsx)(xH,{model:e}):null}var EH=p();function DH(e){return e?.match(/^https?:\/\/[^/]+\/([^/]+\/[^/]+)\/(?:pull|merge_requests|-\/merge_requests)\//)?.[1]}var OH=e=>e.charAt(0).toUpperCase()+e.slice(1);function kH(e){return[z(`rail.pr.state.${e.state}`),...e.checks?[z(`rail.pr.checks.${e.checks}`)]:[]].join(`, `)}function AH(e){let t=new Map;for(let n of e){let e=aI(n),r=[...e&&n.pr?[{pr:n.pr,mark:e}]:[],...(n.sessionPrs??[]).flatMap(e=>{let t=oI(e);return t?[{pr:e,mark:t}]:[]})];for(let{pr:e,mark:i}of r){let r=e.url??(e.number===void 0?n.id:`${n.repo}#${e.number}`),a=t.get(r),o=e.lifecycle===`unknown`,s=a?.pr.lifecycle===`unknown`;(!a||s&&!o||o===s&&sI([a.mark,i])!==a.mark)&&t.set(r,{task:n,pr:e,mark:i})}}return[...t.values()]}function jH({tasks:e,onOpen:t}){let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(!1),o=(0,g.useRef)(null),s=(0,g.useRef)(null),c=(0,g.useRef)(null),l=$o();(0,g.useLayoutEffect)(()=>{let e=c.current;if(!e||!n)return;let t=e.getBoundingClientRect();t.right>window.innerWidth-8&&(e.style.left=`${Math.max(8,window.innerWidth-t.width-8)}px`,e.style.top=`${n.bottom+6}px`);let r=e.getBoundingClientRect().bottom-(window.innerHeight-8);r>0&&(e.style.top=`${Math.max(8,e.getBoundingClientRect().top-r)}px`)},[n]);let u=()=>{t?.(),s.current!==null&&window.clearTimeout(s.current),s.current=null,a(!1),o.current&&!n&&r(o.current.getBoundingClientRect())},d=()=>{a(!0),s.current=window.setTimeout(()=>r(null),140)};(0,g.useEffect)(()=>{if(!l||!n)return;let e=e=>{let t=e.target;o.current?.contains(t)||c.current?.contains(t)||(a(!0),s.current=window.setTimeout(()=>r(null),140))};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[l,n]),(0,g.useEffect)(()=>()=>{s.current!==null&&window.clearTimeout(s.current)},[]);let f=AH(e),p=sI(f.map(e=>e.mark));if(!p)return null;let m=f.length===1?`PR #${f[0]?.pr.number??``}, ${kH(p)}`:z(`rail.pr.many`,{count:f.length});return(0,V.jsxs)(`span`,{ref:o,className:`chip ${tE} ${p.tone}`,"aria-label":m,onMouseEnter:l?void 0:u,onMouseLeave:l?void 0:d,onClick:e=>{l&&(e.stopPropagation(),n&&!i?d():u())},children:[p.glyph,f.length>1&&(0,V.jsx)(`span`,{className:`font-sans`,children:f.length}),n&&(0,EH.createPortal)((0,V.jsx)(`div`,{ref:c,className:nE(i),style:{top:n.top-6,left:n.right+8},onMouseEnter:l?void 0:u,onMouseLeave:l?void 0:d,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),onMouseDown:e=>e.stopPropagation(),onContextMenu:e=>e.stopPropagation(),children:f.map(({task:e,pr:t,mark:n})=>{let r=DH(t?.url),i=t?.additions!==void 0&&t.deletions!==void 0;return(0,V.jsxs)(`button`,{type:`button`,className:`flex flex-col gap-1 rounded-[calc(var(--radius)-6px)] px-3 py-2 text-left font-sans enabled:hover:bg-hover`,disabled:!t?.url,onClick:()=>t?.url&&window.open(t.url,`_blank`,`noopener`),children:[(0,V.jsx)(`span`,{className:`truncate font-semibold text-ink`,children:t.title||e.label}),(0,V.jsxs)(`span`,{className:`flex items-baseline gap-0 text-meta leading-[inherit] whitespace-nowrap`,children:[(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.25 ${n.tone}`,children:[(0,V.jsx)(`span`,{className:`font-mono`,children:n.glyph}),OH(z(`rail.pr.state.${n.state}`))]}),(0,V.jsx)(`span`,{className:`overflow-hidden text-ellipsis whitespace-pre text-muted`,children:[...n.checks?[z(`rail.pr.checks.${n.checks}`)]:[],[r,t?.number===void 0?``:`#${t.number}`].filter(Boolean).join(` `)].filter(Boolean).map(e=>`, ${e}`).join(``)}),i&&(0,V.jsxs)(`span`,{className:`ml-auto flex gap-1.5 pl-3 tabular-nums`,children:[(0,V.jsxs)(`span`,{className:`text-success`,children:[`+`,t.additions]}),(0,V.jsxs)(`span`,{className:`text-error`,children:[`−`,t.deletions]})]})]})]},t.url??`${e.id}#${t.number??``}`)})}),document.body)]})}var MH=`~archived`;function NH(e,t,n,r){let i=t.filter(e=>!e.routine);if(i.length===0)return e;let a={id:MH,kind:`archived`,count:i.length,expanded:n};if(!n)return[...e,a];let o=xw([{repo:``,label:``,key:MH,tasks:i}],``,r,1,!1);return[...e,a,...o.filter(e=>e.kind!==`project`)]}function PH(e,t,n){let r=t.kind===`main`,i=e=>r?e.kind===`main`:e.kind!==`main`&&e.repo===t.repo&&!e.pinned==!t.pinned;if(t.id===n.id||!i(n))return null;let a=e.filter(i).sort((e,t)=>(e.order??e.rank)-(t.order??t.rank)).map(e=>e.id);return a.indexOf(n.id)-a.indexOf(t.id)}function FH(e,t,n,r){let i=PH(e,t,n);return i===null?null:r===`above`&&i>0?i-1:r===`below`&&i<0?i+1:i}function IH(e,t){return e.id===t.id?!1:e.kind===`main`?t.kind===`main`:t.kind!==`main`&&t.repo===e.repo}function LH(e,t,n,r,i){if(!IH(t,n))return null;if(t.kind===`main`){let i=FH(e,t,n,r);return i?{steps:i}:null}let a=n.pinned===!0||i&&r===`above`,o={...t,pinned:a},s=a===(n.pinned===!0)?FH(e.map(e=>e.id===t.id?o:e),o,n,r)??0:0,c=a===(t.pinned===!0)?{}:{pin:a};return`pin`in c||s!==0?{...c,steps:s}:null}var RH=e=>e===void 0||e.kind===`project`||e.kind===`state`?0:e.kind===`task`||e.kind===`pane`||e.kind===`round`?e.depth:1;function zH(e,t){let n=RH(e[t]),r=t+1;for(;r<e.length&&RH(e[r])>n;)r++;return r}function BH(e,t,n){let r=e.findIndex(e=>e.id===t),i=r<0?e:[...e.slice(0,r),...e.slice(zH(e,r))];for(let e=i.findIndex(e=>e.id===n)-1;e>=0;e--){let t=i[e];if(!t||t.kind===`project`||t.kind===`state`)return!0;if(t.kind===`task`&&t.depth===1&&t.task.kind!==`main`||t.kind===`round`&&t.depth===1)return!1}return!1}function VH(e,t){let n=RH(e[t]),r=[];for(let i=2;i<=n;i++){let a=t+1;for(;a<e.length&&RH(e[a])>i;)a++;let o=a<e.length&&RH(e[a])===i;r.push(i===n?o?`tee`:`elbow`:o?`pipe`:`blank`)}return r}function HH(e,t,n,r){let i=e.findIndex(e=>e.id===t);if(i<0||t===n)return e;let a=zH(e,i),o=e.slice(i,a),s=[...e.slice(0,i),...e.slice(a)],c=s.findIndex(e=>e.id===n);if(c<0)return e;let l=r===`above`?c:zH(s,c);return[...s.slice(0,l),...o,...s.slice(l)]}function UH(e,t,n,r,i){let[a,o]=(0,g.useState)(null),s=(0,g.useRef)(t);s.current=t;let[c,l]=(0,g.useState)(null),u=(0,g.useRef)(()=>o(null));(0,g.useEffect)(()=>{if(!c)return;let e=()=>{l(null),u.current()};if(t!==c)return e();let n=window.setTimeout(e,3e3);return()=>window.clearTimeout(n)},[t,c]);let d=(0,g.useRef)(null),f=(0,g.useRef)(null),p=()=>[...d.current?.querySelectorAll(`[data-row]`)??[]];(0,g.useLayoutEffect)(()=>{let e=f.current;if(!e||(f.current=null,window.matchMedia(`(prefers-reduced-motion: reduce)`).matches))return;let t=p().flatMap(t=>{let n=e.get(t.dataset.row??``),r=n===void 0?0:n-t.getBoundingClientRect().top;return r?[{el:t,dy:r}]:[]});for(let{el:e,dy:n}of t)e.style.transition=`none`,e.style.transform=`translateY(${n}px)`;d.current?.getBoundingClientRect();for(let{el:e}of t)e.style.transition=`transform 150ms ease-out`,e.style.transform=``,e.addEventListener(`transitionend`,()=>e.style.removeProperty(`transition`),{once:!0})});let m=(0,g.useRef)(null),h=(0,g.useRef)([]),_=(0,g.useRef)(new Map),v=(0,g.useRef)(0),y=(0,g.useRef)(0),b=e=>{m.current=e,o(e)},x=e=>!n||e.machine!==void 0?null:e.kind===`project`?t.find(t=>t.id===i(e.repo).mainTaskId)??null:e.kind===`task`&&e.depth===1&&e.task.kind!==`main`?e.task:null,S=e=>{let t=x(e);if(t)return{draggable:!0,onDragStart:n=>{n.dataTransfer.effectAllowed=`move`,n.dataTransfer.setData(`text/plain`,t.id),d.current=n.currentTarget.closest(`[data-rail-body]`),T(d.current);let r=h.current,i=r.findIndex(t=>t.id===e.id);v.current=r.slice(i,zH(r,i)).reduce((e,t,n)=>e+(_.current.get(t.id)?.height??0)+(n>0?_.current.get(t.id)?.gap??0:0),0),y.current=n.clientY,b({fromRow:e.id,from:t,toRow:e.id,to:t,side:`above`})},onDragEnd:()=>m.current&&b(null)}},C=(e,t,n)=>{let r=t;if(n.from.kind===`main`)for(;r>0&&e[r]?.kind!==`project`;)r--;let i=e[r],a=i&&x(i);return!i||!a||!IH(n.from,a)?null:{row:i.id,task:a}},w={onDragOver:e=>{let t=m.current;if(!t)return;e.preventDefault();let n=e.clientY-y.current;y.current=e.clientY;let r=e.target.closest(`[data-row]`)?.dataset.row,i=h.current,a=C(i,i.findIndex(e=>e.id===r),t);if(!a||a.row===t.fromRow)return;let o=e.currentTarget.querySelector(`[data-row="${CSS.escape(t.fromRow)}"]`)?.getBoundingClientRect().top;if(o===void 0||e.clientY>=o&&e.clientY<o+v.current)return;let s=e.clientY<o?`above`:`below`;(s===`above`?n>=0:n<=0)||(t.toRow!==a.row||t.side!==s)&&b({...t,toRow:a.row,to:a.task,side:s})},onDrop:n=>{let i=m.current;if(!i)return;n.preventDefault();let a=LH(t,i.from,i.to,i.side,BH(h.current,i.fromRow,i.toRow));m.current=null,r?u.current=()=>o(null):u.current=()=>{f.current=new Map(p().map(e=>[e.dataset.row??``,e.getBoundingClientRect().top])),o(null),HT(`default`),G(q(`tasks`,`sort.label`,{mode:q(`tasks`,`sort.modes.default`)}))},a?YT(e,i.from.id,a).finally(()=>l(s.current)):u.current()}},T=e=>{let t=[...e?.querySelectorAll(`[data-row]`)??[]];_.current=new Map(t.map((e,n)=>{let r=t[n-1],i=r?e.offsetTop-r.offsetTop-r.offsetHeight:0;return[e.dataset.row??``,{top:e.offsetTop,gap:i,height:e.offsetHeight}]}))},E=e=>{h.current=a?HH(e,a.fromRow,a.toRow,a.side):e;let t=new Map;if(!a)return t;let n=Math.min(...[..._.current.values()].map(e=>e.top));for(let[e,r]of h.current.entries()){let i=_.current.get(r.id);if(!i)return new Map;e>0&&(n+=i.gap),n!==i.top&&t.set(r.id,n-i.top),n+=i.height}return t};return{props:S,body:w,dragging:a?.fromRow??null,places:e=>{let t=E(e);return e=>{let n=t.get(e.id);return n?{"data-row":e.id,style:{transform:`translateY(${n}px)`}}:{"data-row":e.id}}}}}function WH({model:e,narrow:t,onSettings:n}){B();let r=v(e.selection),i=v(jN),a=$(`engines.skill.bannerHintWeb`,{engines:i.join(`, `)});return(0,V.jsxs)(V.Fragment,{children:[!t&&(0,V.jsx)(HP,{client:e.client,taskId:r.taskId,tabId:r.tabId}),(0,V.jsxs)(`div`,{className:MM,children:[(0,V.jsxs)(`button`,{type:`button`,className:`rail-nav-row ${NM(!1)}`,onClick:n,children:[(0,V.jsxs)(`svg`,{className:FM,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:[(0,V.jsx)(`path`,{d:`M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z`}),(0,V.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]}),(0,V.jsx)(`span`,{children:z(`rail.settings`)}),i.length>0&&(0,V.jsx)(`span`,{className:`ml-2 min-w-0 truncate text-meta text-subtle`,title:a,children:z(`rail.skillCue`)})]}),(0,V.jsx)(NF,{model:e,bindingId:`settings.open`})]})]})}function GH(e,t,n,r,i=null){let a=e=>e.kind===`task`&&e.task.kind===`main`&&e.fold===void 0&&e.task.id!==n&&e.task.id!==i&&(r?t[e.task.id]?.length===0:(t[e.task.id]?.length??0)===0),o=e.filter(e=>!a(e));return o.filter((e,t)=>{if(e.kind!==`project`&&e.kind!==`state`)return!0;let n=o[t+1];return n!==void 0&&n.kind!==`project`&&n.kind!==`state`})}var KH=_({});function qH(e,t,n){let r=KH.get()[`${e}::${t.id}`];return r&&r.sig===Nw(n)&&Ew(n.root).some(e=>e.id===r.leaf)?r.leaf:n.activeLeafId}function JH(e,t,n,r){KH.set({...KH.get(),[`${e}::${t}`]:{sig:Nw(n),leaf:r}})}function YH(e,t,n,r){JH(e,t.id,n,r),sa(EC(e,t.id,r))?.focus()}function XH(e){let{taskId:t,tabId:n}=e.selection.get(),r=t?e.tabs.get()[t]?.find(e=>e.id===n):void 0;return t&&r?{taskId:t,tab:r}:null}async function ZH(e,t,n){try{let r=await e.client.request(`tab.split`,t);await e.refreshTabsNow(),n?.(r)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}}function QH(e,t,n,r,i){let a=i??(n.split?qH(t,n,n.split):`leaf-1`),o=e.selection.get();(o.taskId!==t||o.tabId!==n.id)&&e.select(t,n.id);let s=sa(EC(t,n.id,a))?.size();ZH(e,{taskId:t,tabId:n.id,action:`open`,direction:r,leafId:a,...s},e=>{e.changed?e.split&&JH(t,n.id,e.split,e.leaf):G(z(`layout.splitTooSmall`),`error`)})}function $H(e,t,n,r){let i=n.split,a=i?qH(t,n,i):r,o=()=>ZH(e,{taskId:t,tabId:n.id,action:`close`,leafId:r},e=>{let i=e.split;if(!i)return;let o=a!==r&&Ew(i.root).some(e=>e.id===a);JH(t,n.id,i,o?a:i.activeLeafId)});if(!i||!jw(n,i,r)){o();return}W.set((0,V.jsx)(ur,{title:z(`confirm.closePaneTitle`,{pane:Aw(i,ww(n)).get(r)??r}),body:z(`confirm.closePaneBody`),confirmLabel:z(`menu.closePane`),onConfirm:o}))}function eU(e,t,n,r){let i=n.split;i&&W.set((0,V.jsx)(lr,{title:So(`split.renameTitle`),initial:Aw(i,ww(n)).get(r)??``,allowEmpty:!0,submitLabel:z(`dialog.save`),onSubmit:i=>ZH(e,{taskId:t,tabId:n.id,action:`rename`,leafId:r,title:i})}))}function tU(e,t,n,r){return[{label:z(`menu.renamePane`),section:`split`,key:ro(`workspace.split.rename`)??void 0,run:()=>eU(e,t,n,r)},{label:z(`menu.closePane`),section:`split`,key:ii(`workspace.split.close`)||void 0,run:()=>$H(e,t,n,r)}]}function nU(e,t,n,r){return[{label:z(`menu.splitRight`),section:`split`,key:ro(`workspace.split.right`)??void 0,run:()=>QH(e,t,n,`right`,r)},{label:z(`menu.splitDown`),section:`split`,key:ro(`workspace.split.down`)??void 0,run:()=>QH(e,t,n,`down`,r)}]}function rU(e,t,n,r){let i=n.split,a=r??(i?qH(t,n,i):`leaf-1`);return[...nU(e,t,n,a),...Dw(i)?tU(e,t,n,a):[]]}function iU(e,t){let n=e.tabs.get()[t]??[],r=e.selection.get(),i=(r.taskId===t?n.find(e=>e.id===r.tabId):void 0)??Bi(n);return!i||!Mw(i)?[]:nU(e,t,i,i.split?qH(t,i,i.split):`leaf-1`)}function aU(e,{task:t,tab:n,leaf:r}){n.split&&YH(t.id,n,n.split,r),e.select(t.id,n.id)}function oU(e){let{row:t}=e,n=v(e.model.selection);v(KH);let r=n.taskId===t.task.id&&n.tabId===t.tab.id&&!!t.tab.split&&qH(t.task.id,t.tab,t.tab.split)===t.leaf;return(0,V.jsxs)(`button`,{type:`button`,className:`${tr({size:`pane`})} ${e.cursor?mE:``}`,"aria-current":r||void 0,onClick:e.onClick,onContextMenu:e.onMenu,...e.place,children:[(0,V.jsx)(`span`,{className:XT,"aria-hidden":`true`,children:e.guides?.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${nr} text-(length:--fs-meta) ${r?`text-ink`:`text-muted`}`,children:t.label})]})}function sU(e,t){let n=t?.trim()??``;return n&&e?.effortLevels?.includes(n)?n:``}function cU({model:e,taskId:t}){let[n,r]=(0,g.useState)([]),[i,a]=(0,g.useState)({}),[o,s]=(0,g.useState)(``),[c,l]=(0,g.useState)(``),[u,d]=(0,g.useState)(``),[f,p]=(0,g.useState)(!1),{busy:m,error:h,submit:_}=cr();(0,g.useEffect)(()=>{Promise.all([e.client.request(`engines.list`),e.client.request(`task.get`,{taskId:t})]).then(([e,t])=>{let n=xs(e.engines,t.task.engine).filter(e=>e.ready!==!1||e.id===t.task.engine),i=n.find(e=>e.id===t.task.engine)??n[0];r(n),a(t.task),s(i?.id??``),l(sU(i,t.task.effort)),d(i?.id===t.task.engine?t.task.model??``:``),p(!0)})},[e,t]);let v=n.find(e=>e.id===o),y=v?.effortLevels??[],b=y.length>0?[``,...y]:[],x=(v?.models??[]).map(e=>e.id).filter(e=>e.toLowerCase().includes(u.trim().toLowerCase())&&e!==u.trim()).slice(0,6),S=e=>{s(e);let t=n.find(t=>t.id===e);l(sU(t,e===i.engine?i.effort:void 0)),d(e===i.engine?i.model??``:``)},C=e=>{let t=n.findIndex(e=>e.id===o),r=n[Math.max(0,Math.min(n.length-1,t+e))];r&&S(r.id)},w=e=>{if(b.length===0)return;let t=Math.max(0,b.indexOf(c));l(b[Math.max(0,Math.min(b.length-1,t+e))]??``)},T=e=>{let t=e.target instanceof HTMLInputElement;if(e.key===`ArrowUp`&&!t)C(-1);else if(e.key===`ArrowDown`&&!t)C(1);else if((e.key===`ArrowLeft`||e.key===`h`)&&!t)w(-1);else if((e.key===`ArrowRight`||e.key===`l`)&&!t)w(1);else return;e.preventDefault()},E=()=>_(async()=>{if(!v)return;let n=y.length>0?c:void 0,r=v.acceptsModel?u.trim():void 0;(v.id!==i.engine||n!==void 0&&n!==(i.effort??``)||r!==void 0&&r!==(i.model??``))&&(await e.client.request(`task.setEngine`,{taskId:t,engine:v.id,...n===void 0?{}:{effort:n},...r===void 0?{}:{model:r}}),G(q(`tasks`,`toast.engineSwitched`,{engine:v.name})))});return(0,V.jsx)(sr,{title:q(`tasks`,`changeEngine.title`),wide:!0,children:(0,V.jsxs)(`form`,{className:Ln,onKeyDown:T,onSubmit:e=>{e.preventDefault(),E()},children:[(0,V.jsx)(`ul`,{className:jn,"aria-label":q(`tasks`,`changeEngine.title`),children:n.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":e.id===o,className:tr({selected:e.id===o}),onClick:()=>S(e.id),children:[(0,V.jsx)(`span`,{className:`${ar} text-accent`,children:e.id===o?`●`:` `}),(0,V.jsx)(`span`,{className:nr,children:e.name}),e.id===i.engine&&(0,V.jsx)(`span`,{className:`text-muted`,children:q(`tasks`,`changeEngine.current`)})]})},e.id))}),f&&v&&v.acceptsModel&&(0,V.jsxs)(`label`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`tasks`,`engineModel.label`)}),(0,V.jsx)(`input`,{className:tn,spellCheck:!1,placeholder:q(`tasks`,`engineModel.placeholder`),value:u,onChange:e=>d(e.target.value)}),x.length>0&&(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:x.map(e=>(0,V.jsx)(`button`,{type:`button`,className:An(),onClick:()=>d(e),children:e},e))})]}),b.length>0&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`tasks`,`changeEngine.effortLabel`)}),(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:b.map(e=>(0,V.jsx)(`button`,{type:`button`,"aria-pressed":e===c,className:An(e===c),onClick:()=>l(e),children:e===``?q(`tasks`,`changeEngine.noEffort`):e},e||`default`))})]}),(0,V.jsx)(`p`,{className:`keys-only ${Jt}`,children:(0,V.jsx)(kT,{text:[q(`tasks`,`changeEngine.footer.engine`),...v?.acceptsModel?[q(`tasks`,`changeEngine.footer.model`)]:[],...b.length>0?[q(`tasks`,`changeEngine.footer.effort`)]:[],q(`tasks`,`changeEngine.footer.set`),q(`tasks`,`changeEngine.footer.cancel`)].join(` · `)})}),h&&(0,V.jsx)(`p`,{className:`text-error`,children:h}),(0,V.jsx)(fr,{busy:m||!f,submitLabel:z(`taskops.set`)})]})})}function lU({model:e,task:t}){let[n,r]=(0,g.useState)(()=>Bs(e,`task.get`,{taskId:t.id})?.task??null),[i,a]=(0,g.useState)(null),{busy:o,error:s,submit:c}=cr();(0,g.useEffect)(()=>{Hs(e,`task.get`,{taskId:t.id}).then(e=>r(e.task)).catch(e=>a(K(e)))},[e,t.id]);let l=()=>c(async()=>{if(!n?.prompt)return;let t=(await e.client.request(`task.spawn`,{repo:n.repo,prompt:n.prompt,...n.engine?{engine:n.engine}:{},...n.baseRef?{baseBranch:n.baseRef}:{}})).taskIds[0];t&&e.selectWhenListed(t)});return(0,V.jsx)(sr,{title:q(`tasks`,`runAgain.title`),wide:!0,children:(0,V.jsxs)(`form`,{className:Ln,onSubmit:e=>{e.preventDefault(),l()},children:[(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`runAgain.source`,{title:t.label})}),(0,V.jsx)(`pre`,{className:Yt,children:n?.prompt??i??q(`tasks`,`fieldNotes.loading`)}),(0,V.jsx)(`p`,{className:Jt,children:q(`tasks`,`runAgain.hint`)}),s&&(0,V.jsx)(`p`,{className:`text-error`,children:s}),(0,V.jsx)(fr,{busy:o||!n?.prompt,submitLabel:q(`tasks`,`runAgain.confirm`)})]})})}function uU(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function dU({model:e,repo:t}){let[n,r]=(0,g.useState)({kind:`loading`}),[i,a]=(0,g.useState)(0),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(null),u=(0,g.useRef)(null),d=()=>e.client.request(`notes.list`,{repo:t}).then(e=>r({kind:`ready`,notes:e.notes})).catch(e=>r({kind:`error`,message:K(e)}));(0,g.useEffect)(()=>void d(),[]);let f=n.kind===`ready`?n.notes:[];(0,g.useEffect)(()=>a(e=>Math.max(0,Math.min(e,f.length-1))),[f.length]),(0,g.useEffect)(()=>{u.current?.querySelector(`.is-selected`)?.scrollIntoView({block:`nearest`})},[i]);let p=async n=>{if(n.id!==void 0){l(null);try{await e.client.request(`notes.delete`,{repo:t,id:n.id}),s(null),await d()}catch(e){l(K(e))}}};return(0,V.jsx)(sr,{title:q(`tasks`,`fieldNotes.title`),wide:!0,children:(0,V.jsxs)(`div`,{className:Ln,onKeyDown:e=>{if(!o){if(e.key===`ArrowDown`||e.key===`j`)a(e=>Math.min(f.length-1,e+1));else if(e.key===`ArrowUp`||e.key===`k`)a(e=>Math.max(0,e-1));else if(e.key===`d`&&f[i]?.id!==void 0)s(f[i]??null);else return;e.preventDefault()}},children:[(0,V.jsx)(`p`,{className:`font-mono text-meta break-all text-muted`,children:t}),n.kind===`loading`&&(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.loading`)}),n.kind===`error`&&(0,V.jsx)(`p`,{className:`text-error`,children:n.message}),n.kind===`ready`&&f.length===0&&(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.empty`)}),f.length>0&&(0,V.jsx)(`ul`,{className:`m-0 list-none p-0 flex max-h-[44vh] flex-col gap-2 overflow-y-auto`,ref:u,children:f.map((e,t)=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,className:Xt(t===i),onClick:()=>a(t),autoFocus:t===0,children:[(0,V.jsxs)(`span`,{className:`font-mono text-meta whitespace-pre text-accent`,children:[t===i?`▸ `:` `,uU(e.at),`, `,e.author]}),(0,V.jsx)(`span`,{className:`text-ink whitespace-pre-wrap wrap-anywhere`,children:e.text})]})},`${e.at}:${t}`))}),o&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-paper px-3 py-2.5`,children:[(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:q(`tasks`,`fieldNotes.confirmDelete.title`)})}),(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.confirmDelete.body`,{text:o.text})}),c&&(0,V.jsx)(`p`,{className:`text-error`,children:c}),(0,V.jsxs)(`div`,{className:`actions flex items-center justify-end gap-3.5`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>s(null),children:z(`dialog.cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:Pe({danger:!0}),onClick:()=>void p(o),children:z(`taskops.retire`)})]})]}),!o&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`keys-only font-sans text-meta text-subtle`,children:q(`tasks`,`fieldNotes.footerDeletable`)}),(0,V.jsxs)(`div`,{className:`actions flex items-center justify-end gap-3.5`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,disabled:f[i]?.id===void 0,onClick:()=>s(f[i]??null),children:z(`taskops.retire`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:Sn,children:z(`taskops.close`)})]})]})]})})}var fU=[`backlog`,`in_progress`,`in_review`,`done`,`canceled`,`error`],pU={backlog:`status.backlog`,in_progress:`status.inProgress`,in_review:`status.inReview`,done:`status.done`,canceled:`status.canceled`,error:`status.error`},mU=e=>({binding:e,key:ro(e)??void 0});async function hU(e,t){if(!e){G(z(`menu.nothingToCopy`,{what:t}),`error`);return}try{await navigator.clipboard.writeText(e),G(z(`menu.copied`,{text:e}))}catch{G(z(`menu.copyFailed`),`error`)}}function gU(e,t,n){let r=[{label:z(`menu.newTask`),section:`open`,run:()=>iO(t)}],i=n.mainTaskId;return i&&(n.first||r.push({label:q(`tasks`,`menu.moveToTop`),section:`edit`,run:()=>void e.client.request(`task.move`,{taskId:i,direction:`top`}).catch(e=>G(q(`tasks`,`toast.moveFailed`,{error:String(e)}),`error`))}),r.push({label:q(`tasks`,`menu.reorderProject`),section:`edit`,...mU(`sidebar.localMerge`),run:()=>vU(i)})),r.push({label:q(`tasks`,`menu.fieldNotes`),section:`notes`,run:()=>W.set((0,V.jsx)(dU,{model:e,repo:t}))}),i&&r.push({label:q(`tasks`,`menu.forgetProject`),section:`danger`,danger:!0,run:()=>W.set(fF(e,t,n.label))}),r}function _U(e){return[{label:z(`menu.newChatNoFolder`),section:`open`,run:()=>aO()},{label:z(`menu.newShell`),section:`open`,run:()=>void VC(e).catch(e=>G(String(e),`error`))}]}function vU(e){let t=!WT.get();t&&e!==void 0&&GT.set(e),KT(t),document.querySelector(`.rail`)?.focus()}function yU(e,t){let n=(e.tasks.get()?.tasks??[]).filter(e=>e.kind===`main`&&!e.machine&&e.repo!==t.repo).map(e=>e.repo),r=n.map(e=>{let t=e.slice(e.lastIndexOf(`/`)+1);return{value:e,label:n.filter(e=>e.endsWith(`/${t}`)).length>1?e:t}});return r.length===0?(G(q(`tasks`,`moveToProject.empty`),`error`),null):(0,V.jsx)(dr,{title:q(`tasks`,`moveToProject.title`),choices:r,onPick:async n=>{await e.client.request(`task.moveToProject`,{taskId:t.id,repo:n}),G(q(`tasks`,`toast.movedToProject`,{project:r.find(e=>e.value===n)?.label??n}))}})}function bU(e,t,n){let r=e.client,i=[];n&&(i.push({label:z(`menu.closeTab`),section:`tab`,run:()=>W.set((0,V.jsx)(ur,{title:z(`confirm.closeTabTitle`,{tab:n.title??n.engineName??n.id}),body:z(`confirm.closeTabBody`),confirmLabel:z(`menu.closeTab`),onConfirm:async()=>{await r.request(`tab.close`,{taskId:t.id,tabId:n.id}),await e.refreshTabsNow()}}))}),i.push(...rU(e,t.id,n))),i.push({label:z(`menu.newChat`),section:`open`,run:()=>void zC(e,t.id)}),i.push({label:z(`menu.newChatPick`),section:`open`,run:()=>W.set((0,V.jsx)(GC,{model:e,taskId:t.id}))}),i.push({label:z(`menu.continueEngine`),section:`open`,...mU(`chat.tab.fork`),run:()=>W.set((0,V.jsx)(GC,{model:e,taskId:t.id,context:`continue`,sourceTabId:n?.id}))}),i.push({label:z(`menu.newShell`),section:`open`,run:()=>void BC(e,t.id,{kind:`shell`}).catch(e=>G(String(e),`error`))}),t.startsAt&&(i.push({label:z(`menu.startNow`),section:`open`,run:()=>void e.client.request(`task.startScheduledNow`,{taskId:t.id}).catch(e=>G(String(e),`error`))}),i.push({label:z(`menu.cancelStart`),section:`open`,run:()=>void e.client.request(`task.cancelScheduledStart`,{taskId:t.id}).catch(e=>G(String(e),`error`))})),t.hasPrompt&&(i.push({label:q(`tasks`,`menu.runAgain`),section:`open`,run:()=>W.set((0,V.jsx)(lU,{model:e,task:t}))}),i.push({label:z(`menu.retryEdit`),section:`open`,run:()=>void WD(e,t)}));let a=!t.machine;if(a&&i.push({label:q(`tasks`,`menu.openEditor`),section:`open`,...mU(`tasks.openWorktree`),run:()=>void sF(e,t.id)}),t.groupId){let e=t.groupId;i.push({label:z(`compare.menu`),section:`open`,run:()=>ya(e)})}i.push({label:z(`menu.rename`),section:`edit`,...mU(`sidebar.rename`),run:()=>W.set((0,V.jsx)(lr,{title:z(`menu.rename`),initial:t.title,submitLabel:z(`dialog.save`),onSubmit:e=>r.request(`task.rename`,{taskId:t.id,title:e}).then(()=>{})}))}),t.kind!==`main`&&i.push({label:t.pinned?z(`menu.unpin`):z(`menu.pin`),section:`edit`,...mU(`sidebar.pin`),run:()=>void r.request(`task.pin`,{taskId:t.id,pinned:!t.pinned}).catch(e=>G(String(e),`error`))}),a&&i.push({label:q(`tasks`,`menu.reorder`),section:`edit`,...mU(`sidebar.localMerge`),run:()=>vU()}),i.push({label:z(`menu.setStatus`),section:`edit`,children:fU.map(e=>({label:z(pU[e]),checked:e===t.status,run:()=>void r.request(`task.setStatus`,{taskId:t.id,status:e}).catch(e=>G(String(e),`error`))}))}),a&&t.kind!==`main`&&!t.routine&&!t.parentTaskId&&!t.extraRepoCount&&i.push({label:q(`tasks`,`menu.moveToProject`),section:`edit`,run:()=>{let n=yU(e,t);n&&W.set(n)}}),a&&i.push({label:z(`menu.changeEngine`),section:`edit`,...mU(`tasks.cycleEngine`),run:()=>W.set((0,V.jsx)(cU,{model:e,taskId:t.id}))}),t.pr?.checkState===`failing`&&i.push({label:q(`tasks`,`menu.fixChecks`),section:`git`,key:ii(`files.fixChecks`),run:()=>void oF(e,t.id,z(`taskops.fixSent`))}),t.kind===`task`&&t.branch&&a&&i.push({label:q(`tasks`,`menu.syncBase`),section:`git`,key:ii(`files.syncBase`),run:()=>void iF(e,t.id)}),t.branch&&i.push({label:z(`menu.renameBranch`),section:`git`,...mU(`tasks.renameBranch`),run:()=>W.set((0,V.jsx)(lr,{title:z(`menu.renameBranch`),initial:t.branch,submitLabel:z(`dialog.save`),onSubmit:e=>r.request(`task.setBranch`,{taskId:t.id,branch:e}).then(()=>{})}))}),t.kind===`task`&&t.branch&&i.push({label:z(`menu.land`),section:`git`,run:()=>void nF(e,t)});let o=[{label:z(`menu.copyWhat.id`),run:()=>void hU(t.id,z(`menu.what.id`))}];return t.branch&&o.push({label:z(`menu.copyWhat.branch`),run:()=>void hU(t.branch,z(`menu.what.branch`))}),o.push({label:z(`menu.copyWhat.path`),run:()=>void r.request(`task.get`,{taskId:t.id}).then(e=>hU(e.task.worktreePath,z(`menu.what.path`))).catch(e=>G(String(e),`error`))}),i.push({label:z(`menu.copy`),section:`copy`,children:o}),t.kind!==`main`&&i.push({label:q(`tasks`,t.archived?`menu.unarchive`:`menu.archive`),section:`danger`,run:()=>void dF(e,t)}),i.push({label:z(`menu.removeSession`),section:`danger`,...mU(`sidebar.delete`),danger:!0,run:()=>W.set(t.kind===`main`?uF(e,t):lF(e,t))}),i}var xU=`rove.collapsedProjects`,SU=`rove.foldedTasks`,CU=`rove.openedTasks`,wU=600;function TU(e){try{let t=JSON.parse(localStorage.getItem(e)??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function EU(e,t){try{localStorage.setItem(e,JSON.stringify([...t]))}catch{}}var DU=(e,t)=>{let n=new Set(e);return n.delete(t)||n.add(t),n};function OU(){let e=v(VT),[t,n]=(0,g.useState)({active:!1,query:``}),[r,i]=(0,g.useState)(!1),a=()=>i(e=>!e),[o,s]=(0,g.useState)(()=>TU(xU)),c=e=>s(t=>{let n=DU(t,e);return EU(xU,n),n}),[l,u]=(0,g.useState)(()=>({folded:TU(SU),opened:TU(CU)}));return{sort:e,cycleSort:UT,search:t,setSearch:n,archivedOpen:r,toggleArchived:a,collapsed:o,toggleProject:c,hand:l,toggleTaskFold:(e,t)=>u(n=>{let r=new Set(n.folded),i=new Set(n.opened);return t?(r.delete(e),i.add(e)):(i.delete(e),r.add(e)),EU(SU,r),EU(CU,i),{folded:r,opened:i}})}}var kU=[`sidebar.nav`,`sidebar.goto`,`sidebar.select`,`sidebar.tree.open`,`sidebar.rename`,`sidebar.pin`,`sidebar.localMerge`,`sidebar.delete`,`sidebar.sort`,`sidebar.search.enter`,`tasks.renameBranch`,`tasks.cycleEngine`,`tasks.openWorktree`,`tasks.update`,`tasks.focusEngine`,`task.new`,`settings.open.sidebar`,`worktrees.open.sidebar`];function AU(e){for(let t of e)for(let e of kU){let n=ri(e).indexOf(t);if(n>=0)return{id:e,slot:n}}return null}function jU(e,t){let n=e.selection.get().taskId===t;e.select(t),ga(),n&&qi()}function MU(e,t,n,r){let{search:i,setSearch:a}=n,[o,s]=(0,g.useState)(null),c=(0,g.useRef)(0),l=t.filter(e=>e.kind!==`project`&&e.kind!==`state`),u=l.findIndex(e=>e.id===o);(0,g.useEffect)(()=>{u<0&&s(r.selectedId&&l.some(e=>e.id===r.selectedId)?r.selectedId:l[0]?.id??null)},[u,l,r.selectedId]);let d=l[u],f=d?.kind===`task`||d?.kind===`pane`?d.task.id:null;(0,g.useEffect)(()=>dA.set(f),[f]);let p=l[0]?.id??null;(0,g.useEffect)(()=>{i.query,i.active&&s(p)},[i.active,i.query,p]);let m=e=>{let t=l[Math.max(0,Math.min(l.length-1,e))];t&&s(t.id)},h=t=>{t?.kind===`archived`&&n.toggleArchived(),t?.kind===`task`&&e.select(t.task.id),t?.kind===`round`&&ya(t.groupId),t?.kind===`pane`&&aU(e,t),t&&t.kind!==`archived`&&ga()},_=(t,n)=>{t?.kind===`task`&&an(bU(e,t.task,null),n)?.run?.()},v=async t=>{if(t?.kind===`task`&&t.machine===void 0)try{let{engines:n}=await e.client.request(`engines.list`),r=xs(n).filter(e=>e.ready!==!1),i=r[(r.findIndex(e=>e.id===t.task.engine?.id)+1)%r.length];if(!i||i.id===t.task.engine?.id)return;await e.client.request(`task.setCommand`,{taskId:t.task.id,engine:i.id}),G(z(`rail.engineSwitched`,{engine:i.name}))}catch(e){G(z(`rail.engineSwitchFailed`,{error:e instanceof Error?e.message:String(e)}),`error`)}};return{cursor:o,setCursor:s,onKeyDown:t=>{let o=l[u],s=t.target instanceof HTMLInputElement;if(i.active){if(t.metaKey||t.ctrlKey||t.altKey)return;if(t.key===`Escape`)a({active:!1,query:``});else if(t.key===`Enter`)h(o),a({active:!1,query:``});else if(t.key===`ArrowDown`)m(u+1);else if(t.key===`ArrowUp`)m(u-1);else if(t.key===`Backspace`&&!s)a(e=>({...e,query:e.query.slice(0,-1)}));else if(t.key.length===1&&!s)a(e=>({...e,query:e.query+t.key}));else return;t.preventDefault();return}let d=AU(Za(t));if(WT.get()){let n=o?.kind===`task`&&o.machine===void 0;if(d?.id===`sidebar.nav`)n&&qT(e,o,d.slot%2==0?1:-1);else if(d?.id===`sidebar.localMerge`||t.key===`Enter`||t.key===`Escape`)KT(!1);else return;t.preventDefault();return}switch(d?.id){case`sidebar.nav`:m(d.slot%2==0?u+1:u-1);break;case`sidebar.goto`:d.slot%2==1?m(l.length-1):Date.now()-c.current<wU?(m(0),c.current=0):c.current=Date.now();break;case`sidebar.select`:case`sidebar.tree.open`:h(o);break;case`tasks.focusEngine`:qi();break;case`sidebar.rename`:case`sidebar.pin`:case`sidebar.delete`:case`tasks.renameBranch`:case`tasks.openWorktree`:_(o,d.id);break;case`tasks.cycleEngine`:v(o);break;case`sidebar.localMerge`:o?.machine===void 0&&KT(!0);break;case`sidebar.sort`:n.cycleSort(),G(q(`tasks`,`sort.label`,{mode:q(`tasks`,`sort.modes.${VT.get()}`)}));break;case`sidebar.search.enter`:a({active:!0,query:``});break;case`task.new`:r.onNewTask(o?.kind===`task`||o?.kind===`pane`?o.task.repo:void 0,o?.machine);break;case`settings.open.sidebar`:r.onSettings();break;case`worktrees.open.sidebar`:va(`worktrees`);break;case`tasks.update`:va(`update`);break;default:return}t.preventDefault()}}}var NU=(e,t,n)=>`~pane:${e}:${t}:${n}`;function PU(e,t){return e.flatMap(e=>e.kind===`task`?[e,...(t[e.task.id]??[]).flatMap(t=>{let n=t.split;if(!n||!Dw(n))return[];let r=Aw(n,ww(t));return Ew(n.root).map(n=>({id:NU(e.task.id,t.id,n.id),kind:`pane`,task:e.task,tab:t,leaf:n.id,label:r.get(n.id)??n.id,depth:e.depth+1,...e.machine===void 0?{}:{machine:e.machine}}))})]:[e])}function FU(e){let{row:t}=e;return(0,V.jsxs)(`button`,{type:`button`,className:`${tr({size:`pane`})} ${e.cursor?mE:``}`,title:z(`compare.menu`),onClick:()=>{e.onClick(),ya(t.groupId)},...e.place,children:[e.guides&&(0,V.jsx)(`span`,{className:`-my-0.75 -mr-0.5 ml-0 flex flex-none self-stretch`,"aria-hidden":`true`,children:e.guides.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${nr} text-(length:--fs-meta) text-muted`,children:t.title}),(0,V.jsxs)(`span`,{className:`${or} ml-auto items-center`,children:[e.repo&&(0,V.jsx)(`span`,{className:`max-w-24 truncate text-subtle`,children:e.repo}),(0,V.jsx)(`span`,{className:`text-subtle`,children:t.tasks.length}),(0,V.jsx)(uR,{status:rI(t.tasks)})]})]})}function IU(e){let t=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let e=t.current;return()=>{e&&document.activeElement===e&&e.closest(`nav`)?.focus()}},[]),(0,V.jsxs)(`div`,{className:`${sE} mono items-center`,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:`/`}),(0,V.jsx)(`input`,{ref:t,className:fE,type:`text`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,enterKeyHint:`go`,value:e.query,placeholder:z(`rail.searchPlaceholder`),"aria-label":z(`rail.searchPlaceholder`),onChange:t=>e.onChange(t.target.value)}),e.query&&(0,V.jsx)(`span`,{className:`ml-1.5 text-muted`,children:e.count})]})}var LU=450,RU=!1;typeof document<`u`&&(document.addEventListener(`keydown`,()=>{RU=!0},!0),document.addEventListener(`pointerdown`,()=>{RU=!1},!0));var zU=e=>{let t=e.querySelector(`.row-title`);return!!t&&t.scrollWidth>t.clientWidth};function BU(e,t){let[n,r]=(0,g.useState)(null),i=(0,g.useRef)(null),a=(0,g.useRef)(null),o=()=>{i.current!==null&&window.clearTimeout(i.current),i.current=null},s=e=>{o(),i.current=window.setTimeout(()=>r(e.getBoundingClientRect()),LU)},c=()=>{o(),r(null)};return(0,g.useEffect)(()=>{let e=a.current,n=e?.closest(`.rail`);if(!t||!e||!n||!RU||!n.contains(document.activeElement)||!zU(e))return;let i=()=>{o(),r(null)},c=e=>{e.relatedTarget instanceof Node&&n.contains(e.relatedTarget)||i()};return s(e),n.addEventListener(`focusout`,c),()=>{n.removeEventListener(`focusout`,c),i()}},[t]),(0,g.useEffect)(()=>()=>{i.current!==null&&window.clearTimeout(i.current)},[]),{ref:e=>{a.current=e},onPointerEnter:e=>{e.pointerType===`touch`||!zU(e.currentTarget)||s(e.currentTarget)},onPointerLeave:c,hide:c,tip:n?(0,EH.createPortal)((0,V.jsx)(`div`,{className:rE,role:`tooltip`,style:{top:n.top+n.height/2,left:n.right+8},children:e}),document.body):null}}function VU({at:e}){let t=new Date(e);if(Number.isNaN(t.getTime()))return null;let n=DD(t);return(0,V.jsxs)(`span`,{className:`text-subtle`,title:z(`rail.startsAt`,{time:t.toLocaleString()}),children:[`◷ `,n]})}var HU=150,UU=128,WU=0,GU=2,KU=[{reach:.96,grow:1.5,pulse:.9,done:104},{reach:.72,grow:1.1,pulse:1.2,done:84},{reach:1,grow:1.7,pulse:.7,done:116},{reach:.84,grow:1.3,pulse:1,done:96},{reach:.62,grow:1.2,pulse:1.3,done:80}],qU=`/-\\|`,JU=6,YU=(e,t,n,r)=>{let i=e[n];i&&t>=0&&t<i.length&&(i[t]=r)};function XU(e,t){let n=Math.min(64,Math.max(24,Math.floor(t))),r=(Math.floor(e)%HU+HU)%HU,i=Array.from({length:11},()=>Array(n).fill(` `)),a=Array.from({length:11},()=>Array(n).fill(` `));YU(a,WU,0,`o`);let o=GU+2*(KU.length-1),s=Math.min(o,Math.floor(r/2));for(let e=1;e<=s;e++)YU(i,WU,e,`|`);if(KU.forEach((e,t)=>{let o=GU+2*t,s=2*o;if(r<s)return;YU(i,WU,o,`+`);let c=n-1-1,l=1+Math.max(1,Math.floor(c*e.reach)),u=Math.min(l,1+Math.floor((r-s)*e.grow)),d=r>=e.done&&u===l;for(let t=1;t<u;t++)!d&&((t-Math.floor(r*e.pulse))%JU+JU)%JU===0?YU(a,t,o,`=`):YU(i,t,o,`-`);d?YU(a,u,o,`o`):u<l?YU(a,u,o,`>`):YU(a,u,o,qU[(Math.floor(r/2)+t)%4]??`-`)}),r>=UU){let e=Math.ceil((r-UU+1)/22*(n+1));for(let t of[i,a])for(let r of t)r.fill(` `,0,Math.min(n,e))}return{base:i.map(e=>e.join(``)).join(`
127
+ `)}`},e.label))]})}var MV=30;function NV(e,t,n){let r=t.join(`\0`),[i,a]=(0,g.useState)(()=>Object.fromEntries(t.map(t=>[t,Bs(e,`routine.runs`,{id:t})?.runs??[]])));return(0,g.useEffect)(()=>{let n=!0;for(let r of t)Hs(e,`routine.runs`,{id:r}).then(e=>n&&a(t=>({...t,[r]:e.runs}))).catch(()=>void 0);return()=>{n=!1}},[e,r,n]),i}function PV(e){B();let{auto:t}=xL(),[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null);(0,g.useEffect)(()=>r(null),[e.followId]);let o=n===null?e.followId??``:n,s=o===``?e.routines.map(e=>e.id):[o],c=NV(e.c,s,e.tick),l=new Map(e.routines.map(e=>[e.id,e.name])),u=xV(c,o===``?null:o,i),d=e=>{if(e.status===`skipped_blocked`){let t=e.blocked?.reason;return t?SL(z(`runLog.blockedRun`),{reason:z(`runLog.blocked.${t}`)}):z(`runLog.outcome.blocked`)}return t.runStatus[e.status]??e.status},f=(e,t,n,r)=>(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":t,className:`max-w-40 truncate`,onClick:n,children:`[ ${e} ]`},r);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`runLog.title`)}),e.routines.length>1&&(0,V.jsx)(DA,{label:z(`runLog.routine`),value:o,picks:[{value:``,label:z(`runLog.allRoutines`)},...e.routines.map(e=>({value:e.id,label:e.name}))],onPick:r}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[f(z(`runLog.all`),i===null,()=>a(null),`all`),gV.map(e=>f(z(`runLog.outcome.${e}`),i===e,()=>a(e),e))]}),u.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:xV(c,o===``?null:o,null).length===0?t.noRuns:z(`runLog.empty`)}):u.slice(0,MV).map(n=>{let r=kV(n.status),i=iB(n,e.now),a=i===`awaiting`?`, ${t.responseAwaiting}`:i===`missing`?`, ${t.responseMissing}`:``,s=yV(n),c=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{children:OV[r]}),(0,V.jsx)(`span`,{children:`#${n.runNumber}`}),o===``&&(0,V.jsx)(`span`,{className:`max-w-[20ch] truncate`,children:l.get(n.automationId)??``}),(0,V.jsx)(`span`,{className:sV,children:`${d(n)}${n.tabId?`, ${n.tabId}`:``}${a}`}),(0,V.jsx)(`span`,{className:`text-subtle`,children:z(`runLog.source.${vV[n.trigger]}`)}),s!==null&&(0,V.jsx)(`span`,{className:`text-muted`,children:bV(s)}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.when(n.at)})]}),u=n.error?wV(n.error):null,f=n.taskId,p=i===`missing`?`text-warning`:DV[r];return(0,V.jsxs)(`div`,{className:`${rV} ${p}`,children:[f?(0,V.jsx)(`button`,{type:`button`,className:`mono ${oV}`,onClick:()=>e.openRun(f),children:c}):(0,V.jsx)(`span`,{className:`mono ${aV}`,children:c}),u&&(0,V.jsxs)(`details`,{className:`mono pl-[calc(2ch+16px)] [&_summary]:cursor-pointer [&_summary]:list-none [&_summary]:truncate [&_summary::-webkit-details-marker]:hidden [&[open]_summary]:whitespace-normal [&_pre]:mx-0 [&_pre]:mt-1 [&_pre]:mb-1.5 [&_pre]:max-h-[16lh] [&_pre]:overflow-auto [&_pre]:rounded-sm [&_pre]:bg-inset [&_pre]:px-2 [&_pre]:py-1.5 [&_pre]:whitespace-pre-wrap [&_pre]:wrap-anywhere [&_pre]:text-muted`,children:[(0,V.jsx)(`summary`,{children:u.summary}),(0,V.jsx)(`pre`,{children:u.full})]})]},n.id)}),u.length>MV&&(0,V.jsx)(`p`,{className:`text-muted`,children:z(`runLog.more`,{count:u.length-MV})})]})}var FV=5e3;function IV({model:e}){let{auto:t,common:n}=xL(),r=e.client,[i,a]=AL(FV),o=v(e.tasks),s=OL(e),c=kL(e),[l,u]=(0,g.useState)(()=>Bs(r,`routine.list`)??null),[d,f]=(0,g.useState)(null),[p,m]=(0,g.useState)(null),[h,_]=(0,g.useState)(null),y=NL(),b=CL(),x=B()===`zh`?`zh-CN`:`en-US`,S=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0;return Hs(r,`routine.list`).then(t=>e&&u(t)).catch(()=>e&&u(e=>e??{automations:[],keepsDaemonAlive:!1})),()=>{e=!1}},[r,i]);let C=l?.automations??[],w=l?.lastRunStatus??{},T=l?.lastFailure??{},E=e=>{let t=w[e.id];return t!==void 0&&rB(t)},D=[{key:`pages.routinesNeedYou`,rows:C.filter(E)},{key:`pages.routinesActive`,rows:C.filter(e=>e.enabled&&!E(e))},{key:`pages.routinesPaused`,rows:C.filter(e=>!e.enabled&&!E(e))}],O=D.flatMap(e=>e.rows),k=Math.max(0,O.findIndex(e=>e.id===d)),A=O[k],j=e=>f(O[e]?.id??null),ee=D[0]?.rows.length??0,M=v(un);(0,g.useEffect)(()=>{M===null||!l||(l.automations.some(e=>e.id===M)&&f(M),un.set(null))},[M,l]);let N=NV(r,A?[A.id]:[],i),P=A?N[A.id]??[]:[];(0,g.useEffect)(()=>_(null),[A?.id]);let F=(0,g.useRef)(null),[I,te]=(0,g.useState)(0),L=(0,g.useRef)(0);(0,g.useEffect)(()=>{let e=S.current,t=I!==L.current;if(L.current=I,t&&e&&F.current&&e.offsetTop>F.current.offsetTop){e.scrollIntoView({block:`start`,behavior:`smooth`});return}F.current?.querySelector(`[data-row="${k}"]`)?.scrollIntoView({block:`nearest`})},[k,I]);let ne=Date.now(),re=e=>{let n=e?Date.parse(e):NaN;if(!Number.isFinite(n))return`—`;let r=n-ne,i=r>=0,a=Math.floor(Math.abs(r)/6e4),o=Math.floor(a/60);return a<1?i?t.when.now:t.when.justNow:a<60?SL(i?t.when.inMinutes:t.when.minutesAgo,{n:a}):o<24?SL(i?t.when.inHours:t.when.hoursAgo,{n:o}):new Date(n).toLocaleDateString()},ie=e=>o?.tasks.find(t=>t.id===e)?.label??e,R=t=>{ln.set(null),e.select(t)},ae=(e,t,n)=>G(SL(e,{name:t,error:wL(n)}),`error`),oe=async()=>{if(!(!A||p)){m(A.id);try{await r.request(`routine.setEnabled`,{id:A.id,enabled:!A.enabled}),a()}catch(e){ae(A.enabled?t.disableFailed:t.enableFailed,A.name,e)}finally{m(null)}}},se=async()=>{if(!(!A||p)){m(A.id),_(SL(t.running,{name:A.name}));try{let e=await r.request(`routine.runNow`,{id:A.id});_(SL(t.ranWith,{name:A.name,status:e.status})),a()}catch(e){ae(t.runFailed,A.name,e)}finally{m(null)}}},ce=async()=>{if(p)return;let e=DL(await r.request(`repos.list`).then(e=>e.repos).catch(()=>[]),s);W.set((0,V.jsx)(hV,{repos:e,tasks:(o?.tasks??[]).filter(e=>!e.deleting).map(e=>({id:e.id,title:e.label,repo:e.repo})),defaultRepo:c,onSubmit:e=>{(async()=>{m(`new`);try{await r.request(`routine.create`,{...e.repo===null?{}:{repo:e.repo},name:e.name,prompt:e.prompt,schedule:e.schedule,...e.target?{targetTask:e.target.taskId,targetTab:e.target.tabId}:{}}),a()}catch(e){G(SL(t.createFailed,{error:wL(e)}),`error`)}finally{m(null)}})()}}))},le=()=>{if(!A||p)return;let e=A;W.set((0,V.jsx)(ur,{title:t.deleteTitle,body:SL(t.deleteBody,{name:e.name}),confirmLabel:t.deleteButton,onConfirm:async()=>{m(e.id);try{await r.request(`routine.delete`,{id:e.id}),a()}catch(n){ae(t.deleteFailed,e.name,n)}finally{m(null)}}}))};ML(e=>{if(e.ctrlKey)return e.key===`c`&&(ln.set(null),!0);switch(e.key){case`Escape`:case`q`:return ln.set(null),!0;case`j`:case`ArrowDown`:return j(Math.min(O.length-1,k+1)),!0;case`k`:case`ArrowUp`:return j(Math.max(0,k-1)),!0;case`n`:return ce(),!0;case`r`:return a(),!0;case`e`:return oe(),!0;case`s`:return se(),!0;case`d`:return le(),!0;case`Enter`:{let e=P[0]?.taskId;return e?R(e):P.length>0&&_(t.latestRunNoTask),!0}default:return!1}});let ue=A?.target,de=A?FB(A.schedule,b):null,fe=e=>e===void 0?z(`rail.noProject`):EL(e,C.flatMap(e=>e.repo??[])),pe=A?.nextRunAt?Date.parse(A.nextRunAt):NaN;return(0,V.jsxs)(`div`,{className:`${vM} ${UB}`,tabIndex:0,ref:y,children:[(0,V.jsxs)(`div`,{className:xM,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[ee>0&&(0,V.jsx)(`span`,{className:`text-error`,children:SL(t.needAttention,{count:String(ee),total:String(O.length)})}),(0,V.jsx)(`span`,{className:`text-muted`,children:l?.keepsDaemonAlive?t.holdingDaemon:t.notHolding}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.header}`,onClick:()=>void ce(),children:z(`pages.new`)})]})]}),l===null?(0,V.jsx)(`p`,{className:`text-muted`,children:n.loading}):O.length===0?(0,V.jsxs)(`div`,{className:TM,children:[(0,V.jsx)(`p`,{className:`text-muted`,children:t.empty}),(0,V.jsx)(`p`,{className:`keys-only`,children:t.emptyHint})]}):(0,V.jsxs)(`div`,{className:WB,children:[(0,V.jsx)(`div`,{className:GB,ref:F,children:D.map(e=>e.rows.length===0?null:(0,V.jsxs)(`section`,{children:[(0,V.jsxs)(`h2`,{className:`${U} ${KB} ${e===D[0]?`text-error`:`text-muted`}`,children:[z(e.key),` `,(0,V.jsx)(`span`,{className:`mono`,children:e.rows.length})]}),e.rows.map(e=>{let n=O.indexOf(e),r=w[e.id],i=r?kV(r):null;return(0,V.jsxs)(`div`,{"data-row":n,className:qB(n===k),onClick:()=>{j(n),te(e=>e+1)},children:[(0,V.jsxs)(`span`,{className:JB,children:[(0,V.jsx)(`span`,{className:YB(!e.enabled),children:e.name}),(0,V.jsx)(`span`,{className:`mono text-muted ${XB}`,children:e.enabled?re(e.nextRunAt):t.paused}),(0,V.jsx)(`span`,{className:`mono ${i?DV[i]:`text-muted`}`,style:{width:`1ch`},children:i?OV[i]:` `})]}),(0,V.jsx)(`span`,{className:`mono text-muted ${ZB}`,title:e.schedule,children:`${fe(e.repo)} · ${FB(e.schedule,b)??e.schedule}`}),T[e.id]?(0,V.jsx)(`span`,{className:`mono text-warning ${ZB}`,title:T[e.id]?.reason,children:SL(t.lastFailed,{when:re(T[e.id]?.at),reason:T[e.id]?.reason??``})}):null]},e.id)})]},e.key))}),(0,V.jsx)(`div`,{className:QB,ref:S,children:A?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:$B,children:[(0,V.jsx)(`h2`,{className:eV,children:A.name}),(0,V.jsxs)(`span`,{className:`mono ${CM}`,children:[(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:()=>void se(),children:t.runNow}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:()=>void oe(),children:z(A.enabled?`pages.routinePause`:`pages.routineEnable`)}),(0,V.jsx)(`button`,{type:`button`,className:`${$t} ${wM.row}`,disabled:p===A.id,onClick:le,children:z(`pages.delete`)})]})]}),(0,V.jsxs)(`dl`,{className:tV,children:[(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineSchedule`)}),(0,V.jsxs)(`dd`,{children:[de??(0,V.jsx)(`span`,{className:`mono`,children:A.schedule}),de&&(0,V.jsx)(`span`,{className:`mono text-muted`,children:` ${A.schedule}`})]}),(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineNext`)}),(0,V.jsx)(`dd`,{className:A.enabled?``:`text-warning`,children:A.enabled?Number.isFinite(pe)?`${re(A.nextRunAt)} · ${new Date(pe).toLocaleString(x,{weekday:`short`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}`:`—`:t.paused}),(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineProject`)}),(0,V.jsx)(`dd`,{children:fe(A.repo)}),!A.script&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`dt`,{className:`text-muted`,children:z(`pages.routineDelivers`)}),(0,V.jsx)(`dd`,{children:ue?SL(t.targetExisting,{task:ie(ue.taskId),tab:ue.tabId}):A.persistentSession?t.targetStanding:t.targetFresh})]})]}),A.precheck&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:SL(t.precheck,{command:A.precheck.command})}),A.script?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`pages.routineScript`)}),(0,V.jsx)(`p`,{className:`mono ${nV}`,children:A.script.command})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted`,children:z(`pages.routinePrompt`)}),(0,V.jsx)(`p`,{className:nV,children:A.prompt})]}),(0,V.jsx)(PV,{c:r,tick:i,routines:C,followId:A.id,now:ne,when:re,openRun:R}),(0,V.jsx)(AV,{runs:P,when:re})]}):(0,V.jsx)(`p`,{className:`text-muted`,children:t.noSelection})})]}),h&&(0,V.jsx)(`p`,{className:`text-muted mx-0 mt-2 mb-0 text-meta leading-[inherit]`,children:h})]})}var LV=`flex min-w-0 items-baseline gap-2.5 font-mono text-meta whitespace-nowrap`,RV=`${LV} w-full cursor-pointer border-none bg-transparent p-0 text-left text-inherit [font:inherit] [&:hover]:underline`,zV=`w-[5ch] flex-none text-muted`,BV=`w-[16ch] flex-none overflow-hidden text-accent`,VV=`mt-3.5 mb-0.5`,HV=`min-w-0 flex-1 truncate`,UV=`flex-none text-right text-muted`,WV=`${UV} min-w-[5ch]`,GV=`${UV} min-w-[4ch]`,KV=`${UV} min-w-[5ch]`,qV=`w-[8ch] flex-none overflow-hidden text-accent`,JV=`flex flex-wrap gap-x-3 font-mono text-meta text-muted`,YV=`m-0 text-meta text-muted`,XV={turns:0,tokens:0,ms:0},ZV=e=>(e.usage?.input_tokens??0)+(e.usage?.output_tokens??0),QV=e=>Math.max(0,e.endedAt-e.startedAt),$V=(e,t)=>({turns:e.turns+1,tokens:e.tokens+ZV(t),ms:e.ms+QV(t)});function eH(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}function tH(e,t,n,r){let i=[];for(let e=n-1;e>=0;e--){let n=new Date(t);n.setDate(n.getDate()-e),i.push(eH(n.getTime()))}let a=new Map(i.map(e=>[e,{sum:XV,byEngine:{}}]));for(let t of e){let e=a.get(eH(t.startedAt));if(!e)continue;let n=t.vendor??`unknown`;e.sum=$V(e.sum,t),e.byEngine[n]=(e.byEngine[n]??0)+ZV(t)}let o=e.reduce((e,t)=>Math.min(e,t.startedAt),1/0),s=e.length>=r&&Number.isFinite(o)?{count:e.length,day:eH(o)}:null;return{cutoff:s,days:i.map(e=>{let t=a.get(e);return{day:e,...t?.sum??XV,byEngine:t?.byEngine??{},partial:s!==null&&e<=s.day}})}}function nH(e){let t=new Map;for(let n of e){let e=n.vendor??`unknown`,r=n.model??`unknown`,i=`${e}\0${r}`;t.set(i,{engine:e,model:r,...$V(t.get(i)??XV,n)})}return[...t.values()].sort((e,t)=>t.tokens-e.tokens||t.turns-e.turns)}function rH(e,t){let n=new Map;for(let t of e)n.set(t.taskId,{taskId:t.taskId,...$V(n.get(t.taskId)??XV,t)});return[...n.values()].sort((e,t)=>t.tokens-e.tokens||t.turns-e.turns).slice(0,t)}function iH(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4)).replace(/\.0$/,``)}k`:`${(e/1e6).toFixed(+(e<1e7)).replace(/\.0$/,``)}M`}var aH=[``,`▏`,`▎`,`▍`,`▌`,`▋`,`▊`,`▉`];function oH(e,t,n){if(e<=0||t<=0)return``;let r=Math.max(1,Math.round(e/t*n*8));return`${`█`.repeat(Math.floor(r/8))}${aH[r%8]}`}var sH=[`█`,`▓`,`▒`,`░`];function cH(e,t,n,r){return n<=0?``:t.map((t,i)=>{let a=e[t]??0,o=a<=0?0:Math.max(1,Math.round(a/n*r));return(sH[i%sH.length]??`█`).repeat(o)}).join(``)}var lH=.1,uH=/^(\d+)\s*(h|d)$/;function dH(e,t){let n=uH.exec(e.label.trim());if(!n||e.resetsAt===null||e.percent<=0)return null;let r=Number(n[1])*(n[2]===`d`?24:1)*36e5,i=r-(e.resetsAt-t);if(!(i>=r*lH)||i>r)return null;if(e.percent>=100)return{kind:`full`,at:t};let a=t+(100-e.percent)/e.percent*i;return a<e.resetsAt?{kind:`full`,at:a}:{kind:`lasts`}}var fH=14,pH=500,mH=3e4,hH=16,gH=8,_H=8;function vH(e,t,n,r){let i=Bs(e,t,n),[a,o]=(0,g.useState)(i?{kind:`ready`,value:i}:{kind:`loading`}),s=JSON.stringify(n);return(0,g.useEffect)(()=>{let r=!0;return Hs(e,t,n).then(e=>r&&o({kind:`ready`,value:e})).catch(e=>r&&o(t=>t.kind===`ready`?t:{kind:`failed`,error:wL(e)})),()=>{r=!1}},[e,t,s,r]),a}var yH=e=>(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`${WV}`,children:iH(e.tokens)}),(0,V.jsx)(`span`,{className:`${GV}`,children:`${e.turns}t`}),(0,V.jsx)(`span`,{className:`${KV}`,children:bV(e.ms)})]});function bH({usage:e,nameOf:t}){let n=Date.now(),r=e.flatMap(e=>e.windows.map(r=>{let i={engine:e.name||t(e.vendor),label:r.label,percent:Math.round(r.percent)},a=dH(r,n);if(a?.kind===`full`){let t=a.at-n<72e6,o=new Date(a.at).toLocaleString([],{...t?{}:{weekday:`short`},hour:`2-digit`,minute:`2-digit`});return{key:`${e.vendor}:${r.kind}`,text:SL(z(`usage.full`),{...i,time:o})}}return{key:`${e.vendor}:${r.kind}`,text:SL(z(a?`usage.lasts`:`usage.window`),i)}}));return r.length===0?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted ${VV}`,children:z(`usage.quota`)}),r.map(e=>(0,V.jsx)(`p`,{className:`mono ${YV}`,children:e.text},e.key))]})}function xH({row:e,title:t,open:n}){let r=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:HV,children:t}),yH(e)]});return n?(0,V.jsx)(H,{variant:`row`,className:RV,onClick:n,children:r}):(0,V.jsx)(`div`,{className:LV,children:r})}function SH({model:e}){B();let t=NL(),[n]=AL(mH),r=vH(e,`turns.list`,{sinceDays:fH,limit:pH},n),i=vH(e,`engines.list`,{},n),a=vH(e,`usage.get`,{},n),o=v(e.tasks),s=i.kind===`ready`?i.value.engines:[],c=e=>s.find(t=>t.id===e)?.name??e,l=e=>o?.tasks.find(t=>t.id===e)?.label??z(`usage.removedTask`);return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:t,onKeyDown:e=>{e.metaKey||e.ctrlKey||e.altKey||e.key!==`q`&&e.key!==`Escape`||(e.preventDefault(),ln.set(null))},children:[(0,V.jsx)(`h1`,{className:bM,children:z(`usage.title`)}),(()=>{if(r.kind===`loading`)return(0,V.jsx)(`p`,{className:`text-muted`,children:z(`usage.loading`)});if(r.kind===`failed`)return(0,V.jsx)(`p`,{className:`text-error`,children:SL(z(`usage.failed`),{error:r.error})});let t=r.value.turns,n=new Set(r.value.readers??[]),i=tH(t,Date.now(),fH,pH),s=new Map;for(let e of i.days)for(let[t,n]of Object.entries(e.byEngine))s.set(t,(s.get(t)??0)+n);let u=[...s].sort((e,t)=>t[1]-e[1]).map(([e])=>e),d=Math.max(0,...i.days.map(e=>e.tokens)),f=nH(t),p=Math.max(0,...f.map(e=>e.tokens)),m=[...new Set((o?.tasks??[]).flatMap(e=>e.engine?.id&&!n.has(e.engine.id)?[e.engine.id]:[]))];return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:YV,children:SL(z(`usage.range`),{days:fH})}),t.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:z(`usage.empty`)}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`h2`,{className:`${U} text-muted ${VV}`,children:z(`usage.perDay`)}),(0,V.jsx)(`div`,{className:JV,children:u.map((e,t)=>(0,V.jsx)(`span`,{children:`${sH[t%sH.length]} ${c(e)}`},e))}),i.days.map(e=>(0,V.jsxs)(`div`,{className:LV,children:[(0,V.jsx)(`span`,{className:zV,children:`${e.day.slice(5)}${e.partial?`~`:``}`}),(0,V.jsx)(`span`,{className:BV,children:cH(e.byEngine,u,d,hH)}),yH(e)]},e.day)),i.cutoff&&(0,V.jsx)(`p`,{className:`m-0 text-meta text-muted`,children:SL(z(`usage.cutoff`),{count:i.cutoff.count,day:i.cutoff.day.slice(5)})}),(0,V.jsx)(`h2`,{className:`${U} text-muted ${VV}`,children:z(`usage.byModel`)}),f.map(e=>(0,V.jsxs)(`div`,{className:LV,children:[(0,V.jsx)(`span`,{className:HV,title:`${c(e.engine)} · ${e.model}`,children:`${c(e.engine)} · ${e.model}`}),(0,V.jsx)(`span`,{className:qV,children:oH(e.tokens,p,gH)}),yH(e)]},`${e.engine}\0${e.model}`)),(0,V.jsx)(`h2`,{className:`${U} text-muted ${VV}`,children:z(`usage.topTasks`)}),rH(t,_H).map(t=>(0,V.jsx)(xH,{row:t,title:l(t.taskId),open:o?.tasks.some(e=>e.id===t.taskId)?()=>{ln.set(null),e.select(t.taskId)}:null},t.taskId))]}),m.length>0&&(0,V.jsx)(`p`,{className:`m-0 text-meta text-muted`,children:SL(z(`usage.noReader`),{engines:m.map(c).join(`, `)})}),a.kind===`ready`&&a.value.usage&&(0,V.jsx)(bH,{usage:a.value.usage,nameOf:c})]})})()]})}var CH={id:`mods`,label:`mods`},wH=[{id:`kanban`,label:`kanban`,mod:`kanban`},{id:`routines`,label:`automations`},{id:`issues`,label:`issues`,mod:`issues`}];function TH({model:e}){let{nav:t}=xL(),n=v(ln),r=v(e.mods).length>0,i=v(e.installedMods),a=[...wH.filter(e=>!e.mod||i.has(e.mod)),...r?[CH]:[]];return(0,V.jsxs)(`div`,{className:jM,children:[(0,V.jsxs)(`button`,{type:`button`,className:`rail-nav-row ${PM(!1)}`,onClick:()=>iO(),children:[z(`rail.newTask`),(0,V.jsx)(`span`,{className:FM,"aria-hidden":`true`,children:`+`})]}),a.map(e=>(0,V.jsx)(`button`,{type:`button`,className:`rail-nav-row ${PM(n===e.id)}`,"aria-current":n===e.id?`page`:void 0,onClick:()=>va(e.id),children:t[e.label]},e.id))]})}function EH({model:e,page:t}){(0,g.useEffect)(()=>e.selection.subscribe(()=>ln.set(null)),[e]);let n=v(e.installedMods);return t===`kanban`&&n.has(`kanban`)?(0,V.jsx)(zz,{model:e}):t===`routines`?(0,V.jsx)(IV,{model:e}):t===`issues`&&n.has(`issues`)?(0,V.jsx)(AR,{model:e}):t===`mods`?(0,V.jsx)(nB,{model:e}):t===`compare`?(0,V.jsx)(vR,{model:e}):t===`usage`?(0,V.jsx)(SH,{model:e}):null}var DH=p();function OH(e){return e?.match(/^https?:\/\/[^/]+\/([^/]+\/[^/]+)\/(?:pull|merge_requests|-\/merge_requests)\//)?.[1]}var kH=e=>e.charAt(0).toUpperCase()+e.slice(1);function AH(e){return[z(`rail.pr.state.${e.state}`),...e.checks?[z(`rail.pr.checks.${e.checks}`)]:[]].join(`, `)}function jH(e){let t=new Map;for(let n of e){let e=oI(n),r=[...e&&n.pr?[{pr:n.pr,mark:e}]:[],...(n.sessionPrs??[]).flatMap(e=>{let t=sI(e);return t?[{pr:e,mark:t}]:[]})];for(let{pr:e,mark:i}of r){let r=e.url??(e.number===void 0?n.id:`${n.repo}#${e.number}`),a=t.get(r),o=e.lifecycle===`unknown`,s=a?.pr.lifecycle===`unknown`;(!a||s&&!o||o===s&&cI([a.mark,i])!==a.mark)&&t.set(r,{task:n,pr:e,mark:i})}}return[...t.values()]}function MH({tasks:e,onOpen:t}){let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(!1),o=(0,g.useRef)(null),s=(0,g.useRef)(null),c=(0,g.useRef)(null),l=$o();(0,g.useLayoutEffect)(()=>{let e=c.current;if(!e||!n)return;let t=e.getBoundingClientRect();t.right>window.innerWidth-8&&(e.style.left=`${Math.max(8,window.innerWidth-t.width-8)}px`,e.style.top=`${n.bottom+6}px`);let r=e.getBoundingClientRect().bottom-(window.innerHeight-8);r>0&&(e.style.top=`${Math.max(8,e.getBoundingClientRect().top-r)}px`)},[n]);let u=()=>{t?.(),s.current!==null&&window.clearTimeout(s.current),s.current=null,a(!1),o.current&&!n&&r(o.current.getBoundingClientRect())},d=()=>{a(!0),s.current=window.setTimeout(()=>r(null),140)};(0,g.useEffect)(()=>{if(!l||!n)return;let e=e=>{let t=e.target;o.current?.contains(t)||c.current?.contains(t)||(a(!0),s.current=window.setTimeout(()=>r(null),140))};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},[l,n]),(0,g.useEffect)(()=>()=>{s.current!==null&&window.clearTimeout(s.current)},[]);let f=jH(e),p=cI(f.map(e=>e.mark));if(!p)return null;let m=f.length===1?`PR #${f[0]?.pr.number??``}, ${AH(p)}`:z(`rail.pr.many`,{count:f.length});return(0,V.jsxs)(`span`,{ref:o,className:`chip ${tE} ${p.tone}`,"aria-label":m,onMouseEnter:l?void 0:u,onMouseLeave:l?void 0:d,onClick:e=>{l&&(e.stopPropagation(),n&&!i?d():u())},children:[p.glyph,f.length>1&&(0,V.jsx)(`span`,{className:`font-sans`,children:f.length}),n&&(0,DH.createPortal)((0,V.jsx)(`div`,{ref:c,className:nE(i),style:{top:n.top-6,left:n.right+8},onMouseEnter:l?void 0:u,onMouseLeave:l?void 0:d,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),onMouseDown:e=>e.stopPropagation(),onContextMenu:e=>e.stopPropagation(),children:f.map(({task:e,pr:t,mark:n})=>{let r=OH(t?.url),i=t?.additions!==void 0&&t.deletions!==void 0;return(0,V.jsxs)(`button`,{type:`button`,className:`flex flex-col gap-1 rounded-[calc(var(--radius)-6px)] px-3 py-2 text-left font-sans enabled:hover:bg-hover`,disabled:!t?.url,onClick:()=>t?.url&&window.open(t.url,`_blank`,`noopener`),children:[(0,V.jsx)(`span`,{className:`truncate font-semibold text-ink`,children:t.title||e.label}),(0,V.jsxs)(`span`,{className:`flex items-baseline gap-0 text-meta leading-[inherit] whitespace-nowrap`,children:[(0,V.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.25 ${n.tone}`,children:[(0,V.jsx)(`span`,{className:`font-mono`,children:n.glyph}),kH(z(`rail.pr.state.${n.state}`))]}),(0,V.jsx)(`span`,{className:`overflow-hidden text-ellipsis whitespace-pre text-muted`,children:[...n.checks?[z(`rail.pr.checks.${n.checks}`)]:[],[r,t?.number===void 0?``:`#${t.number}`].filter(Boolean).join(` `)].filter(Boolean).map(e=>`, ${e}`).join(``)}),i&&(0,V.jsxs)(`span`,{className:`ml-auto flex gap-1.5 pl-3 tabular-nums`,children:[(0,V.jsxs)(`span`,{className:`text-success`,children:[`+`,t.additions]}),(0,V.jsxs)(`span`,{className:`text-error`,children:[`−`,t.deletions]})]})]})]},t.url??`${e.id}#${t.number??``}`)})}),document.body)]})}var NH=`~archived`;function PH(e,t,n,r){let i=t.filter(e=>!e.routine);if(i.length===0)return e;let a={id:NH,kind:`archived`,count:i.length,expanded:n};if(!n)return[...e,a];let o=xw([{repo:``,label:``,key:NH,tasks:i}],``,r,1,!1);return[...e,a,...o.filter(e=>e.kind!==`project`)]}function FH(e,t,n){let r=t.kind===`main`,i=e=>r?e.kind===`main`:e.kind!==`main`&&e.repo===t.repo&&!e.pinned==!t.pinned;if(t.id===n.id||!i(n))return null;let a=e.filter(i).sort((e,t)=>(e.order??e.rank)-(t.order??t.rank)).map(e=>e.id);return a.indexOf(n.id)-a.indexOf(t.id)}function IH(e,t,n,r){let i=FH(e,t,n);return i===null?null:r===`above`&&i>0?i-1:r===`below`&&i<0?i+1:i}function LH(e,t){return e.id===t.id?!1:e.kind===`main`?t.kind===`main`:t.kind!==`main`&&t.repo===e.repo}function RH(e,t,n,r,i){if(!LH(t,n))return null;if(t.kind===`main`){let i=IH(e,t,n,r);return i?{steps:i}:null}let a=n.pinned===!0||i&&r===`above`,o={...t,pinned:a},s=a===(n.pinned===!0)?IH(e.map(e=>e.id===t.id?o:e),o,n,r)??0:0,c=a===(t.pinned===!0)?{}:{pin:a};return`pin`in c||s!==0?{...c,steps:s}:null}var zH=e=>e===void 0||e.kind===`project`||e.kind===`state`?0:e.kind===`task`||e.kind===`pane`||e.kind===`round`?e.depth:1;function BH(e,t){let n=zH(e[t]),r=t+1;for(;r<e.length&&zH(e[r])>n;)r++;return r}function VH(e,t,n){let r=e.findIndex(e=>e.id===t),i=r<0?e:[...e.slice(0,r),...e.slice(BH(e,r))];for(let e=i.findIndex(e=>e.id===n)-1;e>=0;e--){let t=i[e];if(!t||t.kind===`project`||t.kind===`state`)return!0;if(t.kind===`task`&&t.depth===1&&t.task.kind!==`main`||t.kind===`round`&&t.depth===1)return!1}return!1}function HH(e,t){let n=zH(e[t]),r=[];for(let i=2;i<=n;i++){let a=t+1;for(;a<e.length&&zH(e[a])>i;)a++;let o=a<e.length&&zH(e[a])===i;r.push(i===n?o?`tee`:`elbow`:o?`pipe`:`blank`)}return r}function UH(e,t,n,r){let i=e.findIndex(e=>e.id===t);if(i<0||t===n)return e;let a=BH(e,i),o=e.slice(i,a),s=[...e.slice(0,i),...e.slice(a)],c=s.findIndex(e=>e.id===n);if(c<0)return e;let l=r===`above`?c:BH(s,c);return[...s.slice(0,l),...o,...s.slice(l)]}function WH(e,t,n,r,i){let[a,o]=(0,g.useState)(null),s=(0,g.useRef)(t);s.current=t;let[c,l]=(0,g.useState)(null),u=(0,g.useRef)(()=>o(null));(0,g.useEffect)(()=>{if(!c)return;let e=()=>{l(null),u.current()};if(t!==c)return e();let n=window.setTimeout(e,3e3);return()=>window.clearTimeout(n)},[t,c]);let d=(0,g.useRef)(null),f=(0,g.useRef)(null),p=()=>[...d.current?.querySelectorAll(`[data-row]`)??[]];(0,g.useLayoutEffect)(()=>{let e=f.current;if(!e||(f.current=null,window.matchMedia(`(prefers-reduced-motion: reduce)`).matches))return;let t=p().flatMap(t=>{let n=e.get(t.dataset.row??``),r=n===void 0?0:n-t.getBoundingClientRect().top;return r?[{el:t,dy:r}]:[]});for(let{el:e,dy:n}of t)e.style.transition=`none`,e.style.transform=`translateY(${n}px)`;d.current?.getBoundingClientRect();for(let{el:e}of t)e.style.transition=`transform 150ms ease-out`,e.style.transform=``,e.addEventListener(`transitionend`,()=>e.style.removeProperty(`transition`),{once:!0})});let m=(0,g.useRef)(null),h=(0,g.useRef)([]),_=(0,g.useRef)(new Map),v=(0,g.useRef)(0),y=(0,g.useRef)(0),b=e=>{m.current=e,o(e)},x=e=>!n||e.machine!==void 0?null:e.kind===`project`?t.find(t=>t.id===i(e.repo).mainTaskId)??null:e.kind===`task`&&e.depth===1&&e.task.kind!==`main`?e.task:null,S=e=>{let t=x(e);if(t)return{draggable:!0,onDragStart:n=>{n.dataTransfer.effectAllowed=`move`,n.dataTransfer.setData(`text/plain`,t.id),d.current=n.currentTarget.closest(`[data-rail-body]`),T(d.current);let r=h.current,i=r.findIndex(t=>t.id===e.id);v.current=r.slice(i,BH(r,i)).reduce((e,t,n)=>e+(_.current.get(t.id)?.height??0)+(n>0?_.current.get(t.id)?.gap??0:0),0),y.current=n.clientY,b({fromRow:e.id,from:t,toRow:e.id,to:t,side:`above`})},onDragEnd:()=>m.current&&b(null)}},C=(e,t,n)=>{let r=t;if(n.from.kind===`main`)for(;r>0&&e[r]?.kind!==`project`;)r--;let i=e[r],a=i&&x(i);return!i||!a||!LH(n.from,a)?null:{row:i.id,task:a}},w={onDragOver:e=>{let t=m.current;if(!t)return;e.preventDefault();let n=e.clientY-y.current;y.current=e.clientY;let r=e.target.closest(`[data-row]`)?.dataset.row,i=h.current,a=C(i,i.findIndex(e=>e.id===r),t);if(!a||a.row===t.fromRow)return;let o=e.currentTarget.querySelector(`[data-row="${CSS.escape(t.fromRow)}"]`)?.getBoundingClientRect().top;if(o===void 0||e.clientY>=o&&e.clientY<o+v.current)return;let s=e.clientY<o?`above`:`below`;(s===`above`?n>=0:n<=0)||(t.toRow!==a.row||t.side!==s)&&b({...t,toRow:a.row,to:a.task,side:s})},onDrop:n=>{let i=m.current;if(!i)return;n.preventDefault();let a=RH(t,i.from,i.to,i.side,VH(h.current,i.fromRow,i.toRow));m.current=null,r?u.current=()=>o(null):u.current=()=>{f.current=new Map(p().map(e=>[e.dataset.row??``,e.getBoundingClientRect().top])),o(null),HT(`default`),G(q(`tasks`,`sort.label`,{mode:q(`tasks`,`sort.modes.default`)}))},a?YT(e,i.from.id,a).finally(()=>l(s.current)):u.current()}},T=e=>{let t=[...e?.querySelectorAll(`[data-row]`)??[]];_.current=new Map(t.map((e,n)=>{let r=t[n-1],i=r?e.offsetTop-r.offsetTop-r.offsetHeight:0;return[e.dataset.row??``,{top:e.offsetTop,gap:i,height:e.offsetHeight}]}))},E=e=>{h.current=a?UH(e,a.fromRow,a.toRow,a.side):e;let t=new Map;if(!a)return t;let n=Math.min(...[..._.current.values()].map(e=>e.top));for(let[e,r]of h.current.entries()){let i=_.current.get(r.id);if(!i)return new Map;e>0&&(n+=i.gap),n!==i.top&&t.set(r.id,n-i.top),n+=i.height}return t};return{props:S,body:w,dragging:a?.fromRow??null,places:e=>{let t=E(e);return e=>{let n=t.get(e.id);return n?{"data-row":e.id,style:{transform:`translateY(${n}px)`}}:{"data-row":e.id}}}}}function GH({model:e,narrow:t,onSettings:n}){B();let r=v(e.selection),i=v(MN),a=$(`engines.skill.bannerHintWeb`,{engines:i.join(`, `)});return(0,V.jsxs)(`div`,{className:MM,children:[!t&&(0,V.jsx)(UP,{client:e.client,taskId:r.taskId,tabId:r.tabId}),(0,V.jsxs)(`div`,{className:NM,children:[(0,V.jsxs)(`button`,{type:`button`,className:`rail-nav-row ${PM(!1)}`,onClick:n,children:[(0,V.jsxs)(`svg`,{className:IM,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:[(0,V.jsx)(`path`,{d:`M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z`}),(0,V.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]}),(0,V.jsx)(`span`,{children:z(`rail.settings`)}),i.length>0&&(0,V.jsx)(`span`,{className:`ml-2 min-w-0 truncate text-meta text-subtle`,title:a,children:z(`rail.skillCue`)})]}),(0,V.jsx)(PF,{model:e,bindingId:`settings.open`})]})]})}function KH(e,t,n,r,i=null){let a=e=>e.kind===`task`&&e.task.kind===`main`&&e.fold===void 0&&e.task.id!==n&&e.task.id!==i&&(r?t[e.task.id]?.length===0:(t[e.task.id]?.length??0)===0),o=e.filter(e=>!a(e));return o.filter((e,t)=>{if(e.kind!==`project`&&e.kind!==`state`)return!0;let n=o[t+1];return n!==void 0&&n.kind!==`project`&&n.kind!==`state`})}var qH=_({});function JH(e,t,n){let r=qH.get()[`${e}::${t.id}`];return r&&r.sig===Nw(n)&&Ew(n.root).some(e=>e.id===r.leaf)?r.leaf:n.activeLeafId}function YH(e,t,n,r){qH.set({...qH.get(),[`${e}::${t}`]:{sig:Nw(n),leaf:r}})}function XH(e,t,n,r){YH(e,t.id,n,r),sa(EC(e,t.id,r))?.focus()}function ZH(e){let{taskId:t,tabId:n}=e.selection.get(),r=t?e.tabs.get()[t]?.find(e=>e.id===n):void 0;return t&&r?{taskId:t,tab:r}:null}async function QH(e,t,n){try{let r=await e.client.request(`tab.split`,t);await e.refreshTabsNow(),n?.(r)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}}function $H(e,t,n,r,i){let a=i??(n.split?JH(t,n,n.split):`leaf-1`),o=e.selection.get();(o.taskId!==t||o.tabId!==n.id)&&e.select(t,n.id);let s=sa(EC(t,n.id,a))?.size();QH(e,{taskId:t,tabId:n.id,action:`open`,direction:r,leafId:a,...s},e=>{e.changed?e.split&&YH(t,n.id,e.split,e.leaf):G(z(`layout.splitTooSmall`),`error`)})}function eU(e,t,n,r){let i=n.split,a=i?JH(t,n,i):r,o=()=>QH(e,{taskId:t,tabId:n.id,action:`close`,leafId:r},e=>{let i=e.split;if(!i)return;let o=a!==r&&Ew(i.root).some(e=>e.id===a);YH(t,n.id,i,o?a:i.activeLeafId)});if(!i||!jw(n,i,r)){o();return}W.set((0,V.jsx)(ur,{title:z(`confirm.closePaneTitle`,{pane:Aw(i,ww(n)).get(r)??r}),body:z(`confirm.closePaneBody`),confirmLabel:z(`menu.closePane`),onConfirm:o}))}function tU(e,t,n,r){let i=n.split;i&&W.set((0,V.jsx)(lr,{title:So(`split.renameTitle`),initial:Aw(i,ww(n)).get(r)??``,allowEmpty:!0,submitLabel:z(`dialog.save`),onSubmit:i=>QH(e,{taskId:t,tabId:n.id,action:`rename`,leafId:r,title:i})}))}function nU(e,t,n,r){return[{label:z(`menu.renamePane`),section:`split`,key:ro(`workspace.split.rename`)??void 0,run:()=>tU(e,t,n,r)},{label:z(`menu.closePane`),section:`split`,key:ii(`workspace.split.close`)||void 0,run:()=>eU(e,t,n,r)}]}function rU(e,t,n,r){return[{label:z(`menu.splitRight`),section:`split`,key:ro(`workspace.split.right`)??void 0,run:()=>$H(e,t,n,`right`,r)},{label:z(`menu.splitDown`),section:`split`,key:ro(`workspace.split.down`)??void 0,run:()=>$H(e,t,n,`down`,r)}]}function iU(e,t,n,r){let i=n.split,a=r??(i?JH(t,n,i):`leaf-1`);return[...rU(e,t,n,a),...Dw(i)?nU(e,t,n,a):[]]}function aU(e,t){let n=e.tabs.get()[t]??[],r=e.selection.get(),i=(r.taskId===t?n.find(e=>e.id===r.tabId):void 0)??Bi(n);return!i||!Mw(i)?[]:rU(e,t,i,i.split?JH(t,i,i.split):`leaf-1`)}function oU(e,{task:t,tab:n,leaf:r}){n.split&&XH(t.id,n,n.split,r),e.select(t.id,n.id)}function sU(e){let{row:t}=e,n=v(e.model.selection);v(qH);let r=n.taskId===t.task.id&&n.tabId===t.tab.id&&!!t.tab.split&&JH(t.task.id,t.tab,t.tab.split)===t.leaf;return(0,V.jsxs)(`button`,{type:`button`,className:`${tr({size:`pane`})} ${e.cursor?mE:``}`,"aria-current":r||void 0,onClick:e.onClick,onContextMenu:e.onMenu,...e.place,children:[(0,V.jsx)(`span`,{className:XT,"aria-hidden":`true`,children:e.guides?.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${nr} text-(length:--fs-meta) ${r?`text-ink`:`text-muted`}`,children:t.label})]})}function cU(e,t){let n=t?.trim()??``;return n&&e?.effortLevels?.includes(n)?n:``}function lU({model:e,taskId:t}){let[n,r]=(0,g.useState)([]),[i,a]=(0,g.useState)({}),[o,s]=(0,g.useState)(``),[c,l]=(0,g.useState)(``),[u,d]=(0,g.useState)(``),[f,p]=(0,g.useState)(!1),{busy:m,error:h,submit:_}=cr();(0,g.useEffect)(()=>{Promise.all([e.client.request(`engines.list`),e.client.request(`task.get`,{taskId:t})]).then(([e,t])=>{let n=xs(e.engines,t.task.engine).filter(e=>e.ready!==!1||e.id===t.task.engine),i=n.find(e=>e.id===t.task.engine)??n[0];r(n),a(t.task),s(i?.id??``),l(cU(i,t.task.effort)),d(i?.id===t.task.engine?t.task.model??``:``),p(!0)})},[e,t]);let v=n.find(e=>e.id===o),y=v?.effortLevels??[],b=y.length>0?[``,...y]:[],x=(v?.models??[]).map(e=>e.id).filter(e=>e.toLowerCase().includes(u.trim().toLowerCase())&&e!==u.trim()).slice(0,6),S=e=>{s(e);let t=n.find(t=>t.id===e);l(cU(t,e===i.engine?i.effort:void 0)),d(e===i.engine?i.model??``:``)},C=e=>{let t=n.findIndex(e=>e.id===o),r=n[Math.max(0,Math.min(n.length-1,t+e))];r&&S(r.id)},w=e=>{if(b.length===0)return;let t=Math.max(0,b.indexOf(c));l(b[Math.max(0,Math.min(b.length-1,t+e))]??``)},T=e=>{let t=e.target instanceof HTMLInputElement;if(e.key===`ArrowUp`&&!t)C(-1);else if(e.key===`ArrowDown`&&!t)C(1);else if((e.key===`ArrowLeft`||e.key===`h`)&&!t)w(-1);else if((e.key===`ArrowRight`||e.key===`l`)&&!t)w(1);else return;e.preventDefault()},E=()=>_(async()=>{if(!v)return;let n=y.length>0?c:void 0,r=v.acceptsModel?u.trim():void 0;(v.id!==i.engine||n!==void 0&&n!==(i.effort??``)||r!==void 0&&r!==(i.model??``))&&(await e.client.request(`task.setEngine`,{taskId:t,engine:v.id,...n===void 0?{}:{effort:n},...r===void 0?{}:{model:r}}),G(q(`tasks`,`toast.engineSwitched`,{engine:v.name})))});return(0,V.jsx)(sr,{title:q(`tasks`,`changeEngine.title`),wide:!0,children:(0,V.jsxs)(`form`,{className:Ln,onKeyDown:T,onSubmit:e=>{e.preventDefault(),E()},children:[(0,V.jsx)(`ul`,{className:jn,"aria-label":q(`tasks`,`changeEngine.title`),children:n.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":e.id===o,className:tr({selected:e.id===o}),onClick:()=>S(e.id),children:[(0,V.jsx)(`span`,{className:`${ar} text-accent`,children:e.id===o?`●`:` `}),(0,V.jsx)(`span`,{className:nr,children:e.name}),e.id===i.engine&&(0,V.jsx)(`span`,{className:`text-muted`,children:q(`tasks`,`changeEngine.current`)})]})},e.id))}),f&&v&&v.acceptsModel&&(0,V.jsxs)(`label`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`tasks`,`engineModel.label`)}),(0,V.jsx)(`input`,{className:tn,spellCheck:!1,placeholder:q(`tasks`,`engineModel.placeholder`),value:u,onChange:e=>d(e.target.value)}),x.length>0&&(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:x.map(e=>(0,V.jsx)(`button`,{type:`button`,className:An(),onClick:()=>d(e),children:e},e))})]}),b.length>0&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`m-0 font-sans text-meta font-medium normal-nums text-muted`,children:q(`tasks`,`changeEngine.effortLabel`)}),(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:b.map(e=>(0,V.jsx)(`button`,{type:`button`,"aria-pressed":e===c,className:An(e===c),onClick:()=>l(e),children:e===``?q(`tasks`,`changeEngine.noEffort`):e},e||`default`))})]}),(0,V.jsx)(`p`,{className:`keys-only ${Jt}`,children:(0,V.jsx)(kT,{text:[q(`tasks`,`changeEngine.footer.engine`),...v?.acceptsModel?[q(`tasks`,`changeEngine.footer.model`)]:[],...b.length>0?[q(`tasks`,`changeEngine.footer.effort`)]:[],q(`tasks`,`changeEngine.footer.set`),q(`tasks`,`changeEngine.footer.cancel`)].join(` · `)})}),h&&(0,V.jsx)(`p`,{className:`text-error`,children:h}),(0,V.jsx)(fr,{busy:m||!f,submitLabel:z(`taskops.set`)})]})})}function uU({model:e,task:t}){let[n,r]=(0,g.useState)(()=>Bs(e,`task.get`,{taskId:t.id})?.task??null),[i,a]=(0,g.useState)(null),{busy:o,error:s,submit:c}=cr();(0,g.useEffect)(()=>{Hs(e,`task.get`,{taskId:t.id}).then(e=>r(e.task)).catch(e=>a(K(e)))},[e,t.id]);let l=()=>c(async()=>{if(!n?.prompt)return;let t=(await e.client.request(`task.spawn`,{repo:n.repo,prompt:n.prompt,...n.engine?{engine:n.engine}:{},...n.baseRef?{baseBranch:n.baseRef}:{}})).taskIds[0];t&&e.selectWhenListed(t)});return(0,V.jsx)(sr,{title:q(`tasks`,`runAgain.title`),wide:!0,children:(0,V.jsxs)(`form`,{className:Ln,onSubmit:e=>{e.preventDefault(),l()},children:[(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`runAgain.source`,{title:t.label})}),(0,V.jsx)(`pre`,{className:Yt,children:n?.prompt??i??q(`tasks`,`fieldNotes.loading`)}),(0,V.jsx)(`p`,{className:Jt,children:q(`tasks`,`runAgain.hint`)}),s&&(0,V.jsx)(`p`,{className:`text-error`,children:s}),(0,V.jsx)(fr,{busy:o||!n?.prompt,submitLabel:q(`tasks`,`runAgain.confirm`)})]})})}function dU(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function fU({model:e,repo:t}){let[n,r]=(0,g.useState)({kind:`loading`}),[i,a]=(0,g.useState)(0),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)(null),u=(0,g.useRef)(null),d=()=>e.client.request(`notes.list`,{repo:t}).then(e=>r({kind:`ready`,notes:e.notes})).catch(e=>r({kind:`error`,message:K(e)}));(0,g.useEffect)(()=>void d(),[]);let f=n.kind===`ready`?n.notes:[];(0,g.useEffect)(()=>a(e=>Math.max(0,Math.min(e,f.length-1))),[f.length]),(0,g.useEffect)(()=>{u.current?.querySelector(`.is-selected`)?.scrollIntoView({block:`nearest`})},[i]);let p=async n=>{if(n.id!==void 0){l(null);try{await e.client.request(`notes.delete`,{repo:t,id:n.id}),s(null),await d()}catch(e){l(K(e))}}};return(0,V.jsx)(sr,{title:q(`tasks`,`fieldNotes.title`),wide:!0,children:(0,V.jsxs)(`div`,{className:Ln,onKeyDown:e=>{if(!o){if(e.key===`ArrowDown`||e.key===`j`)a(e=>Math.min(f.length-1,e+1));else if(e.key===`ArrowUp`||e.key===`k`)a(e=>Math.max(0,e-1));else if(e.key===`d`&&f[i]?.id!==void 0)s(f[i]??null);else return;e.preventDefault()}},children:[(0,V.jsx)(`p`,{className:`font-mono text-meta break-all text-muted`,children:t}),n.kind===`loading`&&(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.loading`)}),n.kind===`error`&&(0,V.jsx)(`p`,{className:`text-error`,children:n.message}),n.kind===`ready`&&f.length===0&&(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.empty`)}),f.length>0&&(0,V.jsx)(`ul`,{className:`m-0 list-none p-0 flex max-h-[44vh] flex-col gap-2 overflow-y-auto`,ref:u,children:f.map((e,t)=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,className:Xt(t===i),onClick:()=>a(t),autoFocus:t===0,children:[(0,V.jsxs)(`span`,{className:`font-mono text-meta whitespace-pre text-accent`,children:[t===i?`▸ `:` `,dU(e.at),`, `,e.author]}),(0,V.jsx)(`span`,{className:`text-ink whitespace-pre-wrap wrap-anywhere`,children:e.text})]})},`${e.at}:${t}`))}),o&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-sm border-hairline border-line bg-paper px-3 py-2.5`,children:[(0,V.jsx)(`p`,{children:(0,V.jsx)(`strong`,{children:q(`tasks`,`fieldNotes.confirmDelete.title`)})}),(0,V.jsx)(`p`,{className:`text-muted`,children:q(`tasks`,`fieldNotes.confirmDelete.body`,{text:o.text})}),c&&(0,V.jsx)(`p`,{className:`text-error`,children:c}),(0,V.jsxs)(`div`,{className:`actions flex items-center justify-end gap-3.5`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>s(null),children:z(`dialog.cancel`)}),(0,V.jsx)(`button`,{type:`button`,className:Pe({danger:!0}),onClick:()=>void p(o),children:z(`taskops.retire`)})]})]}),!o&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`keys-only font-sans text-meta text-subtle`,children:q(`tasks`,`fieldNotes.footerDeletable`)}),(0,V.jsxs)(`div`,{className:`actions flex items-center justify-end gap-3.5`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,disabled:f[i]?.id===void 0,onClick:()=>s(f[i]??null),children:z(`taskops.retire`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:Sn,children:z(`taskops.close`)})]})]})]})})}var pU=[`backlog`,`in_progress`,`in_review`,`done`,`canceled`,`error`],mU={backlog:`status.backlog`,in_progress:`status.inProgress`,in_review:`status.inReview`,done:`status.done`,canceled:`status.canceled`,error:`status.error`},hU=e=>({binding:e,key:ro(e)??void 0});async function gU(e,t){if(!e){G(z(`menu.nothingToCopy`,{what:t}),`error`);return}try{await navigator.clipboard.writeText(e),G(z(`menu.copied`,{text:e}))}catch{G(z(`menu.copyFailed`),`error`)}}function _U(e,t,n){let r=[{label:z(`menu.newTask`),section:`open`,run:()=>iO(t)}],i=n.mainTaskId;return i&&(n.first||r.push({label:q(`tasks`,`menu.moveToTop`),section:`edit`,run:()=>void e.client.request(`task.move`,{taskId:i,direction:`top`}).catch(e=>G(q(`tasks`,`toast.moveFailed`,{error:String(e)}),`error`))}),r.push({label:q(`tasks`,`menu.reorderProject`),section:`edit`,...hU(`sidebar.localMerge`),run:()=>yU(i)})),r.push({label:q(`tasks`,`menu.fieldNotes`),section:`notes`,run:()=>W.set((0,V.jsx)(fU,{model:e,repo:t}))}),i&&r.push({label:q(`tasks`,`menu.forgetProject`),section:`danger`,danger:!0,run:()=>W.set(pF(e,t,n.label))}),r}function vU(e){return[{label:z(`menu.newChatNoFolder`),section:`open`,run:()=>aO()},{label:z(`menu.newShell`),section:`open`,run:()=>void VC(e).catch(e=>G(String(e),`error`))}]}function yU(e){let t=!WT.get();t&&e!==void 0&&GT.set(e),KT(t),document.querySelector(`.rail`)?.focus()}function bU(e,t){let n=(e.tasks.get()?.tasks??[]).filter(e=>e.kind===`main`&&!e.machine&&e.repo!==t.repo).map(e=>e.repo),r=n.map(e=>{let t=e.slice(e.lastIndexOf(`/`)+1);return{value:e,label:n.filter(e=>e.endsWith(`/${t}`)).length>1?e:t}});return r.length===0?(G(q(`tasks`,`moveToProject.empty`),`error`),null):(0,V.jsx)(dr,{title:q(`tasks`,`moveToProject.title`),choices:r,onPick:async n=>{await e.client.request(`task.moveToProject`,{taskId:t.id,repo:n}),G(q(`tasks`,`toast.movedToProject`,{project:r.find(e=>e.value===n)?.label??n}))}})}function xU(e,t,n){let r=e.client,i=[];n&&(i.push({label:z(`menu.closeTab`),section:`tab`,run:()=>W.set((0,V.jsx)(ur,{title:z(`confirm.closeTabTitle`,{tab:n.title??n.engineName??n.id}),body:z(`confirm.closeTabBody`),confirmLabel:z(`menu.closeTab`),onConfirm:async()=>{await r.request(`tab.close`,{taskId:t.id,tabId:n.id}),await e.refreshTabsNow()}}))}),i.push(...iU(e,t.id,n))),i.push({label:z(`menu.newChat`),section:`open`,run:()=>void zC(e,t.id)}),i.push({label:z(`menu.newChatPick`),section:`open`,run:()=>W.set((0,V.jsx)(GC,{model:e,taskId:t.id}))}),i.push({label:z(`menu.continueEngine`),section:`open`,...hU(`chat.tab.fork`),run:()=>W.set((0,V.jsx)(GC,{model:e,taskId:t.id,context:`continue`,sourceTabId:n?.id}))}),i.push({label:z(`menu.newShell`),section:`open`,run:()=>void BC(e,t.id,{kind:`shell`}).catch(e=>G(String(e),`error`))}),t.startsAt&&(i.push({label:z(`menu.startNow`),section:`open`,run:()=>void e.client.request(`task.startScheduledNow`,{taskId:t.id}).catch(e=>G(String(e),`error`))}),i.push({label:z(`menu.cancelStart`),section:`open`,run:()=>void e.client.request(`task.cancelScheduledStart`,{taskId:t.id}).catch(e=>G(String(e),`error`))})),t.hasPrompt&&(i.push({label:q(`tasks`,`menu.runAgain`),section:`open`,run:()=>W.set((0,V.jsx)(uU,{model:e,task:t}))}),i.push({label:z(`menu.retryEdit`),section:`open`,run:()=>void WD(e,t)}));let a=!t.machine;if(a&&i.push({label:q(`tasks`,`menu.openEditor`),section:`open`,...hU(`tasks.openWorktree`),run:()=>void cF(e,t.id)}),t.groupId){let e=t.groupId;i.push({label:z(`compare.menu`),section:`open`,run:()=>ya(e)})}i.push({label:z(`menu.rename`),section:`edit`,...hU(`sidebar.rename`),run:()=>W.set((0,V.jsx)(lr,{title:z(`menu.rename`),initial:t.title,submitLabel:z(`dialog.save`),onSubmit:e=>r.request(`task.rename`,{taskId:t.id,title:e}).then(()=>{})}))}),t.kind!==`main`&&i.push({label:t.pinned?z(`menu.unpin`):z(`menu.pin`),section:`edit`,...hU(`sidebar.pin`),run:()=>void r.request(`task.pin`,{taskId:t.id,pinned:!t.pinned}).catch(e=>G(String(e),`error`))}),a&&i.push({label:q(`tasks`,`menu.reorder`),section:`edit`,...hU(`sidebar.localMerge`),run:()=>yU()}),i.push({label:z(`menu.setStatus`),section:`edit`,children:pU.map(e=>({label:z(mU[e]),checked:e===t.status,run:()=>void r.request(`task.setStatus`,{taskId:t.id,status:e}).catch(e=>G(String(e),`error`))}))}),a&&t.kind!==`main`&&!t.routine&&!t.parentTaskId&&!t.extraRepoCount&&i.push({label:q(`tasks`,`menu.moveToProject`),section:`edit`,run:()=>{let n=bU(e,t);n&&W.set(n)}}),a&&i.push({label:z(`menu.changeEngine`),section:`edit`,...hU(`tasks.cycleEngine`),run:()=>W.set((0,V.jsx)(lU,{model:e,taskId:t.id}))}),t.pr?.checkState===`failing`&&i.push({label:q(`tasks`,`menu.fixChecks`),section:`git`,key:ii(`files.fixChecks`),run:()=>void sF(e,t.id,z(`taskops.fixSent`))}),t.kind===`task`&&t.branch&&a&&i.push({label:q(`tasks`,`menu.syncBase`),section:`git`,key:ii(`files.syncBase`),run:()=>void aF(e,t.id)}),t.branch&&i.push({label:z(`menu.renameBranch`),section:`git`,...hU(`tasks.renameBranch`),run:()=>W.set((0,V.jsx)(lr,{title:z(`menu.renameBranch`),initial:t.branch,submitLabel:z(`dialog.save`),onSubmit:e=>r.request(`task.setBranch`,{taskId:t.id,branch:e}).then(()=>{})}))}),t.kind===`task`&&t.branch&&i.push({label:z(`menu.land`),section:`git`,run:()=>void rF(e,t)});let o=[{label:z(`menu.copyWhat.id`),run:()=>void gU(t.id,z(`menu.what.id`))}];return t.branch&&o.push({label:z(`menu.copyWhat.branch`),run:()=>void gU(t.branch,z(`menu.what.branch`))}),o.push({label:z(`menu.copyWhat.path`),run:()=>void r.request(`task.get`,{taskId:t.id}).then(e=>gU(e.task.worktreePath,z(`menu.what.path`))).catch(e=>G(String(e),`error`))}),i.push({label:z(`menu.copy`),section:`copy`,children:o}),t.kind!==`main`&&i.push({label:q(`tasks`,t.archived?`menu.unarchive`:`menu.archive`),section:`danger`,run:()=>void fF(e,t)}),i.push({label:z(`menu.removeSession`),section:`danger`,...hU(`sidebar.delete`),danger:!0,run:()=>W.set(t.kind===`main`?dF(e,t):uF(e,t))}),i}var SU=`rove.collapsedProjects`,CU=`rove.foldedTasks`,wU=`rove.openedTasks`,TU=600;function EU(e){try{let t=JSON.parse(localStorage.getItem(e)??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function DU(e,t){try{localStorage.setItem(e,JSON.stringify([...t]))}catch{}}var OU=(e,t)=>{let n=new Set(e);return n.delete(t)||n.add(t),n};function kU(){let e=v(VT),[t,n]=(0,g.useState)({active:!1,query:``}),[r,i]=(0,g.useState)(!1),a=()=>i(e=>!e),[o,s]=(0,g.useState)(()=>EU(SU)),c=e=>s(t=>{let n=OU(t,e);return DU(SU,n),n}),[l,u]=(0,g.useState)(()=>({folded:EU(CU),opened:EU(wU)}));return{sort:e,cycleSort:UT,search:t,setSearch:n,archivedOpen:r,toggleArchived:a,collapsed:o,toggleProject:c,hand:l,toggleTaskFold:(e,t)=>u(n=>{let r=new Set(n.folded),i=new Set(n.opened);return t?(r.delete(e),i.add(e)):(i.delete(e),r.add(e)),DU(CU,r),DU(wU,i),{folded:r,opened:i}})}}var AU=[`sidebar.nav`,`sidebar.goto`,`sidebar.select`,`sidebar.tree.open`,`sidebar.rename`,`sidebar.pin`,`sidebar.localMerge`,`sidebar.delete`,`sidebar.sort`,`sidebar.search.enter`,`tasks.renameBranch`,`tasks.cycleEngine`,`tasks.openWorktree`,`tasks.update`,`tasks.focusEngine`,`task.new`,`settings.open.sidebar`,`worktrees.open.sidebar`];function jU(e){for(let t of e)for(let e of AU){let n=ri(e).indexOf(t);if(n>=0)return{id:e,slot:n}}return null}function MU(e,t){let n=e.selection.get().taskId===t;e.select(t),ga(),n&&qi()}function NU(e,t,n,r){let{search:i,setSearch:a}=n,[o,s]=(0,g.useState)(null),c=(0,g.useRef)(0),l=t.filter(e=>e.kind!==`project`&&e.kind!==`state`),u=l.findIndex(e=>e.id===o);(0,g.useEffect)(()=>{u<0&&s(r.selectedId&&l.some(e=>e.id===r.selectedId)?r.selectedId:l[0]?.id??null)},[u,l,r.selectedId]);let d=l[u],f=d?.kind===`task`||d?.kind===`pane`?d.task.id:null;(0,g.useEffect)(()=>dA.set(f),[f]);let p=l[0]?.id??null;(0,g.useEffect)(()=>{i.query,i.active&&s(p)},[i.active,i.query,p]);let m=e=>{let t=l[Math.max(0,Math.min(l.length-1,e))];t&&s(t.id)},h=t=>{t?.kind===`archived`&&n.toggleArchived(),t?.kind===`task`&&e.select(t.task.id),t?.kind===`round`&&ya(t.groupId),t?.kind===`pane`&&oU(e,t),t&&t.kind!==`archived`&&ga()},_=(t,n)=>{t?.kind===`task`&&an(xU(e,t.task,null),n)?.run?.()},v=async t=>{if(t?.kind===`task`&&t.machine===void 0)try{let{engines:n}=await e.client.request(`engines.list`),r=xs(n).filter(e=>e.ready!==!1),i=r[(r.findIndex(e=>e.id===t.task.engine?.id)+1)%r.length];if(!i||i.id===t.task.engine?.id)return;await e.client.request(`task.setCommand`,{taskId:t.task.id,engine:i.id}),G(z(`rail.engineSwitched`,{engine:i.name}))}catch(e){G(z(`rail.engineSwitchFailed`,{error:e instanceof Error?e.message:String(e)}),`error`)}};return{cursor:o,setCursor:s,onKeyDown:t=>{let o=l[u],s=t.target instanceof HTMLInputElement;if(i.active){if(t.metaKey||t.ctrlKey||t.altKey)return;if(t.key===`Escape`)a({active:!1,query:``});else if(t.key===`Enter`)h(o),a({active:!1,query:``});else if(t.key===`ArrowDown`)m(u+1);else if(t.key===`ArrowUp`)m(u-1);else if(t.key===`Backspace`&&!s)a(e=>({...e,query:e.query.slice(0,-1)}));else if(t.key.length===1&&!s)a(e=>({...e,query:e.query+t.key}));else return;t.preventDefault();return}let d=jU(Za(t));if(WT.get()){let n=o?.kind===`task`&&o.machine===void 0;if(d?.id===`sidebar.nav`)n&&qT(e,o,d.slot%2==0?1:-1);else if(d?.id===`sidebar.localMerge`||t.key===`Enter`||t.key===`Escape`)KT(!1);else return;t.preventDefault();return}switch(d?.id){case`sidebar.nav`:m(d.slot%2==0?u+1:u-1);break;case`sidebar.goto`:d.slot%2==1?m(l.length-1):Date.now()-c.current<TU?(m(0),c.current=0):c.current=Date.now();break;case`sidebar.select`:case`sidebar.tree.open`:h(o);break;case`tasks.focusEngine`:qi();break;case`sidebar.rename`:case`sidebar.pin`:case`sidebar.delete`:case`tasks.renameBranch`:case`tasks.openWorktree`:_(o,d.id);break;case`tasks.cycleEngine`:v(o);break;case`sidebar.localMerge`:o?.machine===void 0&&KT(!0);break;case`sidebar.sort`:n.cycleSort(),G(q(`tasks`,`sort.label`,{mode:q(`tasks`,`sort.modes.${VT.get()}`)}));break;case`sidebar.search.enter`:a({active:!0,query:``});break;case`task.new`:r.onNewTask(o?.kind===`task`||o?.kind===`pane`?o.task.repo:void 0,o?.machine);break;case`settings.open.sidebar`:r.onSettings();break;case`worktrees.open.sidebar`:va(`worktrees`);break;case`tasks.update`:va(`update`);break;default:return}t.preventDefault()}}}var PU=(e,t,n)=>`~pane:${e}:${t}:${n}`;function FU(e,t){return e.flatMap(e=>e.kind===`task`?[e,...(t[e.task.id]??[]).flatMap(t=>{let n=t.split;if(!n||!Dw(n))return[];let r=Aw(n,ww(t));return Ew(n.root).map(n=>({id:PU(e.task.id,t.id,n.id),kind:`pane`,task:e.task,tab:t,leaf:n.id,label:r.get(n.id)??n.id,depth:e.depth+1,...e.machine===void 0?{}:{machine:e.machine}}))})]:[e])}function IU(e){let{row:t}=e;return(0,V.jsxs)(`button`,{type:`button`,className:`${tr({size:`pane`})} ${e.cursor?mE:``}`,title:z(`compare.menu`),onClick:()=>{e.onClick(),ya(t.groupId)},...e.place,children:[e.guides&&(0,V.jsx)(`span`,{className:`-my-0.75 -mr-0.5 ml-0 flex flex-none self-stretch`,"aria-hidden":`true`,children:e.guides.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${nr} text-(length:--fs-meta) text-muted`,children:t.title}),(0,V.jsxs)(`span`,{className:`${or} ml-auto items-center`,children:[e.repo&&(0,V.jsx)(`span`,{className:`max-w-24 truncate text-subtle`,children:e.repo}),(0,V.jsx)(`span`,{className:`text-subtle`,children:t.tasks.length}),(0,V.jsx)(dR,{status:iI(t.tasks)})]})]})}function LU(e){let t=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let e=t.current;return()=>{e&&document.activeElement===e&&e.closest(`nav`)?.focus()}},[]),(0,V.jsxs)(`div`,{className:`${sE} mono items-center`,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:`/`}),(0,V.jsx)(`input`,{ref:t,className:fE,type:`text`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,enterKeyHint:`go`,value:e.query,placeholder:z(`rail.searchPlaceholder`),"aria-label":z(`rail.searchPlaceholder`),onChange:t=>e.onChange(t.target.value)}),e.query&&(0,V.jsx)(`span`,{className:`ml-1.5 text-muted`,children:e.count})]})}var RU=450,zU=!1;typeof document<`u`&&(document.addEventListener(`keydown`,()=>{zU=!0},!0),document.addEventListener(`pointerdown`,()=>{zU=!1},!0));var BU=e=>{let t=e.querySelector(`.row-title`);return!!t&&t.scrollWidth>t.clientWidth};function VU(e,t){let[n,r]=(0,g.useState)(null),i=(0,g.useRef)(null),a=(0,g.useRef)(null),o=()=>{i.current!==null&&window.clearTimeout(i.current),i.current=null},s=e=>{o(),i.current=window.setTimeout(()=>r(e.getBoundingClientRect()),RU)},c=()=>{o(),r(null)};return(0,g.useEffect)(()=>{let e=a.current,n=e?.closest(`.rail`);if(!t||!e||!n||!zU||!n.contains(document.activeElement)||!BU(e))return;let i=()=>{o(),r(null)},c=e=>{e.relatedTarget instanceof Node&&n.contains(e.relatedTarget)||i()};return s(e),n.addEventListener(`focusout`,c),()=>{n.removeEventListener(`focusout`,c),i()}},[t]),(0,g.useEffect)(()=>()=>{i.current!==null&&window.clearTimeout(i.current)},[]),{ref:e=>{a.current=e},onPointerEnter:e=>{e.pointerType===`touch`||!BU(e.currentTarget)||s(e.currentTarget)},onPointerLeave:c,hide:c,tip:n?(0,DH.createPortal)((0,V.jsx)(`div`,{className:rE,role:`tooltip`,style:{top:n.top+n.height/2,left:n.right+8},children:e}),document.body):null}}function HU({at:e}){let t=new Date(e);if(Number.isNaN(t.getTime()))return null;let n=DD(t);return(0,V.jsxs)(`span`,{className:`text-subtle`,title:z(`rail.startsAt`,{time:t.toLocaleString()}),children:[`◷ `,n]})}var UU=150,WU=128,GU=0,KU=2,qU=[{reach:.96,grow:1.5,pulse:.9,done:104},{reach:.72,grow:1.1,pulse:1.2,done:84},{reach:1,grow:1.7,pulse:.7,done:116},{reach:.84,grow:1.3,pulse:1,done:96},{reach:.62,grow:1.2,pulse:1.3,done:80}],JU=`/-\\|`,YU=6,XU=(e,t,n,r)=>{let i=e[n];i&&t>=0&&t<i.length&&(i[t]=r)};function ZU(e,t){let n=Math.min(64,Math.max(24,Math.floor(t))),r=(Math.floor(e)%UU+UU)%UU,i=Array.from({length:11},()=>Array(n).fill(` `)),a=Array.from({length:11},()=>Array(n).fill(` `));XU(a,GU,0,`o`);let o=KU+2*(qU.length-1),s=Math.min(o,Math.floor(r/2));for(let e=1;e<=s;e++)XU(i,GU,e,`|`);if(qU.forEach((e,t)=>{let o=KU+2*t,s=2*o;if(r<s)return;XU(i,GU,o,`+`);let c=n-1-1,l=1+Math.max(1,Math.floor(c*e.reach)),u=Math.min(l,1+Math.floor((r-s)*e.grow)),d=r>=e.done&&u===l;for(let t=1;t<u;t++)!d&&((t-Math.floor(r*e.pulse))%YU+YU)%YU===0?XU(a,t,o,`=`):XU(i,t,o,`-`);d?XU(a,u,o,`o`):u<l?XU(a,u,o,`>`):XU(a,u,o,JU[(Math.floor(r/2)+t)%4]??`-`)}),r>=WU){let e=Math.ceil((r-WU+1)/22*(n+1));for(let t of[i,a])for(let r of t)r.fill(` `,0,Math.min(n,e))}return{base:i.map(e=>e.join(``)).join(`
128
128
  `),accent:a.map(e=>e.join(``)).join(`
129
- `)}}var ZU=`min-h-0 w-full overflow-y-auto`,QU=`mx-auto mt-[min(16vh,8rem)] flex w-full max-w-130 flex-col gap-4 px-5 pb-7`,$U=`relative grid w-full select-none overflow-hidden font-mono text-(length:--fs-body) text-subtle [contain:layout_paint]`,eW=`col-start-1 row-start-1 m-0 whitespace-pre font-[inherit] leading-[inherit]`,tW=`invisible absolute top-0 left-0 whitespace-pre`,nW=1.3,rW=`0000000000`,iW=1e3/12;function aW(){let e=(0,g.useRef)(null),t=(0,g.useRef)(null),n=(0,g.useRef)(null),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let i=e.current,a=t.current,o=n.current,s=r.current;if(!i||!a||!o||!s)return;let c=window.matchMedia(`(prefers-reduced-motion: reduce)`),l=24,u=90,d=0,f=0,p=0,m=-1,h=!0,g=()=>{let e=XU(u,l);o.textContent=e.base,s.textContent=e.accent},_=()=>{let e=a.getBoundingClientRect().width/10;e>0&&(l=Math.min(64,Math.max(24,Math.floor(i.clientWidth/e)))),g()},v=e=>{d=requestAnimationFrame(v);let t=p+Math.floor((e-f)/iW);t!==m&&(m=t,u=t,g())},y=()=>{cancelAnimationFrame(d),d=0},b=()=>{y(),c.matches?(u=90,g()):h&&document.visibilityState===`visible`&&(f=performance.now(),p=u,m=-1,d=requestAnimationFrame(v))},x=new ResizeObserver(_);x.observe(i),_(),b();let S=new IntersectionObserver(e=>{h=e[e.length-1]?.isIntersecting??!0,b()});return S.observe(i),c.addEventListener(`change`,b),document.addEventListener(`visibilitychange`,b),()=>{y(),x.disconnect(),S.disconnect(),c.removeEventListener(`change`,b),document.removeEventListener(`visibilitychange`,b)}},[]),(0,V.jsxs)(`div`,{ref:e,"aria-hidden":`true`,"data-field":`first-run-art`,className:$U,style:{height:`${11*nW}em`,lineHeight:nW},children:[(0,V.jsx)(`span`,{ref:t,className:tW,children:rW}),(0,V.jsx)(`pre`,{ref:n,className:eW}),(0,V.jsx)(`pre`,{ref:r,className:`${eW} text-accent`})]})}function oW(e){let t=q(`doctor`,`fix.humanOnlyWhy`),n=[];if(e.git||n.push({id:`git`,label:q(`doctor`,`fix.git`),action:q(`doctor`,`fix.gitAction`),why:t}),e.engines.length===0){let r=e.signedOut.length>0;n.push({id:`engine`,label:q(`doctor`,r?`fix.noEngineLogin`:`fix.noEngine`),action:q(`doctor`,r?`fix.noEngineLoginAction`:`fix.noEngineAction`,{list:e.signedOut.map(e=>e.id).join(`, `)}),why:t})}return n}function sW({model:e}){B(),v(Yr);let[t,n]=(0,g.useState)(()=>Bs(e,`welcome.env`)??null);(0,g.useEffect)(()=>{let t=!0;return Hs(e,`welcome.env`).then(e=>t&&n(e)).catch(()=>{}),()=>{t=!1}},[e]);let r=t===null?null:t.engines.length>0?{key:`enginesFound`,warn:!1,list:t.engines.map(e=>e.name).join(`, `)}:t.signedOut.length>0?{key:`enginesSignedOut`,warn:!0,list:t.signedOut.map(e=>e.name).join(`, `)}:{key:`enginesMissing`,warn:!0,list:``},i=t!==null&&(t.engines.length===0||!t.git)?oW(t):[];return(0,V.jsx)(`div`,{className:ZU,"data-field":`welcome`,children:(0,V.jsxs)(`div`,{className:QU,children:[(0,V.jsx)(aW,{}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-title font-semibold text-ink`,children:z(`firstRun.title`)}),(0,V.jsx)(`p`,{className:`m-0 font-sans text-body text-muted`,children:z(`firstRun.body`)})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`button`,{type:`button`,className:Pe(),"data-field":`start-first-task`,onClick:()=>iO(t?.start?.repo),children:z(`firstRun.start`)}),(0,V.jsx)(`span`,{className:`keys-only mono text-meta text-subtle`,children:ii(`task.new.global`)})]}),t!==null&&r!==null&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5 font-sans text-meta`,children:[(0,V.jsx)(`p`,{className:`m-0 ${r.warn?`text-warning`:`text-subtle`}`,children:q(`workspace`,`welcome.${r.key}`,{list:r.list})}),!t.git&&(0,V.jsx)(`p`,{className:`m-0 text-warning`,children:q(`workspace`,`welcome.gitMissing`)}),i.map(e=>(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsx)(`p`,{className:`m-0 text-warning`,children:e.label}),(0,V.jsx)(`p`,{className:`mono m-0 text-accent`,children:e.action}),(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:e.why})]},e.id)),i.length>0&&(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:q(`common`,`failureHint`,{command:`rove doctor`})})]})]})})}function cW(e,t){e.preventDefault(),on.set({x:e.clientX,y:e.clientY,items:t,target:e.currentTarget,fromKeyboard:e.button!==2})}function lW({model:e,narrow:t}){let n=B(),r=v(e.tasks),i=v(e.remote),a=EE(e),o=v(e.tabs),s=v(e.tabsSettled),c=v(e.selection),l=r?.tasks??[],u=r?.attention.filter(e=>e.unread).length??0,d=c.taskId,f=new Map([...l,...i].map(e=>[e.id,e])),p=OU(),m=v(WT),h=v(LT)===`state`,_=v(GT),y=e=>(h?mO:Cw)({tasks:l,remote:i,machines:a,sort:p.sort,query:e,fold:{...p.hand,selectedId:d??void 0}}),b=y(p.search.active?p.search.query:``),{groups:x}=b,S=p.search.active?b.rows:NH(Tw(PU(hO(GH(b.rows,o,c.taskId,s,_)),o),p.collapsed),r?.archived??[],p.archivedOpen,{...p.hand,selectedId:d??void 0}),C=e=>e.filter(e=>e.kind!==`project`&&e.kind!==`state`&&e.kind!==`round`),w=(n===`zh`?Ar:kr).machine,T=new Set(a.filter(e=>e.state!==`online`).map(e=>e.alias)),E=x.find(e=>e.tasks.some(e=>e.kind===`main`))?.repo,D=e=>({mainTaskId:x.find(t=>t.repo===e)?.tasks.find(e=>e.kind===`main`)?.id??null,label:KC(e),first:e===E}),O=UH(e,l,!p.search.active&&!h,p.sort==="default",D),k=O.places(S),A=()=>W.set((0,V.jsx)(qP,{model:e})),j=MU(e,S,p,{selectedId:d,onNewTask:iO,onSettings:A}),ee=_!==null&&S.some(e=>e.id===_),M=j.setCursor;(0,g.useEffect)(()=>{ee&&_!==null&&M(_)},[ee,_,M]);let N=C(y(``).rows).length,P=(0,g.useRef)(null),F=v(pI)&&!t,I=v(mI)&&F,te=t?l.find(e=>e.id===c.taskId&&!e.deleting)??null:null;return(0,V.jsxs)(`nav`,{className:`${aE} ${F?`is-folded`:``}`,ref:P,inert:F&&!I,"aria-hidden":F&&!I,onMouseEnter:F?()=>gI(!0):void 0,onMouseLeave:F?()=>gI(!1):void 0,tabIndex:0,onKeyDown:e=>{BF(`sidebar`),j.onKeyDown(e)},children:[(0,V.jsxs)(`header`,{className:oE,children:[(0,V.jsxs)(`span`,{className:`${Ht} mr-auto`,children:[(0,V.jsx)(`span`,{className:Ut,children:`[`}),` rove `,(0,V.jsx)(`span`,{className:Ut,children:`]`})]}),(0,V.jsxs)(`span`,{className:`relative`,children:[(0,V.jsx)(`button`,{type:`button`,className:`m-0 text-meta font-medium normal-nums inbox-chip relative ${$n} ${Ge} ${u>0?`text-accent`:`text-muted`}`,onClick:()=>W.set((0,V.jsx)(PT,{model:e})),children:z(`rail.inbox`,{count:u})}),(0,V.jsx)(NF,{model:e,bindingId:`inbox.show`,head:!0})]}),(0,V.jsx)(VM,{})]}),m&&(0,V.jsxs)(`div`,{className:`flex gap-1 px-3.5 pb-2 text-meta mono`,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:q(`tasks`,`moveChip`).trim()}),(0,V.jsx)(`span`,{className:`keys-only ml-1.5 text-muted`,children:(0,V.jsx)(kT,{text:z(`taskops.moveHint`)})})]}),p.search.active&&(0,V.jsx)(IU,{query:p.search.query,count:`${C(S).length}/${N}`,onChange:e=>p.setSearch(t=>({...t,query:e}))}),(0,V.jsx)(oL,{model:e}),(0,V.jsx)(wH,{model:e}),(0,V.jsxs)(`div`,{"data-rail-body":!0,className:pE(O.dragging!==null),...O.body,children:[r&&l.length===0&&i.length===0&&t&&(0,V.jsx)(sW,{model:e}),r&&l.length===0&&i.length===0&&!t&&(0,V.jsx)(`p`,{className:`m-0 px-2 py-3 font-mono text-meta text-subtle`,children:z(`rail.empty`)}),te&&(0,V.jsx)(GI,{title:te.title}),S.map((t,n)=>t.kind===`round`?(0,V.jsx)(FU,{row:t,guides:t.depth>1?VH(S,n):void 0,repo:h&&t.depth===1?fO(t.tasks[0]):void 0,cursor:t.id===j.cursor,place:k(t),onClick:()=>j.setCursor(t.id)},t.id):t.kind===`pane`?(0,V.jsx)(oU,{model:e,row:t,guides:VH(S,n),cursor:t.id===j.cursor,place:k(t),onClick:()=>{j.setCursor(t.id),aU(e,t),ga()},onMenu:n=>{j.setCursor(t.id),cW(n,tU(e,t.task.id,t.tab,t.leaf))}},t.id):(0,V.jsx)(uW,{row:t,guides:t.kind===`task`&&t.depth>1?VH(S,n):void 0,cloud:CE(t,a,w),repo:h&&t.kind===`task`&&t.depth===1?fO(t.task):void 0,tabs:t.kind===`task`?o[t.task.id]:void 0,selected:t.id===d,cursor:t.id===j.cursor,stale:t.machine!==void 0&&T.has(t.machine),collapsed:(t.kind===`project`||t.kind===`state`)&&p.collapsed.has(t.id),drag:O.props(t),dragging:O.dragging===t.id,place:k(t),onNewTask:t.kind===`project`?t.noProject?aO:()=>iO(t.repo,t.machine):void 0,moving:m&&t.machine===void 0&&(t.kind===`project`?!t.noProject&&D(t.repo).mainTaskId===j.cursor:t.id===j.cursor&&(t.kind!==`task`||t.task.kind!==`main`)),prTasks:t.kind===`task`?[t.task,...(t.fold?.descendantIds??[]).flatMap(e=>f.get(e)??[])]:void 0,rollup:t.kind===`task`&&t.fold?.collapsed?rI([t.task,...t.fold.descendantIds.flatMap(e=>f.get(e)??[])]):void 0,onToggleFold:()=>{t.kind===`task`&&p.toggleTaskFold(t.id,t.fold?.collapsed===!0),t.kind===`archived`&&p.toggleArchived()},onClick:()=>{j.setCursor(t.id),t.kind===`archived`&&p.toggleArchived(),(t.kind===`project`||t.kind===`state`)&&p.toggleProject(t.id),t.kind===`task`&&jU(e,t.task.id)},onMenu:n=>{if(t.kind!==`project`||t.machine===void 0){if(t.kind===`project`&&t.noProject){cW(n,_U(e));return}if(t.kind===`project`){let r=D(t.repo);r.mainTaskId&&S.some(e=>e.id===r.mainTaskId)&&j.setCursor(r.mainTaskId),cW(n,gU(e,t.repo,r));return}t.kind===`task`&&(j.setCursor(t.id),cW(n,pW(fW(bU(e,t.task,null),t.fold,()=>p.toggleTaskFold(t.id,t.fold?.collapsed===!0)),iU(e,t.task.id))))}}},t.id))]}),(0,V.jsx)(WH,{model:e,narrow:t,onSettings:A}),(0,V.jsx)(KI,{pane:`sidebar`}),!t&&!F&&(0,V.jsx)(BI,{rail:P})]})}function uW(e){let{row:t}=e,n=BU(t.kind===`task`?t.task.label:``,e.cursor&&t.kind===`task`),r=e.cursor?mE:``;if(t.kind===`project`||t.kind===`state`)return(0,V.jsxs)(`h2`,{className:hE({moving:e.moving,dragging:e.dragging}),onContextMenu:e.onMenu,...e.place,...e.drag,children:[(0,V.jsxs)(`button`,{type:`button`,className:_E,title:t.kind===`project`&&!t.noProject?t.repo:void 0,"aria-expanded":!e.collapsed,onClick:e.onClick,children:[(0,V.jsx)(`span`,{className:`truncate`,children:t.label}),t.kind===`state`&&(0,V.jsx)(`span`,{className:`font-normal text-subtle`,children:t.count}),(0,V.jsx)(Fa,{right:e.collapsed,className:vE(!!e.collapsed)})]}),e.onNewTask&&t.kind===`project`&&(0,V.jsx)(`button`,{type:`button`,className:yE,title:z(`rail.newTask`),onClick:e.onNewTask,children:`+`})]});if(t.kind===`archived`)return(0,V.jsx)(`button`,{type:`button`,className:`${tr({moving:e.moving||e.dragging})} ${r}`,"aria-expanded":t.expanded,onClick:e.onClick,...e.place,children:(0,V.jsx)(`span`,{className:`${rr} ${e.stale?`text-subtle`:`text-muted`}`,children:q(`tasks`,`archivedRow`,{count:t.count})})});let i=t.task,a=i.rowStatus?.kind===`running`,o=JP(i);return(0,V.jsxs)(`button`,{type:`button`,ref:n.ref,className:`${tr({selected:e.selected,moving:e.moving||e.dragging})} ${r}`,onClick:e.onClick,onContextMenu:e.onMenu,onPointerEnter:n.onPointerEnter,onPointerLeave:n.onPointerLeave,...e.place,...e.drag,children:[n.tip,e.guides&&(0,V.jsx)(`span`,{className:`-my-0.75 -mr-0.5 ml-0 flex flex-none self-stretch`,"aria-hidden":`true`,children:e.guides.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${rr} ${e.stale?`text-subtle`:``} ${a?ir:``}`,children:t.attempt??i.label}),(0,V.jsxs)(`span`,{className:`${or} ml-auto items-center`,children:[e.repo&&(0,V.jsx)(`span`,{className:`max-w-24 truncate text-subtle`,children:e.repo}),t.level!==void 0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:t.level}),(i.extraRepoCount??0)>0&&(0,V.jsxs)(`span`,{className:`text-subtle`,title:z(`rail.extraRepos`,{count:i.extraRepoCount??0}),children:[`+`,i.extraRepoCount]}),o&&(0,V.jsxs)(`span`,{className:`text-subtle tabular-nums`,title:z(`rail.todos`,o),children:[o.done,`/`,o.total]}),t.fold?.collapsed&&(0,V.jsx)(dW,{count:t.fold.count,onUnfold:e.onToggleFold}),i.kept&&(0,V.jsx)(`span`,{className:`text-accent`,title:z(`compare.kept`),children:`✓`}),i.pinned&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`▴`}),i.startsAt&&(0,V.jsx)(VU,{at:i.startsAt}),(0,V.jsx)(jH,{tasks:e.prTasks??[i],onOpen:n.hide}),(0,V.jsx)(uR,{status:t.fold?.collapsed?e.rollup:i.rowStatus}),e.cloud&&(0,V.jsx)(wE,{label:e.cloud})]})]})}function dW(e){let t=q(`tasks`,`menu.expandChildren`);return(0,V.jsxs)(`span`,{role:`button`,tabIndex:-1,"aria-label":t,"aria-expanded":!1,className:`chip text-muted ${eE}`,title:t,onClick:t=>{t.stopPropagation(),e.onUnfold()},children:[e.count,(0,V.jsx)(Fa,{right:!0})]})}function fW(e,t,n){if(!t)return e;let r={label:q(`tasks`,t.collapsed?`menu.expandChildren`:`menu.collapseChildren`),section:`open`,run:n},i=e.map(e=>e.section).lastIndexOf(`open`);return[...e.slice(0,i+1),r,...e.slice(i+1)]}function pW(e,t){let n=e.map(e=>e.section).lastIndexOf(`open`);return[...e.slice(0,n+1),...t,...e.slice(n+1)]}function mW(e){return e===`localhost`||e.endsWith(`.localhost`)||e===`[::1]`||/^127(\.\d{1,3}){3}$/.test(e)}var hW=/^(localhost|127(\.\d{1,3}){3}|\[::1\])(:\d+)?([/?#]|$)/i,gW=/^[a-z][a-z0-9+.-]*:(?!\d+([/?#]|$))/i;function _W(e){let t=e.trim();if(!t||/\s/.test(t)||gW.test(t)&&!/^https?:\/\//i.test(t))return null;let n=/^https?:\/\//i.test(t)?t:hW.test(t)?`http://${t}`:`https://${t.replace(/^\/\//,``)}`;try{let e=new URL(n);return e.hostname?e.href:null}catch{return null}}function vW(e,t,n=mW(t.hostname)){let r=new URL(e);return r.origin===t.origin?`self`:mW(r.hostname)?n?`yes`:`remote`:r.protocol===`https:`?`yes`:`unreachable`}function yW(e,t,n){let r=new URL(e).host;return t===`self`?{key:`self`,host:r}:t===`remote`?{key:`remote`,host:r}:t===`unreachable`?{key:`noFrame`,host:r}:n&&!n.reachable?{key:`unreachable`,host:r}:n&&!n.frameable?{key:`refuses`,host:r}:null}var bW=6e4,xW=new Map;function SW(e){let t=xW.get(e);return t&&Date.now()-t.at<bW?t:null}function CW(e,t,n){let[,r]=(0,g.useState)(0);(0,g.useEffect)(()=>{if(!n||SW(t))return;let i=!0;return e.request(`browser.probe`,{url:t,origin:window.location.origin}).then(e=>xW.set(t,{probe:e,at:Date.now()}),()=>xW.set(t,{probe:null,at:Date.now()})).then(()=>i&&r(e=>e+1)),()=>{i=!1}},[e,t,n]);let i=n?SW(t):null;return{pending:n&&!i,probe:i?.probe??null}}function wW({d:e}){return(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:e})})}var TW=`M6.5 3.5h-3v9h9v-3M9.5 3.5h3v3M12.5 3.5l-5 5`;function EW({model:e,tab:t,onNavigate:n,onStep:r}){B();let i=ak(t),[a,o]=(0,g.useState)(i),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(0),d=v(e.client.conn).hello?.peer?.local,f=i?vW(i,window.location,d):null;(0,g.useEffect)(()=>{o(i),c(!1)},[i]);let p=e=>{let t=_W(e);c(t===null&&e.trim()!==``),t!==null&&(o(t),t===i?u(l+1):n(t))},m=i?new URL(i).hostname:``,h=f===`yes`&&i.startsWith(`https:`)&&!mW(m),{pending:_,probe:y}=CW(e.client,i,h),b=i&&f?yW(i,f,y):null,x=f===`yes`&&!b&&!_,S=b?z(`browser.${b.key}`,{host:b.host}):f===null?z(s?`browser.invalid`:`browser.empty`):null;return(0,V.jsxs)(`div`,{className:PI,children:[(0,V.jsxs)(`form`,{className:FI,onSubmit:e=>{e.preventDefault(),p(a)},children:[(0,V.jsx)(`button`,{type:`button`,className:yI({small:!0}),disabled:t.at<=0,title:z(`browser.back`),"aria-label":z(`browser.back`),onClick:()=>r(t.at-1),children:(0,V.jsx)(wW,{d:`M10 3.5 5.5 8l4.5 4.5`})}),(0,V.jsx)(`button`,{type:`button`,className:yI({small:!0}),disabled:t.at>=t.urls.length-1,title:z(`browser.forward`),"aria-label":z(`browser.forward`),onClick:()=>r(t.at+1),children:(0,V.jsx)(wW,{d:`M6 3.5 10.5 8 6 12.5`})}),(0,V.jsx)(`button`,{type:`button`,className:yI({small:!0}),disabled:!x,title:z(`browser.reload`),"aria-label":z(`browser.reload`),onClick:()=>u(l+1),children:(0,V.jsx)(wW,{d:`M12.5 8a4.5 4.5 0 1 1-1.4-3.3M12.5 2.5v2.7H9.8`})}),(0,V.jsx)(`input`,{className:`browser-url mono ${II}`,value:a,placeholder:z(`browser.placeholder`),"aria-label":z(`browser.address`),"aria-invalid":s,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,inputMode:`url`,onChange:e=>o(e.target.value)}),i?(0,V.jsx)(`a`,{className:yI({small:!0}),href:i,target:`_blank`,rel:`noopener noreferrer`,title:z(`browser.openTab`),"aria-label":z(`browser.openTab`),children:(0,V.jsx)(wW,{d:TW})}):(0,V.jsx)(`button`,{type:`button`,className:yI({small:!0}),disabled:!0,"aria-label":z(`browser.openTab`),children:(0,V.jsx)(wW,{d:TW})})]}),x?(0,V.jsx)(`iframe`,{className:LI,src:i,title:i,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups`,referrerPolicy:`no-referrer`},`${i}#${l}`):S?(0,V.jsx)(`p`,{className:NI,children:S}):null]})}var DW=3;function OW({model:e,task:t}){B();let n=t.autoFixCi,r=n=>void e.client.request(`task.autoFixCi`,{taskId:t.id,enabled:n}).catch(e=>G(e instanceof Error?e.message:String(e),`error`));return(0,V.jsx)(`div`,{className:`flex items-center gap-3 px-2 pt-1 font-mono text-meta`,children:n?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:n.stopped?AT.attention:`text-muted`,title:z(`files.autoFix.hint`),children:z(n.stopped?`files.autoFix.stopped`:`files.autoFix.count`,{n:n.attempts,max:DW})}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>r(!1),children:z(`files.autoFix.off`)})]}):(0,V.jsx)(H,{hit:`tight`,title:z(`files.autoFix.hint`),onClick:()=>r(!0),children:z(`files.autoFix.on`)})})}function kW(e){let t=e.pr;return!!t&&t.number!==void 0&&!e.machine&&(t.lifecycle===`open`||t.lifecycle===`ready_to_merge`)}function AW(e){let t={fail:0,pending:0,pass:0,skipped:0};for(let n of e)t[n.state]++;return t}function jW(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m${String(t%60).padStart(2,`0`)}s`:`${Math.floor(n/60)}h${String(n%60).padStart(2,`0`)}m`}function MW(e){let t=[],n=e.mergeState.toUpperCase();e.draft&&t.push({key:`files.merge.draft`,tone:`warning`}),e.mergeable.toUpperCase()===`CONFLICTING`||n===`DIRTY`?t.push({key:`files.merge.conflicts`,tone:`attention`}):n===`BEHIND`?t.push({key:`files.merge.behind`,tone:`warning`}):n===`UNSTABLE`?t.push({key:`files.merge.unstable`,tone:`warning`}):n===`BLOCKED`?t.push({key:`files.merge.blocked`,tone:`warning`}):n===`CLEAN`&&!e.draft&&t.push({key:`files.merge.clean`,tone:`success`});let r=e.review.toUpperCase();return r===`APPROVED`?t.push({key:`files.merge.approved`,tone:`success`}):r===`CHANGES_REQUESTED`?t.push({key:`files.merge.changes`,tone:`attention`}):r===`REVIEW_REQUIRED`&&t.push({key:`files.merge.reviewRequired`,tone:`warning`}),t}var NW=`flex flex-col gap-0.5 px-2 pb-2 font-mono text-meta`,PW=`flex items-start gap-2`,FW=`flex min-w-0 flex-1 flex-wrap items-center gap-x-2 text-left text-ink`,IW={pass:{glyph:`✓`,tone:`success`},fail:{glyph:`✗`,tone:`attention`},pending:{glyph:`●`,tone:`warning`},skipped:{glyph:`–`,tone:`muted`}};function LW({model:e,task:t}){B();let n=t.pr,r=t.id,[i,a]=(0,g.useState)(()=>Bs(e,`pr.checks`,{taskId:r})??null),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)({}),[u,d]=(0,g.useState)(0),f=`${n?.number}:${n?.checkState}:${n?.mergeable}:${n?.reviewDecision}`;(0,g.useEffect)(()=>{let t=!0,n={taskId:r};return e.client.request(`pr.checks`,u>0?{...n,fresh:!0}:n).then(r=>{t&&(Vs(e,`pr.checks`,n,r),a(r))},e=>t&&a({outcome:`unavailable`,detail:e instanceof Error?e.message:String(e)})),()=>{t=!1}},[e,r,f,u]);let p=t=>{let n=`${t.runId}:${t.name}`;if(c[n]){l(({[n]:e,...t})=>t);return}l(e=>({...e,[n]:{state:`loading`}})),e.client.request(`pr.checkLog`,{taskId:r,runId:t.runId,job:t.name}).then(e=>e.outcome===`ok`?{state:`text`,text:e.tail}:e.outcome===`none`?{state:`note`,text:z(`files.checks.noLog`)}:{state:`note`,text:z(`files.checks.logUnavailable`,{detail:e.detail})}).catch(e=>({state:`note`,text:z(`files.checks.logUnavailable`,{detail:e instanceof Error?e.message:String(e)})})).then(e=>l(t=>n in t?{...t,[n]:e}:t))},m=(0,V.jsx)(H,{hit:`tight`,className:`flex-none whitespace-nowrap`,onClick:()=>d(e=>e+1),children:z(`files.checks.refresh`)});if(!i)return(0,V.jsx)(`div`,{className:NW,children:(0,V.jsx)(`div`,{className:PW,children:(0,V.jsxs)(`span`,{className:`flex-1 text-muted`,children:[z(`files.checks.title`),` `,z(`files.checks.loading`)]})})});if(i.outcome!==`ok`)return(0,V.jsx)(`div`,{className:NW,children:(0,V.jsxs)(`div`,{className:PW,children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 text-muted wrap-anywhere`,children:i.outcome===`none`?z(`files.checks.none`):z(`files.checks.unavailable`,{detail:i.detail})}),m]})});let h=AW(i.checks),_=o??(h.fail>0||h.pending>0),v=MW(i);return(0,V.jsxs)(`div`,{className:NW,children:[(0,V.jsxs)(`div`,{className:PW,children:[(0,V.jsxs)(H,{variant:`row`,className:FW,"aria-expanded":_,disabled:i.total===0,onClick:()=>s(!_),children:[i.total>0&&(0,V.jsx)(Fa,{right:!_}),(0,V.jsx)(`span`,{children:i.total===0?z(`files.checks.none`):z(`files.checks.summary`,{pass:h.pass+h.skipped,total:i.total})}),h.fail>0&&(0,V.jsx)(`span`,{className:AT.attention,children:z(`files.checks.failed`,{count:h.fail})}),h.pending>0&&(0,V.jsx)(`span`,{className:AT.warning,children:z(`files.checks.running`,{count:h.pending})}),v.map(e=>(0,V.jsx)(`span`,{className:AT[e.tone],children:z(e.key)},e.key))]}),m]}),_&&i.checks.map(e=>{let{glyph:t,tone:n}=IW[e.state],r=`${e.runId}:${e.name}`,i=c[r];return(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 pl-4`,children:[(0,V.jsx)(`span`,{className:`w-[1ch] flex-none text-center ${AT[n]}`,children:t}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:e.name,children:e.name}),e.durationMs!==null&&(0,V.jsx)(`span`,{className:`flex-none text-subtle`,children:jW(e.durationMs)}),e.state===`fail`&&e.runId&&(0,V.jsx)(H,{hit:`tight`,className:`flex-none whitespace-nowrap`,onClick:()=>p(e),children:z(i?`files.checks.hideLog`:`files.checks.log`)})]}),i&&(0,V.jsx)(`pre`,{className:`m-0 ml-4 mb-1 max-h-40 overflow-y-auto rounded-sm border-hairline border-line bg-inset px-2 py-1.5 whitespace-pre-wrap wrap-anywhere text-muted`,children:i.state===`loading`?z(`files.checks.loading`):i.text})]},`${e.name}:${e.url}`)}),_&&i.total>i.checks.length&&(0,V.jsx)(`span`,{className:`pl-4 text-subtle`,children:z(`files.checks.more`,{count:i.total-i.checks.length})})]})}function RW({model:e,task:t}){return kW(t)?(0,V.jsxs)(`div`,{onKeyDown:e=>e.stopPropagation(),children:[(0,V.jsx)(LW,{model:e,task:t}),(0,V.jsx)(OW,{model:e,task:t})]}):null}function zW(e,t){let n={children:new Map,file:!1};for(let t of e){let e=n;for(let n of t.split(`/`)){let t=e.children.get(n);t||(t={children:new Map,file:!1},e.children.set(n,t)),e=t}e.file=!0}let r=[],i=(e,n,a)=>{let o=[...e.children].sort(([e,t],[n,r])=>{let i=t.children.size>0&&!t.file;return i===(r.children.size>0&&!r.file)?e.localeCompare(n):i?-1:1});for(let[e,s]of o){let o=s.children.size>0&&!s.file,c=o?`${n}${e}/`:`${n}${e}`,l=o&&t.has(c);r.push({path:c,name:e,depth:a,dir:o,open:l}),l&&i(s,c,a+1)}};return i(n,``,0),r}var BW={start:`\x1B[200~`,end:`\x1B[201~`};function VW(e,t){return e.engineTarget(t).tabId??e.tabs.get()[t]?.find(e=>e.kind===`engine`)?.id}async function HW(e,t,n){let r=VW(e,t);if(!r)return G(z(`files.stripNoEngine`),`error`),!1;try{return e.selection.get().tabId!==r&&e.select(t,r),await e.client.request(`term.input`,{stream:EC(t,r),data:`${BW.start}${n}${BW.end}`}),G(z(`files.stripFilled`)),!0}catch(e){return G(e instanceof Error?e.message:String(e),`error`),!1}}var UW=`w-full min-w-0 rounded-sm border-hairline border-line bg-paper px-2 py-1 font-mono text-meta text-ink outline-none placeholder:text-subtle focus-visible:border-accent`,WW=`${UW} min-h-24 resize-none leading-[1.45]`,GW=e=>`min-w-0 flex-1 cursor-text break-words text-left font-mono text-meta ${e?`text-subtle line-through`:`text-ink`}`,KW=700;function qW({model:e,task:t}){B();let n=t.todos??[],[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(null),[s,c]=(0,g.useState)(t.notes??``),l=(0,g.useRef)(!1),u=(0,g.useRef)(t.notes??``),d=(0,g.useRef)(null);(0,g.useEffect)(()=>{l.current||(u.current=t.notes??``,c(t.notes??``))},[t.notes]),(0,g.useEffect)(()=>()=>{d.current!==null&&window.clearTimeout(d.current)},[]);let f=n=>e.client.request(`task.notes`,{taskId:t.id,...n}).catch(e=>G(String(e),`error`)),p=e=>{d.current!==null&&window.clearTimeout(d.current),d.current=null,e!==u.current&&(u.current=e,f({notes:e}))},m=()=>{let e=r.trim();e!==``&&(i(``),f({ops:[{op:`add`,text:e}]}))},h=()=>{if(!a)return;let e=a.text.trim(),t=n.find(e=>e.id===a.id)?.text;o(null),e===``?f({ops:[{op:`remove`,id:a.id}]}):e!==t&&f({ops:[{op:`edit`,id:a.id,text:e}]})},_=XP(t);return(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 font-mono text-meta`,onKeyDown:e=>e.stopPropagation(),children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[n.map(e=>(0,V.jsxs)(`div`,{className:`flex items-start gap-2 py-0.5`,children:[(0,V.jsx)(H,{hit:`tight`,className:e.done?`text-subtle`:void 0,"aria-label":z(e.done?`files.todoUncheck`:`files.todoCheck`,{text:e.text}),onClick:()=>void f({ops:[{op:`check`,id:e.id,done:!e.done}]}),children:e.done?`[x]`:`[ ]`}),a?.id===e.id?(0,V.jsx)(`input`,{className:UW,value:a.text,maxLength:500,autoFocus:!0,"aria-label":z(`files.todoEdit`),onChange:t=>o({id:e.id,text:t.target.value}),onBlur:h,onKeyDown:e=>{e.key===`Enter`?h():e.key===`Escape`&&o(null)}}):(0,V.jsx)(H,{variant:`row`,className:GW(e.done),title:z(`files.todoEdit`),onClick:()=>o({id:e.id,text:e.text}),children:e.text}),(0,V.jsx)(H,{hit:`tight`,className:`text-subtle`,"aria-label":z(`files.todoRemove`,{text:e.text}),onClick:()=>void f({ops:[{op:`remove`,id:e.id}]}),children:`×`})]},e.id)),(0,V.jsx)(`input`,{className:UW,value:r,maxLength:500,placeholder:z(`files.todoAdd`),"aria-label":z(`files.todoAdd`),autoComplete:`off`,enterKeyHint:`done`,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&m()}})]}),(0,V.jsx)(`div`,{className:`flex justify-end`,children:(0,V.jsx)(H,{disabled:!_,title:_?z(`files.todoSendHint`,{count:YP(t).length}):z(`files.todoNoneOpen`),onClick:()=>_&&void HW(e,t.id,_),children:z(`files.todoSend`)})}),(0,V.jsx)(`textarea`,{className:WW,value:s,maxLength:2e4,spellCheck:!1,placeholder:z(`files.notesPlaceholder`),"aria-label":z(`files.notesLabel`),onFocus:()=>{l.current=!0},onChange:e=>{c(e.target.value),d.current!==null&&window.clearTimeout(d.current);let t=e.target.value;d.current=window.setTimeout(()=>p(t),KW)},onBlur:e=>{l.current=!1,p(e.target.value)}})]})}function JW(e){let t=e.kind===`task`&&!e.noWorktree&&!e.machine&&!e.archived,n=e.changes;return t&&!!n&&`added`in n&&n.added+n.deleted>0}function YW(e){return[...JW(e)?[`commit`]:[],...XW(e)]}function XW(e){let t=e.pr;if(!t)return e.kind===`task`&&!e.noWorktree&&!e.machine&&!e.archived&&!e.sessionPrs?.length?[`createPR`]:[];if(t.lifecycle===`merged`)return e.archived||e.kind===`main`?[]:[`archive`];if(t.lifecycle!==`open`&&t.lifecycle!==`ready_to_merge`)return[];let n=[];return((t.mergeable??``).toUpperCase()===`CONFLICTING`||e.prChip===`conflict`)&&n.push(`conflicts`),t.checkState===`failing`&&n.push(`fixCI`),(t.reviewDecision??``).toUpperCase()===`CHANGES_REQUESTED`&&n.push(`comments`),n}async function ZW(e,t,n){try{let r=await e.client.request(`task.prompt`,{taskId:t.id,kind:n});r.outcome===`unavailable`?G(z(`files.stripUnavailable`,{detail:r.detail??``}),`error`):r.outcome===`none`||!r.prompt?G(z(`files.stripNothing`),`error`):await HW(e,t.id,r.prompt)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}}var QW={commit:`files.stripCommit`,createPR:`files.stripCreate`,conflicts:`files.stripConflicts`,fixCI:`files.stripFixCi`,comments:`files.stripComments`,archive:`files.stripArchive`};function $W({model:e,task:t}){let n=YW(t);return n.length===0?null:(0,V.jsx)(`div`,{className:`flex flex-wrap justify-end gap-x-3.5 gap-y-1 px-2 pb-2 font-mono text-meta whitespace-nowrap`,children:n.map(n=>(0,V.jsx)(H,{onClick:()=>n===`archive`?void dF(e,t):void ZW(e,t,n),children:z(QW[n])},n))})}var eG=e=>`${e.files} file${e.files===1?``:`s`}, +${e.added} −${e.removed}${e.base?` vs ${e.base}`:``}`;function tG(e){let t=[`**${e.title}**`,`Branch \`${e.branch}\` · ${eG(e)}`];return e.pr?.url&&t.push(`PR: ${e.pr.url}`),e.checks&&t.push(`Checks: ${e.checks}`),e.text&&t.push(``,e.reported?e.text:`Last reply:\n${e.text}`),e.openTodos.length>0&&t.push(``,`Still open:`,...e.openTodos.map(e=>`- ${e}`)),t.join(`
130
- `)}function nG(e){let t=[`## Summary`,``,e.text??e.title,``,`## Changes`,``,`- ${eG(e)} on \`${e.branch}\``];return e.checks&&t.push(`- Checks: ${e.checks}`),e.openTodos.length>0&&t.push(``,`## Not done`,``,...e.openTodos.map(e=>`- [ ] ${e}`)),t.join(`
131
- `)}function rG(e){let t=[e.pass?`${e.pass} passed`:``,e.fail?`${e.fail} failed`:``,e.pending?`${e.pending} pending`:``].filter(Boolean);return t.length>0?t.join(` · `):null}async function iG(e){try{await navigator.clipboard.writeText(e),G(z(`files.report.copied`))}catch{G(z(`menu.copyFailed`),`error`)}}function aG(e){B();let{model:t,task:n}=e,[r,i]=(0,g.useState)(!e.narrow),[a,o]=(0,g.useState)(null),s=!!n.report?.summary;(0,g.useEffect)(()=>{if(s)return;let e=!0;return Hs(t,`output.read`,{taskId:n.id,limit:8}).then(t=>e&&o(lL(t)),()=>{}),()=>{e=!1}},[t,n.id,s,n.rowStatus?.since]);let c=(0,g.useMemo)(()=>{let r=Bs(t,`pr.checks`,{taskId:n.id}),i=r?.outcome===`ok`?AW(r.checks):null;return{title:n.label||n.title,branch:n.branch,base:e.base,files:new Set(e.files.map(e=>e.path)).size,added:e.files.reduce((e,t)=>e+(t.added??0),0),removed:e.files.reduce((e,t)=>e+(t.deleted??0),0),text:n.report?.summary??a,reported:s,checks:i?rG(i):n.pr?.checkState&&n.pr.checkState!==`unknown`?n.pr.checkState:null,openTodos:YP(n).map(e=>e.text),pr:n.pr?{number:n.pr.number,url:n.pr.url}:null}},[t,n,e.base,e.files,a,s]);return(0,V.jsxs)(`section`,{className:`flex flex-col gap-1 px-2 pb-2 font-mono text-meta`,children:[(0,V.jsxs)(H,{variant:`row`,"aria-expanded":r,className:`flex items-center gap-1.5 text-left text-muted hover:text-ink`,onClick:()=>i(!r),children:[(0,V.jsx)(Fa,{right:!r}),(0,V.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[z(`files.report.title`),` · `,c.files,` · +`,c.added,` −`,c.removed]})]}),r&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`m-0 text-muted`,children:[c.branch,c.base?` → ${c.base}`:``,c.checks?` · ${c.checks}`:``,c.openTodos.length>0?` · ${z(`files.report.todos`,{count:c.openTodos.length})}`:``]}),c.text?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`text-subtle`,children:z(s?`files.report.claimed`:`files.report.lastReply`)}),(0,V.jsx)(`p`,{className:`m-0 max-h-24 overflow-y-auto whitespace-pre-wrap wrap-anywhere text-ink`,children:c.text})]}):(0,V.jsx)(`span`,{className:`text-subtle`,children:z(`files.report.none`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[(0,V.jsx)(H,{hit:`tight`,onClick:()=>void iG(tG(c)),children:z(`files.report.copyNote`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>void iG(nG(c)),children:z(`files.report.copyPr`)})]})]})]})}var oG=2e3;function sG({model:e,task:t}){B();let n=t.id,r=!t.machine,[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(!1),c=i?.running===!0;if((0,g.useEffect)(()=>{if(!r)return;let t=!0,i=()=>e.client.request(`run.status`,{taskId:n}).then(e=>t&&a(e),()=>{});i();let o=c?window.setInterval(()=>void i(),oG):0;return()=>{t=!1,window.clearInterval(o)}},[e,n,r,c]),!r||!i?.script)return null;let l=async t=>{s(!0);try{a(await e.client.request(t,{taskId:n}))}catch(e){G(e instanceof Error?e.message:String(e),`error`)}finally{s(!1)}};return(0,V.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-x-3.5 gap-y-1 px-2 pb-2 font-mono text-meta whitespace-nowrap`,children:[i.url&&(0,V.jsx)(H,{onClick:()=>i.url&&eA(n,i.url),children:z(`files.run.open`,{port:i.port??``})}),(0,V.jsx)(H,{disabled:o,onClick:()=>void l(c?`run.stop`:`run.start`),children:z(c?`files.run.stop`:`files.run.run`)})]})}var cG={"session-start":{glyph:`○`,tone:`text-muted`},"turn-start":{glyph:`▶`,tone:`text-info`},"turn-complete":{glyph:`✓`,tone:`text-success`},"turn-failed":{glyph:`✗`,tone:`text-error`},"turn-interrupted":{glyph:`■`,tone:`text-warning`},"awaiting-input":{glyph:`?`,tone:`text-warning`},"session-end":{glyph:`○`,tone:`text-muted`},"tool-failed":{glyph:`!`,tone:`text-error`},"pre-compact":{glyph:`≈`,tone:`text-muted`},"post-compact":{glyph:`≈`,tone:`text-muted`},"subagent-start":{glyph:`↳`,tone:`text-muted`},"subagent-stop":{glyph:`↲`,tone:`text-muted`},commit:{glyph:`◆`,tone:`text-accent`},"pr-opened":{glyph:`⇡`,tone:`text-success`},"pr-merged":{glyph:`⇡`,tone:`text-merged`},"pr-closed":{glyph:`⇡`,tone:`text-muted`},"pr-failing":{glyph:`⇡`,tone:`text-error`},"pr-passing":{glyph:`⇡`,tone:`text-success`},"pr-conflict":{glyph:`⇡`,tone:`text-error`},"pr-changes":{glyph:`⇡`,tone:`text-warning`}},lG={glyph:`·`,tone:`text-muted`};function uG(e){return e.kind===`commit`?{to:`diff`}:e.kind.startsWith(`pr-`)?e.url?{to:`pr`,url:e.url}:null:e.tabId?{to:`tab`,tabId:e.tabId}:null}function dG(e,t){if(!t)return[];if(!e)return[`pr-opened`];let n=[];if(e.lifecycle!==t.lifecycle&&(t.lifecycle===`merged`?n.push(`pr-merged`):t.lifecycle===`closed`&&n.push(`pr-closed`)),e.lifecycle===`unknown`)return n;e.checkState!==t.checkState&&(t.checkState===`failing`?n.push(`pr-failing`):t.checkState===`passing`&&n.push(`pr-passing`));let r=e=>(e.mergeable??``).toUpperCase()===`CONFLICTING`;r(t)&&!r(e)&&n.push(`pr-conflict`);let i=e=>(e.reviewDecision??``).toUpperCase()===`CHANGES_REQUESTED`;return i(t)&&!i(e)&&n.push(`pr-changes`),n}function fG(e,t){return[...e,...t].sort((e,t)=>t.at-e.at)}var pG=_({}),mG=400,hG=15e3,gG=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});function _G(e,t){if(!e||e.id!==t.id)return;let n=dG(e.pr,t.pr);if(n.length===0)return;let r=Date.now(),i=n.map(e=>({kind:e,at:r,tail:t.pr?.number===void 0?``:`#${t.pr.number}`,...t.pr?.url?{url:t.pr.url}:{}})),a=pG.get();pG.set({...a,[t.id]:[...a[t.id]??[],...i].slice(-50)})}function vG(e){let t=(0,g.useRef)(void 0);(0,g.useEffect)(()=>{_G(t.current,e),t.current=e},[e])}function yG({model:e,task:t}){B();let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null),o=v(pG)[t.id],s=JSON.stringify([t.rowStatus,t.tabStatus,t.changes,t.pr,t.updatedAt]),c=(0,g.useRef)(0),l=(0,g.useRef)(()=>{});l.current=()=>{c.current=Date.now(),e.client.request(`task.timeline`,{taskId:t.id}).then(e=>{r(e.entries),a(null)},e=>a(e instanceof Error?e.message:String(e)))},(0,g.useEffect)(()=>{let e=window.setTimeout(()=>l.current(),Math.max(0,c.current+mG-Date.now()));return()=>window.clearTimeout(e)},[s]),(0,g.useEffect)(()=>{let e=window.setInterval(()=>l.current(),hG);return()=>window.clearInterval(e)},[]);let u=fG(n??[],o??[]),d=n=>{let r=uG(n);r?.to===`tab`?e.select(t.id,r.tabId):r?.to===`diff`?$k({taskId:t.id,path:`.`,scope:`branch`}):r?.to===`pr`&&window.open(r.url,`_blank`,`noopener`)};return(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[i&&(0,V.jsx)(`p`,{className:`mono text-error`,children:i}),!i&&n!==null&&u.length===0&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(`files.activityEmpty`)}),u.map(e=>{let t=cG[e.kind]??lG,n=e.kind in cG?z(`files.activityKind.${e.kind}`):e.kind,r=uG(e);return(0,V.jsxs)(H,{variant:`row`,className:tr({size:`file`}),disabled:!r,title:e.tail?`${n} · ${e.tail}`:n,onClick:()=>d(e),children:[(0,V.jsx)(`span`,{className:`flex-none text-muted tabular-nums`,children:gG(e.at)}),(0,V.jsx)(`span`,{className:`${ar} ${t.tone}`,children:t.glyph}),(0,V.jsxs)(`span`,{className:nr,children:[n,e.tail&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,e.tail]})]})]},`${e.at}:${e.kind}:${e.tabId??``}:${e.sha??``}:${e.tail}`)})]})}function bG({tabs:e,value:t,onChange:n,className:r}){return(0,V.jsx)(`div`,{className:Me(`flex gap-1`,r),role:`tablist`,children:e.map(e=>{let r=e.id===t;return(0,V.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":r,className:Me(`relative rounded-sm px-2.5 py-0.75 font-mono text-meta font-semibold`,`touch:after:absolute touch:after:content-[''] touch:after:-inset-x-0.5 touch:after:-top-2 touch:after:-bottom-1.5`,r?`bg-inset text-ink group-focus-within/pane:text-accent`:`text-muted`),onClick:()=>n(e.id),children:e.label},e.id)})})}var xG=[`all`,`changes`,`activity`,`notes`],SG={M:`text-warning`,A:`text-success`,"?":`text-success`,D:`text-error`,R:`text-accent`};function CG({model:e,task:t,narrow:n=!1}){let r=$o();B();let[i,a]=(0,g.useState)(`all`),[o,s]=(0,g.useState)(`working`),[c,l]=(0,g.useState)(()=>Bs(e,`files.list`,{taskId:t.id})?.files??null),[u,d]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.id})??null),[f,p]=(0,g.useState)(null),[m,h]=(0,g.useState)(new Set),[_,y]=(0,g.useState)(0),[b,x]=(0,g.useState)(0),S=(0,g.useRef)(null);vG(t);let C=v(fn),w=JSON.stringify(t.changes??null);(0,g.useEffect)(()=>{let n=!0,r=e=>n&&p(e instanceof Error?e.message:String(e));return Hs(e,`files.list`,{taskId:t.id}).then(e=>{n&&(l(e.files),p(null))},r),Hs(e,`diff.files`,{taskId:t.id}).then(e=>n&&d(e),r),()=>{n=!1}},[e,t.id,w,b]);let T=u?.base??null,E=i===`all`?c!==null:u!==null,D=o===`branch`&&T!=null,O=i===`activity`||i===`notes`?[]:i===`all`?zW(c??[],m).map(e=>({path:e.path,label:e.name,depth:e.depth,dir:e.dir,open:e.open})):(u?.files??[]).filter(e=>e.scope===(D?`branch`:`working`)).map(e=>({path:e.path,label:e.path,depth:0,dir:!1,open:!1,status:e.status,added:e.added,deleted:e.deleted})),k=Math.min(_,Math.max(0,O.length-1)),A=O[k],j=(e,t)=>h(n=>{let r=new Set(n);return t??!r.has(e)?r.add(e):r.delete(e),r}),ee=e=>$k({taskId:t.id,path:e,scope:i===`changes`&&D?`branch`:`working`}),M=n=>{if(!C?.startsWith(`${t.id}::`)){G(z(`files.mentionNoEngine`),`error`);return}e.client.request(`term.input`,{stream:C,data:`@${n} `}).catch(e=>G(String(e),`error`))},N=n=>t.machine?G(z(`files.remoteNoExternal`,{host:t.machine.label}),`error`):void e.client.request(`file.openExternal`,{taskId:t.id,path:n}).then(()=>G(z(`taskops.openedExternal`))).catch(e=>G(e instanceof Error?e.message:String(e),`error`));return(0,V.jsxs)(`div`,{className:`group/pane flex min-h-0 min-w-0 flex-1 flex-col outline-none ${n?`px-1.5 pt-2.5 pb-2`:`pt-0.5 pr-1.5 pb-1.5 pl-0`}`,tabIndex:0,ref:S,onKeyDown:e=>{let t=e.key;if(t===`j`||t===`ArrowDown`)y(Math.min(O.length-1,k+1));else if(t===`k`||t===`ArrowUp`)y(Math.max(0,k-1));else if((t===`l`||t===`ArrowRight`)&&A?.dir)j(A.path,!0);else if((t===`h`||t===`ArrowLeft`)&&A?.dir)j(A.path,!1);else if(t===`[`||t===`]`)a(xG[(xG.indexOf(i)+(t===`]`?1:xG.length-1))%xG.length]??`all`);else if(t===`b`&&i===`changes`&&T!=null)s(o===`working`?`branch`:`working`);else if(t===`r`)x(e=>e+1);else if(t===`D`&&e.shiftKey)ee(`.`);else if(t===`d`&&A)ee(A.path);else if(t===`Enter`&&A)A.dir?j(A.path):ee(A.path);else if(t===`a`&&A)M(A.path);else if(t===`o`&&A&&!A.dir)N(A.path);else return;e.preventDefault()},children:[(0,V.jsx)($W,{model:e,task:t}),(0,V.jsx)(RW,{model:e,task:t}),(0,V.jsx)(sG,{model:e,task:t}),(0,V.jsx)(aG,{model:e,task:t,base:T,files:u?.files??[],narrow:n}),(0,V.jsx)(bG,{className:`px-1 pb-1.5`,tabs:[{id:`all`,label:z(`files.all`)},{id:`changes`,label:z(`files.changes`)},{id:`activity`,label:z(`files.activity`)},{id:`notes`,label:z(`files.notes`)}],value:i,onChange:e=>{a(e),y(0)}}),i===`changes`&&(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-2.5 gap-y-1 px-2 pb-2 font-mono text-meta text-muted`,children:[(0,V.jsx)(`span`,{children:D?z(`files.scopeBranch`,{base:T??``}):z(`files.scopeWorking`)}),T==null?u&&(0,V.jsx)(`span`,{children:z(`files.noBase`)}):(0,V.jsx)(H,{hit:`tight`,onClick:()=>s(o===`working`?`branch`:`working`),children:z(r?`files.toggleScopeTouch`:`files.toggleScope`)}),(0,V.jsx)(kT,{text:z(`files.legend`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>ee(`.`),children:z(r?`files.diffAllTouch`:`files.diffAll`)})]}),i===`activity`?(0,V.jsx)(yG,{model:e,task:t}):i===`notes`?(0,V.jsx)(qW,{model:e,task:t}):(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[f&&(0,V.jsx)(`p`,{className:`mono text-error`,children:f}),!f&&E&&O.length===0&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(i===`all`?`files.emptyAll`:`files.emptyChanges`)}),O.map((e,t)=>(0,V.jsxs)(`button`,{type:`button`,className:tr({selected:t===k,size:n?`file-narrow`:`file`}),style:{paddingLeft:8+e.depth*14},title:e.path,onClick:()=>{y(t),S.current?.focus(),e.dir?j(e.path):ee(e.path)},children:[e.status?(0,V.jsx)(`span`,{className:`${ar} ${SG[e.status]??``}`,children:e.status}):(0,V.jsx)(`span`,{className:`${ar} grid place-items-center text-subtle`,children:e.dir?(0,V.jsx)(Fa,{right:!e.open}):null}),(0,V.jsx)(`span`,{className:nr,children:e.label}),e.added?(0,V.jsxs)(NL,{tone:`added`,children:[`+`,e.added]}):null,e.deleted?(0,V.jsxs)(NL,{tone:`removed`,children:[`−`,e.deleted]}):null]},e.path))]})]})}function wG({children:e}){return(0,V.jsx)(`svg`,{className:`size-3.5 ${vI}`,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:e})}var TG={chat:(0,V.jsx)(`path`,{d:`M3 3.5h10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H8l-3 2.5v-2.5H3a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1zM5 6.5h6M5 8.5h4`}),files:(0,V.jsx)(`path`,{d:`M2 4.5a1 1 0 0 1 1-1h3l1.5 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z`}),diff:(0,V.jsx)(`path`,{d:`M3.5 2.5h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1zM8 5v4M6 7h4M6 11h4`}),browser:(0,V.jsx)(`path`,{d:`M8 2a6 6 0 1 0 0 12A6 6 0 0 0 8 2zM2 8h12M8 2c2.2 2 2.2 10 0 12M8 2c-2.2 2-2.2 10 0 12`}),quota:(0,V.jsx)(`path`,{d:`M2.5 11.5a5.5 5.5 0 1 1 11 0M8 11.5l2.5-3.5M4.5 13.5h7`})};function EG(e){if(e.kind===`files`)return z(`panel.files`);if(e.kind===`chat`)return z(`panel.chat`);if(e.kind===`quota`)return z(`panel.quota`);if(e.kind===`diff`)return e.path===`.`?z(`panel.diff`):ok(e.path);let t=ak(e);return t?sk(t):z(`panel.browser`)}function DG(e){return e.kind===`diff`?e.path===`.`?z(`preview.whole`):e.path:e.kind===`browser`&&ak(e)||EG(e)}var OG=7.3,kG=51,AG=160;function jG(e,t){let n=0;for(let t of e){let e=0;for(let n of t)e+=(n.codePointAt(0)??0)>11903?2:1;n+=Math.min(AG,kG+e*OG)+2}return n<=t}var MG=null;function NG(e,t,n,r){let i=(t,r)=>({label:r,section:`move`,run:()=>Xk(e,e=>Ok(e,n.id,t))}),a=[];return!t.bottom&&t.top.tabs.length>1?a.push(i(`bottom`,z(`panel.splitDown`))):t.bottom&&a.push(r===`top`?i(`bottom`,z(`panel.moveBottom`)):i(`top`,z(`panel.moveTop`))),a.push({label:z(`panel.close`),section:`close`,run:()=>tA(e,n.id)}),t.top.tabs.length+(t.bottom?.tabs.length??0)>1&&a.push({label:z(`panel.closeOthers`),section:`close`,run:()=>Xk(e,e=>Dk(e,n.id))}),a}function PG(e,t){return[{label:z(`panel.newChat`),run:()=>Xk(e,e=>bk(e,`chat`))},{label:z(`panel.newFiles`),run:()=>Xk(e,e=>gk(e,t))},{label:z(`panel.newDiff`),run:()=>Xk(e,e=>vk(e,`.`,`working`))},{label:z(`panel.newBrowser`),run:()=>Xk(e,e=>_k(e,t))},{label:z(`panel.newQuota`),run:()=>Xk(e,e=>bk(e,`quota`))}]}function FG({taskId:e,panel:t,group:n,tabs:r,active:i,narrow:a,children:o}){B();let[s,c]=(0,g.useState)(null),l=()=>MG?.taskId===e,u=t=>{let r=MG;MG=null,c(null),r?.taskId===e&&Xk(e,e=>Ok(e,r.id,n,t))},d=t=>{let r=t.currentTarget.getBoundingClientRect();on.set({x:r.left,y:r.bottom+2,items:PG(e,n),target:t.currentTarget})},f=(e,t)=>{if(!l())return;e.preventDefault(),e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();c({id:t,after:e.clientX>n.left+n.width/2})},p=(0,g.useRef)(null),[m,h]=(0,g.useState)(0);(0,g.useEffect)(()=>{let e=p.current;if(!e)return;let t=new ResizeObserver(([e])=>h(e?.contentRect.width??0));return t.observe(e),()=>t.disconnect()},[]);let _=m>0&&!jG(r.map(EG),m);return(0,g.useEffect)(()=>{p.current?.querySelector(`.is-active`)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[i,r.length,_]),(0,V.jsxs)(`div`,{className:wI(a),style:{gridRow:n===`top`?1:4},onDragOver:e=>{l()&&(e.preventDefault(),c(null))},onDrop:e=>{e.preventDefault(),u()},children:[(0,V.jsx)(`div`,{className:TI,role:`tablist`,"aria-label":z(`panel.tabs`),ref:p,children:r.map((r,o)=>(0,V.jsxs)(`div`,{role:`presentation`,className:EI({active:r.id===i,compact:_}),"data-drop":s?.id===r.id?s.after?`after`:`before`:void 0,draggable:!a,onDragStart:()=>{MG={taskId:e,id:r.id}},onDragEnd:()=>{MG=null,c(null)},onDragOver:e=>f(e,r.id),onDrop:e=>{e.preventDefault(),e.stopPropagation(),u(o+(s?.id===r.id&&s.after?1:0))},onMouseDown:e=>{e.button===1&&e.preventDefault()},onAuxClick:t=>{t.button===1&&(t.preventDefault(),tA(e,r.id))},onContextMenu:i=>{a||cW(i,NG(e,t,r,n))},children:[(0,V.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":r.id===i,className:DI(_&&r.id!==i),title:DG(r),onClick:()=>Xk(e,e=>fk(e,r.id)),children:[(0,V.jsx)(wG,{children:TG[r.kind]}),(0,V.jsx)(`span`,{className:OI,children:EG(r)})]}),(0,V.jsx)(`button`,{type:`button`,className:`${kI} ${_&&r.id!==i?`hidden`:``}`,"aria-label":z(`panel.close`),tabIndex:-1,onClick:()=>tA(e,r.id),children:`×`})]},r.id))}),!a&&(0,V.jsx)(`button`,{type:`button`,className:yI({tool:!0}),title:z(`panel.new`),"aria-label":z(`panel.new`),onClick:d,children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M8 3.5v9M3.5 8h9`})})}),o]})}var IG={md:`md`,markdown:`md`,html:`html`,htm:`html`,svg:`svg`,png:`image`,jpg:`image`,jpeg:`image`,gif:`image`,webp:`image`,pdf:`pdf`};function LG(e){let t=e.slice(e.lastIndexOf(`/`)+1),n=t.lastIndexOf(`.`);return n<0?null:IG[t.slice(n+1).toLowerCase()]??null}function RG(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var zG=e=>new TextDecoder().decode(RG(e));function BG(e,t){if(e===`svg`)return`image/svg+xml`;if(e===`pdf`)return`application/pdf`;let n=t.slice(t.lastIndexOf(`.`)+1).toLowerCase();return n===`jpg`||n===`jpeg`?`image/jpeg`:n===`gif`?`image/gif`:n===`webp`?`image/webp`:`image/png`}var VG=`default-src 'none'; img-src data:; style-src 'unsafe-inline'`;function HG(e){let t=`<meta http-equiv="Content-Security-Policy" content="${VG}">`,n=/^\s*<!doctype[^>]*>/i.exec(e);return n?`${n[0]}${t}${e.slice(n[0].length)}`:`${t}${e}`}var UG=/^\[([^\]\n]+)\]\((https?:\/\/[^\s)]+)\)/,WG=/^https?:\/\/[^\s<>)\]]+/,GG=/[\p{L}\p{N}]/u;function KG(e){let t=[],n=``,r=()=>{n&&t.push({t:`text`,v:n}),n=``},i=0;for(;i<e.length;){let a=e.slice(i),o=e[i]??``;if(o==="`"){let n=e.indexOf("`",i+1);if(n>i+1){r(),t.push({t:`code`,v:e.slice(i+1,n)}),i=n+1;continue}}else if(a.startsWith(`**`)){let n=e.indexOf(`**`,i+2);if(n>i+2){r(),t.push({t:`bold`,c:KG(e.slice(i+2,n))}),i=n+2;continue}}else if(o===`*`||o===`_`&&!GG.test(e[i-1]??``)){let n=e.indexOf(o,i+1);if(n>i+1&&!/\s/.test(e[i+1]??` `)&&(o===`*`||!GG.test(e[n+1]??``))){r(),t.push({t:`em`,c:KG(e.slice(i+1,n))}),i=n+1;continue}}else if(o===`[`){let e=UG.exec(a);if(e){r(),t.push({t:`link`,href:e[2],c:KG(e[1])}),i+=e[0].length;continue}}else if(o===`h`&&!GG.test(e[i-1]??``)){let e=WG.exec(a);if(e){let n=e[0].replace(/[.,;:!?]+$/,``);r(),t.push({t:`link`,href:n,c:[{t:`text`,v:n}]}),i+=n.length;continue}}n+=o,i++}return r(),t}var qG=/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/,JG=/^(#{1,6})\s+(.*?)\s*#*\s*$/,YG=/^(\s*)([-*+])\s+(.*)$/,XG=/^(\s*)\d+[.)]\s+(.*)$/,ZG=/^\s*([-*_])(\s*\1){2,}\s*$/,QG=/^\s*\|.*\|\s*$/,$G=/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/,eK=e=>e.trim().replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim());function tK(e){let t=e.replace(/\r\n?/g,`
129
+ `)}}var QU=`min-h-0 w-full overflow-y-auto`,$U=`mx-auto mt-[min(16vh,8rem)] flex w-full max-w-130 flex-col gap-4 px-5 pb-7`,eW=`relative grid w-full select-none overflow-hidden font-mono text-(length:--fs-body) text-subtle [contain:layout_paint]`,tW=`col-start-1 row-start-1 m-0 whitespace-pre font-[inherit] leading-[inherit]`,nW=`invisible absolute top-0 left-0 whitespace-pre`,rW=1.3,iW=`0000000000`,aW=1e3/12;function oW(){let e=(0,g.useRef)(null),t=(0,g.useRef)(null),n=(0,g.useRef)(null),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let i=e.current,a=t.current,o=n.current,s=r.current;if(!i||!a||!o||!s)return;let c=window.matchMedia(`(prefers-reduced-motion: reduce)`),l=24,u=90,d=0,f=0,p=0,m=-1,h=!0,g=()=>{let e=ZU(u,l);o.textContent=e.base,s.textContent=e.accent},_=()=>{let e=a.getBoundingClientRect().width/10;e>0&&(l=Math.min(64,Math.max(24,Math.floor(i.clientWidth/e)))),g()},v=e=>{d=requestAnimationFrame(v);let t=p+Math.floor((e-f)/aW);t!==m&&(m=t,u=t,g())},y=()=>{cancelAnimationFrame(d),d=0},b=()=>{y(),c.matches?(u=90,g()):h&&document.visibilityState===`visible`&&(f=performance.now(),p=u,m=-1,d=requestAnimationFrame(v))},x=new ResizeObserver(_);x.observe(i),_(),b();let S=new IntersectionObserver(e=>{h=e[e.length-1]?.isIntersecting??!0,b()});return S.observe(i),c.addEventListener(`change`,b),document.addEventListener(`visibilitychange`,b),()=>{y(),x.disconnect(),S.disconnect(),c.removeEventListener(`change`,b),document.removeEventListener(`visibilitychange`,b)}},[]),(0,V.jsxs)(`div`,{ref:e,"aria-hidden":`true`,"data-field":`first-run-art`,className:eW,style:{height:`${11*rW}em`,lineHeight:rW},children:[(0,V.jsx)(`span`,{ref:t,className:nW,children:iW}),(0,V.jsx)(`pre`,{ref:n,className:tW}),(0,V.jsx)(`pre`,{ref:r,className:`${tW} text-accent`})]})}function sW(e){let t=q(`doctor`,`fix.humanOnlyWhy`),n=[];if(e.git||n.push({id:`git`,label:q(`doctor`,`fix.git`),action:q(`doctor`,`fix.gitAction`),why:t}),e.engines.length===0){let r=e.signedOut.length>0;n.push({id:`engine`,label:q(`doctor`,r?`fix.noEngineLogin`:`fix.noEngine`),action:q(`doctor`,r?`fix.noEngineLoginAction`:`fix.noEngineAction`,{list:e.signedOut.map(e=>e.id).join(`, `)}),why:t})}return n}function cW({model:e}){B(),v(Yr);let[t,n]=(0,g.useState)(()=>Bs(e,`welcome.env`)??null);(0,g.useEffect)(()=>{let t=!0;return Hs(e,`welcome.env`).then(e=>t&&n(e)).catch(()=>{}),()=>{t=!1}},[e]);let r=t===null?null:t.engines.length>0?{key:`enginesFound`,warn:!1,list:t.engines.map(e=>e.name).join(`, `)}:t.signedOut.length>0?{key:`enginesSignedOut`,warn:!0,list:t.signedOut.map(e=>e.name).join(`, `)}:{key:`enginesMissing`,warn:!0,list:``},i=t!==null&&(t.engines.length===0||!t.git)?sW(t):[];return(0,V.jsx)(`div`,{className:QU,"data-field":`welcome`,children:(0,V.jsxs)(`div`,{className:$U,children:[(0,V.jsx)(oW,{}),(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsx)(`h1`,{className:`m-0 font-sans text-title font-semibold text-ink`,children:z(`firstRun.title`)}),(0,V.jsx)(`p`,{className:`m-0 font-sans text-body text-muted`,children:z(`firstRun.body`)})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`button`,{type:`button`,className:Pe(),"data-field":`start-first-task`,onClick:()=>iO(t?.start?.repo),children:z(`firstRun.start`)}),(0,V.jsx)(`span`,{className:`keys-only mono text-meta text-subtle`,children:ii(`task.new.global`)})]}),t!==null&&r!==null&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5 font-sans text-meta`,children:[(0,V.jsx)(`p`,{className:`m-0 ${r.warn?`text-warning`:`text-subtle`}`,children:q(`workspace`,`welcome.${r.key}`,{list:r.list})}),!t.git&&(0,V.jsx)(`p`,{className:`m-0 text-warning`,children:q(`workspace`,`welcome.gitMissing`)}),i.map(e=>(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsx)(`p`,{className:`m-0 text-warning`,children:e.label}),(0,V.jsx)(`p`,{className:`mono m-0 text-accent`,children:e.action}),(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:e.why})]},e.id)),i.length>0&&(0,V.jsx)(`p`,{className:`m-0 text-muted`,children:q(`common`,`failureHint`,{command:`rove doctor`})})]})]})})}function lW(e,t){e.preventDefault(),on.set({x:e.clientX,y:e.clientY,items:t,target:e.currentTarget,fromKeyboard:e.button!==2})}function uW({model:e,narrow:t}){let n=B(),r=v(e.tasks),i=v(e.remote),a=EE(e),o=v(e.tabs),s=v(e.tabsSettled),c=v(e.selection),l=r?.tasks??[],u=r?.attention.filter(e=>e.unread).length??0,d=c.taskId,f=new Map([...l,...i].map(e=>[e.id,e])),p=kU(),m=v(WT),h=v(LT)===`state`,_=v(GT),y=e=>(h?mO:Cw)({tasks:l,remote:i,machines:a,sort:p.sort,query:e,fold:{...p.hand,selectedId:d??void 0}}),b=y(p.search.active?p.search.query:``),{groups:x}=b,S=p.search.active?b.rows:PH(Tw(FU(hO(KH(b.rows,o,c.taskId,s,_)),o),p.collapsed),r?.archived??[],p.archivedOpen,{...p.hand,selectedId:d??void 0}),C=e=>e.filter(e=>e.kind!==`project`&&e.kind!==`state`&&e.kind!==`round`),w=(n===`zh`?Ar:kr).machine,T=new Set(a.filter(e=>e.state!==`online`).map(e=>e.alias)),E=x.find(e=>e.tasks.some(e=>e.kind===`main`))?.repo,D=e=>({mainTaskId:x.find(t=>t.repo===e)?.tasks.find(e=>e.kind===`main`)?.id??null,label:KC(e),first:e===E}),O=WH(e,l,!p.search.active&&!h,p.sort==="default",D),k=O.places(S),A=()=>W.set((0,V.jsx)(JP,{model:e})),j=NU(e,S,p,{selectedId:d,onNewTask:iO,onSettings:A}),ee=_!==null&&S.some(e=>e.id===_),M=j.setCursor;(0,g.useEffect)(()=>{ee&&_!==null&&M(_)},[ee,_,M]);let N=C(y(``).rows).length,P=(0,g.useRef)(null),F=v(mI)&&!t,I=v(hI)&&F,te=t?l.find(e=>e.id===c.taskId&&!e.deleting)??null:null;return(0,V.jsxs)(`nav`,{className:`${aE} ${F?`is-folded`:``}`,ref:P,inert:F&&!I,"aria-hidden":F&&!I,onMouseEnter:F?()=>_I(!0):void 0,onMouseLeave:F?()=>_I(!1):void 0,tabIndex:0,onKeyDown:e=>{VF(`sidebar`),j.onKeyDown(e)},children:[(0,V.jsxs)(`header`,{className:oE,children:[(0,V.jsxs)(`span`,{className:`${Ht} mr-auto`,children:[(0,V.jsx)(`span`,{className:Ut,children:`[`}),` rove `,(0,V.jsx)(`span`,{className:Ut,children:`]`})]}),(0,V.jsxs)(`span`,{className:`relative`,children:[(0,V.jsx)(`button`,{type:`button`,className:`m-0 text-meta font-medium normal-nums inbox-chip relative ${$n} ${Ge} ${u>0?`text-accent`:`text-muted`}`,onClick:()=>W.set((0,V.jsx)(PT,{model:e})),children:z(`rail.inbox`,{count:u})}),(0,V.jsx)(PF,{model:e,bindingId:`inbox.show`,head:!0})]}),(0,V.jsx)(HM,{})]}),m&&(0,V.jsxs)(`div`,{className:`flex gap-1 px-3.5 pb-2 text-meta mono`,children:[(0,V.jsx)(`span`,{className:`text-accent`,children:q(`tasks`,`moveChip`).trim()}),(0,V.jsx)(`span`,{className:`keys-only ml-1.5 text-muted`,children:(0,V.jsx)(kT,{text:z(`taskops.moveHint`)})})]}),p.search.active&&(0,V.jsx)(LU,{query:p.search.query,count:`${C(S).length}/${N}`,onChange:e=>p.setSearch(t=>({...t,query:e}))}),(0,V.jsx)(sL,{model:e}),(0,V.jsx)(TH,{model:e}),(0,V.jsxs)(`div`,{"data-rail-body":!0,className:pE(O.dragging!==null),...O.body,children:[r&&l.length===0&&i.length===0&&t&&(0,V.jsx)(cW,{model:e}),r&&l.length===0&&i.length===0&&!t&&(0,V.jsx)(`p`,{className:`m-0 px-2 py-3 font-mono text-meta text-subtle`,children:z(`rail.empty`)}),te&&(0,V.jsx)(KI,{title:te.title}),S.map((t,n)=>t.kind===`round`?(0,V.jsx)(IU,{row:t,guides:t.depth>1?HH(S,n):void 0,repo:h&&t.depth===1?fO(t.tasks[0]):void 0,cursor:t.id===j.cursor,place:k(t),onClick:()=>j.setCursor(t.id)},t.id):t.kind===`pane`?(0,V.jsx)(sU,{model:e,row:t,guides:HH(S,n),cursor:t.id===j.cursor,place:k(t),onClick:()=>{j.setCursor(t.id),oU(e,t),ga()},onMenu:n=>{j.setCursor(t.id),lW(n,nU(e,t.task.id,t.tab,t.leaf))}},t.id):(0,V.jsx)(dW,{row:t,guides:t.kind===`task`&&t.depth>1?HH(S,n):void 0,cloud:CE(t,a,w),repo:h&&t.kind===`task`&&t.depth===1?fO(t.task):void 0,tabs:t.kind===`task`?o[t.task.id]:void 0,selected:t.id===d,cursor:t.id===j.cursor,stale:t.machine!==void 0&&T.has(t.machine),collapsed:(t.kind===`project`||t.kind===`state`)&&p.collapsed.has(t.id),drag:O.props(t),dragging:O.dragging===t.id,place:k(t),onNewTask:t.kind===`project`?t.noProject?aO:()=>iO(t.repo,t.machine):void 0,moving:m&&t.machine===void 0&&(t.kind===`project`?!t.noProject&&D(t.repo).mainTaskId===j.cursor:t.id===j.cursor&&(t.kind!==`task`||t.task.kind!==`main`)),prTasks:t.kind===`task`?[t.task,...(t.fold?.descendantIds??[]).flatMap(e=>f.get(e)??[])]:void 0,rollup:t.kind===`task`&&t.fold?.collapsed?iI([t.task,...t.fold.descendantIds.flatMap(e=>f.get(e)??[])]):void 0,onToggleFold:()=>{t.kind===`task`&&p.toggleTaskFold(t.id,t.fold?.collapsed===!0),t.kind===`archived`&&p.toggleArchived()},onClick:()=>{j.setCursor(t.id),t.kind===`archived`&&p.toggleArchived(),(t.kind===`project`||t.kind===`state`)&&p.toggleProject(t.id),t.kind===`task`&&MU(e,t.task.id)},onMenu:n=>{if(t.kind!==`project`||t.machine===void 0){if(t.kind===`project`&&t.noProject){lW(n,vU(e));return}if(t.kind===`project`){let r=D(t.repo);r.mainTaskId&&S.some(e=>e.id===r.mainTaskId)&&j.setCursor(r.mainTaskId),lW(n,_U(e,t.repo,r));return}t.kind===`task`&&(j.setCursor(t.id),lW(n,mW(pW(xU(e,t.task,null),t.fold,()=>p.toggleTaskFold(t.id,t.fold?.collapsed===!0)),aU(e,t.task.id))))}}},t.id))]}),(0,V.jsx)(GH,{model:e,narrow:t,onSettings:A}),(0,V.jsx)(qI,{pane:`sidebar`}),!t&&!F&&(0,V.jsx)(VI,{rail:P})]})}function dW(e){let{row:t}=e,n=VU(t.kind===`task`?t.task.label:``,e.cursor&&t.kind===`task`),r=e.cursor?mE:``;if(t.kind===`project`||t.kind===`state`)return(0,V.jsxs)(`h2`,{className:hE({moving:e.moving,dragging:e.dragging}),onContextMenu:e.onMenu,...e.place,...e.drag,children:[(0,V.jsxs)(`button`,{type:`button`,className:_E,title:t.kind===`project`&&!t.noProject?t.repo:void 0,"aria-expanded":!e.collapsed,onClick:e.onClick,children:[(0,V.jsx)(`span`,{className:`truncate`,children:t.label}),t.kind===`state`&&(0,V.jsx)(`span`,{className:`font-normal text-subtle`,children:t.count}),(0,V.jsx)(Fa,{right:e.collapsed,className:vE(!!e.collapsed)})]}),e.onNewTask&&t.kind===`project`&&(0,V.jsx)(`button`,{type:`button`,className:yE,title:z(`rail.newTask`),onClick:e.onNewTask,children:`+`})]});if(t.kind===`archived`)return(0,V.jsx)(`button`,{type:`button`,className:`${tr({moving:e.moving||e.dragging})} ${r}`,"aria-expanded":t.expanded,onClick:e.onClick,...e.place,children:(0,V.jsx)(`span`,{className:`${rr} ${e.stale?`text-subtle`:`text-muted`}`,children:q(`tasks`,`archivedRow`,{count:t.count})})});let i=t.task,a=i.rowStatus?.kind===`running`,o=YP(i);return(0,V.jsxs)(`button`,{type:`button`,ref:n.ref,className:`${tr({selected:e.selected,moving:e.moving||e.dragging})} ${r}`,onClick:e.onClick,onContextMenu:e.onMenu,onPointerEnter:n.onPointerEnter,onPointerLeave:n.onPointerLeave,...e.place,...e.drag,children:[n.tip,e.guides&&(0,V.jsx)(`span`,{className:`-my-0.75 -mr-0.5 ml-0 flex flex-none self-stretch`,"aria-hidden":`true`,children:e.guides.map((e,t)=>(0,V.jsx)(`span`,{className:$T(e)},t))}),(0,V.jsx)(`span`,{className:`${rr} ${e.stale?`text-subtle`:``} ${a?ir:``}`,children:t.attempt??i.label}),(0,V.jsxs)(`span`,{className:`${or} ml-auto items-center`,children:[e.repo&&(0,V.jsx)(`span`,{className:`max-w-24 truncate text-subtle`,children:e.repo}),t.level!==void 0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:t.level}),(i.extraRepoCount??0)>0&&(0,V.jsxs)(`span`,{className:`text-subtle`,title:z(`rail.extraRepos`,{count:i.extraRepoCount??0}),children:[`+`,i.extraRepoCount]}),o&&(0,V.jsxs)(`span`,{className:`text-subtle tabular-nums`,title:z(`rail.todos`,o),children:[o.done,`/`,o.total]}),t.fold?.collapsed&&(0,V.jsx)(fW,{count:t.fold.count,onUnfold:e.onToggleFold}),i.kept&&(0,V.jsx)(`span`,{className:`text-accent`,title:z(`compare.kept`),children:`✓`}),i.pinned&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`▴`}),i.startsAt&&(0,V.jsx)(HU,{at:i.startsAt}),(0,V.jsx)(MH,{tasks:e.prTasks??[i],onOpen:n.hide}),(0,V.jsx)(dR,{status:t.fold?.collapsed?e.rollup:i.rowStatus}),e.cloud&&(0,V.jsx)(wE,{label:e.cloud})]})]})}function fW(e){let t=q(`tasks`,`menu.expandChildren`);return(0,V.jsxs)(`span`,{role:`button`,tabIndex:-1,"aria-label":t,"aria-expanded":!1,className:`chip text-muted ${eE}`,title:t,onClick:t=>{t.stopPropagation(),e.onUnfold()},children:[e.count,(0,V.jsx)(Fa,{right:!0})]})}function pW(e,t,n){if(!t)return e;let r={label:q(`tasks`,t.collapsed?`menu.expandChildren`:`menu.collapseChildren`),section:`open`,run:n},i=e.map(e=>e.section).lastIndexOf(`open`);return[...e.slice(0,i+1),r,...e.slice(i+1)]}function mW(e,t){let n=e.map(e=>e.section).lastIndexOf(`open`);return[...e.slice(0,n+1),...t,...e.slice(n+1)]}function hW(e){return e===`localhost`||e.endsWith(`.localhost`)||e===`[::1]`||/^127(\.\d{1,3}){3}$/.test(e)}var gW=/^(localhost|127(\.\d{1,3}){3}|\[::1\])(:\d+)?([/?#]|$)/i,_W=/^[a-z][a-z0-9+.-]*:(?!\d+([/?#]|$))/i;function vW(e){let t=e.trim();if(!t||/\s/.test(t)||_W.test(t)&&!/^https?:\/\//i.test(t))return null;let n=/^https?:\/\//i.test(t)?t:gW.test(t)?`http://${t}`:`https://${t.replace(/^\/\//,``)}`;try{let e=new URL(n);return e.hostname?e.href:null}catch{return null}}function yW(e,t,n=hW(t.hostname)){let r=new URL(e);return r.origin===t.origin?`self`:hW(r.hostname)?n?`yes`:`remote`:r.protocol===`https:`?`yes`:`unreachable`}function bW(e,t,n){let r=new URL(e).host;return t===`self`?{key:`self`,host:r}:t===`remote`?{key:`remote`,host:r}:t===`unreachable`?{key:`noFrame`,host:r}:n&&!n.reachable?{key:`unreachable`,host:r}:n&&!n.frameable?{key:`refuses`,host:r}:null}var xW=6e4,SW=new Map;function CW(e){let t=SW.get(e);return t&&Date.now()-t.at<xW?t:null}function wW(e,t,n){let[,r]=(0,g.useState)(0);(0,g.useEffect)(()=>{if(!n||CW(t))return;let i=!0;return e.request(`browser.probe`,{url:t,origin:window.location.origin}).then(e=>SW.set(t,{probe:e,at:Date.now()}),()=>SW.set(t,{probe:null,at:Date.now()})).then(()=>i&&r(e=>e+1)),()=>{i=!1}},[e,t,n]);let i=n?CW(t):null;return{pending:n&&!i,probe:i?.probe??null}}function TW({d:e}){return(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:e})})}var EW=`M6.5 3.5h-3v9h9v-3M9.5 3.5h3v3M12.5 3.5l-5 5`;function DW({model:e,tab:t,onNavigate:n,onStep:r}){B();let i=ak(t),[a,o]=(0,g.useState)(i),[s,c]=(0,g.useState)(!1),[l,u]=(0,g.useState)(0),d=v(e.client.conn).hello?.peer?.local,f=i?yW(i,window.location,d):null;(0,g.useEffect)(()=>{o(i),c(!1)},[i]);let p=e=>{let t=vW(e);c(t===null&&e.trim()!==``),t!==null&&(o(t),t===i?u(l+1):n(t))},m=i?new URL(i).hostname:``,h=f===`yes`&&i.startsWith(`https:`)&&!hW(m),{pending:_,probe:y}=wW(e.client,i,h),b=i&&f?bW(i,f,y):null,x=f===`yes`&&!b&&!_,S=b?z(`browser.${b.key}`,{host:b.host}):f===null?z(s?`browser.invalid`:`browser.empty`):null;return(0,V.jsxs)(`div`,{className:FI,children:[(0,V.jsxs)(`form`,{className:II,onSubmit:e=>{e.preventDefault(),p(a)},children:[(0,V.jsx)(`button`,{type:`button`,className:bI({small:!0}),disabled:t.at<=0,title:z(`browser.back`),"aria-label":z(`browser.back`),onClick:()=>r(t.at-1),children:(0,V.jsx)(TW,{d:`M10 3.5 5.5 8l4.5 4.5`})}),(0,V.jsx)(`button`,{type:`button`,className:bI({small:!0}),disabled:t.at>=t.urls.length-1,title:z(`browser.forward`),"aria-label":z(`browser.forward`),onClick:()=>r(t.at+1),children:(0,V.jsx)(TW,{d:`M6 3.5 10.5 8 6 12.5`})}),(0,V.jsx)(`button`,{type:`button`,className:bI({small:!0}),disabled:!x,title:z(`browser.reload`),"aria-label":z(`browser.reload`),onClick:()=>u(l+1),children:(0,V.jsx)(TW,{d:`M12.5 8a4.5 4.5 0 1 1-1.4-3.3M12.5 2.5v2.7H9.8`})}),(0,V.jsx)(`input`,{className:`browser-url mono ${LI}`,value:a,placeholder:z(`browser.placeholder`),"aria-label":z(`browser.address`),"aria-invalid":s,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,inputMode:`url`,onChange:e=>o(e.target.value)}),i?(0,V.jsx)(`a`,{className:bI({small:!0}),href:i,target:`_blank`,rel:`noopener noreferrer`,title:z(`browser.openTab`),"aria-label":z(`browser.openTab`),children:(0,V.jsx)(TW,{d:EW})}):(0,V.jsx)(`button`,{type:`button`,className:bI({small:!0}),disabled:!0,"aria-label":z(`browser.openTab`),children:(0,V.jsx)(TW,{d:EW})})]}),x?(0,V.jsx)(`iframe`,{className:RI,src:i,title:i,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups`,referrerPolicy:`no-referrer`},`${i}#${l}`):S?(0,V.jsx)(`p`,{className:PI,children:S}):null]})}var OW=3;function kW({model:e,task:t}){B();let n=t.autoFixCi,r=n=>void e.client.request(`task.autoFixCi`,{taskId:t.id,enabled:n}).catch(e=>G(e instanceof Error?e.message:String(e),`error`));return(0,V.jsx)(`div`,{className:`flex items-center gap-3 px-2 pt-1 font-mono text-meta`,children:n?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:n.stopped?AT.attention:`text-muted`,title:z(`files.autoFix.hint`),children:z(n.stopped?`files.autoFix.stopped`:`files.autoFix.count`,{n:n.attempts,max:OW})}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>r(!1),children:z(`files.autoFix.off`)})]}):(0,V.jsx)(H,{hit:`tight`,title:z(`files.autoFix.hint`),onClick:()=>r(!0),children:z(`files.autoFix.on`)})})}function AW(e){let t=e.pr;return!!t&&t.number!==void 0&&!e.machine&&(t.lifecycle===`open`||t.lifecycle===`ready_to_merge`)}function jW(e){let t={fail:0,pending:0,pass:0,skipped:0};for(let n of e)t[n.state]++;return t}function MW(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m${String(t%60).padStart(2,`0`)}s`:`${Math.floor(n/60)}h${String(n%60).padStart(2,`0`)}m`}function NW(e){let t=[],n=e.mergeState.toUpperCase();e.draft&&t.push({key:`files.merge.draft`,tone:`warning`}),e.mergeable.toUpperCase()===`CONFLICTING`||n===`DIRTY`?t.push({key:`files.merge.conflicts`,tone:`attention`}):n===`BEHIND`?t.push({key:`files.merge.behind`,tone:`warning`}):n===`UNSTABLE`?t.push({key:`files.merge.unstable`,tone:`warning`}):n===`BLOCKED`?t.push({key:`files.merge.blocked`,tone:`warning`}):n===`CLEAN`&&!e.draft&&t.push({key:`files.merge.clean`,tone:`success`});let r=e.review.toUpperCase();return r===`APPROVED`?t.push({key:`files.merge.approved`,tone:`success`}):r===`CHANGES_REQUESTED`?t.push({key:`files.merge.changes`,tone:`attention`}):r===`REVIEW_REQUIRED`&&t.push({key:`files.merge.reviewRequired`,tone:`warning`}),t}var PW=`flex flex-col gap-0.5 px-2 pb-2 font-mono text-meta`,FW=`flex items-start gap-2`,IW=`flex min-w-0 flex-1 flex-wrap items-center gap-x-2 text-left text-ink`,LW={pass:{glyph:`✓`,tone:`success`},fail:{glyph:`✗`,tone:`attention`},pending:{glyph:`●`,tone:`warning`},skipped:{glyph:`–`,tone:`muted`}};function RW({model:e,task:t}){B();let n=t.pr,r=t.id,[i,a]=(0,g.useState)(()=>Bs(e,`pr.checks`,{taskId:r})??null),[o,s]=(0,g.useState)(null),[c,l]=(0,g.useState)({}),[u,d]=(0,g.useState)(0),f=`${n?.number}:${n?.checkState}:${n?.mergeable}:${n?.reviewDecision}`;(0,g.useEffect)(()=>{let t=!0,n={taskId:r};return e.client.request(`pr.checks`,u>0?{...n,fresh:!0}:n).then(r=>{t&&(Vs(e,`pr.checks`,n,r),a(r))},e=>t&&a({outcome:`unavailable`,detail:e instanceof Error?e.message:String(e)})),()=>{t=!1}},[e,r,f,u]);let p=t=>{let n=`${t.runId}:${t.name}`;if(c[n]){l(({[n]:e,...t})=>t);return}l(e=>({...e,[n]:{state:`loading`}})),e.client.request(`pr.checkLog`,{taskId:r,runId:t.runId,job:t.name}).then(e=>e.outcome===`ok`?{state:`text`,text:e.tail}:e.outcome===`none`?{state:`note`,text:z(`files.checks.noLog`)}:{state:`note`,text:z(`files.checks.logUnavailable`,{detail:e.detail})}).catch(e=>({state:`note`,text:z(`files.checks.logUnavailable`,{detail:e instanceof Error?e.message:String(e)})})).then(e=>l(t=>n in t?{...t,[n]:e}:t))},m=(0,V.jsx)(H,{hit:`tight`,className:`flex-none whitespace-nowrap`,onClick:()=>d(e=>e+1),children:z(`files.checks.refresh`)});if(!i)return(0,V.jsx)(`div`,{className:PW,children:(0,V.jsx)(`div`,{className:FW,children:(0,V.jsxs)(`span`,{className:`flex-1 text-muted`,children:[z(`files.checks.title`),` `,z(`files.checks.loading`)]})})});if(i.outcome!==`ok`)return(0,V.jsx)(`div`,{className:PW,children:(0,V.jsxs)(`div`,{className:FW,children:[(0,V.jsx)(`span`,{className:`min-w-0 flex-1 text-muted wrap-anywhere`,children:i.outcome===`none`?z(`files.checks.none`):z(`files.checks.unavailable`,{detail:i.detail})}),m]})});let h=jW(i.checks),_=o??(h.fail>0||h.pending>0),v=NW(i);return(0,V.jsxs)(`div`,{className:PW,children:[(0,V.jsxs)(`div`,{className:FW,children:[(0,V.jsxs)(H,{variant:`row`,className:IW,"aria-expanded":_,disabled:i.total===0,onClick:()=>s(!_),children:[i.total>0&&(0,V.jsx)(Fa,{right:!_}),(0,V.jsx)(`span`,{children:i.total===0?z(`files.checks.none`):z(`files.checks.summary`,{pass:h.pass+h.skipped,total:i.total})}),h.fail>0&&(0,V.jsx)(`span`,{className:AT.attention,children:z(`files.checks.failed`,{count:h.fail})}),h.pending>0&&(0,V.jsx)(`span`,{className:AT.warning,children:z(`files.checks.running`,{count:h.pending})}),v.map(e=>(0,V.jsx)(`span`,{className:AT[e.tone],children:z(e.key)},e.key))]}),m]}),_&&i.checks.map(e=>{let{glyph:t,tone:n}=LW[e.state],r=`${e.runId}:${e.name}`,i=c[r];return(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 pl-4`,children:[(0,V.jsx)(`span`,{className:`w-[1ch] flex-none text-center ${AT[n]}`,children:t}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:e.name,children:e.name}),e.durationMs!==null&&(0,V.jsx)(`span`,{className:`flex-none text-subtle`,children:MW(e.durationMs)}),e.state===`fail`&&e.runId&&(0,V.jsx)(H,{hit:`tight`,className:`flex-none whitespace-nowrap`,onClick:()=>p(e),children:z(i?`files.checks.hideLog`:`files.checks.log`)})]}),i&&(0,V.jsx)(`pre`,{className:`m-0 ml-4 mb-1 max-h-40 overflow-y-auto rounded-sm border-hairline border-line bg-inset px-2 py-1.5 whitespace-pre-wrap wrap-anywhere text-muted`,children:i.state===`loading`?z(`files.checks.loading`):i.text})]},`${e.name}:${e.url}`)}),_&&i.total>i.checks.length&&(0,V.jsx)(`span`,{className:`pl-4 text-subtle`,children:z(`files.checks.more`,{count:i.total-i.checks.length})})]})}function zW({model:e,task:t}){return AW(t)?(0,V.jsxs)(`div`,{onKeyDown:e=>e.stopPropagation(),children:[(0,V.jsx)(RW,{model:e,task:t}),(0,V.jsx)(kW,{model:e,task:t})]}):null}function BW(e,t){let n={children:new Map,file:!1};for(let t of e){let e=n;for(let n of t.split(`/`)){let t=e.children.get(n);t||(t={children:new Map,file:!1},e.children.set(n,t)),e=t}e.file=!0}let r=[],i=(e,n,a)=>{let o=[...e.children].sort(([e,t],[n,r])=>{let i=t.children.size>0&&!t.file;return i===(r.children.size>0&&!r.file)?e.localeCompare(n):i?-1:1});for(let[e,s]of o){let o=s.children.size>0&&!s.file,c=o?`${n}${e}/`:`${n}${e}`,l=o&&t.has(c);r.push({path:c,name:e,depth:a,dir:o,open:l}),l&&i(s,c,a+1)}};return i(n,``,0),r}var VW={start:`\x1B[200~`,end:`\x1B[201~`};function HW(e,t){return e.engineTarget(t).tabId??e.tabs.get()[t]?.find(e=>e.kind===`engine`)?.id}async function UW(e,t,n){let r=HW(e,t);if(!r)return G(z(`files.stripNoEngine`),`error`),!1;try{return e.selection.get().tabId!==r&&e.select(t,r),await e.client.request(`term.input`,{stream:EC(t,r),data:`${VW.start}${n}${VW.end}`}),G(z(`files.stripFilled`)),!0}catch(e){return G(e instanceof Error?e.message:String(e),`error`),!1}}var WW=`w-full min-w-0 rounded-sm border-hairline border-line bg-paper px-2 py-1 font-mono text-meta text-ink outline-none placeholder:text-subtle focus-visible:border-accent`,GW=`${WW} min-h-24 resize-none leading-[1.45]`,KW=e=>`min-w-0 flex-1 cursor-text break-words text-left font-mono text-meta ${e?`text-subtle line-through`:`text-ink`}`,qW=700;function JW({model:e,task:t}){B();let n=t.todos??[],[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(null),[s,c]=(0,g.useState)(t.notes??``),l=(0,g.useRef)(!1),u=(0,g.useRef)(t.notes??``),d=(0,g.useRef)(null);(0,g.useEffect)(()=>{l.current||(u.current=t.notes??``,c(t.notes??``))},[t.notes]),(0,g.useEffect)(()=>()=>{d.current!==null&&window.clearTimeout(d.current)},[]);let f=n=>e.client.request(`task.notes`,{taskId:t.id,...n}).catch(e=>G(String(e),`error`)),p=e=>{d.current!==null&&window.clearTimeout(d.current),d.current=null,e!==u.current&&(u.current=e,f({notes:e}))},m=()=>{let e=r.trim();e!==``&&(i(``),f({ops:[{op:`add`,text:e}]}))},h=()=>{if(!a)return;let e=a.text.trim(),t=n.find(e=>e.id===a.id)?.text;o(null),e===``?f({ops:[{op:`remove`,id:a.id}]}):e!==t&&f({ops:[{op:`edit`,id:a.id,text:e}]})},_=ZP(t);return(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 font-mono text-meta`,onKeyDown:e=>e.stopPropagation(),children:[(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[n.map(e=>(0,V.jsxs)(`div`,{className:`flex items-start gap-2 py-0.5`,children:[(0,V.jsx)(H,{hit:`tight`,className:e.done?`text-subtle`:void 0,"aria-label":z(e.done?`files.todoUncheck`:`files.todoCheck`,{text:e.text}),onClick:()=>void f({ops:[{op:`check`,id:e.id,done:!e.done}]}),children:e.done?`[x]`:`[ ]`}),a?.id===e.id?(0,V.jsx)(`input`,{className:WW,value:a.text,maxLength:500,autoFocus:!0,"aria-label":z(`files.todoEdit`),onChange:t=>o({id:e.id,text:t.target.value}),onBlur:h,onKeyDown:e=>{e.key===`Enter`?h():e.key===`Escape`&&o(null)}}):(0,V.jsx)(H,{variant:`row`,className:KW(e.done),title:z(`files.todoEdit`),onClick:()=>o({id:e.id,text:e.text}),children:e.text}),(0,V.jsx)(H,{hit:`tight`,className:`text-subtle`,"aria-label":z(`files.todoRemove`,{text:e.text}),onClick:()=>void f({ops:[{op:`remove`,id:e.id}]}),children:`×`})]},e.id)),(0,V.jsx)(`input`,{className:WW,value:r,maxLength:500,placeholder:z(`files.todoAdd`),"aria-label":z(`files.todoAdd`),autoComplete:`off`,enterKeyHint:`done`,onChange:e=>i(e.target.value),onKeyDown:e=>{e.key===`Enter`&&m()}})]}),(0,V.jsx)(`div`,{className:`flex justify-end`,children:(0,V.jsx)(H,{disabled:!_,title:_?z(`files.todoSendHint`,{count:XP(t).length}):z(`files.todoNoneOpen`),onClick:()=>_&&void UW(e,t.id,_),children:z(`files.todoSend`)})}),(0,V.jsx)(`textarea`,{className:GW,value:s,maxLength:2e4,spellCheck:!1,placeholder:z(`files.notesPlaceholder`),"aria-label":z(`files.notesLabel`),onFocus:()=>{l.current=!0},onChange:e=>{c(e.target.value),d.current!==null&&window.clearTimeout(d.current);let t=e.target.value;d.current=window.setTimeout(()=>p(t),qW)},onBlur:e=>{l.current=!1,p(e.target.value)}})]})}function YW(e){let t=e.kind===`task`&&!e.noWorktree&&!e.machine&&!e.archived,n=e.changes;return t&&!!n&&`added`in n&&n.added+n.deleted>0}function XW(e){return[...YW(e)?[`commit`]:[],...ZW(e)]}function ZW(e){let t=e.pr;if(!t)return e.kind===`task`&&!e.noWorktree&&!e.machine&&!e.archived&&!e.sessionPrs?.length?[`createPR`]:[];if(t.lifecycle===`merged`)return e.archived||e.kind===`main`?[]:[`archive`];if(t.lifecycle!==`open`&&t.lifecycle!==`ready_to_merge`)return[];let n=[];return((t.mergeable??``).toUpperCase()===`CONFLICTING`||e.prChip===`conflict`)&&n.push(`conflicts`),t.checkState===`failing`&&n.push(`fixCI`),(t.reviewDecision??``).toUpperCase()===`CHANGES_REQUESTED`&&n.push(`comments`),n}async function QW(e,t,n){try{let r=await e.client.request(`task.prompt`,{taskId:t.id,kind:n});r.outcome===`unavailable`?G(z(`files.stripUnavailable`,{detail:r.detail??``}),`error`):r.outcome===`none`||!r.prompt?G(z(`files.stripNothing`),`error`):await UW(e,t.id,r.prompt)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}}var $W={commit:`files.stripCommit`,createPR:`files.stripCreate`,conflicts:`files.stripConflicts`,fixCI:`files.stripFixCi`,comments:`files.stripComments`,archive:`files.stripArchive`};function eG({model:e,task:t}){let n=XW(t);return n.length===0?null:(0,V.jsx)(`div`,{className:`flex flex-wrap justify-end gap-x-3.5 gap-y-1 px-2 pb-2 font-mono text-meta whitespace-nowrap`,children:n.map(n=>(0,V.jsx)(H,{onClick:()=>n===`archive`?void fF(e,t):void QW(e,t,n),children:z($W[n])},n))})}var tG=e=>`${e.files} file${e.files===1?``:`s`}, +${e.added} −${e.removed}${e.base?` vs ${e.base}`:``}`;function nG(e){let t=[`**${e.title}**`,`Branch \`${e.branch}\` · ${tG(e)}`];return e.pr?.url&&t.push(`PR: ${e.pr.url}`),e.checks&&t.push(`Checks: ${e.checks}`),e.text&&t.push(``,e.reported?e.text:`Last reply:\n${e.text}`),e.openTodos.length>0&&t.push(``,`Still open:`,...e.openTodos.map(e=>`- ${e}`)),t.join(`
130
+ `)}function rG(e){let t=[`## Summary`,``,e.text??e.title,``,`## Changes`,``,`- ${tG(e)} on \`${e.branch}\``];return e.checks&&t.push(`- Checks: ${e.checks}`),e.openTodos.length>0&&t.push(``,`## Not done`,``,...e.openTodos.map(e=>`- [ ] ${e}`)),t.join(`
131
+ `)}function iG(e){let t=[e.pass?`${e.pass} passed`:``,e.fail?`${e.fail} failed`:``,e.pending?`${e.pending} pending`:``].filter(Boolean);return t.length>0?t.join(` · `):null}async function aG(e){try{await navigator.clipboard.writeText(e),G(z(`files.report.copied`))}catch{G(z(`menu.copyFailed`),`error`)}}function oG(e){B();let{model:t,task:n}=e,[r,i]=(0,g.useState)(!e.narrow),[a,o]=(0,g.useState)(null),s=!!n.report?.summary;(0,g.useEffect)(()=>{if(s)return;let e=!0;return Hs(t,`output.read`,{taskId:n.id,limit:8}).then(t=>e&&o(uL(t)),()=>{}),()=>{e=!1}},[t,n.id,s,n.rowStatus?.since]);let c=(0,g.useMemo)(()=>{let r=Bs(t,`pr.checks`,{taskId:n.id}),i=r?.outcome===`ok`?jW(r.checks):null;return{title:n.label||n.title,branch:n.branch,base:e.base,files:new Set(e.files.map(e=>e.path)).size,added:e.files.reduce((e,t)=>e+(t.added??0),0),removed:e.files.reduce((e,t)=>e+(t.deleted??0),0),text:n.report?.summary??a,reported:s,checks:i?iG(i):n.pr?.checkState&&n.pr.checkState!==`unknown`?n.pr.checkState:null,openTodos:XP(n).map(e=>e.text),pr:n.pr?{number:n.pr.number,url:n.pr.url}:null}},[t,n,e.base,e.files,a,s]);return(0,V.jsxs)(`section`,{className:`flex flex-col gap-1 px-2 pb-2 font-mono text-meta`,children:[(0,V.jsxs)(H,{variant:`row`,"aria-expanded":r,className:`flex items-center gap-1.5 text-left text-muted hover:text-ink`,onClick:()=>i(!r),children:[(0,V.jsx)(Fa,{right:!r}),(0,V.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[z(`files.report.title`),` · `,c.files,` · +`,c.added,` −`,c.removed]})]}),r&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`m-0 text-muted`,children:[c.branch,c.base?` → ${c.base}`:``,c.checks?` · ${c.checks}`:``,c.openTodos.length>0?` · ${z(`files.report.todos`,{count:c.openTodos.length})}`:``]}),c.text?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`text-subtle`,children:z(s?`files.report.claimed`:`files.report.lastReply`)}),(0,V.jsx)(`p`,{className:`m-0 max-h-24 overflow-y-auto whitespace-pre-wrap wrap-anywhere text-ink`,children:c.text})]}):(0,V.jsx)(`span`,{className:`text-subtle`,children:z(`files.report.none`)}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[(0,V.jsx)(H,{hit:`tight`,onClick:()=>void aG(nG(c)),children:z(`files.report.copyNote`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>void aG(rG(c)),children:z(`files.report.copyPr`)})]})]})]})}var sG=2e3;function cG({model:e,task:t}){B();let n=t.id,r=!t.machine,[i,a]=(0,g.useState)(null),[o,s]=(0,g.useState)(!1),c=i?.running===!0;if((0,g.useEffect)(()=>{if(!r)return;let t=!0,i=()=>e.client.request(`run.status`,{taskId:n}).then(e=>t&&a(e),()=>{});i();let o=c?window.setInterval(()=>void i(),sG):0;return()=>{t=!1,window.clearInterval(o)}},[e,n,r,c]),!r||!i?.script)return null;let l=async t=>{s(!0);try{a(await e.client.request(t,{taskId:n}))}catch(e){G(e instanceof Error?e.message:String(e),`error`)}finally{s(!1)}};return(0,V.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-x-3.5 gap-y-1 px-2 pb-2 font-mono text-meta whitespace-nowrap`,children:[i.url&&(0,V.jsx)(H,{onClick:()=>i.url&&eA(n,i.url),children:z(`files.run.open`,{port:i.port??``})}),(0,V.jsx)(H,{disabled:o,onClick:()=>void l(c?`run.stop`:`run.start`),children:z(c?`files.run.stop`:`files.run.run`)})]})}var lG={"session-start":{glyph:`○`,tone:`text-muted`},"turn-start":{glyph:`▶`,tone:`text-info`},"turn-complete":{glyph:`✓`,tone:`text-success`},"turn-failed":{glyph:`✗`,tone:`text-error`},"turn-interrupted":{glyph:`■`,tone:`text-warning`},"awaiting-input":{glyph:`?`,tone:`text-warning`},"session-end":{glyph:`○`,tone:`text-muted`},"tool-failed":{glyph:`!`,tone:`text-error`},"pre-compact":{glyph:`≈`,tone:`text-muted`},"post-compact":{glyph:`≈`,tone:`text-muted`},"subagent-start":{glyph:`↳`,tone:`text-muted`},"subagent-stop":{glyph:`↲`,tone:`text-muted`},commit:{glyph:`◆`,tone:`text-accent`},"pr-opened":{glyph:`⇡`,tone:`text-success`},"pr-merged":{glyph:`⇡`,tone:`text-merged`},"pr-closed":{glyph:`⇡`,tone:`text-muted`},"pr-failing":{glyph:`⇡`,tone:`text-error`},"pr-passing":{glyph:`⇡`,tone:`text-success`},"pr-conflict":{glyph:`⇡`,tone:`text-error`},"pr-changes":{glyph:`⇡`,tone:`text-warning`}},uG={glyph:`·`,tone:`text-muted`};function dG(e){return e.kind===`commit`?{to:`diff`}:e.kind.startsWith(`pr-`)?e.url?{to:`pr`,url:e.url}:null:e.tabId?{to:`tab`,tabId:e.tabId}:null}function fG(e,t){if(!t)return[];if(!e)return[`pr-opened`];let n=[];if(e.lifecycle!==t.lifecycle&&(t.lifecycle===`merged`?n.push(`pr-merged`):t.lifecycle===`closed`&&n.push(`pr-closed`)),e.lifecycle===`unknown`)return n;e.checkState!==t.checkState&&(t.checkState===`failing`?n.push(`pr-failing`):t.checkState===`passing`&&n.push(`pr-passing`));let r=e=>(e.mergeable??``).toUpperCase()===`CONFLICTING`;r(t)&&!r(e)&&n.push(`pr-conflict`);let i=e=>(e.reviewDecision??``).toUpperCase()===`CHANGES_REQUESTED`;return i(t)&&!i(e)&&n.push(`pr-changes`),n}function pG(e,t){return[...e,...t].sort((e,t)=>t.at-e.at)}var mG=_({}),hG=400,gG=15e3,_G=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1});function vG(e,t){if(!e||e.id!==t.id)return;let n=fG(e.pr,t.pr);if(n.length===0)return;let r=Date.now(),i=n.map(e=>({kind:e,at:r,tail:t.pr?.number===void 0?``:`#${t.pr.number}`,...t.pr?.url?{url:t.pr.url}:{}})),a=mG.get();mG.set({...a,[t.id]:[...a[t.id]??[],...i].slice(-50)})}function yG(e){let t=(0,g.useRef)(void 0);(0,g.useEffect)(()=>{vG(t.current,e),t.current=e},[e])}function bG({model:e,task:t}){B();let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(null),o=v(mG)[t.id],s=JSON.stringify([t.rowStatus,t.tabStatus,t.changes,t.pr,t.updatedAt]),c=(0,g.useRef)(0),l=(0,g.useRef)(()=>{});l.current=()=>{c.current=Date.now(),e.client.request(`task.timeline`,{taskId:t.id}).then(e=>{r(e.entries),a(null)},e=>a(e instanceof Error?e.message:String(e)))},(0,g.useEffect)(()=>{let e=window.setTimeout(()=>l.current(),Math.max(0,c.current+hG-Date.now()));return()=>window.clearTimeout(e)},[s]),(0,g.useEffect)(()=>{let e=window.setInterval(()=>l.current(),gG);return()=>window.clearInterval(e)},[]);let u=pG(n??[],o??[]),d=n=>{let r=dG(n);r?.to===`tab`?e.select(t.id,r.tabId):r?.to===`diff`?$k({taskId:t.id,path:`.`,scope:`branch`}):r?.to===`pr`&&window.open(r.url,`_blank`,`noopener`)};return(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[i&&(0,V.jsx)(`p`,{className:`mono text-error`,children:i}),!i&&n!==null&&u.length===0&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(`files.activityEmpty`)}),u.map(e=>{let t=lG[e.kind]??uG,n=e.kind in lG?z(`files.activityKind.${e.kind}`):e.kind,r=dG(e);return(0,V.jsxs)(H,{variant:`row`,className:tr({size:`file`}),disabled:!r,title:e.tail?`${n} · ${e.tail}`:n,onClick:()=>d(e),children:[(0,V.jsx)(`span`,{className:`flex-none text-muted tabular-nums`,children:_G(e.at)}),(0,V.jsx)(`span`,{className:`${ar} ${t.tone}`,children:t.glyph}),(0,V.jsxs)(`span`,{className:nr,children:[n,e.tail&&(0,V.jsxs)(`span`,{className:`text-muted`,children:[` `,e.tail]})]})]},`${e.at}:${e.kind}:${e.tabId??``}:${e.sha??``}:${e.tail}`)})]})}function xG({tabs:e,value:t,onChange:n,className:r}){return(0,V.jsx)(`div`,{className:Me(`flex gap-1`,r),role:`tablist`,children:e.map(e=>{let r=e.id===t;return(0,V.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":r,className:Me(`relative rounded-sm px-2.5 py-0.75 font-mono text-meta font-semibold`,`touch:after:absolute touch:after:content-[''] touch:after:-inset-x-0.5 touch:after:-top-2 touch:after:-bottom-1.5`,r?`bg-inset text-ink group-focus-within/pane:text-accent`:`text-muted`),onClick:()=>n(e.id),children:e.label},e.id)})})}var SG=[`all`,`changes`,`activity`,`notes`],CG={M:`text-warning`,A:`text-success`,"?":`text-success`,D:`text-error`,R:`text-accent`};function wG({model:e,task:t,narrow:n=!1}){let r=$o();B();let[i,a]=(0,g.useState)(`all`),[o,s]=(0,g.useState)(`working`),[c,l]=(0,g.useState)(()=>Bs(e,`files.list`,{taskId:t.id})?.files??null),[u,d]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.id})??null),[f,p]=(0,g.useState)(null),[m,h]=(0,g.useState)(new Set),[_,y]=(0,g.useState)(0),[b,x]=(0,g.useState)(0),S=(0,g.useRef)(null);yG(t);let C=v(fn),w=JSON.stringify(t.changes??null);(0,g.useEffect)(()=>{let n=!0,r=e=>n&&p(e instanceof Error?e.message:String(e));return Hs(e,`files.list`,{taskId:t.id}).then(e=>{n&&(l(e.files),p(null))},r),Hs(e,`diff.files`,{taskId:t.id}).then(e=>n&&d(e),r),()=>{n=!1}},[e,t.id,w,b]);let T=u?.base??null,E=i===`all`?c!==null:u!==null,D=o===`branch`&&T!=null,O=i===`activity`||i===`notes`?[]:i===`all`?BW(c??[],m).map(e=>({path:e.path,label:e.name,depth:e.depth,dir:e.dir,open:e.open})):(u?.files??[]).filter(e=>e.scope===(D?`branch`:`working`)).map(e=>({path:e.path,label:e.path,depth:0,dir:!1,open:!1,status:e.status,added:e.added,deleted:e.deleted})),k=Math.min(_,Math.max(0,O.length-1)),A=O[k],j=(e,t)=>h(n=>{let r=new Set(n);return t??!r.has(e)?r.add(e):r.delete(e),r}),ee=e=>$k({taskId:t.id,path:e,scope:i===`changes`&&D?`branch`:`working`}),M=n=>{if(!C?.startsWith(`${t.id}::`)){G(z(`files.mentionNoEngine`),`error`);return}e.client.request(`term.input`,{stream:C,data:`@${n} `}).catch(e=>G(String(e),`error`))},N=n=>t.machine?G(z(`files.remoteNoExternal`,{host:t.machine.label}),`error`):void e.client.request(`file.openExternal`,{taskId:t.id,path:n}).then(()=>G(z(`taskops.openedExternal`))).catch(e=>G(e instanceof Error?e.message:String(e),`error`));return(0,V.jsxs)(`div`,{className:`group/pane flex min-h-0 min-w-0 flex-1 flex-col outline-none ${n?`px-1.5 pt-2.5 pb-2`:`pt-0.5 pr-1.5 pb-1.5 pl-0`}`,tabIndex:0,ref:S,onKeyDown:e=>{let t=e.key;if(t===`j`||t===`ArrowDown`)y(Math.min(O.length-1,k+1));else if(t===`k`||t===`ArrowUp`)y(Math.max(0,k-1));else if((t===`l`||t===`ArrowRight`)&&A?.dir)j(A.path,!0);else if((t===`h`||t===`ArrowLeft`)&&A?.dir)j(A.path,!1);else if(t===`[`||t===`]`)a(SG[(SG.indexOf(i)+(t===`]`?1:SG.length-1))%SG.length]??`all`);else if(t===`b`&&i===`changes`&&T!=null)s(o===`working`?`branch`:`working`);else if(t===`r`)x(e=>e+1);else if(t===`D`&&e.shiftKey)ee(`.`);else if(t===`d`&&A)ee(A.path);else if(t===`Enter`&&A)A.dir?j(A.path):ee(A.path);else if(t===`a`&&A)M(A.path);else if(t===`o`&&A&&!A.dir)N(A.path);else return;e.preventDefault()},children:[(0,V.jsx)(eG,{model:e,task:t}),(0,V.jsx)(zW,{model:e,task:t}),(0,V.jsx)(cG,{model:e,task:t}),(0,V.jsx)(oG,{model:e,task:t,base:T,files:u?.files??[],narrow:n}),(0,V.jsx)(xG,{className:`px-1 pb-1.5`,tabs:[{id:`all`,label:z(`files.all`)},{id:`changes`,label:z(`files.changes`)},{id:`activity`,label:z(`files.activity`)},{id:`notes`,label:z(`files.notes`)}],value:i,onChange:e=>{a(e),y(0)}}),i===`changes`&&(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-x-2.5 gap-y-1 px-2 pb-2 font-mono text-meta text-muted`,children:[(0,V.jsx)(`span`,{children:D?z(`files.scopeBranch`,{base:T??``}):z(`files.scopeWorking`)}),T==null?u&&(0,V.jsx)(`span`,{children:z(`files.noBase`)}):(0,V.jsx)(H,{hit:`tight`,onClick:()=>s(o===`working`?`branch`:`working`),children:z(r?`files.toggleScopeTouch`:`files.toggleScope`)}),(0,V.jsx)(kT,{text:z(`files.legend`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>ee(`.`),children:z(r?`files.diffAllTouch`:`files.diffAll`)})]}),i===`activity`?(0,V.jsx)(bG,{model:e,task:t}):i===`notes`?(0,V.jsx)(JW,{model:e,task:t}):(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[f&&(0,V.jsx)(`p`,{className:`mono text-error`,children:f}),!f&&E&&O.length===0&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(i===`all`?`files.emptyAll`:`files.emptyChanges`)}),O.map((e,t)=>(0,V.jsxs)(`button`,{type:`button`,className:tr({selected:t===k,size:n?`file-narrow`:`file`}),style:{paddingLeft:8+e.depth*14},title:e.path,onClick:()=>{y(t),S.current?.focus(),e.dir?j(e.path):ee(e.path)},children:[e.status?(0,V.jsx)(`span`,{className:`${ar} ${CG[e.status]??``}`,children:e.status}):(0,V.jsx)(`span`,{className:`${ar} grid place-items-center text-subtle`,children:e.dir?(0,V.jsx)(Fa,{right:!e.open}):null}),(0,V.jsx)(`span`,{className:nr,children:e.label}),e.added?(0,V.jsxs)(PL,{tone:`added`,children:[`+`,e.added]}):null,e.deleted?(0,V.jsxs)(PL,{tone:`removed`,children:[`−`,e.deleted]}):null]},e.path))]})]})}function TG({children:e}){return(0,V.jsx)(`svg`,{className:`size-3.5 ${yI}`,viewBox:`0 0 16 16`,"aria-hidden":`true`,children:e})}var EG={chat:(0,V.jsx)(`path`,{d:`M3 3.5h10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H8l-3 2.5v-2.5H3a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1zM5 6.5h6M5 8.5h4`}),files:(0,V.jsx)(`path`,{d:`M2 4.5a1 1 0 0 1 1-1h3l1.5 1.5H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z`}),diff:(0,V.jsx)(`path`,{d:`M3.5 2.5h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1zM8 5v4M6 7h4M6 11h4`}),browser:(0,V.jsx)(`path`,{d:`M8 2a6 6 0 1 0 0 12A6 6 0 0 0 8 2zM2 8h12M8 2c2.2 2 2.2 10 0 12M8 2c-2.2 2-2.2 10 0 12`}),quota:(0,V.jsx)(`path`,{d:`M2.5 11.5a5.5 5.5 0 1 1 11 0M8 11.5l2.5-3.5M4.5 13.5h7`})};function DG(e){if(e.kind===`files`)return z(`panel.files`);if(e.kind===`chat`)return z(`panel.chat`);if(e.kind===`quota`)return z(`panel.quota`);if(e.kind===`diff`)return e.path===`.`?z(`panel.diff`):ok(e.path);let t=ak(e);return t?sk(t):z(`panel.browser`)}function OG(e){return e.kind===`diff`?e.path===`.`?z(`preview.whole`):e.path:e.kind===`browser`&&ak(e)||DG(e)}var kG=7.3,AG=51,jG=160;function MG(e,t){let n=0;for(let t of e){let e=0;for(let n of t)e+=(n.codePointAt(0)??0)>11903?2:1;n+=Math.min(jG,AG+e*kG)+2}return n<=t}var NG=null;function PG(e,t,n,r){let i=(t,r)=>({label:r,section:`move`,run:()=>Xk(e,e=>Ok(e,n.id,t))}),a=[];return!t.bottom&&t.top.tabs.length>1?a.push(i(`bottom`,z(`panel.splitDown`))):t.bottom&&a.push(r===`top`?i(`bottom`,z(`panel.moveBottom`)):i(`top`,z(`panel.moveTop`))),a.push({label:z(`panel.close`),section:`close`,run:()=>tA(e,n.id)}),t.top.tabs.length+(t.bottom?.tabs.length??0)>1&&a.push({label:z(`panel.closeOthers`),section:`close`,run:()=>Xk(e,e=>Dk(e,n.id))}),a}function FG(e,t){return[{label:z(`panel.newChat`),run:()=>Xk(e,e=>bk(e,`chat`))},{label:z(`panel.newFiles`),run:()=>Xk(e,e=>gk(e,t))},{label:z(`panel.newDiff`),run:()=>Xk(e,e=>vk(e,`.`,`working`))},{label:z(`panel.newBrowser`),run:()=>Xk(e,e=>_k(e,t))},{label:z(`panel.newQuota`),run:()=>Xk(e,e=>bk(e,`quota`))}]}function IG({taskId:e,panel:t,group:n,tabs:r,active:i,narrow:a,children:o}){B();let[s,c]=(0,g.useState)(null),l=()=>NG?.taskId===e,u=t=>{let r=NG;NG=null,c(null),r?.taskId===e&&Xk(e,e=>Ok(e,r.id,n,t))},d=t=>{let r=t.currentTarget.getBoundingClientRect();on.set({x:r.left,y:r.bottom+2,items:FG(e,n),target:t.currentTarget})},f=(e,t)=>{if(!l())return;e.preventDefault(),e.stopPropagation();let n=e.currentTarget.getBoundingClientRect();c({id:t,after:e.clientX>n.left+n.width/2})},p=(0,g.useRef)(null),[m,h]=(0,g.useState)(0);(0,g.useEffect)(()=>{let e=p.current;if(!e)return;let t=new ResizeObserver(([e])=>h(e?.contentRect.width??0));return t.observe(e),()=>t.disconnect()},[]);let _=m>0&&!MG(r.map(DG),m);return(0,g.useEffect)(()=>{p.current?.querySelector(`.is-active`)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[i,r.length,_]),(0,V.jsxs)(`div`,{className:TI(a),style:{gridRow:n===`top`?1:4},onDragOver:e=>{l()&&(e.preventDefault(),c(null))},onDrop:e=>{e.preventDefault(),u()},children:[(0,V.jsx)(`div`,{className:EI,role:`tablist`,"aria-label":z(`panel.tabs`),ref:p,children:r.map((r,o)=>(0,V.jsxs)(`div`,{role:`presentation`,className:DI({active:r.id===i,compact:_}),"data-drop":s?.id===r.id?s.after?`after`:`before`:void 0,draggable:!a,onDragStart:()=>{NG={taskId:e,id:r.id}},onDragEnd:()=>{NG=null,c(null)},onDragOver:e=>f(e,r.id),onDrop:e=>{e.preventDefault(),e.stopPropagation(),u(o+(s?.id===r.id&&s.after?1:0))},onMouseDown:e=>{e.button===1&&e.preventDefault()},onAuxClick:t=>{t.button===1&&(t.preventDefault(),tA(e,r.id))},onContextMenu:i=>{a||lW(i,PG(e,t,r,n))},children:[(0,V.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":r.id===i,className:OI(_&&r.id!==i),title:OG(r),onClick:()=>Xk(e,e=>fk(e,r.id)),children:[(0,V.jsx)(TG,{children:EG[r.kind]}),(0,V.jsx)(`span`,{className:kI,children:DG(r)})]}),(0,V.jsx)(`button`,{type:`button`,className:`${AI} ${_&&r.id!==i?`hidden`:``}`,"aria-label":z(`panel.close`),tabIndex:-1,onClick:()=>tA(e,r.id),children:`×`})]},r.id))}),!a&&(0,V.jsx)(`button`,{type:`button`,className:bI({tool:!0}),title:z(`panel.new`),"aria-label":z(`panel.new`),onClick:d,children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M8 3.5v9M3.5 8h9`})})}),o]})}var LG={md:`md`,markdown:`md`,html:`html`,htm:`html`,svg:`svg`,png:`image`,jpg:`image`,jpeg:`image`,gif:`image`,webp:`image`,pdf:`pdf`};function RG(e){let t=e.slice(e.lastIndexOf(`/`)+1),n=t.lastIndexOf(`.`);return n<0?null:LG[t.slice(n+1).toLowerCase()]??null}function zG(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var BG=e=>new TextDecoder().decode(zG(e));function VG(e,t){if(e===`svg`)return`image/svg+xml`;if(e===`pdf`)return`application/pdf`;let n=t.slice(t.lastIndexOf(`.`)+1).toLowerCase();return n===`jpg`||n===`jpeg`?`image/jpeg`:n===`gif`?`image/gif`:n===`webp`?`image/webp`:`image/png`}var HG=`default-src 'none'; img-src data:; style-src 'unsafe-inline'`;function UG(e){let t=`<meta http-equiv="Content-Security-Policy" content="${HG}">`,n=/^\s*<!doctype[^>]*>/i.exec(e);return n?`${n[0]}${t}${e.slice(n[0].length)}`:`${t}${e}`}var WG=/^\[([^\]\n]+)\]\((https?:\/\/[^\s)]+)\)/,GG=/^https?:\/\/[^\s<>)\]]+/,KG=/[\p{L}\p{N}]/u;function qG(e){let t=[],n=``,r=()=>{n&&t.push({t:`text`,v:n}),n=``},i=0;for(;i<e.length;){let a=e.slice(i),o=e[i]??``;if(o==="`"){let n=e.indexOf("`",i+1);if(n>i+1){r(),t.push({t:`code`,v:e.slice(i+1,n)}),i=n+1;continue}}else if(a.startsWith(`**`)){let n=e.indexOf(`**`,i+2);if(n>i+2){r(),t.push({t:`bold`,c:qG(e.slice(i+2,n))}),i=n+2;continue}}else if(o===`*`||o===`_`&&!KG.test(e[i-1]??``)){let n=e.indexOf(o,i+1);if(n>i+1&&!/\s/.test(e[i+1]??` `)&&(o===`*`||!KG.test(e[n+1]??``))){r(),t.push({t:`em`,c:qG(e.slice(i+1,n))}),i=n+1;continue}}else if(o===`[`){let e=WG.exec(a);if(e){r(),t.push({t:`link`,href:e[2],c:qG(e[1])}),i+=e[0].length;continue}}else if(o===`h`&&!KG.test(e[i-1]??``)){let e=GG.exec(a);if(e){let n=e[0].replace(/[.,;:!?]+$/,``);r(),t.push({t:`link`,href:n,c:[{t:`text`,v:n}]}),i+=n.length;continue}}n+=o,i++}return r(),t}var JG=/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/,YG=/^(#{1,6})\s+(.*?)\s*#*\s*$/,XG=/^(\s*)([-*+])\s+(.*)$/,ZG=/^(\s*)\d+[.)]\s+(.*)$/,QG=/^\s*([-*_])(\s*\1){2,}\s*$/,$G=/^\s*\|.*\|\s*$/,eK=/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/,tK=e=>e.trim().replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim());function nK(e){let t=e.replace(/\r\n?/g,`
132
132
  `).split(`
133
- `),n=[],r=[],i=()=>{r.length>0&&n.push({t:`para`,c:KG(r.join(`
134
- `))}),r=[]};for(let e=0;e<t.length;e++){let a=t[e],o=qG.exec(a);if(o){i();let r=o[1][0],a=[];for(e++;e<t.length&&!RegExp(`^\\s*${r}{3,}\\s*$`).test(t[e]);e++)a.push(t[e]);n.push({t:`code`,lang:o[2]??``,v:a.join(`
135
- `)});continue}if(a.trim()===``){i();continue}let s=JG.exec(a);if(s){i(),n.push({t:`heading`,level:s[1].length,c:KG(s[2])});continue}if(ZG.test(a)){i(),n.push({t:`hr`});continue}if(QG.test(a)){i();let r=[];for(;e<t.length&&QG.test(t[e]);e++){let n=t[e];$G.test(n)||r.push(eK(n))}e--,n.push({t:`table`,rows:r.map(e=>e.map(e=>KG(e)))});continue}if(a.startsWith(`>`)){i();let r=[];for(;e<t.length&&t[e].startsWith(`>`);e++)r.push(t[e].replace(/^>\s?/,``));e--,n.push({t:`quote`,c:KG(r.join(`
136
- `))});continue}let c=YG.exec(a),l=c?null:XG.exec(a);if(c||l){i();let r=!c,a=[];for(;e<t.length;e++){let n=r?XG.exec(t[e]):YG.exec(t[e]);if(!n)break;let i=n[1].length;a.push({depth:Math.min(3,Math.floor(i/2)),c:KG(r?n[2]:n[3])})}e--,n.push({t:`list`,ordered:r,items:a});continue}r.push(a)}return i(),n}var nK=`flex min-h-0 min-w-0 flex-1 flex-col font-sans text-body`,rK=`flex flex-none flex-wrap items-center gap-x-3 gap-y-1 px-3 pb-1.5 font-mono text-meta`,iK=`min-w-0 flex-1 basis-32 py-1 text-meta`,aK=`min-h-0 flex-1 overflow-y-auto px-3 pb-3`,oK=`m-0 px-3 py-2 font-mono text-meta text-subtle`,sK=`m-0 whitespace-pre-wrap px-3 pb-3 font-mono text-meta leading-[1.45] text-muted wrap-anywhere`,cK=e=>`group/entry mt-3 rounded-sm border-l-2 py-0.5 pl-2.5 ${e.flash?`border-accent bg-accent-soft`:e.current?`border-line-active`:`border-transparent`}`,lK=`mb-0.5 flex items-center gap-2 font-mono text-meta`,uK=e=>e===`user`?`text-accent`:`text-muted`,dK=`text-subtle`,fK=`ml-auto opacity-0 group-hover/entry:opacity-100 focus-visible:opacity-100 touch:opacity-100`,pK=`m-0 mt-0.5 flex min-w-0 items-baseline gap-1.5 font-mono text-meta text-subtle`,mK=`flex-none text-muted`,hK=`min-w-0 flex-1 truncate`,gK=`leading-[1.5] wrap-anywhere`,_K=`m-0 mb-2 whitespace-pre-wrap last:mb-0`,vK=`m-0 mt-3 mb-1.5 font-semibold first:mt-0`,yK=`m-0 mb-2 flex flex-col gap-0.5 pl-5 last:mb-0`,bK=`m-0 mb-2 border-l-2 border-line pl-2.5 whitespace-pre-wrap text-muted last:mb-0`,xK=`m-0 mb-2 overflow-x-auto rounded-sm border-hairline border-line bg-inset px-2.5 py-2 font-mono text-meta leading-[1.45] last:mb-0`,SK=`rounded-xs bg-inset px-1 font-mono text-meta`,CK=`text-accent underline`,wK=`mb-2 block max-w-full overflow-x-auto border-collapse font-mono text-meta last:mb-0`,TK=`border-hairline border-line px-2 py-0.5 text-left align-top`,EK=`my-2 border-0 border-t border-line`;function DK(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=e.toLowerCase(),i=[],a=0;for(let t=r.indexOf(n);t>=0;t=r.indexOf(n,a))t>a&&i.push(e.slice(a,t)),i.push((0,V.jsx)(`mark`,{className:UO,"data-hit":``,children:e.slice(t,t+n.length)},t)),a=t+n.length;return i.push(e.slice(a)),g.Children.toArray(i)}var OK=[`h3`,`h3`,`h4`,`h5`,`h6`,`h6`];function kK({level:e,children:t}){let n=OK[Math.min(5,Math.max(0,e-1))]??`h6`;return(0,V.jsx)(n,{className:vK,children:t})}function AK(e,t){return e.map((e,n)=>(0,V.jsx)(g.Fragment,{children:t(e)},n))}function jK({nodes:e,needle:t}){return AK(e,e=>e.t===`text`?DK(e.v,t):e.t===`code`?(0,V.jsx)(`code`,{className:SK,children:DK(e.v,t)}):e.t===`bold`?(0,V.jsx)(`strong`,{children:(0,V.jsx)(jK,{nodes:e.c,needle:t})}):e.t===`em`?(0,V.jsx)(`em`,{children:(0,V.jsx)(jK,{nodes:e.c,needle:t})}):(0,V.jsx)(`a`,{className:CK,href:e.href,target:`_blank`,rel:`noopener noreferrer`,children:(0,V.jsx)(jK,{nodes:e.c,needle:t})}))}function MK({block:e,needle:t}){switch(e.t){case`heading`:return(0,V.jsx)(kK,{level:e.level,children:(0,V.jsx)(jK,{nodes:e.c,needle:t})});case`para`:return(0,V.jsx)(`p`,{className:_K,children:(0,V.jsx)(jK,{nodes:e.c,needle:t})});case`code`:return(0,V.jsx)(`pre`,{className:xK,children:(0,V.jsx)(`code`,{children:DK(e.v,t)})});case`quote`:return(0,V.jsx)(`blockquote`,{className:bK,children:(0,V.jsx)(jK,{nodes:e.c,needle:t})});case`hr`:return(0,V.jsx)(`hr`,{className:EK});case`list`:{let n=e.ordered?`ol`:`ul`;return(0,V.jsx)(n,{className:`${yK} ${e.ordered?`list-decimal`:`list-disc`}`,children:AK(e.items,e=>(0,V.jsx)(`li`,{style:{marginLeft:`${e.depth*1.25}rem`},children:(0,V.jsx)(jK,{nodes:e.c,needle:t})}))})}case`table`:return(0,V.jsx)(`table`,{className:wK,children:(0,V.jsx)(`tbody`,{children:AK(e.rows,e=>(0,V.jsx)(`tr`,{children:AK(e,e=>(0,V.jsx)(`td`,{className:TK,children:(0,V.jsx)(jK,{nodes:e,needle:t})}))}))})})}}function NK({source:e,needle:t=``}){let n=(0,g.useMemo)(()=>tK(e),[e]);return(0,V.jsx)(`div`,{className:gK,children:AK(n,e=>(0,V.jsx)(MK,{block:e,needle:t}))})}function PK(e){if(e instanceof u_){if(e.code===`TOO_LARGE`){let t=e.detail?.size;return xL(z(`artifact.tooLarge`),{size:typeof t==`number`?`${(t/1048576).toFixed(1)} MB`:`5 MB+`})}if(e.code===`NOT_PREVIEWABLE`)return z(`artifact.notPreviewable`);if(e.code===`NOT_FOUND`)return z(`artifact.gone`)}return xL(z(`artifact.failed`),{error:e instanceof Error?e.message:String(e)})}function FK(e,t,n,r){let[i,a]=(0,g.useState)({kind:`loading`});return(0,g.useEffect)(()=>{let r=!0;return e.client.request(`file.read`,{taskId:t,path:n}).then(e=>r&&a({kind:`ready`,file:e}),e=>r&&a({kind:`failed`,text:PK(e)})),()=>{r=!1}},[e,t,n,r]),i}function IK(e,t){let n=(0,g.useMemo)(()=>e===null?null:URL.createObjectURL(new Blob([RG(e)],{type:t})),[e,t]);return(0,g.useEffect)(()=>()=>void(n&&URL.revokeObjectURL(n)),[n]),n}function LK({model:e,taskId:t,path:n,kind:r,changeKey:i}){B();let a=FK(e,t,n,i),o=IK(a.kind===`ready`&&(r===`svg`||r===`image`||r===`pdf`)?a.file.base64:null,r===`md`||r===`html`?``:BG(r,n));return a.kind===`loading`?(0,V.jsx)(`p`,{className:qt,children:z(`artifact.loading`)}):a.kind===`failed`?(0,V.jsx)(`p`,{className:`${qt} text-error`,children:a.text}):r===`md`?(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto px-3 py-2`,children:(0,V.jsx)(NK,{source:zG(a.file.base64)})}):r===`html`?(0,V.jsx)(`iframe`,{title:n,sandbox:``,srcDoc:HG(zG(a.file.base64)),style:{colorScheme:`light`,background:`#fff`},className:`min-h-0 w-full flex-1 border-none`}):o?r===`pdf`?(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsx)(`a`,{className:`${$t} px-3 py-1 font-mono text-meta`,href:o,target:`_blank`,rel:`noreferrer noopener`,children:z(`artifact.open`)}),(0,V.jsx)(`iframe`,{title:n,src:o,className:`min-h-0 w-full flex-1 border-none`})]}):(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:(0,V.jsx)(`img`,{src:o,alt:n,className:`max-w-full`})}):null}function RK(e,t,n){let r=[{ref:null,suggestion:{key:`default`,text:t,dim:z(`review.baseDefault`),accent:!0}}],i=(e,n)=>{for(let i of e)i!==t&&r.push({ref:i,suggestion:{key:`${n}:${i}`,text:i,dim:n}})};i(e?.branches??[],z(`review.baseBranch`)),i(e?.remotes??[],z(`review.baseRemote`)),i(e?.tags??[],z(`review.baseTag`));for(let t of e?.commits??[])r.push({ref:t.sha,suggestion:{key:`commit:${t.sha}`,text:t.sha,dim:t.subject}});let a=n.trim().toLowerCase();if(a===``)return r.slice(0,40);let o=r.filter(e=>`${e.suggestion.text} ${e.suggestion.dim??``}`.toLowerCase().includes(a)),s=e=>e.suggestion.text.toLowerCase()===a?0:1;return o.sort((e,t)=>s(e)-s(t)).slice(0,40)}function zK(e){let[t,n]=(0,g.useState)(!1),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(null),s=e.model.client;(0,g.useEffect)(()=>{if(!t)return;let n=!0;return Hs(s,`diff.refs`,{taskId:e.taskId}).then(e=>n&&o(e),()=>{}),()=>{n=!1}},[t,s,e.taskId]);let c=RK(a,e.base,r),l=t=>{e.onPick(t),n(!1),i(``)};return(0,V.jsxs)(`span`,{className:`relative`,onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&t&&n(!1)},children:[(0,V.jsx)(H,{hit:`tight`,"aria-expanded":t,title:z(`review.baseHint`),className:e.custom?``:`opacity-60 aria-expanded:opacity-100`,onClick:()=>n(!t),children:z(`review.basePicker`,{base:e.custom??e.base})}),t&&(0,V.jsx)(`div`,{className:`absolute top-full left-0 z-3 mt-1 w-64 max-w-full rounded-sm border-hairline border-line-active bg-surface p-1 shadow-popover`,children:(0,V.jsx)(ND,{field:`diff-base`,autoFocus:!0,value:r,onChange:i,items:c.map(e=>e.suggestion),open:!0,placeholder:z(`review.basePlaceholder`),onPick:e=>l(c[e]?.ref??null),onEnter:()=>l(r.trim()===``?null:r.trim())})})]})}var BK=`rove.diffBase`;function VK(){try{let e=JSON.parse(localStorage.getItem(BK)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`))}catch{return{}}}function HK(e){return VK()[e]??null}function UK(e,t){let n=VK();t===null?delete n[e]:n[e]=t;try{localStorage.setItem(BK,JSON.stringify(n))}catch{}}function WK(e){let[t,n]=(0,g.useState)(()=>HK(e.taskId));return[t,t=>{UK(e.taskId,t),n(t),t!==null&&e.scope!==`task`&&$k({taskId:e.taskId,path:e.path,scope:`task`})}]}var GK={add:`bg-diff-added-bg`,del:`bg-diff-removed-bg`},KK={add:`text-diff-added`,del:`text-diff-removed`};function qK(e,t){let n=t.cursor?`bg-inset group-focus/preview:bg-accent-soft`:t.noted?`bg-inset`:GK[e]??``;return`relative grid ${e===`file`||e===`note`?`cursor-pointer`:`cursor-default`} grid-cols-[4ch_4ch_2ch_1fr] gap-x-2 gap-y-0 whitespace-pre px-3 narrow:grid-cols-[3ch_3ch_1ch_1fr] narrow:gap-x-1 narrow:px-1.5 ${n} ${e===`file`?`mt-2 border-t-hairline border-line pt-1 font-bold text-ink`:e===`hunk`||e===`meta`?`text-subtle`:``}`}var JK=`text-right text-subtle`,YK=(e,t)=>t?`text-accent`:KK[e]??``,XK=e=>`min-w-0 narrow:whitespace-pre-wrap narrow:wrap-anywhere ${KK[e]??``}`,ZK=`min-w-0 whitespace-pre-wrap wrap-anywhere text-accent`,QK=`flex min-w-0 items-baseline gap-2`;function $K(e){return(0,V.jsxs)(`div`,{className:`flex items-center ${e.viewed?`opacity-60`:``}`,children:[(0,V.jsxs)(H,{variant:`row`,"data-row":e.index,"aria-expanded":!e.closed,"aria-label":z(e.closed?`review.unfold`:`review.fold`,{path:e.name}),className:`${qK(`file`,{cursor:e.cursor,noted:!1})} min-w-0 flex-1 text-left`,onClick:e.onToggleFold,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{className:`grid place-items-center text-subtle`,children:(0,V.jsx)(Fa,{right:e.closed})}),(0,V.jsxs)(`span`,{className:QK,children:[(0,V.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name}),e.added?(0,V.jsxs)(NL,{tone:`added`,children:[`+`,e.added]}):null,e.removed?(0,V.jsxs)(NL,{tone:`removed`,children:[`−`,e.removed]}):null]})]}),e.path&&(0,V.jsx)(H,{hit:`tight`,className:`flex-none px-2`,"aria-pressed":e.viewed,"aria-label":z(e.viewed?`review.unmarkViewed`:`review.markViewed`,{path:e.name}),onClick:e.onToggleViewed,children:e.viewed?z(`review.viewedOn`):z(`review.viewed`)})]})}function eq(e){return(0,V.jsxs)(`div`,{className:`absolute top-full right-3 z-1 flex gap-1.5`,children:[(0,V.jsx)(H,{variant:`floating`,onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),e.onComment()},children:z(`review.comment`)}),e.showRange&&(0,V.jsx)(H,{variant:`floating`,onClick:t=>{t.stopPropagation(),e.onRange()},children:z(`review.range`)}),e.ranged&&(0,V.jsx)(H,{variant:`floating`,title:z(`preview.askInChatHint`),onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),e.onAsk()},children:z(`preview.askInChat`)})]})}function tq({note:e,onEdit:t}){return(0,V.jsxs)(H,{variant:`row`,className:`${qK(`note`,{cursor:!1,noted:!1})} w-full text-left`,onClick:t,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{className:`text-accent`,children:`●`}),(0,V.jsx)(`span`,{className:ZK,children:e.body})]})}function nq(e){return(0,V.jsxs)(`div`,{className:`flex flex-none flex-wrap items-center gap-x-3 gap-y-1 px-2 pt-1.5 font-mono text-meta`,children:[e.scopes&&(0,V.jsx)(bG,{className:`flex-wrap`,tabs:e.scopes,value:e.scope,onChange:e.onScope}),e.picker,(0,V.jsx)(H,{hit:`tight`,"aria-pressed":e.ignoreWs,title:z(`review.ignoreWsHint`),className:`opacity-60 aria-pressed:underline aria-pressed:opacity-100`,onClick:e.onToggleWs,children:z(`review.ignoreWs`)}),(0,V.jsxs)(`span`,{className:`flex min-w-0 basis-full flex-wrap items-center gap-x-1.5 text-muted`,children:[z(`review.totals`,{files:e.files,added:e.added,removed:e.removed}),e.shape&&(0,V.jsxs)(`span`,{children:[`· `,e.shape]}),e.files>0&&(0,V.jsxs)(`span`,{className:`whitespace-nowrap`,children:[`· `,z(`review.viewedCount`,{done:e.viewed,files:e.files})]})]}),(0,V.jsxs)(`span`,{className:`ml-auto flex items-center gap-x-3`,children:[e.files>1&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onNextFile,children:z(`review.nextFile`)}),e.onNextComment&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onNextComment,children:z(`review.nextComment`)}),e.files>1&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onFoldAll,children:e.allFolded?z(`review.unfoldAll`):z(`review.foldAll`)})]})]})}var rq=`rove.diffViewed`,iq=(e,t)=>`${e}\0${t}`;function aq(e){let t=2166136261;for(let n of e){let e=`${n.kind}${n.text}\n`;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619)}return(t>>>0).toString(16)}function oq(e){let t=new Map,n=-1,r=r=>{let i=n>=0?e[n]?.path:null;i&&t.set(i,aq(e.slice(n+1,r)))};return e.forEach((e,t)=>{e.kind===`file`&&(r(t),n=t)}),r(e.length),t}function sq(){try{let e=JSON.parse(localStorage.getItem(rq)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`))}catch{return{}}}function cq(e){try{localStorage.setItem(rq,JSON.stringify(e))}catch{}}function lq(e,t,n){let r=new Set;for(let[i,a]of n)e[iq(t,i)]===a&&r.add(i);return r}function uq(e,t,n,r){let i={...e};return r===void 0?delete i[iq(t,n)]:i[iq(t,n)]=r,i}function dq(e,t){return e.find(e=>e>t)??e[0]??null}var fq=`rove.diffIgnoreWs`;function pq(){try{return localStorage.getItem(fq)===`1`}catch{return!1}}function mq(e){try{localStorage.setItem(fq,e?`1`:`0`)}catch{}}var hq=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;function gq(e,t=null,n=!1){let r=[],i=0,a=0,o=t,s=!1;for(let t of e.replace(/\n$/,``).split(`
137
- `)){if(t.startsWith(`diff --git `)){let e=/ b\/(.+)$/.exec(t);o=e?e[1]:o,s=!1,r.push({kind:`file`,text:o??t,oldNo:null,newNo:null,path:o});continue}let e=hq.exec(t);if(e){i=Number(e[1]),a=Number(e[2]),s=!0,r.push({kind:`hunk`,text:t,oldNo:null,newNo:null,path:o});continue}if(!s){r.push({kind:`meta`,text:t,oldNo:null,newNo:null,path:o});continue}t.startsWith(`+`)?r.push({kind:`add`,text:t.slice(1),oldNo:null,newNo:a++,path:o}):t.startsWith(`-`)?r.push({kind:`del`,text:t.slice(1),oldNo:i++,newNo:null,path:o,...n?{foreignOld:!0}:{}}):t.startsWith(`\\`)?r.push({kind:`meta`,text:t,oldNo:null,newNo:null,path:o}):r.push({kind:`ctx`,text:t.slice(1),oldNo:i++,newNo:a++,path:o})}return r}function _q(e,t){return e.replace(/\n$/,``).split(`
138
- `).map((e,n)=>({kind:`ctx`,text:e,oldNo:null,newNo:n+1,path:t}))}function vq(e){return e.kind===`del`?e.foreignOld?null:e.oldNo:e.kind===`add`||e.kind===`ctx`?e.newNo:null}function yq(e){let t=e.startLine?`lines ${e.startLine}-${e.line}`:`line ${e.line}`;return`@${e.path} (${t}) `}function bq(e,t,n){let r=e[t],i=r?vq(r):null;if(!r?.path||i===null)return null;if(n===null||n===t)return{path:r.path,line:i};let a=e[Math.min(n,t)],o=e[Math.max(n,t)],s=a?vq(a):null,c=o?vq(o):null;return s===null||c===null||a?.path!==o?.path?{path:r.path,line:i}:s===c?{path:r.path,line:c}:{path:r.path,startLine:Math.min(s,c),line:Math.max(s,c)}}function xq(e,t,n){let r=bq(e,t,n);if(!r)return null;let i=r.startLine!==void 0&&n!==null;return{...r,first:i?Math.min(n,t):t,last:i?Math.max(n,t):t}}function Sq(e,t){let n=[],r=!1;return e.forEach((e,i)=>{e.kind===`file`&&(r=e.path!==null&&t.has(e.path)),(!r||e.kind===`file`)&&n.push(i)}),n}function Cq(e){let t=new Map,n=-1;return e.forEach((e,r)=>{if(e.kind===`file`){n=r,t.set(r,{added:0,removed:0});return}let i=t.get(n);i&&(e.kind===`add`?i.added++:e.kind===`del`&&i.removed++)}),t}var wq=[`source`,`tests`,`config`,`docs`,`generated`],Tq=/(^|\/)(bun\.lockb?|package-lock\.json|yarn\.lock|pnpm-lock\.yaml|Cargo\.lock|poetry\.lock|uv\.lock|Gemfile\.lock|go\.sum|composer\.lock)$/,Eq=/(^|\/)(dist|build|generated|__generated__|\.next)\/|\.min\.(js|css)$|\.snap$|\.generated\.|\.pb\.go$|\.map$/,Dq=/(^|\/)(tests?|__tests__|spec|e2e)\/|\.(test|spec)\.[cm]?[jt]sx?$|_test\.(go|py)$|(^|\/)test_[^/]+\.py$/,Oq=/\.(md|mdx|rst|txt)$|(^|\/)docs\//i,kq=/(^|\/)(\.[\w.-]+rc(\.\w+)?|[\w.-]*\.config\.[cm]?[jt]s|tsconfig[\w.-]*\.json|package\.json|biome\.json|Dockerfile|Makefile)$|\.(ya?ml|toml|ini|env)$|(^|\/)\.(github|changeset|vscode)\//,Aq=e=>Tq.test(e);function jq(e){return Tq.test(e)||Eq.test(e)?`generated`:Dq.test(e)?`tests`:Oq.test(e)?`docs`:kq.test(e)?`config`:`source`}var Mq=e=>jq(e)===`generated`;function Nq(e){let t=e.filter(e=>jq(e.path)!==`generated`),n=t.reduce((e,t)=>e+t.lines,0);return t.length===0?1:((e,t)=>e<=2&&t<=30?1:e<=5&&t<=150?2:e<=10&&t<=400?3:e<=20&&t<=1e3?4:5)(t.length,n)}function Pq(e){let t=[],n=(e,n)=>n>0&&t.push({group:e,count:n});for(let t of wq)t===`generated`?(n(`lockfile`,e.filter(Aq).length),n(`generated`,e.filter(e=>jq(e)===`generated`&&!Aq(e)).length)):n(t,e.filter(e=>jq(e)===t).length);return t}function Fq(e){let t=[];for(let n of e)(n.kind===`file`||t.length===0)&&t.push([]),t[t.length-1]?.push(n);let n=e=>wq.indexOf(jq(e[0]?.path??``));return t.map((e,t)=>({file:e,i:t})).sort((e,t)=>n(e.file)-n(t.file)||e.i-t.i).flatMap(({file:e})=>e)}function Iq(e){return Pq(e.map(e=>e.path)).map(({group:e,count:t})=>({key:e===`lockfile`?t===1?`lockfile`:`lockfiles`:e,count:t}))}function Lq(e,t){let n=[...e.entries()].flatMap(([e,n])=>{let r=t[e]?.path;return r?[{path:r,lines:n.added+n.removed}]:[]});return n.length<2?``:[z(`review.shape.effort`,{n:Nq(n)}),...Iq(n).map(e=>z(`review.shape.${e.key}`,{count:e.count}))].join(` · `)}function Rq(e,t,n){if(!e||typeof e!=`object`||!(`kind`in e))return{kind:`text`,text:z(`preview.unknown`)};let r=`text`in e&&typeof e.text==`string`?e.text:``;switch(e.kind){case`diff`:{let e=gq(r,t===`.`?null:t,n);return{kind:`rows`,rows:t===`.`?Fq(e):e,diff:!0}}case`code`:return{kind:`rows`,rows:_q(r,t),diff:!1};case`binary`:return{kind:`text`,text:z(`preview.binary`)};case`empty`:return{kind:`text`,text:z(`preview.empty`)};case`error`:return{kind:`text`,text:`message`in e?String(e.message):z(`preview.unknown`),error:!0};default:return{kind:`text`,text:z(`preview.noHunks`,{kind:String(e.kind)})}}}function zq(e){return e instanceof u_&&e.code===`UNKNOWN_OP`?Error(z(`review.notSupported`)):e instanceof Error?e:Error(String(e))}var Bq={add:`+`,del:`-`},Vq=40,Hq=160,Uq=e=>`${Bq[e.kind]??` `}${e.text.slice(0,Hq)}`,Wq=e=>e.startLine!==void 0&&e.startLine!==e.line?`${e.filePath}:${e.startLine}-${e.line}`:`${e.filePath}:${e.line}`;function Gq(e,t,n){let r=[];for(let i=t;i<=n&&r.length<Vq;i++){let t=e[i];t&&vq(t)!==null&&r.push(Uq(t))}return r.join(`
139
- `)}function Kq(e,t){let n=e.startLine??e.line,r=t.flatMap((t,n)=>t.path===e.filePath&&vq(t)!==null?[n]:[]);if(!e.code){let i=r.filter(r=>{let i=vq(t[r]);return i>=n&&i<=e.line}),a=i[0],o=i[i.length-1];return a===void 0||o===void 0?null:{first:a,last:o}}let i=e.code.split(`
140
- `);for(let e=0;e+i.length<=r.length;e++){let a=r.slice(e,e+i.length),o=a[0],s=a[a.length-1];if(o!==void 0&&s!==void 0&&vq(t[o])===n&&a.every((e,n)=>Uq(t[e])===i[n]))return{first:o,last:s}}return null}function qq(e,t,n){return Kq(e,t)?`ok`:t.some(t=>t.path===e.filePath)||n?`moved`:`unknown`}function Jq({notes:e,states:t,sending:n,onShow:r,onEdit:i,onDrop:a,onSend:o}){B();let[s,c]=(0,g.useState)(!1);if(e.length===0)return null;let l=e.length;return(0,V.jsxs)(`div`,{className:`flex max-h-2/5 min-h-0 flex-none flex-col border-t-hairline border-line font-mono text-meta`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-1.5 narrow:px-2`,children:[(0,V.jsxs)(H,{variant:`row`,className:`flex min-w-0 flex-1 items-center gap-2 text-left text-ink`,"aria-expanded":s,onClick:()=>c(!s),children:[(0,V.jsx)(Fa,{right:!s}),(0,V.jsx)(`span`,{children:l===1?z(`review.countOne`):z(`review.count`,{count:l})})]}),(0,V.jsx)(H,{disabled:n,onClick:o,children:n?z(`review.sending`):z(`review.send`,{count:l})})]}),s&&(0,V.jsx)(`ul`,{className:`m-0 min-h-0 list-none overflow-y-auto p-0 pb-1`,children:e.map(e=>(0,V.jsxs)(`li`,{className:`flex flex-col gap-0.5 px-3 py-1 narrow:px-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,V.jsx)(H,{variant:`row`,className:`min-w-0 flex-1 truncate text-left text-ink hover:underline`,title:z(`review.show`),onClick:()=>r(e),children:Wq(e)}),t.get(e.id)===`moved`&&(0,V.jsx)(`span`,{title:z(`review.movedHint`),children:(0,V.jsx)(NL,{tone:`warning`,children:z(`review.moved`)})}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>i(e),children:z(`review.edit`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>a(e),children:z(`review.drop`)})]}),(0,V.jsx)(`p`,{className:`m-0 line-clamp-2 whitespace-pre-wrap wrap-anywhere text-muted`,children:e.body})]},e.id))})]})}var Yq=[];function Xq({model:e,view:t,active:n,restored:r,onClose:i}){B();let a=$o(),[o,s]=(0,g.useState)(pq),[c,l]=(0,g.useState)(sq),[u,d]=WK(t),f=t.scope===`task`?u:null,p=f!==null,m={taskId:t.taskId,path:t.path,scope:t.scope,...o?{ignoreWhitespace:!0}:{},...f?{base:f}:{}},[h,_]=(0,g.useState)(()=>{let n=Bs(e,`diff.file`,m);return n===void 0?null:Rq(n,t.path,p)}),[y,b]=(0,g.useState)(()=>Bs(e,`review.list`,{taskId:t.taskId})?.notes??[]),[x,S]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.taskId})?.base??null),[C,w]=(0,g.useState)(0),[T,E]=(0,g.useState)(null),[D,O]=(0,g.useState)(!1),[k,A]=(0,g.useState)(new Set),[j,ee]=(0,g.useState)(!1),[M,N]=(0,g.useState)(0),P=(0,g.useRef)(null),F=e.client;(0,g.useEffect)(()=>{let e=!0;return Hs(F,`diff.file`,m).then(n=>e&&_(Rq(n,t.path,p)),t=>{if(e){if(f&&t instanceof u_&&t.code===`BAD_REF`){d(null),G(t.message,`error`);return}_({kind:`text`,text:t instanceof Error?t.message:String(t),error:!0})}}),()=>{e=!1}},[F,t.taskId,t.path,t.scope,o,f,M]),(0,g.useEffect)(()=>{let e=!0;return Hs(F,`diff.files`,{taskId:t.taskId}).then(t=>e&&S(t.base),()=>{}),()=>{e=!1}},[F,t.taskId,M]);let I=()=>void Hs(F,`review.list`,{taskId:t.taskId}).then(e=>b(e.notes));(0,g.useEffect)(I,[F,t.taskId,M]);let te=(0,g.useRef)(!1);(0,g.useEffect)(()=>{n&&(te.current||!r)&&P.current?.focus(),te.current=!0},[n,r]);let L=h?.kind===`rows`?h.rows:Yq,ne=h?.kind===`rows`&&h.diff,re=(0,g.useMemo)(()=>L.map((e,t)=>`row-${t}`),[L]),ie=(0,g.useMemo)(()=>Sq(L,k),[L,k]),R=(0,g.useMemo)(()=>Cq(L),[L]),ae=(0,g.useMemo)(()=>oq(L),[L]),oe=(0,g.useMemo)(()=>lq(c,t.taskId,ae),[c,t.taskId,ae]),se=(0,g.useRef)(new Set);(0,g.useEffect)(()=>{let e=[...ae.keys()].filter(e=>Mq(e)&&!se.current.has(e));if(e.length!==0){for(let t of e)se.current.add(t);A(t=>new Set([...t,...e]))}},[ae]);let ce=(0,g.useRef)(new Set);(0,g.useEffect)(()=>{let e=ce.current;ce.current=oe;let t=[...oe].filter(t=>!e.has(t)),n=[...e].filter(e=>!oe.has(e));(t.length!==0||n.length!==0)&&A(e=>new Set([...[...e].filter(e=>!n.includes(e)),...t]))},[oe]);let le=(0,g.useMemo)(()=>y.filter(e=>e.sentAt===void 0),[y]),ue=(0,g.useMemo)(()=>le.map(e=>({note:e,at:Kq(e,L)})),[le,L]),de=(0,g.useMemo)(()=>{let e=new Set;for(let{at:t}of ue)if(t)for(let n=t.first;n<=t.last;n++)e.add(n);return e},[ue]),fe=(0,g.useMemo)(()=>{let e=new Map;for(let{note:t,at:n}of ue)n&&e.set(n.last,[...e.get(n.last)??[],t]);return e},[ue]),pe=t.path===`.`&&h!==null&&!(h.kind===`text`&&h.error),me=(0,g.useMemo)(()=>{let e=new Map;for(let{note:t}of ue)e.set(t.id,qq(t,L,pe));return e},[ue,L,pe]);(0,g.useEffect)(()=>{if(ie.includes(C))return;let e=C;for(;e>0&&L[e]?.kind!==`file`;)e--;w(e),E(null)},[ie,C,L]),(0,g.useEffect)(()=>{P.current?.querySelector(`[data-row="${C}"]`)?.scrollIntoView({block:`nearest`})},[C]);let he=xq(L,C,T),ge=e=>A(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),_e=[...R.keys()].flatMap(e=>L[e]?.path?[L[e]?.path]:[]),ve=(0,g.useMemo)(()=>Lq(R,L),[R,L]),ye=_e.length>0&&_e.every(e=>k.has(e)),be=[...R.values()].reduce((e,t)=>({added:e.added+t.added,removed:e.removed+t.removed}),{added:0,removed:0}),xe=e=>{let n=uq(c,t.taskId,e,oe.has(e)?void 0:ae.get(e));l(n),cq(n)},Se=()=>{mq(!o),s(!o)},Ce=()=>{if(!he)return;let e=Wq({filePath:he.path,startLine:he.startLine,line:he.line});W.set((0,V.jsx)(lr,{multiline:!0,title:z(`preview.noteTitle`,{location:e}),submitLabel:z(`preview.noteSubmit`),onSubmit:async e=>{await F.request(`review.add`,{taskId:t.taskId,filePath:he.path,line:he.line,...he.startLine?{startLine:he.startLine}:{},code:Gq(L,he.first,he.last),body:e}),E(null),O(!1),I(),P.current?.focus()}}))},we=e=>W.set((0,V.jsx)(lr,{multiline:!0,title:z(`review.editTitle`,{location:Wq(e)}),initial:e.body,submitLabel:z(`review.editSubmit`),onSubmit:async n=>{await F.request(`review.edit`,{taskId:t.taskId,id:e.id,body:n}).catch(e=>{throw zq(e)}),I(),P.current?.focus()}})),Te=e=>void F.request(`review.remove`,{taskId:t.taskId,id:e.id}).then(I).catch(e=>G(zq(e).message,`error`)),Ee=v(fn),De=()=>{let e=bq(L,C,T);if(e){if(!Ee?.startsWith(`${t.taskId}::`)){G(z(`files.mentionNoEngine`),`error`);return}F.request(`term.input`,{stream:Ee,data:yq(e)}).then(()=>{E(null),sa(Ee)?.focus()}).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},Oe=e=>{let n=Kq(e,L),r=L.findIndex(t=>t.kind===`file`&&t.path===e.filePath);n?(A(t=>new Set([...t].filter(t=>t!==e.filePath))),w(n.first)):t.path===`.`&&r>=0?w(r):t.path!==e.filePath&&t.path!==`.`&&$k({taskId:t.taskId,path:e.filePath,scope:t.scope}),E(null),O(!1)},ke=()=>{ee(!0),F.request(`review.send`,e.engineTarget(t.taskId)).then(e=>{G(e.delivered?z(`preview.sent`,{count:e.sent}):z(`preview.notSent`,{reason:e.reason??``}),e.delivered?`info`:`error`),I()}).catch(e=>G(e instanceof Error?e.message:String(e),`error`)).finally(()=>ee(!1))},Ae=()=>{let e=dq([...R.keys()],C);e!==null&&(w(e),E(null),O(!1))},je=()=>{let e=dq(ue.flatMap(({at:e})=>e?[e.first]:[]).sort((e,t)=>e-t),C);if(e===null)return;let t=L[e]?.path;t&&A(e=>new Set([...e].filter(e=>e!==t))),w(e),E(null),O(!1)},Me=e=>w(t=>{let n=Math.max(0,ie.indexOf(t));return ie[Math.min(ie.length-1,Math.max(0,n+e))]??t}),Ne=e=>{let t=e.key;if(t===`j`||t===`ArrowDown`)Me(1);else if(t===`k`||t===`ArrowUp`)Me(-1);else if(t===`v`)E(e=>e===null?C:null),O(!0);else if(t===`c`&&!e.ctrlKey)Ce();else if(t===`x`){let e=ue.find(({at:e})=>e&&C>=e.first&&C<=e.last);e&&Te(e.note)}else if(t===`s`)ke();else if(t===`z`){let e=L[C]?.path;e&&ne&&ge(e)}else if(t===`r`)N(e=>e+1);else if(t===`q`||t===`Escape`)i();else if(e.ctrlKey&&!e.metaKey&&t.toLowerCase()===`c`&&!window.getSelection()?.toString())i();else return;e.preventDefault()},Pe=()=>{let e=window.getSelection();if(!e||e.isCollapsed)return;let t=e=>(e instanceof Element?e:e?.parentElement)?.closest(`[data-row]`),n=t(e.anchorNode),r=t(e.focusNode);!n||!r||(E(Number(n.dataset.row)),w(Number(r.dataset.row)),O(!0))},Fe=T===null?C:Math.min(T,C),Ie=T===null?C:Math.max(T,C),H=[{id:`working`,label:z(`review.scopeWorking`)},{id:`branch`,label:z(`review.scopeBranch`)},{id:`task`,label:z(`review.scopeTask`,{base:u??x??``})}];return(0,V.jsxs)(`div`,{className:`group/preview flex min-h-0 min-w-0 flex-1 flex-col outline-none`,tabIndex:0,ref:P,onKeyDown:Ne,children:[ne&&(0,V.jsx)(nq,{scopes:x===null?null:H,scope:t.scope,onScope:e=>$k({taskId:t.taskId,path:t.path,scope:e}),picker:x!==null&&(0,V.jsx)(zK,{taskId:t.taskId,model:e,base:x,custom:u,onPick:d}),ignoreWs:o,onToggleWs:Se,files:_e.length,shape:ve,added:be.added,removed:be.removed,viewed:oe.size,allFolded:ye,onFoldAll:()=>A(ye?new Set:new Set(_e)),onNextFile:Ae,onNextComment:ue.some(({at:e})=>e)?je:null}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto py-1.5 font-mono text-meta/normal`,onMouseUp:Pe,children:[!h&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(`preview.loading`)}),h?.kind===`text`&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle ${h.error?`text-error`:``}`,children:h.text}),ie.map(e=>{let t=L[e],n=e>=Fe&&e<=Ie;if(t.kind===`file`){let r=R.get(e),i=t.path;return(0,V.jsx)($K,{index:e,name:t.text,path:i,closed:i!==null&&k.has(i),viewed:i!==null&&oe.has(i),cursor:n,added:r?.added??0,removed:r?.removed??0,onToggleFold:()=>{w(e),E(null),O(!1),i&&ge(i)},onToggleViewed:()=>i&&xe(i)},re[e])}let r=de.has(e);return(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{"data-row":e,className:qK(t.kind,{cursor:n,noted:r}),onClick:t=>{window.getSelection()?.isCollapsed!==!1&&(t.shiftKey?E(e=>e??C):(!a||T===null)&&E(null),w(e),O(!0))},children:[(0,V.jsx)(`span`,{className:JK,children:t.oldNo??``}),(0,V.jsx)(`span`,{className:JK,children:t.newNo??``}),(0,V.jsx)(`span`,{className:YK(t.kind,r),children:t.kind===`add`?`+`:t.kind===`del`?`−`:r?`●`:` `}),(0,V.jsx)(`span`,{className:XK(t.kind),children:t.text}),D&&he&&e===Ie&&(0,V.jsx)(eq,{showRange:a&&T===null,ranged:T!==null,onComment:Ce,onRange:()=>E(C),onAsk:De})]}),fe.get(e)?.map(e=>(0,V.jsx)(tq,{note:e,onEdit:()=>we(e)},e.id))]},re[e])})]}),(0,V.jsx)(Jq,{notes:le,states:me,sending:j,onShow:Oe,onEdit:we,onDrop:Te,onSend:ke})]})}function Zq(e){B();let{model:t,view:n}=e,r=n.path===`.`?null:LG(n.path),[i,a]=(0,g.useState)(null),o=v(t.tasks);if(!r)return(0,V.jsx)(Xq,{...e});let s=i===n.path,c=JSON.stringify(o?.tasks.find(e=>e.id===n.taskId)?.changes??null);return(0,V.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex gap-x-3 px-2.5 py-1`,children:[(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":!s,onClick:()=>a(null),children:`[ ${z(`artifact.preview`)} ]`}),(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":s,onClick:()=>a(n.path),children:`[ ${z(`artifact.source`)} ]`})]}),s?(0,V.jsx)(Xq,{...e}):(0,V.jsx)(LK,{model:t,taskId:n.taskId,path:n.path,kind:r,changeKey:c})]})}var Qq=[`var(--info)`,`var(--accent)`,`var(--success)`,`var(--warning)`,`var(--error)`];function $q(e){return e>=90?`var(--error)`:e>=70?`var(--warning)`:`var(--accent)`}function eJ(e){let t=e.parts.filter(e=>e.share!==void 0);return t.length===0?[{width:rJ(e.percent),color:$q(e.percent)}]:t.map((e,t)=>({width:rJ(e.share??0),color:Qq[t%Qq.length]}))}function tJ(e,t){return e.parts[t]?.share===void 0?null:Qq[e.parts.slice(0,t).filter(e=>e.share!==void 0).length%Qq.length]}function nJ(e){return e>0&&e<.1?`<0.1%`:`${e<10?+e.toFixed(1):Math.round(e)}%`}function rJ(e){return Math.max(0,Math.min(100,e))}var iJ=`scrollbar-none flex min-h-0 flex-1 flex-col gap-2.5 overflow-y-auto p-2.5`,aJ=`m-0 p-3 font-mono text-meta text-muted`,oJ=`flex flex-col gap-1.5 rounded-sm border-hairline border-line px-3 py-2.5`,sJ=`flex w-fit cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-left font-sans text-meta font-medium text-ink [&:hover]:text-accent`,cJ=`text-[0.7em] text-muted`,lJ=`flex items-baseline justify-between gap-3 font-mono text-meta normal-nums`,uJ=`flex h-1 w-full overflow-hidden rounded-full bg-inset`,dJ=`h-full flex-none`,fJ=15e3,pJ=`rove.quota.folded`;function mJ(){try{let e=JSON.parse(localStorage.getItem(pJ)??`[]`);return new Set(Array.isArray(e)?e.filter(e=>typeof e==`string`):[])}catch{return new Set}}function hJ({model:e,task:t,active:n}){B();let r=v(e.client.conn),i=v(e.selection),a=i.taskId===t.id?i.tabId:null,[o,s]=(0,g.useState)({kind:`loading`}),[c,l]=(0,g.useState)(mJ);(0,g.useEffect)(()=>{if(!n||r.state!==`open`)return;let i=!0,o=()=>e.client.request(`quota.list`,a?{taskId:t.id,tabId:a}:{}).then(e=>i&&s({kind:`ready`,reply:e})).catch(e=>i&&s(t=>t.kind===`ready`?t:{kind:`failed`,error:CL(e)}));o();let c=window.setInterval(o,fJ);return()=>{i=!1,window.clearInterval(c)}},[e,n,r.state,t.id,a]);let u=e=>{let t=new Set(c);t.has(e)?t.delete(e):t.add(e),l(t),localStorage.setItem(pJ,JSON.stringify([...t]))};if(o.kind===`loading`)return(0,V.jsx)(`p`,{className:aJ,children:z(`quota.loading`)});if(o.kind===`failed`)return(0,V.jsx)(`p`,{className:aJ,children:z(`quota.failed`,{error:o.error})});let{meters:d,engineReported:f}=o.reply;return(0,V.jsxs)(`div`,{className:iJ,children:[d.length===0&&(0,V.jsx)(`p`,{className:`m-0 p-3 font-mono text-meta text-muted`,children:z(`quota.empty`)}),d.map(e=>(0,V.jsx)(gJ,{meter:e,folded:c.has(e.id),onToggle:()=>u(e.id)},e.id)),d.length>0&&!f&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.noEngineYet`)})]})}function gJ({meter:e,folded:t,onToggle:n}){let r=e.titleKey?z(`quota.title.${e.titleKey}`):e.title??e.id;return(0,V.jsxs)(`section`,{className:oJ,children:[(0,V.jsxs)(H,{variant:`row`,className:sJ,"aria-expanded":!t,onClick:n,children:[r,(0,V.jsx)(`span`,{className:cJ,children:t?`▸`:`▾`})]}),(0,V.jsxs)(`div`,{className:lJ,children:[(0,V.jsx)(`span`,{className:`text-ink`,children:z(`quota.used`,{percent:nJ(e.percent).replace(`%`,``)})}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.amount})]}),(0,V.jsx)(`div`,{className:uJ,role:`meter`,"aria-valuenow":Math.round(e.percent),"aria-valuemin":0,"aria-valuemax":100,children:eJ(e).map((e,t)=>(0,V.jsx)(`span`,{className:dJ,style:{width:`${e.width}%`,background:e.color}},t))}),e.resetsAt!==null&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.resets`,{when:_J(e.resetsAt)})}),e.expiresAt!==void 0&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.expires`,{when:vJ(e.expiresAt)})}),!t&&(0,V.jsx)(`ul`,{className:`m-0 mt-1 flex list-none flex-col gap-1 p-0`,children:e.parts.map((t,n)=>{let r=tJ(e,n),i=t.labelKey?z(`quota.part.${t.labelKey}`):t.label??``;return(0,V.jsxs)(`li`,{className:`flex min-w-0 items-center gap-2 font-mono text-meta normal-nums`,children:[(0,V.jsx)(`span`,{className:`size-2 flex-none rounded-xs bg-line`,style:r?{background:r}:void 0}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-muted`,title:i,children:i}),(0,V.jsx)(`span`,{className:`flex-none text-right text-ink`,children:t.value}),(0,V.jsx)(`span`,{className:`w-[13ch] flex-none whitespace-nowrap text-right text-muted`,children:t.share===void 0?t.resetsAt?_J(t.resetsAt):`—`:nJ(t.share)})]},t.labelKey??t.label)})}),!t&&e.note&&(0,V.jsxs)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:[e.note.key===`estimated`?z(`quota.note.estimated`,{since:e.note.since?vJ(e.note.since):`?`}):z(`quota.note.approximate`),e.note.error?` ${z(`quota.note.error`,{error:e.note.error})}`:``]})]})}function _J(e){return new Date(e).toLocaleString(void 0,{weekday:`short`,hour:`numeric`,minute:`2-digit`})}function vJ(e){let t=new Date(e),n=t.getFullYear()===new Date().getFullYear()?void 0:`numeric`;return t.toLocaleDateString(void 0,{year:n,month:`short`,day:`numeric`})}var yJ={entries:[],failed:new Set},bJ=[`command`,`cmd`,`file_path`,`path`,`pattern`,`query`,`url`,`description`,`prompt`],xJ=100;function SJ(e){let t=(e.split(`
141
- `).find(e=>e.trim()!==``)??``).trim();return t.length>xJ?`${t.slice(0,99)}…`:t}function CJ(e){if(typeof e==`string`)return SJ(e);if(!e||typeof e!=`object`)return``;let t=e,n=e=>typeof e==`string`?e:Array.isArray(e)&&e.every(e=>typeof e==`string`)?e.join(` `):``;for(let e of bJ){let r=n(t[e]);if(r.trim())return SJ(r)}for(let e of Object.values(t)){let t=n(e);if(t.trim())return SJ(t)}return``}function wJ(e){return e===`user`||e===`assistant`||e===`system`?e:null}function TJ(e,t){let n=[],r=[];return e.forEach((e,i)=>{let a=wJ(e.role);if(!a)return;let o=[],s=[];for(let t of e.blocks??[])t.type===`text`&&t.text?.trim()?o.push(t.text.trim()):t.type===`tool_call`?s.push({callId:t.callId??``,name:t.name??`tool`,summary:CJ(t.input)}):t.type===`tool_result`&&t.isError&&t.callId&&r.push(t.callId);(o.length!==0||s.length!==0)&&n.push({index:t+i,role:a,at:e.timestamp??``,text:o.join(`
142
-
143
- `),tools:s})}),{entries:n,failed:r}}function EJ(e,t,n){let r=TJ(t,n),i=new Map(e.entries.map(e=>[e.index,e]));for(let e of r.entries)i.set(e.index,e);let a=r.failed.length>0?new Set([...e.failed,...r.failed]):e.failed;return{entries:[...i.values()].sort((e,t)=>e.index-t.index),failed:a}}function DJ(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.text.toLowerCase().includes(n)||e.tools.some(e=>`${e.name} ${e.summary}`.toLowerCase().includes(n))).map(e=>e.index):[]}var OJ=e=>e.replace(/[*_`]+/g,``).replace(/[…\s]+/g,` `).trim().toLowerCase();function kJ(e,t){let n=e.find(e=>e.at===t.at&&e.role===t.role);if(n)return n.index;let r=OJ(t.snippet);return r?e.find(e=>e.role===t.role&&OJ(e.text).includes(r))?.index??null:null}function AJ(e,t){let n=e[0];if(!n)return!0;let[r,i]=[Date.parse(n.at),Date.parse(t.at)];return Number.isNaN(r)||Number.isNaN(i)?!0:r>i}function jJ(e,t){let n=e.tools.map(e=>`- \`${e.name}\`${e.summary?` ${e.summary}`:``}${t.has(e.callId)?` (failed)`:``}`);return[e.text,n.join(`
133
+ `),n=[],r=[],i=()=>{r.length>0&&n.push({t:`para`,c:qG(r.join(`
134
+ `))}),r=[]};for(let e=0;e<t.length;e++){let a=t[e],o=JG.exec(a);if(o){i();let r=o[1][0],a=[];for(e++;e<t.length&&!RegExp(`^\\s*${r}{3,}\\s*$`).test(t[e]);e++)a.push(t[e]);n.push({t:`code`,lang:o[2]??``,v:a.join(`
135
+ `)});continue}if(a.trim()===``){i();continue}let s=YG.exec(a);if(s){i(),n.push({t:`heading`,level:s[1].length,c:qG(s[2])});continue}if(QG.test(a)){i(),n.push({t:`hr`});continue}if($G.test(a)){i();let r=[];for(;e<t.length&&$G.test(t[e]);e++){let n=t[e];eK.test(n)||r.push(tK(n))}e--,n.push({t:`table`,rows:r.map(e=>e.map(e=>qG(e)))});continue}if(a.startsWith(`>`)){i();let r=[];for(;e<t.length&&t[e].startsWith(`>`);e++)r.push(t[e].replace(/^>\s?/,``));e--,n.push({t:`quote`,c:qG(r.join(`
136
+ `))});continue}let c=XG.exec(a),l=c?null:ZG.exec(a);if(c||l){i();let r=!c,a=[];for(;e<t.length;e++){let n=r?ZG.exec(t[e]):XG.exec(t[e]);if(!n)break;let i=n[1].length;a.push({depth:Math.min(3,Math.floor(i/2)),c:qG(r?n[2]:n[3])})}e--,n.push({t:`list`,ordered:r,items:a});continue}r.push(a)}return i(),n}var rK=`flex min-h-0 min-w-0 flex-1 flex-col font-sans text-body`,iK=`flex flex-none flex-wrap items-center gap-x-3 gap-y-1 px-3 pb-1.5 font-mono text-meta`,aK=`min-w-0 flex-1 basis-32 py-1 text-meta`,oK=`min-h-0 flex-1 overflow-y-auto px-3 pb-3`,sK=`m-0 px-3 py-2 font-mono text-meta text-subtle`,cK=`m-0 whitespace-pre-wrap px-3 pb-3 font-mono text-meta leading-[1.45] text-muted wrap-anywhere`,lK=e=>`group/entry mt-3 rounded-sm border-l-2 py-0.5 pl-2.5 ${e.flash?`border-accent bg-accent-soft`:e.current?`border-line-active`:`border-transparent`}`,uK=`mb-0.5 flex items-center gap-2 font-mono text-meta`,dK=e=>e===`user`?`text-accent`:`text-muted`,fK=`text-subtle`,pK=`ml-auto opacity-0 group-hover/entry:opacity-100 focus-visible:opacity-100 touch:opacity-100`,mK=`m-0 mt-0.5 flex min-w-0 items-baseline gap-1.5 font-mono text-meta text-subtle`,hK=`flex-none text-muted`,gK=`min-w-0 flex-1 truncate`,_K=`leading-[1.5] wrap-anywhere`,vK=`m-0 mb-2 whitespace-pre-wrap last:mb-0`,yK=`m-0 mt-3 mb-1.5 font-semibold first:mt-0`,bK=`m-0 mb-2 flex flex-col gap-0.5 pl-5 last:mb-0`,xK=`m-0 mb-2 border-l-2 border-line pl-2.5 whitespace-pre-wrap text-muted last:mb-0`,SK=`m-0 mb-2 overflow-x-auto rounded-sm border-hairline border-line bg-inset px-2.5 py-2 font-mono text-meta leading-[1.45] last:mb-0`,CK=`rounded-xs bg-inset px-1 font-mono text-meta`,wK=`text-accent underline`,TK=`mb-2 block max-w-full overflow-x-auto border-collapse font-mono text-meta last:mb-0`,EK=`border-hairline border-line px-2 py-0.5 text-left align-top`,DK=`my-2 border-0 border-t border-line`;function OK(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=e.toLowerCase(),i=[],a=0;for(let t=r.indexOf(n);t>=0;t=r.indexOf(n,a))t>a&&i.push(e.slice(a,t)),i.push((0,V.jsx)(`mark`,{className:UO,"data-hit":``,children:e.slice(t,t+n.length)},t)),a=t+n.length;return i.push(e.slice(a)),g.Children.toArray(i)}var kK=[`h3`,`h3`,`h4`,`h5`,`h6`,`h6`];function AK({level:e,children:t}){let n=kK[Math.min(5,Math.max(0,e-1))]??`h6`;return(0,V.jsx)(n,{className:yK,children:t})}function jK(e,t){return e.map((e,n)=>(0,V.jsx)(g.Fragment,{children:t(e)},n))}function MK({nodes:e,needle:t}){return jK(e,e=>e.t===`text`?OK(e.v,t):e.t===`code`?(0,V.jsx)(`code`,{className:CK,children:OK(e.v,t)}):e.t===`bold`?(0,V.jsx)(`strong`,{children:(0,V.jsx)(MK,{nodes:e.c,needle:t})}):e.t===`em`?(0,V.jsx)(`em`,{children:(0,V.jsx)(MK,{nodes:e.c,needle:t})}):(0,V.jsx)(`a`,{className:wK,href:e.href,target:`_blank`,rel:`noopener noreferrer`,children:(0,V.jsx)(MK,{nodes:e.c,needle:t})}))}function NK({block:e,needle:t}){switch(e.t){case`heading`:return(0,V.jsx)(AK,{level:e.level,children:(0,V.jsx)(MK,{nodes:e.c,needle:t})});case`para`:return(0,V.jsx)(`p`,{className:vK,children:(0,V.jsx)(MK,{nodes:e.c,needle:t})});case`code`:return(0,V.jsx)(`pre`,{className:SK,children:(0,V.jsx)(`code`,{children:OK(e.v,t)})});case`quote`:return(0,V.jsx)(`blockquote`,{className:xK,children:(0,V.jsx)(MK,{nodes:e.c,needle:t})});case`hr`:return(0,V.jsx)(`hr`,{className:DK});case`list`:{let n=e.ordered?`ol`:`ul`;return(0,V.jsx)(n,{className:`${bK} ${e.ordered?`list-decimal`:`list-disc`}`,children:jK(e.items,e=>(0,V.jsx)(`li`,{style:{marginLeft:`${e.depth*1.25}rem`},children:(0,V.jsx)(MK,{nodes:e.c,needle:t})}))})}case`table`:return(0,V.jsx)(`table`,{className:TK,children:(0,V.jsx)(`tbody`,{children:jK(e.rows,e=>(0,V.jsx)(`tr`,{children:jK(e,e=>(0,V.jsx)(`td`,{className:EK,children:(0,V.jsx)(MK,{nodes:e,needle:t})}))}))})})}}function PK({source:e,needle:t=``}){let n=(0,g.useMemo)(()=>nK(e),[e]);return(0,V.jsx)(`div`,{className:_K,children:jK(n,e=>(0,V.jsx)(NK,{block:e,needle:t}))})}function FK(e){if(e instanceof u_){if(e.code===`TOO_LARGE`){let t=e.detail?.size;return SL(z(`artifact.tooLarge`),{size:typeof t==`number`?`${(t/1048576).toFixed(1)} MB`:`5 MB+`})}if(e.code===`NOT_PREVIEWABLE`)return z(`artifact.notPreviewable`);if(e.code===`NOT_FOUND`)return z(`artifact.gone`)}return SL(z(`artifact.failed`),{error:e instanceof Error?e.message:String(e)})}function IK(e,t,n,r){let[i,a]=(0,g.useState)({kind:`loading`});return(0,g.useEffect)(()=>{let r=!0;return e.client.request(`file.read`,{taskId:t,path:n}).then(e=>r&&a({kind:`ready`,file:e}),e=>r&&a({kind:`failed`,text:FK(e)})),()=>{r=!1}},[e,t,n,r]),i}function LK(e,t){let n=(0,g.useMemo)(()=>e===null?null:URL.createObjectURL(new Blob([zG(e)],{type:t})),[e,t]);return(0,g.useEffect)(()=>()=>void(n&&URL.revokeObjectURL(n)),[n]),n}function RK({model:e,taskId:t,path:n,kind:r,changeKey:i}){B();let a=IK(e,t,n,i),o=LK(a.kind===`ready`&&(r===`svg`||r===`image`||r===`pdf`)?a.file.base64:null,r===`md`||r===`html`?``:VG(r,n));return a.kind===`loading`?(0,V.jsx)(`p`,{className:qt,children:z(`artifact.loading`)}):a.kind===`failed`?(0,V.jsx)(`p`,{className:`${qt} text-error`,children:a.text}):r===`md`?(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto px-3 py-2`,children:(0,V.jsx)(PK,{source:BG(a.file.base64)})}):r===`html`?(0,V.jsx)(`iframe`,{title:n,sandbox:``,srcDoc:UG(BG(a.file.base64)),style:{colorScheme:`light`,background:`#fff`},className:`min-h-0 w-full flex-1 border-none`}):o?r===`pdf`?(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsx)(`a`,{className:`${$t} px-3 py-1 font-mono text-meta`,href:o,target:`_blank`,rel:`noreferrer noopener`,children:z(`artifact.open`)}),(0,V.jsx)(`iframe`,{title:n,src:o,className:`min-h-0 w-full flex-1 border-none`})]}):(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:(0,V.jsx)(`img`,{src:o,alt:n,className:`max-w-full`})}):null}function zK(e,t,n){let r=[{ref:null,suggestion:{key:`default`,text:t,dim:z(`review.baseDefault`),accent:!0}}],i=(e,n)=>{for(let i of e)i!==t&&r.push({ref:i,suggestion:{key:`${n}:${i}`,text:i,dim:n}})};i(e?.branches??[],z(`review.baseBranch`)),i(e?.remotes??[],z(`review.baseRemote`)),i(e?.tags??[],z(`review.baseTag`));for(let t of e?.commits??[])r.push({ref:t.sha,suggestion:{key:`commit:${t.sha}`,text:t.sha,dim:t.subject}});let a=n.trim().toLowerCase();if(a===``)return r.slice(0,40);let o=r.filter(e=>`${e.suggestion.text} ${e.suggestion.dim??``}`.toLowerCase().includes(a)),s=e=>e.suggestion.text.toLowerCase()===a?0:1;return o.sort((e,t)=>s(e)-s(t)).slice(0,40)}function BK(e){let[t,n]=(0,g.useState)(!1),[r,i]=(0,g.useState)(``),[a,o]=(0,g.useState)(null),s=e.model.client;(0,g.useEffect)(()=>{if(!t)return;let n=!0;return Hs(s,`diff.refs`,{taskId:e.taskId}).then(e=>n&&o(e),()=>{}),()=>{n=!1}},[t,s,e.taskId]);let c=zK(a,e.base,r),l=t=>{e.onPick(t),n(!1),i(``)};return(0,V.jsxs)(`span`,{className:`relative`,onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&t&&n(!1)},children:[(0,V.jsx)(H,{hit:`tight`,"aria-expanded":t,title:z(`review.baseHint`),className:e.custom?``:`opacity-60 aria-expanded:opacity-100`,onClick:()=>n(!t),children:z(`review.basePicker`,{base:e.custom??e.base})}),t&&(0,V.jsx)(`div`,{className:`absolute top-full left-0 z-3 mt-1 w-64 max-w-full rounded-sm border-hairline border-line-active bg-surface p-1 shadow-popover`,children:(0,V.jsx)(ND,{field:`diff-base`,autoFocus:!0,value:r,onChange:i,items:c.map(e=>e.suggestion),open:!0,placeholder:z(`review.basePlaceholder`),onPick:e=>l(c[e]?.ref??null),onEnter:()=>l(r.trim()===``?null:r.trim())})})]})}var VK=`rove.diffBase`;function HK(){try{let e=JSON.parse(localStorage.getItem(VK)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`))}catch{return{}}}function UK(e){return HK()[e]??null}function WK(e,t){let n=HK();t===null?delete n[e]:n[e]=t;try{localStorage.setItem(VK,JSON.stringify(n))}catch{}}function GK(e){let[t,n]=(0,g.useState)(()=>UK(e.taskId));return[t,t=>{WK(e.taskId,t),n(t),t!==null&&e.scope!==`task`&&$k({taskId:e.taskId,path:e.path,scope:`task`})}]}var KK={add:`bg-diff-added-bg`,del:`bg-diff-removed-bg`},qK={add:`text-diff-added`,del:`text-diff-removed`};function JK(e,t){let n=t.cursor?`bg-inset group-focus/preview:bg-accent-soft`:t.noted?`bg-inset`:KK[e]??``;return`relative grid ${e===`file`||e===`note`?`cursor-pointer`:`cursor-default`} grid-cols-[4ch_4ch_2ch_1fr] gap-x-2 gap-y-0 whitespace-pre px-3 narrow:grid-cols-[3ch_3ch_1ch_1fr] narrow:gap-x-1 narrow:px-1.5 ${n} ${e===`file`?`mt-2 border-t-hairline border-line pt-1 font-bold text-ink`:e===`hunk`||e===`meta`?`text-subtle`:``}`}var YK=`text-right text-subtle`,XK=(e,t)=>t?`text-accent`:qK[e]??``,ZK=e=>`min-w-0 narrow:whitespace-pre-wrap narrow:wrap-anywhere ${qK[e]??``}`,QK=`min-w-0 whitespace-pre-wrap wrap-anywhere text-accent`,$K=`flex min-w-0 items-baseline gap-2`;function eq(e){return(0,V.jsxs)(`div`,{className:`flex items-center ${e.viewed?`opacity-60`:``}`,children:[(0,V.jsxs)(H,{variant:`row`,"data-row":e.index,"aria-expanded":!e.closed,"aria-label":z(e.closed?`review.unfold`:`review.fold`,{path:e.name}),className:`${JK(`file`,{cursor:e.cursor,noted:!1})} min-w-0 flex-1 text-left`,onClick:e.onToggleFold,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{className:`grid place-items-center text-subtle`,children:(0,V.jsx)(Fa,{right:e.closed})}),(0,V.jsxs)(`span`,{className:$K,children:[(0,V.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name}),e.added?(0,V.jsxs)(PL,{tone:`added`,children:[`+`,e.added]}):null,e.removed?(0,V.jsxs)(PL,{tone:`removed`,children:[`−`,e.removed]}):null]})]}),e.path&&(0,V.jsx)(H,{hit:`tight`,className:`flex-none px-2`,"aria-pressed":e.viewed,"aria-label":z(e.viewed?`review.unmarkViewed`:`review.markViewed`,{path:e.name}),onClick:e.onToggleViewed,children:e.viewed?z(`review.viewedOn`):z(`review.viewed`)})]})}function tq(e){return(0,V.jsxs)(`div`,{className:`absolute top-full right-3 z-1 flex gap-1.5`,children:[(0,V.jsx)(H,{variant:`floating`,onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),e.onComment()},children:z(`review.comment`)}),e.showRange&&(0,V.jsx)(H,{variant:`floating`,onClick:t=>{t.stopPropagation(),e.onRange()},children:z(`review.range`)}),e.ranged&&(0,V.jsx)(H,{variant:`floating`,title:z(`preview.askInChatHint`),onMouseDown:e=>e.preventDefault(),onClick:t=>{t.stopPropagation(),e.onAsk()},children:z(`preview.askInChat`)})]})}function nq({note:e,onEdit:t}){return(0,V.jsxs)(H,{variant:`row`,className:`${JK(`note`,{cursor:!1,noted:!1})} w-full text-left`,onClick:t,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{className:`text-accent`,children:`●`}),(0,V.jsx)(`span`,{className:QK,children:e.body})]})}function rq(e){return(0,V.jsxs)(`div`,{className:`flex flex-none flex-wrap items-center gap-x-3 gap-y-1 px-2 pt-1.5 font-mono text-meta`,children:[e.scopes&&(0,V.jsx)(xG,{className:`flex-wrap`,tabs:e.scopes,value:e.scope,onChange:e.onScope}),e.picker,(0,V.jsx)(H,{hit:`tight`,"aria-pressed":e.ignoreWs,title:z(`review.ignoreWsHint`),className:`opacity-60 aria-pressed:underline aria-pressed:opacity-100`,onClick:e.onToggleWs,children:z(`review.ignoreWs`)}),(0,V.jsxs)(`span`,{className:`flex min-w-0 basis-full flex-wrap items-center gap-x-1.5 text-muted`,children:[z(`review.totals`,{files:e.files,added:e.added,removed:e.removed}),e.shape&&(0,V.jsxs)(`span`,{children:[`· `,e.shape]}),e.files>0&&(0,V.jsxs)(`span`,{className:`whitespace-nowrap`,children:[`· `,z(`review.viewedCount`,{done:e.viewed,files:e.files})]})]}),(0,V.jsxs)(`span`,{className:`ml-auto flex items-center gap-x-3`,children:[e.files>1&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onNextFile,children:z(`review.nextFile`)}),e.onNextComment&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onNextComment,children:z(`review.nextComment`)}),e.files>1&&(0,V.jsx)(H,{hit:`tight`,onClick:e.onFoldAll,children:e.allFolded?z(`review.unfoldAll`):z(`review.foldAll`)})]})]})}var iq=`rove.diffViewed`,aq=(e,t)=>`${e}\0${t}`;function oq(e){let t=2166136261;for(let n of e){let e=`${n.kind}${n.text}\n`;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619)}return(t>>>0).toString(16)}function sq(e){let t=new Map,n=-1,r=r=>{let i=n>=0?e[n]?.path:null;i&&t.set(i,oq(e.slice(n+1,r)))};return e.forEach((e,t)=>{e.kind===`file`&&(r(t),n=t)}),r(e.length),t}function cq(){try{let e=JSON.parse(localStorage.getItem(iq)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`))}catch{return{}}}function lq(e){try{localStorage.setItem(iq,JSON.stringify(e))}catch{}}function uq(e,t,n){let r=new Set;for(let[i,a]of n)e[aq(t,i)]===a&&r.add(i);return r}function dq(e,t,n,r){let i={...e};return r===void 0?delete i[aq(t,n)]:i[aq(t,n)]=r,i}function fq(e,t){return e.find(e=>e>t)??e[0]??null}var pq=`rove.diffIgnoreWs`;function mq(){try{return localStorage.getItem(pq)===`1`}catch{return!1}}function hq(e){try{localStorage.setItem(pq,e?`1`:`0`)}catch{}}var gq=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;function _q(e,t=null,n=!1){let r=[],i=0,a=0,o=t,s=!1;for(let t of e.replace(/\n$/,``).split(`
137
+ `)){if(t.startsWith(`diff --git `)){let e=/ b\/(.+)$/.exec(t);o=e?e[1]:o,s=!1,r.push({kind:`file`,text:o??t,oldNo:null,newNo:null,path:o});continue}let e=gq.exec(t);if(e){i=Number(e[1]),a=Number(e[2]),s=!0,r.push({kind:`hunk`,text:t,oldNo:null,newNo:null,path:o});continue}if(!s){r.push({kind:`meta`,text:t,oldNo:null,newNo:null,path:o});continue}t.startsWith(`+`)?r.push({kind:`add`,text:t.slice(1),oldNo:null,newNo:a++,path:o}):t.startsWith(`-`)?r.push({kind:`del`,text:t.slice(1),oldNo:i++,newNo:null,path:o,...n?{foreignOld:!0}:{}}):t.startsWith(`\\`)?r.push({kind:`meta`,text:t,oldNo:null,newNo:null,path:o}):r.push({kind:`ctx`,text:t.slice(1),oldNo:i++,newNo:a++,path:o})}return r}function vq(e,t){return e.replace(/\n$/,``).split(`
138
+ `).map((e,n)=>({kind:`ctx`,text:e,oldNo:null,newNo:n+1,path:t}))}function yq(e){return e.kind===`del`?e.foreignOld?null:e.oldNo:e.kind===`add`||e.kind===`ctx`?e.newNo:null}function bq(e){let t=e.startLine?`lines ${e.startLine}-${e.line}`:`line ${e.line}`;return`@${e.path} (${t}) `}function xq(e,t,n){let r=e[t],i=r?yq(r):null;if(!r?.path||i===null)return null;if(n===null||n===t)return{path:r.path,line:i};let a=e[Math.min(n,t)],o=e[Math.max(n,t)],s=a?yq(a):null,c=o?yq(o):null;return s===null||c===null||a?.path!==o?.path?{path:r.path,line:i}:s===c?{path:r.path,line:c}:{path:r.path,startLine:Math.min(s,c),line:Math.max(s,c)}}function Sq(e,t,n){let r=xq(e,t,n);if(!r)return null;let i=r.startLine!==void 0&&n!==null;return{...r,first:i?Math.min(n,t):t,last:i?Math.max(n,t):t}}function Cq(e,t){let n=[],r=!1;return e.forEach((e,i)=>{e.kind===`file`&&(r=e.path!==null&&t.has(e.path)),(!r||e.kind===`file`)&&n.push(i)}),n}function wq(e){let t=new Map,n=-1;return e.forEach((e,r)=>{if(e.kind===`file`){n=r,t.set(r,{added:0,removed:0});return}let i=t.get(n);i&&(e.kind===`add`?i.added++:e.kind===`del`&&i.removed++)}),t}var Tq=[`source`,`tests`,`config`,`docs`,`generated`],Eq=/(^|\/)(bun\.lockb?|package-lock\.json|yarn\.lock|pnpm-lock\.yaml|Cargo\.lock|poetry\.lock|uv\.lock|Gemfile\.lock|go\.sum|composer\.lock)$/,Dq=/(^|\/)(dist|build|generated|__generated__|\.next)\/|\.min\.(js|css)$|\.snap$|\.generated\.|\.pb\.go$|\.map$/,Oq=/(^|\/)(tests?|__tests__|spec|e2e)\/|\.(test|spec)\.[cm]?[jt]sx?$|_test\.(go|py)$|(^|\/)test_[^/]+\.py$/,kq=/\.(md|mdx|rst|txt)$|(^|\/)docs\//i,Aq=/(^|\/)(\.[\w.-]+rc(\.\w+)?|[\w.-]*\.config\.[cm]?[jt]s|tsconfig[\w.-]*\.json|package\.json|biome\.json|Dockerfile|Makefile)$|\.(ya?ml|toml|ini|env)$|(^|\/)\.(github|changeset|vscode)\//,jq=e=>Eq.test(e);function Mq(e){return Eq.test(e)||Dq.test(e)?`generated`:Oq.test(e)?`tests`:kq.test(e)?`docs`:Aq.test(e)?`config`:`source`}var Nq=e=>Mq(e)===`generated`;function Pq(e){let t=e.filter(e=>Mq(e.path)!==`generated`),n=t.reduce((e,t)=>e+t.lines,0);return t.length===0?1:((e,t)=>e<=2&&t<=30?1:e<=5&&t<=150?2:e<=10&&t<=400?3:e<=20&&t<=1e3?4:5)(t.length,n)}function Fq(e){let t=[],n=(e,n)=>n>0&&t.push({group:e,count:n});for(let t of Tq)t===`generated`?(n(`lockfile`,e.filter(jq).length),n(`generated`,e.filter(e=>Mq(e)===`generated`&&!jq(e)).length)):n(t,e.filter(e=>Mq(e)===t).length);return t}function Iq(e){let t=[];for(let n of e)(n.kind===`file`||t.length===0)&&t.push([]),t[t.length-1]?.push(n);let n=e=>Tq.indexOf(Mq(e[0]?.path??``));return t.map((e,t)=>({file:e,i:t})).sort((e,t)=>n(e.file)-n(t.file)||e.i-t.i).flatMap(({file:e})=>e)}function Lq(e){return Fq(e.map(e=>e.path)).map(({group:e,count:t})=>({key:e===`lockfile`?t===1?`lockfile`:`lockfiles`:e,count:t}))}function Rq(e,t){let n=[...e.entries()].flatMap(([e,n])=>{let r=t[e]?.path;return r?[{path:r,lines:n.added+n.removed}]:[]});return n.length<2?``:[z(`review.shape.effort`,{n:Pq(n)}),...Lq(n).map(e=>z(`review.shape.${e.key}`,{count:e.count}))].join(` · `)}function zq(e,t,n){if(!e||typeof e!=`object`||!(`kind`in e))return{kind:`text`,text:z(`preview.unknown`)};let r=`text`in e&&typeof e.text==`string`?e.text:``;switch(e.kind){case`diff`:{let e=_q(r,t===`.`?null:t,n);return{kind:`rows`,rows:t===`.`?Iq(e):e,diff:!0}}case`code`:return{kind:`rows`,rows:vq(r,t),diff:!1};case`binary`:return{kind:`text`,text:z(`preview.binary`)};case`empty`:return{kind:`text`,text:z(`preview.empty`)};case`error`:return{kind:`text`,text:`message`in e?String(e.message):z(`preview.unknown`),error:!0};default:return{kind:`text`,text:z(`preview.noHunks`,{kind:String(e.kind)})}}}function Bq(e){return e instanceof u_&&e.code===`UNKNOWN_OP`?Error(z(`review.notSupported`)):e instanceof Error?e:Error(String(e))}var Vq={add:`+`,del:`-`},Hq=40,Uq=160,Wq=e=>`${Vq[e.kind]??` `}${e.text.slice(0,Uq)}`,Gq=e=>e.startLine!==void 0&&e.startLine!==e.line?`${e.filePath}:${e.startLine}-${e.line}`:`${e.filePath}:${e.line}`;function Kq(e,t,n){let r=[];for(let i=t;i<=n&&r.length<Hq;i++){let t=e[i];t&&yq(t)!==null&&r.push(Wq(t))}return r.join(`
139
+ `)}function qq(e,t){let n=e.startLine??e.line,r=t.flatMap((t,n)=>t.path===e.filePath&&yq(t)!==null?[n]:[]);if(!e.code){let i=r.filter(r=>{let i=yq(t[r]);return i>=n&&i<=e.line}),a=i[0],o=i[i.length-1];return a===void 0||o===void 0?null:{first:a,last:o}}let i=e.code.split(`
140
+ `);for(let e=0;e+i.length<=r.length;e++){let a=r.slice(e,e+i.length),o=a[0],s=a[a.length-1];if(o!==void 0&&s!==void 0&&yq(t[o])===n&&a.every((e,n)=>Wq(t[e])===i[n]))return{first:o,last:s}}return null}function Jq(e,t,n){return qq(e,t)?`ok`:t.some(t=>t.path===e.filePath)||n?`moved`:`unknown`}function Yq({notes:e,states:t,sending:n,onShow:r,onEdit:i,onDrop:a,onSend:o}){B();let[s,c]=(0,g.useState)(!1);if(e.length===0)return null;let l=e.length;return(0,V.jsxs)(`div`,{className:`flex max-h-2/5 min-h-0 flex-none flex-col border-t-hairline border-line font-mono text-meta`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-1.5 narrow:px-2`,children:[(0,V.jsxs)(H,{variant:`row`,className:`flex min-w-0 flex-1 items-center gap-2 text-left text-ink`,"aria-expanded":s,onClick:()=>c(!s),children:[(0,V.jsx)(Fa,{right:!s}),(0,V.jsx)(`span`,{children:l===1?z(`review.countOne`):z(`review.count`,{count:l})})]}),(0,V.jsx)(H,{disabled:n,onClick:o,children:n?z(`review.sending`):z(`review.send`,{count:l})})]}),s&&(0,V.jsx)(`ul`,{className:`m-0 min-h-0 list-none overflow-y-auto p-0 pb-1`,children:e.map(e=>(0,V.jsxs)(`li`,{className:`flex flex-col gap-0.5 px-3 py-1 narrow:px-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,V.jsx)(H,{variant:`row`,className:`min-w-0 flex-1 truncate text-left text-ink hover:underline`,title:z(`review.show`),onClick:()=>r(e),children:Gq(e)}),t.get(e.id)===`moved`&&(0,V.jsx)(`span`,{title:z(`review.movedHint`),children:(0,V.jsx)(PL,{tone:`warning`,children:z(`review.moved`)})}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>i(e),children:z(`review.edit`)}),(0,V.jsx)(H,{hit:`tight`,onClick:()=>a(e),children:z(`review.drop`)})]}),(0,V.jsx)(`p`,{className:`m-0 line-clamp-2 whitespace-pre-wrap wrap-anywhere text-muted`,children:e.body})]},e.id))})]})}var Xq=[];function Zq({model:e,view:t,active:n,restored:r,onClose:i}){B();let a=$o(),[o,s]=(0,g.useState)(mq),[c,l]=(0,g.useState)(cq),[u,d]=GK(t),f=t.scope===`task`?u:null,p=f!==null,m={taskId:t.taskId,path:t.path,scope:t.scope,...o?{ignoreWhitespace:!0}:{},...f?{base:f}:{}},[h,_]=(0,g.useState)(()=>{let n=Bs(e,`diff.file`,m);return n===void 0?null:zq(n,t.path,p)}),[y,b]=(0,g.useState)(()=>Bs(e,`review.list`,{taskId:t.taskId})?.notes??[]),[x,S]=(0,g.useState)(()=>Bs(e,`diff.files`,{taskId:t.taskId})?.base??null),[C,w]=(0,g.useState)(0),[T,E]=(0,g.useState)(null),[D,O]=(0,g.useState)(!1),[k,A]=(0,g.useState)(new Set),[j,ee]=(0,g.useState)(!1),[M,N]=(0,g.useState)(0),P=(0,g.useRef)(null),F=e.client;(0,g.useEffect)(()=>{let e=!0;return Hs(F,`diff.file`,m).then(n=>e&&_(zq(n,t.path,p)),t=>{if(e){if(f&&t instanceof u_&&t.code===`BAD_REF`){d(null),G(t.message,`error`);return}_({kind:`text`,text:t instanceof Error?t.message:String(t),error:!0})}}),()=>{e=!1}},[F,t.taskId,t.path,t.scope,o,f,M]),(0,g.useEffect)(()=>{let e=!0;return Hs(F,`diff.files`,{taskId:t.taskId}).then(t=>e&&S(t.base),()=>{}),()=>{e=!1}},[F,t.taskId,M]);let I=()=>void Hs(F,`review.list`,{taskId:t.taskId}).then(e=>b(e.notes));(0,g.useEffect)(I,[F,t.taskId,M]);let te=(0,g.useRef)(!1);(0,g.useEffect)(()=>{n&&(te.current||!r)&&P.current?.focus(),te.current=!0},[n,r]);let L=h?.kind===`rows`?h.rows:Xq,ne=h?.kind===`rows`&&h.diff,re=(0,g.useMemo)(()=>L.map((e,t)=>`row-${t}`),[L]),ie=(0,g.useMemo)(()=>Cq(L,k),[L,k]),R=(0,g.useMemo)(()=>wq(L),[L]),ae=(0,g.useMemo)(()=>sq(L),[L]),oe=(0,g.useMemo)(()=>uq(c,t.taskId,ae),[c,t.taskId,ae]),se=(0,g.useRef)(new Set);(0,g.useEffect)(()=>{let e=[...ae.keys()].filter(e=>Nq(e)&&!se.current.has(e));if(e.length!==0){for(let t of e)se.current.add(t);A(t=>new Set([...t,...e]))}},[ae]);let ce=(0,g.useRef)(new Set);(0,g.useEffect)(()=>{let e=ce.current;ce.current=oe;let t=[...oe].filter(t=>!e.has(t)),n=[...e].filter(e=>!oe.has(e));(t.length!==0||n.length!==0)&&A(e=>new Set([...[...e].filter(e=>!n.includes(e)),...t]))},[oe]);let le=(0,g.useMemo)(()=>y.filter(e=>e.sentAt===void 0),[y]),ue=(0,g.useMemo)(()=>le.map(e=>({note:e,at:qq(e,L)})),[le,L]),de=(0,g.useMemo)(()=>{let e=new Set;for(let{at:t}of ue)if(t)for(let n=t.first;n<=t.last;n++)e.add(n);return e},[ue]),fe=(0,g.useMemo)(()=>{let e=new Map;for(let{note:t,at:n}of ue)n&&e.set(n.last,[...e.get(n.last)??[],t]);return e},[ue]),pe=t.path===`.`&&h!==null&&!(h.kind===`text`&&h.error),me=(0,g.useMemo)(()=>{let e=new Map;for(let{note:t}of ue)e.set(t.id,Jq(t,L,pe));return e},[ue,L,pe]);(0,g.useEffect)(()=>{if(ie.includes(C))return;let e=C;for(;e>0&&L[e]?.kind!==`file`;)e--;w(e),E(null)},[ie,C,L]),(0,g.useEffect)(()=>{P.current?.querySelector(`[data-row="${C}"]`)?.scrollIntoView({block:`nearest`})},[C]);let he=Sq(L,C,T),ge=e=>A(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),_e=[...R.keys()].flatMap(e=>L[e]?.path?[L[e]?.path]:[]),ve=(0,g.useMemo)(()=>Rq(R,L),[R,L]),ye=_e.length>0&&_e.every(e=>k.has(e)),be=[...R.values()].reduce((e,t)=>({added:e.added+t.added,removed:e.removed+t.removed}),{added:0,removed:0}),xe=e=>{let n=dq(c,t.taskId,e,oe.has(e)?void 0:ae.get(e));l(n),lq(n)},Se=()=>{hq(!o),s(!o)},Ce=()=>{if(!he)return;let e=Gq({filePath:he.path,startLine:he.startLine,line:he.line});W.set((0,V.jsx)(lr,{multiline:!0,title:z(`preview.noteTitle`,{location:e}),submitLabel:z(`preview.noteSubmit`),onSubmit:async e=>{await F.request(`review.add`,{taskId:t.taskId,filePath:he.path,line:he.line,...he.startLine?{startLine:he.startLine}:{},code:Kq(L,he.first,he.last),body:e}),E(null),O(!1),I(),P.current?.focus()}}))},we=e=>W.set((0,V.jsx)(lr,{multiline:!0,title:z(`review.editTitle`,{location:Gq(e)}),initial:e.body,submitLabel:z(`review.editSubmit`),onSubmit:async n=>{await F.request(`review.edit`,{taskId:t.taskId,id:e.id,body:n}).catch(e=>{throw Bq(e)}),I(),P.current?.focus()}})),Te=e=>void F.request(`review.remove`,{taskId:t.taskId,id:e.id}).then(I).catch(e=>G(Bq(e).message,`error`)),Ee=v(fn),De=()=>{let e=xq(L,C,T);if(e){if(!Ee?.startsWith(`${t.taskId}::`)){G(z(`files.mentionNoEngine`),`error`);return}F.request(`term.input`,{stream:Ee,data:bq(e)}).then(()=>{E(null),sa(Ee)?.focus()}).catch(e=>G(e instanceof Error?e.message:String(e),`error`))}},Oe=e=>{let n=qq(e,L),r=L.findIndex(t=>t.kind===`file`&&t.path===e.filePath);n?(A(t=>new Set([...t].filter(t=>t!==e.filePath))),w(n.first)):t.path===`.`&&r>=0?w(r):t.path!==e.filePath&&t.path!==`.`&&$k({taskId:t.taskId,path:e.filePath,scope:t.scope}),E(null),O(!1)},ke=()=>{ee(!0),F.request(`review.send`,e.engineTarget(t.taskId)).then(e=>{G(e.delivered?z(`preview.sent`,{count:e.sent}):z(`preview.notSent`,{reason:e.reason??``}),e.delivered?`info`:`error`),I()}).catch(e=>G(e instanceof Error?e.message:String(e),`error`)).finally(()=>ee(!1))},Ae=()=>{let e=fq([...R.keys()],C);e!==null&&(w(e),E(null),O(!1))},je=()=>{let e=fq(ue.flatMap(({at:e})=>e?[e.first]:[]).sort((e,t)=>e-t),C);if(e===null)return;let t=L[e]?.path;t&&A(e=>new Set([...e].filter(e=>e!==t))),w(e),E(null),O(!1)},Me=e=>w(t=>{let n=Math.max(0,ie.indexOf(t));return ie[Math.min(ie.length-1,Math.max(0,n+e))]??t}),Ne=e=>{let t=e.key;if(t===`j`||t===`ArrowDown`)Me(1);else if(t===`k`||t===`ArrowUp`)Me(-1);else if(t===`v`)E(e=>e===null?C:null),O(!0);else if(t===`c`&&!e.ctrlKey)Ce();else if(t===`x`){let e=ue.find(({at:e})=>e&&C>=e.first&&C<=e.last);e&&Te(e.note)}else if(t===`s`)ke();else if(t===`z`){let e=L[C]?.path;e&&ne&&ge(e)}else if(t===`r`)N(e=>e+1);else if(t===`q`||t===`Escape`)i();else if(e.ctrlKey&&!e.metaKey&&t.toLowerCase()===`c`&&!window.getSelection()?.toString())i();else return;e.preventDefault()},Pe=()=>{let e=window.getSelection();if(!e||e.isCollapsed)return;let t=e=>(e instanceof Element?e:e?.parentElement)?.closest(`[data-row]`),n=t(e.anchorNode),r=t(e.focusNode);!n||!r||(E(Number(n.dataset.row)),w(Number(r.dataset.row)),O(!0))},Fe=T===null?C:Math.min(T,C),Ie=T===null?C:Math.max(T,C),H=[{id:`working`,label:z(`review.scopeWorking`)},{id:`branch`,label:z(`review.scopeBranch`)},{id:`task`,label:z(`review.scopeTask`,{base:u??x??``})}];return(0,V.jsxs)(`div`,{className:`group/preview flex min-h-0 min-w-0 flex-1 flex-col outline-none`,tabIndex:0,ref:P,onKeyDown:Ne,children:[ne&&(0,V.jsx)(rq,{scopes:x===null?null:H,scope:t.scope,onScope:e=>$k({taskId:t.taskId,path:t.path,scope:e}),picker:x!==null&&(0,V.jsx)(BK,{taskId:t.taskId,model:e,base:x,custom:u,onPick:d}),ignoreWs:o,onToggleWs:Se,files:_e.length,shape:ve,added:be.added,removed:be.removed,viewed:oe.size,allFolded:ye,onFoldAll:()=>A(ye?new Set:new Set(_e)),onNextFile:Ae,onNextComment:ue.some(({at:e})=>e)?je:null}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto py-1.5 font-mono text-meta/normal`,onMouseUp:Pe,children:[!h&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle`,children:z(`preview.loading`)}),h?.kind===`text`&&(0,V.jsx)(`p`,{className:`mx-2.5 my-3 font-mono text-meta text-subtle ${h.error?`text-error`:``}`,children:h.text}),ie.map(e=>{let t=L[e],n=e>=Fe&&e<=Ie;if(t.kind===`file`){let r=R.get(e),i=t.path;return(0,V.jsx)(eq,{index:e,name:t.text,path:i,closed:i!==null&&k.has(i),viewed:i!==null&&oe.has(i),cursor:n,added:r?.added??0,removed:r?.removed??0,onToggleFold:()=>{w(e),E(null),O(!1),i&&ge(i)},onToggleViewed:()=>i&&xe(i)},re[e])}let r=de.has(e);return(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{"data-row":e,className:JK(t.kind,{cursor:n,noted:r}),onClick:t=>{window.getSelection()?.isCollapsed!==!1&&(t.shiftKey?E(e=>e??C):(!a||T===null)&&E(null),w(e),O(!0))},children:[(0,V.jsx)(`span`,{className:YK,children:t.oldNo??``}),(0,V.jsx)(`span`,{className:YK,children:t.newNo??``}),(0,V.jsx)(`span`,{className:XK(t.kind,r),children:t.kind===`add`?`+`:t.kind===`del`?`−`:r?`●`:` `}),(0,V.jsx)(`span`,{className:ZK(t.kind),children:t.text}),D&&he&&e===Ie&&(0,V.jsx)(tq,{showRange:a&&T===null,ranged:T!==null,onComment:Ce,onRange:()=>E(C),onAsk:De})]}),fe.get(e)?.map(e=>(0,V.jsx)(nq,{note:e,onEdit:()=>we(e)},e.id))]},re[e])})]}),(0,V.jsx)(Yq,{notes:le,states:me,sending:j,onShow:Oe,onEdit:we,onDrop:Te,onSend:ke})]})}function Qq(e){B();let{model:t,view:n}=e,r=n.path===`.`?null:RG(n.path),[i,a]=(0,g.useState)(null),o=v(t.tasks);if(!r)return(0,V.jsx)(Zq,{...e});let s=i===n.path,c=JSON.stringify(o?.tasks.find(e=>e.id===n.taskId)?.changes??null);return(0,V.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex gap-x-3 px-2.5 py-1`,children:[(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":!s,onClick:()=>a(null),children:`[ ${z(`artifact.preview`)} ]`}),(0,V.jsx)(H,{variant:`pill`,hit:`tight`,"aria-current":s,onClick:()=>a(n.path),children:`[ ${z(`artifact.source`)} ]`})]}),s?(0,V.jsx)(Zq,{...e}):(0,V.jsx)(RK,{model:t,taskId:n.taskId,path:n.path,kind:r,changeKey:c})]})}var $q=[`var(--info)`,`var(--accent)`,`var(--success)`,`var(--warning)`,`var(--error)`];function eJ(e){return e>=90?`var(--error)`:e>=70?`var(--warning)`:`var(--accent)`}function tJ(e){let t=e.parts.filter(e=>e.share!==void 0);return t.length===0?[{width:iJ(e.percent),color:eJ(e.percent)}]:t.map((e,t)=>({width:iJ(e.share??0),color:$q[t%$q.length]}))}function nJ(e,t){return e.parts[t]?.share===void 0?null:$q[e.parts.slice(0,t).filter(e=>e.share!==void 0).length%$q.length]}function rJ(e){return e>0&&e<.1?`<0.1%`:`${e<10?+e.toFixed(1):Math.round(e)}%`}function iJ(e){return Math.max(0,Math.min(100,e))}var aJ=`scrollbar-none flex min-h-0 flex-1 flex-col gap-2.5 overflow-y-auto p-2.5`,oJ=`m-0 p-3 font-mono text-meta text-muted`,sJ=`flex flex-col gap-1.5 rounded-sm border-hairline border-line px-3 py-2.5`,cJ=`flex w-fit cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-left font-sans text-meta font-medium text-ink [&:hover]:text-accent`,lJ=`text-[0.7em] text-muted`,uJ=`flex items-baseline justify-between gap-3 font-mono text-meta normal-nums`,dJ=`flex h-1 w-full overflow-hidden rounded-full bg-inset`,fJ=`h-full flex-none`,pJ=15e3,mJ=`rove.quota.folded`;function hJ(){try{let e=JSON.parse(localStorage.getItem(mJ)??`[]`);return new Set(Array.isArray(e)?e.filter(e=>typeof e==`string`):[])}catch{return new Set}}function gJ({model:e,task:t,active:n}){B();let r=v(e.client.conn),i=v(e.selection),a=i.taskId===t.id?i.tabId:null,[o,s]=(0,g.useState)({kind:`loading`}),[c,l]=(0,g.useState)(hJ);(0,g.useEffect)(()=>{if(!n||r.state!==`open`)return;let i=!0,o=()=>e.client.request(`quota.list`,a?{taskId:t.id,tabId:a}:{}).then(e=>i&&s({kind:`ready`,reply:e})).catch(e=>i&&s(t=>t.kind===`ready`?t:{kind:`failed`,error:wL(e)}));o();let c=window.setInterval(o,pJ);return()=>{i=!1,window.clearInterval(c)}},[e,n,r.state,t.id,a]);let u=e=>{let t=new Set(c);t.has(e)?t.delete(e):t.add(e),l(t),localStorage.setItem(mJ,JSON.stringify([...t]))};if(o.kind===`loading`)return(0,V.jsx)(`p`,{className:oJ,children:z(`quota.loading`)});if(o.kind===`failed`)return(0,V.jsx)(`p`,{className:oJ,children:z(`quota.failed`,{error:o.error})});let{meters:d,engineReported:f}=o.reply;return(0,V.jsxs)(`div`,{className:aJ,children:[d.length===0&&(0,V.jsx)(`p`,{className:`m-0 p-3 font-mono text-meta text-muted`,children:z(`quota.empty`)}),d.map(e=>(0,V.jsx)(_J,{meter:e,folded:c.has(e.id),onToggle:()=>u(e.id)},e.id)),d.length>0&&!f&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.noEngineYet`)})]})}function _J({meter:e,folded:t,onToggle:n}){let r=e.titleKey?z(`quota.title.${e.titleKey}`):e.title??e.id;return(0,V.jsxs)(`section`,{className:sJ,children:[(0,V.jsxs)(H,{variant:`row`,className:cJ,"aria-expanded":!t,onClick:n,children:[r,(0,V.jsx)(`span`,{className:lJ,children:t?`▸`:`▾`})]}),(0,V.jsxs)(`div`,{className:uJ,children:[(0,V.jsx)(`span`,{className:`text-ink`,children:z(`quota.used`,{percent:rJ(e.percent).replace(`%`,``)})}),(0,V.jsx)(`span`,{className:`text-muted`,children:e.amount})]}),(0,V.jsx)(`div`,{className:dJ,role:`meter`,"aria-valuenow":Math.round(e.percent),"aria-valuemin":0,"aria-valuemax":100,children:tJ(e).map((e,t)=>(0,V.jsx)(`span`,{className:fJ,style:{width:`${e.width}%`,background:e.color}},t))}),e.resetsAt!==null&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.resets`,{when:vJ(e.resetsAt)})}),e.expiresAt!==void 0&&(0,V.jsx)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:z(`quota.expires`,{when:yJ(e.expiresAt)})}),!t&&(0,V.jsx)(`ul`,{className:`m-0 mt-1 flex list-none flex-col gap-1 p-0`,children:e.parts.map((t,n)=>{let r=nJ(e,n),i=t.labelKey?z(`quota.part.${t.labelKey}`):t.label??``;return(0,V.jsxs)(`li`,{className:`flex min-w-0 items-center gap-2 font-mono text-meta normal-nums`,children:[(0,V.jsx)(`span`,{className:`size-2 flex-none rounded-xs bg-line`,style:r?{background:r}:void 0}),(0,V.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-muted`,title:i,children:i}),(0,V.jsx)(`span`,{className:`flex-none text-right text-ink`,children:t.value}),(0,V.jsx)(`span`,{className:`w-[13ch] flex-none whitespace-nowrap text-right text-muted`,children:t.share===void 0?t.resetsAt?vJ(t.resetsAt):`—`:rJ(t.share)})]},t.labelKey??t.label)})}),!t&&e.note&&(0,V.jsxs)(`p`,{className:`m-0 font-mono text-meta text-subtle`,children:[e.note.key===`estimated`?z(`quota.note.estimated`,{since:e.note.since?yJ(e.note.since):`?`}):z(`quota.note.approximate`),e.note.error?` ${z(`quota.note.error`,{error:e.note.error})}`:``]})]})}function vJ(e){return new Date(e).toLocaleString(void 0,{weekday:`short`,hour:`numeric`,minute:`2-digit`})}function yJ(e){let t=new Date(e),n=t.getFullYear()===new Date().getFullYear()?void 0:`numeric`;return t.toLocaleDateString(void 0,{year:n,month:`short`,day:`numeric`})}var bJ={entries:[],failed:new Set},xJ=[`command`,`cmd`,`file_path`,`path`,`pattern`,`query`,`url`,`description`,`prompt`],SJ=100;function CJ(e){let t=(e.split(`
141
+ `).find(e=>e.trim()!==``)??``).trim();return t.length>SJ?`${t.slice(0,99)}…`:t}function wJ(e){if(typeof e==`string`)return CJ(e);if(!e||typeof e!=`object`)return``;let t=e,n=e=>typeof e==`string`?e:Array.isArray(e)&&e.every(e=>typeof e==`string`)?e.join(` `):``;for(let e of xJ){let r=n(t[e]);if(r.trim())return CJ(r)}for(let e of Object.values(t)){let t=n(e);if(t.trim())return CJ(t)}return``}function TJ(e){return e===`user`||e===`assistant`||e===`system`?e:null}function EJ(e,t){let n=[],r=[];return e.forEach((e,i)=>{let a=TJ(e.role);if(!a)return;let o=[],s=[];for(let t of e.blocks??[])t.type===`text`&&t.text?.trim()?o.push(t.text.trim()):t.type===`tool_call`?s.push({callId:t.callId??``,name:t.name??`tool`,summary:wJ(t.input)}):t.type===`tool_result`&&t.isError&&t.callId&&r.push(t.callId);(o.length!==0||s.length!==0)&&n.push({index:t+i,role:a,at:e.timestamp??``,text:o.join(`
142
+
143
+ `),tools:s})}),{entries:n,failed:r}}function DJ(e,t,n){let r=EJ(t,n),i=new Map(e.entries.map(e=>[e.index,e]));for(let e of r.entries)i.set(e.index,e);let a=r.failed.length>0?new Set([...e.failed,...r.failed]):e.failed;return{entries:[...i.values()].sort((e,t)=>e.index-t.index),failed:a}}function OJ(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.text.toLowerCase().includes(n)||e.tools.some(e=>`${e.name} ${e.summary}`.toLowerCase().includes(n))).map(e=>e.index):[]}var kJ=e=>e.replace(/[*_`]+/g,``).replace(/[…\s]+/g,` `).trim().toLowerCase();function AJ(e,t){let n=e.find(e=>e.at===t.at&&e.role===t.role);if(n)return n.index;let r=kJ(t.snippet);return r?e.find(e=>e.role===t.role&&kJ(e.text).includes(r))?.index??null:null}function jJ(e,t){let n=e[0];if(!n)return!0;let[r,i]=[Date.parse(n.at),Date.parse(t.at)];return Number.isNaN(r)||Number.isNaN(i)?!0:r>i}function MJ(e,t){let n=e.tools.map(e=>`- \`${e.name}\`${e.summary?` ${e.summary}`:``}${t.has(e.callId)?` (failed)`:``}`);return[e.text,n.join(`
144
144
  `)].filter(e=>e!==``).join(`
145
145
 
146
- `)}function MJ(e,t){return e.text===``?jJ(e,t):e.text}function NJ(e,t,n,r){return`# ${e}\n\n${t.map(e=>`${`## ${r[e.role]}${e.at?` · ${e.at}`:``}`}\n\n${jJ(e,n)}`).join(`
146
+ `)}function NJ(e,t){return e.text===``?MJ(e,t):e.text}function PJ(e,t,n,r){return`# ${e}\n\n${t.map(e=>`${`## ${r[e.role]}${e.at?` · ${e.at}`:``}`}\n\n${MJ(e,n)}`).join(`
147
147
 
148
- `)}\n`}var PJ=50;function FJ(e,t){let[n,r]=(0,g.useState)({kind:`loading`}),[i,a]=(0,g.useState)(!1),o=(0,g.useRef)(n);o.current=n;let s=(0,g.useRef)(!1),c=(0,g.useRef)(0),l=(0,g.useCallback)(n=>e.client.request(`output.read`,{taskId:t,limit:PJ,...n}),[e,t]),u=(0,g.useCallback)(async()=>{let e=++c.current;s.current=!0;try{let t=await l({});if(e!==c.current)return;if(t.source===`terminal`||!t.history){r({kind:`terminal`,tail:t.terminal?.tail??[]});return}let n=EJ(yJ,t.history.messages??[],t.history.firstIndex??0);r({kind:`ready`,transcript:n,cursor:t.cursor??null,older:t.olderCursor??null})}catch(t){e===c.current&&r({kind:`error`,message:K(t)})}finally{e===c.current&&(s.current=!1)}},[l]);(0,g.useEffect)(()=>(r({kind:`loading`}),u(),()=>{c.current++,s.current=!1}),[u]);let d=(0,g.useCallback)(async()=>{let e=o.current;if(s.current)return;if(e.kind===`terminal`)return u();if(e.kind!==`ready`||!e.cursor)return;let t=c.current;s.current=!0;try{let n=await l({cursor:e.cursor,source:`history`});if(t!==c.current)return;r(e=>e.kind===`ready`?{...e,transcript:EJ(e.transcript,n.history?.messages??[],n.history?.firstIndex??0),cursor:n.cursor??e.cursor}:e)}catch{t===c.current&&(s.current=!1,await u())}finally{t===c.current&&(s.current=!1)}},[l,u]);return{state:n,paging:i,loadOlder:(0,g.useCallback)(async()=>{let e=o.current;if(s.current||e.kind!==`ready`||!e.older)return;let t=c.current;s.current=!0,a(!0);try{let n=await l({cursor:e.older,source:`history`});if(t!==c.current)return;r(e=>e.kind===`ready`?{...e,transcript:EJ(e.transcript,n.history?.messages??[],n.history?.firstIndex??0),older:n.olderCursor??null}:e)}catch(e){t===c.current&&r({kind:`error`,message:K(e)})}finally{t===c.current&&(s.current=!1,a(!1))}},[l]),loadAll:(0,g.useCallback)(async()=>{let e=o.current;if(e.kind!==`ready`)return null;if(s.current||!e.older)return e.transcript;let t=c.current;s.current=!0,a(!0);let n=[],i=e.transcript;try{for(let r=e.older;r&&t===c.current;){let e=await l({cursor:r,source:`history`}),t={messages:e.history?.messages??[],firstIndex:e.history?.firstIndex??0};n.push(t),i=EJ(i,t.messages,t.firstIndex),r=e.olderCursor??null}return t===c.current?(r(e=>e.kind===`ready`?{...e,transcript:n.reduce((e,t)=>EJ(e,t.messages,t.firstIndex),e.transcript),older:null}:e),i):null}catch(e){return t===c.current&&r({kind:`error`,message:K(e)}),null}finally{t===c.current&&(s.current=!1,a(!1))}},[l]),refresh:d,reload:(0,g.useCallback)(()=>{r({kind:`loading`}),u()},[u])}}var IJ=3e3,LJ=80,RJ=2500;function zJ(e,t){let n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=e,r.click(),URL.revokeObjectURL(n)}var BJ=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})};function VJ(e){let{entry:t}=e,n=z(t.role===`user`?`transcript.you`:t.role===`assistant`?`transcript.agent`:`transcript.system`);return(0,V.jsxs)(`article`,{className:cK(e),"data-index":t.index,children:[(0,V.jsxs)(`header`,{className:lK,children:[(0,V.jsx)(`span`,{className:uK(t.role),children:n}),(0,V.jsx)(`span`,{className:dK,children:BJ(t.at)}),(0,V.jsx)(H,{className:fK,onClick:e.onCopy,children:z(`transcript.copy`)})]}),t.text!==``&&(0,V.jsx)(NK,{source:t.text,needle:e.needle}),t.tools.map((t,n)=>(0,V.jsxs)(`p`,{className:pK,title:`${t.name} ${t.summary}`,children:[(0,V.jsx)(`span`,{className:mK,children:DK(t.name,e.needle)}),(0,V.jsx)(`span`,{className:hK,children:DK(t.summary,e.needle)}),e.failed.has(t.callId)&&(0,V.jsx)(`span`,{className:`flex-none text-error`,children:z(`transcript.failed`)})]},n))]})}function HJ({model:e,task:t,active:n}){B();let r=FJ(e,t.id),{state:i}=r,[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(null),d=(0,g.useRef)(null),f=(0,g.useRef)(!0),p=(0,g.useRef)(null),m=v(rA),h=i.kind===`ready`?i:null,_=(0,g.useMemo)(()=>h?.transcript.entries??[],[h?.transcript]),y=h?.transcript.failed??new Set,b=(0,g.useMemo)(()=>DJ(_,a),[_,a]),x=b.length===0?0:Math.min(s,b.length-1),S=b[x]??null,C=e=>{f.current=!1,d.current?.querySelector(`[data-index="${e}"]`)?.scrollIntoView({block:`center`})},w=t.rowStatus?.kind,T=w===`running`||w===`needs-input`,{refresh:E}=r;(0,g.useEffect)(()=>{n&&E()},[n,w,E]),(0,g.useEffect)(()=>{if(!n||!T)return;let e=setInterval(()=>void E(),IJ);return()=>clearInterval(e)},[n,T,E]),(0,g.useLayoutEffect)(()=>{let e=d.current;e&&(p.current?(e.scrollTop=p.current.top+(e.scrollHeight-p.current.height),p.current=null):f.current&&(e.scrollTop=e.scrollHeight))},[_]);let D=async()=>{let e=d.current;e&&(p.current={height:e.scrollHeight,top:e.scrollTop}),await r.loadOlder()};(0,g.useEffect)(()=>{if(!m||m.taskId!==t.id||!h||!n)return;let e=kJ(_,m.hit);e===null?h.older&&AJ(_,m.hit)?D():rA.set(null):(u(e),C(e),rA.set(null))},[m,h,_,n,t.id]),(0,g.useEffect)(()=>{if(l===null)return;let e=setTimeout(()=>u(null),RJ);return()=>clearTimeout(e)},[l]),(0,g.useEffect)(()=>{c(0);let e=DJ(_,a)[0];e!==void 0&&C(e)},[a]);let O=e=>{if(b.length===0)return;let t=(x+e+b.length)%b.length;c(t),C(b[t])},k=e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?(e.preventDefault(),O(e.shiftKey?-1:1)):e.key===`Escape`&&a!==``&&(e.stopPropagation(),o(``))},A=e=>void navigator.clipboard.writeText(MJ(e,y)).then(()=>G(z(`transcript.copied`)),()=>G(z(`menu.copyFailed`),`error`)),j=async()=>{let e=await r.loadAll();if(!e)return;let n={user:z(`transcript.you`),assistant:z(`transcript.agent`),system:z(`transcript.system`)};zJ(`${t.label.replace(/[^\p{L}\p{N}]+/gu,`-`).replace(/^-|-$/g,``)||`conversation`}.md`,NJ(t.label,e.entries,e.failed,n))};return i.kind===`loading`?(0,V.jsx)(`div`,{className:nK,children:(0,V.jsx)(`p`,{className:oK,children:z(`transcript.loading`)})}):i.kind===`error`?(0,V.jsxs)(`div`,{className:nK,children:[(0,V.jsx)(`p`,{className:`${oK} text-error`,children:z(`transcript.error`,{error:i.message})}),(0,V.jsx)(`p`,{className:oK,children:(0,V.jsx)(H,{onClick:r.reload,children:z(`transcript.retry`)})})]}):i.kind===`terminal`?(0,V.jsxs)(`div`,{className:nK,children:[(0,V.jsx)(`p`,{className:oK,children:z(`transcript.noHistory`)}),(0,V.jsx)(`pre`,{className:`${sK} min-h-0 flex-1 overflow-y-auto`,children:i.tail.join(`
149
- `)})]}):(0,V.jsxs)(`div`,{className:nK,children:[(0,V.jsxs)(`div`,{className:rK,children:[(0,V.jsx)(`input`,{className:`${tn} ${iK}`,value:a,placeholder:z(`transcript.findPlaceholder`),"aria-label":z(`transcript.findPlaceholder`),spellCheck:!1,autoComplete:`off`,onChange:e=>o(e.target.value),onKeyDown:k}),a.trim()!==``&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`whitespace-nowrap text-muted`,children:b.length===0?z(`transcript.findNone`):z(`transcript.findCount`,{at:x+1,total:b.length})}),(0,V.jsx)(H,{onClick:()=>O(-1),disabled:b.length===0,children:z(`transcript.prev`)}),(0,V.jsx)(H,{onClick:()=>O(1),disabled:b.length===0,children:z(`transcript.next`)})]}),(0,V.jsx)(H,{onClick:()=>void j(),disabled:_.length===0,children:z(`transcript.export`)})]}),(0,V.jsxs)(`div`,{ref:d,className:aK,onScroll:e=>{let t=e.currentTarget;f.current=t.scrollHeight-t.scrollTop-t.clientHeight<LJ,t.scrollTop<LJ&&h?.older&&!r.paging&&D()},children:[h?.older&&(0,V.jsx)(`p`,{className:`m-0 px-3 py-2 font-mono text-meta text-subtle`,children:(0,V.jsx)(H,{onClick:()=>void D(),disabled:r.paging,children:z(`transcript.older`)})}),_.length===0&&(0,V.jsx)(`p`,{className:`m-0 px-3 py-2 font-mono text-meta text-subtle`,children:z(`transcript.empty`)}),_.map(e=>(0,V.jsx)(VJ,{entry:e,failed:y,needle:a,flash:l===e.index,current:S===e.index,onCopy:()=>A(e)},e.index))]})]})}function UJ(){B();let e=v(qa),t=z(e?`panel.restore`:`panel.expand`);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:yI({tool:!0}),title:t,"aria-label":t,"aria-pressed":e,onClick:()=>qa.set(!e),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:e?`M13.5 6.5h-4v-4M2.5 9.5h4v4M9.5 6.5l4-4M6.5 9.5l-4 4`:`M9.5 2.5h4v4M6.5 13.5h-4v-4M13.5 2.5l-4.5 4.5M2.5 13.5 7 9`})})}),(0,V.jsx)(`button`,{type:`button`,className:yI({tool:!0}),title:z(`panel.hide`),"aria-label":z(`panel.hide`),onClick:()=>Ka.set(!1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`})})})]})}function WJ({panel:e}){B();let t=(0,g.useRef)(null);return(0,V.jsx)(RI,{edge:`left`,title:z(`panel.resize`),onPointerDown:n=>{t.current={x:n.clientX,width:e.current?.getBoundingClientRect().width??0},e.current?.classList.add(`is-resizing`),n.currentTarget.setPointerCapture(n.pointerId),En(!0)},onPointerMove:e=>{let n=t.current;if(!n||e.clientX===n.x)return;let r=pI.get()?0:_I(fI.get()??280);Ga.set(Ja(n.width-(e.clientX-n.x),r))},onLostPointerCapture:()=>{t.current=null,e.current?.classList.remove(`is-resizing`),En(!1)},onDoubleClick:()=>Ga.set(null)})}function GJ({taskId:e,body:t}){B();let n=(0,g.useRef)(!1);return(0,V.jsx)(`div`,{className:jI,title:z(`panel.resizeSplit`),onPointerDown:e=>{n.current=!0,t.current?.classList.add(`is-resizing`),e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:r=>{let i=t.current?.getBoundingClientRect(),a=t.current?.querySelectorAll(`.side-head`);if(!n.current||!i||a?.length!==2)return;let o=a[0]?.getBoundingClientRect(),s=a[1]?.getBoundingClientRect();if(!o||!s)return;let c=r.currentTarget.getBoundingClientRect().height,l=i.bottom-o.bottom-s.height-c;l>0&&Xk(e,e=>kk(e,(r.clientY-o.bottom-c/2)/l))},onLostPointerCapture:()=>{n.current=!1,t.current?.classList.remove(`is-resizing`)},onDoubleClick:()=>Xk(e,e=>kk(e,.5))})}function KJ({model:e,task:t,tab:n,narrow:r,active:i,restored:a}){return n.kind===`files`?(0,V.jsx)(CG,{model:e,task:t,narrow:r}):n.kind===`chat`?(0,V.jsx)(HJ,{model:e,task:t,active:i}):n.kind===`quota`?(0,V.jsx)(hJ,{model:e,task:t,active:i}):n.kind===`diff`?(0,V.jsx)(Zq,{model:e,view:{taskId:t.id,path:n.path,scope:n.scope},active:i,restored:a,onClose:()=>tA(t.id,n.id)},`${t.id}:${n.path}:${n.scope}`):(0,V.jsx)(EW,{model:e,tab:n,onNavigate:e=>Xk(t.id,t=>wk(t,n.id,e)),onStep:e=>Xk(t.id,t=>Tk(t,n.id,e))})}function qJ({model:e,task:t,narrow:n}){B();let r=Yk(t.id),i=v(Ha),a=v(qa),o=(0,g.useRef)(null),s=(0,g.useRef)(null),c=i===`terminal`?`files`:i,l=nk(r),u=n?ik(r,c):null;(0,g.useEffect)(()=>{n&&!u&&Xk(t.id,e=>bk(e,c))},[n,u,c,t.id]);let d=n?u?[u.id]:[]:tk(r).flatMap(([,e])=>e.active?[e.active]:[]),f=(0,g.useRef)([]);f.current=Ak(f.current,d,l);let p=(0,g.useRef)(new Set(d)),m=!n&&r.bottom!==null,h=m?`auto minmax(0, ${r.ratio*100}fr) var(--divider) auto minmax(0, ${(1-r.ratio)*100}fr)`:`auto minmax(0, 1fr)`,_=l.filter(e=>e.kind===c),y=!n&&r.top.tabs.length===0;return(0,V.jsxs)(`aside`,{className:SI(n),ref:o,children:[!n&&!a&&(0,V.jsx)(WJ,{panel:o}),(0,V.jsxs)(`div`,{className:CI,ref:s,style:{gridTemplateRows:h},children:[n?(_.length>1||c===`diff`)&&(0,V.jsx)(FG,{taskId:t.id,panel:r,group:`top`,tabs:_,active:u?.id??null,narrow:!0}):tk(r).map(([e,n])=>(0,V.jsx)(FG,{taskId:t.id,panel:r,group:e,tabs:n.tabs,active:n.active,narrow:!1,children:e===`top`&&(0,V.jsx)(UJ,{})},e)),y&&(0,V.jsx)(`p`,{className:`row-2 m-auto flex max-w-[44ch] flex-col items-center gap-2.5 p-4 text-center font-mono text-meta leading-[1.5] text-subtle normal-nums`,children:z(`panel.empty`)}),m&&(0,V.jsx)(GJ,{taskId:t.id,body:s}),l.filter(e=>f.current.includes(e.id)).map(i=>(0,V.jsx)(`div`,{className:MI,hidden:!d.includes(i.id),style:{gridRow:rk(r,i.id)?.name===`bottom`&&!n?5:2},children:(0,V.jsx)(KJ,{model:e,task:t,tab:i,narrow:n,active:d.includes(i.id),restored:p.current.has(i.id)})},i.id))]})]})}function JJ({model:e,task:t,remoteHost:n,narrow:r=!1}){let i=v(pn),a=v(Ka);return!r&&(i||!a)?null:t?(0,V.jsx)(qJ,{model:e,task:t,narrow:r},t.id):n?(0,V.jsx)(`aside`,{className:SI(!1),children:(0,V.jsx)(TE,{host:n,onMachines:()=>AO(e)})}):null}var YJ=1500;function XJ({model:e}){let t=e.client,n=v(t.conn),[r,i]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{if(n.state!==`connecting`)return i(!1);let e=window.setTimeout(()=>i(!0),YJ);return()=>window.clearTimeout(e)},[n.state]),n.state===`open`||n.state===`connecting`&&!r?null:(0,V.jsxs)(`footer`,{className:It,children:[(0,V.jsx)(`span`,{className:Lt(n.state===`retrying`)}),(0,V.jsx)(`span`,{children:n.state===`retrying`?z(`status.retrying`,{count:n.failures}):z(`status.connecting`)}),n.state===`retrying`&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>t.retryNow(),children:z(`status.retry`)})]})}function ZJ({model:e,taskId:t,groupId:n}){B();let r=v(e.tasks),i=r?sL(r.tasks,n):[];return i.length<2||!i.some(e=>e.id===t)?null:(0,V.jsxs)(`nav`,{className:UL,"aria-label":z(`compare.menu`),children:[i.map((n,r)=>(0,V.jsxs)(H,{variant:`pill`,hit:`tight`,"aria-current":n.id===t,onClick:()=>e.select(n.id),children:[`[ `,(0,V.jsx)(uR,{status:n.rowStatus}),r+1,` `,n.engine?.name??n.label,n.kept&&(0,V.jsx)(`span`,{className:`text-accent`,children:`✓`}),` ]`]},n.id)),(0,V.jsx)(H,{hit:`tight`,className:`ml-auto flex-none whitespace-nowrap`,onClick:()=>ya(n),children:z(`compare.strip`)})]})}var QJ=new Set,$J=2e3;function eY(e){QJ.add(e)}function tY(e,t=$J){setTimeout(()=>QJ.delete(e),t)}var nY=e=>QJ.has(e),rY=new Map,iY=new Set,aY=(e,t)=>`${e}/${t}`,oY=e=>rY.get(e)??``;function sY(e,t){t===``?rY.delete(e):rY.set(e,t);for(let e of iY)e()}function cY(e){return iY.add(e),()=>iY.delete(e)}function lY(e,t){let n=oY(e).trimEnd();sY(e,n===``?t:`${n}\n\n${t}`)}var uY=3e3,dY=32;function fY(e){let{model:t,taskId:n,tabId:r,revision:i}=e,[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(0);if((0,g.useEffect)(()=>{let e=!0,i=()=>t.client.request(`queue.list`,{taskId:n}).then(t=>e&&o(t.items.filter(e=>e.tabId===r)),()=>e&&o([]));i();let a=window.setInterval(i,uY);return()=>{e=!1,window.clearInterval(a)}},[t,n,r,i,s]),a.length===0)return null;let l=e=>void t.client.request(`queue.cancel`,{id:e}).finally(()=>c(e=>e+1));return(0,V.jsx)(`div`,{className:kn,"data-field":`queued`,children:a.map(e=>(0,V.jsxs)(`span`,{className:An(!1),title:e.text,children:[`${z(`layout.queuedChip`)} · ${e.text.length>dY?`${e.text.slice(0,dY)}…`:e.text} `,(0,V.jsx)(H,{hit:`tight`,"aria-label":z(`layout.queueCancel`),title:z(`layout.queueCancel`),onClick:()=>l(e.id),children:`×`})]},e.id))})}var pY=`relative hidden [border-top:var(--hairline)_solid_var(--line)] bg-surface px-1.5 py-1.5 touch:flex`,mY=`absolute inset-x-1.5 bottom-full z-5 mb-1`,hY=`absolute inset-x-1.5 bottom-full z-6 mb-1`,gY=`flex min-w-0 flex-1 items-stretch gap-1.5`,_Y=`h-10 min-w-0 flex-1 resize-none rounded-sm border-hairline border-line bg-inset px-2 py-2 font-sans text-display leading-[1.35] text-ink outline-none focus:border-focus disabled:opacity-60`,vY=`h-10 shrink-0 rounded-sm bg-accent px-3.5 font-sans text-meta font-semibold text-paper touch-manipulation active:scale-97 motion-reduce:active:scale-none disabled:opacity-50`,yY=`flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-sm border-hairline border-line bg-inset text-muted touch-manipulation has-[:disabled]:opacity-60`;function bY(){return(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,className:`size-4 fill-none stroke-current stroke-[1.4]`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M10.5 4.5 5.8 9.2a1.4 1.4 0 0 0 2 2l5-5a2.8 2.8 0 0 0-4-4l-5.2 5.2a4.2 4.2 0 0 0 6 6L13 9`})})}function xY(e){return(0,V.jsxs)(`form`,{className:pY,"data-composer":e.composerKey,onSubmit:t=>{t.preventDefault(),e.onSend()},children:[e.attached&&(0,V.jsx)(`div`,{className:mY,children:e.attached}),e.suggest&&(0,V.jsx)(`div`,{className:hY,children:e.suggest}),(0,V.jsxs)(`div`,{className:gY,children:[e.attach,(0,V.jsx)(`textarea`,{ref:e.fieldRef,className:_Y,rows:1,value:e.value,placeholder:e.placeholder,disabled:e.busy,enterKeyHint:`send`,onChange:e.onChange,onSelect:e.onSelect,onKeyDown:e.onKeyDown,onPaste:e.onPaste}),(0,V.jsx)(`button`,{type:`submit`,className:vY,disabled:e.busy||!e.ready,children:e.sendLabel})]})]})}function SY({model:e,taskId:t,tabId:n}){let r=v(e.tasks)?.tasks.some(e=>e.id===t)??!1,i=aY(t,n),a=(0,g.useSyncExternalStore)(cY,()=>oY(i)),[o,s]=(0,g.useState)(!1),[c,l]=(0,g.useState)(0),{attachments:u,attach:d,remove:f,clear:p}=Xo(e,e=>G(e,`error`)),m=(0,g.useRef)(null),h=rO({value:a,onChange:e=>sY(i,e),area:m,listClassName:`m-0`}),_=async()=>{let r=Jo(a.trim(),u).trim();if(r){s(!0);try{let a=await e.client.request(`tab.send`,{taskId:t,tabId:n,prompt:r,queue:!0});if(!a.delivered&&!a.queued){G(z(`layout.composerNotSent`,{reason:a.reason??``}),`error`);return}a.queued&&(G(z(`layout.composerQueued`,{position:a.position??1})),l(e=>e+1)),sY(i,``),p()}catch(e){let t=e instanceof u_?e.code:void 0;G(t===`UNKNOWN_OP`?z(`layout.composerOldBridge`):t===`AWAITING_PERMISSION`?z(`layout.composerAtMenu`):e instanceof Error?e.message:String(e),`error`)}finally{s(!1)}}};if(!r)return null;let y=e=>void d(e);return(0,V.jsx)(xY,{value:a,placeholder:z(`layout.composerPlaceholder`),sendLabel:z(`layout.composerSend`),busy:o,ready:a.trim()!==``||u.length>0,attached:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(fY,{model:e,taskId:t,tabId:n,revision:c}),(0,V.jsx)(Zo,{attachments:u,onRemove:f})]}),attach:(0,V.jsxs)(qo,{className:yY,title:z(`layout.composerAttach`),disabled:o,onFiles:y,children:[(0,V.jsx)(`span`,{className:`sr-only`,children:z(`layout.composerAttach`)}),(0,V.jsx)(bY,{})]}),composerKey:i,fieldRef:m,suggest:h.list,...h.field,onPaste:Ko(y).onPaste,onSend:()=>void _()})}var CY={up:`layout.termKeyUp`,down:`layout.termKeyDown`,left:`layout.termKeyLeft`,right:`layout.termKeyRight`,interrupt:`layout.termKeyInterrupt`,enter:`layout.termKeyEnter`};function wY({handle:e,atMenu:t}){B();let[n,r]=(0,g.useState)(!1);(0,g.useEffect)(()=>{e.armCtrl(n?()=>r(!1):null)},[e,n]),(0,g.useEffect)(()=>()=>e.armCtrl(null),[e]);let{term:i}=e,a=e=>(0,V.jsx)(`button`,{type:`button`,className:rt(!1),"aria-label":CY[e.id]?z(CY[e.id]):void 0,onClick:()=>{r(!1),i.input(e.bytes(i.modes.applicationCursorKeysMode),!0)},children:e.cap},e.id);return(0,V.jsxs)(`div`,{className:`mono ${nt}`,role:`toolbar`,"aria-label":z(`layout.termKeys`),onPointerDown:e=>e.preventDefault(),children:[t&&Ev.map(a),(0,V.jsx)(`button`,{type:`button`,className:rt(n),"aria-pressed":n,onClick:()=>r(!n),children:`ctrl`}),wv.filter(e=>!(t&&Ev.includes(e))).map(a)]})}function TY(e){switch(e.kind){case`restored`:return z(`workspace.restored`);case`notLive`:return z(`workspace.tabNotLive`);case`exited`:return z(`workspace.exited`,{code:e.code??`?`});case`failed`:return z(`workspace.attachFailed`,{message:e.message});case`none`:return``}}function EY(e){B();let{notice:t,engineExit:n,model:r,taskId:i,tabId:a,revive:o}=e,s=t.kind===`none`?n:null,c=t.kind===`none`&&!s&&e.usageLimit===!0&&!o.error;if(t.kind===`none`&&!s&&!c)return null;let l=t.kind===`notLive`||t.kind===`restored`||t.kind===`exited`,u=t.kind===`exited`||s!==null,d=o.error?z(`workspace.reopenFailed`,{message:o.error}):s?z(`workspace.engineExited`,{code:s.code??`?`}):c?z(`workspace.usageLimit`):TY(t);return(0,V.jsxs)(`div`,{className:Ft(t.kind===`failed`||!!o.error),children:[(0,V.jsx)(`span`,{children:d}),e.onReopen&&(l||s)&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,disabled:o.busy,onClick:()=>e.onReopen?.(s!==null),children:o.busy?z(`workspace.reopening`):z(s?`workspace.retry`:`workspace.reopen`)}),t.kind===`failed`&&e.onRetryAttach&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:e.onRetryAttach,children:z(`workspace.retry`)}),c&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i,context:`continue`,sourceTabId:a})),children:z(`menu.continueEngine`)}),(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:e.onDismissLimit,children:z(`workspace.dismiss`)})]}),u&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>W.set((0,V.jsx)(qP,{model:r,section:`engines`})),children:z(`workspace.engineSettings`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i})),children:z(`menu.newChatPick`)}),(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i,context:`continue`,sourceTabId:a})),children:z(`menu.continueEngine`)})]})]})}function DY(e){let t=e.split(`
148
+ `)}\n`}var FJ=50;function IJ(e,t){let[n,r]=(0,g.useState)({kind:`loading`}),[i,a]=(0,g.useState)(!1),o=(0,g.useRef)(n);o.current=n;let s=(0,g.useRef)(!1),c=(0,g.useRef)(0),l=(0,g.useCallback)(n=>e.client.request(`output.read`,{taskId:t,limit:FJ,...n}),[e,t]),u=(0,g.useCallback)(async()=>{let e=++c.current;s.current=!0;try{let t=await l({});if(e!==c.current)return;if(t.source===`terminal`||!t.history){r({kind:`terminal`,tail:t.terminal?.tail??[]});return}let n=DJ(bJ,t.history.messages??[],t.history.firstIndex??0);r({kind:`ready`,transcript:n,cursor:t.cursor??null,older:t.olderCursor??null})}catch(t){e===c.current&&r({kind:`error`,message:K(t)})}finally{e===c.current&&(s.current=!1)}},[l]);(0,g.useEffect)(()=>(r({kind:`loading`}),u(),()=>{c.current++,s.current=!1}),[u]);let d=(0,g.useCallback)(async()=>{let e=o.current;if(s.current)return;if(e.kind===`terminal`)return u();if(e.kind!==`ready`||!e.cursor)return;let t=c.current;s.current=!0;try{let n=await l({cursor:e.cursor,source:`history`});if(t!==c.current)return;r(e=>e.kind===`ready`?{...e,transcript:DJ(e.transcript,n.history?.messages??[],n.history?.firstIndex??0),cursor:n.cursor??e.cursor}:e)}catch{t===c.current&&(s.current=!1,await u())}finally{t===c.current&&(s.current=!1)}},[l,u]);return{state:n,paging:i,loadOlder:(0,g.useCallback)(async()=>{let e=o.current;if(s.current||e.kind!==`ready`||!e.older)return;let t=c.current;s.current=!0,a(!0);try{let n=await l({cursor:e.older,source:`history`});if(t!==c.current)return;r(e=>e.kind===`ready`?{...e,transcript:DJ(e.transcript,n.history?.messages??[],n.history?.firstIndex??0),older:n.olderCursor??null}:e)}catch(e){t===c.current&&r({kind:`error`,message:K(e)})}finally{t===c.current&&(s.current=!1,a(!1))}},[l]),loadAll:(0,g.useCallback)(async()=>{let e=o.current;if(e.kind!==`ready`)return null;if(s.current||!e.older)return e.transcript;let t=c.current;s.current=!0,a(!0);let n=[],i=e.transcript;try{for(let r=e.older;r&&t===c.current;){let e=await l({cursor:r,source:`history`}),t={messages:e.history?.messages??[],firstIndex:e.history?.firstIndex??0};n.push(t),i=DJ(i,t.messages,t.firstIndex),r=e.olderCursor??null}return t===c.current?(r(e=>e.kind===`ready`?{...e,transcript:n.reduce((e,t)=>DJ(e,t.messages,t.firstIndex),e.transcript),older:null}:e),i):null}catch(e){return t===c.current&&r({kind:`error`,message:K(e)}),null}finally{t===c.current&&(s.current=!1,a(!1))}},[l]),refresh:d,reload:(0,g.useCallback)(()=>{r({kind:`loading`}),u()},[u])}}var LJ=3e3,RJ=80,zJ=2500;function BJ(e,t){let n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=e,r.click(),URL.revokeObjectURL(n)}var VJ=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})};function HJ(e){let{entry:t}=e,n=z(t.role===`user`?`transcript.you`:t.role===`assistant`?`transcript.agent`:`transcript.system`);return(0,V.jsxs)(`article`,{className:lK(e),"data-index":t.index,children:[(0,V.jsxs)(`header`,{className:uK,children:[(0,V.jsx)(`span`,{className:dK(t.role),children:n}),(0,V.jsx)(`span`,{className:fK,children:VJ(t.at)}),(0,V.jsx)(H,{className:pK,onClick:e.onCopy,children:z(`transcript.copy`)})]}),t.text!==``&&(0,V.jsx)(PK,{source:t.text,needle:e.needle}),t.tools.map((t,n)=>(0,V.jsxs)(`p`,{className:mK,title:`${t.name} ${t.summary}`,children:[(0,V.jsx)(`span`,{className:hK,children:OK(t.name,e.needle)}),(0,V.jsx)(`span`,{className:gK,children:OK(t.summary,e.needle)}),e.failed.has(t.callId)&&(0,V.jsx)(`span`,{className:`flex-none text-error`,children:z(`transcript.failed`)})]},n))]})}function UJ({model:e,task:t,active:n}){B();let r=IJ(e,t.id),{state:i}=r,[a,o]=(0,g.useState)(``),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(null),d=(0,g.useRef)(null),f=(0,g.useRef)(!0),p=(0,g.useRef)(null),m=v(rA),h=i.kind===`ready`?i:null,_=(0,g.useMemo)(()=>h?.transcript.entries??[],[h?.transcript]),y=h?.transcript.failed??new Set,b=(0,g.useMemo)(()=>OJ(_,a),[_,a]),x=b.length===0?0:Math.min(s,b.length-1),S=b[x]??null,C=e=>{f.current=!1,d.current?.querySelector(`[data-index="${e}"]`)?.scrollIntoView({block:`center`})},w=t.rowStatus?.kind,T=w===`running`||w===`needs-input`,{refresh:E}=r;(0,g.useEffect)(()=>{n&&E()},[n,w,E]),(0,g.useEffect)(()=>{if(!n||!T)return;let e=setInterval(()=>void E(),LJ);return()=>clearInterval(e)},[n,T,E]),(0,g.useLayoutEffect)(()=>{let e=d.current;e&&(p.current?(e.scrollTop=p.current.top+(e.scrollHeight-p.current.height),p.current=null):f.current&&(e.scrollTop=e.scrollHeight))},[_]);let D=async()=>{let e=d.current;e&&(p.current={height:e.scrollHeight,top:e.scrollTop}),await r.loadOlder()};(0,g.useEffect)(()=>{if(!m||m.taskId!==t.id||!h||!n)return;let e=AJ(_,m.hit);e===null?h.older&&jJ(_,m.hit)?D():rA.set(null):(u(e),C(e),rA.set(null))},[m,h,_,n,t.id]),(0,g.useEffect)(()=>{if(l===null)return;let e=setTimeout(()=>u(null),zJ);return()=>clearTimeout(e)},[l]),(0,g.useEffect)(()=>{c(0);let e=OJ(_,a)[0];e!==void 0&&C(e)},[a]);let O=e=>{if(b.length===0)return;let t=(x+e+b.length)%b.length;c(t),C(b[t])},k=e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?(e.preventDefault(),O(e.shiftKey?-1:1)):e.key===`Escape`&&a!==``&&(e.stopPropagation(),o(``))},A=e=>void navigator.clipboard.writeText(NJ(e,y)).then(()=>G(z(`transcript.copied`)),()=>G(z(`menu.copyFailed`),`error`)),j=async()=>{let e=await r.loadAll();if(!e)return;let n={user:z(`transcript.you`),assistant:z(`transcript.agent`),system:z(`transcript.system`)};BJ(`${t.label.replace(/[^\p{L}\p{N}]+/gu,`-`).replace(/^-|-$/g,``)||`conversation`}.md`,PJ(t.label,e.entries,e.failed,n))};return i.kind===`loading`?(0,V.jsx)(`div`,{className:rK,children:(0,V.jsx)(`p`,{className:sK,children:z(`transcript.loading`)})}):i.kind===`error`?(0,V.jsxs)(`div`,{className:rK,children:[(0,V.jsx)(`p`,{className:`${sK} text-error`,children:z(`transcript.error`,{error:i.message})}),(0,V.jsx)(`p`,{className:sK,children:(0,V.jsx)(H,{onClick:r.reload,children:z(`transcript.retry`)})})]}):i.kind===`terminal`?(0,V.jsxs)(`div`,{className:rK,children:[(0,V.jsx)(`p`,{className:sK,children:z(`transcript.noHistory`)}),(0,V.jsx)(`pre`,{className:`${cK} min-h-0 flex-1 overflow-y-auto`,children:i.tail.join(`
149
+ `)})]}):(0,V.jsxs)(`div`,{className:rK,children:[(0,V.jsxs)(`div`,{className:iK,children:[(0,V.jsx)(`input`,{className:`${tn} ${aK}`,value:a,placeholder:z(`transcript.findPlaceholder`),"aria-label":z(`transcript.findPlaceholder`),spellCheck:!1,autoComplete:`off`,onChange:e=>o(e.target.value),onKeyDown:k}),a.trim()!==``&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`whitespace-nowrap text-muted`,children:b.length===0?z(`transcript.findNone`):z(`transcript.findCount`,{at:x+1,total:b.length})}),(0,V.jsx)(H,{onClick:()=>O(-1),disabled:b.length===0,children:z(`transcript.prev`)}),(0,V.jsx)(H,{onClick:()=>O(1),disabled:b.length===0,children:z(`transcript.next`)})]}),(0,V.jsx)(H,{onClick:()=>void j(),disabled:_.length===0,children:z(`transcript.export`)})]}),(0,V.jsxs)(`div`,{ref:d,className:oK,onScroll:e=>{let t=e.currentTarget;f.current=t.scrollHeight-t.scrollTop-t.clientHeight<RJ,t.scrollTop<RJ&&h?.older&&!r.paging&&D()},children:[h?.older&&(0,V.jsx)(`p`,{className:`m-0 px-3 py-2 font-mono text-meta text-subtle`,children:(0,V.jsx)(H,{onClick:()=>void D(),disabled:r.paging,children:z(`transcript.older`)})}),_.length===0&&(0,V.jsx)(`p`,{className:`m-0 px-3 py-2 font-mono text-meta text-subtle`,children:z(`transcript.empty`)}),_.map(e=>(0,V.jsx)(HJ,{entry:e,failed:y,needle:a,flash:l===e.index,current:S===e.index,onCopy:()=>A(e)},e.index))]})]})}function WJ(){B();let e=v(qa),t=z(e?`panel.restore`:`panel.expand`);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:bI({tool:!0}),title:t,"aria-label":t,"aria-pressed":e,onClick:()=>qa.set(!e),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:e?`M13.5 6.5h-4v-4M2.5 9.5h4v4M9.5 6.5l4-4M6.5 9.5l-4 4`:`M9.5 2.5h4v4M6.5 13.5h-4v-4M13.5 2.5l-4.5 4.5M2.5 13.5 7 9`})})}),(0,V.jsx)(`button`,{type:`button`,className:bI({tool:!0}),title:z(`panel.hide`),"aria-label":z(`panel.hide`),onClick:()=>Ka.set(!1),children:(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M4 4l8 8M12 4l-8 8`})})})]})}function GJ({panel:e}){B();let t=(0,g.useRef)(null);return(0,V.jsx)(zI,{edge:`left`,title:z(`panel.resize`),onPointerDown:n=>{t.current={x:n.clientX,width:e.current?.getBoundingClientRect().width??0},e.current?.classList.add(`is-resizing`),n.currentTarget.setPointerCapture(n.pointerId),En(!0)},onPointerMove:e=>{let n=t.current;if(!n||e.clientX===n.x)return;let r=mI.get()?0:vI(pI.get()??280);Ga.set(Ja(n.width-(e.clientX-n.x),r))},onLostPointerCapture:()=>{t.current=null,e.current?.classList.remove(`is-resizing`),En(!1)},onDoubleClick:()=>Ga.set(null)})}function KJ({taskId:e,body:t}){B();let n=(0,g.useRef)(!1);return(0,V.jsx)(`div`,{className:MI,title:z(`panel.resizeSplit`),onPointerDown:e=>{n.current=!0,t.current?.classList.add(`is-resizing`),e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:r=>{let i=t.current?.getBoundingClientRect(),a=t.current?.querySelectorAll(`.side-head`);if(!n.current||!i||a?.length!==2)return;let o=a[0]?.getBoundingClientRect(),s=a[1]?.getBoundingClientRect();if(!o||!s)return;let c=r.currentTarget.getBoundingClientRect().height,l=i.bottom-o.bottom-s.height-c;l>0&&Xk(e,e=>kk(e,(r.clientY-o.bottom-c/2)/l))},onLostPointerCapture:()=>{n.current=!1,t.current?.classList.remove(`is-resizing`)},onDoubleClick:()=>Xk(e,e=>kk(e,.5))})}function qJ({model:e,task:t,tab:n,narrow:r,active:i,restored:a}){return n.kind===`files`?(0,V.jsx)(wG,{model:e,task:t,narrow:r}):n.kind===`chat`?(0,V.jsx)(UJ,{model:e,task:t,active:i}):n.kind===`quota`?(0,V.jsx)(gJ,{model:e,task:t,active:i}):n.kind===`diff`?(0,V.jsx)(Qq,{model:e,view:{taskId:t.id,path:n.path,scope:n.scope},active:i,restored:a,onClose:()=>tA(t.id,n.id)},`${t.id}:${n.path}:${n.scope}`):(0,V.jsx)(DW,{model:e,tab:n,onNavigate:e=>Xk(t.id,t=>wk(t,n.id,e)),onStep:e=>Xk(t.id,t=>Tk(t,n.id,e))})}function JJ({model:e,task:t,narrow:n}){B();let r=Yk(t.id),i=v(Ha),a=v(qa),o=(0,g.useRef)(null),s=(0,g.useRef)(null),c=i===`terminal`?`files`:i,l=nk(r),u=n?ik(r,c):null;(0,g.useEffect)(()=>{n&&!u&&Xk(t.id,e=>bk(e,c))},[n,u,c,t.id]);let d=n?u?[u.id]:[]:tk(r).flatMap(([,e])=>e.active?[e.active]:[]),f=(0,g.useRef)([]);f.current=Ak(f.current,d,l);let p=(0,g.useRef)(new Set(d)),m=!n&&r.bottom!==null,h=m?`auto minmax(0, ${r.ratio*100}fr) var(--divider) auto minmax(0, ${(1-r.ratio)*100}fr)`:`auto minmax(0, 1fr)`,_=l.filter(e=>e.kind===c),y=!n&&r.top.tabs.length===0;return(0,V.jsxs)(`aside`,{className:CI(n),ref:o,children:[!n&&!a&&(0,V.jsx)(GJ,{panel:o}),(0,V.jsxs)(`div`,{className:wI,ref:s,style:{gridTemplateRows:h},children:[n?(_.length>1||c===`diff`)&&(0,V.jsx)(IG,{taskId:t.id,panel:r,group:`top`,tabs:_,active:u?.id??null,narrow:!0}):tk(r).map(([e,n])=>(0,V.jsx)(IG,{taskId:t.id,panel:r,group:e,tabs:n.tabs,active:n.active,narrow:!1,children:e===`top`&&(0,V.jsx)(WJ,{})},e)),y&&(0,V.jsx)(`p`,{className:`row-2 m-auto flex max-w-[44ch] flex-col items-center gap-2.5 p-4 text-center font-mono text-meta leading-[1.5] text-subtle normal-nums`,children:z(`panel.empty`)}),m&&(0,V.jsx)(KJ,{taskId:t.id,body:s}),l.filter(e=>f.current.includes(e.id)).map(i=>(0,V.jsx)(`div`,{className:NI,hidden:!d.includes(i.id),style:{gridRow:rk(r,i.id)?.name===`bottom`&&!n?5:2},children:(0,V.jsx)(qJ,{model:e,task:t,tab:i,narrow:n,active:d.includes(i.id),restored:p.current.has(i.id)})},i.id))]})]})}function YJ({model:e,task:t,remoteHost:n,narrow:r=!1}){let i=v(pn),a=v(Ka);return!r&&(i||!a)?null:t?(0,V.jsx)(JJ,{model:e,task:t,narrow:r},t.id):n?(0,V.jsx)(`aside`,{className:CI(!1),children:(0,V.jsx)(TE,{host:n,onMachines:()=>AO(e)})}):null}var XJ=1500;function ZJ({model:e}){let t=e.client,n=v(t.conn),[r,i]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{if(n.state!==`connecting`)return i(!1);let e=window.setTimeout(()=>i(!0),XJ);return()=>window.clearTimeout(e)},[n.state]),n.state===`open`||n.state===`connecting`&&!r?null:(0,V.jsxs)(`footer`,{className:It,children:[(0,V.jsx)(`span`,{className:Lt(n.state===`retrying`)}),(0,V.jsx)(`span`,{children:n.state===`retrying`?z(`status.retrying`,{count:n.failures}):z(`status.connecting`)}),n.state===`retrying`&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>t.retryNow(),children:z(`status.retry`)})]})}function QJ({model:e,taskId:t,groupId:n}){B();let r=v(e.tasks),i=r?cL(r.tasks,n):[];return i.length<2||!i.some(e=>e.id===t)?null:(0,V.jsxs)(`nav`,{className:WL,"aria-label":z(`compare.menu`),children:[i.map((n,r)=>(0,V.jsxs)(H,{variant:`pill`,hit:`tight`,"aria-current":n.id===t,onClick:()=>e.select(n.id),children:[`[ `,(0,V.jsx)(dR,{status:n.rowStatus}),r+1,` `,n.engine?.name??n.label,n.kept&&(0,V.jsx)(`span`,{className:`text-accent`,children:`✓`}),` ]`]},n.id)),(0,V.jsx)(H,{hit:`tight`,className:`ml-auto flex-none whitespace-nowrap`,onClick:()=>ya(n),children:z(`compare.strip`)})]})}var $J=new Set,eY=2e3;function tY(e){$J.add(e)}function nY(e,t=eY){setTimeout(()=>$J.delete(e),t)}var rY=e=>$J.has(e),iY=new Map,aY=new Set,oY=(e,t)=>`${e}/${t}`,sY=e=>iY.get(e)??``;function cY(e,t){t===``?iY.delete(e):iY.set(e,t);for(let e of aY)e()}function lY(e){return aY.add(e),()=>aY.delete(e)}function uY(e,t){let n=sY(e).trimEnd();cY(e,n===``?t:`${n}\n\n${t}`)}var dY=3e3,fY=32;function pY(e){let{model:t,taskId:n,tabId:r,revision:i}=e,[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(0);if((0,g.useEffect)(()=>{let e=!0,i=()=>t.client.request(`queue.list`,{taskId:n}).then(t=>e&&o(t.items.filter(e=>e.tabId===r)),()=>e&&o([]));i();let a=window.setInterval(i,dY);return()=>{e=!1,window.clearInterval(a)}},[t,n,r,i,s]),a.length===0)return null;let l=e=>void t.client.request(`queue.cancel`,{id:e}).finally(()=>c(e=>e+1));return(0,V.jsx)(`div`,{className:kn,"data-field":`queued`,children:a.map(e=>(0,V.jsxs)(`span`,{className:An(!1),title:e.text,children:[`${z(`layout.queuedChip`)} · ${e.text.length>fY?`${e.text.slice(0,fY)}…`:e.text} `,(0,V.jsx)(H,{hit:`tight`,"aria-label":z(`layout.queueCancel`),title:z(`layout.queueCancel`),onClick:()=>l(e.id),children:`×`})]},e.id))})}var mY=`relative hidden [border-top:var(--hairline)_solid_var(--line)] bg-surface px-1.5 py-1.5 touch:flex`,hY=`absolute inset-x-1.5 bottom-full z-5 mb-1`,gY=`absolute inset-x-1.5 bottom-full z-6 mb-1`,_Y=`flex min-w-0 flex-1 items-stretch gap-1.5`,vY=`h-10 min-w-0 flex-1 resize-none rounded-sm border-hairline border-line bg-inset px-2 py-2 font-sans text-display leading-[1.35] text-ink outline-none focus:border-focus disabled:opacity-60`,yY=`h-10 shrink-0 rounded-sm bg-accent px-3.5 font-sans text-meta font-semibold text-paper touch-manipulation active:scale-97 motion-reduce:active:scale-none disabled:opacity-50`,bY=`flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-sm border-hairline border-line bg-inset text-muted touch-manipulation has-[:disabled]:opacity-60`;function xY(){return(0,V.jsx)(`svg`,{viewBox:`0 0 16 16`,className:`size-4 fill-none stroke-current stroke-[1.4]`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M10.5 4.5 5.8 9.2a1.4 1.4 0 0 0 2 2l5-5a2.8 2.8 0 0 0-4-4l-5.2 5.2a4.2 4.2 0 0 0 6 6L13 9`})})}function SY(e){return(0,V.jsxs)(`form`,{className:mY,"data-composer":e.composerKey,onSubmit:t=>{t.preventDefault(),e.onSend()},children:[e.attached&&(0,V.jsx)(`div`,{className:hY,children:e.attached}),e.suggest&&(0,V.jsx)(`div`,{className:gY,children:e.suggest}),(0,V.jsxs)(`div`,{className:_Y,children:[e.attach,(0,V.jsx)(`textarea`,{ref:e.fieldRef,className:vY,rows:1,value:e.value,placeholder:e.placeholder,disabled:e.busy,enterKeyHint:`send`,onChange:e.onChange,onSelect:e.onSelect,onKeyDown:e.onKeyDown,onPaste:e.onPaste}),(0,V.jsx)(`button`,{type:`submit`,className:yY,disabled:e.busy||!e.ready,children:e.sendLabel})]})]})}function CY({model:e,taskId:t,tabId:n}){let r=v(e.tasks)?.tasks.some(e=>e.id===t)??!1,i=oY(t,n),a=(0,g.useSyncExternalStore)(lY,()=>sY(i)),[o,s]=(0,g.useState)(!1),[c,l]=(0,g.useState)(0),{attachments:u,attach:d,remove:f,clear:p}=Xo(e,e=>G(e,`error`)),m=(0,g.useRef)(null),h=rO({value:a,onChange:e=>cY(i,e),area:m,listClassName:`m-0`}),_=async()=>{let r=Jo(a.trim(),u).trim();if(r){s(!0);try{let a=await e.client.request(`tab.send`,{taskId:t,tabId:n,prompt:r,queue:!0});if(!a.delivered&&!a.queued){G(z(`layout.composerNotSent`,{reason:a.reason??``}),`error`);return}a.queued&&(G(z(`layout.composerQueued`,{position:a.position??1})),l(e=>e+1)),cY(i,``),p()}catch(e){let t=e instanceof u_?e.code:void 0;G(t===`UNKNOWN_OP`?z(`layout.composerOldBridge`):t===`AWAITING_PERMISSION`?z(`layout.composerAtMenu`):e instanceof Error?e.message:String(e),`error`)}finally{s(!1)}}};if(!r)return null;let y=e=>void d(e);return(0,V.jsx)(SY,{value:a,placeholder:z(`layout.composerPlaceholder`),sendLabel:z(`layout.composerSend`),busy:o,ready:a.trim()!==``||u.length>0,attached:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(pY,{model:e,taskId:t,tabId:n,revision:c}),(0,V.jsx)(Zo,{attachments:u,onRemove:f})]}),attach:(0,V.jsxs)(qo,{className:bY,title:z(`layout.composerAttach`),disabled:o,onFiles:y,children:[(0,V.jsx)(`span`,{className:`sr-only`,children:z(`layout.composerAttach`)}),(0,V.jsx)(xY,{})]}),composerKey:i,fieldRef:m,suggest:h.list,...h.field,onPaste:Ko(y).onPaste,onSend:()=>void _()})}var wY={up:`layout.termKeyUp`,down:`layout.termKeyDown`,left:`layout.termKeyLeft`,right:`layout.termKeyRight`,interrupt:`layout.termKeyInterrupt`,enter:`layout.termKeyEnter`};function TY({handle:e,atMenu:t}){B();let[n,r]=(0,g.useState)(!1);(0,g.useEffect)(()=>{e.armCtrl(n?()=>r(!1):null)},[e,n]),(0,g.useEffect)(()=>()=>e.armCtrl(null),[e]);let{term:i}=e,a=e=>(0,V.jsx)(`button`,{type:`button`,className:rt(!1),"aria-label":wY[e.id]?z(wY[e.id]):void 0,onClick:()=>{r(!1),i.input(e.bytes(i.modes.applicationCursorKeysMode),!0)},children:e.cap},e.id);return(0,V.jsxs)(`div`,{className:`mono ${nt}`,role:`toolbar`,"aria-label":z(`layout.termKeys`),onPointerDown:e=>e.preventDefault(),children:[t&&Ev.map(a),(0,V.jsx)(`button`,{type:`button`,className:rt(n),"aria-pressed":n,onClick:()=>r(!n),children:`ctrl`}),wv.filter(e=>!(t&&Ev.includes(e))).map(a)]})}function EY(e){switch(e.kind){case`restored`:return z(`workspace.restored`);case`notLive`:return z(`workspace.tabNotLive`);case`exited`:return z(`workspace.exited`,{code:e.code??`?`});case`failed`:return z(`workspace.attachFailed`,{message:e.message});case`none`:return``}}function DY(e){B();let{notice:t,engineExit:n,model:r,taskId:i,tabId:a,revive:o}=e,s=t.kind===`none`?n:null,c=t.kind===`none`&&!s&&e.usageLimit===!0&&!o.error;if(t.kind===`none`&&!s&&!c)return null;let l=t.kind===`notLive`||t.kind===`restored`||t.kind===`exited`,u=t.kind===`exited`||s!==null,d=o.error?z(`workspace.reopenFailed`,{message:o.error}):s?z(`workspace.engineExited`,{code:s.code??`?`}):c?z(`workspace.usageLimit`):EY(t);return(0,V.jsxs)(`div`,{className:Ft(t.kind===`failed`||!!o.error),children:[(0,V.jsx)(`span`,{children:d}),e.onReopen&&(l||s)&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,disabled:o.busy,onClick:()=>e.onReopen?.(s!==null),children:o.busy?z(`workspace.reopening`):z(s?`workspace.retry`:`workspace.reopen`)}),t.kind===`failed`&&e.onRetryAttach&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:e.onRetryAttach,children:z(`workspace.retry`)}),c&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i,context:`continue`,sourceTabId:a})),children:z(`menu.continueEngine`)}),(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:e.onDismissLimit,children:z(`workspace.dismiss`)})]}),u&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>W.set((0,V.jsx)(JP,{model:r,section:`engines`})),children:z(`workspace.engineSettings`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i})),children:z(`menu.newChatPick`)}),(0,V.jsx)(H,{variant:`link`,hit:`tight`,onClick:()=>W.set((0,V.jsx)(GC,{model:r,taskId:i,context:`continue`,sourceTabId:a})),children:z(`menu.continueEngine`)})]})]})}function OY(e){let t=e.split(`
150
150
  `).map(e=>e.trimEnd());for(;t[0]===``;)t.shift();for(;t.at(-1)===``;)t.pop();if(t.length===0)return null;let n=Math.max(0,...Array.from(t.join(`
151
151
  `).matchAll(/`+/g),e=>e[0].length)),r="`".repeat(Math.max(3,n+1));return`${r}\n${t.join(`
152
- `)}\n${r}\n`}function OY(e){let t=document.querySelector(`[data-composer="${CSS.escape(e)}"]`);return t&&t.offsetParent!==null?t:null}function kY(e,t,n,r){let i=DY(e.term.getSelection());if(i===null)return!1;let a=aY(t,n),o=OY(a);if(o){lY(a,i),e.term.clearSelection();let t=o.querySelector(`textarea`);return t?.focus(),t?.setSelectionRange(t.value.length,t.value.length),!0}return r?(G(z(`quote.atMenu`),`error`),!1):e.term.modes.bracketedPasteMode?(e.term.paste(i),e.term.clearSelection(),e.term.focus(),!0):(G(z(`quote.notReady`),`error`),!1)}async function AY(e,t,n){let r=UR(n);r.length<n.length&&G(z(`layout.dropUnsupported`),`error`);for(let n of r)try{t.term.paste(`${await GR(e,n)} `)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}t.term.focus()}async function jY(){if(!navigator.clipboard?.read)throw Error(z(`layout.pasteNeedsHttps`));let e=[];for(let t of await navigator.clipboard.read())for(let n of t.types)(n.startsWith(`image/`)||n===`application/pdf`)&&e.push(new File([await t.getType(n)],`clipboard`,{type:n}));return UR(e)}async function MY(e,t){let n;try{n=await jY()}catch(e){G(z(`layout.pasteNoAccess`,{error:e instanceof Error?e.message:String(e)}),`error`);return}n.length===0?G(z(`layout.pasteNoImage`),`error`):await AY(e,t,n)}async function NY(e){try{return await navigator.clipboard.writeText(e),!0}catch{return G(z(`menu.copyFailed`),`error`),!1}}function PY(e){let{client:t,taskId:n,tabId:r,leafId:i}=e,a=v(e.model.tasks)?.tasks.find(e=>e.id===n)?.tabStatus?.[r]?.kind===`needs-input`;B();let o=(0,g.useRef)(null),[s,c]=(0,g.useState)({kind:`none`}),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(0),[p,m]=(0,g.useState)({busy:!1,error:null}),h=(0,g.useRef)(e);h.current=e,(0,g.useEffect)(()=>{let e=o.current;if(!e)return;let a=null,s=!1,l=[document.fonts.load(`13px "JetBrains Mono"`),document.fonts.load(`bold 13px "JetBrains Mono"`)];document.fonts.load(`13px "${W_}"`,String.fromCodePoint(57504)).catch(()=>{});let d=()=>{s||(a=gT({client:t,host:e,taskId:n,tabId:r,leafId:i,focusOnMount:h.current.focused!==!1},{setNotice:c,onScrolled:f,onFocusChange:e=>{if(!a)return;let{stream:t}=a.handle;e?(h.current.onActivate?.(),aa.set(sa(t)??null)):aa.get()?.stream===t&&aa.set(null)},onExit:()=>{nY(EC(n,r,i))||h.current.onExit?.()},copyText:NY,pasteImage:async()=>{a&&await MY(t,a.handle)}}),u(a.handle))};return hT(t,n,r,i)?d():Promise.allSettled(l).then(d),()=>{s=!0,u(null),a?.release()}},[t,n,r,i]);let[_,y]=(0,g.useState)(!1);(0,g.useEffect)(()=>{if(!l)return;y(l.term.hasSelection());let e=l.term.onSelectionChange(()=>y(l.term.hasSelection()));return()=>{e.dispose(),y(!1)}},[l]),(0,g.useEffect)(()=>{if(!l)return;let{term:e,stream:a}=l,o={stream:a,focus:()=>e.focus(),input:t=>e.input(t,!0),reattach:()=>l.reattach(),scrollPages:e=>l.scrollLines(e*10),hasSelection:()=>e.hasSelection(),copySelection:()=>{let t=e.getSelection();return t.trim().length!==0&&(NY(t),e.clearSelection(),!0)},reset:()=>{let o={cols:e.cols,rows:e.rows};W.set((0,V.jsx)(ur,{title:So(`reset.title`),body:So(`reset.body`),confirmLabel:z(`workspace.reset`),onConfirm:async()=>{eY(a);try{await t.request(`tab.split`,{taskId:n,tabId:r,action:`reset`,leafId:i??`leaf-1`,...o}),await l.reattach(),e.focus()}finally{tY(a)}}}))},size:()=>({cols:e.cols,rows:e.rows})},s=oa(o);return document.activeElement===e.textarea&&aa.set(o),()=>{s()}},[l,t,n,r,i]),(0,g.useEffect)(()=>{e.focused&&l&&document.activeElement!==l.term.textarea&&l.term.focus()},[e.focused,l]);let b=!i||i===`leaf-1`,[x,S]=(0,g.useState)(null),C=e.engineExit?.since===x,[w,T]=(0,g.useState)(null),E=e.usageLimit&&e.usageLimit.since!==w?e.usageLimit:null,D=(0,g.useRef)(!1),O=async(i,a)=>{if(!D.current){D.current=!0,m({busy:!0,error:null});try{await t.request(`term.revive`,{taskId:n,tabId:r,...a?{restartExited:a}:{}}),await i.reattach(),i.term.focus(),S(e.engineExit?.since??null),m({busy:!1,error:null})}catch(e){m({busy:!1,error:e instanceof Error?e.message:String(e)})}finally{D.current=!1}}};return(0,V.jsxs)(`div`,{className:kt,"data-stream":EC(n,r,i),onDragOver:e=>e.dataTransfer.types.includes(`Files`)&&e.preventDefault(),onDrop:e=>{!e.dataTransfer.files.length||!l||(e.preventDefault(),AY(t,l,Array.from(e.dataTransfer.files)))},onPasteCapture:e=>{if(!l)return;let n=UR(e.clipboardData.files);(n.length!==0||e.clipboardData.getData(`text/plain`)===``)&&(e.preventDefault(),e.stopPropagation(),n.length>0?AY(t,l,n):MY(t,l))},children:[(0,V.jsxs)(`div`,{className:At,children:[(0,V.jsx)(`div`,{className:jt,ref:o}),(0,V.jsx)(EY,{notice:s,engineExit:C?null:e.engineExit??null,model:e.model,taskId:n,tabId:r,revive:p,onReopen:b&&l?e=>void O(l,e):void 0,onRetryAttach:l?()=>void l.reattach():void 0,usageLimit:E!==null,onDismissLimit:E?()=>T(E.since):void 0}),_&&e.composer&&l&&(0,V.jsx)(H,{variant:`floating`,className:`absolute top-2.5 right-2.5 z-4`,title:z(`quote.title`),onClick:()=>kY(l,n,r,a),children:z(`quote.action`)}),d>0&&l&&(0,V.jsxs)(`div`,{className:`mono absolute right-2.5 bottom-2.5 z-4 flex gap-3 rounded-sm border-hairline border-line bg-inset px-2.5 py-1 text-meta`,children:[(0,V.jsx)(`span`,{className:`text-warning`,children:So(`scrolledBack`,{lines:d})}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>l.scrollToTop(),children:So(`scrollFirst`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>l.scrollToBottom(),children:So(`scrollLatest`)})]})]}),e.composer&&(0,V.jsx)(SY,{model:e.model,taskId:n,tabId:r}),l&&(0,V.jsx)(wY,{handle:l,atMenu:a})]})}var FY=e=>XH(e)!==null,IY=e=>Dw(XH(e)?.tab.split);function LY(e){let t=XH(e),n=t?.tab.split;return t&&n?{...t,split:n,leaf:qH(t.taskId,t.tab,n)}:null}Xi(()=>[{id:`workspace.split.right`,chords:[`ctrl+\\`],prefix:!1,surface:`workspace`,live:FY,run:e=>{let t=XH(e);t&&QH(e,t.taskId,t.tab,`right`)}},{id:`workspace.split.down`,chords:[`ctrl+=`],prefix:!1,surface:`workspace`,live:FY,run:e=>{let t=XH(e);t&&QH(e,t.taskId,t.tab,`down`)}},{id:`workspace.split.focus-next`,chords:[`f3`],prefix:!1,surface:`workspace`,live:IY,run:e=>{let t=LY(e);t&&YH(t.taskId,t.tab,t.split,kw(t.split,t.leaf))}},{id:`workspace.split.close`,chords:[`w`],prefix:!0,surface:`workspace`,live:IY,run:e=>{let t=LY(e);t&&$H(e,t.taskId,t.tab,t.leaf)}},{id:`workspace.split.rename`,chords:[`f2`],prefix:!1,surface:`workspace`,live:IY,run:e=>{let t=LY(e);t&&eU(e,t.taskId,t.tab,t.leaf)}}]);var RY=[{id:`leaf-1`,x:0,y:0,w:1,h:1,left:!1,top:!1}];function zY({model:e,taskId:t,tab:n}){let r=n.split;v(KH);let i=r?qH(t,n,r):`leaf-1`,a=r?Aw(r,ww(n)):new Map,o=Dw(r),{prefs:s}=L_(),c=v(e.tasks)?.tasks.find(e=>e.id===t)?.tabStatus?.[n.id]??n.status,l=n.kind===`engine`&&c?.reason===`dead`?c.since:null;(0,g.useEffect)(()=>{l!==null&&e.refreshTabsNow()},[l,e]);let u=l!==null&&n.alive!==!1?{code:n.exit?.code??null,since:l}:null,d=n.kind===`engine`&&c?.reason===`rate_limited`?{since:c.since}:null;return(0,V.jsx)(`div`,{className:Ze,children:(r?Ow(r.root):RY).map(c=>(0,V.jsxs)(`div`,{className:et(o?s.splitStyle:null,{left:c.left,top:c.top,active:c.id===i}),style:{left:`calc(${c.x*100}% + var(--ml, 0px))`,top:`calc(${c.y*100}% + var(--mt, 0px))`,width:`calc(${c.w*100}% - var(--ml, 0px))`,height:`calc(${c.h*100}% - var(--mt, 0px))`},children:[(0,V.jsx)(PY,{client:e.client,model:e,engineExit:c.id===`leaf-1`?u:null,usageLimit:c.id===`leaf-1`?d:null,composer:n.kind===`engine`&&c.id===`leaf-1`,taskId:t,tabId:n.id,leafId:c.id,focused:c.id===i,onActivate:()=>r&&JH(t,n.id,r,c.id),onExit:()=>{o?ZH(e,{taskId:t,tabId:n.id,action:`close`,leafId:c.id}):n.kind!==`engine`&&e.client.request(`tab.close`,{taskId:t,tabId:n.id}).then(()=>e.refreshTabsNow()).catch(()=>{})}}),o&&(0,V.jsx)(`span`,{className:tt(s.splitStyle===`rule`,c.id===i),onContextMenu:r=>cW(r,rU(e,t,n,c.id)),children:a.get(c.id)})]},c.id))})}var BY=/^[0-9a-f]{7,40}$/i;function VY(e,t){return t.sharesWorkspaceOf||!t.baseRef?null:e.find(e=>e.id!==t.id&&e.branch!==``&&e.branch===t.baseRef)||(BY.test(t.baseRef)&&t.parentTaskId?e.find(e=>e.id===t.parentTaskId)??null:null)}function HY(e,t){let n=[];for(let r=VY(e,t);r&&n.length<20&&!n.includes(r);r=VY(e,r))n.unshift(r);let r=e.filter(n=>!n.deleting&&VY(e,n)?.id===t.id).sort((e,t)=>(e.createdAt??``).localeCompare(t.createdAt??``));if(n.length===0&&r.length===0)return null;let i=n[0]??t,a=i.baseRef&&!BY.test(i.baseRef)?i.baseRef:null;return{nodes:[...n,t,...r],at:n.length,base:a}}var UY=e=>e.pr?.lifecycle===`merged`;function WY(e){return e.nodes.find(e=>!UY(e))??null}function GY({model:e,taskId:t}){B();let n=v(e.tasks)?.tasks??[],r=n.find(e=>e.id===t),i=r?HY(n,r):null;if(!i)return null;let a=WY(i);return(0,V.jsxs)(`nav`,{className:UL,"aria-label":z(`compare.stackLabel`),children:[i.base&&(0,V.jsxs)(`span`,{className:`text-subtle`,children:[i.base,` ←`]}),i.nodes.map((n,r)=>(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-x-3.5`,children:[r>0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`←`}),(0,V.jsxs)(H,{variant:`pill`,hit:`tight`,"aria-current":n.id===t,onClick:()=>e.select(n.id),children:[`[ `,(0,V.jsx)(uR,{status:n.rowStatus}),n.label||n.title,UY(n)?(0,V.jsx)(`span`,{className:`text-accent`,children:`✓`}):n.pr?.number?(0,V.jsx)(`span`,{children:`PR`}):null,` ]`]})]},n.id)),a&&!a.machine&&(0,V.jsx)(H,{hit:`tight`,className:`ml-auto flex-none whitespace-nowrap`,onClick:()=>void nF(e,a),children:z(`compare.landBottom`)})]})}function KY(e,t){return e===`never`?!1:e!==`multipleOnly`||t>=2}function qY({taskId:e}){B();let t=Yk(e),n=v(Ka),r=v(pn),i=n&&!r?xk(t):null;return(0,V.jsx)(`div`,{className:AI,children:Va.map(t=>(0,V.jsx)(`button`,{type:`button`,className:yI({on:i===t}),title:z(`panel.${t}`),"aria-label":z(`panel.${t}`),"aria-pressed":i===t,onClick:()=>Qk(e,t),children:(0,V.jsx)(wG,{children:TG[t]})},t))})}function JY({model:e,task:t,tabs:n,narrow:r}){let i=v(e.selection),{prefs:a}=L_(),o=!KY(a.tabStrip,n.length);return(0,V.jsxs)(`div`,{className:`flex min-w-0 items-center gap-0.5 font-mono text-meta/body transition-padding-left duration-220 ease-snap motion-reduce:transition-none rail-folded:min-h-6.5 rail-folded:pl-23`,role:`tablist`,children:[n.map((n,r)=>(0,V.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":n.id===i.tabId,className:`group/tab flex items-center gap-1.5 whitespace-nowrap rounded-sm px-2.5 py-1 active:scale-97 motion-reduce:active:scale-none touch:select-none touch:touch-callout-none ${o?`hidden`:``} ${n.id===i.tabId?`bg-inset text-ink`:`text-muted hover:bg-hover data-menu-open:bg-hover`}`,onClick:()=>e.select(t.id,n.id),onContextMenu:r=>cW(r,bU(e,t,n)),children:[(0,V.jsx)(`span`,{className:`text-subtle group-aria-selected/tab:text-accent`,children:r+1}),ww(n)]},n.id)),!r&&(0,V.jsx)(qY,{taskId:t.id})]})}function YY(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??e))}function XY({model:e}){let t=B()===`zh`?Rr:Lr,n=e.client,[r,i]=(0,g.useState)(()=>(Bs(n,`worktrees.list`,{network:!0})??Bs(n,`worktrees.list`,{network:!1}))?.projects??null),[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(0),d=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0,t=!1,r=r=>Hs(n,`worktrees.list`,{network:r}).then(n=>{if(!(!e||!r&&t)&&(r&&(t=!0),i(n.projects),r)){let e=new Set(n.projects.flatMap(e=>e.worktrees.map(e=>e.path)));o(t=>t.filter(t=>e.has(t)))}}).catch(()=>{});return r(!1),r(!0),()=>{e=!1}},[n,l]),(0,g.useEffect)(()=>d.current?.focus(),[]);let f=(r??[]).map(e=>({...e,worktrees:e.worktrees.filter(e=>!a.includes(e.path))})),p=f.flatMap(e=>e.worktrees),m=Math.min(s,Math.max(0,p.length-1));(0,g.useEffect)(()=>{d.current?.querySelector(`[data-row="${m}"]`)?.scrollIntoView({block:`nearest`})},[m]);let h=(0,g.useCallback)(()=>u(e=>e+1),[]),_=async(e,r)=>{o(t=>[...t,e.path]);try{let i=await n.request(`worktrees.remove`,{path:e.path,force:r});i.residue&&G(YY(t.delete.residue,i.residue)),h()}catch(n){o(t=>t.filter(t=>t!==e.path));let i=n&&typeof n==`object`&&`code`in n?n.code:null;if(!r&&i===`DIRTY_WORKTREE`){W.set((0,V.jsx)(ur,{title:t.delete.forceTitle,body:`${YY(t.delete.forceBody,{branch:e.branch||e.path})}\n\n${YY(t.delete.forceReason,{reason:K(n)})}`,confirmLabel:t.delete.button,onConfirm:()=>_(e,!0)}));return}G(YY(t.delete.failed,{error:K(n)}),`error`)}},v=e=>W.set((0,V.jsx)(ur,{title:t.delete.confirmTitle,body:YY(t.delete.confirmBody,{branch:e.branch||e.path}),confirmLabel:t.delete.button,onConfirm:async()=>{_(e,!1)}})),y=n=>{if(!n.taskId){G(t.land.noTask,`error`);return}nF(e,{id:n.taskId,title:n.branch,branch:n.branch},h)},b=e=>{if(e.ctrlKey&&!e.metaKey&&!e.altKey&&e.key.toLowerCase()===`c`&&!window.getSelection()?.toString())return e.preventDefault(),ln.set(null);if(e.metaKey||e.ctrlKey||e.altKey)return;let t=p[m];if(e.key===`j`||e.key===`ArrowDown`)c(Math.min(p.length-1,m+1));else if(e.key===`k`||e.key===`ArrowUp`)c(Math.max(0,m-1));else if(e.key===`d`&&t)v(t);else if(e.key===`l`&&t)y(t);else if(e.key===`q`||e.key===`Escape`)ln.set(null);else return;e.preventDefault()},x=0;return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:d,onKeyDown:b,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),r===null?(0,V.jsx)(`p`,{className:`text-muted`,children:t.loading}):f.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.noProjects}):f.map(e=>{let n=x;return x+=e.worktrees.length,(0,V.jsxs)(`section`,{className:oM,children:[(0,V.jsxs)(`h2`,{className:`mt-1.5 mr-2 mb-1 ml-0 flex items-center gap-1 font-mono text-meta font-semibold normal-nums text-subtle`,children:[(0,V.jsx)(`span`,{children:e.repo}),(0,V.jsx)(`span`,{className:`rule`})]}),e.worktrees.length===0&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:t.noWorktrees}),e.worktrees.map((e,r)=>{let i=n+r;return(0,V.jsxs)(`div`,{"data-row":i,className:sM(i===m),onClick:()=>c(i),children:[(0,V.jsxs)(`div`,{className:cM,children:[(0,V.jsx)(`span`,{className:uM,children:e.branch||t.row.detached}),e.roveManaged&&(0,V.jsx)(`span`,{className:`chip text-muted`,children:t.badge.roveManaged}),e.dirty===!0&&(0,V.jsx)(`span`,{className:`chip text-warning`,children:t.badge.dirty}),e.dirty===null&&(0,V.jsx)(`span`,{className:`chip text-muted`,children:t.badge.dirtyUnknown}),(0,V.jsx)(`span`,{className:`chip ${e.branchOnRemote===!0?`text-success`:e.branchOnRemote===!1?`text-warning`:`text-muted`}`,children:e.branchOnRemote===!0?t.badge.remoteOn:e.branchOnRemote===!1?t.badge.remoteOff:t.badge.remoteUnknown}),e.verdictReason!==`dirty`&&e.verdictReason!==`fresh`&&(0,V.jsx)(`span`,{className:`chip ${e.verdict===`merged`?`text-success`:e.verdict===`stale`?`text-warning`:`text-accent`}`,children:t.verdict[e.verdictReason]??e.verdictReason})]}),(0,V.jsxs)(`div`,{className:`${lM} mono text-muted`,children:[(0,V.jsx)(`span`,{className:dM,children:e.path}),e.createdAtMs>0&&(0,V.jsx)(`span`,{children:YY(t.row.created,{age:Fo(Date.now()-e.createdAtMs)})})]}),i===m&&(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 text-[length:var(--fs-body)]`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>v(e),children:t.delete.button}),e.taskId&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>y(e),children:t.land.button})]})]},e.path)})]},e.repo)}),(0,V.jsx)(`p`,{className:`${fM} mono keys-only text-muted`,children:(0,V.jsx)(kT,{text:`j/k · d ${t.delete.button} · l ${t.land.button} · q/esc`})})]})}function ZY({model:e,narrow:t}){let n=v(e.selection),r=v(e.tabs),i=v(e.tasks),a=v(e.remote),o=a.find(e=>e.id===n.taskId&&!e.machine?.stale),s=Li(i,n.taskId)??o??null,c=o?void 0:a.find(e=>e.id===n.taskId),l=s?r[s.id]??[]:[],u=s?s.id in r:!1,d=v(ln),f=uN(s?.id),p=s?.rowStatus?.kind===`running`,m=v(mn),h=v(Ha)!==`terminal`&&t&&!!s;return(0,g.useEffect)(()=>{let t=e.selection.get();return e.selection.subscribe(()=>{mn.set(null);let n=e.selection.get();(n.taskId!==t.taskId||n.tabId!==t.tabId)&&Ha.set(`terminal`),t=n})},[e]),(0,g.useEffect)(()=>YF(e),[e]),d===`update`?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(WI,{}),(0,V.jsx)(HM,{client:e.client})]}):d===`worktrees`?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(WI,{}),(0,V.jsx)(XY,{model:e})]}):d?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(WI,{}),(0,V.jsx)(TH,{model:e,page:d})]}):m?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(WI,{}),(0,V.jsx)(`div`,{className:Dt,children:(0,V.jsx)(cO,{model:e,seed:m},`${m.machine??``}\0${m.repo??``}\0${m.ungrouped?`u`:``}\0${m.retryOf?.id??``}`)})]}):(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(WI,{taskId:s?.id}),s&&(0,V.jsx)(JY,{model:e,task:s,tabs:l,narrow:t}),s&&!s.groupId&&(0,V.jsx)(GY,{model:e,taskId:s.id}),s?.groupId&&(0,V.jsx)(ZJ,{model:e,taskId:s.id,groupId:s.groupId}),(0,V.jsxs)(`div`,{className:`${Dt} ${p?Ot:``}`,style:f?{"--task-ink":f}:void 0,children:[!t&&!s&&!c&&i&&i.tasks.length+a.length===0&&(0,V.jsx)(sW,{model:e}),!s&&!c&&i&&i.tasks.length+a.length>0&&(0,V.jsx)(`p`,{className:wt,children:z(`workspace.pickTask`)}),c?.machine&&(0,V.jsx)(`div`,{className:Tt,children:(0,V.jsx)(TE,{host:c.machine.label,onMachines:()=>AO(e)})}),s&&u&&l.length===0&&!h&&(0,V.jsxs)(`div`,{className:Tt,children:[(0,V.jsx)(`p`,{children:z(`workspace.noTabs`)}),(0,V.jsx)(H,{variant:`filled`,onClick:()=>void BC(e,s.id,{kind:`engine`}).catch(e=>G(String(e),`error`)),children:s.engine?z(`workspace.startEngine`,{engine:s.engine.name}):z(`workspace.startSession`)}),` `,(0,V.jsx)(H,{variant:`filled`,onClick:()=>void zC(e,s.id),children:z(`menu.newChat`)}),` `,(0,V.jsx)(H,{variant:`filled`,onClick:()=>W.set((0,V.jsx)(GC,{model:e,taskId:s.id})),children:z(`menu.newChatPick`)})]}),s&&h&&(0,V.jsx)(JJ,{model:e,task:s,narrow:!0}),s&&n.tabId&&l.some(e=>e.id===n.tabId)&&(0,V.jsx)(`div`,{className:`min-w-0 flex-1 ${h?`hidden`:`flex`}`,children:(0,V.jsx)(zY,{model:e,taskId:s.id,tab:l.find(e=>e.id===n.tabId)??l[0]},`${s.id}::${n.tabId}`)})]})]})}function QY({model:e}){B();let t=v(e.client.conn);return t.hello===null&&t.failures>=2?(0,V.jsx)($Y,{}):(0,V.jsx)(eX,{model:e})}function $Y(){let[e,t]=(0,g.useState)(null);return(0,g.useEffect)(()=>{Aa().then(t)},[]),e===null?null:e?(0,V.jsx)(Pa,{}):(0,V.jsx)(rn,{failing:!0})}function eX({model:e}){EF(e);let t=v(e.client.conn).hello;(0,g.useEffect)(()=>{t&&(BM(e.client),KM(e.client,t.roveVersion))},[t,e.client]),Kw(e),Uw(e),fa(),$r(e.client),FF(e),fi(e.client),PN(e.client),(0,g.useEffect)(()=>{e.onSelect=ga;let t=mn.subscribe(()=>{mn.get()!==null&&ga()});return _n(),t},[e]),(0,g.useEffect)(()=>dP(e),[e]);let n=v(pn),r=v(e.selection),i=v(e.tasks),a=v(e.remote),o=wa(),s=v(pI),c=v(mI),l=v(fI),u=v(ha),d=v(Ga),f=v(Ka),p=v(qa),m=v(ln),h=v(Cn)===`drag`,_=v(mn)!==null,y=a.find(e=>e.id===r.taskId&&!e.machine?.stale),b=Li(i,r.taskId)??y??null,x=y?void 0:a.find(e=>e.id===r.taskId),S=o?Ta(u,!!b||!!x,m!==null||_):null;(0,g.useEffect)(()=>e.setTaskShown(S===null||S===`content`&&m===null&&!_),[e,S,m,_]);let C=_I(l??280),w={"--rail-w":`${s?0:C}px`,"--rail-open-w":`${C}px`,"--panel-w":d===null?void 0:`${Ja(d,s?0:C)}px`};return(0,V.jsxs)(`div`,{className:Be,children:[(0,V.jsx)(mi,{onRefresh:()=>pi(e.client)}),(0,V.jsxs)(`div`,{className:Ve({zen:n||!f||!b&&!x||o,expanded:p&&!n&&!o,surface:S,folded:s&&!o,peek:s&&c&&!o,dragging:h}),style:o?void 0:w,children:[!o&&(0,V.jsx)(HI,{model:e}),s&&!o&&(0,V.jsx)(`div`,{className:`absolute inset-y-0 left-0 z-5 col-1 row-1 w-2.5`,onMouseEnter:()=>gI(!0),onMouseLeave:()=>gI(!1)}),(0,V.jsx)(lW,{model:e,narrow:o}),(0,V.jsx)(ZY,{model:e,narrow:o}),!o&&(0,V.jsx)(JJ,{model:e,task:b,remoteHost:x?.machine?.label}),(0,V.jsx)(XJ,{model:e}),(0,V.jsx)(Ba,{}),(0,V.jsx)(jF,{model:e}),(0,V.jsx)(Vi,{model:e})]})]})}var tX=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function nX(e){return[...e.querySelectorAll(tX)].filter(e=>e.tabIndex>=0&&e.offsetParent!==null)}function rX(){window.addEventListener(`keydown`,e=>{if(e.key!==`Tab`||e.defaultPrevented||e.ctrlKey||e.metaKey||e.altKey)return;let t=[...document.querySelectorAll(`.overlay:not(.is-leaving)`)].at(-1);if(!t)return;let n=nX(t);if(n.length===0)return;let r=document.activeElement,i=r instanceof HTMLElement&&t.contains(r),a=e.shiftKey?n.filter(e=>i&&!!(r.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)).at(-1)??n.at(-1):n.find(e=>i&&!!(r.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))??n[0];e.preventDefault(),a?.focus()})}function iX(e){if(!bn())for(let t of document.querySelectorAll(`${e}:not(.is-leaving)`)){let e=t.cloneNode(!0);e.classList.add(`is-leaving`),e.inert=!0,e.setAttribute(`aria-hidden`,`true`),document.body.append(e);let n=t.querySelectorAll(`*`),r=e.querySelectorAll(`*`);n.forEach((e,t)=>{let n=r[t];e.scrollTop&&(n.scrollTop=e.scrollTop),(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&(n.value=e.value)}),window.setTimeout(()=>e.remove(),200)}}function aX(e){for(let t of document.querySelectorAll(`${e}.is-leaving`))t.remove()}function oX(){for(let e of document.querySelectorAll(`.overlay:not(.is-leaving)`))for(let t of e.getAnimations())t instanceof CSSAnimation&&t.animationName===`fade-in`&&t.finish()}function sX(){let e=W.get(),t=-1/0;W.subscribe(()=>{let n=W.get();if(n===null&&e!==null)t=performance.now(),iX(`.overlay`);else if(n!==null){let n=e!==null||performance.now()-t<140;aX(`.overlay`),n&&requestAnimationFrame(oX)}e=n});let n=on.get();on.subscribe(()=>{let e=on.get();e===null&&n!==null?iX(`.menu`):e!==null&&aX(`.menu`),n=e});let r=tT.get().guide;tT.subscribe(()=>{let e=tT.get().guide;e===null&&r!==null?iX(`.prefix-guide`):e!==null&&aX(`.prefix-guide`),r=e})}var cX=500,lX=10,uX=`input, textarea, select, [contenteditable], .xterm`,dX=[`mousedown`,`mouseup`,`click`,`contextmenu`];function fX(){let e=null,t=()=>{e&&window.clearTimeout(e.timer),e=null},n=()=>{let e=e=>{e.preventDefault(),e.stopPropagation()},t=()=>{for(let t of dX)document.removeEventListener(t,e,!0);document.removeEventListener(`pointerdown`,t,!0),document.removeEventListener(`keydown`,t,!0)};for(let t of dX)document.addEventListener(t,e,!0);document.addEventListener(`pointerdown`,t,!0),document.addEventListener(`keydown`,t,!0)};document.addEventListener(`pointerdown`,r=>{if(t(),r.pointerType!==`touch`||!(r.target instanceof Element)||r.target.closest(uX))return;let i=r.target,a={x:r.clientX,y:r.clientY,native:!1,timer:window.setTimeout(()=>{e=null,!(a.native||!i.isConnected)&&(i.dispatchEvent(new MouseEvent(`contextmenu`,{bubbles:!0,cancelable:!0,clientX:a.x,clientY:a.y,button:2})),n())},cX)};e=a},!0),document.addEventListener(`pointermove`,n=>{e&&Math.hypot(n.clientX-e.x,n.clientY-e.y)>lX&&t()},!0),document.addEventListener(`pointerup`,t,!0),document.addEventListener(`pointercancel`,t,!0),document.addEventListener(`contextmenu`,t=>{e&&t.isTrusted&&(e.native=!0)},!0)}function pX(e,t){e.viewingExtras=()=>Bk({narrow:Sa(),panelOpen:Ka.get(),zen:pn.get()});let n=()=>e.reportViewing();Ka.subscribe(n),pn.subscribe(n),Ca(n),t.on(`panel`,t=>{zk(t)&&nA(t,e.selection.get().taskId)})}function mX(e){let t=e;return!!t&&typeof t.promptId==`string`&&typeof t.title==`string`}function hX({client:e,prompt:t}){let n=(B()===`zh`?mr:pr).prompt,[r,i]=(0,g.useState)(t.initial??``),a=(0,g.useRef)(!1),{busy:o,error:s,submit:c}=cr();return(0,g.useEffect)(()=>()=>{a.current||e.request(`ui.promptReply`,{promptId:t.promptId}).catch(()=>{})},[e,t.promptId]),(0,V.jsx)(sr,{title:t.title,children:(0,V.jsxs)(`form`,{className:Ln,onSubmit:n=>{n.preventDefault(),c(async()=>{await e.request(`ui.promptReply`,{promptId:t.promptId,value:r}),a.current=!0})},children:[(0,V.jsx)(`input`,{className:tn,"aria-label":n.fieldLabel,autoFocus:!0,spellCheck:!1,value:r,placeholder:t.placeholder,onChange:e=>i(e.target.value)}),s&&(0,V.jsx)(`p`,{className:`text-error`,children:s}),(0,V.jsx)(fr,{busy:o,submitLabel:n.submitLabel})]})})}function gX(e,t){W.get()||W.set((0,V.jsx)(hX,{client:e,prompt:t},t.promptId))}var _X=`rove-web.reloadedFor`;function vX(e,t,n){return e===null?`adopt`:t===e||t===n?`stay`:`reload`}function yX(){let e=null;try{e=window.sessionStorage}catch{}return{storage:e,reload:()=>window.location.reload()}}function bX(e,t=yX()){let n=null,r=null,i=()=>{try{return t.storage?.getItem(_X)??r}catch{return r}};return e.conn.subscribe(()=>{let{state:a,hello:o}=e.conn.get();if(a!==`open`||!o)return;let s=vX(n,o.roveVersion,i());if(s===`adopt`&&(n=o.roveVersion),s===`reload`){r=o.roveVersion;try{t.storage?.setItem(_X,o.roveVersion)}catch{}t.reload()}})}function xX(){let e=window.visualViewport;if(!e)return;let t=document.documentElement,n=()=>{t.style.setProperty(`--vvh`,`${e.height*e.scale}px`),e.scale===1&&window.scrollY!==0&&window.scrollTo(0,0)};e.addEventListener(`resize`,n),e.addEventListener(`scroll`,n),window.addEventListener(`scroll`,n,{passive:!0}),n()}var SX=(0,h.createRoot)(document.getElementById(`root`));xX(),fX(),H_(),sX(),rX();var CX=a();if(!CX)Aa().then(e=>SX.render((0,V.jsx)(g.StrictMode,{children:e?(0,V.jsx)(Pa,{}):(0,V.jsx)(rn,{})})));else{let e=new m_(h_(),CX),t=new zi(e);e.on(`prompt`,t=>{mX(t)&&gX(e,t)}),pX(t,e),bX(e),e.start(),SX.render((0,V.jsx)(g.StrictMode,{children:(0,V.jsx)(QY,{model:t})}))}
152
+ `)}\n${r}\n`}function kY(e){let t=document.querySelector(`[data-composer="${CSS.escape(e)}"]`);return t&&t.offsetParent!==null?t:null}function AY(e,t,n,r){let i=OY(e.term.getSelection());if(i===null)return!1;let a=oY(t,n),o=kY(a);if(o){uY(a,i),e.term.clearSelection();let t=o.querySelector(`textarea`);return t?.focus(),t?.setSelectionRange(t.value.length,t.value.length),!0}return r?(G(z(`quote.atMenu`),`error`),!1):e.term.modes.bracketedPasteMode?(e.term.paste(i),e.term.clearSelection(),e.term.focus(),!0):(G(z(`quote.notReady`),`error`),!1)}async function jY(e,t,n){let r=WR(n);r.length<n.length&&G(z(`layout.dropUnsupported`),`error`);for(let n of r)try{t.term.paste(`${await KR(e,n)} `)}catch(e){G(e instanceof Error?e.message:String(e),`error`)}t.term.focus()}async function MY(){if(!navigator.clipboard?.read)throw Error(z(`layout.pasteNeedsHttps`));let e=[];for(let t of await navigator.clipboard.read())for(let n of t.types)(n.startsWith(`image/`)||n===`application/pdf`)&&e.push(new File([await t.getType(n)],`clipboard`,{type:n}));return WR(e)}async function NY(e,t){let n;try{n=await MY()}catch(e){G(z(`layout.pasteNoAccess`,{error:e instanceof Error?e.message:String(e)}),`error`);return}n.length===0?G(z(`layout.pasteNoImage`),`error`):await jY(e,t,n)}async function PY(e){try{return await navigator.clipboard.writeText(e),!0}catch{return G(z(`menu.copyFailed`),`error`),!1}}function FY(e){let{client:t,taskId:n,tabId:r,leafId:i}=e,a=v(e.model.tasks)?.tasks.find(e=>e.id===n)?.tabStatus?.[r]?.kind===`needs-input`;B();let o=(0,g.useRef)(null),[s,c]=(0,g.useState)({kind:`none`}),[l,u]=(0,g.useState)(null),[d,f]=(0,g.useState)(0),[p,m]=(0,g.useState)({busy:!1,error:null}),h=(0,g.useRef)(e);h.current=e,(0,g.useEffect)(()=>{let e=o.current;if(!e)return;let a=null,s=!1,l=[document.fonts.load(`13px "JetBrains Mono"`),document.fonts.load(`bold 13px "JetBrains Mono"`)];document.fonts.load(`13px "${W_}"`,String.fromCodePoint(57504)).catch(()=>{});let d=()=>{s||(a=gT({client:t,host:e,taskId:n,tabId:r,leafId:i,focusOnMount:h.current.focused!==!1},{setNotice:c,onScrolled:f,onFocusChange:e=>{if(!a)return;let{stream:t}=a.handle;e?(h.current.onActivate?.(),aa.set(sa(t)??null)):aa.get()?.stream===t&&aa.set(null)},onExit:()=>{rY(EC(n,r,i))||h.current.onExit?.()},copyText:PY,pasteImage:async()=>{a&&await NY(t,a.handle)}}),u(a.handle))};return hT(t,n,r,i)?d():Promise.allSettled(l).then(d),()=>{s=!0,u(null),a?.release()}},[t,n,r,i]);let[_,y]=(0,g.useState)(!1);(0,g.useEffect)(()=>{if(!l)return;y(l.term.hasSelection());let e=l.term.onSelectionChange(()=>y(l.term.hasSelection()));return()=>{e.dispose(),y(!1)}},[l]),(0,g.useEffect)(()=>{if(!l)return;let{term:e,stream:a}=l,o={stream:a,focus:()=>e.focus(),input:t=>e.input(t,!0),reattach:()=>l.reattach(),scrollPages:e=>l.scrollLines(e*10),hasSelection:()=>e.hasSelection(),copySelection:()=>{let t=e.getSelection();return t.trim().length!==0&&(PY(t),e.clearSelection(),!0)},reset:()=>{let o={cols:e.cols,rows:e.rows};W.set((0,V.jsx)(ur,{title:So(`reset.title`),body:So(`reset.body`),confirmLabel:z(`workspace.reset`),onConfirm:async()=>{tY(a);try{await t.request(`tab.split`,{taskId:n,tabId:r,action:`reset`,leafId:i??`leaf-1`,...o}),await l.reattach(),e.focus()}finally{nY(a)}}}))},size:()=>({cols:e.cols,rows:e.rows})},s=oa(o);return document.activeElement===e.textarea&&aa.set(o),()=>{s()}},[l,t,n,r,i]),(0,g.useEffect)(()=>{e.focused&&l&&document.activeElement!==l.term.textarea&&l.term.focus()},[e.focused,l]);let b=!i||i===`leaf-1`,[x,S]=(0,g.useState)(null),C=e.engineExit?.since===x,[w,T]=(0,g.useState)(null),E=e.usageLimit&&e.usageLimit.since!==w?e.usageLimit:null,D=(0,g.useRef)(!1),O=async(i,a)=>{if(!D.current){D.current=!0,m({busy:!0,error:null});try{await t.request(`term.revive`,{taskId:n,tabId:r,...a?{restartExited:a}:{}}),await i.reattach(),i.term.focus(),S(e.engineExit?.since??null),m({busy:!1,error:null})}catch(e){m({busy:!1,error:e instanceof Error?e.message:String(e)})}finally{D.current=!1}}};return(0,V.jsxs)(`div`,{className:kt,"data-stream":EC(n,r,i),onDragOver:e=>e.dataTransfer.types.includes(`Files`)&&e.preventDefault(),onDrop:e=>{!e.dataTransfer.files.length||!l||(e.preventDefault(),jY(t,l,Array.from(e.dataTransfer.files)))},onPasteCapture:e=>{if(!l)return;let n=WR(e.clipboardData.files);(n.length!==0||e.clipboardData.getData(`text/plain`)===``)&&(e.preventDefault(),e.stopPropagation(),n.length>0?jY(t,l,n):NY(t,l))},children:[(0,V.jsxs)(`div`,{className:At,children:[(0,V.jsx)(`div`,{className:jt,ref:o}),(0,V.jsx)(DY,{notice:s,engineExit:C?null:e.engineExit??null,model:e.model,taskId:n,tabId:r,revive:p,onReopen:b&&l?e=>void O(l,e):void 0,onRetryAttach:l?()=>void l.reattach():void 0,usageLimit:E!==null,onDismissLimit:E?()=>T(E.since):void 0}),_&&e.composer&&l&&(0,V.jsx)(H,{variant:`floating`,className:`absolute top-2.5 right-2.5 z-4`,title:z(`quote.title`),onClick:()=>AY(l,n,r,a),children:z(`quote.action`)}),d>0&&l&&(0,V.jsxs)(`div`,{className:`mono absolute right-2.5 bottom-2.5 z-4 flex gap-3 rounded-sm border-hairline border-line bg-inset px-2.5 py-1 text-meta`,children:[(0,V.jsx)(`span`,{className:`text-warning`,children:So(`scrolledBack`,{lines:d})}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>l.scrollToTop(),children:So(`scrollFirst`)}),(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>l.scrollToBottom(),children:So(`scrollLatest`)})]})]}),e.composer&&(0,V.jsx)(CY,{model:e.model,taskId:n,tabId:r}),l&&(0,V.jsx)(TY,{handle:l,atMenu:a})]})}var IY=e=>ZH(e)!==null,LY=e=>Dw(ZH(e)?.tab.split);function RY(e){let t=ZH(e),n=t?.tab.split;return t&&n?{...t,split:n,leaf:JH(t.taskId,t.tab,n)}:null}Xi(()=>[{id:`workspace.split.right`,chords:[`ctrl+\\`],prefix:!1,surface:`workspace`,live:IY,run:e=>{let t=ZH(e);t&&$H(e,t.taskId,t.tab,`right`)}},{id:`workspace.split.down`,chords:[`ctrl+=`],prefix:!1,surface:`workspace`,live:IY,run:e=>{let t=ZH(e);t&&$H(e,t.taskId,t.tab,`down`)}},{id:`workspace.split.focus-next`,chords:[`f3`],prefix:!1,surface:`workspace`,live:LY,run:e=>{let t=RY(e);t&&XH(t.taskId,t.tab,t.split,kw(t.split,t.leaf))}},{id:`workspace.split.close`,chords:[`w`],prefix:!0,surface:`workspace`,live:LY,run:e=>{let t=RY(e);t&&eU(e,t.taskId,t.tab,t.leaf)}},{id:`workspace.split.rename`,chords:[`f2`],prefix:!1,surface:`workspace`,live:LY,run:e=>{let t=RY(e);t&&tU(e,t.taskId,t.tab,t.leaf)}}]);var zY=[{id:`leaf-1`,x:0,y:0,w:1,h:1,left:!1,top:!1}];function BY({model:e,taskId:t,tab:n}){let r=n.split;v(qH);let i=r?JH(t,n,r):`leaf-1`,a=r?Aw(r,ww(n)):new Map,o=Dw(r),{prefs:s}=L_(),c=v(e.tasks)?.tasks.find(e=>e.id===t)?.tabStatus?.[n.id]??n.status,l=n.kind===`engine`&&c?.reason===`dead`?c.since:null;(0,g.useEffect)(()=>{l!==null&&e.refreshTabsNow()},[l,e]);let u=l!==null&&n.alive!==!1?{code:n.exit?.code??null,since:l}:null,d=n.kind===`engine`&&c?.reason===`rate_limited`?{since:c.since}:null;return(0,V.jsx)(`div`,{className:Ze,children:(r?Ow(r.root):zY).map(c=>(0,V.jsxs)(`div`,{className:et(o?s.splitStyle:null,{left:c.left,top:c.top,active:c.id===i}),style:{left:`calc(${c.x*100}% + var(--ml, 0px))`,top:`calc(${c.y*100}% + var(--mt, 0px))`,width:`calc(${c.w*100}% - var(--ml, 0px))`,height:`calc(${c.h*100}% - var(--mt, 0px))`},children:[(0,V.jsx)(FY,{client:e.client,model:e,engineExit:c.id===`leaf-1`?u:null,usageLimit:c.id===`leaf-1`?d:null,composer:n.kind===`engine`&&c.id===`leaf-1`,taskId:t,tabId:n.id,leafId:c.id,focused:c.id===i,onActivate:()=>r&&YH(t,n.id,r,c.id),onExit:()=>{o?QH(e,{taskId:t,tabId:n.id,action:`close`,leafId:c.id}):n.kind!==`engine`&&e.client.request(`tab.close`,{taskId:t,tabId:n.id}).then(()=>e.refreshTabsNow()).catch(()=>{})}}),o&&(0,V.jsx)(`span`,{className:tt(s.splitStyle===`rule`,c.id===i),onContextMenu:r=>lW(r,iU(e,t,n,c.id)),children:a.get(c.id)})]},c.id))})}var VY=/^[0-9a-f]{7,40}$/i;function HY(e,t){return t.sharesWorkspaceOf||!t.baseRef?null:e.find(e=>e.id!==t.id&&e.branch!==``&&e.branch===t.baseRef)||(VY.test(t.baseRef)&&t.parentTaskId?e.find(e=>e.id===t.parentTaskId)??null:null)}function UY(e,t){let n=[];for(let r=HY(e,t);r&&n.length<20&&!n.includes(r);r=HY(e,r))n.unshift(r);let r=e.filter(n=>!n.deleting&&HY(e,n)?.id===t.id).sort((e,t)=>(e.createdAt??``).localeCompare(t.createdAt??``));if(n.length===0&&r.length===0)return null;let i=n[0]??t,a=i.baseRef&&!VY.test(i.baseRef)?i.baseRef:null;return{nodes:[...n,t,...r],at:n.length,base:a}}var WY=e=>e.pr?.lifecycle===`merged`;function GY(e){return e.nodes.find(e=>!WY(e))??null}function KY({model:e,taskId:t}){B();let n=v(e.tasks)?.tasks??[],r=n.find(e=>e.id===t),i=r?UY(n,r):null;if(!i)return null;let a=GY(i);return(0,V.jsxs)(`nav`,{className:WL,"aria-label":z(`compare.stackLabel`),children:[i.base&&(0,V.jsxs)(`span`,{className:`text-subtle`,children:[i.base,` ←`]}),i.nodes.map((n,r)=>(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-x-3.5`,children:[r>0&&(0,V.jsx)(`span`,{className:`text-subtle`,children:`←`}),(0,V.jsxs)(H,{variant:`pill`,hit:`tight`,"aria-current":n.id===t,onClick:()=>e.select(n.id),children:[`[ `,(0,V.jsx)(dR,{status:n.rowStatus}),n.label||n.title,WY(n)?(0,V.jsx)(`span`,{className:`text-accent`,children:`✓`}):n.pr?.number?(0,V.jsx)(`span`,{children:`PR`}):null,` ]`]})]},n.id)),a&&!a.machine&&(0,V.jsx)(H,{hit:`tight`,className:`ml-auto flex-none whitespace-nowrap`,onClick:()=>void rF(e,a),children:z(`compare.landBottom`)})]})}function qY(e,t){return e===`never`?!1:e!==`multipleOnly`||t>=2}function JY({taskId:e}){B();let t=Yk(e),n=v(Ka),r=v(pn),i=n&&!r?xk(t):null;return(0,V.jsx)(`div`,{className:jI,children:Va.map(t=>(0,V.jsx)(`button`,{type:`button`,className:bI({on:i===t}),title:z(`panel.${t}`),"aria-label":z(`panel.${t}`),"aria-pressed":i===t,onClick:()=>Qk(e,t),children:(0,V.jsx)(TG,{children:EG[t]})},t))})}function YY({model:e,task:t,tabs:n,narrow:r}){let i=v(e.selection),{prefs:a}=L_(),o=!qY(a.tabStrip,n.length);return(0,V.jsxs)(`div`,{className:`flex min-w-0 items-center gap-0.5 font-mono text-meta/body transition-padding-left duration-220 ease-snap motion-reduce:transition-none rail-folded:min-h-6.5 rail-folded:pl-23`,role:`tablist`,children:[n.map((n,r)=>(0,V.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":n.id===i.tabId,className:`group/tab flex items-center gap-1.5 whitespace-nowrap rounded-sm px-2.5 py-1 active:scale-97 motion-reduce:active:scale-none touch:select-none touch:touch-callout-none ${o?`hidden`:``} ${n.id===i.tabId?`bg-inset text-ink`:`text-muted hover:bg-hover data-menu-open:bg-hover`}`,onClick:()=>e.select(t.id,n.id),onContextMenu:r=>lW(r,xU(e,t,n)),children:[(0,V.jsx)(`span`,{className:`text-subtle group-aria-selected/tab:text-accent`,children:r+1}),ww(n)]},n.id)),!r&&(0,V.jsx)(JY,{taskId:t.id})]})}function XY(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??e))}function ZY({model:e}){let t=B()===`zh`?Rr:Lr,n=e.client,[r,i]=(0,g.useState)(()=>(Bs(n,`worktrees.list`,{network:!0})??Bs(n,`worktrees.list`,{network:!1}))?.projects??null),[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(0),[l,u]=(0,g.useState)(0),d=(0,g.useRef)(null);(0,g.useEffect)(()=>{let e=!0,t=!1,r=r=>Hs(n,`worktrees.list`,{network:r}).then(n=>{if(!(!e||!r&&t)&&(r&&(t=!0),i(n.projects),r)){let e=new Set(n.projects.flatMap(e=>e.worktrees.map(e=>e.path)));o(t=>t.filter(t=>e.has(t)))}}).catch(()=>{});return r(!1),r(!0),()=>{e=!1}},[n,l]),(0,g.useEffect)(()=>d.current?.focus(),[]);let f=(r??[]).map(e=>({...e,worktrees:e.worktrees.filter(e=>!a.includes(e.path))})),p=f.flatMap(e=>e.worktrees),m=Math.min(s,Math.max(0,p.length-1));(0,g.useEffect)(()=>{d.current?.querySelector(`[data-row="${m}"]`)?.scrollIntoView({block:`nearest`})},[m]);let h=(0,g.useCallback)(()=>u(e=>e+1),[]),_=async(e,r)=>{o(t=>[...t,e.path]);try{let i=await n.request(`worktrees.remove`,{path:e.path,force:r});i.residue&&G(XY(t.delete.residue,i.residue)),h()}catch(n){o(t=>t.filter(t=>t!==e.path));let i=n&&typeof n==`object`&&`code`in n?n.code:null;if(!r&&i===`DIRTY_WORKTREE`){W.set((0,V.jsx)(ur,{title:t.delete.forceTitle,body:`${XY(t.delete.forceBody,{branch:e.branch||e.path})}\n\n${XY(t.delete.forceReason,{reason:K(n)})}`,confirmLabel:t.delete.button,onConfirm:()=>_(e,!0)}));return}G(XY(t.delete.failed,{error:K(n)}),`error`)}},v=e=>W.set((0,V.jsx)(ur,{title:t.delete.confirmTitle,body:XY(t.delete.confirmBody,{branch:e.branch||e.path}),confirmLabel:t.delete.button,onConfirm:async()=>{_(e,!1)}})),y=n=>{if(!n.taskId){G(t.land.noTask,`error`);return}rF(e,{id:n.taskId,title:n.branch,branch:n.branch},h)},b=e=>{if(e.ctrlKey&&!e.metaKey&&!e.altKey&&e.key.toLowerCase()===`c`&&!window.getSelection()?.toString())return e.preventDefault(),ln.set(null);if(e.metaKey||e.ctrlKey||e.altKey)return;let t=p[m];if(e.key===`j`||e.key===`ArrowDown`)c(Math.min(p.length-1,m+1));else if(e.key===`k`||e.key===`ArrowUp`)c(Math.max(0,m-1));else if(e.key===`d`&&t)v(t);else if(e.key===`l`&&t)y(t);else if(e.key===`q`||e.key===`Escape`)ln.set(null);else return;e.preventDefault()},x=0;return(0,V.jsxs)(`div`,{className:yM,tabIndex:0,ref:d,onKeyDown:b,children:[(0,V.jsx)(`h1`,{className:bM,children:t.title}),r===null?(0,V.jsx)(`p`,{className:`text-muted`,children:t.loading}):f.length===0?(0,V.jsx)(`p`,{className:`text-muted`,children:t.noProjects}):f.map(e=>{let n=x;return x+=e.worktrees.length,(0,V.jsxs)(`section`,{className:oM,children:[(0,V.jsxs)(`h2`,{className:`mt-1.5 mr-2 mb-1 ml-0 flex items-center gap-1 font-mono text-meta font-semibold normal-nums text-subtle`,children:[(0,V.jsx)(`span`,{children:e.repo}),(0,V.jsx)(`span`,{className:`rule`})]}),e.worktrees.length===0&&(0,V.jsx)(`p`,{className:`mono text-muted`,children:t.noWorktrees}),e.worktrees.map((e,r)=>{let i=n+r;return(0,V.jsxs)(`div`,{"data-row":i,className:sM(i===m),onClick:()=>c(i),children:[(0,V.jsxs)(`div`,{className:cM,children:[(0,V.jsx)(`span`,{className:uM,children:e.branch||t.row.detached}),e.roveManaged&&(0,V.jsx)(`span`,{className:`chip text-muted`,children:t.badge.roveManaged}),e.dirty===!0&&(0,V.jsx)(`span`,{className:`chip text-warning`,children:t.badge.dirty}),e.dirty===null&&(0,V.jsx)(`span`,{className:`chip text-muted`,children:t.badge.dirtyUnknown}),(0,V.jsx)(`span`,{className:`chip ${e.branchOnRemote===!0?`text-success`:e.branchOnRemote===!1?`text-warning`:`text-muted`}`,children:e.branchOnRemote===!0?t.badge.remoteOn:e.branchOnRemote===!1?t.badge.remoteOff:t.badge.remoteUnknown}),e.verdictReason!==`dirty`&&e.verdictReason!==`fresh`&&(0,V.jsx)(`span`,{className:`chip ${e.verdict===`merged`?`text-success`:e.verdict===`stale`?`text-warning`:`text-accent`}`,children:t.verdict[e.verdictReason]??e.verdictReason})]}),(0,V.jsxs)(`div`,{className:`${lM} mono text-muted`,children:[(0,V.jsx)(`span`,{className:dM,children:e.path}),e.createdAtMs>0&&(0,V.jsx)(`span`,{children:XY(t.row.created,{age:Fo(Date.now()-e.createdAtMs)})})]}),i===m&&(0,V.jsxs)(`div`,{className:`flex items-baseline gap-2 text-[length:var(--fs-body)]`,children:[(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>v(e),children:t.delete.button}),e.taskId&&(0,V.jsx)(`button`,{type:`button`,className:`link text-accent [&:hover]:underline touch-hit`,onClick:()=>y(e),children:t.land.button})]})]},e.path)})]},e.repo)}),(0,V.jsx)(`p`,{className:`${fM} mono keys-only text-muted`,children:(0,V.jsx)(kT,{text:`j/k · d ${t.delete.button} · l ${t.land.button} · q/esc`})})]})}function QY({model:e,narrow:t}){let n=v(e.selection),r=v(e.tabs),i=v(e.tasks),a=v(e.remote),o=a.find(e=>e.id===n.taskId&&!e.machine?.stale),s=Li(i,n.taskId)??o??null,c=o?void 0:a.find(e=>e.id===n.taskId),l=s?r[s.id]??[]:[],u=s?s.id in r:!1,d=v(ln),f=dN(s?.id),p=s?.rowStatus?.kind===`running`,m=v(mn),h=v(Ha)!==`terminal`&&t&&!!s;return(0,g.useEffect)(()=>{let t=e.selection.get();return e.selection.subscribe(()=>{mn.set(null);let n=e.selection.get();(n.taskId!==t.taskId||n.tabId!==t.tabId)&&Ha.set(`terminal`),t=n})},[e]),(0,g.useEffect)(()=>XF(e),[e]),d===`update`?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(GI,{}),(0,V.jsx)(UM,{client:e.client})]}):d===`worktrees`?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(GI,{}),(0,V.jsx)(ZY,{model:e})]}):d?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(GI,{}),(0,V.jsx)(EH,{model:e,page:d})]}):m?(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(GI,{}),(0,V.jsx)(`div`,{className:Dt,children:(0,V.jsx)(cO,{model:e,seed:m},`${m.machine??``}\0${m.repo??``}\0${m.ungrouped?`u`:``}\0${m.retryOf?.id??``}`)})]}):(0,V.jsxs)(`main`,{className:`${Et} ${Ue}`,children:[t&&(0,V.jsx)(GI,{taskId:s?.id}),s&&(0,V.jsx)(YY,{model:e,task:s,tabs:l,narrow:t}),s&&!s.groupId&&(0,V.jsx)(KY,{model:e,taskId:s.id}),s?.groupId&&(0,V.jsx)(QJ,{model:e,taskId:s.id,groupId:s.groupId}),(0,V.jsxs)(`div`,{className:`${Dt} ${p?Ot:``}`,style:f?{"--task-ink":f}:void 0,children:[!t&&!s&&!c&&i&&i.tasks.length+a.length===0&&(0,V.jsx)(cW,{model:e}),!s&&!c&&i&&i.tasks.length+a.length>0&&(0,V.jsx)(`p`,{className:wt,children:z(`workspace.pickTask`)}),c?.machine&&(0,V.jsx)(`div`,{className:Tt,children:(0,V.jsx)(TE,{host:c.machine.label,onMachines:()=>AO(e)})}),s&&u&&l.length===0&&!h&&(0,V.jsxs)(`div`,{className:Tt,children:[(0,V.jsx)(`p`,{children:z(`workspace.noTabs`)}),(0,V.jsx)(H,{variant:`filled`,onClick:()=>void BC(e,s.id,{kind:`engine`}).catch(e=>G(String(e),`error`)),children:s.engine?z(`workspace.startEngine`,{engine:s.engine.name}):z(`workspace.startSession`)}),` `,(0,V.jsx)(H,{variant:`filled`,onClick:()=>void zC(e,s.id),children:z(`menu.newChat`)}),` `,(0,V.jsx)(H,{variant:`filled`,onClick:()=>W.set((0,V.jsx)(GC,{model:e,taskId:s.id})),children:z(`menu.newChatPick`)})]}),s&&h&&(0,V.jsx)(YJ,{model:e,task:s,narrow:!0}),s&&n.tabId&&l.some(e=>e.id===n.tabId)&&(0,V.jsx)(`div`,{className:`min-w-0 flex-1 ${h?`hidden`:`flex`}`,children:(0,V.jsx)(BY,{model:e,taskId:s.id,tab:l.find(e=>e.id===n.tabId)??l[0]},`${s.id}::${n.tabId}`)})]})]})}function $Y({model:e}){B();let t=v(e.client.conn);return t.hello===null&&t.failures>=2?(0,V.jsx)(eX,{}):(0,V.jsx)(tX,{model:e})}function eX(){let[e,t]=(0,g.useState)(null);return(0,g.useEffect)(()=>{Aa().then(t)},[]),e===null?null:e?(0,V.jsx)(Pa,{}):(0,V.jsx)(rn,{failing:!0})}function tX({model:e}){DF(e);let t=v(e.client.conn).hello;(0,g.useEffect)(()=>{t&&(VM(e.client),qM(e.client,t.roveVersion))},[t,e.client]),Kw(e),Uw(e),fa(),$r(e.client),IF(e),fi(e.client),FN(e.client),(0,g.useEffect)(()=>{e.onSelect=ga;let t=mn.subscribe(()=>{mn.get()!==null&&ga()});return _n(),t},[e]),(0,g.useEffect)(()=>fP(e),[e]);let n=v(pn),r=v(e.selection),i=v(e.tasks),a=v(e.remote),o=wa(),s=v(mI),c=v(hI),l=v(pI),u=v(ha),d=v(Ga),f=v(Ka),p=v(qa),m=v(ln),h=v(Cn)===`drag`,_=v(mn)!==null,y=a.find(e=>e.id===r.taskId&&!e.machine?.stale),b=Li(i,r.taskId)??y??null,x=y?void 0:a.find(e=>e.id===r.taskId),S=o?Ta(u,!!b||!!x,m!==null||_):null;(0,g.useEffect)(()=>e.setTaskShown(S===null||S===`content`&&m===null&&!_),[e,S,m,_]);let C=vI(l??280),w={"--rail-w":`${s?0:C}px`,"--rail-open-w":`${C}px`,"--panel-w":d===null?void 0:`${Ja(d,s?0:C)}px`};return(0,V.jsxs)(`div`,{className:Be,children:[(0,V.jsx)(mi,{onRefresh:()=>pi(e.client)}),(0,V.jsxs)(`div`,{className:Ve({zen:n||!f||!b&&!x||o,expanded:p&&!n&&!o,surface:S,folded:s&&!o,peek:s&&c&&!o,dragging:h}),style:o?void 0:w,children:[!o&&(0,V.jsx)(UI,{model:e}),s&&!o&&(0,V.jsx)(`div`,{className:`absolute inset-y-0 left-0 z-5 col-1 row-1 w-2.5`,onMouseEnter:()=>_I(!0),onMouseLeave:()=>_I(!1)}),(0,V.jsx)(uW,{model:e,narrow:o}),(0,V.jsx)(QY,{model:e,narrow:o}),!o&&(0,V.jsx)(YJ,{model:e,task:b,remoteHost:x?.machine?.label}),(0,V.jsx)(ZJ,{model:e}),(0,V.jsx)(Ba,{}),(0,V.jsx)(MF,{model:e}),(0,V.jsx)(Vi,{model:e})]})]})}var nX=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function rX(e){return[...e.querySelectorAll(nX)].filter(e=>e.tabIndex>=0&&e.offsetParent!==null)}function iX(){window.addEventListener(`keydown`,e=>{if(e.key!==`Tab`||e.defaultPrevented||e.ctrlKey||e.metaKey||e.altKey)return;let t=[...document.querySelectorAll(`.overlay:not(.is-leaving)`)].at(-1);if(!t)return;let n=rX(t);if(n.length===0)return;let r=document.activeElement,i=r instanceof HTMLElement&&t.contains(r),a=e.shiftKey?n.filter(e=>i&&!!(r.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)).at(-1)??n.at(-1):n.find(e=>i&&!!(r.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING))??n[0];e.preventDefault(),a?.focus()})}function aX(e){if(!bn())for(let t of document.querySelectorAll(`${e}:not(.is-leaving)`)){let e=t.cloneNode(!0);e.classList.add(`is-leaving`),e.inert=!0,e.setAttribute(`aria-hidden`,`true`),document.body.append(e);let n=t.querySelectorAll(`*`),r=e.querySelectorAll(`*`);n.forEach((e,t)=>{let n=r[t];e.scrollTop&&(n.scrollTop=e.scrollTop),(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&(n.value=e.value)}),window.setTimeout(()=>e.remove(),200)}}function oX(e){for(let t of document.querySelectorAll(`${e}.is-leaving`))t.remove()}function sX(){for(let e of document.querySelectorAll(`.overlay:not(.is-leaving)`))for(let t of e.getAnimations())t instanceof CSSAnimation&&t.animationName===`fade-in`&&t.finish()}function cX(){let e=W.get(),t=-1/0;W.subscribe(()=>{let n=W.get();if(n===null&&e!==null)t=performance.now(),aX(`.overlay`);else if(n!==null){let n=e!==null||performance.now()-t<140;oX(`.overlay`),n&&requestAnimationFrame(sX)}e=n});let n=on.get();on.subscribe(()=>{let e=on.get();e===null&&n!==null?aX(`.menu`):e!==null&&oX(`.menu`),n=e});let r=tT.get().guide;tT.subscribe(()=>{let e=tT.get().guide;e===null&&r!==null?aX(`.prefix-guide`):e!==null&&oX(`.prefix-guide`),r=e})}var lX=500,uX=10,dX=`input, textarea, select, [contenteditable], .xterm`,fX=[`mousedown`,`mouseup`,`click`,`contextmenu`];function pX(){let e=null,t=()=>{e&&window.clearTimeout(e.timer),e=null},n=()=>{let e=e=>{e.preventDefault(),e.stopPropagation()},t=()=>{for(let t of fX)document.removeEventListener(t,e,!0);document.removeEventListener(`pointerdown`,t,!0),document.removeEventListener(`keydown`,t,!0)};for(let t of fX)document.addEventListener(t,e,!0);document.addEventListener(`pointerdown`,t,!0),document.addEventListener(`keydown`,t,!0)};document.addEventListener(`pointerdown`,r=>{if(t(),r.pointerType!==`touch`||!(r.target instanceof Element)||r.target.closest(dX))return;let i=r.target,a={x:r.clientX,y:r.clientY,native:!1,timer:window.setTimeout(()=>{e=null,!(a.native||!i.isConnected)&&(i.dispatchEvent(new MouseEvent(`contextmenu`,{bubbles:!0,cancelable:!0,clientX:a.x,clientY:a.y,button:2})),n())},lX)};e=a},!0),document.addEventListener(`pointermove`,n=>{e&&Math.hypot(n.clientX-e.x,n.clientY-e.y)>uX&&t()},!0),document.addEventListener(`pointerup`,t,!0),document.addEventListener(`pointercancel`,t,!0),document.addEventListener(`contextmenu`,t=>{e&&t.isTrusted&&(e.native=!0)},!0)}function mX(e,t){e.viewingExtras=()=>Bk({narrow:Sa(),panelOpen:Ka.get(),zen:pn.get()});let n=()=>e.reportViewing();Ka.subscribe(n),pn.subscribe(n),Ca(n),t.on(`panel`,t=>{zk(t)&&nA(t,e.selection.get().taskId)})}function hX(e){let t=e;return!!t&&typeof t.promptId==`string`&&typeof t.title==`string`}function gX({client:e,prompt:t}){let n=(B()===`zh`?mr:pr).prompt,[r,i]=(0,g.useState)(t.initial??``),a=(0,g.useRef)(!1),{busy:o,error:s,submit:c}=cr();return(0,g.useEffect)(()=>()=>{a.current||e.request(`ui.promptReply`,{promptId:t.promptId}).catch(()=>{})},[e,t.promptId]),(0,V.jsx)(sr,{title:t.title,children:(0,V.jsxs)(`form`,{className:Ln,onSubmit:n=>{n.preventDefault(),c(async()=>{await e.request(`ui.promptReply`,{promptId:t.promptId,value:r}),a.current=!0})},children:[(0,V.jsx)(`input`,{className:tn,"aria-label":n.fieldLabel,autoFocus:!0,spellCheck:!1,value:r,placeholder:t.placeholder,onChange:e=>i(e.target.value)}),s&&(0,V.jsx)(`p`,{className:`text-error`,children:s}),(0,V.jsx)(fr,{busy:o,submitLabel:n.submitLabel})]})})}function _X(e,t){W.get()||W.set((0,V.jsx)(gX,{client:e,prompt:t},t.promptId))}var vX=`rove-web.reloadedFor`;function yX(e,t,n){return e===null?`adopt`:t===e||t===n?`stay`:`reload`}function bX(){let e=null;try{e=window.sessionStorage}catch{}return{storage:e,reload:()=>window.location.reload()}}function xX(e,t=bX()){let n=null,r=null,i=()=>{try{return t.storage?.getItem(vX)??r}catch{return r}};return e.conn.subscribe(()=>{let{state:a,hello:o}=e.conn.get();if(a!==`open`||!o)return;let s=yX(n,o.roveVersion,i());if(s===`adopt`&&(n=o.roveVersion),s===`reload`){r=o.roveVersion;try{t.storage?.setItem(vX,o.roveVersion)}catch{}t.reload()}})}function SX(){let e=window.visualViewport;if(!e)return;let t=document.documentElement,n=()=>{t.style.setProperty(`--vvh`,`${e.height*e.scale}px`),e.scale===1&&window.scrollY!==0&&window.scrollTo(0,0)};e.addEventListener(`resize`,n),e.addEventListener(`scroll`,n),window.addEventListener(`scroll`,n,{passive:!0}),n()}var CX=(0,h.createRoot)(document.getElementById(`root`));SX(),pX(),H_(),cX(),iX();var wX=a();if(!wX)Aa().then(e=>CX.render((0,V.jsx)(g.StrictMode,{children:e?(0,V.jsx)(Pa,{}):(0,V.jsx)(rn,{})})));else{let e=new m_(h_(),wX),t=new zi(e);e.on(`prompt`,t=>{hX(t)&&_X(e,t)}),mX(t,e),xX(e),e.start(),CX.render((0,V.jsx)(g.StrictMode,{children:(0,V.jsx)($Y,{model:t})}))}