mainflow 0.38.0 → 0.40.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -77,6 +77,6 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
77
77
  `),class:`-mx-2 flex h-8 min-w-0 items-center gap-2 rounded-md px-2 transition-colors duration-[120ms] hover:bg-accent/50`},[e.label?(B(),V(`span`,Ej,j(e.label),1)):K(``,!0),W(Qw,{type:N(Lw)(e.id),status:e.status},null,8,[`type`,`status`]),U(`span`,Dj,j(e.id),1),e.title?(B(),V(`span`,Oj,j(e.title),1)):(B(),V(`span`,kj,j(e.context),1)),U(`span`,Aj,[R(t.$slots,`default`),W(N(dd),{class:`size-3.5`})])],8,Tj))}}),Mj={class:`flex items-center gap-2`},Nj=[`title`],Pj=I({__name:`LinksSection`,props:{self:{},links:{},mainline:{type:Boolean}},setup(e){let t=e,n={"depends-on":{out:`依賴`,in:`被依賴`},relates:{out:`相關`,in:`相關`},"split-from":{out:`拆自`,in:`拆出`}},r=e=>e.map(e=>`${e.from} → ${e.to}`).join(`
78
78
  `),i=J(()=>{let e=Q.relations,n=t.mainline?e.mainlineDeps.map(e=>({from:e.from,to:e.to,state:e.state,note:r(e.edges)})):e.deps.filter(e=>e.from===t.self||e.to===t.self).map(e=>({from:e.from,to:e.to,state:e.state,note:e.note}));return[...n.filter(e=>e.from===t.self).map((e,t)=>({key:`dep-out-${t}`,ref:e.to,label:`依賴`,note:e.note,dep:e.state,...Mw(e.to)})),...n.filter(e=>e.to===t.self).map((e,t)=>({key:`dep-in-${t}`,ref:e.from,label:`被依賴`,note:e.note,dep:e.state,...Mw(e.from)}))]}),a=J(()=>[...i.value,...(t.links??[]).filter(e=>e.rel!==`depends-on`).map((e,t)=>({key:`out-${t}`,ref:e.to,label:n[e.rel]?.out??e.rel,note:e.note,...Mw(e.to)})),...(Q.relations.backlinks[t.self]??[]).filter(e=>e.rel!==`depends-on`).map((e,t)=>{let r=OC(e.from)?Mw(e.from):{...Mw(e.from),...e.title?{title:e.title,status:e.status}:{}};return{key:`in-${t}`,ref:e.from,label:n[e.rel]?.in??e.rel,note:e.note,...r}})]);return Er(()=>Pw(a.value.map(e=>e.ref))),(e,t)=>a.value.length?(B(),H(MD,{key:0,title:`關聯`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,e=>(B(),V(z,{key:e.key},[N(OC)(e.ref)?(B(),H(jj,{key:0,id:e.ref,title:e.title,status:e.status,label:e.label,context:e.context,note:e.note},{default:P(()=>[e.dep?(B(),V(`span`,{key:0,class:k(N(Xw)[e.dep].tone)},j(N(Xw)[e.dep].label),3)):K(``,!0)]),_:2},1032,[`id`,`title`,`status`,`label`,`context`,`note`])):(B(),H(wj,{key:1,peek:e.ref.split(`#`)[0],id:e.ref,title:e.title,status:e.status,label:e.label},{default:P(()=>[U(`span`,Mj,[e.note?(B(),V(`span`,{key:0,class:`block max-w-48 truncate`,title:e.note},j(e.note.split(`
79
79
  `)[0]),9,Nj)):K(``,!0),e.dep?(B(),V(`span`,{key:1,class:k(N(Xw)[e.dep].tone)},j(N(Xw)[e.dep].label),3)):K(``,!0)])]),_:2},1032,[`peek`,`id`,`title`,`status`,`label`]))],64))),128))]),_:1},8,[`count`])):K(``,!0)}}),Fj={class:`flex flex-col`},Ij=[`href`,`title`],Lj={key:3,class:`truncate`},Rj={key:5,class:`ml-auto shrink-0 text-xs text-muted-foreground`},zj=I({__name:`RefSources`,props:{refs:{}},setup(e){return(t,n)=>(B(),V(`ul`,Fj,[(B(!0),V(z,null,L(e.refs,e=>(B(),V(`li`,{key:e.title+(e.url??e.path),class:`-mx-2 flex min-h-8 min-w-0 items-center gap-2 rounded-md px-2 transition-colors hover:bg-accent/50`},[e.url?(B(),H(N(dd),{key:0,class:`size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(gd),{key:1,class:`size-3.5 shrink-0 text-muted-foreground`})),e.url?(B(),V(`a`,{key:2,href:e.url,target:`_blank`,rel:`noreferrer`,class:`truncate underline decoration-border underline-offset-4 hover:decoration-foreground`,title:e.url},j(e.title),9,Ij)):(B(),V(`span`,Lj,j(e.title),1)),e.path?(B(),H(CD,{key:4,text:e.path,class:`min-w-0`},null,8,[`text`])):K(``,!0),e.date?(B(),V(`span`,Rj,j(e.date),1)):K(``,!0)]))),128))]))}}),Bj=I({__name:`HoverCard`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},openDelay:{},closeDelay:{},enableTouch:{type:Boolean}},emits:[`update:open`],setup(e,{emit:t}){let n=F_(e,t);return(e,t)=>(B(),H(N(qS),q({"data-slot":`hover-card`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),Vj=I({inheritAttrs:!1,__name:`HoverCardContent`,props:{forceMount:{type:Boolean},memoDependencies:{},side:{},sideOffset:{default:4},sideFlip:{type:Boolean},align:{},alignOffset:{},alignFlip:{type:Boolean},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},hideShiftedArrow:{type:Boolean},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},disableUpdateOnLayoutShift:{type:Boolean},prioritizePosition:{type:Boolean},reference:{},dir:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(QS),null,{default:P(()=>[W(N(ZS),q({"data-slot":`hover-card-content`},{...e.$attrs,...N(n)},{class:N(gg)(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 rounded-md border p-4 shadow-md outline-hidden`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`])]),_:3}))}}),Hj=I({__name:`HoverCardTrigger`,props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(B(),H(N($S),q({"data-slot":`hover-card-trigger`},t),{default:P(()=>[R(e.$slots,`default`)]),_:3},16))}}),Uj={class:`shrink-0 font-mono text-[11px] text-muted-foreground`},Wj={key:0,class:`truncate`},Gj={class:`font-mono text-xs text-muted-foreground`},Kj={key:0,class:`mt-1 font-semibold`},qj={class:`mt-2 flex items-center gap-2`},Jj={key:1,class:`text-xs text-muted-foreground`},Yj=I({__name:`RefLabel`,props:{id:{},title:{},status:{},context:{}},emits:[`open`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),H(N(Bj),{"open-delay":300,"close-delay":100},{default:P(()=>[W(N(Hj),{"as-child":``},{default:P(()=>[U(`button`,{type:`button`,class:`inline-flex h-6 max-w-full min-w-0 items-center gap-1.5 overflow-hidden rounded-md border bg-background px-2 text-xs transition-colors hover:bg-accent`,onClick:r[0]||=au(t=>n(`open`,e.id),[`stop`])},[W(Qw,{type:N(Lw)(e.id),status:e.status},null,8,[`type`,`status`]),U(`span`,Uj,j(e.id),1),e.title?(B(),V(`span`,Wj,j(e.title),1)):K(``,!0)])]),_:1}),W(N(Vj),{class:`w-64`},{default:P(()=>[U(`p`,Gj,j(e.id),1),e.title?(B(),V(`p`,Kj,j(e.title),1)):K(``,!0),U(`div`,qj,[e.status?(B(),H(TE,{key:0,status:e.status},null,8,[`status`])):K(``,!0),e.context?(B(),V(`span`,Jj,j(e.context),1)):K(``,!0)])]),_:1})]),_:1}))}});function Xj(e){let t=tp(),n=J(()=>e?.()??String(t.params.m??``));return F(n,e=>{e&&lw(e).catch(e=>Q.error=e.message)},{immediate:!0}),{id:n,mainline:J(()=>Q.mainlines[n.value])}}var Zj={key:0,class:`pb-8`},Qj={key:0},$j={key:1},eM={key:2,class:`tabular-nums`},tM={key:0,class:`text-xs`},nM={class:`text-xs`},rM={class:`text-xs`},iM={key:1,class:`text-sm text-muted-foreground`},aM={key:1,class:`px-5 text-muted-foreground`},oM=I({__name:`DecisionPeek`,props:{m:{},d:{}},setup(e){let t=e,{open:n}=FC(),{mainline:r}=Xj(()=>t.m),i=J(()=>r.value?.decisions.find(e=>e.id===t.d)),a=J(()=>r.value?.decisions.find(e=>e.id===i.value?.supersededBy)),o=J(()=>r.value?.decisions.filter(e=>e.supersededBy===t.d)??[]),s=e=>n(e,{chain:!0}),c=e=>Mw(e.split(`#`)[0]);return(n,l)=>i.value&&N(r)?(B(),V(`div`,Zj,[W(OD,{id:`${e.m}/${i.value.id}`,title:i.value.title,type:`decision`,status:i.value.status},{notice:P(()=>[i.value.status===`proposed`?(B(),H(N(_g),{key:0,variant:`warning`},{default:P(()=>[W(N(Qu)),W(N(yg),null,{default:P(()=>[...l[0]||=[G(`還沒裁決`,-1)]]),_:1}),i.value.affects?.length?(B(),H(N(vg),{key:0,class:`text-xs text-muted-foreground`},{default:P(()=>[...l[1]||=[G(`在等它的項目列在「影響的項目」。`,-1)]]),_:1})):K(``,!0)]),_:1})):K(``,!0),a.value?(B(),H(N(_g),{key:1},{default:P(()=>[W(N(qd)),W(N(yg),null,{default:P(()=>[G(`已被 `+j(a.value.id)+` 取代`,1)]),_:1}),W(N(vg),{class:`text-xs text-muted-foreground`},{default:P(()=>[...l[2]||=[G(`以下保留當時的理由。新的決定見「取代關係」。`,-1)]]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(TE,{status:i.value.status},null,8,[`status`]),i.value.by?(B(),V(`span`,Qj,j(N(qw)[i.value.by])+`決定`,1)):K(``,!0),i.value.basis?(B(),V(`span`,$j,j(N(Jw)[i.value.basis]),1)):K(``,!0),i.value.decidedAt?(B(),V(`span`,eM,j(N(cE)(i.value.decidedAt)),1)):K(``,!0)]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[i.value.reversible===void 0?K(``,!0):(B(),H($,{key:0,label:`能否改回`,icon:N(sf)},{default:P(()=>[G(j(i.value.reversible?`可以低成本改回`:`不易改回`),1)]),_:1},8,[`icon`])),i.value.priority?(B(),H($,{key:1,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,tM,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:2,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,nM,j(N(cE)(i.value.created)),1)]),_:1},8,[`icon`]),i.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,rM,j(N(cE)(i.value.closedAt)),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N($u)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:6,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(i.value.origin),{onOpen:s}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),i.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.affects?.length?(B(),H(MD,{key:1,title:`影響的項目`,count:i.value.affects.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.affects,e=>(B(),H(wj,q({key:e,peek:e.split(`#`)[0]},{ref_for:!0},c(e),{id:e}),{default:P(()=>[G(j(e.includes(`#`)?`checklist 項目`:``),1)]),_:2},1040,[`peek`,`id`]))),128))]),_:1},8,[`count`])):K(``,!0),W(Pj,{self:N(wC)(t.m,t.d),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(MD,{key:2,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(zj,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`取代關係`},{default:P(()=>[a.value?(B(),H(wj,{key:0,peek:N(wC)(e.m,a.value.id),label:`被取代為`,id:a.value.id,title:a.value.title,status:a.value.status},null,8,[`peek`,`id`,`title`,`status`])):K(``,!0),(B(!0),V(z,null,L(o.value,t=>(B(),H(wj,{key:t.id,peek:N(wC)(e.m,t.id),label:`取代了`,id:t.id,title:t.title,status:t.status},null,8,[`peek`,`id`,`title`,`status`]))),128)),!a.value&&o.value.length===0?(B(),V(`p`,iM,`沒有取代關係。`)):K(``,!0)]),_:1})])):(B(),V(`p`,aM,`載入 `+j(e.m)+`/`+j(e.d)+`…`,1))}}),sM=`modulepreload`,cM=function(e){return`/`+e},lM={},uM=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=cM(t,n),t=s(t),t in lM)return;lM[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:sM,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},dM=`__mainflowVue`;function fM(e){return e.replace(/import\s*\{([^}]*)\}\s*from\s*['"]vue['"];?/g,(e,t)=>`const { ${t.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>e.replace(/\s+as\s+/,`: `)).join(`, `)} } = globalThis.${dM};`)}async function pM(e){let t=URL.createObjectURL(new Blob([fM(e)],{type:`text/javascript`}));try{return await uM(()=>import(t),[])}finally{URL.revokeObjectURL(t)}}async function mM(e,t){globalThis[dM]=xu;let{parse:n,compileScript:r,compileTemplate:i}=await uM(async()=>{let{parse:e,compileScript:t,compileTemplate:n}=await import(`./index.browser-C_4gp6WJ.js`);return{parse:e,compileScript:t,compileTemplate:n}},[]),{descriptor:a,errors:o}=n(e,{filename:t});if(o.length)throw Error(o.map(e=>e.message).join(`; `));for(let e of[a.script,a.scriptSetup])if(e?.lang&&e.lang!==`js`)throw Error(`<script lang="${e.lang}"> is not supported here; write the view in plain JavaScript`);if(a.styles.some(e=>e.scoped))throw Error(`<style scoped> is not supported here; use an unscoped <style> with a class prefix`);let s=`mf-${Math.abs([...t].reduce((e,t)=>e*31+t.charCodeAt(0)|0,7)).toString(36)}`,c={};if((a.script||a.scriptSetup)&&(c={...(await pM(r(a,{id:s,inlineTemplate:!0}).content)).default}),!a.scriptSetup&&a.template){let e=i({source:a.template.content,filename:t,id:s});if(e.errors.length)throw Error(e.errors.map(String).join(`; `));c.render=(await pM(e.code)).render}let l=a.styles.map(e=>e.content).join(`
80
- `);if(l){let e=document.querySelector(`style[data-mainflow-view="${s}"]`);e||(e=document.createElement(`style`),e.dataset.mainflowView=s,document.head.append(e)),e.textContent=l}return c}var hM={key:0,class:`mb-2 text-sm`},gM=[`src`,`title`],_M=[`src`,`alt`],vM={key:6,class:`overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed`},yM=I({__name:`CustomContent`,props:{path:{},ctx:{}},setup(e){let t=e,n=[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`],r=e=>e.slice(e.lastIndexOf(`.`)+1).toLowerCase(),i=M(``),a=M(``),o=M(null),s=pn(null),c;async function l(){a.value=``,c?.(),c=void 0,s.value=null;let e=r(t.path);try{if(e===`vue`)s.value=await mM(await(await fetch(ZC(t.path))).text(),t.path);else if(e===`js`||e===`mjs`){let e=await uM(()=>import(ZC(t.path)),[]);if(!e.mount)throw Error(`the module must export mount(el, ctx)`);o.value&&(c=e.mount(o.value,t.ctx)??void 0)}else e!==`html`&&!n.includes(e)&&(i.value=await(await fetch(ZC(t.path))).text())}catch(e){a.value=e.message}}return F(()=>[t.path,t.ctx],()=>void l(),{immediate:!0,flush:`post`}),na(()=>c?.()),(t,c)=>(B(),V(`div`,null,[a.value?(B(),V(`p`,hM,`無法渲染 `+j(e.path)+`:`+j(a.value),1)):K(``,!0),r(e.path)===`md`?(B(),H(yj,{key:1,source:i.value},null,8,[`source`])):r(e.path)===`html`?(B(),V(`iframe`,{key:2,src:N(ZC)(e.path),sandbox:`allow-scripts allow-same-origin`,class:`h-[480px] w-full rounded-lg border bg-white`,title:e.path},null,8,gM)):n.includes(r(e.path))?(B(),V(`img`,{key:3,src:N(ZC)(e.path),alt:e.path,class:`max-w-full rounded-lg border`},null,8,_M)):r(e.path)===`js`||r(e.path)===`mjs`?(B(),V(`div`,{key:4,ref_key:`mountPoint`,ref:o},null,512)):r(e.path)===`vue`&&s.value?(B(),H(fa(s.value),{key:5,ctx:e.ctx},null,8,[`ctx`])):r(e.path)===`vue`?K(``,!0):(B(),V(`pre`,vM,j(i.value),1))]))}}),bM=[`主脈絡文件`,`任務文件`,`產物`,`決策`,`自訂視圖`,`參考來源`],xM=e=>e.slice(e.lastIndexOf(`/`)+1),SM=e=>xM(e).includes(`.`)?xM(e).slice(xM(e).lastIndexOf(`.`)+1).toLowerCase():``;function CM(e){let t=t=>t.slice(e.dir.length+1),n=(e,n,r,i)=>({key:e,name:xM(e),kind:n,ext:SM(e),source:r,inMainline:t(e),updated:i}),r=(t,n)=>(t??[]).map(t=>({key:`${n??e.id}:${t.url??t.path}`,name:t.title,kind:`參考來源`,ext:t.url?``:SM(t.path??``),source:n,url:t.url,path:t.path,updated:t.date}));return[n(e.file,`主脈絡文件`,void 0,e.updated),...e.artifacts.map(e=>n(e,`產物`)),...e.tasks.flatMap(e=>[n(e.file,`任務文件`,e.id,e.updated),...e.artifacts.map(t=>n(t,`產物`,e.id))]),...e.decisions.map(e=>n(e.file,`決策`,e.id,e.updated)),...e.views.map(e=>n(e,`自訂視圖`)),...(e.remoteFiles??[]).map(t=>({...n(t,`產物`,e.tasks.find(e=>t.startsWith(`${e.dir}/`))?.id),remoteOnly:!0})),...r(e.refs),...e.tasks.flatMap(e=>r(e.refs,e.id))]}var wM=(e,t)=>e.remoteFiles?.includes(t)??!1;function TM(e,t){return CM(e).find(e=>e.key===t)?.kind??``}var EM={key:0,class:`pb-8`},DM={key:0},OM=[`title`],kM=[`href`],AM={key:0,class:`text-sm text-muted-foreground`},jM={key:1,class:`space-y-2 text-sm`},MM={key:1,class:`px-5 text-muted-foreground`},NM=I({__name:`FilePeek`,props:{m:{},path:{}},setup(e){let t=e,{mainline:n}=Xj(()=>t.m),r=J(()=>n.value?`${n.value.dir}/${t.path}`:``),i=J(()=>n.value?.tasks.find(e=>r.value.startsWith(`${e.dir}/`))),a=J(()=>n.value?.decisions.find(e=>e.file===r.value)),o=J(()=>n.value?TM(n.value,r.value):``),s=J(()=>({mainline:n.value,task:i.value})),c=J(()=>!!n.value&&wM(n.value,r.value)),l=M(`idle`),u=M(``),d=J(()=>c.value&&l.value!==`done`);async function f(){l.value=`loading`,u.value=``;try{let e=await XC.fetchRemote(t.m,r.value);l.value=e.fetched?`done`:`failed`,u.value=e.error??``}catch(e){l.value=`failed`,u.value=e.message}}F([r,c],()=>{c.value&&(l.value=`idle`,f())},{immediate:!0});let p=J(()=>t.path.slice(t.path.lastIndexOf(`/`)+1));return(t,c)=>N(n)?(B(),V(`div`,EM,[W(OD,{title:p.value,mono:``,type:N(zw)(e.path,o.value||void 0)},{default:P(()=>[U(`span`,null,j(o.value),1),d.value?(B(),V(`span`,DM,`只在伺服器上`)):K(``,!0),U(`span`,{class:`truncate font-mono`,title:e.path},j(e.path),9,OM),d.value?K(``,!0):(B(),H(N(sC),{key:1,variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[U(`a`,{href:N(ZC)(r.value),target:`_blank`},[W(N(ef)),c[0]||=G(`原始檔`,-1)],8,kM)]),_:1}))]),_:1},8,[`title`,`type`]),W(MD,null,{default:P(()=>[d.value&&l.value!==`failed`?(B(),V(`p`,AM,`這個檔案只在同步伺服器上,正在下載…`)):d.value?(B(),V(`div`,jM,[U(`p`,null,`無法下載這個檔案:`+j(u.value),1),W(N(sC),{variant:`outline`,size:`xs`,onClick:f},{default:P(()=>[...c[1]||=[G(`重試`,-1)]]),_:1})])):(B(),H(yM,{key:2,path:r.value,ctx:s.value},null,8,[`path`,`ctx`]))]),_:1}),W(MD,{title:`所屬`},{default:P(()=>[a.value?(B(),H(wj,{key:0,peek:N(wC)(e.m,a.value.id),id:a.value.id,title:a.value.title,status:a.value.status},null,8,[`peek`,`id`,`title`,`status`])):i.value?(B(),H(wj,{key:1,peek:N(CC)(e.m,i.value.id),id:i.value.id,title:i.value.title,status:i.value.status},null,8,[`peek`,`id`,`title`,`status`])):K(``,!0),W(wj,{peek:e.m,id:e.m,title:N(n).title,status:N(n).status},null,8,[`peek`,`id`,`title`,`status`])]),_:1})])):(B(),V(`p`,MM,`載入 `+j(e.m)+`…`,1))}}),PM={key:0,class:`pb-8`},FM={class:`text-xs`},IM={class:`text-xs`},LM={class:`text-xs`},RM={key:1,class:`px-5 text-muted-foreground`},zM=I({__name:`FindingPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.findings.find(e=>e.id===t.id)),i=()=>r.value&&dw(()=>XC.archiveFinding(r.value.id,!r.value.archivedAt,r.value.version));return Pw([r.value?.origin]),(a,o)=>r.value?(B(),V(`div`,PM,[W(OD,{id:r.value.id,title:r.value.title,type:`finding`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),W(eE,{archived:!!r.value.archivedAt,onToggle:i},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[r.value.appliesTo?.length?(B(),H($,{key:0,label:`適用範圍`,icon:N(bd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.appliesTo,e=>(B(),H(CD,{key:e,text:e},null,8,[`text`]))),128))]),_:1},8,[`icon`])):K(``,!0),r.value.reviewAfter?(B(),H($,{key:1,label:`重新確認`,icon:N(qd)},{default:P(()=>[W(pE,{day:r.value.reviewAfter,ended:r.value.status===`obsolete`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:2,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:o[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:3,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,FM,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,IM,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:7,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,LM,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,RM,`找不到發現 `+j(e.id)+`。`,1))}}),BM=[`P0`,`P1`,`P2`,`P3`].map(e=>({value:e,label:e})),VM=e=>e??`P2`,HM=e=>e.map(e=>({value:e,label:Gw[e]??e,status:e})),UM=e=>Ww.has(e);function WM(e,t){let n=e.filters.flatMap(e=>e.values(t).flatMap(t=>[t,e.optionLabel?.(t)??e.options?.find(e=>e.value===t)?.label??``]));return[e.id(t),e.text(t),...n].filter(Boolean).join(` `)}var GM=e=>({doing:e.filter(e=>e.status===`doing`).length,open:e.filter(e=>!UM(e.status)).length}),KM=e=>({key:`status`,label:`狀態`,value:e=>e.status,order:e,groupLabel:e=>Gw[e]??e,status:e=>e}),qM=(e,t)=>e.values?.(t)??[e.value(t)];function JM(e,t){let n=new Map;for(let r of t)for(let t of qM(e,r))n.set(t,[...n.get(t)??[],r]);let r=t=>e.order?.includes(t)?e.order.indexOf(t):1/0,i=t=>Number(e.trailing?.includes(t)??!1);return[...n.keys()].sort((t,n)=>i(t)-i(n)||r(t)-r(n)||t.localeCompare(n)*(e.latestFirst?-1:1)).map(t=>({key:t,label:e.groupLabel?.(t)??t,status:e.status?.(t),detail:e.detail?.(t),items:n.get(t)}))}var YM=`f.`,XM=e=>(Array.isArray(e)?e[0]:e)??void 0,ZM=(e,t=``)=>{if(!e.startsWith(t))return!1;let n=e.slice(t.length);return n===`q`||n===`sort`||n===`archived`||n.startsWith(YM)},QM=e=>$C(e,{}),$M=(e,t)=>ew(e,{...QM(e),...t});function eN(e,t){let n=tp(),r=ep(),i=`mainflow.list.${e.key}`,a=e.queryPrefix??``,o=QM(i),s=e=>Object.fromEntries(Object.entries(e).filter(([e])=>ZM(e,a)));function c(e){let t={...n.query};for(let[n,r]of Object.entries(e))r?t[n]=r:delete t[n];r.replace({query:t})}let l=o.query??{},u=Object.keys(l).length>0&&Object.keys(s(n.query)).length===0;$i(()=>u&&void r.replace({query:{...n.query,...l}}));let d=()=>`${n.path}?${XM(n.query.view)??``}`,f=d();F(()=>s(n.query),(e,t)=>{d()!==f||u&&t===void 0||$M(i,{query:e})},{deep:!0,immediate:!0});let p=J({get:()=>XM(n.query[`${a}q`])??``,set:e=>c({[`${a}q`]:e.trim()?e:void 0})}),m=J(()=>{let t=XM(n.query[`${a}sort`])??``,r=t.replace(/^-/,``),i=e.sorts.find(e=>e.key===r),o=i??e.sorts.find(t=>t.key===e.defaultSort);return{field:o,dir:i?t.startsWith(`-`)?`desc`:`asc`:o.dir,chosen:!!i}});function h(t,n){let r=e.sorts.find(e=>e.key===t);c({[`${a}sort`]:`${(n??r.dir)===`desc`?`-`:``}${t}`})}let g=()=>c({[`${a}sort`]:void 0});function _(e){let{field:t,dir:n,chosen:r}=m.value;!r||t.key!==e?h(e,`desc`):n===`desc`?h(e,`asc`):g()}let v=J(()=>Object.fromEntries(e.filters.map(e=>[e.key,(XM(n.query[`${a}${YM}${e.key}`])??``).split(`,`).filter(Boolean)])));function y(e,t){let n=v.value[e]??[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({[`${a}${YM}${e}`]:r.join(`,`)||void 0})}let b=e=>c({[`${a}${YM}${e}`]:void 0}),x=()=>c({[`${a}q`]:void 0,[`${a}archived`]:void 0,...Object.fromEntries(e.filters.map(e=>[`${a}${YM}${e.key}`,void 0]))}),S=J(()=>{let e=XM(n.query[`${a}archived`]);return e===`with`||e===`only`?e:`without`}),C=e=>c({[`${a}archived`]:e===`without`?void 0:e}),w=M(o.group!==void 0&&(o.group===``||e.groups.some(e=>e.key===o.group))?o.group:e.defaultGroup);function T(e){w.value=e,$M(i,{group:e})}function ee(e){if(e.options)return e.options;let n=new Set(t().flatMap(e.values));for(let t of v.value[e.key]??[])n.add(t);return[...n].sort().map(t=>({value:t,label:e.optionLabel?.(t)??t}))}let E=J(()=>{let n=p.value.toLowerCase().split(/\s+/).filter(Boolean);return t().filter(t=>{if(e.archived){let n=e.archived(t);if(S.value===`without`&&n||S.value===`only`&&!n)return!1}for(let n of e.filters){let e=v.value[n.key]??[];if(e.length>0&&!n.values(t).some(t=>e.includes(t)))return!1}let r=WM(e,t).toLowerCase();return n.every(e=>r.includes(e))})}),te=J(()=>{let{field:t,dir:n}=m.value,r=n===`asc`?1:-1;return[...E.value].sort((n,i)=>{let a=t.value(n),o=t.value(i),s=Number(a==null||a===``)-Number(o==null||o===``);return s===0?((typeof a==`number`&&typeof o==`number`?a-o:String(a).localeCompare(String(o)))||e.id(n).localeCompare(e.id(i)))*r:s})}),ne=J(()=>{let t=e.groups.find(e=>e.key===w.value),n=S.value!==`only`&&!v.value.status?.length,r=t=>n?{items:t.filter(t=>!e.ended?.(t)),ended:t.filter(t=>e.ended?.(t))}:{items:t,ended:[]};return t?JM(t,te.value).map(({key:e,label:n,status:i,detail:a,items:o})=>{let s=t.leader?.(e);return{key:e,label:n,status:i,leader:s,detail:a,...r(o.filter(e=>e!==s))}}):te.value.length?[{key:``,label:``,...r(te.value)}]:[]}),re=Qt(new Set(o.collapsed??[])),D=Qt(new Set(o.endedFolded??[])),ie=(e,t,n)=>{e.has(t)?e.delete(t):e.add(t),$M(i,{[n]:[...e]})};return{spec:e,search:p,sort:m,setSort:h,clearSort:g,cycleSort:_,filters:v,toggleFilter:y,clearFilter:b,clearAll:x,activeFilters:J(()=>e.filters.flatMap(e=>(v.value[e.key]??[]).map(t=>({field:e,value:t,label:ee(e).find(e=>e.value===t)?.label??t})))),optionsOf:ee,archived:S,setArchived:C,group:w,setGroup:T,total:J(()=>t().length),shown:J(()=>E.value.length),sorted:te,groups:ne,collapsed:re,endedFolded:D,toggleCollapsed:e=>ie(re,e,`collapsed`),toggleEnded:e=>ie(D,e,`endedFolded`)}}var tN=`未分組`;function nN(e,t){if(!e)return!1;let n=Q.summary?.hub;return e===t||n!==void 0&&e===`${n}:${t}`}var rN=e=>e?Q.summary?.groups.find(t=>t.id===e):void 0;function iN(e=Q.summary?.groups??[]){return[...e].sort((e,t)=>Number(UM(e.status))-Number(UM(t.status))||VM(e.priority).localeCompare(VM(t.priority))||e.id.localeCompare(t.id))}var aN=e=>e===`未分組`?tN:`${e} ${rN(e)?.title??``}`.trim();function oN(e){return{key:`group`,label:`組`,value:t=>e(t)??`未分組`,get order(){return iN().map(e=>e.id)},trailing:[tN],groupLabel:aN,detail:e=>{let t=rN(e);return t&&{ref:t.id,title:t.title,status:t.status,priority:t.priority??null,trigger:t.trigger,summary:t.summary}}}}function sN(e){return{key:`group`,label:`組`,values:t=>[e(t)||`未分組`],optionLabel:aN}}var cN={key:0,class:`pb-8`},lN={key:0,class:`text-xs`},uN={class:`text-xs`},dN={class:`text-xs`},fN={key:0,class:`text-sm text-muted-foreground`},pN={key:1,class:`px-5 text-muted-foreground`},mN=I({__name:`GroupPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>rN(t.id)),i=J(()=>(Q.summary?.mainlines??[]).filter(e=>nN(e.group,t.id)&&!e.archivedAt)),a=J(()=>Q.issues.filter(e=>nN(e.group,t.id)&&!e.archivedAt)),o=J(()=>(Q.relations.groupMembers[t.id]??[]).filter(e=>!e.archived)),s=J(()=>o.value.filter(e=>e.kind===`mainline`)),c=J(()=>o.value.filter(e=>e.kind===`issue`));return(l,u)=>r.value?(B(),V(`div`,cN,[W(OD,{id:r.value.id,title:r.value.title,type:`group`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),!r.value.priority||r.value.priority===`P2`?(B(),V(`span`,lN,`P2`)):K(``,!0)]),_:1},8,[`icon`]),r.value.trigger?(B(),H($,{key:0,label:`時機`,icon:N(rd)},{default:P(()=>[G(j(r.value.trigger),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:1,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:u[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:2,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,uN,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,dN,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(MD,{title:`主脈絡`,count:i.value.length},{default:P(()=>[(B(!0),V(z,null,L(i.value,e=>(B(),H(wj,{key:e.id,peek:e.id,id:e.id,title:e.title,status:e.status},{default:P(()=>[G(j(N(Gw)[e.status]??e.status),1)]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128)),i.value.length===0?(B(),V(`p`,fN,[u[1]||=G(`還沒有主脈絡在這組。用 `,-1),U(`code`,null,`mainflow mainline set <m> --group `+j(r.value.id),1),u[2]||=G(` 加入。`,-1)])):K(``,!0)]),_:1},8,[`count`]),a.value.length?(B(),H(MD,{key:1,title:`待辦事項`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,e=>(B(),H(wj,{key:e.id,peek:e.id,id:e.id,title:e.title,status:e.status},{default:P(()=>[W(xE,{priority:e.priority},null,8,[`priority`])]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),o.value.length?(B(),H(MD,{key:2,title:`其他 hub 的成員`,count:o.value.length},{default:P(()=>[(B(!0),V(z,null,L([...s.value,...c.value],e=>(B(),H(wj,{key:e.ref,peek:e.ref,id:e.ref,title:e.title,status:e.status},{default:P(()=>[G(j(e.kind===`issue`?`待辦`:`主脈絡`)+` · `+j(N(Gw)[e.status]??e.status),1)]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:3,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,pN,`找不到組 `+j(e.id)+`。`,1))}}),hN={key:0,class:`pb-8`},gN={key:0,class:`text-xs`},_N={class:`text-xs`},vN={class:`text-xs`},yN={class:`text-xs`},bN={key:1,class:`px-5 text-muted-foreground`},xN=I({__name:`IssuePeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.issues.find(e=>e.id===t.id)),i=e=>n(e,{chain:!0}),a=()=>r.value&&dw(()=>XC.archiveIssue(r.value.id,!r.value.archivedAt,r.value.version));return Pw([r.value?.origin,r.value?.plannedIn]),(n,o)=>r.value?(B(),V(`div`,hN,[W(OD,{id:r.value.id,title:r.value.title,type:`issue`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),W(eE,{archived:!!r.value.archivedAt,onToggle:a},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,gN,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.group?(B(),H($,{key:1,label:`組`,icon:N(Hu)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.group),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:2,label:`到期`,icon:N(Wu)},{default:P(()=>[W(pE,{day:r.value.due,ended:r.value.status===`closed`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.plannedIn?(B(),H($,{key:3,label:`排入`,icon:N(Ku)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.plannedIn),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:4,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:5,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:6,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,_N,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:7,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,vN,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:8,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:9,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,yN,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,bN,`找不到待辦 `+j(e.id)+`。`,1))}}),SN=I({__name:`Dialog`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean},unmountOnHide:{type:Boolean}},emits:[`update:open`],setup(e,{emit:t}){let n=F_(e,t);return(e,t)=>(B(),H(N(gv),q({"data-slot":`dialog`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),CN=I({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Sf(t,`class`);return(e,r)=>(B(),H(N(iy),q({"data-slot":`dialog-overlay`},N(n),{class:N(gg)(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),wN=I({inheritAttrs:!1,__name:`DialogContent`,props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!0}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(e,{emit:t}){let n=e,r=t,i=F_(Sf(n,`class`),r);return(t,r)=>(B(),H(N(oy),null,{default:P(()=>[W(CN),W(N(ty),q({"data-slot":`dialog-content`},{...t.$attrs,...N(i)},{class:N(gg)(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg`,n.class)}),{default:P(()=>[R(t.$slots,`default`),e.showCloseButton?(B(),H(N(_v),{key:0,"data-slot":`dialog-close`,class:`ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`},{default:P(()=>[W(N(uf)),r[0]||=U(`span`,{class:`sr-only`},`Close`,-1)]),_:1})):K(``,!0)]),_:3},16,[`class`])]),_:3}))}}),TN=I({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(ny),q({"data-slot":`dialog-description`},N(n),{class:N(gg)(`text-muted-foreground text-sm`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),EN=I({__name:`DialogFooter`,props:{class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!1}},setup(e){let t=e;return(n,r)=>(B(),V(`div`,{"data-slot":`dialog-footer`,class:k(N(gg)(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t.class))},[R(n.$slots,`default`),e.showCloseButton?(B(),H(N(_v),{key:0,"as-child":``},{default:P(()=>[W(N(sC),{variant:`outline`},{default:P(()=>[...r[0]||=[G(` Close `,-1)]]),_:1})]),_:1})):K(``,!0)],2))}}),DN=I({__name:`DialogHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(B(),V(`div`,{"data-slot":`dialog-header`,class:k(N(gg)(`flex flex-col gap-2 text-center sm:text-left`,t.class))},[R(e.$slots,`default`)],2))}}),ON=I({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(sy),q({"data-slot":`dialog-title`},N(n),{class:N(gg)(`text-lg leading-none font-semibold`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),kN={class:`break-words`},AN={key:2,class:`font-mono`},jN=I({__name:`EvidenceText`,props:{text:{}},setup(e){let t=e,{to:n}=FC(),r=/(\.mainflow\/mainlines\/(m\d{3})-[^/\s]+\/([^\s,、;))]+))|(\bm\d{3}\/[td]\d{3}(?:#c\d{3})?\b|\b[if]\d{3}\b)|(\b[0-9a-f]{7,40}\b)|([\w./-]+\.\w+:\d+(?:-\d+)?)/g,i=J(()=>{let e=[],n=0;for(let i of t.text.matchAll(r)){let r=i.index??0;r>n&&e.push({kind:`text`,value:t.text.slice(n,r)});let[a,o,s,c,l,u]=i;o&&!/[{}*]/.test(c)?e.push({kind:`file`,value:a,peek:EC(s,c)}):l?e.push({kind:`ref`,value:a,peek:l.split(`#`)[0]}):u&&/\d/.test(u)&&/[a-f]/.test(u)?e.push({kind:`commit`,value:a}):!o&&!u?e.push({kind:`code`,value:a}):e.push({kind:`text`,value:a}),n=r+a.length}return n<t.text.length&&e.push({kind:`text`,value:t.text.slice(n)}),e}),a=e=>e.slice(e.lastIndexOf(`/`)+1);return(e,t)=>(B(),V(`span`,kN,[(B(!0),V(z,null,L(i.value,(e,r)=>(B(),V(z,{key:r},[e.kind===`ref`||e.kind===`file`?(B(),H(N(Am),{key:0,to:N(n)(e.peek,{chain:!0}),class:`font-mono text-foreground underline decoration-border underline-offset-4 hover:decoration-foreground`,title:e.value,onClick:t[0]||=au(()=>{},[`stop`])},{default:P(()=>[G(j(e.kind===`file`?a(e.value):e.value),1)]),_:2},1032,[`to`,`title`])):e.kind===`commit`?(B(),H(CD,{key:1,text:e.value,class:`align-baseline`},null,8,[`text`])):e.kind===`code`?(B(),V(`code`,AN,j(e.value),1)):(B(),V(z,{key:3},[G(j(e.value),1)],64))],64))),128))]))}}),MN={class:`flex flex-col`},NN={key:1,class:`mt-0.5 grid size-4 shrink-0 place-items-center rounded-[4px] border border-dashed text-[10px] text-muted-foreground`,"aria-label":`已不需要`},PN={class:`flex min-w-0 flex-1 flex-col gap-0.5`},FN={class:`flex min-w-0 items-start gap-2`},IN=[`title`],LN={key:0,class:`text-xs text-muted-foreground`},RN={key:1,class:`text-xs text-muted-foreground`},zN={key:0},BN={key:2,class:`text-xs text-muted-foreground`},VN={key:3,class:`text-xs text-muted-foreground`},HN={key:1,class:`text-sm text-muted-foreground`},UN={key:0,class:`text-xs text-muted-foreground`},WN=I({__name:`Checklist`,props:{items:{},refPrefix:{},version:{}},setup(e){let t=e,n=J(()=>t.items.filter(e=>!e.done&&!e.dropped)),r=J(()=>t.items.filter(e=>e.done||e.dropped)),i=M(!1),a=J(()=>[...n.value,...i.value?r.value:[]]),o=M(null),s=M(``);async function c(e){if(e.done){await dw(()=>XC.check(`${t.refPrefix}${e.id}`,!1,void 0,t.version));return}o.value=e,s.value=``}async function l(){let e=o.value;e&&s.value.trim()&&await dw(()=>XC.check(`${t.refPrefix}${e.id}`,!0,s.value.trim(),t.version))&&(o.value=null)}return(t,n)=>(B(),V(z,null,[U(`ul`,MN,[(B(!0),V(z,null,L(a.value,e=>(B(),V(`li`,{key:e.id,class:`-mx-2 flex gap-3 rounded-md px-2 py-1.5 transition-colors duration-[120ms] hover:bg-accent/50`},[e.dropped?(B(),V(`span`,NN,`–`)):(B(),H(N(mE),{key:0,"model-value":e.done||o.value?.id===e.id,class:`mt-0.5`,"aria-label":e.done?`取消勾選 ${e.id}`:`勾選 ${e.id}`,"onUpdate:modelValue":t=>c(e)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])),U(`div`,PN,[U(`div`,FN,[W(CD,{text:e.id,class:`mt-px shrink-0`},null,8,[`text`]),U(`span`,{class:k([`min-w-0 flex-1`,{"text-muted-foreground":e.done,"text-muted-foreground line-through":e.dropped}])},j(e.text),3),(B(!0),V(z,null,L(e.serves??[],e=>(B(),V(`span`,{key:e,class:`shrink-0 rounded-sm bg-secondary px-1.5 font-mono text-[11px] text-muted-foreground`,title:`推進解決條件 ${e}`},j(e),9,IN))),128))]),e.doneWhen&&!e.done&&!e.dropped?(B(),V(`p`,LN,`完成定義:`+j(e.doneWhen),1)):K(``,!0),e.done&&e.evidence?(B(),V(`p`,RN,[W(jN,{text:e.evidence},null,8,[`text`]),e.doneAt?(B(),V(`span`,zN,` · `+j(e.doneAt),1)):K(``,!0)])):K(``,!0),e.dropped?(B(),V(`p`,BN,[n[6]||=G(` 不需要了`,-1),e.supersededBy?(B(),V(z,{key:0},[n[4]||=G(`,由 `,-1),W(jN,{text:e.supersededBy},null,8,[`text`]),n[5]||=G(` 取代`,-1)],64)):K(``,!0),e.note?(B(),V(z,{key:1},[G(`:`+j(e.note),1)],64)):K(``,!0)])):e.note?(B(),V(`p`,VN,j(e.note),1)):K(``,!0)])]))),128))]),r.value.length?(B(),H(N(sC),{key:0,variant:`ghost`,size:`xs`,class:`-ml-2 text-muted-foreground`,"aria-expanded":i.value,onClick:n[0]||=e=>i.value=!i.value},{default:P(()=>[i.value?(B(),H(N(Ju),{key:0})):(B(),H(N(Xu),{key:1})),G(j(i.value?`收起已完成`:`已完成 ${r.value.length} 個`),1)]),_:1},8,[`aria-expanded`])):K(``,!0),e.items.length===0?(B(),V(`p`,HN,`沒有項目`)):K(``,!0),W(N(SN),{open:o.value!==null,"onUpdate:open":n[3]||=e=>!e&&(o.value=null)},{default:P(()=>[W(N(wN),{class:`sm:max-w-lg`},{default:P(()=>[W(N(DN),null,{default:P(()=>[W(N(ON),null,{default:P(()=>[G(`勾選 `+j(o.value?.id),1)]),_:1}),W(N(TN),null,{default:P(()=>[G(j(o.value?.text),1)]),_:1})]),_:1}),U(`form`,{class:`flex flex-col gap-3`,onSubmit:au(l,[`prevent`])},[o.value?.doneWhen?(B(),V(`p`,UN,`完成定義:`+j(o.value.doneWhen),1)):K(``,!0),W(N(ZE),{modelValue:s.value,"onUpdate:modelValue":n[1]||=e=>s.value=e,autofocus:``,placeholder:`證據:commit、檔案:行號或指令輸出`,"aria-label":`證據`},null,8,[`modelValue`]),W(N(EN),null,{default:P(()=>[W(N(sC),{type:`button`,variant:`ghost`,onClick:n[2]||=e=>o.value=null},{default:P(()=>[...n[7]||=[G(`取消`,-1)]]),_:1}),W(N(sC),{type:`submit`,disabled:!s.value.trim()},{default:P(()=>[...n[8]||=[G(`勾選`,-1)]]),_:1},8,[`disabled`])]),_:1})],32)]),_:1})]),_:1},8,[`open`])],64))}}),GN=[`title`],KN={class:`h-1.5 w-14 overflow-hidden rounded-full bg-primary/20`},qN={class:`min-w-7 tabular-nums`},JN=I({__name:`ProgressBar`,props:{done:{},total:{}},setup(e){let t=e,n=J(()=>t.total===0?0:Math.round(t.done/t.total*100));return(t,r)=>(B(),V(`span`,{class:`inline-flex items-center gap-2 text-xs text-muted-foreground`,title:`${e.done}/${e.total}`},[U(`span`,KN,[U(`span`,{class:`block h-full rounded-full bg-primary`,style:he({width:`${n.value}%`})},null,4)]),U(`span`,qN,j(e.done)+`/`+j(e.total),1)],8,GN))}}),YN={key:0,class:`text-xs`},XN={class:`text-xs`},ZN={class:`text-xs`},QN={class:`text-xs tabular-nums`},$N={class:`text-xs`},eP={class:`flex flex-col gap-2`},tP={class:`mr-2 font-mono text-xs text-muted-foreground`},nP={class:`w-full text-xs`},rP={class:`py-1.5 tabular-nums`},iP={class:`text-right tabular-nums`},aP={class:`text-right tabular-nums`},oP={class:`pl-3 text-muted-foreground`},sP={key:0,class:`text-sm text-muted-foreground`},cP=I({__name:`MainlineBody`,props:{mainline:{},columns:{default:1}},setup(e){let t=e,{open:n}=FC(),r=J(()=>t.mainline),i=J(()=>r.value.tasks.flatMap(e=>e.checklist).filter(e=>!e.dropped)),a=J(()=>r.value.criteria.filter(e=>!e.dropped)),o=J(()=>r.value.decisions.filter(e=>e.status===`proposed`)),s=J(()=>Math.round((r.value.costs??[]).reduce((e,t)=>e+(t.actual??0),0)*100)/100),c=J(()=>r.value.budget?.unit??r.value.costs?.[0]?.unit??``),l=J(()=>Q.issues.filter(e=>!e.archivedAt&&(e.origin?.startsWith(`${r.value.id}/`)||e.plannedIn?.startsWith(`${r.value.id}/`)))),u=J(()=>jw(r.value.id)),d=[`done`,`dropped`];return(t,f)=>(B(),V(z,null,[W(MD,null,{default:P(()=>[W(JD,{columns:e.columns},{default:P(()=>[W($,{label:`解決條件`,icon:N(af)},{default:P(()=>[W(JN,{done:a.value.filter(e=>e.done).length,total:a.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),W($,{label:`checklist`,icon:N(Pd)},{default:P(()=>[W(JN,{done:i.value.filter(e=>e.done).length,total:i.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),r.value.group?(B(),H($,{key:0,label:`組`,icon:N(Hu)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.group),{onOpen:f[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.priority?(B(),H($,{key:1,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,YN,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:2,label:`到期`,icon:N(Wu)},{default:P(()=>[W(pE,{day:r.value.due,ended:d.includes(r.value.status)},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:3,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,XN,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,ZN,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:7,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:f[1]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.budget||r.value.costs?.length?(B(),H($,{key:8,label:`花費`,icon:N(cf)},{default:P(()=>[U(`span`,QN,[G(j(s.value),1),r.value.budget?(B(),V(z,{key:0},[G(` / `+j(r.value.budget.amount),1)],64)):K(``,!0),G(` `+j(c.value),1)])]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:9,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,$N,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1},8,[`columns`])]),_:1}),o.value.length?(B(),H(MD,{key:0,title:`待裁決的決策`,count:o.value.length},{default:P(()=>[U(`div`,eP,[(B(!0),V(z,null,L(o.value,e=>(B(),H(N(_g),{key:e.id,variant:`warning`,class:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:t=>N(n)(N(wC)(r.value.id,e.id),{chain:!0})},{default:P(()=>[W(N(Qu)),W(N(yg),null,{default:P(()=>[U(`span`,tP,j(e.id),1),G(j(e.title),1)]),_:2},1024),e.affects?.length?(B(),H(N(vg),{key:0,class:`text-xs text-muted-foreground`},{default:P(()=>[G(`在等它的有 `+j(e.affects.join(`、`)),1)]),_:2},1024)):K(``,!0)]),_:2},1032,[`onClick`]))),128))])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`解決條件`,count:r.value.criteria.length},{default:P(()=>[W(WN,{items:r.value.criteria,"ref-prefix":`${r.value.id}#`,version:r.value.version},null,8,[`items`,`ref-prefix`,`version`])]),_:1},8,[`count`]),r.value.body.trim()?(B(),H(MD,{key:1,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:r.value.id,links:r.value.links,mainline:``},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:2,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),r.value.costs?.length?(B(),H(MD,{key:3,title:`花費明細`,count:r.value.costs.length},{default:P(()=>[U(`table`,nP,[f[2]||=U(`thead`,{class:`text-muted-foreground`},[U(`tr`,{class:`border-b`},[U(`th`,{class:`py-1.5 text-left font-medium`},`日期`),U(`th`,{class:`text-left font-medium`},`項目`),U(`th`,{class:`text-right font-medium`},`預估`),U(`th`,{class:`text-right font-medium`},`實際`),U(`th`,{class:`pl-3 text-left font-medium`},`備註`)])],-1),U(`tbody`,null,[(B(!0),V(z,null,L(r.value.costs,(e,t)=>(B(),V(`tr`,{key:t,class:`border-b`},[U(`td`,rP,j(e.date),1),U(`td`,null,j(e.item),1),U(`td`,iP,j(e.estimate??``),1),U(`td`,aP,j(e.actual??``),1),U(`td`,oP,j(e.note??``),1)]))),128))])])]),_:1},8,[`count`])):K(``,!0),l.value.length?(B(),H(MD,{key:4,title:`相關的待辦`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(wj,{key:e.id,peek:e.id,id:e.id,title:e.title,status:e.status},null,8,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`推進過它的會話`,count:u.value.length},{default:P(()=>[(B(!0),V(z,null,L(u.value,({session:e,actions:t})=>(B(),H(wj,{key:e.id,peek:N(TC)(e.id),title:N(Dw)(e),status:e.status},{default:P(()=>[G(j(t.length)+` 個行動`,1)]),_:2},1032,[`peek`,`title`,`status`]))),128)),u.value.length===0?(B(),V(`p`,sP,`這台電腦上沒有推進它的會話。會話只記在本機。`)):K(``,!0)]),_:1},8,[`count`])],64))}}),lP={class:`inline-flex h-7 items-center gap-1.5 rounded-full border bg-background px-2.5 text-xs font-medium transition-colors hover:bg-accent focus-within:ring-3 focus-within:ring-ring/50`},uP=[`value`],dP=[`value`],fP=I({__name:`StatusSelect`,props:{status:{},options:{}},emits:[`change`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),V(`label`,lP,[W(wE,{status:e.status},null,8,[`status`]),U(`select`,{class:`cursor-pointer bg-transparent outline-none`,value:e.status,onChange:r[0]||=e=>n(`change`,e.target.value)},[(B(!0),V(z,null,L(e.options,e=>(B(),V(`option`,{key:e,value:e},j(N(Gw)[e]??e),9,dP))),128))],40,uP)]))}}),pP={key:0,class:`pb-8`},mP={key:1,class:`px-5 text-muted-foreground`},hP=I({__name:`MainlinePeek`,props:{m:{}},setup(e){let t=e,{mainline:n}=Xj(()=>t.m),r=e=>n.value&&dw(()=>XC.mainlineStatus(t.m,e,n.value.version)),i=e=>n.value&&dw(()=>XC.mainlineTitle(t.m,e,n.value.version)),a=()=>n.value&&dw(()=>XC.archive(t.m,!n.value.archivedAt,n.value.version));return(t,o)=>N(n)?(B(),V(`div`,pP,[W(OD,{id:N(n).id,title:N(n).title,type:`mainline`,status:N(n).status,editable:``,onRename:i},{default:P(()=>[W(fP,{status:N(n).status,options:N(Bw),onChange:r},null,8,[`status`,`options`]),W(eE,{archived:!!N(n).archivedAt,onToggle:a},null,8,[`archived`]),W(N(sC),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${N(n).id}`},{default:P(()=>[W(N(ef)),o[0]||=G(`開啟工作區`,-1)]),_:1},8,[`to`])]),_:1})]),_:1},8,[`id`,`title`,`status`]),W(cP,{mainline:N(n)},null,8,[`mainline`])])):(B(),V(`p`,mP,`載入 `+j(e.m)+`…`,1))}}),gP=[`datetime`,`title`],_P=I({__name:`RelativeTime`,props:{at:{}},setup(e){let t=e,n=If({scheduler:e=>Cf(e,6e4)}),r=new Intl.RelativeTimeFormat(`zh-TW`,{numeric:`auto`}),i=J(()=>new Date(iE(t.at))),a=J(()=>{let e=Math.round((n.value.getTime()-i.value.getTime())/6e4);if(t.at.length===10){let n=Math.round(e/1440);return n>=0&&n<7?r.format(-n,`day`):t.at}return e<1?`剛剛`:e<60?r.format(-e,`minute`):e<1440?r.format(-Math.round(e/60),`hour`):e<10080?r.format(-Math.round(e/1440),`day`):oE(t.at)});return(t,n)=>(B(),V(`time`,{datetime:e.at,title:N(cE)(e.at)},j(a.value),9,gP))}}),vP={key:0,class:`pb-8`},yP=[`title`],bP={key:0,class:`flex flex-col gap-1 text-sm`},xP={key:0},SP={key:0,class:`text-xs text-muted-foreground`},CP={key:1,class:`text-xs text-muted-foreground`},wP={class:`font-mono text-xs`},TP={class:`flex flex-col`},EP=[`aria-expanded`,`onClick`],DP={class:`mt-px shrink-0 font-mono text-xs text-muted-foreground`},OP={class:`min-w-0 flex-1`},kP={key:2,class:`shrink-0 text-xs text-muted-foreground tabular-nums`},AP={class:`flex flex-wrap gap-1 pb-1 pl-12`},jP={key:0,class:`pb-1 pl-12 text-xs text-muted-foreground`},MP={key:1,class:`mb-2 ml-12 flex flex-col gap-1.5 rounded-md border p-3 text-xs`},NP={key:0,class:`text-muted-foreground`},PP={key:1,class:`text-muted-foreground`},FP={key:2,class:`text-muted-foreground`},IP={class:`w-20 shrink-0 text-muted-foreground`},LP={key:0,class:`text-muted-foreground`},RP={key:1,class:`text-destructive`},zP={key:0,class:`text-sm text-muted-foreground`},BP={key:0,class:`text-sm text-muted-foreground`},VP={class:`w-20 text-muted-foreground`},HP={class:`tabular-nums`},UP={key:1,class:`px-5 text-muted-foreground`},WP=I({__name:`SessionPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.sessions.find(e=>e.id===t.id)),i=M(null),a=M(null),o=e=>Q.sessions.find(t=>t.id===e),s=J(()=>{let e=r.value;return e?[...e.delegatedFrom?[{label:`委派自`,id:e.delegatedFrom}]:[],...e.handoffFrom?[{label:`接手自`,id:e.handoffFrom}]:[],...Q.sessions.filter(t=>t.delegatedFrom===e.id).map(e=>({label:`委派給`,id:e.id})),...Q.sessions.filter(t=>t.handoffFrom===e.id).map(e=>({label:`交接給`,id:e.id}))]:[]});F(()=>[r.value?.id,r.value?.actions.length,r.value?.actions.map(e=>e.status).join()],async()=>{let e=r.value;if(e){for(let t of new Set(e.actions.flatMap(e=>e.serves.map(e=>QC(e).m))))lw(t).catch(e=>Q.error=e.message);i.value=await XC.trace(e.id).catch(()=>null)}},{immediate:!0});function c(e){let{m:t,t:n,item:r}=QC(e);if(!n){let n=Q.mainlines[t]?.criteria.find(e=>e.id===r);return{ref:e,task:t,text:n?.text,done:n?.done??!1}}let i=Q.mainlines[t]?.tasks.find(e=>e.id===n);return{ref:e,task:`${t}/${n}`,text:i?.checklist.find(e=>e.id===r)?.text,done:i?.checklist.find(e=>e.id===r)?.done??!1}}let l=J(()=>[...new Set((r.value?.actions??[]).flatMap(e=>e.serves))].map(c));function u(e){return Object.keys(Kw).map(t=>({kind:t,items:e.filter(e=>e.kind===t)})).filter(e=>e.items.length>0)}let d=e=>u(i.value?.byAction[e]??[]),f=e=>(i.value?.byAction[e]??[]).length,p=()=>r.value&&dw(()=>XC.archiveSession(r.value.id,!r.value.archivedAt));return(t,c)=>r.value?(B(),V(`div`,vP,[W(OD,{title:N(Dw)(r.value),type:`session`,status:r.value.status},{notice:P(()=>[r.value.description||r.value.summary?(B(),V(`div`,bP,[r.value.description?(B(),V(`p`,xP,[G(j(r.value.description),1),r.value.depth===void 0?K(``,!0):(B(),V(`span`,SP,` · 深度 `+j(r.value.depth),1))])):K(``,!0),r.value.summary?(B(),V(`p`,CP,j(r.value.summary),1)):K(``,!0)])):K(``,!0)]),default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),r.value.elsewhere?(B(),V(`span`,{key:0,title:`工作目錄 ${r.value.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,yP)):K(``,!0),W(CD,{text:r.value.id,label:r.value.id.slice(-8)},null,8,[`text`,`label`]),W(eE,{archived:!!r.value.archivedAt,onToggle:p},null,8,[`archived`])]),_:1},8,[`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`ID`,icon:N(Od)},{default:P(()=>[W(CD,{text:r.value.id},null,8,[`text`])]),_:1},8,[`icon`]),W($,{label:`agent`,icon:N(Vu)},{default:P(()=>[W(N(QT),{variant:`secondary`},{default:P(()=>[G(j(r.value.agent),1)]),_:1})]),_:1},8,[`icon`]),i.value?.model??r.value.model?(B(),H($,{key:0,label:`模型`,icon:N(ud)},{default:P(()=>[U(`span`,wP,j(i.value?.model??r.value.model),1)]),_:1},8,[`icon`])):K(``,!0),r.value.effort?(B(),H($,{key:1,label:`effort`,icon:N(wd)},{default:P(()=>[G(j(r.value.effort),1)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`開始`,icon:N(rd)},{default:P(()=>[W(_P,{at:r.value.started,class:`text-xs`},null,8,[`at`])]),_:1},8,[`icon`]),r.value.branch?(B(),H($,{key:2,label:`分支`,icon:N(Td)},{default:P(()=>[W(CD,{text:r.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),r.value.worktree?(B(),H($,{key:3,label:`worktree`,icon:N(xd)},{default:P(()=>[W(CD,{text:r.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),W($,{label:`工作目錄`,icon:N(Sd)},{default:P(()=>[W(CD,{text:r.value.cwd},null,8,[`text`])]),_:1},8,[`icon`]),r.value.transcript?(B(),H($,{key:4,label:`對話紀錄`,icon:N(Xd)},{default:P(()=>[W(CD,{text:r.value.transcript,class:`min-w-0`},null,8,[`text`]),W(N(sC),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground`,title:`在 Finder 顯示`,"aria-label":`在 Finder 顯示`,onClick:c[0]||=e=>N(dw)(()=>N(XC).reveal(r.value.transcript))},{default:P(()=>[W(N(yd))]),_:1})]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(MD,{title:`行動佇列`,count:r.value.actions.length},{default:P(()=>[U(`ul`,TP,[(B(!0),V(z,null,L(r.value.actions,e=>(B(),V(`li`,{key:e.id,class:`flex flex-col`},[U(`button`,{type:`button`,class:`-mx-2 flex min-h-8 items-start gap-2 rounded-md px-2 py-1.5 text-left transition-colors duration-[120ms] hover:bg-accent/50`,"aria-expanded":a.value===e.id,onClick:t=>a.value=a.value===e.id?null:e.id},[a.value===e.id?(B(),H(N(Ju),{key:0,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(Xu),{key:1,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})),W(wE,{status:e.status,class:`mt-0.5 shrink-0`},null,8,[`status`]),U(`span`,DP,j(e.id),1),U(`span`,OP,j(e.do),1),e.startedAt?(B(),V(`span`,kP,j(N(sE)(e.startedAt))+j(e.doneAt?`–${N(sE)(e.doneAt)}`:``),1)):K(``,!0)],8,EP),U(`div`,AP,[(B(!0),V(z,null,L(e.serves,e=>(B(),H(Yj,q({key:e},{ref_for:!0},N(Mw)(e.split(`#`)[0]),{id:e,onOpen:()=>N(n)(e.split(`#`)[0],{chain:!0})}),null,16,[`id`,`onOpen`]))),128))]),e.note?(B(),V(`p`,jP,j(e.note),1)):K(``,!0),a.value===e.id?(B(),V(`div`,MP,[i.value?.available?e.startedAt?f(e.id)===0?(B(),V(`p`,FP,`這段時間沒有用到 skill、agent,也沒有載入 rule 或用 Read 讀檔。用 Bash 讀的檔不會出現在這裡。`)):K(``,!0):(B(),V(`p`,PP,`這個行動沒有開始時間,追溯不到它的時間窗。`)):(B(),V(`p`,NP,`沒有對話紀錄,無法追溯。`)),(B(!0),V(z,null,L(d(e.id),e=>(B(),V(`div`,{key:e.kind,class:`flex flex-wrap items-baseline gap-1.5`},[U(`span`,IP,j(N(Kw)[e.kind]),1),(B(!0),V(z,null,L(e.items,e=>(B(),H(N(QT),{key:e.path??e.name,variant:`secondary`,class:`font-mono font-normal`,title:e.path??e.name},{default:P(()=>[G(j(e.name),1),e.count>1?(B(),V(`span`,LP,`×`+j(e.count),1)):K(``,!0),e.detail?.startsWith(`blocked`)?(B(),V(`span`,RP,`擋下`)):K(``,!0)]),_:2},1032,[`title`]))),128))]))),128))])):K(``,!0)]))),128))]),r.value.actions.length===0?(B(),V(`p`,zP,`這個會話沒有行動。`)):K(``,!0)]),_:1},8,[`count`]),W(MD,{title:`委派與接手`,count:s.value.length},{default:P(()=>[(B(!0),V(z,null,L(s.value,e=>(B(),H(wj,{key:e.label+e.id,peek:N(TC)(e.id),label:e.label,title:o(e.id)?N(Dw)(o(e.id)):e.id,status:o(e.id)?.status},null,8,[`peek`,`label`,`title`,`status`]))),128)),s.value.length===0?(B(),V(`p`,BP,`沒有委派或交接關係。`)):K(``,!0)]),_:1},8,[`count`]),W(MD,{title:`服務的項目與條件`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(wj,{key:e.ref,peek:e.task,id:e.ref,title:e.text},{default:P(()=>[W(N(mE),{"model-value":e.done,disabled:``,class:`pointer-events-none`,"aria-label":e.done?`已完成`:`未完成`},null,8,[`model-value`,`aria-label`])]),_:2},1032,[`peek`,`id`,`title`]))),128))]),_:1},8,[`count`]),i.value?.unattributed.length?(B(),H(MD,{key:0,title:`沒有對應行動的使用`,count:i.value.unattributed.length},{default:P(()=>[(B(!0),V(z,null,L(u(i.value.unattributed),e=>(B(),V(`div`,{key:e.kind,class:`flex min-h-7 items-center gap-2 text-xs`},[U(`span`,VP,j(N(Kw)[e.kind]),1),U(`span`,HP,j(e.items.length),1)]))),128))]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,UP,`這台電腦上沒有會話 `+j(e.id)+`。`,1))}}),GP={key:0,class:`pb-8`},KP={class:`truncate`},qP={key:0,class:`flex items-center gap-1.5`},JP={key:1},YP={key:2},XP={key:0,class:`text-xs`},ZP={class:`text-xs`},QP={class:`text-xs`},$P={class:`text-xs`},eF={class:`shrink-0 font-mono`},tF={class:`truncate`},nF={key:0,class:`text-sm text-muted-foreground`},rF={key:1,class:`px-5 text-muted-foreground`},iF=I({__name:`TaskPeek`,props:{m:{},t:{}},setup(e){let t=e,{open:n}=FC(),{mainline:r}=Xj(()=>t.m),i=J(()=>r.value?.tasks.find(e=>e.id===t.t)),a=J(()=>r.value?.tasks.filter(e=>e.parent===t.t)??[]),o=J(()=>(i.value?.checklist??[]).filter(e=>!e.dropped)),s=J(()=>jw(t.m,t.t)),c=e=>n(e,{chain:!0}),l=J(()=>{let e=i.value?.blockedBy?.waitingFor,t=e?Lw(e):void 0;return t&&t!==`session`&&!e.startsWith(`file:`)?e:void 0});Er(()=>Pw([l.value]));let u=e=>e.slice((r.value?.dir.length??0)+1),d=e=>e.slice(e.lastIndexOf(`/`)+1),f=e=>i.value&&dw(()=>XC.taskStatus(t.m,t.t,e,i.value.version));return(n,p)=>i.value&&N(r)?(B(),V(`div`,GP,[W(OD,{id:`${e.m}/${i.value.id}`,title:i.value.title,type:N(Iw)(i.value),status:i.value.status},{notice:P(()=>[i.value.blockedBy?(B(),H(N(_g),{key:0,variant:`warning`},{default:P(()=>[W(N(ed)),W(N(yg),null,{default:P(()=>[G(`卡住:`+j(i.value.blockedBy.reason),1)]),_:1}),W(N(vg),{class:`text-xs text-muted-foreground`},{default:P(()=>[l.value?(B(),V(`p`,qP,[p[0]||=G(`等待 `,-1),W(Yj,q(N(Mw)(l.value),{onOpen:c}),null,16)])):i.value.blockedBy.waitingFor?(B(),V(`p`,JP,`等待 `+j(i.value.blockedBy.waitingFor),1)):K(``,!0),i.value.blockedBy.signal?(B(),V(`p`,YP,`看到「`+j(i.value.blockedBy.signal)+`」就可以繼續`,1)):K(``,!0)]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(fP,{status:i.value.status,options:N(Vw),onChange:f},null,8,[`status`,`options`]),U(`span`,KP,j(N(r).title),1)]),_:1},8,[`id`,`title`,`type`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`checklist`,icon:N(Pd)},{default:P(()=>[W(JN,{done:o.value.filter(e=>e.done).length,total:o.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),i.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,XP,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`種類`,icon:N(Ad)},{default:P(()=>[G(j(i.value.kind===`branch`?`分支`:`階段`),1)]),_:1},8,[`icon`]),i.value.parent?(B(),H($,{key:1,label:`上層任務`,icon:N(ld)},{default:P(()=>[W(Yj,q(N(Mw)(N(CC)(e.m,i.value.parent)),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0),i.value.repo?(B(),H($,{key:2,label:`倉庫`,icon:N(vd)},{default:P(()=>[G(j(i.value.repo),1)]),_:1},8,[`icon`])):K(``,!0),i.value.branch?(B(),H($,{key:3,label:`分支`,icon:N(Td)},{default:P(()=>[W(CD,{text:i.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.base?(B(),H($,{key:4,label:`基底`,icon:N(Ed)},{default:P(()=>[W(CD,{text:i.value.base},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.worktree?(B(),H($,{key:5,label:`worktree`,icon:N(xd)},{default:P(()=>[W(CD,{text:i.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.merge?(B(),H($,{key:6,label:`合併狀態`,icon:N(Dd)},{default:P(()=>[G(j(N(Yw)[i.value.merge]),1)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:7,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:8,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,ZP,j(i.value.created),1)]),_:1},8,[`icon`]),i.value.startedAt?(B(),H($,{key:9,label:`開始`,icon:N(Wd)},{default:P(()=>[U(`span`,QP,j(i.value.startedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.closedAt?(B(),H($,{key:10,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,$P,j(i.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:11,label:`結果`,icon:N($u)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:12,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(i.value.origin),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(MD,{title:`checklist`,count:i.value.checklist.length},{default:P(()=>[W(WN,{items:i.value.checklist,"ref-prefix":`${e.m}/${i.value.id}#`,version:i.value.version},null,8,[`items`,`ref-prefix`,`version`])]),_:1},8,[`count`]),i.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.artifacts.length?(B(),H(MD,{key:1,title:`產物`,count:i.value.artifacts.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.artifacts,t=>(B(),H(wj,{key:t,peek:N(EC)(e.m,u(t)),title:d(t)},null,8,[`peek`,`title`]))),128))]),_:1},8,[`count`])):K(``,!0),a.value.length?(B(),H(MD,{key:2,title:`子任務`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,t=>(B(),H(wj,{key:t.id,peek:N(CC)(e.m,t.id),id:t.id,title:t.title,status:t.status},null,8,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(Pj,{self:N(CC)(t.m,t.t),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(MD,{key:3,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(zj,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`服務它的行動`,count:s.value.reduce((e,t)=>e+t.actions.length,0)},{default:P(()=>[(B(!0),V(z,null,L(s.value,({session:e,actions:t})=>(B(),V(z,{key:e.id},[W(wj,{peek:N(TC)(e.id),title:N(Dw)(e),status:e.status},null,8,[`peek`,`title`,`status`]),(B(!0),V(z,null,L(t,e=>(B(),V(`div`,{key:e.id,class:`flex min-h-7 items-center gap-2 pl-6 text-xs text-muted-foreground`},[W(wE,{status:e.status,class:`shrink-0`},null,8,[`status`]),U(`span`,eF,j(e.id),1),U(`span`,tF,j(e.do),1)]))),128))],64))),128)),s.value.length===0?(B(),V(`p`,nF,`這台電腦上沒有服務這個任務的行動。`)):K(``,!0)]),_:1},8,[`count`])])):(B(),V(`p`,rF,`載入 `+j(e.m)+`/`+j(e.t)+`…`,1))}}),aF={class:`flex h-11 shrink-0 items-center gap-1 px-2`},oF={key:0,class:`truncate text-xs text-muted-foreground`},sF={key:1,class:`ml-2 text-xs text-status-done`,role:`status`},cF={class:`min-h-0 flex-1 overflow-auto`},lF=`mainflow.panelWidth`,uF=360,dF=1200,fF=aT(I({__name:`PeekPanel`,setup(e){let{current:t,trail:n,full:r,back:i,close:a,toggleFull:o}=FC(),s=Number($C(lF,880)),c=M(s>=uF&&s<=dF?s:880);function l(e){let t=e.clientX,n=c.value,r=e=>c.value=Math.min(dF,Math.max(uF,n+t-e.clientX)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(lF,c.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}let u=J(()=>{let e=AC(n.value.at(-1));return e?e.kind===`session`?`會話`:e.kind===`file`?e.path.split(`/`).at(-1):e.kind===`conflict`?`存檔`:e.ref:``});return(e,s)=>N(t)?(B(),V(`aside`,{key:0,class:k([`peek-panel flex min-h-0 flex-col border-l bg-background max-[1100px]:shadow-lg`,N(r)?`flex-1`:`shrink-0`]),style:he({"--panel-width":`${c.value}px`}),"aria-label":`預覽面板`},[N(r)?K(``,!0):(B(),V(`div`,{key:0,class:`absolute inset-y-0 -left-1 w-2 cursor-col-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`拖曳調整面板寬度`,onPointerdown:au(l,[`prevent`])},null,32)),U(`div`,aF,[W(N(sC),{variant:`ghost`,size:`icon-sm`,disabled:!N(n).length,"aria-label":`上一步`,title:`上一步`,onClick:N(i)},{default:P(()=>[W(N(Yu))]),_:1},8,[`disabled`,`onClick`]),u.value?(B(),V(`span`,oF,`回到 `+j(u.value),1)):K(``,!0),N(jC)?(B(),V(`span`,sF,j(N(jC)),1)):K(``,!0),s[0]||=U(`span`,{class:`ml-auto`},null,-1),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":N(r)?`回到並排`:`開成整頁`,title:N(r)?`回到並排`:`開成整頁`,onClick:N(o)},{default:P(()=>[N(r)?(B(),H(N(Bd),{key:0})):(B(),H(N(Rd),{key:1}))]),_:1},8,[`aria-label`,`title`,`onClick`]),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":`關閉(Esc)`,title:`關閉(Esc)`,onClick:N(a)},{default:P(()=>[W(N(uf))]),_:1},8,[`onClick`])]),U(`div`,cF,[N(t).kind===`task`?(B(),H(iF,{key:N(t).ref,m:N(t).m,t:N(t).t},null,8,[`m`,`t`])):N(t).kind===`decision`?(B(),H(oM,{key:N(t).ref,m:N(t).m,d:N(t).d},null,8,[`m`,`d`])):N(t).kind===`file`?(B(),H(NM,{key:N(t).ref,m:N(t).m,path:N(t).path},null,8,[`m`,`path`])):N(t).kind===`session`?(B(),H(WP,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`mainline`?(B(),H(hP,{key:N(t).ref,m:N(t).m},null,8,[`m`])):N(t).kind===`issue`?(B(),H(xN,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`conflict`?(B(),H(qD,{key:N(t).ref,saved:N(t).saved},null,8,[`saved`])):N(t).kind===`group`?(B(),H(mN,{key:N(t).ref,id:N(t).id},null,8,[`id`])):(B(),H(zM,{key:N(t).ref,id:N(t).id},null,8,[`id`]))])],6)):K(``,!0)}}),[[`__scopeId`,`data-v-d9c80ff7`]]),pF={class:`flex h-full min-h-0 flex-col`},mF={class:`relative flex min-h-0 flex-1`},hF={class:`@container min-w-0 flex-1 overflow-auto`,"data-peek-list":``},gF=I({__name:`PageLayout`,setup(e){let{current:t,full:n}=FC();return(e,r)=>(B(),V(`div`,pF,[R(e.$slots,`header`),U(`div`,mF,[yr(U(`div`,hF,[R(e.$slots,`default`)],512),[[Vc,!(N(t)&&N(n))]]),W(fF)])]))}});function _F(e,t){let n=Qt(new Set),r=e.spec.id,i=t=>[...t.leader?[t.leader]:[],...t.items,...t.ended].flatMap(t=>[t,...(e.spec.nested?.(t)??[]).map(e=>e.item)]),a=J(()=>[...new Map(e.groups.value.flatMap(i).map(e=>[r(e),e])).values()]);F(a,e=>{let t=new Set(e.map(r));for(let e of n)t.has(e)||n.delete(e)});let o=J(()=>a.value.filter(e=>n.has(r(e)))),s=e=>{let t=e.filter(e=>n.has(r(e))).length;return t===0?!1:t===e.length||`indeterminate`},c=(e,t)=>e.forEach(e=>t?n.add(r(e)):n.delete(r(e)));async function l(e){let i=o.value.filter(n=>t.archived(n)!==e).map(r);i.length&&await dw(async()=>{let n=await XC.archiveMany(t.kind,i,e);if(n.failed.length)throw Error(`${n.failed.length} 個沒有${e?`封存`:`取消封存`}:${n.failed.map(e=>`${e.id}(${e.error})`).join(`、`)}`)})&&n.clear()}return{selected:o,active:J(()=>o.value.length>0),all:J(()=>s(a.value)),groupChecked:e=>s(i(e)),has:e=>n.has(r(e)),toggle:(e,t)=>c([e],t),setAll:e=>c(a.value,e),setGroup:(e,t)=>c(i(e),t),clear:()=>n.clear(),archivable:J(()=>o.value.filter(e=>!t.archived(e)).length),restorable:J(()=>o.value.filter(e=>t.archived(e)).length),setArchived:l}}var vF={key:0,class:`shrink-0 text-xs text-muted-foreground`},yF=[`title`],bF=I({__name:`FindingList`,setup(e){let t=[`valid`,`obsolete`],n=eN({key:`findings`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(t)},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels??[]},{key:`applies`,label:`適用範圍`,values:e=>e.appliesTo??[]}],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`applies`,label:`適用範圍`,value:e=>e.appliesTo?.join(`、`),dir:`asc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`},{key:`review`,label:`重新確認日`,value:e=>e.reviewAfter,dir:`asc`}],groups:[KM(t),{key:`category`,label:`分類`,value:e=>e.category??`未分類`}],defaultSort:`created`,defaultGroup:`status`,ended:e=>UM(e.status),archived:e=>!!e.archivedAt},()=>Q.findings),r=_F(n,{kind:`finding`,archived:e=>!!e.archivedAt}),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`applies`,label:`適用範圍`,class:`max-w-72 truncate font-mono text-xs text-muted-foreground`,sort:`applies`,value:e=>e.appliesTo,optional:!0},{key:`review`,label:`重新確認`,sort:`review`,value:e=>e.reviewAfter}],a=e=>dw(()=>XC.archiveFinding(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`發現`,description:`踩過的坑與經驗。下一個任務動手前先看這裡。`}),W(oD,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[(B(!0),V(z,null,L(e.labels??[],e=>(B(),H(N(QT),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,vF,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),applies:P(({item:e})=>[U(`span`,{title:e.appliesTo?.join(`
81
- `)},j(e.appliesTo?.join(`、`)),9,yF)]),review:P(({item:e})=>[W(pE,{day:e.reviewAfter,ended:e.status===`obsolete`},null,8,[`day`,`ended`])]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>a(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`還沒有發現。用 `,-1),U(`code`,null,`mainflow new finding <slug> --title <title>`,-1),G(` 記下來。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),xF=e=>(e.plannedIn??e.origin??``).match(/^m\d{3}/)?.[0]??``,SF=e=>e?`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim():`不屬於主脈絡`,CF=`未分類`,wF=`沒有標籤`,TF=e=>e.labels?.length?e.labels:[wF],EF=e=>[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(e)},{key:`priority`,label:`優先度`,values:e=>[VM(e.priority)],options:BM},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels??[]},{key:`mainline`,label:`來源主脈絡`,values:e=>[xF(e)].filter(Boolean),optionLabel:SF},sN(e=>e.group)],DF=e=>[KM(e),{key:`category`,label:`分類`,value:e=>e.category??CF,trailing:[CF]},{key:`label`,label:`標籤`,value:e=>TF(e)[0],values:TF,trailing:[wF]},{key:`priority`,label:`優先度`,value:e=>VM(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`mainline`,label:`主脈絡`,value:xF,groupLabel:SF,trailing:[``]},oN(e=>e.group)],OF={key:0,class:`shrink-0 text-xs text-muted-foreground`},kF=I({__name:`IssueList`,setup(e){let t=[`open`,`planned`,`closed`],n=eN({key:`issues`,id:e=>e.id,text:e=>e.title,filters:EF(t),sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`planned`,label:`排入`,value:e=>e.plannedIn,dir:`asc`},{key:`origin`,label:`來源`,value:e=>e.origin,dir:`asc`},{key:`order`,label:`手動順序`,value:e=>e.order,dir:`asc`},{key:`priority`,label:`優先度`,value:e=>VM(e.priority),dir:`asc`},{key:`due`,label:`到期`,value:e=>e.due,dir:`asc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`}],groups:DF(t),defaultSort:`order`,defaultGroup:`status`,ended:e=>UM(e.status),archived:e=>!!e.archivedAt},()=>Q.issues),r=_F(n,{kind:`issue`,archived:e=>!!e.archivedAt}),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`due`,label:`到期`,sort:`due`,value:e=>e.due},{key:`planned`,label:`排入`,class:`max-w-56`,sort:`planned`,value:e=>e.plannedIn},{key:`origin`,label:`來源`,class:`max-w-56`,sort:`origin`,value:e=>e.origin,optional:!0}],{open:a}=FC();Er(()=>Pw(Q.issues.flatMap(e=>[e.plannedIn,e.origin])));let o=e=>dw(()=>XC.archiveIssue(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`待辦事項`,description:`跨主脈絡的後續事項。主脈絡結束或封存後仍留在這裡。`}),W(oD,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[e.archivedAt?(B(),V(`span`,OF,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),due:P(({item:e})=>[W(pE,{day:e.due,ended:e.status===`closed`},null,8,[`day`,`ended`])]),planned:P(({item:e})=>[e.plannedIn?(B(),H(Yj,q({key:0},N(Mw)(e.plannedIn),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),origin:P(({item:e})=>[e.origin?(B(),H(Yj,q({key:0},N(Mw)(e.origin),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>o(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`沒有待辦事項。用 `,-1),U(`code`,null,`mainflow new issue <slug> --title <title>`,-1),G(` 記下主脈絡結束後還要處理的事。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),AF=I({__name:`Tabs`,props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=F_(Sf(n,`class`),r);return(e,t)=>(B(),H(N(nC),q({"data-slot":`tabs`},N(i),{class:N(gg)(`flex flex-col gap-2`,n.class)}),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16,[`class`]))}}),jF=I({__name:`TabsList`,props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},variant:{default:`default`}},setup(e){let t=e,n=Sf(t,`class`,`variant`);return(r,i)=>(B(),H(N(aC),q({"data-slot":`tabs-list`,"data-variant":e.variant},N(n),{class:N(gg)(`group/tabs-list text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-0.75`,e.variant===`line`?`gap-1 rounded-none bg-transparent p-0`:`bg-muted`,t.class)}),{default:P(()=>[R(r.$slots,`default`)]),_:3},16,[`data-variant`,`class`]))}}),MF=I({__name:`TabsTrigger`,props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(oC),q({"data-slot":`tabs-trigger`,class:N(gg)(`data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-3 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:text-foreground/60 group-data-[variant=line]/tabs-list:hover:text-foreground group-data-[variant=line]/tabs-list:data-[state=active]:text-foreground group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,t.class)},N(n)),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),NF={class:`w-full text-body`},PF={colspan:`3`,class:`sticky top-9 z-[5] bg-background px-6 pt-4 pb-1`},FF={class:`flex items-center gap-2 text-sm`},IF={key:0,class:`grid size-4 shrink-0 place-items-center rounded-[4px] border border-dashed text-[10px] text-muted-foreground`,"aria-label":`已不需要`},LF={class:`font-mono text-xs text-muted-foreground`},RF=[`title`],zF={key:1,class:`font-medium text-muted-foreground`},BF={class:`flex min-w-0 items-center gap-2`},VF={class:`shrink-0 font-mono text-xs text-muted-foreground`},HF=[`title`],UF={class:`flex min-w-0 items-center gap-2 text-xs`},WF={class:`truncate`},GF={key:0},KF={colspan:`3`,class:`px-6 pb-2 text-xs text-muted-foreground`},qF={key:1},JF={key:0,class:`px-6 py-16 text-center text-sm text-muted-foreground`},YF=I({__name:`CriteriaView`,props:{mainline:{}},setup(e){let t=e,{open:n,current:r}=FC(),i=J(()=>t.mainline.tasks.flatMap(e=>e.checklist.filter(e=>!e.dropped).map(t=>({task:e,item:t})))),a=J(()=>[...t.mainline.criteria.map(e=>({key:e.id,criterion:e,rows:i.value.filter(t=>t.item.serves?.includes(e.id))})),{key:``,criterion:void 0,rows:i.value.filter(e=>!e.item.serves?.length)}].filter(e=>e.criterion||e.rows.length)),o=e=>r.value?.ref===e||void 0;return(t,r)=>(B(),V(z,null,[U(`table`,NF,[W(N(yE),{class:`sticky top-0 z-10 bg-background [&_tr]:border-b`},{default:P(()=>[W(N(_E),{class:`hover:bg-transparent`},{default:P(()=>[W(N(vE),{class:`pl-6`},{default:P(()=>[...r[0]||=[G(`checklist 項目`,-1)]]),_:1}),W(N(vE),{class:`w-72`},{default:P(()=>[...r[1]||=[G(`任務`,-1)]]),_:1}),W(N(vE),{class:`w-28 pr-6`},{default:P(()=>[...r[2]||=[G(`完成`,-1)]]),_:1})]),_:1})]),_:1}),(B(!0),V(z,null,L(a.value,t=>(B(),H(N(hE),{key:t.key,class:`[&_tr:last-child]:border-b`},{default:P(()=>[U(`tr`,null,[U(`td`,PF,[U(`div`,FF,[t.criterion?(B(),V(z,{key:0},[t.criterion.dropped?(B(),V(`span`,IF,`–`)):(B(),H(N(mE),{key:1,"model-value":t.criterion.done,disabled:``,class:`pointer-events-none`,"aria-label":t.criterion.done?`已達成`:`未達成`},null,8,[`model-value`,`aria-label`])),U(`span`,LF,j(t.criterion.id),1),U(`span`,{class:k([`min-w-0 truncate font-medium`,{"text-muted-foreground line-through":t.criterion.dropped}]),title:t.criterion.text},j(t.criterion.text),11,RF),t.criterion.dropped?K(``,!0):(B(),H(JN,{key:2,class:`ml-auto shrink-0`,done:t.rows.filter(e=>e.item.done).length,total:t.rows.length},null,8,[`done`,`total`]))],64)):(B(),V(`span`,zF,`沒有推進任何解決條件`))])])]),(B(!0),V(z,null,L(t.rows,t=>(B(),H(N(_E),{key:`${t.task.id}#${t.item.id}`,class:`h-9 transition-colors duration-[120ms]`,"data-peek":N(CC)(e.mainline.id,t.task.id),"aria-current":o(N(CC)(e.mainline.id,t.task.id)),onClick:r=>N(n)(N(CC)(e.mainline.id,t.task.id))},{default:P(()=>[W(N(gE),{class:`max-w-0 pl-6`},{default:P(()=>[U(`span`,BF,[U(`span`,VF,j(t.task.id)+`#`+j(t.item.id),1),U(`span`,{class:k([`truncate`,{"text-muted-foreground":t.item.done}]),title:t.item.text},j(t.item.text),11,HF)])]),_:2},1024),W(N(gE),{class:`max-w-72`},{default:P(()=>[U(`span`,UF,[W(Qw,{type:N(Iw)(t.task),status:t.task.status},null,8,[`type`,`status`]),U(`span`,WF,j(t.task.title),1)])]),_:2},1024),W(N(gE),{class:`pr-6 text-xs text-muted-foreground`},{default:P(()=>[G(j(t.item.done?t.item.doneAt??`已完成`:``),1)]),_:2},1024)]),_:2},1032,[`data-peek`,`aria-current`,`onClick`]))),128)),t.criterion?.dropped?(B(),V(`tr`,GF,[U(`td`,KF,[r[3]||=G(`不再需要`,-1),t.criterion.note?(B(),V(z,{key:0},[G(`:`+j(t.criterion.note),1)],64)):K(``,!0)])])):t.criterion&&t.rows.length===0?(B(),V(`tr`,qF,[...r[4]||=[U(`td`,{colspan:`3`,class:`px-6 pb-2 text-xs text-muted-foreground`},`還沒有 checklist 項目推進這條條件。`,-1)]])):K(``,!0)]),_:2},1024))),128))]),a.value.length===0?(B(),V(`p`,JF,`這條主脈絡還沒有解決條件。`)):K(``,!0)],64))}}),XF={key:0,class:`shrink-0 text-xs text-muted-foreground`},ZF=[`title`],QF=I({__name:`DecisionTable`,props:{mainline:{}},setup(e){let t=e,n=[`proposed`,`accepted`,`superseded`],r=eN({key:`decisions`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(n)},{key:`by`,label:`決策者`,values:e=>e.by?[e.by]:[],optionLabel:e=>qw[e]??e},{key:`basis`,label:`裁決方式`,values:e=>e.basis?[e.basis]:[],optionLabel:e=>Jw[e]??e}],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`by`,label:`決策者`,value:e=>e.by,dir:`asc`},{key:`reversible`,label:`能否改回`,value:e=>e.reversible===void 0?null:+!!e.reversible,dir:`desc`},{key:`created`,label:`建立`,value:e=>iE(e.created),dir:`desc`},{key:`decided`,label:`裁決時間`,value:e=>e.decidedAt?iE(e.decidedAt):void 0,dir:`desc`}],groups:[KM(n)],defaultSort:`created`,defaultGroup:`status`,ended:e=>UM(e.status)},()=>t.mainline.decisions),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`by`,label:`決策者`,class:`text-xs text-muted-foreground`,sort:`by`,value:e=>e.by},{key:`basis`,label:`裁決方式`,class:`text-xs text-muted-foreground`,value:e=>e.basis},{key:`decided`,label:`裁決`,class:`font-mono text-xs text-muted-foreground tabular-nums`,sort:`decided`,value:e=>e.decidedAt},{key:`affects`,label:`影響`,class:`max-w-56 truncate font-mono text-xs text-muted-foreground`,value:e=>e.affects,optional:!0},{key:`reversible`,label:`能否改回`,class:`text-xs text-muted-foreground`,sort:`reversible`,value:e=>e.reversible,optional:!0}];return(t,n)=>(B(),V(z,null,[W(oD,{view:N(r)},null,8,[`view`]),W(XE,{view:N(r),columns:i,"item-ref":t=>N(wC)(e.mainline.id,t.id)},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:e.status===`superseded`},{default:P(()=>[e.supersededBy?(B(),V(`span`,XF,`由 `+j(e.supersededBy)+` 取代`,1)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),by:P(({item:e})=>[G(j(e.by?N(qw)[e.by]:``),1)]),basis:P(({item:e})=>[G(j(e.basis?N(Jw)[e.basis]:``),1)]),decided:P(({item:e})=>[G(j(e.decidedAt?N(cE)(e.decidedAt):``),1)]),affects:P(({item:e})=>[U(`span`,{title:e.affects?.join(`
82
- `)},j(e.affects?.join(`、`)),9,ZF)]),reversible:P(({item:e})=>[G(j(e.reversible===void 0?``:e.reversible?`可以`:`不易改回`),1)]),empty:P(()=>[n[0]||=G(`還沒有決策。用 `,-1),U(`code`,null,`mainflow new decision `+j(e.mainline.id)+` <slug> --title <title>`,1),n[1]||=G(` 記下選擇與理由。`,-1)]),_:1},8,[`view`,`item-ref`])],64))}}),$F={class:`flex min-w-0 items-center gap-2`},eI=[`href`,`title`],tI=[`title`],nI={key:0,class:`whitespace-nowrap`},rI=[`title`],iI=`-`,aI=I({__name:`FilesView`,props:{mainline:{}},setup(e){let t=e,n=J(()=>CM(t.mainline)),r=e=>{let n=t.mainline.tasks.find(t=>t.id===e)??t.mainline.decisions.find(t=>t.id===e);return n?`${e} ${n.title}`:e===iI||!e?`主脈絡本身`:e},i=eN({key:`files`,id:e=>e.key,text:e=>`${e.name} ${e.path??``}`,filters:[{key:`kind`,label:`類型`,values:e=>[e.kind],options:bM.map(e=>({value:e,label:e}))},{key:`source`,label:`來源`,values:e=>[e.source??iI],optionLabel:r},{key:`ext`,label:`副檔名`,values:e=>e.ext?[e.ext]:[],optionLabel:e=>`.${e}`}],sorts:[{key:`kind`,label:`類型`,value:e=>bM.indexOf(e.kind),dir:`asc`},{key:`name`,label:`檔名`,value:e=>e.name,dir:`asc`},{key:`updated`,label:`更新`,value:e=>e.updated,dir:`desc`},{key:`source`,label:`來源`,value:e=>e.source,dir:`asc`}],groups:[{key:`kind`,label:`類型`,value:e=>e.kind,order:bM},{key:`source`,label:`來源`,value:e=>e.source??iI,groupLabel:r}],defaultSort:`kind`,defaultGroup:`kind`},()=>n.value),a=[{key:`name`,label:`檔名`,sort:`name`},{key:`kind`,label:`類型`,class:`text-xs text-muted-foreground`,sort:`kind`},{key:`source`,label:`來源`,class:`max-w-64 truncate text-xs text-muted-foreground`,sort:`source`,value:e=>e.source,optional:!0},{key:`updated`,label:`更新`,class:`text-xs text-muted-foreground`,sort:`updated`,value:e=>e.updated}],o=e=>e.inMainline?EC(t.mainline.id,e.inMainline):void 0;return(e,t)=>(B(),V(z,null,[W(oD,{view:N(i)},null,8,[`view`]),W(XE,{view:N(i),columns:a,"item-ref":o},{name:P(({item:e})=>[U(`span`,$F,[W(Qw,{type:N(zw)(e.url??e.key,e.kind)},null,8,[`type`]),e.url?(B(),V(`a`,{key:0,href:e.url,target:`_blank`,rel:`noreferrer`,class:`truncate underline decoration-border underline-offset-4 hover:decoration-foreground`,title:e.url,onClick:t[0]||=au(()=>{},[`stop`])},j(e.name),9,eI)):(B(),V(`span`,{key:1,class:k([`truncate`,{"font-mono text-xs":e.inMainline}]),title:e.inMainline??e.path},j(e.name),11,tI)),e.remoteOnly?(B(),H(N(ad),{key:2,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-label":`只在伺服器上`,title:`只在同步伺服器上,點開時下載`})):K(``,!0),e.path?(B(),H(CD,{key:3,text:e.path,class:`min-w-0`},null,8,[`text`])):K(``,!0)])]),kind:P(({item:e})=>[G(j(e.kind),1),e.remoteOnly?(B(),V(`span`,nI,`・只在伺服器上`)):K(``,!0)]),source:P(({item:e})=>[U(`span`,{title:r(e.source??``)},j(e.source?r(e.source):``),9,rI)]),updated:P(({item:e})=>[e.updated?(B(),H(_P,{key:0,at:e.updated},null,8,[`at`])):K(``,!0)]),empty:P(()=>[...t[1]||=[G(`這條主脈絡還沒有檔案。`,-1)]]),_:1},8,[`view`])],64))}}),oI=I({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(B(),V(`div`,{"data-slot":`card`,class:k(N(gg)(`bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm`,t.class))},[R(e.$slots,`default`)],2))}}),sI={class:`inline-flex gap-1.5 font-mono text-xs`},cI=[`title`],lI=I({__name:`DepList`,props:{deps:{},within:{}},setup(e){let t=e,n=e=>t.within&&e.startsWith(`${t.within}/`)?e.slice(t.within.length+1):e;return(t,r)=>(B(),V(`span`,sI,[(B(!0),V(z,null,L(e.deps,e=>(B(),V(`span`,{key:e.to,class:k(N(Xw)[e.state].tone),title:`${e.to} ${N(Xw)[e.state].label}`},j(n(e.to)),11,cI))),128))]))}}),uI={class:`flex items-center rounded-md border p-0.5`,role:`group`,"aria-label":`任務排列`},dI={key:0,class:`flex min-h-0 gap-3 overflow-x-auto px-6 pt-2 pb-6`},fI=[`aria-label`],pI={class:`flex items-center gap-2 py-1`},mI={class:`text-xs text-muted-foreground tabular-nums`},hI={class:`flex items-center gap-2 text-xs`},gI={class:`font-mono text-muted-foreground`},_I={class:`line-clamp-2 [overflow-wrap:anywhere]`},vI={class:`flex items-center justify-between gap-2`},yI={key:0,class:`min-w-0 truncate text-xs text-muted-foreground`},bI={key:0,class:`py-2 text-xs text-muted-foreground`},xI=[`title`],SI=`mainflow.list.tasks.mode`,CI=I({__name:`TaskViews`,props:{mainline:{}},setup(e){let t=e,n=[{key:`table`,label:`表格`,icon:Jd},{key:`board`,label:`看板`,icon:od},{key:`tree`,label:`樹狀`,icon:Ld}],r=$C(SI,`table`),i=M(n.some(e=>e.key===r)?r:`table`);function a(e){i.value=e,ew(SI,e)}let o=()=>t.mainline.tasks,s=J(()=>new Map(t.mainline.tasks.map(e=>[e.id,e])));function c(e){let t=e;for(;t?.kind===`branch`&&t.parent;)t=s.value.get(t.parent);return t?.id??e.id}let l=e=>e.checklist.filter(e=>e.done).length,u={id:e=>e.id,text:e=>`${e.title} ${e.branch??``}`,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(Vw)},{key:`priority`,label:`優先度`,values:e=>[VM(e.priority)],options:BM},{key:`repo`,label:`倉庫`,values:e=>e.repo?[e.repo]:[]},{key:`kind`,label:`種類`,values:e=>[e.kind],options:[{value:`phase`,label:`階段`},{value:`branch`,label:`分支`}]},{key:`label`,label:`標籤`,values:e=>e.labels??[]}]},d=eN({...u,key:`tasks`,sorts:[{key:`order`,label:`手動順序`,value:e=>e.order??Number(e.id.slice(1)),dir:`asc`},{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`repo`,label:`倉庫`,value:e=>e.repo,dir:`asc`},{key:`depends`,label:`依賴`,value:e=>b(e)[0]?.to,dir:`asc`},{key:`branch`,label:`分支`,value:e=>e.branch,dir:`asc`},{key:`status`,label:`狀態`,value:e=>Vw.indexOf(e.status),dir:`asc`},{key:`priority`,label:`優先度`,value:e=>VM(e.priority),dir:`asc`},{key:`progress`,label:`checklist 進度`,value:e=>e.checklist.length?l(e)/e.checklist.length:null,dir:`desc`}],groups:[{key:`phase`,label:`階段`,value:c,groupLabel:e=>s.value.get(e)?.title??e,status:e=>s.value.get(e)?.status,leader:e=>s.value.get(e)},KM(Vw),{key:`repo`,label:`倉庫`,value:e=>e.repo??`沒有指定倉庫`}],defaultSort:`order`,defaultGroup:`status`,ended:e=>UM(e.status)},o),f=e=>t.mainline.tasks.filter(t=>t.parent===e).sort((e,t)=>(e.order??1/0)-(t.order??1/0)||e.id.localeCompare(t.id)),p=(e,t=1)=>f(e.id).flatMap(e=>[{item:e,depth:t},...p(e,t+1)]),m=eN({...u,key:`tasks`,sorts:[{key:`order`,label:`手動順序`,value:e=>e.order??Number(e.id.slice(1)),dir:`asc`}],groups:[],defaultSort:`order`,defaultGroup:``,nested:e=>p(e)},()=>t.mainline.tasks.filter(e=>!e.parent||!s.value.has(e.parent))),h=J(()=>Vw.map(e=>({status:e,tasks:d.sorted.value.filter(t=>t.status===e)}))),g=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`progress`,label:`checklist`,sort:`progress`,value:e=>e.checklist.length},{key:`repo`,label:`倉庫`,class:`text-xs text-muted-foreground`,sort:`repo`,value:e=>e.repo},{key:`depends`,label:`依賴`,sort:`depends`,value:e=>b(e),optional:!0},{key:`branch`,label:`分支`,class:`max-w-56 truncate font-mono text-xs text-muted-foreground`,sort:`branch`,value:e=>e.branch,optional:!0}],{open:_,current:v}=FC(),y=e=>CC(t.mainline.id,e.id);function b(e){return Q.relations.deps.filter(t=>t.from===y(e))}return(t,r)=>(B(),V(z,null,[W(oD,{view:i.value===`tree`?N(m):N(d),grouping:i.value===`table`},{views:P(()=>[U(`div`,uI,[(B(),V(z,null,L(n,e=>W(N(sC),{key:e.key,variant:i.value===e.key?`secondary`:`ghost`,size:`xs`,"aria-pressed":i.value===e.key,onClick:t=>a(e.key)},{default:P(()=>[(B(),H(fa(e.icon))),G(j(e.label),1)]),_:2},1032,[`variant`,`aria-pressed`,`onClick`])),64))])]),_:1},8,[`view`,`grouping`]),i.value===`board`?(B(),V(`div`,dI,[(B(!0),V(z,null,L(h.value,e=>(B(),V(`section`,{key:e.status,class:`flex w-64 shrink-0 flex-col gap-2`,"aria-label":N(Gw)[e.status]},[U(`div`,pI,[W(TE,{status:e.status},null,8,[`status`]),U(`span`,mI,j(e.tasks.length),1)]),(B(!0),V(z,null,L(e.tasks,e=>(B(),H(N(oI),{key:e.id,class:k([`min-w-0 cursor-pointer gap-2 p-3 shadow-xs transition-colors duration-[120ms] hover:bg-accent/50`,{"bg-muted":N(v)?.ref===y(e)}]),"data-peek":y(e),"aria-current":N(v)?.ref===y(e)||void 0,onClick:t=>N(_)(y(e))},{default:P(()=>[U(`div`,hI,[W(Qw,{type:N(Iw)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,gI,j(e.id),1),W(xE,{priority:e.priority},null,8,[`priority`])]),U(`p`,_I,j(e.title),1),U(`div`,vI,[W(JN,{done:l(e),total:e.checklist.length},null,8,[`done`,`total`]),e.repo?(B(),V(`span`,yI,j(e.repo),1)):K(``,!0)])]),_:2},1032,[`class`,`data-peek`,`aria-current`,`onClick`]))),128)),e.tasks.length===0?(B(),V(`p`,bI,`沒有任務`)):K(``,!0)],8,fI))),128))])):(B(),H(XE,{key:1,view:i.value===`tree`?N(m):N(d),columns:g,"item-ref":y,"item-type":N(Iw)},{name:P(({item:e,depth:t})=>[W(hD,{status:e.status,id:e.id,title:e.title,depth:t,type:N(Iw)(e)},null,8,[`status`,`id`,`title`,`depth`,`type`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),progress:P(({item:e})=>[W(JN,{done:l(e),total:e.checklist.length},null,8,[`done`,`total`])]),repo:P(({item:e})=>[G(j(e.repo),1)]),depends:P(({item:t})=>[W(lI,{deps:b(t),within:e.mainline.id},null,8,[`deps`,`within`])]),branch:P(({item:e})=>[U(`span`,{title:e.branch},j(e.branch),9,xI)]),empty:P(()=>[r[0]||=G(`還沒有任務。執行 `,-1),U(`code`,null,`mainflow new task `+j(e.mainline.id)+` <slug> --title <title>`,1),r[1]||=G(` 建立。`,-1)]),_:1},8,[`view`,`item-type`]))],64))}}),wI={class:`px-6 pt-6 pb-3`},TI={class:`mt-1 text-title font-semibold`},EI={class:`mt-3 flex flex-wrap items-center gap-3 text-xs text-muted-foreground`},DI={key:0},OI={key:0,class:`text-xs text-muted-foreground tabular-nums`},kI={key:0,class:`max-w-5xl px-1 pt-2 pb-10`},AI={key:1,class:`px-6 py-16 text-center text-muted-foreground`},jI=`mainflow.mainlineView`,MI=I({__name:`MainlineDetail`,setup(e){let t=tp(),n=ep(),{id:r,mainline:i}=Xj(),a=[{key:`overview`,label:`概覽`},{key:`tasks`,label:`任務`},{key:`criteria`,label:`條件`},{key:`decisions`,label:`決策`},{key:`files`,label:`資料`}],o=J(()=>a.find(e=>e.key===t.query.view)?.key??`overview`),s=e=>{let t=i.value;if(t)return{overview:void 0,tasks:t.tasks.length,criteria:t.criteria.length,decisions:t.decisions.length,files:CM(t).length}[e]},c=e=>n.replace({query:{view:String(e)}});F(()=>[r.value,t.query.view,t.query.tab],([e,r,i])=>{if(!e||typeof i==`string`)return;let a=$C(jI,{});typeof r==`string`?ew(jI,{...a,[e]:r}):a[e]&&a[e]!==`overview`&&n.replace({query:{...t.query,view:a[e]}})},{immediate:!0}),Er(()=>{let e=t.query.tab;if(typeof e!=`string`)return;let{tab:r,...i}=t.query,a={...i,view:e===`views`?`files`:e};n.replace({query:a})});let l=e=>i.value&&dw(()=>XC.mainlineStatus(r.value,e,i.value.version)),u=e=>i.value&&dw(()=>XC.mainlineTitle(r.value,e,i.value.version)),d=()=>i.value&&dw(()=>XC.archive(r.value,!i.value.archivedAt,i.value.version));return(e,t)=>N(i)?(B(),H(gF,{key:0},{header:P(()=>[U(`header`,wI,[W(CD,{text:N(i).id},null,8,[`text`]),U(`h1`,TI,[W(wD,{value:N(i).title,onSave:u},null,8,[`value`])]),U(`div`,EI,[W(fP,{status:N(i).status,options:N(Bw),onChange:l},null,8,[`status`,`options`]),W(xE,{priority:N(i).priority},null,8,[`priority`]),N(i).archivedAt?(B(),V(`span`,DI,`已封存 `+j(N(i).archivedAt),1)):K(``,!0),W(eE,{class:`ml-auto`,archived:!!N(i).archivedAt,onToggle:d},null,8,[`archived`])])]),W(N(AF),{"model-value":o.value,"onUpdate:modelValue":c},{default:P(()=>[W(N(jF),{variant:`line`,class:`h-9 w-full justify-start border-b px-6`},{default:P(()=>[(B(),V(z,null,L(a,e=>W(N(MF),{key:e.key,value:e.key,class:`flex-none px-2`},{default:P(()=>[G(j(e.label),1),s(e.key)===void 0?K(``,!0):(B(),V(`span`,OI,j(s(e.key)),1))]),_:2},1032,[`value`])),64))]),_:1})]),_:1},8,[`model-value`])]),default:P(()=>[o.value===`overview`?(B(),V(`div`,kI,[W(cP,{mainline:N(i),columns:2},null,8,[`mainline`])])):o.value===`tasks`?(B(),H(CI,{key:1,mainline:N(i)},null,8,[`mainline`])):o.value===`criteria`?(B(),H(YF,{key:2,mainline:N(i)},null,8,[`mainline`])):o.value===`decisions`?(B(),H(QF,{key:3,mainline:N(i)},null,8,[`mainline`])):(B(),H(aI,{key:4,mainline:N(i)},null,8,[`mainline`]))]),_:1})):(B(),V(`p`,AI,`載入 `+j(N(r))+`…`,1))}}),NI={key:0,class:`shrink-0 text-xs text-muted-foreground`},PI=I({__name:`MainlineList`,setup(e){let t={key:`mainlines`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(Bw)},{key:`priority`,label:`優先度`,values:e=>[VM(e.priority)],options:BM},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels},sN(e=>e.group)],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`criteria`,label:`解決條件`,value:e=>e.criteria.total?e.criteria.done/e.criteria.total:null,dir:`desc`},{key:`priority`,label:`優先度`,value:e=>VM(e.priority),dir:`asc`},{key:`updated`,label:`更新`,value:e=>e.updated,dir:`desc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`},{key:`due`,label:`到期`,value:e=>e.due,dir:`asc`}],groups:[KM(Bw),{key:`priority`,label:`優先度`,value:e=>VM(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`category`,label:`分類`,value:e=>e.category??`未分類`},oN(e=>e.group)],defaultSort:`updated`,defaultGroup:`status`,ended:e=>UM(e.status),archived:e=>!!e.archivedAt},n=e=>Q.relations.mainlineDeps.filter(t=>t.from===e.id),r=eN(t,()=>Q.summary?.mainlines??[]),i=_F(r,{kind:`mainline`,archived:e=>!!e.archivedAt}),a=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`criteria`,label:`解決條件`,sort:`criteria`,value:e=>e.criteria.total},{key:`deps`,label:`依賴`,value:n,optional:!0},{key:`due`,label:`到期`,sort:`due`,value:e=>e.due},{key:`updated`,label:`更新`,class:`text-xs text-muted-foreground`,sort:`updated`,optional:!0}],o=e=>dw(()=>XC.archive(e.id,!e.archivedAt));return(e,t)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`主脈絡`,description:`一條主脈絡是一件要做完的事:意圖、解決條件,以及推進它的任務與決策。`}),W(oD,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(r),selection:N(i),columns:a,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[(B(!0),V(z,null,L(e.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,NI,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),criteria:P(({item:e})=>[W(JN,{done:e.criteria.done,total:e.criteria.total},null,8,[`done`,`total`])]),deps:P(({item:e})=>[W(lI,{deps:n(e)},null,8,[`deps`])]),due:P(({item:e})=>[W(pE,{day:e.due,ended:N(UM)(e.status)},null,8,[`day`,`ended`])]),updated:P(({item:e})=>[W(_P,{at:e.updated},null,8,[`at`])]),actions:P(({item:e})=>[W(N(sC),{variant:`ghost`,size:`xs`,class:`text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${e.id}`,onClick:t[0]||=au(()=>{},[`stop`])},{default:P(()=>[W(N(ef)),t[1]||=G(`開啟`,-1)]),_:1},8,[`to`])]),_:2},1024),W(eE,{archived:!!e.archivedAt,onToggle:t=>o(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[2]||=[G(`沒有主脈絡。在 hub 內執行 `,-1),U(`code`,null,`mainflow new mainline <slug> --title <title>`,-1),G(` 建立第一個。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(i)},null,8,[`selection`])]),_:1}))}}),FI=[`title`],II=[`title`],LI=[`title`],RI=I({__name:`OpsLog`,setup(e){let t=e=>!/fail|error|denied|reject|abort|失敗|錯誤|拒絕|中止/i.test(e.result),n=e=>e.ref?.match(/^m\d{3}/)?.[0]??``,r=eN({key:`ops`,id:e=>`${e.at}|${e.target}|${e.operation}`,text:e=>`${e.operation} ${e.target} ${e.ref??``}`,filters:[{key:`result`,label:`結果`,values:e=>[t(e)?`success`:`failed`],options:[{value:`success`,label:`成功`},{value:`failed`,label:`沒有成功`}]},{key:`target`,label:`目標系統`,values:e=>[e.target]},{key:`mainline`,label:`主脈絡`,values:e=>[n(e)].filter(Boolean),optionLabel:e=>`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim()}],sorts:[{key:`at`,label:`時間`,value:e=>iE(e.at),dir:`desc`},{key:`operation`,label:`操作`,value:e=>e.operation,dir:`asc`},{key:`target`,label:`目標系統`,value:e=>e.target,dir:`asc`},{key:`result`,label:`結果`,value:e=>+!!t(e),dir:`asc`},{key:`ref`,label:`關聯`,value:e=>e.ref,dir:`asc`}],groups:[{key:`month`,label:`月份`,value:e=>oE(e.at).slice(0,7),latestFirst:!0},{key:`day`,label:`日期`,value:e=>oE(e.at),latestFirst:!0}],defaultSort:`at`,defaultGroup:`month`},()=>Q.ops),i=[{key:`operation`,label:`操作`,sort:`operation`},{key:`target`,label:`目標系統`,class:`max-w-64 truncate font-mono text-xs text-muted-foreground`,sort:`target`,optional:!0},{key:`result`,label:`結果`,class:`max-w-40 truncate text-xs`,sort:`result`},{key:`ref`,label:`關聯`,class:`max-w-56`,sort:`ref`,value:e=>e.ref,optional:!0},{key:`at`,label:`時間`,class:`font-mono text-xs text-muted-foreground tabular-nums`,sort:`at`}],{open:a}=FC();return Er(()=>Pw(Q.ops.map(e=>e.ref))),(e,n)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`操作紀錄`,description:`對外部系統執行過的操作,只追加不改寫。`}),W(oD,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(r),columns:i},{operation:P(({item:e})=>[U(`span`,{class:`block truncate`,title:e.operation},j(e.operation),9,FI)]),target:P(({item:e})=>[U(`span`,{title:e.target},j(e.target),9,II)]),result:P(({item:e})=>[U(`span`,{class:k(t(e)?`text-muted-foreground`:`text-foreground`),title:e.result},[t(e)?K(``,!0):(B(),H(N(Qu),{key:0,class:`mr-1 inline size-3.5 align-[-2px] text-destructive`})),G(j(e.result),1)],10,LI)]),ref:P(({item:e})=>[e.ref?(B(),H(Yj,q({key:0},N(Mw)(e.ref),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),at:P(({item:e})=>[G(j(N(cE)(e.at).slice(5)),1)]),empty:P(()=>[...n[0]||=[G(`還沒有紀錄。用 `,-1),U(`code`,null,`mainflow ops add --target <系統> --op <操作> --result <結果>`,-1),G(` 記錄 push、發布、合併這類對外操作。`,-1)]]),_:1},8,[`view`])]),_:1}))}}),zI={key:0,class:`overflow-x-auto px-6 pb-2`},BI=[`aria-colcount`],VI=[`title`],HI={class:`text-xs text-muted-foreground tabular-nums`},UI={key:0,class:`col-span-full flex min-w-0 items-center gap-2 pt-4 pb-2 text-sm`,role:`rowheader`},WI=[`aria-label`,`aria-expanded`,`onClick`],GI={key:1,class:`truncate font-medium`},KI={class:`text-xs text-muted-foreground tabular-nums`},qI={key:1,class:`px-6 py-16 text-center text-sm text-muted-foreground`},JI=I({__name:`BoardView`,props:{view:{},axis:{}},setup(e){let t=e,n=J(()=>t.view.spec.groups.find(e=>e.key===t.axis)??t.view.spec.groups[0]),r=J(()=>JM(n.value,t.view.sorted.value)),i=J(()=>t.view.group.value!==``),a=(e,t)=>e.filter(e=>qM(n.value,e).includes(t)),o=e=>[...e.items,...e.ended];return(t,n)=>e.view.groups.value.length?(B(),V(`div`,zI,[U(`div`,{class:`grid gap-x-3`,style:he({gridTemplateColumns:`repeat(${r.value.length}, minmax(20rem, 1fr))`}),role:`table`,"aria-colcount":r.value.length},[(B(!0),V(z,null,L(r.value,e=>(B(),V(`div`,{key:e.key,class:`flex min-w-0 items-center gap-2 border-b py-2`,role:`columnheader`},[e.status?(B(),H(TE,{key:0,status:e.status},null,8,[`status`])):(B(),V(`span`,{key:1,class:`truncate text-sm font-medium`,title:e.label},j(e.label),9,VI)),U(`span`,HI,j(e.items.length),1)]))),128)),(B(!0),V(z,null,L(e.view.groups.value,n=>(B(),V(z,{key:n.key},[i.value?(B(),V(`div`,UI,[U(`button`,{type:`button`,class:`-ml-1 grid size-5 shrink-0 place-items-center rounded-sm hover:bg-accent`,"aria-label":e.view.collapsed.has(n.key)?`展開分組`:`收合分組`,"aria-expanded":!e.view.collapsed.has(n.key),onClick:t=>e.view.toggleCollapsed(n.key)},[e.view.collapsed.has(n.key)?(B(),H(N(Xu),{key:1,class:`size-4 text-muted-foreground`})):(B(),H(N(Ju),{key:0,class:`size-4 text-muted-foreground`}))],8,WI),n.status?(B(),H(TE,{key:0,status:n.status},null,8,[`status`])):(B(),V(`span`,GI,j(n.label),1)),U(`span`,KI,j(o(n).length),1)])):K(``,!0),!e.view.collapsed.has(n.key)||!i.value?(B(!0),V(z,{key:1},L(r.value,r=>(B(),V(`div`,{key:r.key,class:`flex min-w-0 flex-col gap-2 py-2`,role:`cell`},[(B(!0),V(z,null,L(a(o(n),r.key),n=>R(t.$slots,`card`,{item:n},void 0,void 0,e.view.spec.id(n))),128))]))),128)):K(``,!0)],64))),128))],12,BI)])):(B(),V(`div`,qI,[e.view.total.value>0?(B(),V(z,{key:0},[n[1]||=G(` 沒有符合條件的項目。`,-1),W(N(sC),{variant:`link`,size:`xs`,class:`px-0`,onClick:e.view.clearAll},{default:P(()=>[...n[0]||=[G(`清除篩選與搜尋`,-1)]]),_:1},8,[`onClick`])],64)):R(t.$slots,`empty`,{},void 0,void 0,1)]))}}),YI=.01,XI=e=>Math.min(2,Math.max(YI,e));function ZI(e,t,n,r){let i=XI(t),a=(n-e.x)/e.zoom,o=(r-e.y)/e.zoom;return{zoom:i,x:n-a*i,y:r-o*i}}function QI(e,t,n=.9){if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return{x:0,y:0,zoom:1};let r=XI(Math.min(1,t.width*n/e.width,t.height*n/e.height));return{zoom:r,x:(t.width-e.width*r)/2,y:(t.height-e.height*r)/2}}function $I(e){if(e.deltaMode!==0)return!0;let t=e.wheelDeltaY;return typeof t==`number`&&t!==0&&t%120==0&&e.deltaX===0}function eL(e,t){let n=new Set(t.flatMap(e=>[e.from,e.to])),r=new Map;for(let e of t)r.set(e.from,[...r.get(e.from)??[],e.to]);let i=new Map,a=new Set;function o(e){let t=i.get(e);if(t!==void 0)return t;if(a.has(e))return 0;a.add(e);let n=Math.max(0,...(r.get(e)??[]).map(e=>o(e)+1));return a.delete(e),i.set(e,n),n}let s=[];for(let t of e){if(!n.has(t))continue;let e=o(t);for(;s.length<=e;)s.push([]);s[e].push(t)}return{columns:s.filter(e=>e.length>0),free:e.filter(e=>!n.has(e))}}function tL(e,t,n){let r=e=>e===void 0?1/0:n.includes(e)?n.indexOf(e):n.length;return[...new Set([...e.columns.flat(),...e.free].map(t))].sort((e,t)=>r(e)-r(t)||(e??``).localeCompare(t??``)).map(n=>{let r=e.columns.map(e=>e.filter(e=>t(e)===n)),i=e.free.filter(e=>t(e)===n);return n===void 0?{columns:r,free:i}:{group:n,columns:r,free:i}})}var nL=[`data-node`,`aria-pressed`,`title`],rL={class:`flex min-w-0 items-center gap-2`},iL={class:`truncate`},aL={class:`shrink-0 font-mono text-xs text-muted-foreground`},oL=[`title`],sL={class:`h-1 w-12 overflow-hidden rounded-full bg-muted`},cL={class:`flex min-w-0 items-center gap-2`},lL=[`title`],uL=I({__name:`MainlineNode`,props:{id:{},picked:{type:Boolean}},emits:[`pick`],setup(e){let t=e,n=J(()=>Q.summary?.mainlines.find(e=>e.id===t.id)),r=J(()=>n.value?.title??Mw(t.id).title??``),i=J(()=>n.value?.status??Mw(t.id).status),a=J(()=>n.value?.items),o=J(()=>UM(i.value??``)),s=J(()=>OC(t.id)),c=J(()=>{let e=Q.mainlines[t.id]?.tasks;return e?GM(e):void 0}),l=J(()=>a.value?.total?Math.round(100*a.value.done/a.value.total):0);return(t,n)=>(B(),V(`button`,{type:`button`,class:k([`relative z-[1] flex w-full min-w-0 flex-col gap-1.5 rounded-xl border px-3 py-2.5 text-left transition-[background-color,border-color] duration-[120ms] focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-none`,[s.value?`border-dashed border-muted-foreground/60 bg-background hover:bg-[color-mix(in_oklab,var(--accent)_50%,var(--background))]`:`bg-card shadow-xs hover:bg-[color-mix(in_oklab,var(--accent)_50%,var(--card))]`,{"border-ring":e.picked}]]),"data-node":e.id,"aria-pressed":e.picked,title:s.value?`${e.id}:在新分頁開啟另一個 hub`:void 0,onClick:n[0]||=n=>t.$emit(`pick`,e.id,n)},[U(`span`,rL,[W(Qw,{type:`mainline`,status:i.value},null,8,[`status`]),s.value?(B(),H(N(QT),{key:0,variant:`outline`,class:`min-w-0 shrink font-mono text-[11px] text-muted-foreground`},{default:P(()=>[U(`span`,iL,j(s.value.hub),1)]),_:1})):K(``,!0),U(`span`,aL,j(s.value?.local??e.id),1),s.value?(B(),H(N(zu),{key:1,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`})):K(``,!0),a.value?(B(),V(`span`,{key:2,class:`ml-auto flex shrink-0 items-center gap-1.5 text-xs text-muted-foreground tabular-nums`,title:`checklist ${a.value.done}/${a.value.total}`},[U(`span`,sL,[U(`span`,{class:`block h-full bg-foreground`,style:he({width:`${l.value}%`})},null,4)]),G(` `+j(a.value.done)+`/`+j(a.value.total),1)],8,oL)):K(``,!0)]),U(`span`,cL,[U(`span`,{class:k([`truncate font-medium`,{"text-muted-foreground":o.value}])},j(r.value),3),!o.value&&c.value?(B(),V(`span`,{key:0,class:k([`ml-auto inline-flex shrink-0 items-center gap-1 text-xs tabular-nums`,{"text-muted-foreground":!c.value.doing}]),title:`進行中 ${c.value.doing}/未完成 ${c.value.open} 個任務`},[W(Qw,{type:`phase`,status:c.value.doing?`doing`:void 0},null,8,[`status`]),G(j(c.value.doing)+`/`+j(c.value.open),1)],10,lL)):K(``,!0)])],10,nL))}}),dL=[`data-serves`,`data-session`,`aria-pressed`],fL={"data-session-icon":``,class:`relative row-span-2 grid size-6 place-items-center rounded-md bg-muted text-foreground`},pL={class:`flex min-w-0 items-baseline gap-1`},mL={class:`truncate font-medium`},hL=[`title`],gL=[`title`],_L={class:`truncate leading-4 text-muted-foreground`},vL=I({__name:`SessionNode`,props:{session:{},serves:{},picked:{type:Boolean}},emits:[`pick`],setup(e){let t=e,n=J(()=>t.session.actions.find(e=>e.status===`doing`)??t.session.actions.find(e=>e.status===`todo`)),r=J(()=>GM(t.session.actions)),i=Fw.session.icon;return(t,a)=>(B(),V(`button`,{type:`button`,class:k([`relative z-[1] grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-x-2 rounded-md border py-1 pr-2 pl-1 text-left text-xs transition-colors duration-[120ms] hover:bg-accent focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-none`,e.picked?`border-ring`:`border-transparent`]),"data-serves":e.serves,"data-session":e.session.id,"aria-pressed":e.picked,onClick:a[0]||=e=>t.$emit(`pick`,e)},[U(`span`,fL,[(B(),H(fa(N(i)),{class:`size-3.5`})),U(`span`,{class:k([`absolute -right-0.5 -bottom-0.5 size-2 rounded-full border-[1.5px] border-background`,n.value?`bg-status-done`:`bg-status-todo`])},null,2)]),U(`span`,pL,[U(`span`,mL,j(N(Dw)(e.session)),1),e.session.elsewhere?(B(),V(`span`,{key:0,class:`shrink-0 text-muted-foreground`,title:`其他環境:工作目錄 ${e.session.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,hL)):K(``,!0),r.value.open?(B(),V(`span`,{key:1,class:k([`shrink-0 tabular-nums`,{"text-muted-foreground":!r.value.doing}]),title:`進行中 ${r.value.doing}/未處理 ${r.value.open} 個行動`},`(`+j(r.value.doing)+`/`+j(r.value.open)+`)`,11,gL)):K(``,!0)]),U(`span`,_L,j(n.value?.do??`沒有待做的行動`),1)],10,dL))}}),yL={class:`rounded-xl border bg-card text-body shadow-xs`},bL={class:`flex h-10 items-center gap-2 px-4`},xL={class:`font-mono text-xs text-muted-foreground`},SL={class:`flex flex-col gap-4 px-4 pb-4`},CL={class:`text-base font-semibold [overflow-wrap:anywhere]`},wL={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},TL={class:`flex flex-col gap-0.5`},EL=[`onClick`],DL={class:`shrink-0 font-mono text-muted-foreground`},OL={class:`truncate`},kL={class:`ml-auto shrink-0 text-muted-foreground`},AL={key:0,class:`px-1.5 text-xs text-muted-foreground`},jL={class:`flex flex-col gap-0.5`},ML={key:0,class:`px-1.5 text-xs text-muted-foreground`},NL={class:`flex h-10 items-center gap-2 px-4`},PL={class:`flex flex-col gap-4 px-4 pb-4`},FL={class:`text-base font-semibold [overflow-wrap:anywhere]`},IL={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},LL={class:`flex flex-col gap-0.5`},RL={class:`flex flex-col gap-0.5`},zL={class:`shrink-0 font-mono text-muted-foreground`},BL={class:`truncate`},VL={key:1,class:`px-1.5 text-xs text-muted-foreground`},HL={key:2,class:`px-4 py-6 text-sm text-muted-foreground`},UL=I({__name:`RunningPreview`,props:{picked:{}},emits:[`pickMainline`,`pickSession`],setup(e,{emit:t}){let n=e,r=t,{open:i}=FC(),a=[`doing`,`blocked`,`todo`],o=Ew,s=J(()=>{if(n.picked?.kind!==`mainline`)return;let e=n.picked.id,t=Q.summary?.mainlines.find(t=>t.id===e),r=(Q.mainlines[e]?.tasks??[]).filter(e=>a.includes(e.status)).sort((e,t)=>a.indexOf(e.status)-a.indexOf(t.status)||(e.order??0)-(t.order??0));return{id:e,loaded:!!Q.mainlines[e],title:t?.title??Mw(e).title??e,status:t?.status,criteria:t?.criteria,items:t?.items,tasks:r,sessions:kw().filter(t=>Ow(t)===e)}}),c=J(()=>n.picked?.kind===`session`?Q.sessions.find(e=>e.id===n.picked.id):void 0),l=e=>{let t=e=>Q.sessions.filter(t=>t.delegatedFrom===e).flatMap(e=>[e,...t(e.id)]),n=t(e.id);return n.length?`${n.filter(e=>e.status===`active`).length} 個進行中,共 ${n.length} 個`:`沒有`};return(e,t)=>(B(),V(`div`,yL,[s.value?(B(),V(z,{key:0},[U(`div`,bL,[W(Qw,{type:`mainline`,status:s.value.status},null,8,[`status`]),U(`span`,xL,j(s.value.id),1),t[2]||=U(`span`,{class:`text-xs text-muted-foreground`},`主脈絡`,-1)]),U(`div`,SL,[U(`h3`,CL,j(s.value.title),1),U(`dl`,wL,[t[5]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[s.value.status?(B(),H(TE,{key:0,status:s.value.status},null,8,[`status`])):K(``,!0)]),s.value.criteria?(B(),V(z,{key:0},[t[3]||=U(`dt`,{class:`text-muted-foreground`},`解決條件`,-1),U(`dd`,null,[W(JN,{done:s.value.criteria.done,total:s.value.criteria.total},null,8,[`done`,`total`])])],64)):K(``,!0),s.value.items?(B(),V(z,{key:1},[t[4]||=U(`dt`,{class:`text-muted-foreground`},`checklist`,-1),U(`dd`,null,[W(JN,{done:s.value.items.done,total:s.value.items.total},null,8,[`done`,`total`])])],64)):K(``,!0)]),U(`section`,TL,[t[6]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`未完成的任務`,-1),(B(!0),V(z,null,L(s.value.tasks,e=>(B(),V(`button`,{key:e.id,type:`button`,class:`flex h-7 min-w-0 items-center gap-2 rounded-md px-1.5 text-left text-xs hover:bg-accent`,onClick:t=>N(i)(N(CC)(s.value.id,e.id))},[W(Qw,{type:N(Iw)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,DL,j(e.id),1),U(`span`,OL,j(e.title),1),U(`span`,kL,j(N(Gw)[e.status]),1)],8,EL))),128)),s.value.tasks.length?K(``,!0):(B(),V(`p`,AL,j(s.value.loaded?`沒有`:`載入中…`),1))]),U(`section`,jL,[t[7]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`會話`,-1),(B(!0),V(z,null,L(s.value.sessions,e=>(B(),H(vL,{key:e.id,session:e,onPick:t=>r(`pickSession`,e.id)},null,8,[`session`,`onPick`]))),128)),s.value.sessions.length?K(``,!0):(B(),V(`p`,ML,`沒有`))]),U(`div`,null,[W(N(sC),{variant:`outline`,size:`sm`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${s.value.id}`},{default:P(()=>[...t[8]||=[G(`開啟主脈絡`,-1)]]),_:1},8,[`to`])]),_:1})])])],64)):c.value?(B(),V(z,{key:1},[U(`div`,NL,[W(Qw,{type:`session`,status:c.value.status},null,8,[`status`]),t[9]||=U(`span`,{class:`text-xs text-muted-foreground`},`會話`,-1)]),U(`div`,PL,[U(`h3`,FL,j(N(Dw)(c.value)),1),U(`dl`,IL,[t[10]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[W(TE,{status:c.value.status},null,8,[`status`])]),t[11]||=U(`dt`,{class:`text-muted-foreground`},`子代理`,-1),U(`dd`,null,j(l(c.value)),1)]),U(`section`,LL,[t[12]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`目前行動`,-1),U(`p`,{class:k([`text-xs [overflow-wrap:anywhere]`,{"text-muted-foreground":!N(o)(c.value)}])},j(N(o)(c.value)?.do??`沒有待做的行動`),3)]),U(`section`,RL,[t[13]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`服務的主脈絡`,-1),N(Ow)(c.value)?(B(),V(`button`,{key:0,type:`button`,class:`flex h-7 min-w-0 items-center gap-2 rounded-md px-1.5 text-left text-xs hover:bg-accent`,onClick:t[0]||=e=>r(`pickMainline`,N(Ow)(c.value))},[W(Qw,{type:`mainline`,status:N(Mw)(N(Ow)(c.value)).status},null,8,[`status`]),U(`span`,zL,j(N(Ow)(c.value)),1),U(`span`,BL,j(N(Mw)(N(Ow)(c.value)).title),1)])):(B(),V(`p`,VL,`沒有`))]),U(`div`,null,[W(N(sC),{variant:`outline`,size:`sm`,onClick:t[1]||=e=>N(i)(N(TC)(c.value.id))},{default:P(()=>[...t[14]||=[G(`開啟會話`,-1)]]),_:1})])])],64)):(B(),V(`p`,HL,`點關係圖裡的主脈絡或會話看詳情。`))]))}}),WL=[`width`,`height`],GL=[`id`],KL=[`fill`],qL=[`d`,`stroke`,`stroke-dasharray`,`marker-end`],JL=[`onClick`],YL={class:`shrink-0 font-mono`},XL={class:`truncate`},ZL={key:2,class:`flex flex-wrap items-start gap-x-6 gap-y-3`},QL={key:0,class:`flex flex-col gap-1.5 px-[9px]`},$L={class:`flex flex-wrap gap-x-6 gap-y-1`},eR={key:2,class:`absolute bottom-3 left-1/2 z-20 -translate-x-1/2 cursor-auto`,role:`toolbar`,"aria-label":`批次操作`,"data-canvas-overlay":``},tR={class:`flex items-center gap-1 rounded-lg border bg-popover py-1 pr-1 pl-3 text-sm shadow-md`},nR={class:`mr-2 tabular-nums`},rR={class:`text-muted-foreground tabular-nums`},iR={class:`absolute right-3 bottom-3 z-20 flex cursor-auto items-center rounded-full border bg-popover p-0.5 text-xs shadow-sm`,role:`toolbar`,"aria-label":`縮放`,"data-canvas-overlay":``},aR={key:1,class:`text-sm text-muted-foreground`},oR=20,sR=260,cR=48,lR=4,uR=4,dR=`mainflow.overview.canvasHeight`,fR=240,pR=`mainflow.overview.previewWidth`,mR=260,hR=560,gR=I({__name:`RunningMap`,setup(e){let t=e=>`${e.kind}:${e.id}`,n=[`active`,`planning`,`paused`],r=e=>e&&!UM(e)?Math.max(0,n.indexOf(e)):n.length,i=(e,t)=>e.map((e,t)=>({item:e,i:t})).sort((e,n)=>r(t(e.item))-r(t(n.item))||e.i-n.i).map(e=>e.item),a=J(()=>(Q.summary?.mainlines??[]).filter(e=>!e.archivedAt)),o=e=>Mw(e).status,s=J(()=>a.value.map(e=>e.id)),c=J(()=>new Set((Q.summary?.mainlines??[]).filter(e=>e.archivedAt).map(e=>e.id))),l=J(()=>Q.relations.mainlineDeps.filter(e=>![e.from,e.to].some(e=>c.value.has(e)))),u=J(()=>new Map(Object.entries(Q.relations.groupMembers).flatMap(([e,t])=>t.filter(e=>e.kind===`mainline`&&!e.archived).map(t=>[t.ref,e])))),d=J(()=>i([...new Set([...s.value,...u.value.keys(),...l.value.flatMap(e=>[e.to,e.from])])],o)),f=J(()=>new Set(d.value)),p=J(()=>eL(d.value,l.value)),m=e=>OC(e)?u.value.get(e):(Q.summary?.mainlines??[]).find(t=>t.id===e)?.group??void 0,h=J(()=>tL(p.value,m,iN().map(e=>e.id))),{open:g}=FC(),_=J(()=>i(kw(),e=>e.status)),v=e=>_.value.filter(t=>Ow(t)===e),y=J(()=>_.value.filter(e=>!f.value.has(Ow(e)??``))),b=e=>e.kind===`mainline`?f.value.has(e.id):_.value.some(t=>t.id===e.id),x=Qt(new Map),S=J(()=>[...x.values()].filter(b)),C=M(),w=J(()=>C.value&&x.has(t(C.value))&&b(C.value)?C.value:void 0),T=(e,n)=>x.has(t({kind:e,id:n})),ee=e=>!!e?.shiftKey;function E(){x.clear(),C.value=void 0}function te(e,n){let r=t(e);if(ee(n)){x.has(r)?x.delete(r):x.set(r,e);return}x.clear(),x.set(r,e),C.value=e}function ne(e,t){if(OC(e)){ee(t)||window.open(kC(e)??void 0,`_blank`,`noopener`);return}te({kind:`mainline`,id:e},t)}let re=(e,t)=>te({kind:`session`,id:e},t);async function D(){let e=new Map;for(let t of S.value)e.set(t.kind,[...e.get(t.kind)??[],t.id]);await dw(async()=>{let t=[];for(let[n,r]of e){let e=await XC.archiveMany(n,r,!0);t.push(...e.failed.map(e=>`${e.id}(${e.error})`))}if(t.length)throw Error(`${t.length} 個沒有封存:${t.join(`、`)}`)})&&E()}let ie=M(),ae=J(()=>{let e=ie.value;return e&&{left:`${Math.min(e.x1,e.x2)}px`,top:`${Math.min(e.y1,e.y2)}px`,width:`${Math.abs(e.x2-e.x1)}px`,height:`${Math.abs(e.y2-e.y1)}px`}});function oe(e){let t=[],n=t=>{let n=t.getBoundingClientRect();return n.left<e.right&&n.right>e.left&&n.top<e.bottom&&n.bottom>e.top};for(let e of O.value?.querySelectorAll(`[data-node], [data-session]`)??[])n(e)&&(e.dataset.node?OC(e.dataset.node)||t.push({kind:`mainline`,id:e.dataset.node}):t.push({kind:`session`,id:e.dataset.session}));return t}let{current:se}=FC();Df(window,`keydown`,e=>{e.key!==`Escape`||se.value||Q.paletteOpen||!x.size||(w.value&&S.value.length>1?C.value=void 0:E())},{capture:!0});let O=M(),ce=M([]),le=M({width:0,height:0});function ue(e,t){let n=0,r=0;for(let i=e;i&&i!==t;i=i.offsetParent)n+=i.offsetLeft,r+=i.offsetTop;return{left:n,top:r,right:n+e.offsetWidth,bottom:r+e.offsetHeight,height:e.offsetHeight}}function de(){let e=O.value;if(!e)return;let t=t=>{let n=e.querySelector(`[data-node="${CSS.escape(t)}"]`);return n?ue(n,e):void 0},n=[];for(let e of l.value){let r=t(e.to),i=t(e.from);if(!r||!i)continue;let a=r.right,o=r.top+oR,s=i.left-2,c=i.top+oR;n.push({key:`${e.to}>${e.from}`,d:`M${a},${o} C${a+28},${o} ${s-28},${c} ${s},${c}`,kind:e.state===`pending`?`pending`:`other`})}for(let r of e.querySelectorAll(`[data-serves]`)){let i=t(r.dataset.serves),a=r.querySelector(`[data-session-icon]`);if(!i||!a)continue;let o=ue(a,e);n.push({key:`s:${r.dataset.session}`,d:`M${i.left+12},${i.bottom} V${o.top+o.height/2} H${o.left}`,kind:`session`})}ce.value=n,le.value={width:e.offsetWidth,height:e.offsetHeight},Se||Ce()}Ff(O,de),F([p,_,()=>Q.mainlines],()=>void tr(de),{deep:!0});let fe={pending:`var(--muted-foreground)`,other:`var(--status-off)`,session:`var(--status-off)`},pe={pending:void 0,other:`4 3`,session:`2 2`},me=J(()=>{let e=p.value.columns.length*308-cR,t=e=>Math.min(e,lR)*284-24,n=e=>t(e)+18;return Math.max(sR,e+18,...h.value.map(e=>n(e.free.length)),t(y.value.length))}),ge=M(),_e=M({x:0,y:0,zoom:1}),ve=M({width:0,height:0});function ye(){let e=ge.value;e&&(ve.value={width:e.clientWidth,height:e.clientHeight})}Ff(ge,()=>{ye(),Se||Ce()});let A=M(!1),be;function xe(e){A.value=!0,_e.value=e,clearTimeout(be),be=setTimeout(()=>A.value=!1,320)}let Se=!1;function Ce(){ye(),le.value.width&&le.value.height&&ve.value.width&&ve.value.height&&(_e.value=QI(le.value,ve.value),Se=!0)}let we=()=>(ye(),xe(QI(le.value,ve.value))),Te=e=>(ye(),xe(ZI(_e.value,_e.value.zoom*e,ve.value.width/2,ve.value.height/2))),Ee=J(()=>`${Math.round(_e.value.zoom*100)}%`),De=0;function Oe(e){let t=ge.value.getBoundingClientRect();if(e.ctrlKey||e.metaKey){e.preventDefault(),_e.value=ZI(_e.value,XI(_e.value.zoom*Math.exp(-e.deltaY*.01)),e.clientX-t.left,e.clientY-t.top);return}let n=performance.now()<De||!$I(e);if(e.preventDefault(),!n){ke(ge.value).scrollBy({top:Ae(e,e.deltaY),left:Ae(e,e.deltaX)});return}De=performance.now()+120,_e.value={..._e.value,x:_e.value.x-e.deltaX,y:_e.value.y-e.deltaY}}function ke(e){for(let t=e.parentElement;t;t=t.parentElement){let{overflowY:e}=getComputedStyle(t);if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t}return document.scrollingElement??document.documentElement}let Ae=(e,t)=>e.deltaMode===1?t*16:e.deltaMode===2?t*window.innerHeight:t;function je(e){let n=ge.value,r=n.getBoundingClientRect(),i=new Map(x),a=e.clientX-r.left,o=e.clientY-r.top;try{n.setPointerCapture(e.pointerId)}catch{}let s=e=>{let n=e.clientX-r.left,s=e.clientY-r.top;if(!ie.value&&Math.hypot(n-a,s-o)<uR)return;ie.value={x1:a,y1:o,x2:n,y2:s};let c=oe({left:r.left+Math.min(a,n),top:r.top+Math.min(o,s),right:r.left+Math.max(a,n),bottom:r.top+Math.max(o,s)});x.clear();for(let[e,t]of i)x.set(e,t);for(let e of c)x.set(t(e),e)},c=()=>{n.removeEventListener(`pointermove`,s),n.removeEventListener(`pointerup`,c),n.removeEventListener(`pointercancel`,c),ie.value=void 0};n.addEventListener(`pointermove`,s),n.addEventListener(`pointerup`,c),n.addEventListener(`pointercancel`,c)}let Me=M(!1);function Ne(e){if(e.button!==0||e.target.closest(`button, a, [data-canvas-overlay]`))return;if(e.shiftKey)return je(e);let t={x:e.clientX,y:e.clientY,vx:_e.value.x,vy:_e.value.y},n=!1,r=ge.value;try{r.setPointerCapture(e.pointerId)}catch{}let i=e=>{let r=e.clientX-t.x,i=e.clientY-t.y;!n&&Math.hypot(r,i)<uR||(n=!0,Me.value=!0,_e.value={..._e.value,x:t.vx+r,y:t.vy+i})},a=()=>{r.removeEventListener(`pointermove`,i),r.removeEventListener(`pointerup`,a),r.removeEventListener(`pointercancel`,a),Me.value=!1,n||E()};r.addEventListener(`pointermove`,i),r.addEventListener(`pointerup`,a),r.addEventListener(`pointercancel`,a)}let Pe=e=>Math.round(Math.min(Math.max(fR,window.innerHeight),Math.max(fR,e))),Fe=Number($C(dR,null)),Ie=M(Fe>0?Pe(Fe):null);function Le(e){let t=e.clientY,n=ge.value.offsetHeight,r=e=>Ie.value=Pe(n+e.clientY-t),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(dR,Ie.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}function Re(){Ie.value=null,ew(dR,null)}let ze=e=>Math.min(hR,Math.max(mR,e)),Be=M(ze(Number($C(pR,340))||340)),Ve=J(()=>ve.value.width?Math.min(Be.value,ve.value.width*.6):Be.value);function He(e){let t=e.clientX,n=Ve.value,r=e=>Be.value=ze(n+t-e.clientX),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(pR,Be.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return(e,t)=>d.value.length||_.value.length?(B(),V(`div`,{key:0,ref_key:`viewport`,ref:ge,class:k([`relative w-full touch-none overflow-hidden rounded-xl border bg-background select-none`,[Me.value?`cursor-grabbing`:`cursor-grab`,Ie.value===null&&`h-[60vh]`]]),style:he(Ie.value===null?void 0:{height:`${Ie.value}px`}),"data-canvas":``,onPointerdown:Ne,onWheel:Oe},[U(`div`,{ref_key:`canvas`,ref:O,class:k([`absolute top-0 left-0 flex origin-top-left flex-col gap-6`,{"transition-transform duration-300 ease-out":A.value}]),style:he({width:`${me.value}px`,transform:`translate(${_e.value.x}px, ${_e.value.y}px) scale(${_e.value.zoom})`})},[(B(),V(`svg`,{class:`pointer-events-none absolute inset-0 overflow-visible`,width:le.value.width,height:le.value.height,"aria-hidden":`true`},[U(`defs`,null,[(B(),V(z,null,L([`pending`,`other`],e=>U(`marker`,{id:`run-arrow-${e}`,key:e,viewBox:`0 0 8 8`,refX:`7`,refY:`4`,markerWidth:`7`,markerHeight:`7`,orient:`auto`},[U(`path`,{d:`M0,0 L8,4 L0,8 z`,fill:fe[e]},null,8,KL)],8,GL)),64))]),(B(!0),V(z,null,L(ce.value,e=>(B(),V(`path`,{key:e.key,d:e.d,fill:`none`,"stroke-width":`1.5`,stroke:fe[e.kind],"stroke-dasharray":pe[e.kind],"marker-end":e.kind===`session`?void 0:`url(#run-arrow-${e.kind})`},null,8,qL))),128))],8,WL)),(B(!0),V(z,null,L(h.value,e=>(B(),H(fa(e.group?`section`:`div`),{key:e.group??`ungrouped`,class:k([`flex flex-col gap-4 rounded-xl border p-2`,e.group?`border-dashed`:`border-transparent`]),"data-map-group":e.group},{default:P(()=>[e.group?(B(),V(`button`,{key:0,type:`button`,class:`relative z-[1] -mb-1 flex max-w-full min-w-0 items-center gap-1.5 self-start rounded-sm bg-background px-1 text-left text-xs text-muted-foreground hover:bg-accent`,onClick:t=>N(g)(e.group)},[W(Qw,{type:`group`,status:N(rN)(e.group)?.status},null,8,[`status`]),U(`span`,YL,j(e.group),1),U(`span`,XL,j(N(rN)(e.group)?.title),1),W(xE,{priority:N(rN)(e.group)?.priority,class:`shrink-0`},null,8,[`priority`])],8,JL)):K(``,!0),e.columns.some(e=>e.length)?(B(),V(`div`,{key:1,class:`grid gap-y-4`,style:he({columnGap:`${cR}px`,gridTemplateColumns:`repeat(${e.columns.length}, ${sR}px)`})},[(B(!0),V(z,null,L(e.columns,(e,t)=>(B(),V(`div`,{key:t,class:`flex min-w-0 flex-col gap-4`},[(B(!0),V(z,null,L(e,e=>(B(),V(`div`,{key:e,class:`flex max-w-full flex-col gap-1.5`,style:he({width:`${sR}px`})},[W(uL,{id:e,picked:T(`mainline`,e),onPick:ne},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(v(e),t=>(B(),H(vL,{key:t.id,session:t,serves:e,picked:T(`session`,t.id),class:`ml-5`,onPick:e=>re(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))]))),128))],4)):K(``,!0),e.free.length?(B(),V(`div`,ZL,[(B(!0),V(z,null,L(e.free,e=>(B(),V(`div`,{key:e,class:`flex max-w-full flex-col gap-1.5`,style:he({width:`${sR}px`})},[W(uL,{id:e,picked:T(`mainline`,e),onPick:ne},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(v(e),t=>(B(),H(vL,{key:t.id,session:t,serves:e,picked:T(`session`,t.id),class:`ml-5`,onPick:e=>re(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))])):K(``,!0)]),_:2},1032,[`class`,`data-map-group`]))),128)),y.value.length?(B(),V(`div`,QL,[U(`div`,$L,[(B(!0),V(z,null,L(y.value,e=>(B(),H(vL,{key:e.id,session:e,picked:T(`session`,e.id),class:`max-w-full`,style:he({width:`${sR}px`}),onPick:t=>re(e.id,t)},null,8,[`session`,`picked`,`style`,`onPick`]))),128))])])):K(``,!0)],6),w.value?(B(),V(`aside`,{key:0,class:`absolute top-3 right-3 z-20 flex max-h-[calc(100%-1.5rem)] cursor-auto flex-col overflow-y-auto overscroll-contain rounded-xl shadow-lg`,style:he({width:`${Ve.value}px`}),"aria-label":`預覽`,"data-canvas-overlay":``,onWheel:t[0]||=au(()=>{},[`stop`])},[U(`div`,{class:`absolute inset-y-0 left-0 z-10 w-2 cursor-col-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`拖曳調整預覽寬度`,onPointerdown:au(He,[`prevent`,`stop`])},null,32),W(UL,{picked:w.value,onPickMainline:ne,onPickSession:re},null,8,[`picked`])],36)):K(``,!0),ie.value?(B(),V(`div`,{key:1,class:`pointer-events-none absolute z-20 rounded-sm border border-ring bg-ring/10`,style:he(ae.value),"aria-hidden":`true`},null,4)):K(``,!0),S.value.length>=1?(B(),V(`div`,eR,[U(`div`,tR,[U(`span`,nR,`已選 `+j(S.value.length)+` 個`,1),W(N(sC),{variant:`ghost`,size:`sm`,onClick:D},{default:P(()=>[W(N(Pu)),t[4]||=G(`封存`,-1),U(`span`,rR,j(S.value.length),1)]),_:1}),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":`清除選取`,onClick:t[1]||=e=>E()},{default:P(()=>[W(N(uf))]),_:1})])])):K(``,!0),U(`div`,{class:`absolute inset-x-0 bottom-0 z-10 h-2 cursor-row-resize`,role:`separator`,"aria-orientation":`horizontal`,"aria-label":`拖曳調整畫布高度,雙擊回到預設高度`,"data-canvas-overlay":``,onPointerdown:au(Le,[`prevent`,`stop`]),onDblclick:Re},null,32),U(`div`,iR,[W(N(sC),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`縮小`,onClick:t[2]||=e=>Te(1/N(1.2))},{default:P(()=>[W(N(Vd))]),_:1}),U(`button`,{type:`button`,class:`h-7 min-w-12 rounded-full px-1.5 tabular-nums hover:bg-accent`,title:`全部置入畫面`,"aria-label":`全部置入畫面`,onClick:we},j(Ee.value),1),W(N(sC),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`放大`,onClick:t[3]||=e=>Te(N(1.2))},{default:P(()=>[W(N(Gd))]),_:1})])],38)):(B(),V(`p`,aR,[...t[5]||=[G(`沒有主脈絡。在 hub 內執行 `,-1),U(`code`,null,`mainflow new mainline <slug> --title <title>`,-1),G(` 建立。`,-1)]]))}}),_R={class:`flex flex-col gap-8 px-6 pt-2 pb-10`},vR={key:0,"aria-labelledby":`attention`,class:`-mb-4 rounded-lg border bg-card`},yR={id:`attention`,class:`text-sm font-medium`},bR=[`aria-expanded`],xR={class:`text-xs text-muted-foreground tabular-nums`},SR={key:2,class:`ml-2 flex min-w-0 items-center gap-3 overflow-hidden text-xs font-normal text-muted-foreground`},CR={class:`tabular-nums`},wR={id:`attention-list`,class:`border-t`},TR=[`data-peek`,`aria-current`,`onClick`],ER={class:`shrink-0 font-mono text-xs text-muted-foreground`},DR={class:`min-w-0 truncate`},OR=[`title`],kR={class:`truncate`},AR={key:0,class:`hidden max-w-48 shrink-0 truncate text-xs text-muted-foreground xl:inline`},jR={"aria-labelledby":`running`},MR={id:`running`,class:`mb-2 flex items-center gap-1.5 text-sm font-medium`},NR={class:`text-xs font-normal text-muted-foreground tabular-nums`},PR={type:`button`,class:`grid size-5 place-items-center rounded-sm text-muted-foreground hover:text-foreground`,"aria-label":`依賴線的說明`},FR={"aria-labelledby":`issues`,class:`-mx-6 min-w-0`},IR={id:`issues`,class:`px-6 text-sm font-medium`},LR={class:`ml-1 text-xs text-muted-foreground tabular-nums`},RR={class:`flex min-w-0 items-center gap-2`},zR={class:`shrink-0 font-mono text-xs text-muted-foreground`},BR=[`title`],VR={key:0,class:`flex min-w-0 items-center gap-1.5 overflow-hidden text-xs`},HR=`mainflow.overview.attentionOpen`,UR=`mainflow.list.overview.issues.axis`,WR=`箭頭由要先完成的主脈絡指向等待它的主脈絡;實線是還沒完成的依賴,虛線是已完成或無法確認的依賴。`,GR=I({__name:`Overview`,setup(e){let{open:t,current:n}=FC(),r=e=>n.value?.ref===e||void 0,i=J(()=>(Q.summary?.mainlines??[]).filter(e=>!e.archivedAt)),a=J(()=>i.value.filter(e=>e.status===`active`||e.status===`planning`||e.status===`paused`)),o=J(()=>[...new Set([...a.value.map(e=>e.id),...Q.relations.mainlineDeps.flatMap(e=>[e.from,e.to]).filter(e=>/^m\d{3}$/.test(e))])]);Er(()=>void uw(o.value));let s=J(()=>a.value.flatMap(e=>Q.mainlines[e.id]?[Q.mainlines[e.id]]:[])),c={overdue:{label:`逾期`,icon:Wu,tone:`text-destructive`},blocked:{label:`卡住`,icon:ed,tone:`text-status-waiting`},proposed:{label:`待裁決`,icon:Qu,tone:`text-warning`},due:{label:`即將到期`,icon:Wu,tone:`text-warning`},review:{label:`待重新確認`,icon:qd,tone:`text-warning`}},l=J(()=>[...s.value.flatMap(e=>e.tasks.filter(e=>e.status===`blocked`).map(t=>({ref:CC(e.id,t.id),type:Iw(t),status:t.status,id:`${e.id}/${t.id}`,title:t.title,kind:`blocked`,reason:`卡住:${t.blockedBy?.reason??`沒有寫原因`}`,context:e.title}))),...s.value.flatMap(e=>e.decisions.filter(e=>e.status===`proposed`).map(t=>({ref:wC(e.id,t.id),type:`decision`,status:t.status,id:`${e.id}/${t.id}`,title:t.title,kind:`proposed`,reason:t.affects?.length?`待裁決,影響 ${t.affects.join(`、`)}`:`待裁決`,context:e.title}))),...Q.issues.filter(e=>e.status!==`closed`&&!e.archivedAt&&dE(e.due)).map(e=>{let t=uE(e.due);return{ref:e.id,type:`issue`,status:e.status,id:e.id,title:e.title,kind:t<0?`overdue`:`due`,reason:t<0?`已逾期 ${-t} 天`:t===0?`今天到期`:`${t} 天後到期`}}),...Q.findings.filter(e=>e.status===`valid`&&!e.archivedAt&&e.reviewAfter&&uE(e.reviewAfter)<0).map(e=>({ref:e.id,type:`finding`,status:e.status,id:e.id,title:e.title,kind:`review`,reason:`${e.reviewAfter} 起該重新確認是否仍成立`}))]),u=J(()=>Object.keys(c).flatMap(e=>{let t=l.value.filter(t=>t.kind===e).length;return t?[{kind:e,n:t,...c[e]}]:[]})),d=M($C(HR,!1)===!0);function f(){d.value=!d.value,ew(HR,d.value)}let p=[`open`,`planned`],m=eN({key:`overview.issues`,queryPrefix:`i.`,id:e=>e.id,text:e=>e.title,filters:EF(p),sorts:[{key:`order`,label:`手動順序`,value:e=>e.order,dir:`asc`},{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`priority`,label:`優先度`,value:e=>VM(e.priority),dir:`asc`},{key:`planned`,label:`排入`,value:e=>e.plannedIn??e.due,dir:`asc`}],groups:DF(p),defaultSort:`order`,defaultGroup:`status`},()=>Q.issues.filter(e=>!e.archivedAt&&e.status!==`closed`)),h=$C(UR,`priority`),g=M(m.spec.groups.some(e=>e.key===h)?h:`priority`);function _(e){g.value=e,ew(UR,e)}let v=J(()=>m.spec.groups.find(e=>e.key===g.value)?.label),y=e=>VM(e.priority)!==`P2`||g.value!==`category`&&!!e.category||!!e.labels?.length,b=J(()=>a.value.length),x=J(()=>Aw().length);return(e,n)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`總覽`,description:`現在要注意什麼、進行中的主脈絡與會話怎麼串在一起、還有哪些待辦。`})]),default:P(()=>[U(`div`,_R,[l.value.length?(B(),V(`section`,vR,[U(`h2`,yR,[U(`button`,{type:`button`,class:`flex w-full min-w-0 items-center gap-2 rounded-lg px-3 py-2 text-left hover:bg-accent/50`,"aria-expanded":d.value,"aria-controls":`attention-list`,onClick:f},[d.value?(B(),H(N(Ju),{key:0,class:`size-4 shrink-0 text-muted-foreground`})):(B(),H(N(Xu),{key:1,class:`size-4 shrink-0 text-muted-foreground`})),n[1]||=G(` 需要注意 `,-1),U(`span`,xR,j(l.value.length),1),d.value?K(``,!0):(B(),V(`span`,SR,[(B(!0),V(z,null,L(u.value,e=>(B(),V(`span`,{key:e.kind,class:`flex shrink-0 items-center gap-1`},[(B(),H(fa(e.icon),{class:k([`size-3.5`,e.tone])},null,8,[`class`])),G(j(e.label)+` `,1),U(`span`,CR,j(e.n),1)]))),128))]))],8,bR)]),yr(U(`ul`,wR,[(B(!0),V(z,null,L(l.value,e=>(B(),V(`li`,{key:e.ref+e.reason,class:`flex h-9 cursor-pointer items-center gap-2 border-b px-3 transition-colors duration-[120ms] last:border-b-0 hover:bg-muted/50`,"data-peek":e.ref,"aria-current":r(e.ref),onClick:n=>N(t)(e.ref)},[W(Qw,{type:e.type,status:e.status},null,8,[`type`,`status`]),U(`span`,ER,j(e.id),1),U(`span`,DR,j(e.title),1),U(`span`,{class:`ml-auto flex min-w-0 shrink items-center gap-1 text-xs text-muted-foreground`,title:e.reason},[(B(),H(fa(c[e.kind].icon),{class:k([`size-3.5 shrink-0`,c[e.kind].tone])},null,8,[`class`])),U(`span`,kR,j(e.reason),1)],8,OR),e.context?(B(),V(`span`,AR,j(e.context),1)):K(``,!0)],8,TR))),128))],512),[[Vc,d.value]])])):K(``,!0),U(`section`,jR,[U(`h2`,MR,[n[2]||=G(` 進行中 `,-1),U(`span`,NR,j(b.value)+` 條主脈絡 · `+j(x.value)+` 個會話`,1),W(N(Bj),{"open-delay":150,"close-delay":100},{default:P(()=>[W(N(Hj),{"as-child":``},{default:P(()=>[U(`button`,PR,[W(N(td),{class:`size-3.5`})])]),_:1}),W(N(Vj),{class:`w-72 text-xs`},{default:P(()=>[G(j(WR))]),_:1})]),_:1})]),W(gR)]),U(`section`,FR,[U(`h2`,IR,[n[3]||=G(`待辦事項 `,-1),U(`span`,LR,j(N(m).total.value),1)]),W(oD,{view:N(m)},{views:P(()=>[W(N(lC),null,{default:P(()=>[W(N(SC),{"as-child":``},{default:P(()=>[W(N(sC),{variant:`outline`,size:`sm`,"aria-label":`橫軸:${v.value}`},{default:P(()=>[W(N(od)),G(j(v.value),1)]),_:1},8,[`aria-label`])]),_:1}),W(N(fC),{align:`end`,class:`w-40`},{default:P(()=>[W(N(mC),{class:`text-xs text-muted-foreground`},{default:P(()=>[...n[4]||=[G(`橫軸`,-1)]]),_:1}),W(N(hC),{"model-value":g.value,"onUpdate:modelValue":n[0]||=e=>_(String(e))},{default:P(()=>[(B(!0),V(z,null,L(N(m).spec.groups,e=>(B(),H(N(_C),{key:e.key,value:e.key},{default:P(()=>[G(j(e.label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`model-value`])]),_:1})]),_:1})]),_:1},8,[`view`]),W(JI,{view:N(m),axis:g.value},{card:P(({item:e})=>[W(N(oI),{class:k([`min-w-0 cursor-pointer gap-1 px-3 py-2 shadow-xs transition-colors duration-[120ms] hover:bg-accent/50`,{"bg-muted":r(e.id)}]),"data-peek":e.id,"aria-current":r(e.id),onClick:n=>N(t)(e.id)},{default:P(()=>[U(`div`,RR,[W(Qw,{type:`issue`,status:e.status},null,8,[`status`]),U(`span`,zR,j(e.id),1),U(`span`,{class:`truncate`,title:e.title},j(e.title),9,BR)]),y(e)?(B(),V(`div`,VR,[W(xE,{priority:e.priority,class:`shrink-0`},null,8,[`priority`]),g.value!==`category`&&e.category?(B(),H(N(QT),{key:0,variant:`outline`},{default:P(()=>[G(j(e.category),1)]),_:2},1024)):K(``,!0),(B(!0),V(z,null,L(e.labels??[],e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))])):K(``,!0)]),_:2},1032,[`class`,`data-peek`,`aria-current`,`onClick`])]),empty:P(()=>[...n[5]||=[G(`沒有未處理或已排入的待辦。`,-1)]]),_:1},8,[`view`,`axis`])])])]),_:1}))}}),KR=[`title`],qR={key:1,class:`shrink-0 text-xs text-muted-foreground`},JR=I({__name:`SessionList`,setup(e){let t=[`active`,`paused`,`handed-off`,`ended`],n=e=>e.actions.find(e=>e.status===`doing`)??e.actions.find(e=>e.status===`todo`),r=e=>[...new Set(e.actions.flatMap(e=>e.serves.map(e=>e.slice(0,4))))],i=e=>e?`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim():`沒有服務的主脈絡`,a=e=>Math.max(...[e.started,...e.actions.flatMap(e=>[e.startedAt,e.doneAt])].filter(e=>!!e).map(iE)),o=e=>Q.sessions.filter(t=>t.delegatedFrom===e).sort((e,t)=>iE(e.started)-iE(t.started)),s=(e,t=1)=>o(e.id).flatMap(e=>[{item:e,depth:t},...s(e,t+1)]),c=J(()=>{let e=new Set(Q.sessions.map(e=>e.id));return Q.sessions.filter(t=>!t.delegatedFrom||!e.has(t.delegatedFrom))}),l=eN({key:`sessions`,id:e=>e.id,text:e=>`${Dw(e)} ${e.branch??``}`,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:HM(t)},{key:`agent`,label:`agent`,values:e=>[e.agent]},{key:`branch`,label:`分支`,values:e=>e.branch?[e.branch]:[]},{key:`mainline`,label:`主脈絡`,values:r,optionLabel:i}],sorts:[{key:`name`,label:`名稱`,value:e=>Dw(e),dir:`asc`},{key:`serves`,label:`服務的任務`,value:e=>p(e),dir:`asc`},{key:`subagents`,label:`子代理數`,value:e=>o(e.id).length,dir:`desc`},{key:`started`,label:`開始時間`,value:e=>iE(e.started),dir:`desc`},{key:`active`,label:`最後活動`,value:a,dir:`desc`}],groups:[KM(t),{key:`mainline`,label:`主脈絡`,value:e=>r(e)[0]??``,groupLabel:i},{key:`day`,label:`日期`,value:e=>oE(e.started),latestFirst:!0}],defaultSort:`started`,defaultGroup:`status`,ended:e=>UM(e.status),archived:e=>!!e.archivedAt,nested:e=>s(e)},()=>c.value),u=_F(l,{kind:`session`,archived:e=>!!e.archivedAt}),d=[{key:`name`,label:`會話`,sort:`name`},{key:`serves`,label:`服務的任務`,class:`max-w-56`,sort:`serves`,value:e=>p(e),optional:!0},{key:`subagents`,label:`子代理`,class:`text-xs text-muted-foreground tabular-nums`,sort:`subagents`,value:e=>o(e.id).length||void 0,optional:!0},{key:`started`,label:`開始`,class:`text-xs text-muted-foreground`,sort:`started`}],{open:f}=FC();Er(()=>Pw(Q.sessions.flatMap(e=>e.actions.flatMap(e=>e.serves))));let p=e=>(n(e)??e.actions[0])?.serves[0]?.split(`#`)[0],m=e=>dw(()=>XC.archiveSession(e.id,!e.archivedAt));return(e,t)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`會話`,description:`推進過 hub 的 AI 會話,含同步程式從其他環境帶來的會話。存在 .mainflow/local/sessions/,不入版控。`}),W(oD,{view:N(l)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(l),selection:N(u),columns:d,"item-ref":e=>N(TC)(e.id)},{name:P(({item:e,depth:t})=>[W(hD,{status:e.status,title:N(Dw)(e),muted:t>0||!!e.archivedAt,depth:t},{default:P(()=>[e.elsewhere?(B(),V(`span`,{key:0,class:`shrink-0 text-xs text-muted-foreground`,title:`工作目錄 ${e.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,KR)):K(``,!0),e.archivedAt?(B(),V(`span`,qR,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`title`,`muted`,`depth`])]),serves:P(({item:e})=>[p(e)?(B(),H(Yj,q({key:0},N(Mw)(p(e)),{onOpen:N(f)}),null,16,[`onOpen`])):K(``,!0)]),subagents:P(({item:e,depth:t})=>[G(j(t===0&&o(e.id).length?o(e.id).length:``),1)]),started:P(({item:e})=>[W(_P,{at:e.started},null,8,[`at`])]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>m(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`沒有會話資料。會話存在 `,-1),U(`code`,null,`.mainflow/local/sessions/`,-1),G(`,不入版控;有同步時,其他環境的會話也會出現在這裡。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(u)},null,8,[`selection`])]),_:1}))}}),YR={class:`flex min-w-0 items-center gap-2`},XR={key:0,class:`size-1.5 shrink-0 rounded-full bg-warning`,title:`新提醒`},ZR=[`title`],QR=[`title`],$R=[`title`],ez=I({__name:`SyncNotices`,setup(e){let t=eN({key:`sync`,id:e=>`${e.at}|${e.kind}|${e.path}`,text:e=>`${zC(e)} ${e.path} ${e.message}`,filters:[{key:`kind`,label:`種類`,values:e=>[e.kind],options:Object.entries(IC).map(([e,t])=>({value:e,label:t}))},{key:`path`,label:`檔案`,values:e=>e.path?[e.path]:[]}],sorts:[{key:`at`,label:`時間`,value:e=>e.at,dir:`desc`},{key:`kind`,label:`種類`,value:e=>e.kind,dir:`asc`},{key:`path`,label:`檔案`,value:e=>e.path,dir:`asc`}],groups:[{key:`day`,label:`日期`,value:e=>e.at.slice(0,10),latestFirst:!0}],defaultSort:`at`,defaultGroup:`day`},()=>Q.sync.notices),n=[{key:`message`,label:`提醒`},{key:`kind`,label:`種類`,class:`text-xs`},{key:`path`,label:`檔案`,class:`max-w-72 truncate font-mono text-xs text-muted-foreground`,value:e=>e.path,optional:!0},{key:`at`,label:`時間`,class:`font-mono text-xs text-muted-foreground tabular-nums`}],r=e=>new Date(e).toLocaleString(`sv-SE`).slice(5);return $i(async()=>{await _w(),gw()}),(e,i)=>(B(),H(gF,null,{header:P(()=>[W(yD,{title:`同步提醒`,description:`同步程式找到的、寫入者的內容可能沒有照原樣進入 hub 的改動。被拒的內容存在 .mainflow/local/sync/conflicts/,點開可以和 hub 的版本並排比對。`}),W(oD,{view:N(t)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(t),columns:n,"item-ref":e=>e.saved?N(DC)(e.saved):void 0},{message:P(({item:e})=>[U(`span`,YR,[N(mw)(e)?K(``,!0):(B(),V(`span`,XR)),e.saved?(B(),H(N(pd),{key:1,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-label":`有存檔,可並排比對`})):K(``,!0),U(`span`,{class:`truncate`,title:`原文:${e.message}`},j(N(zC)(e,!1)),9,ZR)])]),kind:P(({item:e})=>[G(j(N(IC)[e.kind]??e.kind),1)]),path:P(({item:e})=>[U(`span`,{title:e.path},j(e.path),9,QR)]),at:P(({item:e})=>[U(`span`,{title:e.at},j(r(e.at)),9,$R)]),empty:P(()=>[N(Q).sync.remote?(B(),V(z,{key:0},[G(`沒有提醒。同步程式只在寫入者的內容可能遺失時提醒,只多了別人改動的合併不列在這裡。`)],64)):(B(),V(z,{key:1},[i[0]||=G(`這個 hub 沒有設定同步伺服器。設定方式見 mainflow 的 `,-1),i[1]||=U(`code`,null,`docs/sync.md`,-1),i[2]||=G(`。`,-1)],64))]),_:1},8,[`view`,`item-ref`])]),_:1}))}}),tz=e=>Array.isArray(e)?e.join(`/`):e??``,nz=Rm({history:om(WC),routes:[{path:`/`,component:GR},{path:`/mainlines`,component:PI},{path:`/mainlines/:m`,component:MI},{path:`/issues`,component:kF},{path:`/findings`,component:bF},{path:`/ops`,component:RI},{path:`/sessions`,component:JR},{path:`/sync`,component:ez},{path:`/mainlines/:m/tasks/:t`,redirect:e=>({path:`/mainlines/${tz(e.params.m)}`,query:{view:`tasks`,peek:CC(tz(e.params.m),tz(e.params.t))}})},{path:`/mainlines/:m/decisions/:d`,redirect:e=>({path:`/mainlines/${tz(e.params.m)}`,query:{view:`decisions`,peek:wC(tz(e.params.m),tz(e.params.d))}})},{path:`/mainlines/:m/files/:path(.*)`,redirect:e=>({path:`/mainlines/${tz(e.params.m)}`,query:{peek:EC(tz(e.params.m),tz(e.params.path))}})},{path:`/sessions/:s`,redirect:e=>({path:`/sessions`,query:{peek:TC(tz(e.params.s))}})}]}),rz=hu(ZT);rz.config.errorHandler=yw,rz.use(nz).mount(`#app`);
80
+ `);if(l){let e=document.querySelector(`style[data-mainflow-view="${s}"]`);e||(e=document.createElement(`style`),e.dataset.mainflowView=s,document.head.append(e)),e.textContent=l}return c}var hM={key:0,class:`mb-2 text-sm`},gM=[`src`,`title`],_M=[`src`,`alt`],vM={key:6,class:`overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed`},yM=I({__name:`CustomContent`,props:{path:{},ctx:{}},setup(e){let t=e,n=[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`],r=e=>e.slice(e.lastIndexOf(`.`)+1).toLowerCase(),i=M(``),a=M(``),o=M(null),s=pn(null),c;async function l(){a.value=``,c?.(),c=void 0,s.value=null;let e=r(t.path);try{if(e===`vue`)s.value=await mM(await(await fetch(ZC(t.path))).text(),t.path);else if(e===`js`||e===`mjs`){let e=await uM(()=>import(ZC(t.path)),[]);if(!e.mount)throw Error(`the module must export mount(el, ctx)`);o.value&&(c=e.mount(o.value,t.ctx)??void 0)}else e!==`html`&&!n.includes(e)&&(i.value=await(await fetch(ZC(t.path))).text())}catch(e){a.value=e.message}}return F(()=>[t.path,t.ctx],()=>void l(),{immediate:!0,flush:`post`}),na(()=>c?.()),(t,c)=>(B(),V(`div`,null,[a.value?(B(),V(`p`,hM,`無法渲染 `+j(e.path)+`:`+j(a.value),1)):K(``,!0),r(e.path)===`md`?(B(),H(yj,{key:1,source:i.value},null,8,[`source`])):r(e.path)===`html`?(B(),V(`iframe`,{key:2,src:N(ZC)(e.path),sandbox:`allow-scripts allow-same-origin`,class:`h-[480px] w-full rounded-lg border bg-white`,title:e.path},null,8,gM)):n.includes(r(e.path))?(B(),V(`img`,{key:3,src:N(ZC)(e.path),alt:e.path,class:`max-w-full rounded-lg border`},null,8,_M)):r(e.path)===`js`||r(e.path)===`mjs`?(B(),V(`div`,{key:4,ref_key:`mountPoint`,ref:o},null,512)):r(e.path)===`vue`&&s.value?(B(),H(fa(s.value),{key:5,ctx:e.ctx},null,8,[`ctx`])):r(e.path)===`vue`?K(``,!0):(B(),V(`pre`,vM,j(i.value),1))]))}}),bM=[`主脈絡文件`,`任務文件`,`產物`,`決策`,`自訂視圖`,`參考來源`],xM=e=>e.slice(e.lastIndexOf(`/`)+1),SM=e=>xM(e).includes(`.`)?xM(e).slice(xM(e).lastIndexOf(`.`)+1).toLowerCase():``;function CM(e){let t=t=>t.slice(e.dir.length+1),n=(e,n,r,i)=>({key:e,name:xM(e),kind:n,ext:SM(e),source:r,inMainline:t(e),updated:i}),r=(t,n)=>(t??[]).map(t=>({key:`${n??e.id}:${t.url??t.path}`,name:t.title,kind:`參考來源`,ext:t.url?``:SM(t.path??``),source:n,url:t.url,path:t.path,updated:t.date}));return[n(e.file,`主脈絡文件`,void 0,e.updated),...e.artifacts.map(e=>n(e,`產物`)),...e.tasks.flatMap(e=>[n(e.file,`任務文件`,e.id,e.updated),...e.artifacts.map(t=>n(t,`產物`,e.id))]),...e.decisions.map(e=>n(e.file,`決策`,e.id,e.updated)),...e.views.map(e=>n(e,`自訂視圖`)),...(e.remoteFiles??[]).map(t=>({...n(t,`產物`,e.tasks.find(e=>t.startsWith(`${e.dir}/`))?.id),remoteOnly:!0})),...r(e.refs),...e.tasks.flatMap(e=>r(e.refs,e.id))]}var wM=(e,t)=>e.remoteFiles?.includes(t)??!1;function TM(e,t){return CM(e).find(e=>e.key===t)?.kind??``}var EM={key:0,class:`pb-8`},DM={key:0},OM=[`title`],kM=[`href`],AM={key:0,class:`text-sm text-muted-foreground`},jM={key:1,class:`space-y-2 text-sm`},MM={key:1,class:`px-5 text-muted-foreground`},NM=I({__name:`FilePeek`,props:{m:{},path:{}},setup(e){let t=e,{mainline:n}=Xj(()=>t.m),r=J(()=>n.value?`${n.value.dir}/${t.path}`:``),i=J(()=>n.value?.tasks.find(e=>r.value.startsWith(`${e.dir}/`))),a=J(()=>n.value?.decisions.find(e=>e.file===r.value)),o=J(()=>n.value?TM(n.value,r.value):``),s=J(()=>({mainline:n.value,task:i.value})),c=J(()=>!!n.value&&wM(n.value,r.value)),l=M(`idle`),u=M(``),d=J(()=>c.value&&l.value!==`done`);async function f(){l.value=`loading`,u.value=``;try{let e=await XC.fetchRemote(t.m,r.value);l.value=e.fetched?`done`:`failed`,u.value=e.error??``}catch(e){l.value=`failed`,u.value=e.message}}F([r,c],()=>{c.value&&(l.value=`idle`,f())},{immediate:!0});let p=J(()=>t.path.slice(t.path.lastIndexOf(`/`)+1));return(t,c)=>N(n)?(B(),V(`div`,EM,[W(OD,{title:p.value,mono:``,type:N(zw)(e.path,o.value||void 0)},{default:P(()=>[U(`span`,null,j(o.value),1),d.value?(B(),V(`span`,DM,`只在伺服器上`)):K(``,!0),U(`span`,{class:`truncate font-mono`,title:e.path},j(e.path),9,OM),d.value?K(``,!0):(B(),H(N(sC),{key:1,variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[U(`a`,{href:N(ZC)(r.value),target:`_blank`},[W(N(ef)),c[0]||=G(`原始檔`,-1)],8,kM)]),_:1}))]),_:1},8,[`title`,`type`]),W(MD,null,{default:P(()=>[d.value&&l.value!==`failed`?(B(),V(`p`,AM,`這個檔案只在同步伺服器上,正在下載…`)):d.value?(B(),V(`div`,jM,[U(`p`,null,`無法下載這個檔案:`+j(u.value),1),W(N(sC),{variant:`outline`,size:`xs`,onClick:f},{default:P(()=>[...c[1]||=[G(`重試`,-1)]]),_:1})])):(B(),H(yM,{key:2,path:r.value,ctx:s.value},null,8,[`path`,`ctx`]))]),_:1}),W(MD,{title:`所屬`},{default:P(()=>[a.value?(B(),H(wj,{key:0,peek:N(wC)(e.m,a.value.id),id:a.value.id,title:a.value.title,status:a.value.status},null,8,[`peek`,`id`,`title`,`status`])):i.value?(B(),H(wj,{key:1,peek:N(CC)(e.m,i.value.id),id:i.value.id,title:i.value.title,status:i.value.status},null,8,[`peek`,`id`,`title`,`status`])):K(``,!0),W(wj,{peek:e.m,id:e.m,title:N(n).title,status:N(n).status},null,8,[`peek`,`id`,`title`,`status`])]),_:1})])):(B(),V(`p`,MM,`載入 `+j(e.m)+`…`,1))}}),PM={key:0,class:`pb-8`},FM={class:`text-xs`},IM={class:`text-xs`},LM={class:`text-xs`},RM={key:1,class:`px-5 text-muted-foreground`},zM=I({__name:`FindingPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.findings.find(e=>e.id===t.id)),i=()=>r.value&&dw(()=>XC.archiveFinding(r.value.id,!r.value.archivedAt,r.value.version));return Pw([r.value?.origin]),(a,o)=>r.value?(B(),V(`div`,PM,[W(OD,{id:r.value.id,title:r.value.title,type:`finding`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),W(eE,{archived:!!r.value.archivedAt,onToggle:i},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[r.value.appliesTo?.length?(B(),H($,{key:0,label:`適用範圍`,icon:N(bd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.appliesTo,e=>(B(),H(CD,{key:e,text:e},null,8,[`text`]))),128))]),_:1},8,[`icon`])):K(``,!0),r.value.reviewAfter?(B(),H($,{key:1,label:`重新確認`,icon:N(qd)},{default:P(()=>[W(pE,{day:r.value.reviewAfter,ended:r.value.status===`obsolete`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:2,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:o[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:3,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,FM,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,IM,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:7,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,LM,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,RM,`找不到發現 `+j(e.id)+`。`,1))}}),BM=I({__name:`Dialog`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean},unmountOnHide:{type:Boolean}},emits:[`update:open`],setup(e,{emit:t}){let n=F_(e,t);return(e,t)=>(B(),H(N(gv),q({"data-slot":`dialog`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),VM=I({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Sf(t,`class`);return(e,r)=>(B(),H(N(iy),q({"data-slot":`dialog-overlay`},N(n),{class:N(gg)(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),HM=I({inheritAttrs:!1,__name:`DialogContent`,props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!0}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(e,{emit:t}){let n=e,r=t,i=F_(Sf(n,`class`),r);return(t,r)=>(B(),H(N(oy),null,{default:P(()=>[W(VM),W(N(ty),q({"data-slot":`dialog-content`},{...t.$attrs,...N(i)},{class:N(gg)(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg`,n.class)}),{default:P(()=>[R(t.$slots,`default`),e.showCloseButton?(B(),H(N(_v),{key:0,"data-slot":`dialog-close`,class:`ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`},{default:P(()=>[W(N(uf)),r[0]||=U(`span`,{class:`sr-only`},`Close`,-1)]),_:1})):K(``,!0)]),_:3},16,[`class`])]),_:3}))}}),UM=I({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(ny),q({"data-slot":`dialog-description`},N(n),{class:N(gg)(`text-muted-foreground text-sm`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),WM=I({__name:`DialogFooter`,props:{class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!1}},setup(e){let t=e;return(n,r)=>(B(),V(`div`,{"data-slot":`dialog-footer`,class:k(N(gg)(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t.class))},[R(n.$slots,`default`),e.showCloseButton?(B(),H(N(_v),{key:0,"as-child":``},{default:P(()=>[W(N(sC),{variant:`outline`},{default:P(()=>[...r[0]||=[G(` Close `,-1)]]),_:1})]),_:1})):K(``,!0)],2))}}),GM=I({__name:`DialogHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(B(),V(`div`,{"data-slot":`dialog-header`,class:k(N(gg)(`flex flex-col gap-2 text-center sm:text-left`,t.class))},[R(e.$slots,`default`)],2))}}),KM=I({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(sy),q({"data-slot":`dialog-title`},N(n),{class:N(gg)(`text-lg leading-none font-semibold`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),qM={class:`break-words`},JM={key:2,class:`font-mono`},YM=I({__name:`EvidenceText`,props:{text:{}},setup(e){let t=e,{to:n}=FC(),r=/(\.mainflow\/mainlines\/(m\d{3})-[^/\s]+\/([^\s,、;))]+))|(\bm\d{3}\/[td]\d{3}(?:#c\d{3})?\b|\b[if]\d{3}\b)|(\b[0-9a-f]{7,40}\b)|([\w./-]+\.\w+:\d+(?:-\d+)?)/g,i=J(()=>{let e=[],n=0;for(let i of t.text.matchAll(r)){let r=i.index??0;r>n&&e.push({kind:`text`,value:t.text.slice(n,r)});let[a,o,s,c,l,u]=i;o&&!/[{}*]/.test(c)?e.push({kind:`file`,value:a,peek:EC(s,c)}):l?e.push({kind:`ref`,value:a,peek:l.split(`#`)[0]}):u&&/\d/.test(u)&&/[a-f]/.test(u)?e.push({kind:`commit`,value:a}):!o&&!u?e.push({kind:`code`,value:a}):e.push({kind:`text`,value:a}),n=r+a.length}return n<t.text.length&&e.push({kind:`text`,value:t.text.slice(n)}),e}),a=e=>e.slice(e.lastIndexOf(`/`)+1);return(e,t)=>(B(),V(`span`,qM,[(B(!0),V(z,null,L(i.value,(e,r)=>(B(),V(z,{key:r},[e.kind===`ref`||e.kind===`file`?(B(),H(N(Am),{key:0,to:N(n)(e.peek,{chain:!0}),class:`font-mono text-foreground underline decoration-border underline-offset-4 hover:decoration-foreground`,title:e.value,onClick:t[0]||=au(()=>{},[`stop`])},{default:P(()=>[G(j(e.kind===`file`?a(e.value):e.value),1)]),_:2},1032,[`to`,`title`])):e.kind===`commit`?(B(),H(CD,{key:1,text:e.value,class:`align-baseline`},null,8,[`text`])):e.kind===`code`?(B(),V(`code`,JM,j(e.value),1)):(B(),V(z,{key:3},[G(j(e.value),1)],64))],64))),128))]))}}),XM={class:`flex flex-col`},ZM={key:1,class:`mt-0.5 grid size-4 shrink-0 place-items-center rounded-[4px] border border-dashed text-[10px] text-muted-foreground`,"aria-label":`已不需要`},QM={class:`flex min-w-0 flex-1 flex-col gap-0.5`},$M={class:`flex min-w-0 items-start gap-2`},eN=[`title`],tN={key:0,class:`text-xs text-muted-foreground`},nN={key:1,class:`text-xs text-muted-foreground`},rN={key:0},iN={key:2,class:`text-xs text-muted-foreground`},aN={key:3,class:`text-xs text-muted-foreground`},oN={key:1,class:`text-sm text-muted-foreground`},sN={key:0,class:`text-xs text-muted-foreground`},cN=I({__name:`Checklist`,props:{items:{},refPrefix:{},version:{}},setup(e){let t=e,n=J(()=>t.items.filter(e=>!e.done&&!e.dropped)),r=J(()=>t.items.filter(e=>e.done||e.dropped)),i=M(!1),a=J(()=>[...n.value,...i.value?r.value:[]]),o=M(null),s=M(``);async function c(e){if(e.done){await dw(()=>XC.check(`${t.refPrefix}${e.id}`,!1,void 0,t.version));return}o.value=e,s.value=``}async function l(){let e=o.value;e&&s.value.trim()&&await dw(()=>XC.check(`${t.refPrefix}${e.id}`,!0,s.value.trim(),t.version))&&(o.value=null)}return(t,n)=>(B(),V(z,null,[U(`ul`,XM,[(B(!0),V(z,null,L(a.value,e=>(B(),V(`li`,{key:e.id,class:`-mx-2 flex gap-3 rounded-md px-2 py-1.5 transition-colors duration-[120ms] hover:bg-accent/50`},[e.dropped?(B(),V(`span`,ZM,`–`)):(B(),H(N(mE),{key:0,"model-value":e.done||o.value?.id===e.id,class:`mt-0.5`,"aria-label":e.done?`取消勾選 ${e.id}`:`勾選 ${e.id}`,"onUpdate:modelValue":t=>c(e)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])),U(`div`,QM,[U(`div`,$M,[W(CD,{text:e.id,class:`mt-px shrink-0`},null,8,[`text`]),U(`span`,{class:k([`min-w-0 flex-1`,{"text-muted-foreground":e.done,"text-muted-foreground line-through":e.dropped}])},j(e.text),3),(B(!0),V(z,null,L(e.serves??[],e=>(B(),V(`span`,{key:e,class:`shrink-0 rounded-sm bg-secondary px-1.5 font-mono text-[11px] text-muted-foreground`,title:`推進解決條件 ${e}`},j(e),9,eN))),128))]),e.doneWhen&&!e.done&&!e.dropped?(B(),V(`p`,tN,`完成定義:`+j(e.doneWhen),1)):K(``,!0),e.done&&e.evidence?(B(),V(`p`,nN,[W(YM,{text:e.evidence},null,8,[`text`]),e.doneAt?(B(),V(`span`,rN,` · `+j(e.doneAt),1)):K(``,!0)])):K(``,!0),e.dropped?(B(),V(`p`,iN,[n[6]||=G(` 不需要了`,-1),e.supersededBy?(B(),V(z,{key:0},[n[4]||=G(`,由 `,-1),W(YM,{text:e.supersededBy},null,8,[`text`]),n[5]||=G(` 取代`,-1)],64)):K(``,!0),e.note?(B(),V(z,{key:1},[G(`:`+j(e.note),1)],64)):K(``,!0)])):e.note?(B(),V(`p`,aN,j(e.note),1)):K(``,!0)])]))),128))]),r.value.length?(B(),H(N(sC),{key:0,variant:`ghost`,size:`xs`,class:`-ml-2 text-muted-foreground`,"aria-expanded":i.value,onClick:n[0]||=e=>i.value=!i.value},{default:P(()=>[i.value?(B(),H(N(Ju),{key:0})):(B(),H(N(Xu),{key:1})),G(j(i.value?`收起已完成`:`已完成 ${r.value.length} 個`),1)]),_:1},8,[`aria-expanded`])):K(``,!0),e.items.length===0?(B(),V(`p`,oN,`沒有項目`)):K(``,!0),W(N(BM),{open:o.value!==null,"onUpdate:open":n[3]||=e=>!e&&(o.value=null)},{default:P(()=>[W(N(HM),{class:`sm:max-w-lg`},{default:P(()=>[W(N(GM),null,{default:P(()=>[W(N(KM),null,{default:P(()=>[G(`勾選 `+j(o.value?.id),1)]),_:1}),W(N(UM),null,{default:P(()=>[G(j(o.value?.text),1)]),_:1})]),_:1}),U(`form`,{class:`flex flex-col gap-3`,onSubmit:au(l,[`prevent`])},[o.value?.doneWhen?(B(),V(`p`,sN,`完成定義:`+j(o.value.doneWhen),1)):K(``,!0),W(N(ZE),{modelValue:s.value,"onUpdate:modelValue":n[1]||=e=>s.value=e,autofocus:``,placeholder:`證據:commit、檔案:行號或指令輸出`,"aria-label":`證據`},null,8,[`modelValue`]),W(N(WM),null,{default:P(()=>[W(N(sC),{type:`button`,variant:`ghost`,onClick:n[2]||=e=>o.value=null},{default:P(()=>[...n[7]||=[G(`取消`,-1)]]),_:1}),W(N(sC),{type:`submit`,disabled:!s.value.trim()},{default:P(()=>[...n[8]||=[G(`勾選`,-1)]]),_:1},8,[`disabled`])]),_:1})],32)]),_:1})]),_:1},8,[`open`])],64))}}),lN=[`P0`,`P1`,`P2`,`P3`].map(e=>({value:e,label:e})),uN=e=>e??`P2`,dN=e=>e.map(e=>({value:e,label:Gw[e]??e,status:e})),fN=e=>Ww.has(e);function pN(e,t){let n=e.filters.flatMap(e=>e.values(t).flatMap(t=>[t,e.optionLabel?.(t)??e.options?.find(e=>e.value===t)?.label??``]));return[e.id(t),e.text(t),...n].filter(Boolean).join(` `)}var mN=e=>({doing:e.filter(e=>e.status===`doing`).length,open:e.filter(e=>!fN(e.status)).length}),hN=e=>({key:`status`,label:`狀態`,value:e=>e.status,order:e,groupLabel:e=>Gw[e]??e,status:e=>e}),gN=(e,t)=>e.values?.(t)??[e.value(t)];function _N(e,t){let n=new Map;for(let r of t)for(let t of gN(e,r))n.set(t,[...n.get(t)??[],r]);let r=t=>e.order?.includes(t)?e.order.indexOf(t):1/0,i=t=>Number(e.trailing?.includes(t)??!1);return[...n.keys()].sort((t,n)=>i(t)-i(n)||r(t)-r(n)||t.localeCompare(n)*(e.latestFirst?-1:1)).map(t=>({key:t,label:e.groupLabel?.(t)??t,status:e.status?.(t),detail:e.detail?.(t),items:n.get(t)}))}var vN=`f.`,yN=e=>(Array.isArray(e)?e[0]:e)??void 0,bN=(e,t=``)=>{if(!e.startsWith(t))return!1;let n=e.slice(t.length);return n===`q`||n===`sort`||n===`archived`||n.startsWith(vN)},xN=e=>$C(e,{}),SN=(e,t)=>ew(e,{...xN(e),...t});function CN(e,t){let n=tp(),r=ep(),i=`mainflow.list.${e.key}`,a=e.queryPrefix??``,o=xN(i),s=e=>Object.fromEntries(Object.entries(e).filter(([e])=>bN(e,a)));function c(e){let t={...n.query};for(let[n,r]of Object.entries(e))r?t[n]=r:delete t[n];r.replace({query:t})}let l=o.query??{},u=Object.keys(l).length>0&&Object.keys(s(n.query)).length===0;$i(()=>u&&void r.replace({query:{...n.query,...l}}));let d=()=>`${n.path}?${yN(n.query.view)??``}`,f=d();F(()=>s(n.query),(e,t)=>{d()!==f||u&&t===void 0||SN(i,{query:e})},{deep:!0,immediate:!0});let p=J({get:()=>yN(n.query[`${a}q`])??``,set:e=>c({[`${a}q`]:e.trim()?e:void 0})}),m=J(()=>{let t=yN(n.query[`${a}sort`])??``,r=t.replace(/^-/,``),i=e.sorts.find(e=>e.key===r),o=i??e.sorts.find(t=>t.key===e.defaultSort);return{field:o,dir:i?t.startsWith(`-`)?`desc`:`asc`:o.dir,chosen:!!i}});function h(t,n){let r=e.sorts.find(e=>e.key===t);c({[`${a}sort`]:`${(n??r.dir)===`desc`?`-`:``}${t}`})}let g=()=>c({[`${a}sort`]:void 0});function _(e){let{field:t,dir:n,chosen:r}=m.value;!r||t.key!==e?h(e,`desc`):n===`desc`?h(e,`asc`):g()}let v=J(()=>Object.fromEntries(e.filters.map(e=>[e.key,(yN(n.query[`${a}${vN}${e.key}`])??``).split(`,`).filter(Boolean)])));function y(e,t){let n=v.value[e]??[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({[`${a}${vN}${e}`]:r.join(`,`)||void 0})}let b=e=>c({[`${a}${vN}${e}`]:void 0}),x=()=>c({[`${a}q`]:void 0,[`${a}archived`]:void 0,...Object.fromEntries(e.filters.map(e=>[`${a}${vN}${e.key}`,void 0]))}),S=J(()=>{let e=yN(n.query[`${a}archived`]);return e===`with`||e===`only`?e:`without`}),C=e=>c({[`${a}archived`]:e===`without`?void 0:e}),w=M(o.group!==void 0&&(o.group===``||e.groups.some(e=>e.key===o.group))?o.group:e.defaultGroup);function T(e){w.value=e,SN(i,{group:e})}function ee(e){if(e.options)return e.options;let n=new Set(t().flatMap(e.values));for(let t of v.value[e.key]??[])n.add(t);return[...n].sort().map(t=>({value:t,label:e.optionLabel?.(t)??t}))}let E=J(()=>{let n=p.value.toLowerCase().split(/\s+/).filter(Boolean);return t().filter(t=>{if(e.archived){let n=e.archived(t);if(S.value===`without`&&n||S.value===`only`&&!n)return!1}for(let n of e.filters){let e=v.value[n.key]??[];if(e.length>0&&!n.values(t).some(t=>e.includes(t)))return!1}let r=pN(e,t).toLowerCase();return n.every(e=>r.includes(e))})}),te=J(()=>{let{field:t,dir:n}=m.value,r=n===`asc`?1:-1;return[...E.value].sort((n,i)=>{let a=t.value(n),o=t.value(i),s=Number(a==null||a===``)-Number(o==null||o===``);return s===0?((typeof a==`number`&&typeof o==`number`?a-o:String(a).localeCompare(String(o)))||e.id(n).localeCompare(e.id(i)))*r:s})}),ne=J(()=>{let t=e.groups.find(e=>e.key===w.value),n=S.value!==`only`&&!v.value.status?.length,r=t=>n?{items:t.filter(t=>!e.ended?.(t)),ended:t.filter(t=>e.ended?.(t))}:{items:t,ended:[]};return t?_N(t,te.value).map(({key:e,label:n,status:i,detail:a,items:o})=>{let s=t.leader?.(e);return{key:e,label:n,status:i,leader:s,detail:a,...r(o.filter(e=>e!==s))}}):te.value.length?[{key:``,label:``,...r(te.value)}]:[]}),re=Qt(new Set(o.collapsed??[])),D=Qt(new Set(o.endedFolded??[])),ie=(e,t,n)=>{e.has(t)?e.delete(t):e.add(t),SN(i,{[n]:[...e]})};return{spec:e,search:p,sort:m,setSort:h,clearSort:g,cycleSort:_,filters:v,toggleFilter:y,clearFilter:b,clearAll:x,activeFilters:J(()=>e.filters.flatMap(e=>(v.value[e.key]??[]).map(t=>({field:e,value:t,label:ee(e).find(e=>e.value===t)?.label??t})))),optionsOf:ee,archived:S,setArchived:C,group:w,setGroup:T,total:J(()=>t().length),shown:J(()=>E.value.length),sorted:te,groups:ne,collapsed:re,endedFolded:D,toggleCollapsed:e=>ie(re,e,`collapsed`),toggleEnded:e=>ie(D,e,`endedFolded`)}}var wN=`未分組`;function TN(e,t){if(!e)return!1;let n=Q.summary?.hub;return e===t||n!==void 0&&e===`${n}:${t}`}var EN=e=>e?Q.summary?.groups.find(t=>t.id===e):void 0;function DN(e=Q.summary?.groups??[]){return[...e].sort((e,t)=>Number(fN(e.status))-Number(fN(t.status))||uN(e.priority).localeCompare(uN(t.priority))||e.id.localeCompare(t.id))}var ON=e=>e===`未分組`?wN:`${e} ${EN(e)?.title??``}`.trim();function kN(e){return{key:`group`,label:`組`,value:t=>e(t)??`未分組`,get order(){return DN().map(e=>e.id)},trailing:[wN],groupLabel:ON,detail:e=>{let t=EN(e);return t&&{ref:t.id,title:t.title,status:t.status,priority:t.priority??null,trigger:t.trigger,summary:t.summary}}}}function AN(e){return{key:`group`,label:`組`,values:t=>[e(t)||`未分組`],optionLabel:ON}}var jN={key:0,class:`pb-8`},MN={key:0,class:`text-xs`},NN={class:`text-xs`},PN={class:`text-xs`},FN={class:`flex flex-col gap-1.5 text-sm`},IN={class:`shrink-0 font-mono text-xs text-muted-foreground`},LN={class:`shrink-0`},RN=[`title`],zN={key:0,class:`text-sm text-muted-foreground`},BN={key:1,class:`px-5 text-muted-foreground`},VN=I({__name:`GroupPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>EN(t.id)),i=e=>{let t=r.value?.order.indexOf(e)??-1;return t<0?2**53-1:t},a=J(()=>(Q.summary?.mainlines??[]).filter(e=>TN(e.group,t.id)&&!e.archivedAt).sort((e,t)=>i(e.id)-i(t.id))),o=J(()=>Q.issues.filter(e=>TN(e.group,t.id)&&!e.archivedAt).sort((e,t)=>i(e.id)-i(t.id))),s=e=>Q.sessions.filter(e=>!e.archivedAt&&(e.status===`active`||e.status===`paused`)).filter(t=>t.actions.some(t=>(t.status===`doing`||t.status===`blocked`)&&t.serves.some(e))).map(e=>({session:e,name:Dw(e)})),c=e=>s(t=>t.startsWith(`${e}/`)||t.startsWith(`${e}#`)),l=J(()=>s(e=>e.startsWith(`${t.id}#`))),u=J(()=>(Q.relations.groupMembers[t.id]??[]).filter(e=>!e.archived)),d=J(()=>u.value.filter(e=>e.kind===`mainline`)),f=J(()=>u.value.filter(e=>e.kind===`issue`));return(i,s)=>r.value?(B(),V(`div`,jN,[W(OD,{id:r.value.id,title:r.value.title,type:`group`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),!r.value.priority||r.value.priority===`P2`?(B(),V(`span`,MN,`P2`)):K(``,!0)]),_:1},8,[`icon`]),r.value.trigger?(B(),H($,{key:0,label:`時機`,icon:N(rd)},{default:P(()=>[G(j(r.value.trigger),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:1,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:s[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:2,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,NN,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,PN,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(MD,{title:`解決條件`,count:r.value.criteria?.length??0},{default:P(()=>[W(cN,{items:r.value.criteria??[],"ref-prefix":`${r.value.id}#`,version:r.value.version},null,8,[`items`,`ref-prefix`,`version`]),(B(!0),V(z,null,L(l.value,({session:e,name:t})=>(B(),H(wj,{key:e.id,peek:N(TC)(e.id),title:t,status:e.status},{default:P(()=>[...s[1]||=[G(`在做組的條件`,-1)]]),_:1},8,[`peek`,`title`,`status`]))),128))]),_:1},8,[`count`]),r.value.grants?.length?(B(),H(MD,{key:1,title:`授權`,count:r.value.grants.length},{default:P(()=>[U(`ul`,FN,[(B(!0),V(z,null,L(r.value.grants,e=>(B(),V(`li`,{key:e.id,class:`flex min-w-0 items-baseline gap-2`},[U(`span`,IN,j(e.id),1),U(`span`,LN,j(e.action),1),U(`span`,{class:`min-w-0 truncate text-muted-foreground`,title:e.note?`${e.target}:${e.note}`:e.target},j(e.target),9,RN)]))),128))])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`主脈絡`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,(e,t)=>(B(),H(wj,{key:e.id,peek:e.id,id:`${t+1}. ${e.id}`,title:e.title,status:e.status},{default:P(()=>[(B(!0),V(z,null,L(c(e.id),e=>(B(),V(`span`,{key:e.session.id,class:`mr-2`},j(e.name),1))),128)),G(j(N(Gw)[e.status]??e.status),1)]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128)),a.value.length===0?(B(),V(`p`,zN,[s[2]||=G(`還沒有主脈絡在這組。用 `,-1),U(`code`,null,`mainflow mainline set <m> --group `+j(r.value.id),1),s[3]||=G(` 加入。`,-1)])):K(``,!0)]),_:1},8,[`count`]),o.value.length?(B(),H(MD,{key:2,title:`待辦事項`,count:o.value.length},{default:P(()=>[(B(!0),V(z,null,L(o.value,e=>(B(),H(wj,{key:e.id,peek:e.id,id:e.id,title:e.title,status:e.status},{default:P(()=>[W(xE,{priority:e.priority},null,8,[`priority`])]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),u.value.length?(B(),H(MD,{key:3,title:`其他 hub 的成員`,count:u.value.length},{default:P(()=>[(B(!0),V(z,null,L([...d.value,...f.value],e=>(B(),H(wj,{key:e.ref,peek:e.ref,id:e.ref,title:e.title,status:e.status},{default:P(()=>[G(j(e.kind===`issue`?`待辦`:`主脈絡`)+` · `+j(N(Gw)[e.status]??e.status),1)]),_:2},1032,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:4,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,BN,`找不到組 `+j(e.id)+`。`,1))}}),HN={key:0,class:`pb-8`},UN={key:0,class:`text-xs`},WN={class:`text-xs`},GN={class:`text-xs`},KN={class:`text-xs`},qN={key:1,class:`px-5 text-muted-foreground`},JN=I({__name:`IssuePeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.issues.find(e=>e.id===t.id)),i=e=>n(e,{chain:!0}),a=()=>r.value&&dw(()=>XC.archiveIssue(r.value.id,!r.value.archivedAt,r.value.version));return Pw([r.value?.origin,r.value?.plannedIn]),(n,o)=>r.value?(B(),V(`div`,HN,[W(OD,{id:r.value.id,title:r.value.title,type:`issue`,status:r.value.status},{default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),W(eE,{archived:!!r.value.archivedAt,onToggle:a},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,UN,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.group?(B(),H($,{key:1,label:`組`,icon:N(Hu)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.group),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:2,label:`到期`,icon:N(Wu)},{default:P(()=>[W(pE,{day:r.value.due,ended:r.value.status===`closed`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.plannedIn?(B(),H($,{key:3,label:`排入`,icon:N(Ku)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.plannedIn),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:4,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:5,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:6,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,WN,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:7,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,GN,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:8,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:9,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,KN,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,qN,`找不到待辦 `+j(e.id)+`。`,1))}}),YN=[`title`],XN={class:`h-1.5 w-14 overflow-hidden rounded-full bg-primary/20`},ZN={class:`min-w-7 tabular-nums`},QN=I({__name:`ProgressBar`,props:{done:{},total:{}},setup(e){let t=e,n=J(()=>t.total===0?0:Math.round(t.done/t.total*100));return(t,r)=>(B(),V(`span`,{class:`inline-flex items-center gap-2 text-xs text-muted-foreground`,title:`${e.done}/${e.total}`},[U(`span`,XN,[U(`span`,{class:`block h-full rounded-full bg-primary`,style:he({width:`${n.value}%`})},null,4)]),U(`span`,ZN,j(e.done)+`/`+j(e.total),1)],8,YN))}}),$N={key:0,class:`text-xs`},eP={class:`text-xs`},tP={class:`text-xs`},nP={class:`text-xs tabular-nums`},rP={class:`text-xs`},iP={class:`flex flex-col gap-2`},aP={class:`mr-2 font-mono text-xs text-muted-foreground`},oP={class:`w-full text-xs`},sP={class:`py-1.5 tabular-nums`},cP={class:`text-right tabular-nums`},lP={class:`text-right tabular-nums`},uP={class:`pl-3 text-muted-foreground`},dP={key:0,class:`text-sm text-muted-foreground`},fP=I({__name:`MainlineBody`,props:{mainline:{},columns:{default:1}},setup(e){let t=e,{open:n}=FC(),r=J(()=>t.mainline),i=J(()=>r.value.tasks.flatMap(e=>e.checklist).filter(e=>!e.dropped)),a=J(()=>r.value.criteria.filter(e=>!e.dropped)),o=J(()=>r.value.decisions.filter(e=>e.status===`proposed`)),s=J(()=>Math.round((r.value.costs??[]).reduce((e,t)=>e+(t.actual??0),0)*100)/100),c=J(()=>r.value.budget?.unit??r.value.costs?.[0]?.unit??``),l=J(()=>Q.issues.filter(e=>!e.archivedAt&&(e.origin?.startsWith(`${r.value.id}/`)||e.plannedIn?.startsWith(`${r.value.id}/`)))),u=J(()=>jw(r.value.id)),d=[`done`,`dropped`];return(t,f)=>(B(),V(z,null,[W(MD,null,{default:P(()=>[W(JD,{columns:e.columns},{default:P(()=>[W($,{label:`解決條件`,icon:N(af)},{default:P(()=>[W(QN,{done:a.value.filter(e=>e.done).length,total:a.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),W($,{label:`checklist`,icon:N(Pd)},{default:P(()=>[W(QN,{done:i.value.filter(e=>e.done).length,total:i.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),r.value.group?(B(),H($,{key:0,label:`組`,icon:N(Hu)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.group),{onOpen:f[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.priority?(B(),H($,{key:1,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,$N,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:2,label:`到期`,icon:N(Wu)},{default:P(()=>[W(pE,{day:r.value.due,ended:d.includes(r.value.status)},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:3,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,eP,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,tP,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N($u)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:7,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(r.value.origin),{onOpen:f[1]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.budget||r.value.costs?.length?(B(),H($,{key:8,label:`花費`,icon:N(cf)},{default:P(()=>[U(`span`,nP,[G(j(s.value),1),r.value.budget?(B(),V(z,{key:0},[G(` / `+j(r.value.budget.amount),1)],64)):K(``,!0),G(` `+j(c.value),1)])]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:9,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,rP,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1},8,[`columns`])]),_:1}),o.value.length?(B(),H(MD,{key:0,title:`待裁決的決策`,count:o.value.length},{default:P(()=>[U(`div`,iP,[(B(!0),V(z,null,L(o.value,e=>(B(),H(N(_g),{key:e.id,variant:`warning`,class:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:t=>N(n)(N(wC)(r.value.id,e.id),{chain:!0})},{default:P(()=>[W(N(Qu)),W(N(yg),null,{default:P(()=>[U(`span`,aP,j(e.id),1),G(j(e.title),1)]),_:2},1024),e.affects?.length?(B(),H(N(vg),{key:0,class:`text-xs text-muted-foreground`},{default:P(()=>[G(`在等它的有 `+j(e.affects.join(`、`)),1)]),_:2},1024)):K(``,!0)]),_:2},1032,[`onClick`]))),128))])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`解決條件`,count:r.value.criteria.length},{default:P(()=>[W(cN,{items:r.value.criteria,"ref-prefix":`${r.value.id}#`,version:r.value.version},null,8,[`items`,`ref-prefix`,`version`])]),_:1},8,[`count`]),r.value.body.trim()?(B(),H(MD,{key:1,title:`內文`},{default:P(()=>[W(yj,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Pj,{self:r.value.id,links:r.value.links,mainline:``},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(MD,{key:2,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(zj,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),r.value.costs?.length?(B(),H(MD,{key:3,title:`花費明細`,count:r.value.costs.length},{default:P(()=>[U(`table`,oP,[f[2]||=U(`thead`,{class:`text-muted-foreground`},[U(`tr`,{class:`border-b`},[U(`th`,{class:`py-1.5 text-left font-medium`},`日期`),U(`th`,{class:`text-left font-medium`},`項目`),U(`th`,{class:`text-right font-medium`},`預估`),U(`th`,{class:`text-right font-medium`},`實際`),U(`th`,{class:`pl-3 text-left font-medium`},`備註`)])],-1),U(`tbody`,null,[(B(!0),V(z,null,L(r.value.costs,(e,t)=>(B(),V(`tr`,{key:t,class:`border-b`},[U(`td`,sP,j(e.date),1),U(`td`,null,j(e.item),1),U(`td`,cP,j(e.estimate??``),1),U(`td`,lP,j(e.actual??``),1),U(`td`,uP,j(e.note??``),1)]))),128))])])]),_:1},8,[`count`])):K(``,!0),l.value.length?(B(),H(MD,{key:4,title:`相關的待辦`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(wj,{key:e.id,peek:e.id,id:e.id,title:e.title,status:e.status},null,8,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`推進過它的會話`,count:u.value.length},{default:P(()=>[(B(!0),V(z,null,L(u.value,({session:e,actions:t})=>(B(),H(wj,{key:e.id,peek:N(TC)(e.id),title:N(Dw)(e),status:e.status},{default:P(()=>[G(j(t.length)+` 個行動`,1)]),_:2},1032,[`peek`,`title`,`status`]))),128)),u.value.length===0?(B(),V(`p`,dP,`這台電腦上沒有推進它的會話。會話只記在本機。`)):K(``,!0)]),_:1},8,[`count`])],64))}}),pP={class:`inline-flex h-7 items-center gap-1.5 rounded-full border bg-background px-2.5 text-xs font-medium transition-colors hover:bg-accent focus-within:ring-3 focus-within:ring-ring/50`},mP=[`value`],hP=[`value`],gP=I({__name:`StatusSelect`,props:{status:{},options:{}},emits:[`change`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),V(`label`,pP,[W(wE,{status:e.status},null,8,[`status`]),U(`select`,{class:`cursor-pointer bg-transparent outline-none`,value:e.status,onChange:r[0]||=e=>n(`change`,e.target.value)},[(B(!0),V(z,null,L(e.options,e=>(B(),V(`option`,{key:e,value:e},j(N(Gw)[e]??e),9,hP))),128))],40,mP)]))}}),_P={key:0,class:`pb-8`},vP={key:1,class:`px-5 text-muted-foreground`},yP=I({__name:`MainlinePeek`,props:{m:{}},setup(e){let t=e,{mainline:n}=Xj(()=>t.m),r=e=>n.value&&dw(()=>XC.mainlineStatus(t.m,e,n.value.version)),i=e=>n.value&&dw(()=>XC.mainlineTitle(t.m,e,n.value.version)),a=()=>n.value&&dw(()=>XC.archive(t.m,!n.value.archivedAt,n.value.version));return(t,o)=>N(n)?(B(),V(`div`,_P,[W(OD,{id:N(n).id,title:N(n).title,type:`mainline`,status:N(n).status,editable:``,onRename:i},{default:P(()=>[W(gP,{status:N(n).status,options:N(Bw),onChange:r},null,8,[`status`,`options`]),W(eE,{archived:!!N(n).archivedAt,onToggle:a},null,8,[`archived`]),W(N(sC),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${N(n).id}`},{default:P(()=>[W(N(ef)),o[0]||=G(`開啟工作區`,-1)]),_:1},8,[`to`])]),_:1})]),_:1},8,[`id`,`title`,`status`]),W(fP,{mainline:N(n)},null,8,[`mainline`])])):(B(),V(`p`,vP,`載入 `+j(e.m)+`…`,1))}}),bP=[`datetime`,`title`],xP=I({__name:`RelativeTime`,props:{at:{}},setup(e){let t=e,n=If({scheduler:e=>Cf(e,6e4)}),r=new Intl.RelativeTimeFormat(`zh-TW`,{numeric:`auto`}),i=J(()=>new Date(iE(t.at))),a=J(()=>{let e=Math.round((n.value.getTime()-i.value.getTime())/6e4);if(t.at.length===10){let n=Math.round(e/1440);return n>=0&&n<7?r.format(-n,`day`):t.at}return e<1?`剛剛`:e<60?r.format(-e,`minute`):e<1440?r.format(-Math.round(e/60),`hour`):e<10080?r.format(-Math.round(e/1440),`day`):oE(t.at)});return(t,n)=>(B(),V(`time`,{datetime:e.at,title:N(cE)(e.at)},j(a.value),9,bP))}}),SP={key:0,class:`pb-8`},CP=[`title`],wP={key:0,class:`flex flex-col gap-1 text-sm`},TP={key:0},EP={key:0,class:`text-xs text-muted-foreground`},DP={key:1,class:`text-xs text-muted-foreground`},OP={class:`font-mono text-xs`},kP={class:`flex flex-col`},AP=[`aria-expanded`,`onClick`],jP={class:`mt-px shrink-0 font-mono text-xs text-muted-foreground`},MP={class:`min-w-0 flex-1`},NP={key:2,class:`shrink-0 text-xs text-muted-foreground tabular-nums`},PP={class:`flex flex-wrap gap-1 pb-1 pl-12`},FP={key:0,class:`pb-1 pl-12 text-xs text-muted-foreground`},IP={key:1,class:`mb-2 ml-12 flex flex-col gap-1.5 rounded-md border p-3 text-xs`},LP={key:0,class:`text-muted-foreground`},RP={key:1,class:`text-muted-foreground`},zP={key:2,class:`text-muted-foreground`},BP={class:`w-20 shrink-0 text-muted-foreground`},VP={key:0,class:`text-muted-foreground`},HP={key:1,class:`text-destructive`},UP={key:0,class:`text-sm text-muted-foreground`},WP={key:0,class:`text-sm text-muted-foreground`},GP={class:`w-20 text-muted-foreground`},KP={class:`tabular-nums`},qP={key:1,class:`px-5 text-muted-foreground`},JP=I({__name:`SessionPeek`,props:{id:{}},setup(e){let t=e,{open:n}=FC(),r=J(()=>Q.sessions.find(e=>e.id===t.id)),i=M(null),a=M(null),o=e=>Q.sessions.find(t=>t.id===e),s=J(()=>{let e=r.value;return e?[...e.delegatedFrom?[{label:`委派自`,id:e.delegatedFrom}]:[],...e.handoffFrom?[{label:`接手自`,id:e.handoffFrom}]:[],...Q.sessions.filter(t=>t.delegatedFrom===e.id).map(e=>({label:`委派給`,id:e.id})),...Q.sessions.filter(t=>t.handoffFrom===e.id).map(e=>({label:`交接給`,id:e.id}))]:[]});F(()=>[r.value?.id,r.value?.actions.length,r.value?.actions.map(e=>e.status).join()],async()=>{let e=r.value;if(e){for(let t of new Set(e.actions.flatMap(e=>e.serves.map(e=>QC(e).m))))lw(t).catch(e=>Q.error=e.message);i.value=await XC.trace(e.id).catch(()=>null)}},{immediate:!0});function c(e){let{m:t,t:n,item:r}=QC(e);if(!n){let n=Q.mainlines[t]?.criteria.find(e=>e.id===r);return{ref:e,task:t,text:n?.text,done:n?.done??!1}}let i=Q.mainlines[t]?.tasks.find(e=>e.id===n);return{ref:e,task:`${t}/${n}`,text:i?.checklist.find(e=>e.id===r)?.text,done:i?.checklist.find(e=>e.id===r)?.done??!1}}let l=J(()=>[...new Set((r.value?.actions??[]).flatMap(e=>e.serves))].map(c));function u(e){return Object.keys(Kw).map(t=>({kind:t,items:e.filter(e=>e.kind===t)})).filter(e=>e.items.length>0)}let d=e=>u(i.value?.byAction[e]??[]),f=e=>(i.value?.byAction[e]??[]).length,p=()=>r.value&&dw(()=>XC.archiveSession(r.value.id,!r.value.archivedAt));return(t,c)=>r.value?(B(),V(`div`,SP,[W(OD,{title:N(Dw)(r.value),type:`session`,status:r.value.status},{notice:P(()=>[r.value.description||r.value.summary?(B(),V(`div`,wP,[r.value.description?(B(),V(`p`,TP,[G(j(r.value.description),1),r.value.depth===void 0?K(``,!0):(B(),V(`span`,EP,` · 深度 `+j(r.value.depth),1))])):K(``,!0),r.value.summary?(B(),V(`p`,DP,j(r.value.summary),1)):K(``,!0)])):K(``,!0)]),default:P(()=>[W(TE,{status:r.value.status},null,8,[`status`]),r.value.elsewhere?(B(),V(`span`,{key:0,title:`工作目錄 ${r.value.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,CP)):K(``,!0),W(CD,{text:r.value.id,label:r.value.id.slice(-8)},null,8,[`text`,`label`]),W(eE,{archived:!!r.value.archivedAt,onToggle:p},null,8,[`archived`])]),_:1},8,[`title`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`ID`,icon:N(Od)},{default:P(()=>[W(CD,{text:r.value.id},null,8,[`text`])]),_:1},8,[`icon`]),W($,{label:`agent`,icon:N(Vu)},{default:P(()=>[W(N(QT),{variant:`secondary`},{default:P(()=>[G(j(r.value.agent),1)]),_:1})]),_:1},8,[`icon`]),i.value?.model??r.value.model?(B(),H($,{key:0,label:`模型`,icon:N(ud)},{default:P(()=>[U(`span`,OP,j(i.value?.model??r.value.model),1)]),_:1},8,[`icon`])):K(``,!0),r.value.effort?(B(),H($,{key:1,label:`effort`,icon:N(wd)},{default:P(()=>[G(j(r.value.effort),1)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`開始`,icon:N(rd)},{default:P(()=>[W(xP,{at:r.value.started,class:`text-xs`},null,8,[`at`])]),_:1},8,[`icon`]),r.value.branch?(B(),H($,{key:2,label:`分支`,icon:N(Td)},{default:P(()=>[W(CD,{text:r.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),r.value.worktree?(B(),H($,{key:3,label:`worktree`,icon:N(xd)},{default:P(()=>[W(CD,{text:r.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),W($,{label:`工作目錄`,icon:N(Sd)},{default:P(()=>[W(CD,{text:r.value.cwd},null,8,[`text`])]),_:1},8,[`icon`]),r.value.transcript?(B(),H($,{key:4,label:`對話紀錄`,icon:N(Xd)},{default:P(()=>[W(CD,{text:r.value.transcript,class:`min-w-0`},null,8,[`text`]),W(N(sC),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground`,title:`在 Finder 顯示`,"aria-label":`在 Finder 顯示`,onClick:c[0]||=e=>N(dw)(()=>N(XC).reveal(r.value.transcript))},{default:P(()=>[W(N(yd))]),_:1})]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(MD,{title:`行動佇列`,count:r.value.actions.length},{default:P(()=>[U(`ul`,kP,[(B(!0),V(z,null,L(r.value.actions,e=>(B(),V(`li`,{key:e.id,class:`flex flex-col`},[U(`button`,{type:`button`,class:`-mx-2 flex min-h-8 items-start gap-2 rounded-md px-2 py-1.5 text-left transition-colors duration-[120ms] hover:bg-accent/50`,"aria-expanded":a.value===e.id,onClick:t=>a.value=a.value===e.id?null:e.id},[a.value===e.id?(B(),H(N(Ju),{key:0,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(Xu),{key:1,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})),W(wE,{status:e.status,class:`mt-0.5 shrink-0`},null,8,[`status`]),U(`span`,jP,j(e.id),1),U(`span`,MP,j(e.do),1),e.startedAt?(B(),V(`span`,NP,j(N(sE)(e.startedAt))+j(e.doneAt?`–${N(sE)(e.doneAt)}`:``),1)):K(``,!0)],8,AP),U(`div`,PP,[(B(!0),V(z,null,L(e.serves,e=>(B(),H(Yj,q({key:e},{ref_for:!0},N(Mw)(e.split(`#`)[0]),{id:e,onOpen:()=>N(n)(e.split(`#`)[0],{chain:!0})}),null,16,[`id`,`onOpen`]))),128))]),e.note?(B(),V(`p`,FP,j(e.note),1)):K(``,!0),a.value===e.id?(B(),V(`div`,IP,[i.value?.available?e.startedAt?f(e.id)===0?(B(),V(`p`,zP,`這段時間沒有用到 skill、agent,也沒有載入 rule 或用 Read 讀檔。用 Bash 讀的檔不會出現在這裡。`)):K(``,!0):(B(),V(`p`,RP,`這個行動沒有開始時間,追溯不到它的時間窗。`)):(B(),V(`p`,LP,`沒有對話紀錄,無法追溯。`)),(B(!0),V(z,null,L(d(e.id),e=>(B(),V(`div`,{key:e.kind,class:`flex flex-wrap items-baseline gap-1.5`},[U(`span`,BP,j(N(Kw)[e.kind]),1),(B(!0),V(z,null,L(e.items,e=>(B(),H(N(QT),{key:e.path??e.name,variant:`secondary`,class:`font-mono font-normal`,title:e.path??e.name},{default:P(()=>[G(j(e.name),1),e.count>1?(B(),V(`span`,VP,`×`+j(e.count),1)):K(``,!0),e.detail?.startsWith(`blocked`)?(B(),V(`span`,HP,`擋下`)):K(``,!0)]),_:2},1032,[`title`]))),128))]))),128))])):K(``,!0)]))),128))]),r.value.actions.length===0?(B(),V(`p`,UP,`這個會話沒有行動。`)):K(``,!0)]),_:1},8,[`count`]),W(MD,{title:`委派與接手`,count:s.value.length},{default:P(()=>[(B(!0),V(z,null,L(s.value,e=>(B(),H(wj,{key:e.label+e.id,peek:N(TC)(e.id),label:e.label,title:o(e.id)?N(Dw)(o(e.id)):e.id,status:o(e.id)?.status},null,8,[`peek`,`label`,`title`,`status`]))),128)),s.value.length===0?(B(),V(`p`,WP,`沒有委派或交接關係。`)):K(``,!0)]),_:1},8,[`count`]),W(MD,{title:`服務的項目與條件`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(wj,{key:e.ref,peek:e.task,id:e.ref,title:e.text},{default:P(()=>[W(N(mE),{"model-value":e.done,disabled:``,class:`pointer-events-none`,"aria-label":e.done?`已完成`:`未完成`},null,8,[`model-value`,`aria-label`])]),_:2},1032,[`peek`,`id`,`title`]))),128))]),_:1},8,[`count`]),i.value?.unattributed.length?(B(),H(MD,{key:0,title:`沒有對應行動的使用`,count:i.value.unattributed.length},{default:P(()=>[(B(!0),V(z,null,L(u(i.value.unattributed),e=>(B(),V(`div`,{key:e.kind,class:`flex min-h-7 items-center gap-2 text-xs`},[U(`span`,GP,j(N(Kw)[e.kind]),1),U(`span`,KP,j(e.items.length),1)]))),128))]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,qP,`這台電腦上沒有會話 `+j(e.id)+`。`,1))}}),YP={key:0,class:`pb-8`},XP={class:`truncate`},ZP={key:0,class:`flex items-center gap-1.5`},QP={key:1},$P={key:2},eF={key:0,class:`text-xs`},tF={class:`text-xs`},nF={class:`text-xs`},rF={class:`text-xs`},iF={class:`shrink-0 font-mono`},aF={class:`truncate`},oF={key:0,class:`text-sm text-muted-foreground`},sF={key:1,class:`px-5 text-muted-foreground`},cF=I({__name:`TaskPeek`,props:{m:{},t:{}},setup(e){let t=e,{open:n}=FC(),{mainline:r}=Xj(()=>t.m),i=J(()=>r.value?.tasks.find(e=>e.id===t.t)),a=J(()=>r.value?.tasks.filter(e=>e.parent===t.t)??[]),o=J(()=>(i.value?.checklist??[]).filter(e=>!e.dropped)),s=J(()=>jw(t.m,t.t)),c=e=>n(e,{chain:!0}),l=J(()=>{let e=i.value?.blockedBy?.waitingFor,t=e?Lw(e):void 0;return t&&t!==`session`&&!e.startsWith(`file:`)?e:void 0});Er(()=>Pw([l.value]));let u=e=>e.slice((r.value?.dir.length??0)+1),d=e=>e.slice(e.lastIndexOf(`/`)+1),f=e=>i.value&&dw(()=>XC.taskStatus(t.m,t.t,e,i.value.version));return(n,p)=>i.value&&N(r)?(B(),V(`div`,YP,[W(OD,{id:`${e.m}/${i.value.id}`,title:i.value.title,type:N(Iw)(i.value),status:i.value.status},{notice:P(()=>[i.value.blockedBy?(B(),H(N(_g),{key:0,variant:`warning`},{default:P(()=>[W(N(ed)),W(N(yg),null,{default:P(()=>[G(`卡住:`+j(i.value.blockedBy.reason),1)]),_:1}),W(N(vg),{class:`text-xs text-muted-foreground`},{default:P(()=>[l.value?(B(),V(`p`,ZP,[p[0]||=G(`等待 `,-1),W(Yj,q(N(Mw)(l.value),{onOpen:c}),null,16)])):i.value.blockedBy.waitingFor?(B(),V(`p`,QP,`等待 `+j(i.value.blockedBy.waitingFor),1)):K(``,!0),i.value.blockedBy.signal?(B(),V(`p`,$P,`看到「`+j(i.value.blockedBy.signal)+`」就可以繼續`,1)):K(``,!0)]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(gP,{status:i.value.status,options:N(Vw),onChange:f},null,8,[`status`,`options`]),U(`span`,XP,j(N(r).title),1)]),_:1},8,[`id`,`title`,`type`,`status`]),W(MD,null,{default:P(()=>[W(JD,{columns:1},{default:P(()=>[W($,{label:`checklist`,icon:N(Pd)},{default:P(()=>[W(QN,{done:o.value.filter(e=>e.done).length,total:o.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),i.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(_d)},{default:P(()=>[W(xE,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,eF,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`種類`,icon:N(Ad)},{default:P(()=>[G(j(i.value.kind===`branch`?`分支`:`階段`),1)]),_:1},8,[`icon`]),i.value.parent?(B(),H($,{key:1,label:`上層任務`,icon:N(ld)},{default:P(()=>[W(Yj,q(N(Mw)(N(CC)(e.m,i.value.parent)),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0),i.value.repo?(B(),H($,{key:2,label:`倉庫`,icon:N(vd)},{default:P(()=>[G(j(i.value.repo),1)]),_:1},8,[`icon`])):K(``,!0),i.value.branch?(B(),H($,{key:3,label:`分支`,icon:N(Td)},{default:P(()=>[W(CD,{text:i.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.base?(B(),H($,{key:4,label:`基底`,icon:N(Ed)},{default:P(()=>[W(CD,{text:i.value.base},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.worktree?(B(),H($,{key:5,label:`worktree`,icon:N(xd)},{default:P(()=>[W(CD,{text:i.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.merge?(B(),H($,{key:6,label:`合併狀態`,icon:N(Dd)},{default:P(()=>[G(j(N(Yw)[i.value.merge]),1)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:7,label:`分類`,icon:N(nf)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:8,label:`標籤`,icon:N(rf)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Gu)},{default:P(()=>[U(`span`,tF,j(i.value.created),1)]),_:1},8,[`icon`]),i.value.startedAt?(B(),H($,{key:9,label:`開始`,icon:N(Wd)},{default:P(()=>[U(`span`,nF,j(i.value.startedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.closedAt?(B(),H($,{key:10,label:`結束`,icon:N(Uu)},{default:P(()=>[U(`span`,rF,j(i.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:11,label:`結果`,icon:N($u)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:12,label:`來源`,icon:N(cd)},{default:P(()=>[W(Yj,q(N(Mw)(i.value.origin),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(MD,{title:`checklist`,count:i.value.checklist.length},{default:P(()=>[W(cN,{items:i.value.checklist,"ref-prefix":`${e.m}/${i.value.id}#`,version:i.value.version},null,8,[`items`,`ref-prefix`,`version`])]),_:1},8,[`count`]),i.value.body.trim()?(B(),H(MD,{key:0,title:`內文`},{default:P(()=>[W(yj,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.artifacts.length?(B(),H(MD,{key:1,title:`產物`,count:i.value.artifacts.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.artifacts,t=>(B(),H(wj,{key:t,peek:N(EC)(e.m,u(t)),title:d(t)},null,8,[`peek`,`title`]))),128))]),_:1},8,[`count`])):K(``,!0),a.value.length?(B(),H(MD,{key:2,title:`子任務`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,t=>(B(),H(wj,{key:t.id,peek:N(CC)(e.m,t.id),id:t.id,title:t.title,status:t.status},null,8,[`peek`,`id`,`title`,`status`]))),128))]),_:1},8,[`count`])):K(``,!0),W(Pj,{self:N(CC)(t.m,t.t),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(MD,{key:3,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(zj,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(MD,{title:`服務它的行動`,count:s.value.reduce((e,t)=>e+t.actions.length,0)},{default:P(()=>[(B(!0),V(z,null,L(s.value,({session:e,actions:t})=>(B(),V(z,{key:e.id},[W(wj,{peek:N(TC)(e.id),title:N(Dw)(e),status:e.status},null,8,[`peek`,`title`,`status`]),(B(!0),V(z,null,L(t,e=>(B(),V(`div`,{key:e.id,class:`flex min-h-7 items-center gap-2 pl-6 text-xs text-muted-foreground`},[W(wE,{status:e.status,class:`shrink-0`},null,8,[`status`]),U(`span`,iF,j(e.id),1),U(`span`,aF,j(e.do),1)]))),128))],64))),128)),s.value.length===0?(B(),V(`p`,oF,`這台電腦上沒有服務這個任務的行動。`)):K(``,!0)]),_:1},8,[`count`])])):(B(),V(`p`,sF,`載入 `+j(e.m)+`/`+j(e.t)+`…`,1))}}),lF={class:`flex h-11 shrink-0 items-center gap-1 px-2`},uF={key:0,class:`truncate text-xs text-muted-foreground`},dF={key:1,class:`ml-2 text-xs text-status-done`,role:`status`},fF={class:`min-h-0 flex-1 overflow-auto`},pF=`mainflow.panelWidth`,mF=360,hF=1200,gF=aT(I({__name:`PeekPanel`,setup(e){let{current:t,trail:n,full:r,back:i,close:a,toggleFull:o}=FC(),s=Number($C(pF,880)),c=M(s>=mF&&s<=hF?s:880);function l(e){let t=e.clientX,n=c.value,r=e=>c.value=Math.min(hF,Math.max(mF,n+t-e.clientX)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(pF,c.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}let u=J(()=>{let e=AC(n.value.at(-1));return e?e.kind===`session`?`會話`:e.kind===`file`?e.path.split(`/`).at(-1):e.kind===`conflict`?`存檔`:e.ref:``});return(e,s)=>N(t)?(B(),V(`aside`,{key:0,class:k([`peek-panel flex min-h-0 flex-col border-l bg-background max-[1100px]:shadow-lg`,N(r)?`flex-1`:`shrink-0`]),style:he({"--panel-width":`${c.value}px`}),"aria-label":`預覽面板`},[N(r)?K(``,!0):(B(),V(`div`,{key:0,class:`absolute inset-y-0 -left-1 w-2 cursor-col-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`拖曳調整面板寬度`,onPointerdown:au(l,[`prevent`])},null,32)),U(`div`,lF,[W(N(sC),{variant:`ghost`,size:`icon-sm`,disabled:!N(n).length,"aria-label":`上一步`,title:`上一步`,onClick:N(i)},{default:P(()=>[W(N(Yu))]),_:1},8,[`disabled`,`onClick`]),u.value?(B(),V(`span`,uF,`回到 `+j(u.value),1)):K(``,!0),N(jC)?(B(),V(`span`,dF,j(N(jC)),1)):K(``,!0),s[0]||=U(`span`,{class:`ml-auto`},null,-1),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":N(r)?`回到並排`:`開成整頁`,title:N(r)?`回到並排`:`開成整頁`,onClick:N(o)},{default:P(()=>[N(r)?(B(),H(N(Bd),{key:0})):(B(),H(N(Rd),{key:1}))]),_:1},8,[`aria-label`,`title`,`onClick`]),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":`關閉(Esc)`,title:`關閉(Esc)`,onClick:N(a)},{default:P(()=>[W(N(uf))]),_:1},8,[`onClick`])]),U(`div`,fF,[N(t).kind===`task`?(B(),H(cF,{key:N(t).ref,m:N(t).m,t:N(t).t},null,8,[`m`,`t`])):N(t).kind===`decision`?(B(),H(oM,{key:N(t).ref,m:N(t).m,d:N(t).d},null,8,[`m`,`d`])):N(t).kind===`file`?(B(),H(NM,{key:N(t).ref,m:N(t).m,path:N(t).path},null,8,[`m`,`path`])):N(t).kind===`session`?(B(),H(JP,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`mainline`?(B(),H(yP,{key:N(t).ref,m:N(t).m},null,8,[`m`])):N(t).kind===`issue`?(B(),H(JN,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`conflict`?(B(),H(qD,{key:N(t).ref,saved:N(t).saved},null,8,[`saved`])):N(t).kind===`group`?(B(),H(VN,{key:N(t).ref,id:N(t).id},null,8,[`id`])):(B(),H(zM,{key:N(t).ref,id:N(t).id},null,8,[`id`]))])],6)):K(``,!0)}}),[[`__scopeId`,`data-v-d9c80ff7`]]),_F={class:`flex h-full min-h-0 flex-col`},vF={class:`relative flex min-h-0 flex-1`},yF={class:`@container min-w-0 flex-1 overflow-auto`,"data-peek-list":``},bF=I({__name:`PageLayout`,setup(e){let{current:t,full:n}=FC();return(e,r)=>(B(),V(`div`,_F,[R(e.$slots,`header`),U(`div`,vF,[yr(U(`div`,yF,[R(e.$slots,`default`)],512),[[Vc,!(N(t)&&N(n))]]),W(gF)])]))}});function xF(e,t){let n=Qt(new Set),r=e.spec.id,i=t=>[...t.leader?[t.leader]:[],...t.items,...t.ended].flatMap(t=>[t,...(e.spec.nested?.(t)??[]).map(e=>e.item)]),a=J(()=>[...new Map(e.groups.value.flatMap(i).map(e=>[r(e),e])).values()]);F(a,e=>{let t=new Set(e.map(r));for(let e of n)t.has(e)||n.delete(e)});let o=J(()=>a.value.filter(e=>n.has(r(e)))),s=e=>{let t=e.filter(e=>n.has(r(e))).length;return t===0?!1:t===e.length||`indeterminate`},c=(e,t)=>e.forEach(e=>t?n.add(r(e)):n.delete(r(e)));async function l(e){let i=o.value.filter(n=>t.archived(n)!==e).map(r);i.length&&await dw(async()=>{let n=await XC.archiveMany(t.kind,i,e);if(n.failed.length)throw Error(`${n.failed.length} 個沒有${e?`封存`:`取消封存`}:${n.failed.map(e=>`${e.id}(${e.error})`).join(`、`)}`)})&&n.clear()}return{selected:o,active:J(()=>o.value.length>0),all:J(()=>s(a.value)),groupChecked:e=>s(i(e)),has:e=>n.has(r(e)),toggle:(e,t)=>c([e],t),setAll:e=>c(a.value,e),setGroup:(e,t)=>c(i(e),t),clear:()=>n.clear(),archivable:J(()=>o.value.filter(e=>!t.archived(e)).length),restorable:J(()=>o.value.filter(e=>t.archived(e)).length),setArchived:l}}var SF={key:0,class:`shrink-0 text-xs text-muted-foreground`},CF=[`title`],wF=I({__name:`FindingList`,setup(e){let t=[`valid`,`obsolete`],n=CN({key:`findings`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(t)},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels??[]},{key:`applies`,label:`適用範圍`,values:e=>e.appliesTo??[]}],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`applies`,label:`適用範圍`,value:e=>e.appliesTo?.join(`、`),dir:`asc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`},{key:`review`,label:`重新確認日`,value:e=>e.reviewAfter,dir:`asc`}],groups:[hN(t),{key:`category`,label:`分類`,value:e=>e.category??`未分類`}],defaultSort:`created`,defaultGroup:`status`,ended:e=>fN(e.status),archived:e=>!!e.archivedAt},()=>Q.findings),r=xF(n,{kind:`finding`,archived:e=>!!e.archivedAt}),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`applies`,label:`適用範圍`,class:`max-w-72 truncate font-mono text-xs text-muted-foreground`,sort:`applies`,value:e=>e.appliesTo,optional:!0},{key:`review`,label:`重新確認`,sort:`review`,value:e=>e.reviewAfter}],a=e=>dw(()=>XC.archiveFinding(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`發現`,description:`踩過的坑與經驗。下一個任務動手前先看這裡。`}),W(oD,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[(B(!0),V(z,null,L(e.labels??[],e=>(B(),H(N(QT),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,SF,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),applies:P(({item:e})=>[U(`span`,{title:e.appliesTo?.join(`
81
+ `)},j(e.appliesTo?.join(`、`)),9,CF)]),review:P(({item:e})=>[W(pE,{day:e.reviewAfter,ended:e.status===`obsolete`},null,8,[`day`,`ended`])]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>a(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`還沒有發現。用 `,-1),U(`code`,null,`mainflow new finding <slug> --title <title>`,-1),G(` 記下來。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),TF=e=>(e.plannedIn??e.origin??``).match(/^m\d{3}/)?.[0]??``,EF=e=>e?`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim():`不屬於主脈絡`,DF=`未分類`,OF=`沒有標籤`,kF=e=>e.labels?.length?e.labels:[OF],AF=e=>[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(e)},{key:`priority`,label:`優先度`,values:e=>[uN(e.priority)],options:lN},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels??[]},{key:`mainline`,label:`來源主脈絡`,values:e=>[TF(e)].filter(Boolean),optionLabel:EF},AN(e=>e.group)],jF=e=>[hN(e),{key:`category`,label:`分類`,value:e=>e.category??DF,trailing:[DF]},{key:`label`,label:`標籤`,value:e=>kF(e)[0],values:kF,trailing:[OF]},{key:`priority`,label:`優先度`,value:e=>uN(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`mainline`,label:`主脈絡`,value:TF,groupLabel:EF,trailing:[``]},kN(e=>e.group)],MF={key:0,class:`shrink-0 text-xs text-muted-foreground`},NF=I({__name:`IssueList`,setup(e){let t=[`open`,`planned`,`closed`],n=CN({key:`issues`,id:e=>e.id,text:e=>e.title,filters:AF(t),sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`planned`,label:`排入`,value:e=>e.plannedIn,dir:`asc`},{key:`origin`,label:`來源`,value:e=>e.origin,dir:`asc`},{key:`order`,label:`手動順序`,value:e=>e.order,dir:`asc`},{key:`priority`,label:`優先度`,value:e=>uN(e.priority),dir:`asc`},{key:`due`,label:`到期`,value:e=>e.due,dir:`asc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`}],groups:jF(t),defaultSort:`order`,defaultGroup:`status`,ended:e=>fN(e.status),archived:e=>!!e.archivedAt},()=>Q.issues),r=xF(n,{kind:`issue`,archived:e=>!!e.archivedAt}),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`due`,label:`到期`,sort:`due`,value:e=>e.due},{key:`planned`,label:`排入`,class:`max-w-56`,sort:`planned`,value:e=>e.plannedIn},{key:`origin`,label:`來源`,class:`max-w-56`,sort:`origin`,value:e=>e.origin,optional:!0}],{open:a}=FC();Er(()=>Pw(Q.issues.flatMap(e=>[e.plannedIn,e.origin])));let o=e=>dw(()=>XC.archiveIssue(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`待辦事項`,description:`跨主脈絡的後續事項。主脈絡結束或封存後仍留在這裡。`}),W(oD,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[e.archivedAt?(B(),V(`span`,MF,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),due:P(({item:e})=>[W(pE,{day:e.due,ended:e.status===`closed`},null,8,[`day`,`ended`])]),planned:P(({item:e})=>[e.plannedIn?(B(),H(Yj,q({key:0},N(Mw)(e.plannedIn),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),origin:P(({item:e})=>[e.origin?(B(),H(Yj,q({key:0},N(Mw)(e.origin),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>o(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`沒有待辦事項。用 `,-1),U(`code`,null,`mainflow new issue <slug> --title <title>`,-1),G(` 記下主脈絡結束後還要處理的事。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),PF=I({__name:`Tabs`,props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,i=F_(Sf(n,`class`),r);return(e,t)=>(B(),H(N(nC),q({"data-slot":`tabs`},N(i),{class:N(gg)(`flex flex-col gap-2`,n.class)}),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16,[`class`]))}}),FF=I({__name:`TabsList`,props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},variant:{default:`default`}},setup(e){let t=e,n=Sf(t,`class`,`variant`);return(r,i)=>(B(),H(N(aC),q({"data-slot":`tabs-list`,"data-variant":e.variant},N(n),{class:N(gg)(`group/tabs-list text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-0.75`,e.variant===`line`?`gap-1 rounded-none bg-transparent p-0`:`bg-muted`,t.class)}),{default:P(()=>[R(r.$slots,`default`)]),_:3},16,[`data-variant`,`class`]))}}),IF=I({__name:`TabsTrigger`,props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=P_(Sf(t,`class`));return(e,r)=>(B(),H(N(oC),q({"data-slot":`tabs-trigger`,class:N(gg)(`data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-3 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:text-foreground/60 group-data-[variant=line]/tabs-list:hover:text-foreground group-data-[variant=line]/tabs-list:data-[state=active]:text-foreground group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,t.class)},N(n)),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),LF={class:`w-full text-body`},RF={colspan:`3`,class:`sticky top-9 z-[5] bg-background px-6 pt-4 pb-1`},zF={class:`flex items-center gap-2 text-sm`},BF={key:0,class:`grid size-4 shrink-0 place-items-center rounded-[4px] border border-dashed text-[10px] text-muted-foreground`,"aria-label":`已不需要`},VF={class:`font-mono text-xs text-muted-foreground`},HF=[`title`],UF={key:1,class:`font-medium text-muted-foreground`},WF={class:`flex min-w-0 items-center gap-2`},GF={class:`shrink-0 font-mono text-xs text-muted-foreground`},KF=[`title`],qF={class:`flex min-w-0 items-center gap-2 text-xs`},JF={class:`truncate`},YF={key:0},XF={colspan:`3`,class:`px-6 pb-2 text-xs text-muted-foreground`},ZF={key:1},QF={key:0,class:`px-6 py-16 text-center text-sm text-muted-foreground`},$F=I({__name:`CriteriaView`,props:{mainline:{}},setup(e){let t=e,{open:n,current:r}=FC(),i=J(()=>t.mainline.tasks.flatMap(e=>e.checklist.filter(e=>!e.dropped).map(t=>({task:e,item:t})))),a=J(()=>[...t.mainline.criteria.map(e=>({key:e.id,criterion:e,rows:i.value.filter(t=>t.item.serves?.includes(e.id))})),{key:``,criterion:void 0,rows:i.value.filter(e=>!e.item.serves?.length)}].filter(e=>e.criterion||e.rows.length)),o=e=>r.value?.ref===e||void 0;return(t,r)=>(B(),V(z,null,[U(`table`,LF,[W(N(yE),{class:`sticky top-0 z-10 bg-background [&_tr]:border-b`},{default:P(()=>[W(N(_E),{class:`hover:bg-transparent`},{default:P(()=>[W(N(vE),{class:`pl-6`},{default:P(()=>[...r[0]||=[G(`checklist 項目`,-1)]]),_:1}),W(N(vE),{class:`w-72`},{default:P(()=>[...r[1]||=[G(`任務`,-1)]]),_:1}),W(N(vE),{class:`w-28 pr-6`},{default:P(()=>[...r[2]||=[G(`完成`,-1)]]),_:1})]),_:1})]),_:1}),(B(!0),V(z,null,L(a.value,t=>(B(),H(N(hE),{key:t.key,class:`[&_tr:last-child]:border-b`},{default:P(()=>[U(`tr`,null,[U(`td`,RF,[U(`div`,zF,[t.criterion?(B(),V(z,{key:0},[t.criterion.dropped?(B(),V(`span`,BF,`–`)):(B(),H(N(mE),{key:1,"model-value":t.criterion.done,disabled:``,class:`pointer-events-none`,"aria-label":t.criterion.done?`已達成`:`未達成`},null,8,[`model-value`,`aria-label`])),U(`span`,VF,j(t.criterion.id),1),U(`span`,{class:k([`min-w-0 truncate font-medium`,{"text-muted-foreground line-through":t.criterion.dropped}]),title:t.criterion.text},j(t.criterion.text),11,HF),t.criterion.dropped?K(``,!0):(B(),H(QN,{key:2,class:`ml-auto shrink-0`,done:t.rows.filter(e=>e.item.done).length,total:t.rows.length},null,8,[`done`,`total`]))],64)):(B(),V(`span`,UF,`沒有推進任何解決條件`))])])]),(B(!0),V(z,null,L(t.rows,t=>(B(),H(N(_E),{key:`${t.task.id}#${t.item.id}`,class:`h-9 transition-colors duration-[120ms]`,"data-peek":N(CC)(e.mainline.id,t.task.id),"aria-current":o(N(CC)(e.mainline.id,t.task.id)),onClick:r=>N(n)(N(CC)(e.mainline.id,t.task.id))},{default:P(()=>[W(N(gE),{class:`max-w-0 pl-6`},{default:P(()=>[U(`span`,WF,[U(`span`,GF,j(t.task.id)+`#`+j(t.item.id),1),U(`span`,{class:k([`truncate`,{"text-muted-foreground":t.item.done}]),title:t.item.text},j(t.item.text),11,KF)])]),_:2},1024),W(N(gE),{class:`max-w-72`},{default:P(()=>[U(`span`,qF,[W(Qw,{type:N(Iw)(t.task),status:t.task.status},null,8,[`type`,`status`]),U(`span`,JF,j(t.task.title),1)])]),_:2},1024),W(N(gE),{class:`pr-6 text-xs text-muted-foreground`},{default:P(()=>[G(j(t.item.done?t.item.doneAt??`已完成`:``),1)]),_:2},1024)]),_:2},1032,[`data-peek`,`aria-current`,`onClick`]))),128)),t.criterion?.dropped?(B(),V(`tr`,YF,[U(`td`,XF,[r[3]||=G(`不再需要`,-1),t.criterion.note?(B(),V(z,{key:0},[G(`:`+j(t.criterion.note),1)],64)):K(``,!0)])])):t.criterion&&t.rows.length===0?(B(),V(`tr`,ZF,[...r[4]||=[U(`td`,{colspan:`3`,class:`px-6 pb-2 text-xs text-muted-foreground`},`還沒有 checklist 項目推進這條條件。`,-1)]])):K(``,!0)]),_:2},1024))),128))]),a.value.length===0?(B(),V(`p`,QF,`這條主脈絡還沒有解決條件。`)):K(``,!0)],64))}}),eI={key:0,class:`shrink-0 text-xs text-muted-foreground`},tI=[`title`],nI=I({__name:`DecisionTable`,props:{mainline:{}},setup(e){let t=e,n=[`proposed`,`accepted`,`superseded`],r=CN({key:`decisions`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(n)},{key:`by`,label:`決策者`,values:e=>e.by?[e.by]:[],optionLabel:e=>qw[e]??e},{key:`basis`,label:`裁決方式`,values:e=>e.basis?[e.basis]:[],optionLabel:e=>Jw[e]??e}],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`by`,label:`決策者`,value:e=>e.by,dir:`asc`},{key:`reversible`,label:`能否改回`,value:e=>e.reversible===void 0?null:+!!e.reversible,dir:`desc`},{key:`created`,label:`建立`,value:e=>iE(e.created),dir:`desc`},{key:`decided`,label:`裁決時間`,value:e=>e.decidedAt?iE(e.decidedAt):void 0,dir:`desc`}],groups:[hN(n)],defaultSort:`created`,defaultGroup:`status`,ended:e=>fN(e.status)},()=>t.mainline.decisions),i=[{key:`name`,label:`名稱`,sort:`name`},{key:`by`,label:`決策者`,class:`text-xs text-muted-foreground`,sort:`by`,value:e=>e.by},{key:`basis`,label:`裁決方式`,class:`text-xs text-muted-foreground`,value:e=>e.basis},{key:`decided`,label:`裁決`,class:`font-mono text-xs text-muted-foreground tabular-nums`,sort:`decided`,value:e=>e.decidedAt},{key:`affects`,label:`影響`,class:`max-w-56 truncate font-mono text-xs text-muted-foreground`,value:e=>e.affects,optional:!0},{key:`reversible`,label:`能否改回`,class:`text-xs text-muted-foreground`,sort:`reversible`,value:e=>e.reversible,optional:!0}];return(t,n)=>(B(),V(z,null,[W(oD,{view:N(r)},null,8,[`view`]),W(XE,{view:N(r),columns:i,"item-ref":t=>N(wC)(e.mainline.id,t.id)},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:e.status===`superseded`},{default:P(()=>[e.supersededBy?(B(),V(`span`,eI,`由 `+j(e.supersededBy)+` 取代`,1)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),by:P(({item:e})=>[G(j(e.by?N(qw)[e.by]:``),1)]),basis:P(({item:e})=>[G(j(e.basis?N(Jw)[e.basis]:``),1)]),decided:P(({item:e})=>[G(j(e.decidedAt?N(cE)(e.decidedAt):``),1)]),affects:P(({item:e})=>[U(`span`,{title:e.affects?.join(`
82
+ `)},j(e.affects?.join(`、`)),9,tI)]),reversible:P(({item:e})=>[G(j(e.reversible===void 0?``:e.reversible?`可以`:`不易改回`),1)]),empty:P(()=>[n[0]||=G(`還沒有決策。用 `,-1),U(`code`,null,`mainflow new decision `+j(e.mainline.id)+` <slug> --title <title>`,1),n[1]||=G(` 記下選擇與理由。`,-1)]),_:1},8,[`view`,`item-ref`])],64))}}),rI={class:`flex min-w-0 items-center gap-2`},iI=[`href`,`title`],aI=[`title`],oI={key:0,class:`whitespace-nowrap`},sI=[`title`],cI=`-`,lI=I({__name:`FilesView`,props:{mainline:{}},setup(e){let t=e,n=J(()=>CM(t.mainline)),r=e=>{let n=t.mainline.tasks.find(t=>t.id===e)??t.mainline.decisions.find(t=>t.id===e);return n?`${e} ${n.title}`:e===cI||!e?`主脈絡本身`:e},i=CN({key:`files`,id:e=>e.key,text:e=>`${e.name} ${e.path??``}`,filters:[{key:`kind`,label:`類型`,values:e=>[e.kind],options:bM.map(e=>({value:e,label:e}))},{key:`source`,label:`來源`,values:e=>[e.source??cI],optionLabel:r},{key:`ext`,label:`副檔名`,values:e=>e.ext?[e.ext]:[],optionLabel:e=>`.${e}`}],sorts:[{key:`kind`,label:`類型`,value:e=>bM.indexOf(e.kind),dir:`asc`},{key:`name`,label:`檔名`,value:e=>e.name,dir:`asc`},{key:`updated`,label:`更新`,value:e=>e.updated,dir:`desc`},{key:`source`,label:`來源`,value:e=>e.source,dir:`asc`}],groups:[{key:`kind`,label:`類型`,value:e=>e.kind,order:bM},{key:`source`,label:`來源`,value:e=>e.source??cI,groupLabel:r}],defaultSort:`kind`,defaultGroup:`kind`},()=>n.value),a=[{key:`name`,label:`檔名`,sort:`name`},{key:`kind`,label:`類型`,class:`text-xs text-muted-foreground`,sort:`kind`},{key:`source`,label:`來源`,class:`max-w-64 truncate text-xs text-muted-foreground`,sort:`source`,value:e=>e.source,optional:!0},{key:`updated`,label:`更新`,class:`text-xs text-muted-foreground`,sort:`updated`,value:e=>e.updated}],o=e=>e.inMainline?EC(t.mainline.id,e.inMainline):void 0;return(e,t)=>(B(),V(z,null,[W(oD,{view:N(i)},null,8,[`view`]),W(XE,{view:N(i),columns:a,"item-ref":o},{name:P(({item:e})=>[U(`span`,rI,[W(Qw,{type:N(zw)(e.url??e.key,e.kind)},null,8,[`type`]),e.url?(B(),V(`a`,{key:0,href:e.url,target:`_blank`,rel:`noreferrer`,class:`truncate underline decoration-border underline-offset-4 hover:decoration-foreground`,title:e.url,onClick:t[0]||=au(()=>{},[`stop`])},j(e.name),9,iI)):(B(),V(`span`,{key:1,class:k([`truncate`,{"font-mono text-xs":e.inMainline}]),title:e.inMainline??e.path},j(e.name),11,aI)),e.remoteOnly?(B(),H(N(ad),{key:2,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-label":`只在伺服器上`,title:`只在同步伺服器上,點開時下載`})):K(``,!0),e.path?(B(),H(CD,{key:3,text:e.path,class:`min-w-0`},null,8,[`text`])):K(``,!0)])]),kind:P(({item:e})=>[G(j(e.kind),1),e.remoteOnly?(B(),V(`span`,oI,`・只在伺服器上`)):K(``,!0)]),source:P(({item:e})=>[U(`span`,{title:r(e.source??``)},j(e.source?r(e.source):``),9,sI)]),updated:P(({item:e})=>[e.updated?(B(),H(xP,{key:0,at:e.updated},null,8,[`at`])):K(``,!0)]),empty:P(()=>[...t[1]||=[G(`這條主脈絡還沒有檔案。`,-1)]]),_:1},8,[`view`])],64))}}),uI=I({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(B(),V(`div`,{"data-slot":`card`,class:k(N(gg)(`bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm`,t.class))},[R(e.$slots,`default`)],2))}}),dI={class:`inline-flex gap-1.5 font-mono text-xs`},fI=[`title`],pI=I({__name:`DepList`,props:{deps:{},within:{}},setup(e){let t=e,n=e=>t.within&&e.startsWith(`${t.within}/`)?e.slice(t.within.length+1):e;return(t,r)=>(B(),V(`span`,dI,[(B(!0),V(z,null,L(e.deps,e=>(B(),V(`span`,{key:e.to,class:k(N(Xw)[e.state].tone),title:`${e.to} ${N(Xw)[e.state].label}`},j(n(e.to)),11,fI))),128))]))}}),mI={class:`flex items-center rounded-md border p-0.5`,role:`group`,"aria-label":`任務排列`},hI={key:0,class:`flex min-h-0 gap-3 overflow-x-auto px-6 pt-2 pb-6`},gI=[`aria-label`],_I={class:`flex items-center gap-2 py-1`},vI={class:`text-xs text-muted-foreground tabular-nums`},yI={class:`flex items-center gap-2 text-xs`},bI={class:`font-mono text-muted-foreground`},xI={class:`line-clamp-2 [overflow-wrap:anywhere]`},SI={class:`flex items-center justify-between gap-2`},CI={key:0,class:`min-w-0 truncate text-xs text-muted-foreground`},wI={key:0,class:`py-2 text-xs text-muted-foreground`},TI=[`title`],EI=`mainflow.list.tasks.mode`,DI=I({__name:`TaskViews`,props:{mainline:{}},setup(e){let t=e,n=[{key:`table`,label:`表格`,icon:Jd},{key:`board`,label:`看板`,icon:od},{key:`tree`,label:`樹狀`,icon:Ld}],r=$C(EI,`table`),i=M(n.some(e=>e.key===r)?r:`table`);function a(e){i.value=e,ew(EI,e)}let o=()=>t.mainline.tasks,s=J(()=>new Map(t.mainline.tasks.map(e=>[e.id,e])));function c(e){let t=e;for(;t?.kind===`branch`&&t.parent;)t=s.value.get(t.parent);return t?.id??e.id}let l=e=>e.checklist.filter(e=>e.done).length,u={id:e=>e.id,text:e=>`${e.title} ${e.branch??``}`,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(Vw)},{key:`priority`,label:`優先度`,values:e=>[uN(e.priority)],options:lN},{key:`repo`,label:`倉庫`,values:e=>e.repo?[e.repo]:[]},{key:`kind`,label:`種類`,values:e=>[e.kind],options:[{value:`phase`,label:`階段`},{value:`branch`,label:`分支`}]},{key:`label`,label:`標籤`,values:e=>e.labels??[]}]},d=CN({...u,key:`tasks`,sorts:[{key:`order`,label:`手動順序`,value:e=>e.order??Number(e.id.slice(1)),dir:`asc`},{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`repo`,label:`倉庫`,value:e=>e.repo,dir:`asc`},{key:`depends`,label:`依賴`,value:e=>b(e)[0]?.to,dir:`asc`},{key:`branch`,label:`分支`,value:e=>e.branch,dir:`asc`},{key:`status`,label:`狀態`,value:e=>Vw.indexOf(e.status),dir:`asc`},{key:`priority`,label:`優先度`,value:e=>uN(e.priority),dir:`asc`},{key:`progress`,label:`checklist 進度`,value:e=>e.checklist.length?l(e)/e.checklist.length:null,dir:`desc`}],groups:[{key:`phase`,label:`階段`,value:c,groupLabel:e=>s.value.get(e)?.title??e,status:e=>s.value.get(e)?.status,leader:e=>s.value.get(e)},hN(Vw),{key:`repo`,label:`倉庫`,value:e=>e.repo??`沒有指定倉庫`}],defaultSort:`order`,defaultGroup:`status`,ended:e=>fN(e.status)},o),f=e=>t.mainline.tasks.filter(t=>t.parent===e).sort((e,t)=>(e.order??1/0)-(t.order??1/0)||e.id.localeCompare(t.id)),p=(e,t=1)=>f(e.id).flatMap(e=>[{item:e,depth:t},...p(e,t+1)]),m=CN({...u,key:`tasks`,sorts:[{key:`order`,label:`手動順序`,value:e=>e.order??Number(e.id.slice(1)),dir:`asc`}],groups:[],defaultSort:`order`,defaultGroup:``,nested:e=>p(e)},()=>t.mainline.tasks.filter(e=>!e.parent||!s.value.has(e.parent))),h=J(()=>Vw.map(e=>({status:e,tasks:d.sorted.value.filter(t=>t.status===e)}))),g=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`progress`,label:`checklist`,sort:`progress`,value:e=>e.checklist.length},{key:`repo`,label:`倉庫`,class:`text-xs text-muted-foreground`,sort:`repo`,value:e=>e.repo},{key:`depends`,label:`依賴`,sort:`depends`,value:e=>b(e),optional:!0},{key:`branch`,label:`分支`,class:`max-w-56 truncate font-mono text-xs text-muted-foreground`,sort:`branch`,value:e=>e.branch,optional:!0}],{open:_,current:v}=FC(),y=e=>CC(t.mainline.id,e.id);function b(e){return Q.relations.deps.filter(t=>t.from===y(e))}return(t,r)=>(B(),V(z,null,[W(oD,{view:i.value===`tree`?N(m):N(d),grouping:i.value===`table`},{views:P(()=>[U(`div`,mI,[(B(),V(z,null,L(n,e=>W(N(sC),{key:e.key,variant:i.value===e.key?`secondary`:`ghost`,size:`xs`,"aria-pressed":i.value===e.key,onClick:t=>a(e.key)},{default:P(()=>[(B(),H(fa(e.icon))),G(j(e.label),1)]),_:2},1032,[`variant`,`aria-pressed`,`onClick`])),64))])]),_:1},8,[`view`,`grouping`]),i.value===`board`?(B(),V(`div`,hI,[(B(!0),V(z,null,L(h.value,e=>(B(),V(`section`,{key:e.status,class:`flex w-64 shrink-0 flex-col gap-2`,"aria-label":N(Gw)[e.status]},[U(`div`,_I,[W(TE,{status:e.status},null,8,[`status`]),U(`span`,vI,j(e.tasks.length),1)]),(B(!0),V(z,null,L(e.tasks,e=>(B(),H(N(uI),{key:e.id,class:k([`min-w-0 cursor-pointer gap-2 p-3 shadow-xs transition-colors duration-[120ms] hover:bg-accent/50`,{"bg-muted":N(v)?.ref===y(e)}]),"data-peek":y(e),"aria-current":N(v)?.ref===y(e)||void 0,onClick:t=>N(_)(y(e))},{default:P(()=>[U(`div`,yI,[W(Qw,{type:N(Iw)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,bI,j(e.id),1),W(xE,{priority:e.priority},null,8,[`priority`])]),U(`p`,xI,j(e.title),1),U(`div`,SI,[W(QN,{done:l(e),total:e.checklist.length},null,8,[`done`,`total`]),e.repo?(B(),V(`span`,CI,j(e.repo),1)):K(``,!0)])]),_:2},1032,[`class`,`data-peek`,`aria-current`,`onClick`]))),128)),e.tasks.length===0?(B(),V(`p`,wI,`沒有任務`)):K(``,!0)],8,gI))),128))])):(B(),H(XE,{key:1,view:i.value===`tree`?N(m):N(d),columns:g,"item-ref":y,"item-type":N(Iw)},{name:P(({item:e,depth:t})=>[W(hD,{status:e.status,id:e.id,title:e.title,depth:t,type:N(Iw)(e)},null,8,[`status`,`id`,`title`,`depth`,`type`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),progress:P(({item:e})=>[W(QN,{done:l(e),total:e.checklist.length},null,8,[`done`,`total`])]),repo:P(({item:e})=>[G(j(e.repo),1)]),depends:P(({item:t})=>[W(pI,{deps:b(t),within:e.mainline.id},null,8,[`deps`,`within`])]),branch:P(({item:e})=>[U(`span`,{title:e.branch},j(e.branch),9,TI)]),empty:P(()=>[r[0]||=G(`還沒有任務。執行 `,-1),U(`code`,null,`mainflow new task `+j(e.mainline.id)+` <slug> --title <title>`,1),r[1]||=G(` 建立。`,-1)]),_:1},8,[`view`,`item-type`]))],64))}}),OI={class:`px-6 pt-6 pb-3`},kI={class:`mt-1 text-title font-semibold`},AI={class:`mt-3 flex flex-wrap items-center gap-3 text-xs text-muted-foreground`},jI={key:0},MI={key:0,class:`text-xs text-muted-foreground tabular-nums`},NI={key:0,class:`max-w-5xl px-1 pt-2 pb-10`},PI={key:1,class:`px-6 py-16 text-center text-muted-foreground`},FI=`mainflow.mainlineView`,II=I({__name:`MainlineDetail`,setup(e){let t=tp(),n=ep(),{id:r,mainline:i}=Xj(),a=[{key:`overview`,label:`概覽`},{key:`tasks`,label:`任務`},{key:`criteria`,label:`條件`},{key:`decisions`,label:`決策`},{key:`files`,label:`資料`}],o=J(()=>a.find(e=>e.key===t.query.view)?.key??`overview`),s=e=>{let t=i.value;if(t)return{overview:void 0,tasks:t.tasks.length,criteria:t.criteria.length,decisions:t.decisions.length,files:CM(t).length}[e]},c=e=>n.replace({query:{view:String(e)}});F(()=>[r.value,t.query.view,t.query.tab],([e,r,i])=>{if(!e||typeof i==`string`)return;let a=$C(FI,{});typeof r==`string`?ew(FI,{...a,[e]:r}):a[e]&&a[e]!==`overview`&&n.replace({query:{...t.query,view:a[e]}})},{immediate:!0}),Er(()=>{let e=t.query.tab;if(typeof e!=`string`)return;let{tab:r,...i}=t.query,a={...i,view:e===`views`?`files`:e};n.replace({query:a})});let l=e=>i.value&&dw(()=>XC.mainlineStatus(r.value,e,i.value.version)),u=e=>i.value&&dw(()=>XC.mainlineTitle(r.value,e,i.value.version)),d=()=>i.value&&dw(()=>XC.archive(r.value,!i.value.archivedAt,i.value.version));return(e,t)=>N(i)?(B(),H(bF,{key:0},{header:P(()=>[U(`header`,OI,[W(CD,{text:N(i).id},null,8,[`text`]),U(`h1`,kI,[W(wD,{value:N(i).title,onSave:u},null,8,[`value`])]),U(`div`,AI,[W(gP,{status:N(i).status,options:N(Bw),onChange:l},null,8,[`status`,`options`]),W(xE,{priority:N(i).priority},null,8,[`priority`]),N(i).archivedAt?(B(),V(`span`,jI,`已封存 `+j(N(i).archivedAt),1)):K(``,!0),W(eE,{class:`ml-auto`,archived:!!N(i).archivedAt,onToggle:d},null,8,[`archived`])])]),W(N(PF),{"model-value":o.value,"onUpdate:modelValue":c},{default:P(()=>[W(N(FF),{variant:`line`,class:`h-9 w-full justify-start border-b px-6`},{default:P(()=>[(B(),V(z,null,L(a,e=>W(N(IF),{key:e.key,value:e.key,class:`flex-none px-2`},{default:P(()=>[G(j(e.label),1),s(e.key)===void 0?K(``,!0):(B(),V(`span`,MI,j(s(e.key)),1))]),_:2},1032,[`value`])),64))]),_:1})]),_:1},8,[`model-value`])]),default:P(()=>[o.value===`overview`?(B(),V(`div`,NI,[W(fP,{mainline:N(i),columns:2},null,8,[`mainline`])])):o.value===`tasks`?(B(),H(DI,{key:1,mainline:N(i)},null,8,[`mainline`])):o.value===`criteria`?(B(),H($F,{key:2,mainline:N(i)},null,8,[`mainline`])):o.value===`decisions`?(B(),H(nI,{key:3,mainline:N(i)},null,8,[`mainline`])):(B(),H(lI,{key:4,mainline:N(i)},null,8,[`mainline`]))]),_:1})):(B(),V(`p`,PI,`載入 `+j(N(r))+`…`,1))}}),LI={key:0,class:`shrink-0 text-xs text-muted-foreground`},RI=I({__name:`MainlineList`,setup(e){let t={key:`mainlines`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(Bw)},{key:`priority`,label:`優先度`,values:e=>[uN(e.priority)],options:lN},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels},AN(e=>e.group)],sorts:[{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`criteria`,label:`解決條件`,value:e=>e.criteria.total?e.criteria.done/e.criteria.total:null,dir:`desc`},{key:`priority`,label:`優先度`,value:e=>uN(e.priority),dir:`asc`},{key:`updated`,label:`更新`,value:e=>e.updated,dir:`desc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`},{key:`due`,label:`到期`,value:e=>e.due,dir:`asc`}],groups:[hN(Bw),{key:`priority`,label:`優先度`,value:e=>uN(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`category`,label:`分類`,value:e=>e.category??`未分類`},kN(e=>e.group)],defaultSort:`updated`,defaultGroup:`status`,ended:e=>fN(e.status),archived:e=>!!e.archivedAt},n=e=>Q.relations.mainlineDeps.filter(t=>t.from===e.id),r=CN(t,()=>Q.summary?.mainlines??[]),i=xF(r,{kind:`mainline`,archived:e=>!!e.archivedAt}),a=[{key:`name`,label:`名稱`,sort:`name`},{key:`priority`,label:`優先度`,sort:`priority`},{key:`criteria`,label:`解決條件`,sort:`criteria`,value:e=>e.criteria.total},{key:`deps`,label:`依賴`,value:n,optional:!0},{key:`due`,label:`到期`,sort:`due`,value:e=>e.due},{key:`updated`,label:`更新`,class:`text-xs text-muted-foreground`,sort:`updated`,optional:!0}],o=e=>dw(()=>XC.archive(e.id,!e.archivedAt));return(e,t)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`主脈絡`,description:`一條主脈絡是一件要做完的事:意圖、解決條件,以及推進它的任務與決策。`}),W(oD,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(r),selection:N(i),columns:a,"item-ref":e=>e.id},{name:P(({item:e})=>[W(hD,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[(B(!0),V(z,null,L(e.labels,e=>(B(),H(N(QT),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,LI,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(xE,{priority:e.priority},null,8,[`priority`])]),criteria:P(({item:e})=>[W(QN,{done:e.criteria.done,total:e.criteria.total},null,8,[`done`,`total`])]),deps:P(({item:e})=>[W(pI,{deps:n(e)},null,8,[`deps`])]),due:P(({item:e})=>[W(pE,{day:e.due,ended:N(fN)(e.status)},null,8,[`day`,`ended`])]),updated:P(({item:e})=>[W(xP,{at:e.updated},null,8,[`at`])]),actions:P(({item:e})=>[W(N(sC),{variant:`ghost`,size:`xs`,class:`text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${e.id}`,onClick:t[0]||=au(()=>{},[`stop`])},{default:P(()=>[W(N(ef)),t[1]||=G(`開啟`,-1)]),_:1},8,[`to`])]),_:2},1024),W(eE,{archived:!!e.archivedAt,onToggle:t=>o(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[2]||=[G(`沒有主脈絡。在 hub 內執行 `,-1),U(`code`,null,`mainflow new mainline <slug> --title <title>`,-1),G(` 建立第一個。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(i)},null,8,[`selection`])]),_:1}))}}),zI=[`title`],BI=[`title`],VI=[`title`],HI=I({__name:`OpsLog`,setup(e){let t=e=>!/fail|error|denied|reject|abort|失敗|錯誤|拒絕|中止/i.test(e.result),n=e=>e.ref?.match(/^m\d{3}/)?.[0]??``,r=CN({key:`ops`,id:e=>`${e.at}|${e.target}|${e.operation}`,text:e=>`${e.operation} ${e.target} ${e.ref??``}`,filters:[{key:`result`,label:`結果`,values:e=>[t(e)?`success`:`failed`],options:[{value:`success`,label:`成功`},{value:`failed`,label:`沒有成功`}]},{key:`target`,label:`目標系統`,values:e=>[e.target]},{key:`mainline`,label:`主脈絡`,values:e=>[n(e)].filter(Boolean),optionLabel:e=>`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim()}],sorts:[{key:`at`,label:`時間`,value:e=>iE(e.at),dir:`desc`},{key:`operation`,label:`操作`,value:e=>e.operation,dir:`asc`},{key:`target`,label:`目標系統`,value:e=>e.target,dir:`asc`},{key:`result`,label:`結果`,value:e=>+!!t(e),dir:`asc`},{key:`ref`,label:`關聯`,value:e=>e.ref,dir:`asc`}],groups:[{key:`month`,label:`月份`,value:e=>oE(e.at).slice(0,7),latestFirst:!0},{key:`day`,label:`日期`,value:e=>oE(e.at),latestFirst:!0}],defaultSort:`at`,defaultGroup:`month`},()=>Q.ops),i=[{key:`operation`,label:`操作`,sort:`operation`},{key:`target`,label:`目標系統`,class:`max-w-64 truncate font-mono text-xs text-muted-foreground`,sort:`target`,optional:!0},{key:`result`,label:`結果`,class:`max-w-40 truncate text-xs`,sort:`result`},{key:`ref`,label:`關聯`,class:`max-w-56`,sort:`ref`,value:e=>e.ref,optional:!0},{key:`at`,label:`時間`,class:`font-mono text-xs text-muted-foreground tabular-nums`,sort:`at`}],{open:a}=FC();return Er(()=>Pw(Q.ops.map(e=>e.ref))),(e,n)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`操作紀錄`,description:`對外部系統執行過的操作,只追加不改寫。`}),W(oD,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(r),columns:i},{operation:P(({item:e})=>[U(`span`,{class:`block truncate`,title:e.operation},j(e.operation),9,zI)]),target:P(({item:e})=>[U(`span`,{title:e.target},j(e.target),9,BI)]),result:P(({item:e})=>[U(`span`,{class:k(t(e)?`text-muted-foreground`:`text-foreground`),title:e.result},[t(e)?K(``,!0):(B(),H(N(Qu),{key:0,class:`mr-1 inline size-3.5 align-[-2px] text-destructive`})),G(j(e.result),1)],10,VI)]),ref:P(({item:e})=>[e.ref?(B(),H(Yj,q({key:0},N(Mw)(e.ref),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),at:P(({item:e})=>[G(j(N(cE)(e.at).slice(5)),1)]),empty:P(()=>[...n[0]||=[G(`還沒有紀錄。用 `,-1),U(`code`,null,`mainflow ops add --target <系統> --op <操作> --result <結果>`,-1),G(` 記錄 push、發布、合併這類對外操作。`,-1)]]),_:1},8,[`view`])]),_:1}))}}),UI={key:0,class:`overflow-x-auto px-6 pb-2`},WI=[`aria-colcount`],GI=[`title`],KI={class:`text-xs text-muted-foreground tabular-nums`},qI={key:0,class:`col-span-full flex min-w-0 items-center gap-2 pt-4 pb-2 text-sm`,role:`rowheader`},JI=[`aria-label`,`aria-expanded`,`onClick`],YI={key:1,class:`truncate font-medium`},XI={class:`text-xs text-muted-foreground tabular-nums`},ZI={key:1,class:`px-6 py-16 text-center text-sm text-muted-foreground`},QI=I({__name:`BoardView`,props:{view:{},axis:{}},setup(e){let t=e,n=J(()=>t.view.spec.groups.find(e=>e.key===t.axis)??t.view.spec.groups[0]),r=J(()=>_N(n.value,t.view.sorted.value)),i=J(()=>t.view.group.value!==``),a=(e,t)=>e.filter(e=>gN(n.value,e).includes(t)),o=e=>[...e.items,...e.ended];return(t,n)=>e.view.groups.value.length?(B(),V(`div`,UI,[U(`div`,{class:`grid gap-x-3`,style:he({gridTemplateColumns:`repeat(${r.value.length}, minmax(20rem, 1fr))`}),role:`table`,"aria-colcount":r.value.length},[(B(!0),V(z,null,L(r.value,e=>(B(),V(`div`,{key:e.key,class:`flex min-w-0 items-center gap-2 border-b py-2`,role:`columnheader`},[e.status?(B(),H(TE,{key:0,status:e.status},null,8,[`status`])):(B(),V(`span`,{key:1,class:`truncate text-sm font-medium`,title:e.label},j(e.label),9,GI)),U(`span`,KI,j(e.items.length),1)]))),128)),(B(!0),V(z,null,L(e.view.groups.value,n=>(B(),V(z,{key:n.key},[i.value?(B(),V(`div`,qI,[U(`button`,{type:`button`,class:`-ml-1 grid size-5 shrink-0 place-items-center rounded-sm hover:bg-accent`,"aria-label":e.view.collapsed.has(n.key)?`展開分組`:`收合分組`,"aria-expanded":!e.view.collapsed.has(n.key),onClick:t=>e.view.toggleCollapsed(n.key)},[e.view.collapsed.has(n.key)?(B(),H(N(Xu),{key:1,class:`size-4 text-muted-foreground`})):(B(),H(N(Ju),{key:0,class:`size-4 text-muted-foreground`}))],8,JI),n.status?(B(),H(TE,{key:0,status:n.status},null,8,[`status`])):(B(),V(`span`,YI,j(n.label),1)),U(`span`,XI,j(o(n).length),1)])):K(``,!0),!e.view.collapsed.has(n.key)||!i.value?(B(!0),V(z,{key:1},L(r.value,r=>(B(),V(`div`,{key:r.key,class:`flex min-w-0 flex-col gap-2 py-2`,role:`cell`},[(B(!0),V(z,null,L(a(o(n),r.key),n=>R(t.$slots,`card`,{item:n},void 0,void 0,e.view.spec.id(n))),128))]))),128)):K(``,!0)],64))),128))],12,WI)])):(B(),V(`div`,ZI,[e.view.total.value>0?(B(),V(z,{key:0},[n[1]||=G(` 沒有符合條件的項目。`,-1),W(N(sC),{variant:`link`,size:`xs`,class:`px-0`,onClick:e.view.clearAll},{default:P(()=>[...n[0]||=[G(`清除篩選與搜尋`,-1)]]),_:1},8,[`onClick`])],64)):R(t.$slots,`empty`,{},void 0,void 0,1)]))}}),$I=.01,eL=e=>Math.min(2,Math.max($I,e));function tL(e,t,n,r){let i=eL(t),a=(n-e.x)/e.zoom,o=(r-e.y)/e.zoom;return{zoom:i,x:n-a*i,y:r-o*i}}function nL(e,t,n=.9){if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return{x:0,y:0,zoom:1};let r=eL(Math.min(1,t.width*n/e.width,t.height*n/e.height));return{zoom:r,x:(t.width-e.width*r)/2,y:(t.height-e.height*r)/2}}function rL(e){if(e.deltaMode!==0)return!0;let t=e.wheelDeltaY;return typeof t==`number`&&t!==0&&t%120==0&&e.deltaX===0}function iL(e,t){let n=new Set(t.flatMap(e=>[e.from,e.to])),r=new Map;for(let e of t)r.set(e.from,[...r.get(e.from)??[],e.to]);let i=new Map,a=new Set;function o(e){let t=i.get(e);if(t!==void 0)return t;if(a.has(e))return 0;a.add(e);let n=Math.max(0,...(r.get(e)??[]).map(e=>o(e)+1));return a.delete(e),i.set(e,n),n}let s=[];for(let t of e){if(!n.has(t))continue;let e=o(t);for(;s.length<=e;)s.push([]);s[e].push(t)}return{columns:s.filter(e=>e.length>0),free:e.filter(e=>!n.has(e))}}function aL(e,t,n){let r=e=>e===void 0?1/0:n.includes(e)?n.indexOf(e):n.length;return[...new Set([...e.columns.flat(),...e.free].map(t))].sort((e,t)=>r(e)-r(t)||(e??``).localeCompare(t??``)).map(n=>{let r=e.columns.map(e=>e.filter(e=>t(e)===n)),i=e.free.filter(e=>t(e)===n);return n===void 0?{columns:r,free:i}:{group:n,columns:r,free:i}})}var oL=[`data-node`,`aria-pressed`,`title`],sL={class:`flex min-w-0 items-center gap-2`},cL={class:`truncate`},lL={class:`shrink-0 font-mono text-xs text-muted-foreground`},uL=[`title`],dL={class:`h-1 w-12 overflow-hidden rounded-full bg-muted`},fL={class:`flex min-w-0 items-center gap-2`},pL=[`title`],mL=I({__name:`MainlineNode`,props:{id:{},picked:{type:Boolean}},emits:[`pick`],setup(e){let t=e,n=J(()=>Q.summary?.mainlines.find(e=>e.id===t.id)),r=J(()=>n.value?.title??Mw(t.id).title??``),i=J(()=>n.value?.status??Mw(t.id).status),a=J(()=>n.value?.items),o=J(()=>fN(i.value??``)),s=J(()=>OC(t.id)),c=J(()=>{let e=Q.mainlines[t.id]?.tasks;return e?mN(e):void 0}),l=J(()=>a.value?.total?Math.round(100*a.value.done/a.value.total):0);return(t,n)=>(B(),V(`button`,{type:`button`,class:k([`relative z-[1] flex w-full min-w-0 flex-col gap-1.5 rounded-xl border px-3 py-2.5 text-left transition-[background-color,border-color] duration-[120ms] focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-none`,[s.value?`border-dashed border-muted-foreground/60 bg-background hover:bg-[color-mix(in_oklab,var(--accent)_50%,var(--background))]`:`bg-card shadow-xs hover:bg-[color-mix(in_oklab,var(--accent)_50%,var(--card))]`,{"border-ring":e.picked}]]),"data-node":e.id,"aria-pressed":e.picked,title:s.value?`${e.id}:在新分頁開啟另一個 hub`:void 0,onClick:n[0]||=n=>t.$emit(`pick`,e.id,n)},[U(`span`,sL,[W(Qw,{type:`mainline`,status:i.value},null,8,[`status`]),s.value?(B(),H(N(QT),{key:0,variant:`outline`,class:`min-w-0 shrink font-mono text-[11px] text-muted-foreground`},{default:P(()=>[U(`span`,cL,j(s.value.hub),1)]),_:1})):K(``,!0),U(`span`,lL,j(s.value?.local??e.id),1),s.value?(B(),H(N(zu),{key:1,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`})):K(``,!0),a.value?(B(),V(`span`,{key:2,class:`ml-auto flex shrink-0 items-center gap-1.5 text-xs text-muted-foreground tabular-nums`,title:`checklist ${a.value.done}/${a.value.total}`},[U(`span`,dL,[U(`span`,{class:`block h-full bg-foreground`,style:he({width:`${l.value}%`})},null,4)]),G(` `+j(a.value.done)+`/`+j(a.value.total),1)],8,uL)):K(``,!0)]),U(`span`,fL,[U(`span`,{class:k([`truncate font-medium`,{"text-muted-foreground":o.value}])},j(r.value),3),!o.value&&c.value?(B(),V(`span`,{key:0,class:k([`ml-auto inline-flex shrink-0 items-center gap-1 text-xs tabular-nums`,{"text-muted-foreground":!c.value.doing}]),title:`進行中 ${c.value.doing}/未完成 ${c.value.open} 個任務`},[W(Qw,{type:`phase`,status:c.value.doing?`doing`:void 0},null,8,[`status`]),G(j(c.value.doing)+`/`+j(c.value.open),1)],10,pL)):K(``,!0)])],10,oL))}}),hL=[`data-serves`,`data-session`,`aria-pressed`],gL={"data-session-icon":``,class:`relative row-span-2 grid size-6 place-items-center rounded-md bg-muted text-foreground`},_L={class:`flex min-w-0 items-baseline gap-1`},vL={class:`truncate font-medium`},yL=[`title`],bL=[`title`],xL={class:`truncate leading-4 text-muted-foreground`},SL=I({__name:`SessionNode`,props:{session:{},serves:{},picked:{type:Boolean}},emits:[`pick`],setup(e){let t=e,n=J(()=>t.session.actions.find(e=>e.status===`doing`)??t.session.actions.find(e=>e.status===`todo`)),r=J(()=>mN(t.session.actions)),i=Fw.session.icon;return(t,a)=>(B(),V(`button`,{type:`button`,class:k([`relative z-[1] grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-x-2 rounded-md border py-1 pr-2 pl-1 text-left text-xs transition-colors duration-[120ms] hover:bg-accent focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-none`,e.picked?`border-ring`:`border-transparent`]),"data-serves":e.serves,"data-session":e.session.id,"aria-pressed":e.picked,onClick:a[0]||=e=>t.$emit(`pick`,e)},[U(`span`,gL,[(B(),H(fa(N(i)),{class:`size-3.5`})),U(`span`,{class:k([`absolute -right-0.5 -bottom-0.5 size-2 rounded-full border-[1.5px] border-background`,n.value?`bg-status-done`:`bg-status-todo`])},null,2)]),U(`span`,_L,[U(`span`,vL,j(N(Dw)(e.session)),1),e.session.elsewhere?(B(),V(`span`,{key:0,class:`shrink-0 text-muted-foreground`,title:`其他環境:工作目錄 ${e.session.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,yL)):K(``,!0),r.value.open?(B(),V(`span`,{key:1,class:k([`shrink-0 tabular-nums`,{"text-muted-foreground":!r.value.doing}]),title:`進行中 ${r.value.doing}/未處理 ${r.value.open} 個行動`},`(`+j(r.value.doing)+`/`+j(r.value.open)+`)`,11,bL)):K(``,!0)]),U(`span`,xL,j(n.value?.do??`沒有待做的行動`),1)],10,hL))}}),CL={class:`rounded-xl border bg-card text-body shadow-xs`},wL={class:`flex h-10 items-center gap-2 px-4`},TL={class:`font-mono text-xs text-muted-foreground`},EL={class:`flex flex-col gap-4 px-4 pb-4`},DL={class:`text-base font-semibold [overflow-wrap:anywhere]`},OL={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},kL={class:`flex flex-col gap-0.5`},AL=[`onClick`],jL={class:`shrink-0 font-mono text-muted-foreground`},ML={class:`truncate`},NL={class:`ml-auto shrink-0 text-muted-foreground`},PL={key:0,class:`px-1.5 text-xs text-muted-foreground`},FL={class:`flex flex-col gap-0.5`},IL={key:0,class:`px-1.5 text-xs text-muted-foreground`},LL={class:`flex h-10 items-center gap-2 px-4`},RL={class:`flex flex-col gap-4 px-4 pb-4`},zL={class:`text-base font-semibold [overflow-wrap:anywhere]`},BL={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},VL={class:`flex flex-col gap-0.5`},HL={class:`flex flex-col gap-0.5`},UL={class:`shrink-0 font-mono text-muted-foreground`},WL={class:`truncate`},GL={key:1,class:`px-1.5 text-xs text-muted-foreground`},KL={key:2,class:`px-4 py-6 text-sm text-muted-foreground`},qL=I({__name:`RunningPreview`,props:{picked:{}},emits:[`pickMainline`,`pickSession`],setup(e,{emit:t}){let n=e,r=t,{open:i}=FC(),a=[`doing`,`blocked`,`todo`],o=Ew,s=J(()=>{if(n.picked?.kind!==`mainline`)return;let e=n.picked.id,t=Q.summary?.mainlines.find(t=>t.id===e),r=(Q.mainlines[e]?.tasks??[]).filter(e=>a.includes(e.status)).sort((e,t)=>a.indexOf(e.status)-a.indexOf(t.status)||(e.order??0)-(t.order??0));return{id:e,loaded:!!Q.mainlines[e],title:t?.title??Mw(e).title??e,status:t?.status,criteria:t?.criteria,items:t?.items,tasks:r,sessions:kw().filter(t=>Ow(t)===e)}}),c=J(()=>n.picked?.kind===`session`?Q.sessions.find(e=>e.id===n.picked.id):void 0),l=e=>{let t=e=>Q.sessions.filter(t=>t.delegatedFrom===e).flatMap(e=>[e,...t(e.id)]),n=t(e.id);return n.length?`${n.filter(e=>e.status===`active`).length} 個進行中,共 ${n.length} 個`:`沒有`};return(e,t)=>(B(),V(`div`,CL,[s.value?(B(),V(z,{key:0},[U(`div`,wL,[W(Qw,{type:`mainline`,status:s.value.status},null,8,[`status`]),U(`span`,TL,j(s.value.id),1),t[2]||=U(`span`,{class:`text-xs text-muted-foreground`},`主脈絡`,-1)]),U(`div`,EL,[U(`h3`,DL,j(s.value.title),1),U(`dl`,OL,[t[5]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[s.value.status?(B(),H(TE,{key:0,status:s.value.status},null,8,[`status`])):K(``,!0)]),s.value.criteria?(B(),V(z,{key:0},[t[3]||=U(`dt`,{class:`text-muted-foreground`},`解決條件`,-1),U(`dd`,null,[W(QN,{done:s.value.criteria.done,total:s.value.criteria.total},null,8,[`done`,`total`])])],64)):K(``,!0),s.value.items?(B(),V(z,{key:1},[t[4]||=U(`dt`,{class:`text-muted-foreground`},`checklist`,-1),U(`dd`,null,[W(QN,{done:s.value.items.done,total:s.value.items.total},null,8,[`done`,`total`])])],64)):K(``,!0)]),U(`section`,kL,[t[6]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`未完成的任務`,-1),(B(!0),V(z,null,L(s.value.tasks,e=>(B(),V(`button`,{key:e.id,type:`button`,class:`flex h-7 min-w-0 items-center gap-2 rounded-md px-1.5 text-left text-xs hover:bg-accent`,onClick:t=>N(i)(N(CC)(s.value.id,e.id))},[W(Qw,{type:N(Iw)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,jL,j(e.id),1),U(`span`,ML,j(e.title),1),U(`span`,NL,j(N(Gw)[e.status]),1)],8,AL))),128)),s.value.tasks.length?K(``,!0):(B(),V(`p`,PL,j(s.value.loaded?`沒有`:`載入中…`),1))]),U(`section`,FL,[t[7]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`會話`,-1),(B(!0),V(z,null,L(s.value.sessions,e=>(B(),H(SL,{key:e.id,session:e,onPick:t=>r(`pickSession`,e.id)},null,8,[`session`,`onPick`]))),128)),s.value.sessions.length?K(``,!0):(B(),V(`p`,IL,`沒有`))]),U(`div`,null,[W(N(sC),{variant:`outline`,size:`sm`,"as-child":``},{default:P(()=>[W(N(Am),{to:`/mainlines/${s.value.id}`},{default:P(()=>[...t[8]||=[G(`開啟主脈絡`,-1)]]),_:1},8,[`to`])]),_:1})])])],64)):c.value?(B(),V(z,{key:1},[U(`div`,LL,[W(Qw,{type:`session`,status:c.value.status},null,8,[`status`]),t[9]||=U(`span`,{class:`text-xs text-muted-foreground`},`會話`,-1)]),U(`div`,RL,[U(`h3`,zL,j(N(Dw)(c.value)),1),U(`dl`,BL,[t[10]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[W(TE,{status:c.value.status},null,8,[`status`])]),t[11]||=U(`dt`,{class:`text-muted-foreground`},`子代理`,-1),U(`dd`,null,j(l(c.value)),1)]),U(`section`,VL,[t[12]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`目前行動`,-1),U(`p`,{class:k([`text-xs [overflow-wrap:anywhere]`,{"text-muted-foreground":!N(o)(c.value)}])},j(N(o)(c.value)?.do??`沒有待做的行動`),3)]),U(`section`,HL,[t[13]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`服務的主脈絡`,-1),N(Ow)(c.value)?(B(),V(`button`,{key:0,type:`button`,class:`flex h-7 min-w-0 items-center gap-2 rounded-md px-1.5 text-left text-xs hover:bg-accent`,onClick:t[0]||=e=>r(`pickMainline`,N(Ow)(c.value))},[W(Qw,{type:`mainline`,status:N(Mw)(N(Ow)(c.value)).status},null,8,[`status`]),U(`span`,UL,j(N(Ow)(c.value)),1),U(`span`,WL,j(N(Mw)(N(Ow)(c.value)).title),1)])):(B(),V(`p`,GL,`沒有`))]),U(`div`,null,[W(N(sC),{variant:`outline`,size:`sm`,onClick:t[1]||=e=>N(i)(N(TC)(c.value.id))},{default:P(()=>[...t[14]||=[G(`開啟會話`,-1)]]),_:1})])])],64)):(B(),V(`p`,KL,`點關係圖裡的主脈絡或會話看詳情。`))]))}}),JL=[`width`,`height`],YL=[`id`],XL=[`fill`],ZL=[`d`,`stroke`,`stroke-dasharray`,`marker-end`],QL=[`onClick`],$L={class:`shrink-0 font-mono`},eR={class:`truncate`},tR={key:2,class:`flex flex-wrap items-start gap-x-6 gap-y-3`},nR={key:0,class:`flex flex-col gap-1.5 px-[9px]`},rR={class:`flex flex-wrap gap-x-6 gap-y-1`},iR={key:2,class:`absolute bottom-3 left-1/2 z-20 -translate-x-1/2 cursor-auto`,role:`toolbar`,"aria-label":`批次操作`,"data-canvas-overlay":``},aR={class:`flex items-center gap-1 rounded-lg border bg-popover py-1 pr-1 pl-3 text-sm shadow-md`},oR={class:`mr-2 tabular-nums`},sR={class:`text-muted-foreground tabular-nums`},cR={class:`absolute right-3 bottom-3 z-20 flex cursor-auto items-center rounded-full border bg-popover p-0.5 text-xs shadow-sm`,role:`toolbar`,"aria-label":`縮放`,"data-canvas-overlay":``},lR={key:1,class:`text-sm text-muted-foreground`},uR=20,dR=260,fR=48,pR=4,mR=4,hR=`mainflow.overview.canvasHeight`,gR=240,_R=`mainflow.overview.previewWidth`,vR=260,yR=560,bR=I({__name:`RunningMap`,setup(e){let t=e=>`${e.kind}:${e.id}`,n=[`active`,`planning`,`paused`],r=e=>e&&!fN(e)?Math.max(0,n.indexOf(e)):n.length,i=(e,t)=>e.map((e,t)=>({item:e,i:t})).sort((e,n)=>r(t(e.item))-r(t(n.item))||e.i-n.i).map(e=>e.item),a=J(()=>(Q.summary?.mainlines??[]).filter(e=>!e.archivedAt)),o=e=>Mw(e).status,s=J(()=>a.value.map(e=>e.id)),c=J(()=>new Set((Q.summary?.mainlines??[]).filter(e=>e.archivedAt).map(e=>e.id))),l=J(()=>Q.relations.mainlineDeps.filter(e=>![e.from,e.to].some(e=>c.value.has(e)))),u=J(()=>new Map(Object.entries(Q.relations.groupMembers).flatMap(([e,t])=>t.filter(e=>e.kind===`mainline`&&!e.archived).map(t=>[t.ref,e])))),d=J(()=>i([...new Set([...s.value,...u.value.keys(),...l.value.flatMap(e=>[e.to,e.from])])],o)),f=J(()=>new Set(d.value)),p=J(()=>iL(d.value,l.value)),m=e=>OC(e)?u.value.get(e):(Q.summary?.mainlines??[]).find(t=>t.id===e)?.group??void 0,h=J(()=>aL(p.value,m,DN().map(e=>e.id))),{open:g}=FC(),_=J(()=>i(kw(),e=>e.status)),v=e=>_.value.filter(t=>Ow(t)===e),y=J(()=>_.value.filter(e=>!f.value.has(Ow(e)??``))),b=e=>e.kind===`mainline`?f.value.has(e.id):_.value.some(t=>t.id===e.id),x=Qt(new Map),S=J(()=>[...x.values()].filter(b)),C=M(),w=J(()=>C.value&&x.has(t(C.value))&&b(C.value)?C.value:void 0),T=(e,n)=>x.has(t({kind:e,id:n})),ee=e=>!!e?.shiftKey;function E(){x.clear(),C.value=void 0}function te(e,n){let r=t(e);if(ee(n)){x.has(r)?x.delete(r):x.set(r,e);return}x.clear(),x.set(r,e),C.value=e}function ne(e,t){if(OC(e)){ee(t)||window.open(kC(e)??void 0,`_blank`,`noopener`);return}te({kind:`mainline`,id:e},t)}let re=(e,t)=>te({kind:`session`,id:e},t);async function D(){let e=new Map;for(let t of S.value)e.set(t.kind,[...e.get(t.kind)??[],t.id]);await dw(async()=>{let t=[];for(let[n,r]of e){let e=await XC.archiveMany(n,r,!0);t.push(...e.failed.map(e=>`${e.id}(${e.error})`))}if(t.length)throw Error(`${t.length} 個沒有封存:${t.join(`、`)}`)})&&E()}let ie=M(),ae=J(()=>{let e=ie.value;return e&&{left:`${Math.min(e.x1,e.x2)}px`,top:`${Math.min(e.y1,e.y2)}px`,width:`${Math.abs(e.x2-e.x1)}px`,height:`${Math.abs(e.y2-e.y1)}px`}});function oe(e){let t=[],n=t=>{let n=t.getBoundingClientRect();return n.left<e.right&&n.right>e.left&&n.top<e.bottom&&n.bottom>e.top};for(let e of O.value?.querySelectorAll(`[data-node], [data-session]`)??[])n(e)&&(e.dataset.node?OC(e.dataset.node)||t.push({kind:`mainline`,id:e.dataset.node}):t.push({kind:`session`,id:e.dataset.session}));return t}let{current:se}=FC();Df(window,`keydown`,e=>{e.key!==`Escape`||se.value||Q.paletteOpen||!x.size||(w.value&&S.value.length>1?C.value=void 0:E())},{capture:!0});let O=M(),ce=M([]),le=M({width:0,height:0});function ue(e,t){let n=0,r=0;for(let i=e;i&&i!==t;i=i.offsetParent)n+=i.offsetLeft,r+=i.offsetTop;return{left:n,top:r,right:n+e.offsetWidth,bottom:r+e.offsetHeight,height:e.offsetHeight}}function de(){let e=O.value;if(!e)return;let t=t=>{let n=e.querySelector(`[data-node="${CSS.escape(t)}"]`);return n?ue(n,e):void 0},n=[];for(let e of l.value){let r=t(e.to),i=t(e.from);if(!r||!i)continue;let a=r.right,o=r.top+uR,s=i.left-2,c=i.top+uR;n.push({key:`${e.to}>${e.from}`,d:`M${a},${o} C${a+28},${o} ${s-28},${c} ${s},${c}`,kind:e.state===`pending`?`pending`:`other`})}for(let r of e.querySelectorAll(`[data-serves]`)){let i=t(r.dataset.serves),a=r.querySelector(`[data-session-icon]`);if(!i||!a)continue;let o=ue(a,e);n.push({key:`s:${r.dataset.session}`,d:`M${i.left+12},${i.bottom} V${o.top+o.height/2} H${o.left}`,kind:`session`})}ce.value=n,le.value={width:e.offsetWidth,height:e.offsetHeight},Se||Ce()}Ff(O,de),F([p,_,()=>Q.mainlines],()=>void tr(de),{deep:!0});let fe={pending:`var(--muted-foreground)`,other:`var(--status-off)`,session:`var(--status-off)`},pe={pending:void 0,other:`4 3`,session:`2 2`},me=J(()=>{let e=p.value.columns.length*308-fR,t=e=>Math.min(e,pR)*284-24,n=e=>t(e)+18;return Math.max(dR,e+18,...h.value.map(e=>n(e.free.length)),t(y.value.length))}),ge=M(),_e=M({x:0,y:0,zoom:1}),ve=M({width:0,height:0});function ye(){let e=ge.value;e&&(ve.value={width:e.clientWidth,height:e.clientHeight})}Ff(ge,()=>{ye(),Se||Ce()});let A=M(!1),be;function xe(e){A.value=!0,_e.value=e,clearTimeout(be),be=setTimeout(()=>A.value=!1,320)}let Se=!1;function Ce(){ye(),le.value.width&&le.value.height&&ve.value.width&&ve.value.height&&(_e.value=nL(le.value,ve.value),Se=!0)}let we=()=>(ye(),xe(nL(le.value,ve.value))),Te=e=>(ye(),xe(tL(_e.value,_e.value.zoom*e,ve.value.width/2,ve.value.height/2))),Ee=J(()=>`${Math.round(_e.value.zoom*100)}%`),De=0;function Oe(e){let t=ge.value.getBoundingClientRect();if(e.ctrlKey||e.metaKey){e.preventDefault(),_e.value=tL(_e.value,eL(_e.value.zoom*Math.exp(-e.deltaY*.01)),e.clientX-t.left,e.clientY-t.top);return}let n=performance.now()<De||!rL(e);if(e.preventDefault(),!n){ke(ge.value).scrollBy({top:Ae(e,e.deltaY),left:Ae(e,e.deltaX)});return}De=performance.now()+120,_e.value={..._e.value,x:_e.value.x-e.deltaX,y:_e.value.y-e.deltaY}}function ke(e){for(let t=e.parentElement;t;t=t.parentElement){let{overflowY:e}=getComputedStyle(t);if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t}return document.scrollingElement??document.documentElement}let Ae=(e,t)=>e.deltaMode===1?t*16:e.deltaMode===2?t*window.innerHeight:t;function je(e){let n=ge.value,r=n.getBoundingClientRect(),i=new Map(x),a=e.clientX-r.left,o=e.clientY-r.top;try{n.setPointerCapture(e.pointerId)}catch{}let s=e=>{let n=e.clientX-r.left,s=e.clientY-r.top;if(!ie.value&&Math.hypot(n-a,s-o)<mR)return;ie.value={x1:a,y1:o,x2:n,y2:s};let c=oe({left:r.left+Math.min(a,n),top:r.top+Math.min(o,s),right:r.left+Math.max(a,n),bottom:r.top+Math.max(o,s)});x.clear();for(let[e,t]of i)x.set(e,t);for(let e of c)x.set(t(e),e)},c=()=>{n.removeEventListener(`pointermove`,s),n.removeEventListener(`pointerup`,c),n.removeEventListener(`pointercancel`,c),ie.value=void 0};n.addEventListener(`pointermove`,s),n.addEventListener(`pointerup`,c),n.addEventListener(`pointercancel`,c)}let Me=M(!1);function Ne(e){if(e.button!==0||e.target.closest(`button, a, [data-canvas-overlay]`))return;if(e.shiftKey)return je(e);let t={x:e.clientX,y:e.clientY,vx:_e.value.x,vy:_e.value.y},n=!1,r=ge.value;try{r.setPointerCapture(e.pointerId)}catch{}let i=e=>{let r=e.clientX-t.x,i=e.clientY-t.y;!n&&Math.hypot(r,i)<mR||(n=!0,Me.value=!0,_e.value={..._e.value,x:t.vx+r,y:t.vy+i})},a=()=>{r.removeEventListener(`pointermove`,i),r.removeEventListener(`pointerup`,a),r.removeEventListener(`pointercancel`,a),Me.value=!1,n||E()};r.addEventListener(`pointermove`,i),r.addEventListener(`pointerup`,a),r.addEventListener(`pointercancel`,a)}let Pe=e=>Math.round(Math.min(Math.max(gR,window.innerHeight),Math.max(gR,e))),Fe=Number($C(hR,null)),Ie=M(Fe>0?Pe(Fe):null);function Le(e){let t=e.clientY,n=ge.value.offsetHeight,r=e=>Ie.value=Pe(n+e.clientY-t),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(hR,Ie.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}function Re(){Ie.value=null,ew(hR,null)}let ze=e=>Math.min(yR,Math.max(vR,e)),Be=M(ze(Number($C(_R,340))||340)),Ve=J(()=>ve.value.width?Math.min(Be.value,ve.value.width*.6):Be.value);function He(e){let t=e.clientX,n=Ve.value,r=e=>Be.value=ze(n+t-e.clientX),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ew(_R,Be.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return(e,t)=>d.value.length||_.value.length?(B(),V(`div`,{key:0,ref_key:`viewport`,ref:ge,class:k([`relative w-full touch-none overflow-hidden rounded-xl border bg-background select-none`,[Me.value?`cursor-grabbing`:`cursor-grab`,Ie.value===null&&`h-[60vh]`]]),style:he(Ie.value===null?void 0:{height:`${Ie.value}px`}),"data-canvas":``,onPointerdown:Ne,onWheel:Oe},[U(`div`,{ref_key:`canvas`,ref:O,class:k([`absolute top-0 left-0 flex origin-top-left flex-col gap-6`,{"transition-transform duration-300 ease-out":A.value}]),style:he({width:`${me.value}px`,transform:`translate(${_e.value.x}px, ${_e.value.y}px) scale(${_e.value.zoom})`})},[(B(),V(`svg`,{class:`pointer-events-none absolute inset-0 overflow-visible`,width:le.value.width,height:le.value.height,"aria-hidden":`true`},[U(`defs`,null,[(B(),V(z,null,L([`pending`,`other`],e=>U(`marker`,{id:`run-arrow-${e}`,key:e,viewBox:`0 0 8 8`,refX:`7`,refY:`4`,markerWidth:`7`,markerHeight:`7`,orient:`auto`},[U(`path`,{d:`M0,0 L8,4 L0,8 z`,fill:fe[e]},null,8,XL)],8,YL)),64))]),(B(!0),V(z,null,L(ce.value,e=>(B(),V(`path`,{key:e.key,d:e.d,fill:`none`,"stroke-width":`1.5`,stroke:fe[e.kind],"stroke-dasharray":pe[e.kind],"marker-end":e.kind===`session`?void 0:`url(#run-arrow-${e.kind})`},null,8,ZL))),128))],8,JL)),(B(!0),V(z,null,L(h.value,e=>(B(),H(fa(e.group?`section`:`div`),{key:e.group??`ungrouped`,class:k([`flex flex-col gap-4 rounded-xl border p-2`,e.group?`border-dashed`:`border-transparent`]),"data-map-group":e.group},{default:P(()=>[e.group?(B(),V(`button`,{key:0,type:`button`,class:`relative z-[1] -mb-1 flex max-w-full min-w-0 items-center gap-1.5 self-start rounded-sm bg-background px-1 text-left text-xs text-muted-foreground hover:bg-accent`,onClick:t=>N(g)(e.group)},[W(Qw,{type:`group`,status:N(EN)(e.group)?.status},null,8,[`status`]),U(`span`,$L,j(e.group),1),U(`span`,eR,j(N(EN)(e.group)?.title),1),W(xE,{priority:N(EN)(e.group)?.priority,class:`shrink-0`},null,8,[`priority`])],8,QL)):K(``,!0),e.columns.some(e=>e.length)?(B(),V(`div`,{key:1,class:`grid gap-y-4`,style:he({columnGap:`${fR}px`,gridTemplateColumns:`repeat(${e.columns.length}, ${dR}px)`})},[(B(!0),V(z,null,L(e.columns,(e,t)=>(B(),V(`div`,{key:t,class:`flex min-w-0 flex-col gap-4`},[(B(!0),V(z,null,L(e,e=>(B(),V(`div`,{key:e,class:`flex max-w-full flex-col gap-1.5`,style:he({width:`${dR}px`})},[W(mL,{id:e,picked:T(`mainline`,e),onPick:ne},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(v(e),t=>(B(),H(SL,{key:t.id,session:t,serves:e,picked:T(`session`,t.id),class:`ml-5`,onPick:e=>re(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))]))),128))],4)):K(``,!0),e.free.length?(B(),V(`div`,tR,[(B(!0),V(z,null,L(e.free,e=>(B(),V(`div`,{key:e,class:`flex max-w-full flex-col gap-1.5`,style:he({width:`${dR}px`})},[W(mL,{id:e,picked:T(`mainline`,e),onPick:ne},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(v(e),t=>(B(),H(SL,{key:t.id,session:t,serves:e,picked:T(`session`,t.id),class:`ml-5`,onPick:e=>re(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))])):K(``,!0)]),_:2},1032,[`class`,`data-map-group`]))),128)),y.value.length?(B(),V(`div`,nR,[U(`div`,rR,[(B(!0),V(z,null,L(y.value,e=>(B(),H(SL,{key:e.id,session:e,picked:T(`session`,e.id),class:`max-w-full`,style:he({width:`${dR}px`}),onPick:t=>re(e.id,t)},null,8,[`session`,`picked`,`style`,`onPick`]))),128))])])):K(``,!0)],6),w.value?(B(),V(`aside`,{key:0,class:`absolute top-3 right-3 z-20 flex max-h-[calc(100%-1.5rem)] cursor-auto flex-col overflow-y-auto overscroll-contain rounded-xl shadow-lg`,style:he({width:`${Ve.value}px`}),"aria-label":`預覽`,"data-canvas-overlay":``,onWheel:t[0]||=au(()=>{},[`stop`])},[U(`div`,{class:`absolute inset-y-0 left-0 z-10 w-2 cursor-col-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`拖曳調整預覽寬度`,onPointerdown:au(He,[`prevent`,`stop`])},null,32),W(qL,{picked:w.value,onPickMainline:ne,onPickSession:re},null,8,[`picked`])],36)):K(``,!0),ie.value?(B(),V(`div`,{key:1,class:`pointer-events-none absolute z-20 rounded-sm border border-ring bg-ring/10`,style:he(ae.value),"aria-hidden":`true`},null,4)):K(``,!0),S.value.length>=1?(B(),V(`div`,iR,[U(`div`,aR,[U(`span`,oR,`已選 `+j(S.value.length)+` 個`,1),W(N(sC),{variant:`ghost`,size:`sm`,onClick:D},{default:P(()=>[W(N(Pu)),t[4]||=G(`封存`,-1),U(`span`,sR,j(S.value.length),1)]),_:1}),W(N(sC),{variant:`ghost`,size:`icon-sm`,"aria-label":`清除選取`,onClick:t[1]||=e=>E()},{default:P(()=>[W(N(uf))]),_:1})])])):K(``,!0),U(`div`,{class:`absolute inset-x-0 bottom-0 z-10 h-2 cursor-row-resize`,role:`separator`,"aria-orientation":`horizontal`,"aria-label":`拖曳調整畫布高度,雙擊回到預設高度`,"data-canvas-overlay":``,onPointerdown:au(Le,[`prevent`,`stop`]),onDblclick:Re},null,32),U(`div`,cR,[W(N(sC),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`縮小`,onClick:t[2]||=e=>Te(1/N(1.2))},{default:P(()=>[W(N(Vd))]),_:1}),U(`button`,{type:`button`,class:`h-7 min-w-12 rounded-full px-1.5 tabular-nums hover:bg-accent`,title:`全部置入畫面`,"aria-label":`全部置入畫面`,onClick:we},j(Ee.value),1),W(N(sC),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`放大`,onClick:t[3]||=e=>Te(N(1.2))},{default:P(()=>[W(N(Gd))]),_:1})])],38)):(B(),V(`p`,lR,[...t[5]||=[G(`沒有主脈絡。在 hub 內執行 `,-1),U(`code`,null,`mainflow new mainline <slug> --title <title>`,-1),G(` 建立。`,-1)]]))}}),xR={class:`flex flex-col gap-8 px-6 pt-2 pb-10`},SR={key:0,"aria-labelledby":`attention`,class:`-mb-4 rounded-lg border bg-card`},CR={id:`attention`,class:`text-sm font-medium`},wR=[`aria-expanded`],TR={class:`text-xs text-muted-foreground tabular-nums`},ER={key:2,class:`ml-2 flex min-w-0 items-center gap-3 overflow-hidden text-xs font-normal text-muted-foreground`},DR={class:`tabular-nums`},OR={id:`attention-list`,class:`border-t`},kR=[`data-peek`,`aria-current`,`onClick`],AR={class:`shrink-0 font-mono text-xs text-muted-foreground`},jR={class:`min-w-0 truncate`},MR=[`title`],NR={class:`truncate`},PR={key:0,class:`hidden max-w-48 shrink-0 truncate text-xs text-muted-foreground xl:inline`},FR={"aria-labelledby":`running`},IR={id:`running`,class:`mb-2 flex items-center gap-1.5 text-sm font-medium`},LR={class:`text-xs font-normal text-muted-foreground tabular-nums`},RR={type:`button`,class:`grid size-5 place-items-center rounded-sm text-muted-foreground hover:text-foreground`,"aria-label":`依賴線的說明`},zR={"aria-labelledby":`issues`,class:`-mx-6 min-w-0`},BR={id:`issues`,class:`px-6 text-sm font-medium`},VR={class:`ml-1 text-xs text-muted-foreground tabular-nums`},HR={class:`flex min-w-0 items-center gap-2`},UR={class:`shrink-0 font-mono text-xs text-muted-foreground`},WR=[`title`],GR={key:0,class:`flex min-w-0 items-center gap-1.5 overflow-hidden text-xs`},KR=`mainflow.overview.attentionOpen`,qR=`mainflow.list.overview.issues.axis`,JR=`箭頭由要先完成的主脈絡指向等待它的主脈絡;實線是還沒完成的依賴,虛線是已完成或無法確認的依賴。`,YR=I({__name:`Overview`,setup(e){let{open:t,current:n}=FC(),r=e=>n.value?.ref===e||void 0,i=J(()=>(Q.summary?.mainlines??[]).filter(e=>!e.archivedAt)),a=J(()=>i.value.filter(e=>e.status===`active`||e.status===`planning`||e.status===`paused`)),o=J(()=>[...new Set([...a.value.map(e=>e.id),...Q.relations.mainlineDeps.flatMap(e=>[e.from,e.to]).filter(e=>/^m\d{3}$/.test(e))])]);Er(()=>void uw(o.value));let s=J(()=>a.value.flatMap(e=>Q.mainlines[e.id]?[Q.mainlines[e.id]]:[])),c={overdue:{label:`逾期`,icon:Wu,tone:`text-destructive`},blocked:{label:`卡住`,icon:ed,tone:`text-status-waiting`},proposed:{label:`待裁決`,icon:Qu,tone:`text-warning`},due:{label:`即將到期`,icon:Wu,tone:`text-warning`},review:{label:`待重新確認`,icon:qd,tone:`text-warning`}},l=J(()=>[...s.value.flatMap(e=>e.tasks.filter(e=>e.status===`blocked`).map(t=>({ref:CC(e.id,t.id),type:Iw(t),status:t.status,id:`${e.id}/${t.id}`,title:t.title,kind:`blocked`,reason:`卡住:${t.blockedBy?.reason??`沒有寫原因`}`,context:e.title}))),...s.value.flatMap(e=>e.decisions.filter(e=>e.status===`proposed`).map(t=>({ref:wC(e.id,t.id),type:`decision`,status:t.status,id:`${e.id}/${t.id}`,title:t.title,kind:`proposed`,reason:t.affects?.length?`待裁決,影響 ${t.affects.join(`、`)}`:`待裁決`,context:e.title}))),...Q.issues.filter(e=>e.status!==`closed`&&!e.archivedAt&&dE(e.due)).map(e=>{let t=uE(e.due);return{ref:e.id,type:`issue`,status:e.status,id:e.id,title:e.title,kind:t<0?`overdue`:`due`,reason:t<0?`已逾期 ${-t} 天`:t===0?`今天到期`:`${t} 天後到期`}}),...Q.findings.filter(e=>e.status===`valid`&&!e.archivedAt&&e.reviewAfter&&uE(e.reviewAfter)<0).map(e=>({ref:e.id,type:`finding`,status:e.status,id:e.id,title:e.title,kind:`review`,reason:`${e.reviewAfter} 起該重新確認是否仍成立`}))]),u=J(()=>Object.keys(c).flatMap(e=>{let t=l.value.filter(t=>t.kind===e).length;return t?[{kind:e,n:t,...c[e]}]:[]})),d=M($C(KR,!1)===!0);function f(){d.value=!d.value,ew(KR,d.value)}let p=[`open`,`planned`],m=CN({key:`overview.issues`,queryPrefix:`i.`,id:e=>e.id,text:e=>e.title,filters:AF(p),sorts:[{key:`order`,label:`手動順序`,value:e=>e.order,dir:`asc`},{key:`name`,label:`名稱`,value:e=>e.title,dir:`asc`},{key:`priority`,label:`優先度`,value:e=>uN(e.priority),dir:`asc`},{key:`planned`,label:`排入`,value:e=>e.plannedIn??e.due,dir:`asc`}],groups:jF(p),defaultSort:`order`,defaultGroup:`status`},()=>Q.issues.filter(e=>!e.archivedAt&&e.status!==`closed`)),h=$C(qR,`priority`),g=M(m.spec.groups.some(e=>e.key===h)?h:`priority`);function _(e){g.value=e,ew(qR,e)}let v=J(()=>m.spec.groups.find(e=>e.key===g.value)?.label),y=e=>uN(e.priority)!==`P2`||g.value!==`category`&&!!e.category||!!e.labels?.length,b=J(()=>a.value.length),x=J(()=>Aw().length);return(e,n)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`總覽`,description:`現在要注意什麼、進行中的主脈絡與會話怎麼串在一起、還有哪些待辦。`})]),default:P(()=>[U(`div`,xR,[l.value.length?(B(),V(`section`,SR,[U(`h2`,CR,[U(`button`,{type:`button`,class:`flex w-full min-w-0 items-center gap-2 rounded-lg px-3 py-2 text-left hover:bg-accent/50`,"aria-expanded":d.value,"aria-controls":`attention-list`,onClick:f},[d.value?(B(),H(N(Ju),{key:0,class:`size-4 shrink-0 text-muted-foreground`})):(B(),H(N(Xu),{key:1,class:`size-4 shrink-0 text-muted-foreground`})),n[1]||=G(` 需要注意 `,-1),U(`span`,TR,j(l.value.length),1),d.value?K(``,!0):(B(),V(`span`,ER,[(B(!0),V(z,null,L(u.value,e=>(B(),V(`span`,{key:e.kind,class:`flex shrink-0 items-center gap-1`},[(B(),H(fa(e.icon),{class:k([`size-3.5`,e.tone])},null,8,[`class`])),G(j(e.label)+` `,1),U(`span`,DR,j(e.n),1)]))),128))]))],8,wR)]),yr(U(`ul`,OR,[(B(!0),V(z,null,L(l.value,e=>(B(),V(`li`,{key:e.ref+e.reason,class:`flex h-9 cursor-pointer items-center gap-2 border-b px-3 transition-colors duration-[120ms] last:border-b-0 hover:bg-muted/50`,"data-peek":e.ref,"aria-current":r(e.ref),onClick:n=>N(t)(e.ref)},[W(Qw,{type:e.type,status:e.status},null,8,[`type`,`status`]),U(`span`,AR,j(e.id),1),U(`span`,jR,j(e.title),1),U(`span`,{class:`ml-auto flex min-w-0 shrink items-center gap-1 text-xs text-muted-foreground`,title:e.reason},[(B(),H(fa(c[e.kind].icon),{class:k([`size-3.5 shrink-0`,c[e.kind].tone])},null,8,[`class`])),U(`span`,NR,j(e.reason),1)],8,MR),e.context?(B(),V(`span`,PR,j(e.context),1)):K(``,!0)],8,kR))),128))],512),[[Vc,d.value]])])):K(``,!0),U(`section`,FR,[U(`h2`,IR,[n[2]||=G(` 進行中 `,-1),U(`span`,LR,j(b.value)+` 條主脈絡 · `+j(x.value)+` 個會話`,1),W(N(Bj),{"open-delay":150,"close-delay":100},{default:P(()=>[W(N(Hj),{"as-child":``},{default:P(()=>[U(`button`,RR,[W(N(td),{class:`size-3.5`})])]),_:1}),W(N(Vj),{class:`w-72 text-xs`},{default:P(()=>[G(j(JR))]),_:1})]),_:1})]),W(bR)]),U(`section`,zR,[U(`h2`,BR,[n[3]||=G(`待辦事項 `,-1),U(`span`,VR,j(N(m).total.value),1)]),W(oD,{view:N(m)},{views:P(()=>[W(N(lC),null,{default:P(()=>[W(N(SC),{"as-child":``},{default:P(()=>[W(N(sC),{variant:`outline`,size:`sm`,"aria-label":`橫軸:${v.value}`},{default:P(()=>[W(N(od)),G(j(v.value),1)]),_:1},8,[`aria-label`])]),_:1}),W(N(fC),{align:`end`,class:`w-40`},{default:P(()=>[W(N(mC),{class:`text-xs text-muted-foreground`},{default:P(()=>[...n[4]||=[G(`橫軸`,-1)]]),_:1}),W(N(hC),{"model-value":g.value,"onUpdate:modelValue":n[0]||=e=>_(String(e))},{default:P(()=>[(B(!0),V(z,null,L(N(m).spec.groups,e=>(B(),H(N(_C),{key:e.key,value:e.key},{default:P(()=>[G(j(e.label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`model-value`])]),_:1})]),_:1})]),_:1},8,[`view`]),W(QI,{view:N(m),axis:g.value},{card:P(({item:e})=>[W(N(uI),{class:k([`min-w-0 cursor-pointer gap-1 px-3 py-2 shadow-xs transition-colors duration-[120ms] hover:bg-accent/50`,{"bg-muted":r(e.id)}]),"data-peek":e.id,"aria-current":r(e.id),onClick:n=>N(t)(e.id)},{default:P(()=>[U(`div`,HR,[W(Qw,{type:`issue`,status:e.status},null,8,[`status`]),U(`span`,UR,j(e.id),1),U(`span`,{class:`truncate`,title:e.title},j(e.title),9,WR)]),y(e)?(B(),V(`div`,GR,[W(xE,{priority:e.priority,class:`shrink-0`},null,8,[`priority`]),g.value!==`category`&&e.category?(B(),H(N(QT),{key:0,variant:`outline`},{default:P(()=>[G(j(e.category),1)]),_:2},1024)):K(``,!0),(B(!0),V(z,null,L(e.labels??[],e=>(B(),H(N(QT),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))])):K(``,!0)]),_:2},1032,[`class`,`data-peek`,`aria-current`,`onClick`])]),empty:P(()=>[...n[5]||=[G(`沒有未處理或已排入的待辦。`,-1)]]),_:1},8,[`view`,`axis`])])])]),_:1}))}}),XR=[`title`],ZR={key:1,class:`shrink-0 text-xs text-muted-foreground`},QR=I({__name:`SessionList`,setup(e){let t=[`active`,`paused`,`handed-off`,`ended`],n=e=>e.actions.find(e=>e.status===`doing`)??e.actions.find(e=>e.status===`todo`),r=e=>[...new Set(e.actions.flatMap(e=>e.serves.map(e=>e.slice(0,4))))],i=e=>e?`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim():`沒有服務的主脈絡`,a=e=>Math.max(...[e.started,...e.actions.flatMap(e=>[e.startedAt,e.doneAt])].filter(e=>!!e).map(iE)),o=e=>Q.sessions.filter(t=>t.delegatedFrom===e).sort((e,t)=>iE(e.started)-iE(t.started)),s=(e,t=1)=>o(e.id).flatMap(e=>[{item:e,depth:t},...s(e,t+1)]),c=J(()=>{let e=new Set(Q.sessions.map(e=>e.id));return Q.sessions.filter(t=>!t.delegatedFrom||!e.has(t.delegatedFrom))}),l=CN({key:`sessions`,id:e=>e.id,text:e=>`${Dw(e)} ${e.branch??``}`,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:dN(t)},{key:`agent`,label:`agent`,values:e=>[e.agent]},{key:`branch`,label:`分支`,values:e=>e.branch?[e.branch]:[]},{key:`mainline`,label:`主脈絡`,values:r,optionLabel:i}],sorts:[{key:`name`,label:`名稱`,value:e=>Dw(e),dir:`asc`},{key:`serves`,label:`服務的任務`,value:e=>p(e),dir:`asc`},{key:`subagents`,label:`子代理數`,value:e=>o(e.id).length,dir:`desc`},{key:`started`,label:`開始時間`,value:e=>iE(e.started),dir:`desc`},{key:`active`,label:`最後活動`,value:a,dir:`desc`}],groups:[hN(t),{key:`mainline`,label:`主脈絡`,value:e=>r(e)[0]??``,groupLabel:i},{key:`day`,label:`日期`,value:e=>oE(e.started),latestFirst:!0}],defaultSort:`started`,defaultGroup:`status`,ended:e=>fN(e.status),archived:e=>!!e.archivedAt,nested:e=>s(e)},()=>c.value),u=xF(l,{kind:`session`,archived:e=>!!e.archivedAt}),d=[{key:`name`,label:`會話`,sort:`name`},{key:`serves`,label:`服務的任務`,class:`max-w-56`,sort:`serves`,value:e=>p(e),optional:!0},{key:`subagents`,label:`子代理`,class:`text-xs text-muted-foreground tabular-nums`,sort:`subagents`,value:e=>o(e.id).length||void 0,optional:!0},{key:`started`,label:`開始`,class:`text-xs text-muted-foreground`,sort:`started`}],{open:f}=FC();Er(()=>Pw(Q.sessions.flatMap(e=>e.actions.flatMap(e=>e.serves))));let p=e=>(n(e)??e.actions[0])?.serves[0]?.split(`#`)[0],m=e=>dw(()=>XC.archiveSession(e.id,!e.archivedAt));return(e,t)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`會話`,description:`推進過 hub 的 AI 會話,含同步程式從其他環境帶來的會話。存在 .mainflow/local/sessions/,不入版控。`}),W(oD,{view:N(l)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(l),selection:N(u),columns:d,"item-ref":e=>N(TC)(e.id)},{name:P(({item:e,depth:t})=>[W(hD,{status:e.status,title:N(Dw)(e),muted:t>0||!!e.archivedAt,depth:t},{default:P(()=>[e.elsewhere?(B(),V(`span`,{key:0,class:`shrink-0 text-xs text-muted-foreground`,title:`工作目錄 ${e.cwd} 不在這台電腦上`,"data-elsewhere":``},`其他環境`,8,XR)):K(``,!0),e.archivedAt?(B(),V(`span`,ZR,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`title`,`muted`,`depth`])]),serves:P(({item:e})=>[p(e)?(B(),H(Yj,q({key:0},N(Mw)(p(e)),{onOpen:N(f)}),null,16,[`onOpen`])):K(``,!0)]),subagents:P(({item:e,depth:t})=>[G(j(t===0&&o(e.id).length?o(e.id).length:``),1)]),started:P(({item:e})=>[W(xP,{at:e.started},null,8,[`at`])]),actions:P(({item:e})=>[W(eE,{archived:!!e.archivedAt,onToggle:t=>m(e)},null,8,[`archived`,`onToggle`])]),empty:P(()=>[...t[0]||=[G(`沒有會話資料。會話存在 `,-1),U(`code`,null,`.mainflow/local/sessions/`,-1),G(`,不入版控;有同步時,其他環境的會話也會出現在這裡。`,-1)]]),_:1},8,[`view`,`selection`,`item-ref`]),W(fD,{selection:N(u)},null,8,[`selection`])]),_:1}))}}),$R={class:`flex min-w-0 items-center gap-2`},ez={key:0,class:`size-1.5 shrink-0 rounded-full bg-warning`,title:`新提醒`},tz=[`title`],nz=[`title`],rz=[`title`],iz=I({__name:`SyncNotices`,setup(e){let t=CN({key:`sync`,id:e=>`${e.at}|${e.kind}|${e.path}`,text:e=>`${zC(e)} ${e.path} ${e.message}`,filters:[{key:`kind`,label:`種類`,values:e=>[e.kind],options:Object.entries(IC).map(([e,t])=>({value:e,label:t}))},{key:`path`,label:`檔案`,values:e=>e.path?[e.path]:[]}],sorts:[{key:`at`,label:`時間`,value:e=>e.at,dir:`desc`},{key:`kind`,label:`種類`,value:e=>e.kind,dir:`asc`},{key:`path`,label:`檔案`,value:e=>e.path,dir:`asc`}],groups:[{key:`day`,label:`日期`,value:e=>e.at.slice(0,10),latestFirst:!0}],defaultSort:`at`,defaultGroup:`day`},()=>Q.sync.notices),n=[{key:`message`,label:`提醒`},{key:`kind`,label:`種類`,class:`text-xs`},{key:`path`,label:`檔案`,class:`max-w-72 truncate font-mono text-xs text-muted-foreground`,value:e=>e.path,optional:!0},{key:`at`,label:`時間`,class:`font-mono text-xs text-muted-foreground tabular-nums`}],r=e=>new Date(e).toLocaleString(`sv-SE`).slice(5);return $i(async()=>{await _w(),gw()}),(e,i)=>(B(),H(bF,null,{header:P(()=>[W(yD,{title:`同步提醒`,description:`同步程式找到的、寫入者的內容可能沒有照原樣進入 hub 的改動。被拒的內容存在 .mainflow/local/sync/conflicts/,點開可以和 hub 的版本並排比對。`}),W(oD,{view:N(t)},null,8,[`view`])]),default:P(()=>[W(XE,{view:N(t),columns:n,"item-ref":e=>e.saved?N(DC)(e.saved):void 0},{message:P(({item:e})=>[U(`span`,$R,[N(mw)(e)?K(``,!0):(B(),V(`span`,ez)),e.saved?(B(),H(N(pd),{key:1,class:`size-3.5 shrink-0 text-muted-foreground`,"aria-label":`有存檔,可並排比對`})):K(``,!0),U(`span`,{class:`truncate`,title:`原文:${e.message}`},j(N(zC)(e,!1)),9,tz)])]),kind:P(({item:e})=>[G(j(N(IC)[e.kind]??e.kind),1)]),path:P(({item:e})=>[U(`span`,{title:e.path},j(e.path),9,nz)]),at:P(({item:e})=>[U(`span`,{title:e.at},j(r(e.at)),9,rz)]),empty:P(()=>[N(Q).sync.remote?(B(),V(z,{key:0},[G(`沒有提醒。同步程式只在寫入者的內容可能遺失時提醒,只多了別人改動的合併不列在這裡。`)],64)):(B(),V(z,{key:1},[i[0]||=G(`這個 hub 沒有設定同步伺服器。設定方式見 mainflow 的 `,-1),i[1]||=U(`code`,null,`docs/sync.md`,-1),i[2]||=G(`。`,-1)],64))]),_:1},8,[`view`,`item-ref`])]),_:1}))}}),az=e=>Array.isArray(e)?e.join(`/`):e??``,oz=Rm({history:om(WC),routes:[{path:`/`,component:YR},{path:`/mainlines`,component:RI},{path:`/mainlines/:m`,component:II},{path:`/issues`,component:NF},{path:`/findings`,component:wF},{path:`/ops`,component:HI},{path:`/sessions`,component:QR},{path:`/sync`,component:iz},{path:`/mainlines/:m/tasks/:t`,redirect:e=>({path:`/mainlines/${az(e.params.m)}`,query:{view:`tasks`,peek:CC(az(e.params.m),az(e.params.t))}})},{path:`/mainlines/:m/decisions/:d`,redirect:e=>({path:`/mainlines/${az(e.params.m)}`,query:{view:`decisions`,peek:wC(az(e.params.m),az(e.params.d))}})},{path:`/mainlines/:m/files/:path(.*)`,redirect:e=>({path:`/mainlines/${az(e.params.m)}`,query:{peek:EC(az(e.params.m),az(e.params.path))}})},{path:`/sessions/:s`,redirect:e=>({path:`/sessions`,query:{peek:TC(az(e.params.s))}})}]}),sz=hu(ZT);sz.config.errorHandler=yw,sz.use(oz).mount(`#app`);