mainflow 0.23.0 → 0.25.0

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.
@@ -75,6 +75,6 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
75
75
  `),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`,Hk,j(e.label),1)):K(``,!0),W(YC,{type:N(PC)(e.id),status:e.status},null,8,[`type`,`status`]),U(`span`,Uk,j(e.id),1),e.title?(B(),V(`span`,Wk,j(e.title),1)):(B(),V(`span`,Gk,j(e.context),1)),U(`span`,Kk,[R(t.$slots,`default`),W(N(sd),{class:`size-3.5`})])],8,Vk))}}),Jk={class:`flex items-center gap-2`},Yk=[`title`],Xk=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(`
76
76
  `),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,...kC(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,...kC(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,...kC(e.to)})),...(Q.relations.backlinks[t.self]??[]).filter(e=>e.rel!==`depends-on`).map((e,t)=>{let r=eC(e.from)?kC(e.from):{...kC(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(()=>jC(a.value.map(e=>e.ref))),(e,t)=>a.value.length?(B(),H(Fk,{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(eC)(e.ref)?(B(),H(qk,{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(qC)[e.dep].tone)},j(N(qC)[e.dep].label),3)):K(``,!0)]),_:2},1032,[`id`,`title`,`status`,`label`,`context`,`note`])):(B(),H(Bk,{key:1,peek:e.ref.split(`#`)[0],id:e.ref,title:e.title,status:e.status,label:e.label},{default:P(()=>[U(`span`,Jk,[e.note?(B(),V(`span`,{key:0,class:`block max-w-48 truncate`,title:e.note},j(e.note.split(`
77
77
  `)[0]),9,Yk)):K(``,!0),e.dep?(B(),V(`span`,{key:1,class:k(N(qC)[e.dep].tone)},j(N(qC)[e.dep].label),3)):K(``,!0)])]),_:2},1032,[`peek`,`id`,`title`,`status`,`label`]))],64))),128))]),_:1},8,[`count`])):K(``,!0)}}),Zk={class:`flex flex-col`},Qk=[`href`,`title`],$k={key:3,class:`truncate`},eA={key:5,class:`ml-auto shrink-0 text-xs text-muted-foreground`},tA=I({__name:`RefSources`,props:{refs:{}},setup(e){return(t,n)=>(B(),V(`ul`,Zk,[(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(sd),{key:0,class:`size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(ud),{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,Qk)):(B(),V(`span`,$k,j(e.title),1)),e.path?(B(),H(Ek,{key:4,text:e.path,class:`min-w-0`},null,8,[`text`])):K(``,!0),e.date?(B(),V(`span`,eA,j(e.date),1)):K(``,!0)]))),128))]))}}),nA=[`title`],rA=I({__name:`PriorityFlag`,props:{priority:{}},setup(e){let t={P0:`text-priority-p0`,P1:`text-priority-p1`,P3:`text-priority-p3`};return(n,r)=>e.priority&&e.priority!==`P2`?(B(),V(`span`,{key:0,class:`inline-flex items-center gap-1 text-xs text-muted-foreground`,title:`優先度 ${e.priority}`},[W(N(dd),{class:k([`size-3.5`,t[e.priority]]),fill:`currentColor`},null,8,[`class`]),G(j(e.priority),1)],8,nA)):K(``,!0)}}),iA=I({__name:`HoverCard`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},openDelay:{},closeDelay:{},enableTouch:{type:Boolean}},emits:[`update:open`],setup(e,{emit:t}){let n=Yh(e,t);return(e,t)=>(B(),H(N(sx),q({"data-slot":`hover-card`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),aA=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=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(fx),null,{default:P(()=>[W(N(dx),q({"data-slot":`hover-card-content`},{...e.$attrs,...N(n)},{class:N(qS)(`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}))}}),oA=I({__name:`HoverCardTrigger`,props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(B(),H(N(px),q({"data-slot":`hover-card-trigger`},t),{default:P(()=>[R(e.$slots,`default`)]),_:3},16))}}),sA={class:`shrink-0 font-mono text-[11px] text-muted-foreground`},cA={key:0,class:`truncate`},lA={class:`font-mono text-xs text-muted-foreground`},uA={key:0,class:`mt-1 font-semibold`},dA={class:`mt-2 flex items-center gap-2`},fA={key:1,class:`text-xs text-muted-foreground`},pA=I({__name:`RefLabel`,props:{id:{},title:{},status:{},context:{}},emits:[`open`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),H(N(iA),{"open-delay":300,"close-delay":100},{default:P(()=>[W(N(oA),{"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(YC,{type:N(PC)(e.id),status:e.status},null,8,[`type`,`status`]),U(`span`,sA,j(e.id),1),e.title?(B(),V(`span`,cA,j(e.title),1)):K(``,!0)])]),_:1}),W(N(aA),{class:`w-64`},{default:P(()=>[U(`p`,lA,j(e.id),1),e.title?(B(),V(`p`,uA,j(e.title),1)):K(``,!0),U(`div`,dA,[e.status?(B(),H(Ww,{key:0,status:e.status},null,8,[`status`])):K(``,!0),e.context?(B(),V(`span`,fA,j(e.context),1)):K(``,!0)])]),_:1})]),_:1}))}});function mA(e){let t=Kf(),n=J(()=>e?.()??String(t.params.m??``));return F(n,e=>{e&&_C(e).catch(e=>Q.error=e.message)},{immediate:!0}),{id:n,mainline:J(()=>Q.mainlines[n.value])}}var hA={key:0,class:`pb-8`},gA={key:0},_A={key:1},vA={key:2,class:`tabular-nums`},yA={key:0,class:`text-xs`},bA={class:`text-xs`},xA={class:`text-xs`},SA={key:1,class:`text-sm text-muted-foreground`},CA={key:1,class:`px-5 text-muted-foreground`},wA=I({__name:`DecisionPeek`,props:{m:{},d:{}},setup(e){let t=e,{open:n}=sC(),{mainline:r}=mA(()=>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=>kC(e.split(`#`)[0]);return(n,l)=>i.value&&N(r)?(B(),V(`div`,hA,[W(jk,{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(qT),{key:0,variant:`warning`},{default:P(()=>[W(N(Xu)),W(N(YT),null,{default:P(()=>[...l[0]||=[G(`還沒裁決`,-1)]]),_:1}),i.value.affects?.length?(B(),H(N(JT),{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(qT),{key:1},{default:P(()=>[W(N(Bd)),W(N(YT),null,{default:P(()=>[G(`已被 `+j(a.value.id)+` 取代`,1)]),_:1}),W(N(JT),{class:`text-xs text-muted-foreground`},{default:P(()=>[...l[2]||=[G(`以下保留當時的理由。新的決定見「取代關係」。`,-1)]]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(Ww,{status:i.value.status},null,8,[`status`]),i.value.by?(B(),V(`span`,gA,j(N(WC)[i.value.by])+`決定`,1)):K(``,!0),i.value.basis?(B(),V(`span`,_A,j(N(GC)[i.value.basis]),1)):K(``,!0),i.value.decidedAt?(B(),V(`span`,vA,j(i.value.decidedAt.replace(`T`,` `)),1)):K(``,!0)]),_:1},8,[`id`,`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[i.value.reversible===void 0?K(``,!0):(B(),H($,{key:0,label:`能否改回`,icon:N(Zd)},{default:P(()=>[G(j(i.value.reversible?`可以低成本改回`:`不易改回`),1)]),_:1},8,[`icon`])),i.value.priority?(B(),H($,{key:1,label:`優先度`,icon:N(dd)},{default:P(()=>[W(rA,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,yA,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:2,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,bA,j(i.value.created),1)]),_:1},8,[`icon`]),i.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,xA,j(i.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:6,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(i.value.origin),{onOpen:s}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),i.value.body.trim()?(B(),H(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.affects?.length?(B(),H(Fk,{key:1,title:`影響的項目`,count:i.value.affects.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.affects,e=>(B(),H(Bk,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(Xk,{self:N(ZS)(t.m,t.d),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(Fk,{key:2,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(tA,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(Fk,{title:`取代關係`},{default:P(()=>[a.value?(B(),H(Bk,{key:0,peek:N(ZS)(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(Bk,{key:t.id,peek:N(ZS)(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`,SA,`沒有取代關係。`)):K(``,!0)]),_:1})])):(B(),V(`p`,CA,`載入 `+j(e.m)+`/`+j(e.d)+`…`,1))}}),TA=`modulepreload`,EA=function(e){return`/`+e},DA={},OA=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=EA(t,n),t=s(t),t in DA)return;DA[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`:TA,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)})},kA=`__mainflowVue`;function AA(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.${kA};`)}async function jA(e){let t=URL.createObjectURL(new Blob([AA(e)],{type:`text/javascript`}));try{return await OA(()=>import(t),[])}finally{URL.revokeObjectURL(t)}}async function MA(e,t){globalThis[kA]=xu;let{parse:n,compileScript:r,compileTemplate:i}=await OA(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 jA(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 jA(e.code)).render}let l=a.styles.map(e=>e.content).join(`
78
- `);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 NA={key:0,class:`mb-2 text-sm`},PA=[`src`,`title`],FA=[`src`,`alt`],IA={key:6,class:`overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed`},LA=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 MA(await(await fetch(fC(t.path))).text(),t.path);else if(e===`js`||e===`mjs`){let e=await OA(()=>import(fC(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(fC(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`,NA,`無法渲染 `+j(e.path)+`:`+j(a.value),1)):K(``,!0),r(e.path)===`md`?(B(),H(Sk,{key:1,source:i.value},null,8,[`source`])):r(e.path)===`html`?(B(),V(`iframe`,{key:2,src:N(fC)(e.path),sandbox:`allow-scripts allow-same-origin`,class:`h-[480px] w-full rounded-lg border bg-white`,title:e.path},null,8,PA)):n.includes(r(e.path))?(B(),V(`img`,{key:3,src:N(fC)(e.path),alt:e.path,class:`max-w-full rounded-lg border`},null,8,FA)):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`,IA,j(i.value),1))]))}}),RA=[`主脈絡文件`,`任務文件`,`產物`,`決策`,`自訂視圖`,`參考來源`],zA=e=>e.slice(e.lastIndexOf(`/`)+1),BA=e=>zA(e).includes(`.`)?zA(e).slice(zA(e).lastIndexOf(`.`)+1).toLowerCase():``;function VA(e){let t=t=>t.slice(e.dir.length+1),n=(e,n,r,i)=>({key:e,name:zA(e),kind:n,ext:BA(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?``:BA(t.path??``),source:n,url:t.url,path:t.path,updated:t.date}));return[n(e.file,`主脈絡文件`,void 0,e.updated),...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,`自訂視圖`)),...r(e.refs),...e.tasks.flatMap(e=>r(e.refs,e.id))]}function HA(e,t){return VA(e).find(e=>e.key===t)?.kind??``}var UA={key:0,class:`pb-8`},WA=[`title`],GA=[`href`],KA={key:1,class:`px-5 text-muted-foreground`},qA=I({__name:`FilePeek`,props:{m:{},path:{}},setup(e){let t=e,{mainline:n}=mA(()=>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?HA(n.value,r.value):``),s=J(()=>({mainline:n.value,task:i.value})),c=J(()=>t.path.slice(t.path.lastIndexOf(`/`)+1));return(t,l)=>N(n)?(B(),V(`div`,UA,[W(jk,{title:c.value,mono:``,type:N(IC)(e.path,o.value||void 0)},{default:P(()=>[U(`span`,null,j(o.value),1),U(`span`,{class:`truncate font-mono`,title:e.path},j(e.path),9,WA),W(N(JS),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[U(`a`,{href:N(fC)(r.value),target:`_blank`},[W(N(Kd)),l[0]||=G(`原始檔`,-1)],8,GA)]),_:1})]),_:1},8,[`title`,`type`]),W(Fk,null,{default:P(()=>[W(LA,{path:r.value,ctx:s.value},null,8,[`path`,`ctx`])]),_:1}),W(Fk,{title:`所屬`},{default:P(()=>[a.value?(B(),H(Bk,{key:0,peek:N(ZS)(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(Bk,{key:1,peek:N(XS)(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(Bk,{peek:e.m,id:e.m,title:N(n).title,status:N(n).status},null,8,[`peek`,`id`,`title`,`status`])]),_:1})])):(B(),V(`p`,KA,`載入 `+j(e.m)+`…`,1))}}),JA={key:0,class:`pb-8`},YA={class:`text-xs`},XA={class:`text-xs`},ZA={class:`text-xs`},QA={key:1,class:`px-5 text-muted-foreground`},$A=I({__name:`FindingPeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),r=J(()=>Q.findings.find(e=>e.id===t.id)),i=()=>r.value&&yC(()=>dC.archiveFinding(r.value.id,!r.value.archivedAt,r.value.version));return jC([r.value?.origin]),(a,o)=>r.value?(B(),V(`div`,JA,[W(jk,{id:r.value.id,title:r.value.title,type:`finding`,status:r.value.status},{default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(kw,{archived:!!r.value.archivedAt,onToggle:i},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[r.value.appliesTo?.length?(B(),H($,{key:0,label:`適用範圍`,icon:N(md)},{default:P(()=>[(B(!0),V(z,null,L(r.value.appliesTo,e=>(B(),H(Ek,{key:e,text:e},null,8,[`text`]))),128))]),_:1},8,[`icon`])):K(``,!0),r.value.reviewAfter?(B(),H($,{key:1,label:`重新確認`,icon:N(Bd)},{default:P(()=>[W(Pw,{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(id)},{default:P(()=>[W(pA,q(N(kC)(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(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,YA,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,XA,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N(Zu)},{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`,ZA,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,QA,`找不到發現 `+j(e.id)+`。`,1))}}),ej={key:0,class:`pb-8`},tj={key:0,class:`text-xs`},nj={class:`text-xs`},rj={class:`text-xs`},ij={class:`text-xs`},aj={key:1,class:`px-5 text-muted-foreground`},oj=I({__name:`IssuePeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),r=J(()=>Q.issues.find(e=>e.id===t.id)),i=e=>n(e,{chain:!0}),a=()=>r.value&&yC(()=>dC.archiveIssue(r.value.id,!r.value.archivedAt,r.value.version));return jC([r.value?.origin,r.value?.plannedIn]),(n,o)=>r.value?(B(),V(`div`,ej,[W(jk,{id:r.value.id,title:r.value.title,type:`issue`,status:r.value.status},{default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(kw,{archived:!!r.value.archivedAt,onToggle:a},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(dd)},{default:P(()=>[W(rA,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,tj,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:1,label:`到期`,icon:N(Uu)},{default:P(()=>[W(Pw,{day:r.value.due,ended:r.value.status===`closed`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.plannedIn?(B(),H($,{key:2,label:`排入`,icon:N(Gu)},{default:P(()=>[W(pA,q(N(kC)(r.value.plannedIn),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:3,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(r.value.origin),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:4,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:5,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,nj,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:6,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,rj,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:7,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:8,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,ij,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,aj,`找不到待辦 `+j(e.id)+`。`,1))}}),sj=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=Yh(e,t);return(e,t)=>(B(),H(N(Ag),q({"data-slot":`dialog`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),cj=I({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=pf(t,`class`);return(e,r)=>(B(),H(N(v_),q({"data-slot":`dialog-overlay`},N(n),{class:N(qS)(`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`]))}}),lj=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=Yh(pf(n,`class`),r);return(t,r)=>(B(),H(N(b_),null,{default:P(()=>[W(cj),W(N(h_),q({"data-slot":`dialog-content`},{...t.$attrs,...N(i)},{class:N(qS)(`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(jg),{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(ef)),r[0]||=U(`span`,{class:`sr-only`},`Close`,-1)]),_:1})):K(``,!0)]),_:3},16,[`class`])]),_:3}))}}),uj=I({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(g_),q({"data-slot":`dialog-description`},N(n),{class:N(qS)(`text-muted-foreground text-sm`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),dj=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(qS)(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t.class))},[R(n.$slots,`default`),e.showCloseButton?(B(),H(N(jg),{key:0,"as-child":``},{default:P(()=>[W(N(JS),{variant:`outline`},{default:P(()=>[...r[0]||=[G(` Close `,-1)]]),_:1})]),_:1})):K(``,!0)],2))}}),fj=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(qS)(`flex flex-col gap-2 text-center sm:text-left`,t.class))},[R(e.$slots,`default`)],2))}}),pj=I({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(x_),q({"data-slot":`dialog-title`},N(n),{class:N(qS)(`text-lg leading-none font-semibold`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),mj={class:`break-words`},hj={key:2,class:`font-mono`},gj=I({__name:`EvidenceText`,props:{text:{}},setup(e){let t=e,{to:n}=sC(),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:$S(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`,mj,[(B(!0),V(z,null,L(i.value,(e,r)=>(B(),V(z,{key:r},[e.kind===`ref`||e.kind===`file`?(B(),H(N(xm),{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(Ek,{key:1,text:e.value,class:`align-baseline`},null,8,[`text`])):e.kind===`code`?(B(),V(`code`,hj,j(e.value),1)):(B(),V(z,{key:3},[G(j(e.value),1)],64))],64))),128))]))}}),_j={class:`flex flex-col`},vj={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":`已不需要`},yj={class:`flex min-w-0 flex-1 flex-col gap-0.5`},bj={class:`flex min-w-0 items-start gap-2`},xj=[`title`],Sj={key:0,class:`text-xs text-muted-foreground`},Cj={key:1,class:`text-xs text-muted-foreground`},wj={key:0},Tj={key:2,class:`text-xs text-muted-foreground`},Ej={key:3,class:`text-xs text-muted-foreground`},Dj={key:1,class:`text-sm text-muted-foreground`},Oj={key:0,class:`text-xs text-muted-foreground`},kj=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 yC(()=>dC.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 yC(()=>dC.check(`${t.refPrefix}${e.id}`,!0,s.value.trim(),t.version))&&(o.value=null)}return(t,n)=>(B(),V(z,null,[U(`ul`,_j,[(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`,vj,`–`)):(B(),H(N(Fw),{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`,yj,[U(`div`,bj,[W(Ek,{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,xj))),128))]),e.doneWhen&&!e.done&&!e.dropped?(B(),V(`p`,Sj,`完成定義:`+j(e.doneWhen),1)):K(``,!0),e.done&&e.evidence?(B(),V(`p`,Cj,[W(gj,{text:e.evidence},null,8,[`text`]),e.doneAt?(B(),V(`span`,wj,` · `+j(e.doneAt),1)):K(``,!0)])):K(``,!0),e.dropped?(B(),V(`p`,Tj,[n[6]||=G(` 不需要了`,-1),e.supersededBy?(B(),V(z,{key:0},[n[4]||=G(`,由 `,-1),W(gj,{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`,Ej,j(e.note),1)):K(``,!0)])]))),128))]),r.value.length?(B(),H(N(JS),{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(qu),{key:0})):(B(),H(N(Yu),{key:1})),G(j(i.value?`收起已完成`:`已完成 ${r.value.length} 個`),1)]),_:1},8,[`aria-expanded`])):K(``,!0),e.items.length===0?(B(),V(`p`,Dj,`沒有項目`)):K(``,!0),W(N(sj),{open:o.value!==null,"onUpdate:open":n[3]||=e=>!e&&(o.value=null)},{default:P(()=>[W(N(lj),{class:`sm:max-w-lg`},{default:P(()=>[W(N(fj),null,{default:P(()=>[W(N(pj),null,{default:P(()=>[G(`勾選 `+j(o.value?.id),1)]),_:1}),W(N(uj),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`,Oj,`完成定義:`+j(o.value.doneWhen),1)):K(``,!0),W(N(wT),{modelValue:s.value,"onUpdate:modelValue":n[1]||=e=>s.value=e,autofocus:``,placeholder:`證據:commit、檔案:行號或指令輸出`,"aria-label":`證據`},null,8,[`modelValue`]),W(N(dj),null,{default:P(()=>[W(N(JS),{type:`button`,variant:`ghost`,onClick:n[2]||=e=>o.value=null},{default:P(()=>[...n[7]||=[G(`取消`,-1)]]),_:1}),W(N(JS),{type:`submit`,disabled:!s.value.trim()},{default:P(()=>[...n[8]||=[G(`勾選`,-1)]]),_:1},8,[`disabled`])]),_:1})],32)]),_:1})]),_:1},8,[`open`])],64))}}),Aj=[`title`],jj={class:`h-1.5 w-14 overflow-hidden rounded-full bg-primary/20`},Mj={class:`min-w-7 tabular-nums`},Nj=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`,jj,[U(`span`,{class:`block h-full rounded-full bg-primary`,style:he({width:`${n.value}%`})},null,4)]),U(`span`,Mj,j(e.done)+`/`+j(e.total),1)],8,Aj))}}),Pj={key:0,class:`text-xs`},Fj={class:`text-xs`},Ij={class:`text-xs`},Lj={class:`text-xs tabular-nums`},Rj={class:`text-xs`},zj={class:`flex flex-col gap-2`},Bj={class:`mr-2 font-mono text-xs text-muted-foreground`},Vj={class:`w-full text-xs`},Hj={class:`py-1.5 tabular-nums`},Uj={class:`text-right tabular-nums`},Wj={class:`text-right tabular-nums`},Gj={class:`pl-3 text-muted-foreground`},Kj={key:0,class:`text-sm text-muted-foreground`},qj=I({__name:`MainlineBody`,props:{mainline:{},columns:{default:1}},setup(e){let t=e,{open:n}=sC(),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(()=>OC(r.value.id)),d=[`done`,`dropped`];return(t,f)=>(B(),V(z,null,[W(Fk,null,{default:P(()=>[W(ZT,{columns:e.columns},{default:P(()=>[W($,{label:`解決條件`,icon:N(Xd)},{default:P(()=>[W(Nj,{done:a.value.filter(e=>e.done).length,total:a.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),W($,{label:`checklist`,icon:N(Od)},{default:P(()=>[W(Nj,{done:i.value.filter(e=>e.done).length,total:i.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(dd)},{default:P(()=>[W(rA,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,Pj,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:1,label:`到期`,icon:N(Uu)},{default:P(()=>[W(Pw,{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:2,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,Fj,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,Ij,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:6,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(r.value.origin),{onOpen:f[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.budget||r.value.costs?.length?(B(),H($,{key:7,label:`花費`,icon:N(Qd)},{default:P(()=>[U(`span`,Lj,[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:8,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,Rj,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1},8,[`columns`])]),_:1}),o.value.length?(B(),H(Fk,{key:0,title:`待裁決的決策`,count:o.value.length},{default:P(()=>[U(`div`,zj,[(B(!0),V(z,null,L(o.value,e=>(B(),H(N(qT),{key:e.id,variant:`warning`,class:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:t=>N(n)(N(ZS)(r.value.id,e.id),{chain:!0})},{default:P(()=>[W(N(Xu)),W(N(YT),null,{default:P(()=>[U(`span`,Bj,j(e.id),1),G(j(e.title),1)]),_:2},1024),e.affects?.length?(B(),H(N(JT),{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(Fk,{title:`解決條件`,count:r.value.criteria.length},{default:P(()=>[W(kj,{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(Fk,{key:1,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:r.value.id,links:r.value.links,mainline:``},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:2,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),r.value.costs?.length?(B(),H(Fk,{key:3,title:`花費明細`,count:r.value.costs.length},{default:P(()=>[U(`table`,Vj,[f[1]||=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`,Hj,j(e.date),1),U(`td`,null,j(e.item),1),U(`td`,Uj,j(e.estimate??``),1),U(`td`,Wj,j(e.actual??``),1),U(`td`,Gj,j(e.note??``),1)]))),128))])])]),_:1},8,[`count`])):K(``,!0),l.value.length?(B(),H(Fk,{key:4,title:`相關的待辦`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(Bk,{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(Fk,{title:`推進過它的會話`,count:u.value.length},{default:P(()=>[(B(!0),V(z,null,L(u.value,({session:e,actions:t})=>(B(),H(Bk,{key:e.id,peek:N(QS)(e.id),title:N(wC)(e),status:e.status},{default:P(()=>[G(j(t.length)+` 個行動`,1)]),_:2},1032,[`peek`,`title`,`status`]))),128)),u.value.length===0?(B(),V(`p`,Kj,`這台電腦上沒有推進它的會話。會話只記在本機。`)):K(``,!0)]),_:1},8,[`count`])],64))}}),Jj={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`},Yj=[`value`],Xj=[`value`],Zj=I({__name:`StatusSelect`,props:{status:{},options:{}},emits:[`change`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),V(`label`,Jj,[W(Uw,{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(HC)[e]??e),9,Xj))),128))],40,Yj)]))}}),Qj={key:0,class:`pb-8`},$j={key:1,class:`px-5 text-muted-foreground`},eM=I({__name:`MainlinePeek`,props:{m:{}},setup(e){let t=e,{mainline:n}=mA(()=>t.m),r=e=>n.value&&yC(()=>dC.mainlineStatus(t.m,e,n.value.version)),i=e=>n.value&&yC(()=>dC.mainlineTitle(t.m,e,n.value.version)),a=()=>n.value&&yC(()=>dC.archive(t.m,!n.value.archivedAt,n.value.version));return(t,o)=>N(n)?(B(),V(`div`,Qj,[W(jk,{id:N(n).id,title:N(n).title,type:`mainline`,status:N(n).status,editable:``,onRename:i},{default:P(()=>[W(Zj,{status:N(n).status,options:N(LC),onChange:r},null,8,[`status`,`options`]),W(kw,{archived:!!N(n).archivedAt,onToggle:a},null,8,[`archived`]),W(N(JS),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(xm),{to:`/mainlines/${N(n).id}`},{default:P(()=>[W(N(Kd)),o[0]||=G(`開啟工作區`,-1)]),_:1},8,[`to`])]),_:1})]),_:1},8,[`id`,`title`,`status`]),W(qj,{mainline:N(n)},null,8,[`mainline`])])):(B(),V(`p`,$j,`載入 `+j(e.m)+`…`,1))}}),tM=[`datetime`,`title`],nM=I({__name:`RelativeTime`,props:{at:{}},setup(e){let t=e,n=Df({scheduler:e=>mf(e,6e4)}),r=new Intl.RelativeTimeFormat(`zh-TW`,{numeric:`auto`}),i=J(()=>new Date(t.at.length===10?`${t.at}T00:00`: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`):t.at.slice(0,10)});return(t,n)=>(B(),V(`time`,{datetime:e.at,title:e.at.replace(`T`,` `)},j(a.value),9,tM))}}),rM={key:0,class:`pb-8`},iM={key:0,class:`flex flex-col gap-1 text-sm`},aM={key:0},oM={key:0,class:`text-xs text-muted-foreground`},sM={key:1,class:`text-xs text-muted-foreground`},cM={class:`font-mono text-xs`},lM={class:`flex flex-col`},uM=[`aria-expanded`,`onClick`],dM={class:`mt-px shrink-0 font-mono text-xs text-muted-foreground`},fM={class:`min-w-0 flex-1`},pM={key:2,class:`shrink-0 text-xs text-muted-foreground tabular-nums`},mM={class:`flex flex-wrap gap-1 pb-1 pl-12`},hM={key:0,class:`pb-1 pl-12 text-xs text-muted-foreground`},gM={key:1,class:`mb-2 ml-12 flex flex-col gap-1.5 rounded-md border p-3 text-xs`},_M={key:0,class:`text-muted-foreground`},vM={key:1,class:`text-muted-foreground`},yM={key:2,class:`text-muted-foreground`},bM={class:`w-20 shrink-0 text-muted-foreground`},xM={key:0,class:`text-muted-foreground`},SM={key:1,class:`text-destructive`},CM={key:0,class:`text-sm text-muted-foreground`},wM={key:0,class:`text-sm text-muted-foreground`},TM={class:`w-20 text-muted-foreground`},EM={class:`tabular-nums`},DM={key:1,class:`px-5 text-muted-foreground`},OM=I({__name:`SessionPeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),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=>pC(e).m))))_C(t).catch(e=>Q.error=e.message);i.value=await dC.trace(e.id).catch(()=>null)}},{immediate:!0});function c(e){let{m:t,t:n,item:r}=pC(e),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(UC).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&&yC(()=>dC.archiveSession(r.value.id,!r.value.archivedAt));return(t,c)=>r.value?(B(),V(`div`,rM,[W(jk,{title:N(wC)(r.value),type:`session`,status:r.value.status},{notice:P(()=>[r.value.description||r.value.summary?(B(),V(`div`,iM,[r.value.description?(B(),V(`p`,aM,[G(j(r.value.description),1),r.value.depth===void 0?K(``,!0):(B(),V(`span`,oM,` · 深度 `+j(r.value.depth),1))])):K(``,!0),r.value.summary?(B(),V(`p`,sM,j(r.value.summary),1)):K(``,!0)])):K(``,!0)]),default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(Ek,{text:r.value.id,label:r.value.id.slice(-8)},null,8,[`text`,`label`]),W(kw,{archived:!!r.value.archivedAt,onToggle:p},null,8,[`archived`])]),_:1},8,[`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[W($,{label:`ID`,icon:N(Sd)},{default:P(()=>[W(Ek,{text:r.value.id},null,8,[`text`])]),_:1},8,[`icon`]),W($,{label:`agent`,icon:N(Vu)},{default:P(()=>[W(N(Dw),{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(od)},{default:P(()=>[U(`span`,cM,j(i.value?.model??r.value.model),1)]),_:1},8,[`icon`])):K(``,!0),r.value.effort?(B(),H($,{key:1,label:`effort`,icon:N(vd)},{default:P(()=>[G(j(r.value.effort),1)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`開始`,icon:N(td)},{default:P(()=>[W(nM,{at:r.value.started,class:`text-xs`},null,8,[`at`])]),_:1},8,[`icon`]),r.value.branch?(B(),H($,{key:2,label:`分支`,icon:N(yd)},{default:P(()=>[W(Ek,{text:r.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),r.value.worktree?(B(),H($,{key:3,label:`worktree`,icon:N(hd)},{default:P(()=>[W(Ek,{text:r.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),W($,{label:`工作目錄`,icon:N(gd)},{default:P(()=>[W(Ek,{text:r.value.cwd},null,8,[`text`])]),_:1},8,[`icon`]),r.value.transcript?(B(),H($,{key:4,label:`對話紀錄`,icon:N(Ud)},{default:P(()=>[W(Ek,{text:r.value.transcript,class:`min-w-0`},null,8,[`text`]),W(N(JS),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground`,title:`在 Finder 顯示`,"aria-label":`在 Finder 顯示`,onClick:c[0]||=e=>N(yC)(()=>N(dC).reveal(r.value.transcript))},{default:P(()=>[W(N(pd))]),_:1})]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(Fk,{title:`行動佇列`,count:r.value.actions.length},{default:P(()=>[U(`ul`,lM,[(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(qu),{key:0,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(Yu),{key:1,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})),W(Uw,{status:e.status,class:`mt-0.5 shrink-0`},null,8,[`status`]),U(`span`,dM,j(e.id),1),U(`span`,fM,j(e.do),1),e.startedAt?(B(),V(`span`,pM,j(e.startedAt.slice(11))+j(e.doneAt?`–${e.doneAt.slice(11)}`:``),1)):K(``,!0)],8,uM),U(`div`,mM,[(B(!0),V(z,null,L(e.serves,e=>(B(),H(pA,q({key:e},{ref_for:!0},N(kC)(e.split(`#`)[0]),{id:e,onOpen:()=>N(n)(e.split(`#`)[0],{chain:!0})}),null,16,[`id`,`onOpen`]))),128))]),e.note?(B(),V(`p`,hM,j(e.note),1)):K(``,!0),a.value===e.id?(B(),V(`div`,gM,[i.value?.available?e.startedAt?f(e.id)===0?(B(),V(`p`,yM,`這段時間沒有用到 skill、agent,也沒有載入 rule 或用 Read 讀檔。用 Bash 讀的檔不會出現在這裡。`)):K(``,!0):(B(),V(`p`,vM,`這個行動沒有開始時間,追溯不到它的時間窗。`)):(B(),V(`p`,_M,`沒有對話紀錄,無法追溯。`)),(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`,bM,j(N(UC)[e.kind]),1),(B(!0),V(z,null,L(e.items,e=>(B(),H(N(Dw),{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`,xM,`×`+j(e.count),1)):K(``,!0),e.detail?.startsWith(`blocked`)?(B(),V(`span`,SM,`擋下`)):K(``,!0)]),_:2},1032,[`title`]))),128))]))),128))])):K(``,!0)]))),128))]),r.value.actions.length===0?(B(),V(`p`,CM,`這個會話沒有行動。`)):K(``,!0)]),_:1},8,[`count`]),W(Fk,{title:`委派與接手`,count:s.value.length},{default:P(()=>[(B(!0),V(z,null,L(s.value,e=>(B(),H(Bk,{key:e.label+e.id,peek:N(QS)(e.id),label:e.label,title:o(e.id)?N(wC)(o(e.id)):e.id,status:o(e.id)?.status},null,8,[`peek`,`label`,`title`,`status`]))),128)),s.value.length===0?(B(),V(`p`,wM,`沒有委派或交接關係。`)):K(``,!0)]),_:1},8,[`count`]),W(Fk,{title:`服務的 checklist 項目`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(Bk,{key:e.ref,peek:e.task,id:e.ref,title:e.text},{default:P(()=>[W(N(Fw),{"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(Fk,{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`,TM,j(N(UC)[e.kind]),1),U(`span`,EM,j(e.items.length),1)]))),128))]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,DM,`這台電腦上沒有會話 `+j(e.id)+`。`,1))}}),kM={key:0,class:`pb-8`},AM={class:`truncate`},jM={key:0,class:`flex items-center gap-1.5`},MM={key:1},NM={key:2},PM={key:0,class:`text-xs`},FM={class:`text-xs`},IM={class:`text-xs`},LM={class:`text-xs`},RM={class:`shrink-0 font-mono`},zM={class:`truncate`},BM={key:0,class:`text-sm text-muted-foreground`},VM={key:1,class:`px-5 text-muted-foreground`},HM=I({__name:`TaskPeek`,props:{m:{},t:{}},setup(e){let t=e,{open:n}=sC(),{mainline:r}=mA(()=>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(()=>OC(t.m,t.t)),c=e=>n(e,{chain:!0}),l=J(()=>{let e=i.value?.blockedBy?.waitingFor,t=e?PC(e):void 0;return t&&t!==`session`&&!e.startsWith(`file:`)?e:void 0});Er(()=>jC([l.value]));let u=e=>e.slice((r.value?.dir.length??0)+1),d=e=>e.slice(e.lastIndexOf(`/`)+1),f=e=>i.value&&yC(()=>dC.taskStatus(t.m,t.t,e,i.value.version));return(n,p)=>i.value&&N(r)?(B(),V(`div`,kM,[W(jk,{id:`${e.m}/${i.value.id}`,title:i.value.title,type:N(NC)(i.value),status:i.value.status},{notice:P(()=>[i.value.blockedBy?(B(),H(N(qT),{key:0,variant:`warning`},{default:P(()=>[W(N(Qu)),W(N(YT),null,{default:P(()=>[G(`卡住:`+j(i.value.blockedBy.reason),1)]),_:1}),W(N(JT),{class:`text-xs text-muted-foreground`},{default:P(()=>[l.value?(B(),V(`p`,jM,[p[0]||=G(`等待 `,-1),W(pA,q(N(kC)(l.value),{onOpen:c}),null,16)])):i.value.blockedBy.waitingFor?(B(),V(`p`,MM,`等待 `+j(i.value.blockedBy.waitingFor),1)):K(``,!0),i.value.blockedBy.signal?(B(),V(`p`,NM,`看到「`+j(i.value.blockedBy.signal)+`」就可以繼續`,1)):K(``,!0)]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(Zj,{status:i.value.status,options:N(RC),onChange:f},null,8,[`status`,`options`]),U(`span`,AM,j(N(r).title),1)]),_:1},8,[`id`,`title`,`type`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[W($,{label:`checklist`,icon:N(Od)},{default:P(()=>[W(Nj,{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(dd)},{default:P(()=>[W(rA,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,PM,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`種類`,icon:N(wd)},{default:P(()=>[G(j(i.value.kind===`branch`?`分支`:`階段`),1)]),_:1},8,[`icon`]),i.value.parent?(B(),H($,{key:1,label:`上層任務`,icon:N(ad)},{default:P(()=>[W(pA,q(N(kC)(N(XS)(e.m,i.value.parent)),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0),i.value.repo?(B(),H($,{key:2,label:`倉庫`,icon:N(fd)},{default:P(()=>[G(j(i.value.repo),1)]),_:1},8,[`icon`])):K(``,!0),i.value.branch?(B(),H($,{key:3,label:`分支`,icon:N(yd)},{default:P(()=>[W(Ek,{text:i.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.base?(B(),H($,{key:4,label:`基底`,icon:N(bd)},{default:P(()=>[W(Ek,{text:i.value.base},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.worktree?(B(),H($,{key:5,label:`worktree`,icon:N(hd)},{default:P(()=>[W(Ek,{text:i.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.merge?(B(),H($,{key:6,label:`合併狀態`,icon:N(xd)},{default:P(()=>[G(j(N(KC)[i.value.merge]),1)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:7,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:8,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,FM,j(i.value.created),1)]),_:1},8,[`icon`]),i.value.startedAt?(B(),H($,{key:9,label:`開始`,icon:N(Rd)},{default:P(()=>[U(`span`,IM,j(i.value.startedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.closedAt?(B(),H($,{key:10,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,LM,j(i.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:11,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:12,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(i.value.origin),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(Fk,{title:`checklist`,count:i.value.checklist.length},{default:P(()=>[W(kj,{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(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.artifacts.length?(B(),H(Fk,{key:1,title:`產物`,count:i.value.artifacts.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.artifacts,t=>(B(),H(Bk,{key:t,peek:N($S)(e.m,u(t)),title:d(t)},null,8,[`peek`,`title`]))),128))]),_:1},8,[`count`])):K(``,!0),a.value.length?(B(),H(Fk,{key:2,title:`子任務`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,t=>(B(),H(Bk,{key:t.id,peek:N(XS)(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(Xk,{self:N(XS)(t.m,t.t),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(Fk,{key:3,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(tA,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(Fk,{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(Bk,{peek:N(QS)(e.id),title:N(wC)(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(Uw,{status:e.status,class:`shrink-0`},null,8,[`status`]),U(`span`,RM,j(e.id),1),U(`span`,zM,j(e.do),1)]))),128))],64))),128)),s.value.length===0?(B(),V(`p`,BM,`這台電腦上沒有服務這個任務的行動。`)):K(``,!0)]),_:1},8,[`count`])])):(B(),V(`p`,VM,`載入 `+j(e.m)+`/`+j(e.t)+`…`,1))}}),UM={class:`flex h-11 shrink-0 items-center gap-1 px-2`},WM={key:0,class:`truncate text-xs text-muted-foreground`},GM={key:1,class:`ml-2 text-xs text-status-done`,role:`status`},KM={class:`min-h-0 flex-1 overflow-auto`},qM=`mainflow.panelWidth`,JM=360,YM=1200,XM=nw(I({__name:`PeekPanel`,setup(e){let{current:t,trail:n,full:r,back:i,close:a,toggleFull:o}=sC(),s=Number(uw(qM,880)),c=M(s>=JM&&s<=YM?s:880);function l(e){let t=e.clientX,n=c.value,r=e=>c.value=Math.min(YM,Math.max(JM,n+t-e.clientX)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),dw(qM,c.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}let u=J(()=>{let e=nC(n.value.at(-1));return e?e.kind===`session`?`會話`:e.kind===`file`?e.path.split(`/`).at(-1):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`,UM,[W(N(JS),{variant:`ghost`,size:`icon-sm`,disabled:!N(n).length,"aria-label":`上一步`,title:`上一步`,onClick:N(i)},{default:P(()=>[W(N(Ju))]),_:1},8,[`disabled`,`onClick`]),u.value?(B(),V(`span`,WM,`回到 `+j(u.value),1)):K(``,!0),N(rC)?(B(),V(`span`,GM,j(N(rC)),1)):K(``,!0),s[0]||=U(`span`,{class:`ml-auto`},null,-1),W(N(JS),{variant:`ghost`,size:`icon-sm`,"aria-label":N(r)?`回到並排`:`開成整頁`,title:N(r)?`回到並排`:`開成整頁`,onClick:N(o)},{default:P(()=>[N(r)?(B(),H(N(Pd),{key:0})):(B(),H(N(Md),{key:1}))]),_:1},8,[`aria-label`,`title`,`onClick`]),W(N(JS),{variant:`ghost`,size:`icon-sm`,"aria-label":`關閉(Esc)`,title:`關閉(Esc)`,onClick:N(a)},{default:P(()=>[W(N(ef))]),_:1},8,[`onClick`])]),U(`div`,KM,[N(t).kind===`task`?(B(),H(HM,{key:N(t).ref,m:N(t).m,t:N(t).t},null,8,[`m`,`t`])):N(t).kind===`decision`?(B(),H(wA,{key:N(t).ref,m:N(t).m,d:N(t).d},null,8,[`m`,`d`])):N(t).kind===`file`?(B(),H(qA,{key:N(t).ref,m:N(t).m,path:N(t).path},null,8,[`m`,`path`])):N(t).kind===`session`?(B(),H(OM,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`mainline`?(B(),H(eM,{key:N(t).ref,m:N(t).m},null,8,[`m`])):N(t).kind===`issue`?(B(),H(oj,{key:N(t).ref,id:N(t).id},null,8,[`id`])):(B(),H($A,{key:N(t).ref,id:N(t).id},null,8,[`id`]))])],6)):K(``,!0)}}),[[`__scopeId`,`data-v-36a42a88`]]),ZM={class:`flex h-full min-h-0 flex-col`},QM={class:`relative flex min-h-0 flex-1`},$M={class:`@container min-w-0 flex-1 overflow-auto`,"data-peek-list":``},eN=I({__name:`PageLayout`,setup(e){let{current:t,full:n}=sC();return(e,r)=>(B(),V(`div`,ZM,[R(e.$slots,`header`),U(`div`,QM,[yr(U(`div`,$M,[R(e.$slots,`default`)],512),[[Vc,!(N(t)&&N(n))]]),W(XM)])]))}}),tN=[`P0`,`P1`,`P2`,`P3`].map(e=>({value:e,label:e})),nN=e=>e??`P2`,rN=e=>e.map(e=>({value:e,label:HC[e]??e,status:e})),iN=e=>VC.has(e);function aN(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 oN=e=>({doing:e.filter(e=>e.status===`doing`).length,open:e.filter(e=>!iN(e.status)).length}),sN=e=>({key:`status`,label:`狀態`,value:e=>e.status,order:e,groupLabel:e=>HC[e]??e,status:e=>e}),cN=(e,t)=>e.values?.(t)??[e.value(t)];function lN(e,t){let n=new Map;for(let r of t)for(let t of cN(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),items:n.get(t)}))}var uN=`f.`,dN=e=>(Array.isArray(e)?e[0]:e)??void 0,fN=(e,t=``)=>{if(!e.startsWith(t))return!1;let n=e.slice(t.length);return n===`q`||n===`sort`||n===`archived`||n.startsWith(uN)},pN=e=>uw(e,{}),mN=(e,t)=>dw(e,{...pN(e),...t});function hN(e,t){let n=Kf(),r=Gf(),i=`mainflow.list.${e.key}`,a=e.queryPrefix??``,o=pN(i),s=e=>Object.fromEntries(Object.entries(e).filter(([e])=>fN(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}?${dN(n.query.view)??``}`,f=d();F(()=>s(n.query),(e,t)=>{d()!==f||u&&t===void 0||mN(i,{query:e})},{deep:!0,immediate:!0});let p=J({get:()=>dN(n.query[`${a}q`])??``,set:e=>c({[`${a}q`]:e.trim()?e:void 0})}),m=J(()=>{let t=dN(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,(dN(n.query[`${a}${uN}${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}${uN}${e}`]:r.join(`,`)||void 0})}let b=e=>c({[`${a}${uN}${e}`]:void 0}),x=()=>c({[`${a}q`]:void 0,[`${a}archived`]:void 0,...Object.fromEntries(e.filters.map(e=>[`${a}${uN}${e.key}`,void 0]))}),S=J(()=>{let e=dN(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,mN(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=aN(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?lN(t,te.value).map(({key:e,label:n,status:i,items:a})=>{let o=t.leader?.(e);return{key:e,label:n,status:i,leader:o,...r(a.filter(e=>e!==o))}}):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),mN(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`)}}function gN(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 yC(async()=>{let n=await dC.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 _N={key:0,class:`shrink-0 text-xs text-muted-foreground`},vN=[`title`],yN=I({__name:`FindingList`,setup(e){let t=[`valid`,`obsolete`],n=hN({key:`findings`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:rN(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:[sN(t),{key:`category`,label:`分類`,value:e=>e.category??`未分類`}],defaultSort:`created`,defaultGroup:`status`,ended:e=>iN(e.status),archived:e=>!!e.archivedAt},()=>Q.findings),r=gN(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=>yC(()=>dC.archiveFinding(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`發現`,description:`踩過的坑與經驗。下一個任務動手前先看這裡。`}),W(NT,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(HT,{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(Dw),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,_N,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),applies:P(({item:e})=>[U(`span`,{title:e.appliesTo?.join(`
78
+ `);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 NA={key:0,class:`mb-2 text-sm`},PA=[`src`,`title`],FA=[`src`,`alt`],IA={key:6,class:`overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed`},LA=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 MA(await(await fetch(fC(t.path))).text(),t.path);else if(e===`js`||e===`mjs`){let e=await OA(()=>import(fC(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(fC(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`,NA,`無法渲染 `+j(e.path)+`:`+j(a.value),1)):K(``,!0),r(e.path)===`md`?(B(),H(Sk,{key:1,source:i.value},null,8,[`source`])):r(e.path)===`html`?(B(),V(`iframe`,{key:2,src:N(fC)(e.path),sandbox:`allow-scripts allow-same-origin`,class:`h-[480px] w-full rounded-lg border bg-white`,title:e.path},null,8,PA)):n.includes(r(e.path))?(B(),V(`img`,{key:3,src:N(fC)(e.path),alt:e.path,class:`max-w-full rounded-lg border`},null,8,FA)):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`,IA,j(i.value),1))]))}}),RA=[`主脈絡文件`,`任務文件`,`產物`,`決策`,`自訂視圖`,`參考來源`],zA=e=>e.slice(e.lastIndexOf(`/`)+1),BA=e=>zA(e).includes(`.`)?zA(e).slice(zA(e).lastIndexOf(`.`)+1).toLowerCase():``;function VA(e){let t=t=>t.slice(e.dir.length+1),n=(e,n,r,i)=>({key:e,name:zA(e),kind:n,ext:BA(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?``:BA(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,`自訂視圖`)),...r(e.refs),...e.tasks.flatMap(e=>r(e.refs,e.id))]}function HA(e,t){return VA(e).find(e=>e.key===t)?.kind??``}var UA={key:0,class:`pb-8`},WA=[`title`],GA=[`href`],KA={key:1,class:`px-5 text-muted-foreground`},qA=I({__name:`FilePeek`,props:{m:{},path:{}},setup(e){let t=e,{mainline:n}=mA(()=>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?HA(n.value,r.value):``),s=J(()=>({mainline:n.value,task:i.value})),c=J(()=>t.path.slice(t.path.lastIndexOf(`/`)+1));return(t,l)=>N(n)?(B(),V(`div`,UA,[W(jk,{title:c.value,mono:``,type:N(IC)(e.path,o.value||void 0)},{default:P(()=>[U(`span`,null,j(o.value),1),U(`span`,{class:`truncate font-mono`,title:e.path},j(e.path),9,WA),W(N(JS),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[U(`a`,{href:N(fC)(r.value),target:`_blank`},[W(N(Kd)),l[0]||=G(`原始檔`,-1)],8,GA)]),_:1})]),_:1},8,[`title`,`type`]),W(Fk,null,{default:P(()=>[W(LA,{path:r.value,ctx:s.value},null,8,[`path`,`ctx`])]),_:1}),W(Fk,{title:`所屬`},{default:P(()=>[a.value?(B(),H(Bk,{key:0,peek:N(ZS)(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(Bk,{key:1,peek:N(XS)(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(Bk,{peek:e.m,id:e.m,title:N(n).title,status:N(n).status},null,8,[`peek`,`id`,`title`,`status`])]),_:1})])):(B(),V(`p`,KA,`載入 `+j(e.m)+`…`,1))}}),JA={key:0,class:`pb-8`},YA={class:`text-xs`},XA={class:`text-xs`},ZA={class:`text-xs`},QA={key:1,class:`px-5 text-muted-foreground`},$A=I({__name:`FindingPeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),r=J(()=>Q.findings.find(e=>e.id===t.id)),i=()=>r.value&&yC(()=>dC.archiveFinding(r.value.id,!r.value.archivedAt,r.value.version));return jC([r.value?.origin]),(a,o)=>r.value?(B(),V(`div`,JA,[W(jk,{id:r.value.id,title:r.value.title,type:`finding`,status:r.value.status},{default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(kw,{archived:!!r.value.archivedAt,onToggle:i},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[r.value.appliesTo?.length?(B(),H($,{key:0,label:`適用範圍`,icon:N(md)},{default:P(()=>[(B(!0),V(z,null,L(r.value.appliesTo,e=>(B(),H(Ek,{key:e,text:e},null,8,[`text`]))),128))]),_:1},8,[`icon`])):K(``,!0),r.value.reviewAfter?(B(),H($,{key:1,label:`重新確認`,icon:N(Bd)},{default:P(()=>[W(Pw,{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(id)},{default:P(()=>[W(pA,q(N(kC)(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(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:4,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,YA,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:5,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,XA,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:6,label:`結果`,icon:N(Zu)},{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`,ZA,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,QA,`找不到發現 `+j(e.id)+`。`,1))}}),ej={key:0,class:`pb-8`},tj={key:0,class:`text-xs`},nj={class:`text-xs`},rj={class:`text-xs`},ij={class:`text-xs`},aj={key:1,class:`px-5 text-muted-foreground`},oj=I({__name:`IssuePeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),r=J(()=>Q.issues.find(e=>e.id===t.id)),i=e=>n(e,{chain:!0}),a=()=>r.value&&yC(()=>dC.archiveIssue(r.value.id,!r.value.archivedAt,r.value.version));return jC([r.value?.origin,r.value?.plannedIn]),(n,o)=>r.value?(B(),V(`div`,ej,[W(jk,{id:r.value.id,title:r.value.title,type:`issue`,status:r.value.status},{default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(kw,{archived:!!r.value.archivedAt,onToggle:a},null,8,[`archived`])]),_:1},8,[`id`,`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(dd)},{default:P(()=>[W(rA,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,tj,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:1,label:`到期`,icon:N(Uu)},{default:P(()=>[W(Pw,{day:r.value.due,ended:r.value.status===`closed`},null,8,[`day`,`ended`])]),_:1},8,[`icon`])):K(``,!0),r.value.plannedIn?(B(),H($,{key:2,label:`排入`,icon:N(Gu)},{default:P(()=>[W(pA,q(N(kC)(r.value.plannedIn),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:3,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(r.value.origin),{onOpen:i}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.category?(B(),H($,{key:4,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:5,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,nj,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:6,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,rj,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:7,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.archivedAt?(B(),H($,{key:8,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,ij,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),r.value.body.trim()?(B(),H(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:t.id,links:r.value.links},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:1,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,aj,`找不到待辦 `+j(e.id)+`。`,1))}}),sj=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=Yh(e,t);return(e,t)=>(B(),H(N(Ag),q({"data-slot":`dialog`},N(n)),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16))}}),cj=I({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=pf(t,`class`);return(e,r)=>(B(),H(N(v_),q({"data-slot":`dialog-overlay`},N(n),{class:N(qS)(`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`]))}}),lj=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=Yh(pf(n,`class`),r);return(t,r)=>(B(),H(N(b_),null,{default:P(()=>[W(cj),W(N(h_),q({"data-slot":`dialog-content`},{...t.$attrs,...N(i)},{class:N(qS)(`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(jg),{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(ef)),r[0]||=U(`span`,{class:`sr-only`},`Close`,-1)]),_:1})):K(``,!0)]),_:3},16,[`class`])]),_:3}))}}),uj=I({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(g_),q({"data-slot":`dialog-description`},N(n),{class:N(qS)(`text-muted-foreground text-sm`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),dj=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(qS)(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t.class))},[R(n.$slots,`default`),e.showCloseButton?(B(),H(N(jg),{key:0,"as-child":``},{default:P(()=>[W(N(JS),{variant:`outline`},{default:P(()=>[...r[0]||=[G(` Close `,-1)]]),_:1})]),_:1})):K(``,!0)],2))}}),fj=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(qS)(`flex flex-col gap-2 text-center sm:text-left`,t.class))},[R(e.$slots,`default`)],2))}}),pj=I({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(x_),q({"data-slot":`dialog-title`},N(n),{class:N(qS)(`text-lg leading-none font-semibold`,t.class)}),{default:P(()=>[R(e.$slots,`default`)]),_:3},16,[`class`]))}}),mj={class:`break-words`},hj={key:2,class:`font-mono`},gj=I({__name:`EvidenceText`,props:{text:{}},setup(e){let t=e,{to:n}=sC(),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:$S(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`,mj,[(B(!0),V(z,null,L(i.value,(e,r)=>(B(),V(z,{key:r},[e.kind===`ref`||e.kind===`file`?(B(),H(N(xm),{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(Ek,{key:1,text:e.value,class:`align-baseline`},null,8,[`text`])):e.kind===`code`?(B(),V(`code`,hj,j(e.value),1)):(B(),V(z,{key:3},[G(j(e.value),1)],64))],64))),128))]))}}),_j={class:`flex flex-col`},vj={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":`已不需要`},yj={class:`flex min-w-0 flex-1 flex-col gap-0.5`},bj={class:`flex min-w-0 items-start gap-2`},xj=[`title`],Sj={key:0,class:`text-xs text-muted-foreground`},Cj={key:1,class:`text-xs text-muted-foreground`},wj={key:0},Tj={key:2,class:`text-xs text-muted-foreground`},Ej={key:3,class:`text-xs text-muted-foreground`},Dj={key:1,class:`text-sm text-muted-foreground`},Oj={key:0,class:`text-xs text-muted-foreground`},kj=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 yC(()=>dC.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 yC(()=>dC.check(`${t.refPrefix}${e.id}`,!0,s.value.trim(),t.version))&&(o.value=null)}return(t,n)=>(B(),V(z,null,[U(`ul`,_j,[(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`,vj,`–`)):(B(),H(N(Fw),{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`,yj,[U(`div`,bj,[W(Ek,{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,xj))),128))]),e.doneWhen&&!e.done&&!e.dropped?(B(),V(`p`,Sj,`完成定義:`+j(e.doneWhen),1)):K(``,!0),e.done&&e.evidence?(B(),V(`p`,Cj,[W(gj,{text:e.evidence},null,8,[`text`]),e.doneAt?(B(),V(`span`,wj,` · `+j(e.doneAt),1)):K(``,!0)])):K(``,!0),e.dropped?(B(),V(`p`,Tj,[n[6]||=G(` 不需要了`,-1),e.supersededBy?(B(),V(z,{key:0},[n[4]||=G(`,由 `,-1),W(gj,{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`,Ej,j(e.note),1)):K(``,!0)])]))),128))]),r.value.length?(B(),H(N(JS),{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(qu),{key:0})):(B(),H(N(Yu),{key:1})),G(j(i.value?`收起已完成`:`已完成 ${r.value.length} 個`),1)]),_:1},8,[`aria-expanded`])):K(``,!0),e.items.length===0?(B(),V(`p`,Dj,`沒有項目`)):K(``,!0),W(N(sj),{open:o.value!==null,"onUpdate:open":n[3]||=e=>!e&&(o.value=null)},{default:P(()=>[W(N(lj),{class:`sm:max-w-lg`},{default:P(()=>[W(N(fj),null,{default:P(()=>[W(N(pj),null,{default:P(()=>[G(`勾選 `+j(o.value?.id),1)]),_:1}),W(N(uj),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`,Oj,`完成定義:`+j(o.value.doneWhen),1)):K(``,!0),W(N(wT),{modelValue:s.value,"onUpdate:modelValue":n[1]||=e=>s.value=e,autofocus:``,placeholder:`證據:commit、檔案:行號或指令輸出`,"aria-label":`證據`},null,8,[`modelValue`]),W(N(dj),null,{default:P(()=>[W(N(JS),{type:`button`,variant:`ghost`,onClick:n[2]||=e=>o.value=null},{default:P(()=>[...n[7]||=[G(`取消`,-1)]]),_:1}),W(N(JS),{type:`submit`,disabled:!s.value.trim()},{default:P(()=>[...n[8]||=[G(`勾選`,-1)]]),_:1},8,[`disabled`])]),_:1})],32)]),_:1})]),_:1},8,[`open`])],64))}}),Aj=[`title`],jj={class:`h-1.5 w-14 overflow-hidden rounded-full bg-primary/20`},Mj={class:`min-w-7 tabular-nums`},Nj=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`,jj,[U(`span`,{class:`block h-full rounded-full bg-primary`,style:he({width:`${n.value}%`})},null,4)]),U(`span`,Mj,j(e.done)+`/`+j(e.total),1)],8,Aj))}}),Pj={key:0,class:`text-xs`},Fj={class:`text-xs`},Ij={class:`text-xs`},Lj={class:`text-xs tabular-nums`},Rj={class:`text-xs`},zj={class:`flex flex-col gap-2`},Bj={class:`mr-2 font-mono text-xs text-muted-foreground`},Vj={class:`w-full text-xs`},Hj={class:`py-1.5 tabular-nums`},Uj={class:`text-right tabular-nums`},Wj={class:`text-right tabular-nums`},Gj={class:`pl-3 text-muted-foreground`},Kj={key:0,class:`text-sm text-muted-foreground`},qj=I({__name:`MainlineBody`,props:{mainline:{},columns:{default:1}},setup(e){let t=e,{open:n}=sC(),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(()=>OC(r.value.id)),d=[`done`,`dropped`];return(t,f)=>(B(),V(z,null,[W(Fk,null,{default:P(()=>[W(ZT,{columns:e.columns},{default:P(()=>[W($,{label:`解決條件`,icon:N(Xd)},{default:P(()=>[W(Nj,{done:a.value.filter(e=>e.done).length,total:a.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),W($,{label:`checklist`,icon:N(Od)},{default:P(()=>[W(Nj,{done:i.value.filter(e=>e.done).length,total:i.value.length},null,8,[`done`,`total`])]),_:1},8,[`icon`]),r.value.priority?(B(),H($,{key:0,label:`優先度`,icon:N(dd)},{default:P(()=>[W(rA,{priority:r.value.priority},null,8,[`priority`]),r.value.priority===`P2`?(B(),V(`span`,Pj,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),r.value.due?(B(),H($,{key:1,label:`到期`,icon:N(Uu)},{default:P(()=>[W(Pw,{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:2,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(r.value.category),1)]),_:1},8,[`icon`])):K(``,!0),r.value.labels?.length?(B(),H($,{key:3,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(r.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,Fj,j(r.value.created),1)]),_:1},8,[`icon`]),r.value.closedAt?(B(),H($,{key:4,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,Ij,j(r.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),r.value.resolution?(B(),H($,{key:5,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(r.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),r.value.origin?(B(),H($,{key:6,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(r.value.origin),{onOpen:f[0]||=e=>N(n)(e,{chain:!0})}),null,16)]),_:1},8,[`icon`])):K(``,!0),r.value.budget||r.value.costs?.length?(B(),H($,{key:7,label:`花費`,icon:N(Qd)},{default:P(()=>[U(`span`,Lj,[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:8,label:`封存`,icon:N(Pu)},{default:P(()=>[U(`span`,Rj,j(r.value.archivedAt),1)]),_:1},8,[`icon`])):K(``,!0)]),_:1},8,[`columns`])]),_:1}),o.value.length?(B(),H(Fk,{key:0,title:`待裁決的決策`,count:o.value.length},{default:P(()=>[U(`div`,zj,[(B(!0),V(z,null,L(o.value,e=>(B(),H(N(qT),{key:e.id,variant:`warning`,class:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:t=>N(n)(N(ZS)(r.value.id,e.id),{chain:!0})},{default:P(()=>[W(N(Xu)),W(N(YT),null,{default:P(()=>[U(`span`,Bj,j(e.id),1),G(j(e.title),1)]),_:2},1024),e.affects?.length?(B(),H(N(JT),{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(Fk,{title:`解決條件`,count:r.value.criteria.length},{default:P(()=>[W(kj,{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(Fk,{key:1,title:`內文`},{default:P(()=>[W(Sk,{source:r.value.body},null,8,[`source`])]),_:1})):K(``,!0),W(Xk,{self:r.value.id,links:r.value.links,mainline:``},null,8,[`self`,`links`]),r.value.refs?.length?(B(),H(Fk,{key:2,title:`參考來源`,count:r.value.refs.length},{default:P(()=>[W(tA,{refs:r.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),r.value.costs?.length?(B(),H(Fk,{key:3,title:`花費明細`,count:r.value.costs.length},{default:P(()=>[U(`table`,Vj,[f[1]||=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`,Hj,j(e.date),1),U(`td`,null,j(e.item),1),U(`td`,Uj,j(e.estimate??``),1),U(`td`,Wj,j(e.actual??``),1),U(`td`,Gj,j(e.note??``),1)]))),128))])])]),_:1},8,[`count`])):K(``,!0),l.value.length?(B(),H(Fk,{key:4,title:`相關的待辦`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(Bk,{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(Fk,{title:`推進過它的會話`,count:u.value.length},{default:P(()=>[(B(!0),V(z,null,L(u.value,({session:e,actions:t})=>(B(),H(Bk,{key:e.id,peek:N(QS)(e.id),title:N(wC)(e),status:e.status},{default:P(()=>[G(j(t.length)+` 個行動`,1)]),_:2},1032,[`peek`,`title`,`status`]))),128)),u.value.length===0?(B(),V(`p`,Kj,`這台電腦上沒有推進它的會話。會話只記在本機。`)):K(``,!0)]),_:1},8,[`count`])],64))}}),Jj={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`},Yj=[`value`],Xj=[`value`],Zj=I({__name:`StatusSelect`,props:{status:{},options:{}},emits:[`change`],setup(e,{emit:t}){let n=t;return(t,r)=>(B(),V(`label`,Jj,[W(Uw,{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(HC)[e]??e),9,Xj))),128))],40,Yj)]))}}),Qj={key:0,class:`pb-8`},$j={key:1,class:`px-5 text-muted-foreground`},eM=I({__name:`MainlinePeek`,props:{m:{}},setup(e){let t=e,{mainline:n}=mA(()=>t.m),r=e=>n.value&&yC(()=>dC.mainlineStatus(t.m,e,n.value.version)),i=e=>n.value&&yC(()=>dC.mainlineTitle(t.m,e,n.value.version)),a=()=>n.value&&yC(()=>dC.archive(t.m,!n.value.archivedAt,n.value.version));return(t,o)=>N(n)?(B(),V(`div`,Qj,[W(jk,{id:N(n).id,title:N(n).title,type:`mainline`,status:N(n).status,editable:``,onRename:i},{default:P(()=>[W(Zj,{status:N(n).status,options:N(LC),onChange:r},null,8,[`status`,`options`]),W(kw,{archived:!!N(n).archivedAt,onToggle:a},null,8,[`archived`]),W(N(JS),{variant:`ghost`,size:`xs`,class:`ml-auto text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(xm),{to:`/mainlines/${N(n).id}`},{default:P(()=>[W(N(Kd)),o[0]||=G(`開啟工作區`,-1)]),_:1},8,[`to`])]),_:1})]),_:1},8,[`id`,`title`,`status`]),W(qj,{mainline:N(n)},null,8,[`mainline`])])):(B(),V(`p`,$j,`載入 `+j(e.m)+`…`,1))}}),tM=[`datetime`,`title`],nM=I({__name:`RelativeTime`,props:{at:{}},setup(e){let t=e,n=Df({scheduler:e=>mf(e,6e4)}),r=new Intl.RelativeTimeFormat(`zh-TW`,{numeric:`auto`}),i=J(()=>new Date(t.at.length===10?`${t.at}T00:00`: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`):t.at.slice(0,10)});return(t,n)=>(B(),V(`time`,{datetime:e.at,title:e.at.replace(`T`,` `)},j(a.value),9,tM))}}),rM={key:0,class:`pb-8`},iM={key:0,class:`flex flex-col gap-1 text-sm`},aM={key:0},oM={key:0,class:`text-xs text-muted-foreground`},sM={key:1,class:`text-xs text-muted-foreground`},cM={class:`font-mono text-xs`},lM={class:`flex flex-col`},uM=[`aria-expanded`,`onClick`],dM={class:`mt-px shrink-0 font-mono text-xs text-muted-foreground`},fM={class:`min-w-0 flex-1`},pM={key:2,class:`shrink-0 text-xs text-muted-foreground tabular-nums`},mM={class:`flex flex-wrap gap-1 pb-1 pl-12`},hM={key:0,class:`pb-1 pl-12 text-xs text-muted-foreground`},gM={key:1,class:`mb-2 ml-12 flex flex-col gap-1.5 rounded-md border p-3 text-xs`},_M={key:0,class:`text-muted-foreground`},vM={key:1,class:`text-muted-foreground`},yM={key:2,class:`text-muted-foreground`},bM={class:`w-20 shrink-0 text-muted-foreground`},xM={key:0,class:`text-muted-foreground`},SM={key:1,class:`text-destructive`},CM={key:0,class:`text-sm text-muted-foreground`},wM={key:0,class:`text-sm text-muted-foreground`},TM={class:`w-20 text-muted-foreground`},EM={class:`tabular-nums`},DM={key:1,class:`px-5 text-muted-foreground`},OM=I({__name:`SessionPeek`,props:{id:{}},setup(e){let t=e,{open:n}=sC(),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=>pC(e).m))))_C(t).catch(e=>Q.error=e.message);i.value=await dC.trace(e.id).catch(()=>null)}},{immediate:!0});function c(e){let{m:t,t:n,item:r}=pC(e),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(UC).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&&yC(()=>dC.archiveSession(r.value.id,!r.value.archivedAt));return(t,c)=>r.value?(B(),V(`div`,rM,[W(jk,{title:N(wC)(r.value),type:`session`,status:r.value.status},{notice:P(()=>[r.value.description||r.value.summary?(B(),V(`div`,iM,[r.value.description?(B(),V(`p`,aM,[G(j(r.value.description),1),r.value.depth===void 0?K(``,!0):(B(),V(`span`,oM,` · 深度 `+j(r.value.depth),1))])):K(``,!0),r.value.summary?(B(),V(`p`,sM,j(r.value.summary),1)):K(``,!0)])):K(``,!0)]),default:P(()=>[W(Ww,{status:r.value.status},null,8,[`status`]),W(Ek,{text:r.value.id,label:r.value.id.slice(-8)},null,8,[`text`,`label`]),W(kw,{archived:!!r.value.archivedAt,onToggle:p},null,8,[`archived`])]),_:1},8,[`title`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[W($,{label:`ID`,icon:N(Sd)},{default:P(()=>[W(Ek,{text:r.value.id},null,8,[`text`])]),_:1},8,[`icon`]),W($,{label:`agent`,icon:N(Vu)},{default:P(()=>[W(N(Dw),{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(od)},{default:P(()=>[U(`span`,cM,j(i.value?.model??r.value.model),1)]),_:1},8,[`icon`])):K(``,!0),r.value.effort?(B(),H($,{key:1,label:`effort`,icon:N(vd)},{default:P(()=>[G(j(r.value.effort),1)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`開始`,icon:N(td)},{default:P(()=>[W(nM,{at:r.value.started,class:`text-xs`},null,8,[`at`])]),_:1},8,[`icon`]),r.value.branch?(B(),H($,{key:2,label:`分支`,icon:N(yd)},{default:P(()=>[W(Ek,{text:r.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),r.value.worktree?(B(),H($,{key:3,label:`worktree`,icon:N(hd)},{default:P(()=>[W(Ek,{text:r.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),W($,{label:`工作目錄`,icon:N(gd)},{default:P(()=>[W(Ek,{text:r.value.cwd},null,8,[`text`])]),_:1},8,[`icon`]),r.value.transcript?(B(),H($,{key:4,label:`對話紀錄`,icon:N(Ud)},{default:P(()=>[W(Ek,{text:r.value.transcript,class:`min-w-0`},null,8,[`text`]),W(N(JS),{variant:`ghost`,size:`icon-xs`,class:`text-muted-foreground`,title:`在 Finder 顯示`,"aria-label":`在 Finder 顯示`,onClick:c[0]||=e=>N(yC)(()=>N(dC).reveal(r.value.transcript))},{default:P(()=>[W(N(pd))]),_:1})]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(Fk,{title:`行動佇列`,count:r.value.actions.length},{default:P(()=>[U(`ul`,lM,[(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(qu),{key:0,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})):(B(),H(N(Yu),{key:1,class:`mt-0.5 size-3.5 shrink-0 text-muted-foreground`})),W(Uw,{status:e.status,class:`mt-0.5 shrink-0`},null,8,[`status`]),U(`span`,dM,j(e.id),1),U(`span`,fM,j(e.do),1),e.startedAt?(B(),V(`span`,pM,j(e.startedAt.slice(11))+j(e.doneAt?`–${e.doneAt.slice(11)}`:``),1)):K(``,!0)],8,uM),U(`div`,mM,[(B(!0),V(z,null,L(e.serves,e=>(B(),H(pA,q({key:e},{ref_for:!0},N(kC)(e.split(`#`)[0]),{id:e,onOpen:()=>N(n)(e.split(`#`)[0],{chain:!0})}),null,16,[`id`,`onOpen`]))),128))]),e.note?(B(),V(`p`,hM,j(e.note),1)):K(``,!0),a.value===e.id?(B(),V(`div`,gM,[i.value?.available?e.startedAt?f(e.id)===0?(B(),V(`p`,yM,`這段時間沒有用到 skill、agent,也沒有載入 rule 或用 Read 讀檔。用 Bash 讀的檔不會出現在這裡。`)):K(``,!0):(B(),V(`p`,vM,`這個行動沒有開始時間,追溯不到它的時間窗。`)):(B(),V(`p`,_M,`沒有對話紀錄,無法追溯。`)),(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`,bM,j(N(UC)[e.kind]),1),(B(!0),V(z,null,L(e.items,e=>(B(),H(N(Dw),{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`,xM,`×`+j(e.count),1)):K(``,!0),e.detail?.startsWith(`blocked`)?(B(),V(`span`,SM,`擋下`)):K(``,!0)]),_:2},1032,[`title`]))),128))]))),128))])):K(``,!0)]))),128))]),r.value.actions.length===0?(B(),V(`p`,CM,`這個會話沒有行動。`)):K(``,!0)]),_:1},8,[`count`]),W(Fk,{title:`委派與接手`,count:s.value.length},{default:P(()=>[(B(!0),V(z,null,L(s.value,e=>(B(),H(Bk,{key:e.label+e.id,peek:N(QS)(e.id),label:e.label,title:o(e.id)?N(wC)(o(e.id)):e.id,status:o(e.id)?.status},null,8,[`peek`,`label`,`title`,`status`]))),128)),s.value.length===0?(B(),V(`p`,wM,`沒有委派或交接關係。`)):K(``,!0)]),_:1},8,[`count`]),W(Fk,{title:`服務的 checklist 項目`,count:l.value.length},{default:P(()=>[(B(!0),V(z,null,L(l.value,e=>(B(),H(Bk,{key:e.ref,peek:e.task,id:e.ref,title:e.text},{default:P(()=>[W(N(Fw),{"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(Fk,{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`,TM,j(N(UC)[e.kind]),1),U(`span`,EM,j(e.items.length),1)]))),128))]),_:1},8,[`count`])):K(``,!0)])):(B(),V(`p`,DM,`這台電腦上沒有會話 `+j(e.id)+`。`,1))}}),kM={key:0,class:`pb-8`},AM={class:`truncate`},jM={key:0,class:`flex items-center gap-1.5`},MM={key:1},NM={key:2},PM={key:0,class:`text-xs`},FM={class:`text-xs`},IM={class:`text-xs`},LM={class:`text-xs`},RM={class:`shrink-0 font-mono`},zM={class:`truncate`},BM={key:0,class:`text-sm text-muted-foreground`},VM={key:1,class:`px-5 text-muted-foreground`},HM=I({__name:`TaskPeek`,props:{m:{},t:{}},setup(e){let t=e,{open:n}=sC(),{mainline:r}=mA(()=>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(()=>OC(t.m,t.t)),c=e=>n(e,{chain:!0}),l=J(()=>{let e=i.value?.blockedBy?.waitingFor,t=e?PC(e):void 0;return t&&t!==`session`&&!e.startsWith(`file:`)?e:void 0});Er(()=>jC([l.value]));let u=e=>e.slice((r.value?.dir.length??0)+1),d=e=>e.slice(e.lastIndexOf(`/`)+1),f=e=>i.value&&yC(()=>dC.taskStatus(t.m,t.t,e,i.value.version));return(n,p)=>i.value&&N(r)?(B(),V(`div`,kM,[W(jk,{id:`${e.m}/${i.value.id}`,title:i.value.title,type:N(NC)(i.value),status:i.value.status},{notice:P(()=>[i.value.blockedBy?(B(),H(N(qT),{key:0,variant:`warning`},{default:P(()=>[W(N(Qu)),W(N(YT),null,{default:P(()=>[G(`卡住:`+j(i.value.blockedBy.reason),1)]),_:1}),W(N(JT),{class:`text-xs text-muted-foreground`},{default:P(()=>[l.value?(B(),V(`p`,jM,[p[0]||=G(`等待 `,-1),W(pA,q(N(kC)(l.value),{onOpen:c}),null,16)])):i.value.blockedBy.waitingFor?(B(),V(`p`,MM,`等待 `+j(i.value.blockedBy.waitingFor),1)):K(``,!0),i.value.blockedBy.signal?(B(),V(`p`,NM,`看到「`+j(i.value.blockedBy.signal)+`」就可以繼續`,1)):K(``,!0)]),_:1})]),_:1})):K(``,!0)]),default:P(()=>[W(Zj,{status:i.value.status,options:N(RC),onChange:f},null,8,[`status`,`options`]),U(`span`,AM,j(N(r).title),1)]),_:1},8,[`id`,`title`,`type`,`status`]),W(Fk,null,{default:P(()=>[W(ZT,{columns:1},{default:P(()=>[W($,{label:`checklist`,icon:N(Od)},{default:P(()=>[W(Nj,{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(dd)},{default:P(()=>[W(rA,{priority:i.value.priority},null,8,[`priority`]),i.value.priority===`P2`?(B(),V(`span`,PM,`P2`)):K(``,!0)]),_:1},8,[`icon`])):K(``,!0),W($,{label:`種類`,icon:N(wd)},{default:P(()=>[G(j(i.value.kind===`branch`?`分支`:`階段`),1)]),_:1},8,[`icon`]),i.value.parent?(B(),H($,{key:1,label:`上層任務`,icon:N(ad)},{default:P(()=>[W(pA,q(N(kC)(N(XS)(e.m,i.value.parent)),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0),i.value.repo?(B(),H($,{key:2,label:`倉庫`,icon:N(fd)},{default:P(()=>[G(j(i.value.repo),1)]),_:1},8,[`icon`])):K(``,!0),i.value.branch?(B(),H($,{key:3,label:`分支`,icon:N(yd)},{default:P(()=>[W(Ek,{text:i.value.branch},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.base?(B(),H($,{key:4,label:`基底`,icon:N(bd)},{default:P(()=>[W(Ek,{text:i.value.base},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.worktree?(B(),H($,{key:5,label:`worktree`,icon:N(hd)},{default:P(()=>[W(Ek,{text:i.value.worktree},null,8,[`text`])]),_:1},8,[`icon`])):K(``,!0),i.value.merge?(B(),H($,{key:6,label:`合併狀態`,icon:N(xd)},{default:P(()=>[G(j(N(KC)[i.value.merge]),1)]),_:1},8,[`icon`])):K(``,!0),i.value.category?(B(),H($,{key:7,label:`分類`,icon:N(Jd)},{default:P(()=>[G(j(i.value.category),1)]),_:1},8,[`icon`])):K(``,!0),i.value.labels?.length?(B(),H($,{key:8,label:`標籤`,icon:N(Yd)},{default:P(()=>[(B(!0),V(z,null,L(i.value.labels,e=>(B(),H(N(Dw),{key:e,variant:`secondary`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128))]),_:1},8,[`icon`])):K(``,!0),W($,{label:`建立`,icon:N(Wu)},{default:P(()=>[U(`span`,FM,j(i.value.created),1)]),_:1},8,[`icon`]),i.value.startedAt?(B(),H($,{key:9,label:`開始`,icon:N(Rd)},{default:P(()=>[U(`span`,IM,j(i.value.startedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.closedAt?(B(),H($,{key:10,label:`結束`,icon:N(Hu)},{default:P(()=>[U(`span`,LM,j(i.value.closedAt),1)]),_:1},8,[`icon`])):K(``,!0),i.value.resolution?(B(),H($,{key:11,label:`結果`,icon:N(Zu)},{default:P(()=>[G(j(i.value.resolution),1)]),_:1},8,[`icon`])):K(``,!0),i.value.origin?(B(),H($,{key:12,label:`來源`,icon:N(id)},{default:P(()=>[W(pA,q(N(kC)(i.value.origin),{onOpen:c}),null,16)]),_:1},8,[`icon`])):K(``,!0)]),_:1})]),_:1}),W(Fk,{title:`checklist`,count:i.value.checklist.length},{default:P(()=>[W(kj,{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(Fk,{key:0,title:`內文`},{default:P(()=>[W(Sk,{source:i.value.body},null,8,[`source`])]),_:1})):K(``,!0),i.value.artifacts.length?(B(),H(Fk,{key:1,title:`產物`,count:i.value.artifacts.length},{default:P(()=>[(B(!0),V(z,null,L(i.value.artifacts,t=>(B(),H(Bk,{key:t,peek:N($S)(e.m,u(t)),title:d(t)},null,8,[`peek`,`title`]))),128))]),_:1},8,[`count`])):K(``,!0),a.value.length?(B(),H(Fk,{key:2,title:`子任務`,count:a.value.length},{default:P(()=>[(B(!0),V(z,null,L(a.value,t=>(B(),H(Bk,{key:t.id,peek:N(XS)(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(Xk,{self:N(XS)(t.m,t.t),links:i.value.links},null,8,[`self`,`links`]),i.value.refs?.length?(B(),H(Fk,{key:3,title:`參考來源`,count:i.value.refs.length},{default:P(()=>[W(tA,{refs:i.value.refs},null,8,[`refs`])]),_:1},8,[`count`])):K(``,!0),W(Fk,{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(Bk,{peek:N(QS)(e.id),title:N(wC)(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(Uw,{status:e.status,class:`shrink-0`},null,8,[`status`]),U(`span`,RM,j(e.id),1),U(`span`,zM,j(e.do),1)]))),128))],64))),128)),s.value.length===0?(B(),V(`p`,BM,`這台電腦上沒有服務這個任務的行動。`)):K(``,!0)]),_:1},8,[`count`])])):(B(),V(`p`,VM,`載入 `+j(e.m)+`/`+j(e.t)+`…`,1))}}),UM={class:`flex h-11 shrink-0 items-center gap-1 px-2`},WM={key:0,class:`truncate text-xs text-muted-foreground`},GM={key:1,class:`ml-2 text-xs text-status-done`,role:`status`},KM={class:`min-h-0 flex-1 overflow-auto`},qM=`mainflow.panelWidth`,JM=360,YM=1200,XM=nw(I({__name:`PeekPanel`,setup(e){let{current:t,trail:n,full:r,back:i,close:a,toggleFull:o}=sC(),s=Number(uw(qM,880)),c=M(s>=JM&&s<=YM?s:880);function l(e){let t=e.clientX,n=c.value,r=e=>c.value=Math.min(YM,Math.max(JM,n+t-e.clientX)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),dw(qM,c.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}let u=J(()=>{let e=nC(n.value.at(-1));return e?e.kind===`session`?`會話`:e.kind===`file`?e.path.split(`/`).at(-1):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`,UM,[W(N(JS),{variant:`ghost`,size:`icon-sm`,disabled:!N(n).length,"aria-label":`上一步`,title:`上一步`,onClick:N(i)},{default:P(()=>[W(N(Ju))]),_:1},8,[`disabled`,`onClick`]),u.value?(B(),V(`span`,WM,`回到 `+j(u.value),1)):K(``,!0),N(rC)?(B(),V(`span`,GM,j(N(rC)),1)):K(``,!0),s[0]||=U(`span`,{class:`ml-auto`},null,-1),W(N(JS),{variant:`ghost`,size:`icon-sm`,"aria-label":N(r)?`回到並排`:`開成整頁`,title:N(r)?`回到並排`:`開成整頁`,onClick:N(o)},{default:P(()=>[N(r)?(B(),H(N(Pd),{key:0})):(B(),H(N(Md),{key:1}))]),_:1},8,[`aria-label`,`title`,`onClick`]),W(N(JS),{variant:`ghost`,size:`icon-sm`,"aria-label":`關閉(Esc)`,title:`關閉(Esc)`,onClick:N(a)},{default:P(()=>[W(N(ef))]),_:1},8,[`onClick`])]),U(`div`,KM,[N(t).kind===`task`?(B(),H(HM,{key:N(t).ref,m:N(t).m,t:N(t).t},null,8,[`m`,`t`])):N(t).kind===`decision`?(B(),H(wA,{key:N(t).ref,m:N(t).m,d:N(t).d},null,8,[`m`,`d`])):N(t).kind===`file`?(B(),H(qA,{key:N(t).ref,m:N(t).m,path:N(t).path},null,8,[`m`,`path`])):N(t).kind===`session`?(B(),H(OM,{key:N(t).ref,id:N(t).id},null,8,[`id`])):N(t).kind===`mainline`?(B(),H(eM,{key:N(t).ref,m:N(t).m},null,8,[`m`])):N(t).kind===`issue`?(B(),H(oj,{key:N(t).ref,id:N(t).id},null,8,[`id`])):(B(),H($A,{key:N(t).ref,id:N(t).id},null,8,[`id`]))])],6)):K(``,!0)}}),[[`__scopeId`,`data-v-36a42a88`]]),ZM={class:`flex h-full min-h-0 flex-col`},QM={class:`relative flex min-h-0 flex-1`},$M={class:`@container min-w-0 flex-1 overflow-auto`,"data-peek-list":``},eN=I({__name:`PageLayout`,setup(e){let{current:t,full:n}=sC();return(e,r)=>(B(),V(`div`,ZM,[R(e.$slots,`header`),U(`div`,QM,[yr(U(`div`,$M,[R(e.$slots,`default`)],512),[[Vc,!(N(t)&&N(n))]]),W(XM)])]))}}),tN=[`P0`,`P1`,`P2`,`P3`].map(e=>({value:e,label:e})),nN=e=>e??`P2`,rN=e=>e.map(e=>({value:e,label:HC[e]??e,status:e})),iN=e=>VC.has(e);function aN(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 oN=e=>({doing:e.filter(e=>e.status===`doing`).length,open:e.filter(e=>!iN(e.status)).length}),sN=e=>({key:`status`,label:`狀態`,value:e=>e.status,order:e,groupLabel:e=>HC[e]??e,status:e=>e}),cN=(e,t)=>e.values?.(t)??[e.value(t)];function lN(e,t){let n=new Map;for(let r of t)for(let t of cN(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),items:n.get(t)}))}var uN=`f.`,dN=e=>(Array.isArray(e)?e[0]:e)??void 0,fN=(e,t=``)=>{if(!e.startsWith(t))return!1;let n=e.slice(t.length);return n===`q`||n===`sort`||n===`archived`||n.startsWith(uN)},pN=e=>uw(e,{}),mN=(e,t)=>dw(e,{...pN(e),...t});function hN(e,t){let n=Kf(),r=Gf(),i=`mainflow.list.${e.key}`,a=e.queryPrefix??``,o=pN(i),s=e=>Object.fromEntries(Object.entries(e).filter(([e])=>fN(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}?${dN(n.query.view)??``}`,f=d();F(()=>s(n.query),(e,t)=>{d()!==f||u&&t===void 0||mN(i,{query:e})},{deep:!0,immediate:!0});let p=J({get:()=>dN(n.query[`${a}q`])??``,set:e=>c({[`${a}q`]:e.trim()?e:void 0})}),m=J(()=>{let t=dN(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,(dN(n.query[`${a}${uN}${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}${uN}${e}`]:r.join(`,`)||void 0})}let b=e=>c({[`${a}${uN}${e}`]:void 0}),x=()=>c({[`${a}q`]:void 0,[`${a}archived`]:void 0,...Object.fromEntries(e.filters.map(e=>[`${a}${uN}${e.key}`,void 0]))}),S=J(()=>{let e=dN(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,mN(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=aN(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?lN(t,te.value).map(({key:e,label:n,status:i,items:a})=>{let o=t.leader?.(e);return{key:e,label:n,status:i,leader:o,...r(a.filter(e=>e!==o))}}):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),mN(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`)}}function gN(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 yC(async()=>{let n=await dC.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 _N={key:0,class:`shrink-0 text-xs text-muted-foreground`},vN=[`title`],yN=I({__name:`FindingList`,setup(e){let t=[`valid`,`obsolete`],n=hN({key:`findings`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:rN(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:[sN(t),{key:`category`,label:`分類`,value:e=>e.category??`未分類`}],defaultSort:`created`,defaultGroup:`status`,ended:e=>iN(e.status),archived:e=>!!e.archivedAt},()=>Q.findings),r=gN(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=>yC(()=>dC.archiveFinding(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`發現`,description:`踩過的坑與經驗。下一個任務動手前先看這裡。`}),W(NT,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(HT,{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(Dw),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,_N,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),applies:P(({item:e})=>[U(`span`,{title:e.appliesTo?.join(`
79
79
  `)},j(e.appliesTo?.join(`、`)),9,vN)]),review:P(({item:e})=>[W(Pw,{day:e.reviewAfter,ended:e.status===`obsolete`},null,8,[`day`,`ended`])]),actions:P(({item:e})=>[W(kw,{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(zT,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),bN=e=>(e.plannedIn??e.origin??``).match(/^m\d{3}/)?.[0]??``,xN=e=>e?`${e} ${Q.summary?.mainlines.find(t=>t.id===e)?.title??``}`.trim():`不屬於主脈絡`,SN=`未分類`,CN=`沒有標籤`,wN=e=>e.labels?.length?e.labels:[CN],TN=e=>[{key:`status`,label:`狀態`,values:e=>[e.status],options:rN(e)},{key:`priority`,label:`優先度`,values:e=>[nN(e.priority)],options:tN},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels??[]},{key:`mainline`,label:`來源主脈絡`,values:e=>[bN(e)].filter(Boolean),optionLabel:xN}],EN=e=>[sN(e),{key:`category`,label:`分類`,value:e=>e.category??SN,trailing:[SN]},{key:`label`,label:`標籤`,value:e=>wN(e)[0],values:wN,trailing:[CN]},{key:`priority`,label:`優先度`,value:e=>nN(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`mainline`,label:`主脈絡`,value:bN,groupLabel:xN,trailing:[``]}],DN={key:0,class:`shrink-0 text-xs text-muted-foreground`},ON=I({__name:`IssueList`,setup(e){let t=[`open`,`planned`,`closed`],n=hN({key:`issues`,id:e=>e.id,text:e=>e.title,filters:TN(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=>nN(e.priority),dir:`asc`},{key:`due`,label:`到期`,value:e=>e.due,dir:`asc`},{key:`created`,label:`建立`,value:e=>e.created,dir:`desc`}],groups:EN(t),defaultSort:`order`,defaultGroup:`status`,ended:e=>iN(e.status),archived:e=>!!e.archivedAt},()=>Q.issues),r=gN(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}=sC();Er(()=>jC(Q.issues.flatMap(e=>[e.plannedIn,e.origin])));let o=e=>yC(()=>dC.archiveIssue(e.id,!e.archivedAt,e.version));return(e,t)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`待辦事項`,description:`跨主脈絡的後續事項。主脈絡結束或封存後仍留在這裡。`}),W(NT,{view:N(n)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(n),selection:N(r),columns:i,"item-ref":e=>e.id},{name:P(({item:e})=>[W(HT,{status:e.status,id:e.id,title:e.title,muted:!!e.archivedAt},{default:P(()=>[e.archivedAt?(B(),V(`span`,DN,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(rA,{priority:e.priority},null,8,[`priority`])]),due:P(({item:e})=>[W(Pw,{day:e.due,ended:e.status===`closed`},null,8,[`day`,`ended`])]),planned:P(({item:e})=>[e.plannedIn?(B(),H(pA,q({key:0},N(kC)(e.plannedIn),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),origin:P(({item:e})=>[e.origin?(B(),H(pA,q({key:0},N(kC)(e.origin),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),actions:P(({item:e})=>[W(kw,{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(zT,{selection:N(r)},null,8,[`selection`])]),_:1}))}}),kN=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=Yh(pf(n,`class`),r);return(e,t)=>(B(),H(N(gx),q({"data-slot":`tabs`},N(i),{class:N(qS)(`flex flex-col gap-2`,n.class)}),{default:P(t=>[R(e.$slots,`default`,A(Cs(t)))]),_:3},16,[`class`]))}}),AN=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=pf(t,`class`,`variant`);return(r,i)=>(B(),H(N(yx),q({"data-slot":`tabs-list`,"data-variant":e.variant},N(n),{class:N(qS)(`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`]))}}),jN=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=Jh(pf(t,`class`));return(e,r)=>(B(),H(N(bx),q({"data-slot":`tabs-trigger`,class:N(qS)(`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`]))}}),MN={class:`w-full text-body`},NN={colspan:`3`,class:`sticky top-9 z-[5] bg-background px-6 pt-4 pb-1`},PN={class:`flex items-center gap-2 text-sm`},FN={key:0,class:`grid size-4 shrink-0 place-items-center rounded-[4px] border border-dashed text-[10px] text-muted-foreground`,"aria-label":`已不需要`},IN={class:`font-mono text-xs text-muted-foreground`},LN=[`title`],RN={key:1,class:`font-medium text-muted-foreground`},zN={class:`flex min-w-0 items-center gap-2`},BN={class:`shrink-0 font-mono text-xs text-muted-foreground`},VN=[`title`],HN={class:`flex min-w-0 items-center gap-2 text-xs`},UN={class:`truncate`},WN={key:0},GN={colspan:`3`,class:`px-6 pb-2 text-xs text-muted-foreground`},KN={key:1},qN={key:0,class:`px-6 py-16 text-center text-sm text-muted-foreground`},JN=I({__name:`CriteriaView`,props:{mainline:{}},setup(e){let t=e,{open:n,current:r}=sC(),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`,MN,[W(N(Bw),{class:`sticky top-0 z-10 bg-background [&_tr]:border-b`},{default:P(()=>[W(N(Rw),{class:`hover:bg-transparent`},{default:P(()=>[W(N(zw),{class:`pl-6`},{default:P(()=>[...r[0]||=[G(`checklist 項目`,-1)]]),_:1}),W(N(zw),{class:`w-72`},{default:P(()=>[...r[1]||=[G(`任務`,-1)]]),_:1}),W(N(zw),{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(Iw),{key:t.key,class:`[&_tr:last-child]:border-b`},{default:P(()=>[U(`tr`,null,[U(`td`,NN,[U(`div`,PN,[t.criterion?(B(),V(z,{key:0},[t.criterion.dropped?(B(),V(`span`,FN,`–`)):(B(),H(N(Fw),{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`,IN,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,LN),t.criterion.dropped?K(``,!0):(B(),H(Nj,{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`,RN,`沒有推進任何解決條件`))])])]),(B(!0),V(z,null,L(t.rows,t=>(B(),H(N(Rw),{key:`${t.task.id}#${t.item.id}`,class:`h-9 transition-colors duration-[120ms]`,"data-peek":N(XS)(e.mainline.id,t.task.id),"aria-current":o(N(XS)(e.mainline.id,t.task.id)),onClick:r=>N(n)(N(XS)(e.mainline.id,t.task.id))},{default:P(()=>[W(N(Lw),{class:`max-w-0 pl-6`},{default:P(()=>[U(`span`,zN,[U(`span`,BN,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,VN)])]),_:2},1024),W(N(Lw),{class:`max-w-72`},{default:P(()=>[U(`span`,HN,[W(YC,{type:N(NC)(t.task),status:t.task.status},null,8,[`type`,`status`]),U(`span`,UN,j(t.task.title),1)])]),_:2},1024),W(N(Lw),{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`,WN,[U(`td`,GN,[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`,KN,[...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`,qN,`這條主脈絡還沒有解決條件。`)):K(``,!0)],64))}}),YN={key:0,class:`shrink-0 text-xs text-muted-foreground`},XN=[`title`],ZN=I({__name:`DecisionTable`,props:{mainline:{}},setup(e){let t=e,n=[`proposed`,`accepted`,`superseded`],r=hN({key:`decisions`,id:e=>e.id,text:e=>e.title,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:rN(n)},{key:`by`,label:`決策者`,values:e=>e.by?[e.by]:[],optionLabel:e=>WC[e]??e},{key:`basis`,label:`裁決方式`,values:e=>e.basis?[e.basis]:[],optionLabel:e=>GC[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=>e.created,dir:`desc`},{key:`decided`,label:`裁決時間`,value:e=>e.decidedAt,dir:`desc`}],groups:[sN(n)],defaultSort:`created`,defaultGroup:`status`,ended:e=>iN(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(NT,{view:N(r)},null,8,[`view`]),W(lT,{view:N(r),columns:i,"item-ref":t=>N(ZS)(e.mainline.id,t.id)},{name:P(({item:e})=>[W(HT,{status:e.status,id:e.id,title:e.title,muted:e.status===`superseded`},{default:P(()=>[e.supersededBy?(B(),V(`span`,YN,`由 `+j(e.supersededBy)+` 取代`,1)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),by:P(({item:e})=>[G(j(e.by?N(WC)[e.by]:``),1)]),basis:P(({item:e})=>[G(j(e.basis?N(GC)[e.basis]:``),1)]),decided:P(({item:e})=>[G(j(e.decidedAt?.replace(`T`,` `)),1)]),affects:P(({item:e})=>[U(`span`,{title:e.affects?.join(`
80
80
  `)},j(e.affects?.join(`、`)),9,XN)]),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))}}),QN={class:`flex min-w-0 items-center gap-2`},$N=[`href`,`title`],eP=[`title`],tP=[`title`],nP=`-`,rP=I({__name:`FilesView`,props:{mainline:{}},setup(e){let t=e,n=J(()=>VA(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===nP||!e?`主脈絡本身`:e},i=hN({key:`files`,id:e=>e.key,text:e=>`${e.name} ${e.path??``}`,filters:[{key:`kind`,label:`類型`,values:e=>[e.kind],options:RA.map(e=>({value:e,label:e}))},{key:`source`,label:`來源`,values:e=>[e.source??nP],optionLabel:r},{key:`ext`,label:`副檔名`,values:e=>e.ext?[e.ext]:[],optionLabel:e=>`.${e}`}],sorts:[{key:`kind`,label:`類型`,value:e=>RA.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:RA},{key:`source`,label:`來源`,value:e=>e.source??nP,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?$S(t.mainline.id,e.inMainline):void 0;return(e,t)=>(B(),V(z,null,[W(NT,{view:N(i)},null,8,[`view`]),W(lT,{view:N(i),columns:a,"item-ref":o},{name:P(({item:e})=>[U(`span`,QN,[W(YC,{type:N(IC)(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,$N)):(B(),V(`span`,{key:1,class:k([`truncate`,{"font-mono text-xs":e.inMainline}]),title:e.inMainline??e.path},j(e.name),11,eP)),e.path?(B(),H(Ek,{key:2,text:e.path,class:`min-w-0`},null,8,[`text`])):K(``,!0)])]),kind:P(({item:e})=>[G(j(e.kind),1)]),source:P(({item:e})=>[U(`span`,{title:r(e.source??``)},j(e.source?r(e.source):``),9,tP)]),updated:P(({item:e})=>[e.updated?(B(),H(nM,{key:0,at:e.updated},null,8,[`at`])):K(``,!0)]),empty:P(()=>[...t[1]||=[G(`這條主脈絡還沒有檔案。`,-1)]]),_:1},8,[`view`])],64))}}),iP=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(qS)(`bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm`,t.class))},[R(e.$slots,`default`)],2))}}),aP={class:`inline-flex gap-1.5 font-mono text-xs`},oP=[`title`],sP=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`,aP,[(B(!0),V(z,null,L(e.deps,e=>(B(),V(`span`,{key:e.to,class:k(N(qC)[e.state].tone),title:`${e.to} ${N(qC)[e.state].label}`},j(n(e.to)),11,oP))),128))]))}}),cP={class:`flex items-center rounded-md border p-0.5`,role:`group`,"aria-label":`任務排列`},lP={key:0,class:`flex min-h-0 gap-3 overflow-x-auto px-6 pt-2 pb-6`},uP=[`aria-label`],dP={class:`flex items-center gap-2 py-1`},fP={class:`text-xs text-muted-foreground tabular-nums`},pP={class:`flex items-center gap-2 text-xs`},mP={class:`font-mono text-muted-foreground`},hP={class:`line-clamp-2 [overflow-wrap:anywhere]`},gP={class:`flex items-center justify-between gap-2`},_P={key:0,class:`min-w-0 truncate text-xs text-muted-foreground`},vP={key:0,class:`py-2 text-xs text-muted-foreground`},yP=[`title`],bP=`mainflow.list.tasks.mode`,xP=I({__name:`TaskViews`,props:{mainline:{}},setup(e){let t=e,n=[{key:`table`,label:`表格`,icon:Vd},{key:`board`,label:`看板`,icon:nd},{key:`tree`,label:`樹狀`,icon:jd}],r=uw(bP,`table`),i=M(n.some(e=>e.key===r)?r:`table`);function a(e){i.value=e,dw(bP,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:rN(RC)},{key:`priority`,label:`優先度`,values:e=>[nN(e.priority)],options:tN},{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=hN({...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=>RC.indexOf(e.status),dir:`asc`},{key:`priority`,label:`優先度`,value:e=>nN(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)},sN(RC),{key:`repo`,label:`倉庫`,value:e=>e.repo??`沒有指定倉庫`}],defaultSort:`order`,defaultGroup:`status`,ended:e=>iN(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=hN({...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(()=>RC.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}=sC(),y=e=>XS(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(NT,{view:i.value===`tree`?N(m):N(d),grouping:i.value===`table`},{views:P(()=>[U(`div`,cP,[(B(),V(z,null,L(n,e=>W(N(JS),{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`,lP,[(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(HC)[e.status]},[U(`div`,dP,[W(Ww,{status:e.status},null,8,[`status`]),U(`span`,fP,j(e.tasks.length),1)]),(B(!0),V(z,null,L(e.tasks,e=>(B(),H(N(iP),{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`,pP,[W(YC,{type:N(NC)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,mP,j(e.id),1),W(rA,{priority:e.priority},null,8,[`priority`])]),U(`p`,hP,j(e.title),1),U(`div`,gP,[W(Nj,{done:l(e),total:e.checklist.length},null,8,[`done`,`total`]),e.repo?(B(),V(`span`,_P,j(e.repo),1)):K(``,!0)])]),_:2},1032,[`class`,`data-peek`,`aria-current`,`onClick`]))),128)),e.tasks.length===0?(B(),V(`p`,vP,`沒有任務`)):K(``,!0)],8,uP))),128))])):(B(),H(lT,{key:1,view:i.value===`tree`?N(m):N(d),columns:g,"item-ref":y,"item-type":N(NC)},{name:P(({item:e,depth:t})=>[W(HT,{status:e.status,id:e.id,title:e.title,depth:t,type:N(NC)(e)},null,8,[`status`,`id`,`title`,`depth`,`type`])]),priority:P(({item:e})=>[W(rA,{priority:e.priority},null,8,[`priority`])]),progress:P(({item:e})=>[W(Nj,{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(sP,{deps:b(t),within:e.mainline.id},null,8,[`deps`,`within`])]),branch:P(({item:e})=>[U(`span`,{title:e.branch},j(e.branch),9,yP)]),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))}}),SP={class:`px-6 pt-6 pb-3`},CP={class:`mt-1 text-title font-semibold`},wP={class:`mt-3 flex flex-wrap items-center gap-3 text-xs text-muted-foreground`},TP={key:0},EP={key:0,class:`text-xs text-muted-foreground tabular-nums`},DP={key:0,class:`max-w-5xl px-1 pt-2 pb-10`},OP={key:1,class:`px-6 py-16 text-center text-muted-foreground`},kP=`mainflow.mainlineView`,AP=I({__name:`MainlineDetail`,setup(e){let t=Kf(),n=Gf(),{id:r,mainline:i}=mA(),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:VA(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=uw(kP,{});typeof r==`string`?dw(kP,{...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&&yC(()=>dC.mainlineStatus(r.value,e,i.value.version)),u=e=>i.value&&yC(()=>dC.mainlineTitle(r.value,e,i.value.version)),d=()=>i.value&&yC(()=>dC.archive(r.value,!i.value.archivedAt,i.value.version));return(e,t)=>N(i)?(B(),H(eN,{key:0},{header:P(()=>[U(`header`,SP,[W(Ek,{text:N(i).id},null,8,[`text`]),U(`h1`,CP,[W(Dk,{value:N(i).title,onSave:u},null,8,[`value`])]),U(`div`,wP,[W(Zj,{status:N(i).status,options:N(LC),onChange:l},null,8,[`status`,`options`]),W(rA,{priority:N(i).priority},null,8,[`priority`]),N(i).archivedAt?(B(),V(`span`,TP,`已封存 `+j(N(i).archivedAt),1)):K(``,!0),W(kw,{class:`ml-auto`,archived:!!N(i).archivedAt,onToggle:d},null,8,[`archived`])])]),W(N(kN),{"model-value":o.value,"onUpdate:modelValue":c},{default:P(()=>[W(N(AN),{variant:`line`,class:`h-9 w-full justify-start border-b px-6`},{default:P(()=>[(B(),V(z,null,L(a,e=>W(N(jN),{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`,EP,j(s(e.key)),1))]),_:2},1032,[`value`])),64))]),_:1})]),_:1},8,[`model-value`])]),default:P(()=>[o.value===`overview`?(B(),V(`div`,DP,[W(qj,{mainline:N(i),columns:2},null,8,[`mainline`])])):o.value===`tasks`?(B(),H(xP,{key:1,mainline:N(i)},null,8,[`mainline`])):o.value===`criteria`?(B(),H(JN,{key:2,mainline:N(i)},null,8,[`mainline`])):o.value===`decisions`?(B(),H(ZN,{key:3,mainline:N(i)},null,8,[`mainline`])):(B(),H(rP,{key:4,mainline:N(i)},null,8,[`mainline`]))]),_:1})):(B(),V(`p`,OP,`載入 `+j(N(r))+`…`,1))}}),jP={key:0,class:`shrink-0 text-xs text-muted-foreground`},MP=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:rN(LC)},{key:`priority`,label:`優先度`,values:e=>[nN(e.priority)],options:tN},{key:`category`,label:`分類`,values:e=>e.category?[e.category]:[]},{key:`label`,label:`標籤`,values:e=>e.labels}],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=>nN(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:[sN(LC),{key:`priority`,label:`優先度`,value:e=>nN(e.priority),order:[`P0`,`P1`,`P2`,`P3`]},{key:`category`,label:`分類`,value:e=>e.category??`未分類`}],defaultSort:`updated`,defaultGroup:`status`,ended:e=>iN(e.status),archived:e=>!!e.archivedAt},n=e=>Q.relations.mainlineDeps.filter(t=>t.from===e.id),r=hN(t,()=>Q.summary?.mainlines??[]),i=gN(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=>yC(()=>dC.archive(e.id,!e.archivedAt));return(e,t)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`主脈絡`,description:`一條主脈絡是一件要做完的事:意圖、解決條件,以及推進它的任務與決策。`}),W(NT,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(r),selection:N(i),columns:a,"item-ref":e=>e.id},{name:P(({item:e})=>[W(HT,{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(Dw),{key:e,variant:`secondary`,class:`shrink-0`},{default:P(()=>[G(j(e),1)]),_:2},1024))),128)),e.archivedAt?(B(),V(`span`,jP,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`id`,`title`,`muted`])]),priority:P(({item:e})=>[W(rA,{priority:e.priority},null,8,[`priority`])]),criteria:P(({item:e})=>[W(Nj,{done:e.criteria.done,total:e.criteria.total},null,8,[`done`,`total`])]),deps:P(({item:e})=>[W(sP,{deps:n(e)},null,8,[`deps`])]),due:P(({item:e})=>[W(Pw,{day:e.due,ended:N(iN)(e.status)},null,8,[`day`,`ended`])]),updated:P(({item:e})=>[W(nM,{at:e.updated},null,8,[`at`])]),actions:P(({item:e})=>[W(N(JS),{variant:`ghost`,size:`xs`,class:`text-muted-foreground`,"as-child":``},{default:P(()=>[W(N(xm),{to:`/mainlines/${e.id}`,onClick:t[0]||=au(()=>{},[`stop`])},{default:P(()=>[W(N(Kd)),t[1]||=G(`開啟`,-1)]),_:1},8,[`to`])]),_:2},1024),W(kw,{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(zT,{selection:N(i)},null,8,[`selection`])]),_:1}))}}),NP=[`title`],PP=[`title`],FP=[`title`],IP=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=hN({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=>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=>e.at.slice(0,7),latestFirst:!0},{key:`day`,label:`日期`,value:e=>e.at.slice(0,10),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}=sC();return Er(()=>jC(Q.ops.map(e=>e.ref))),(e,n)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`操作紀錄`,description:`對外部系統執行過的操作,只追加不改寫。`}),W(NT,{view:N(r)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(r),columns:i},{operation:P(({item:e})=>[U(`span`,{class:`block truncate`,title:e.operation},j(e.operation),9,NP)]),target:P(({item:e})=>[U(`span`,{title:e.target},j(e.target),9,PP)]),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(Xu),{key:0,class:`mr-1 inline size-3.5 align-[-2px] text-destructive`})),G(j(e.result),1)],10,FP)]),ref:P(({item:e})=>[e.ref?(B(),H(pA,q({key:0},N(kC)(e.ref),{onOpen:N(a)}),null,16,[`onOpen`])):K(``,!0)]),at:P(({item:e})=>[G(j(e.at.slice(5).replace(`T`,` `)),1)]),empty:P(()=>[...n[0]||=[G(`還沒有紀錄。用 `,-1),U(`code`,null,`mainflow ops add --target <系統> --op <操作> --result <結果>`,-1),G(` 記錄 push、發布、合併這類對外操作。`,-1)]]),_:1},8,[`view`])]),_:1}))}}),LP={key:0,class:`overflow-x-auto px-6 pb-2`},RP=[`aria-colcount`],zP=[`title`],BP={class:`text-xs text-muted-foreground tabular-nums`},VP={key:0,class:`col-span-full flex min-w-0 items-center gap-2 pt-4 pb-2 text-sm`,role:`rowheader`},HP=[`aria-label`,`aria-expanded`,`onClick`],UP={key:1,class:`truncate font-medium`},WP={class:`text-xs text-muted-foreground tabular-nums`},GP={key:1,class:`px-6 py-16 text-center text-sm text-muted-foreground`},KP=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(()=>lN(n.value,t.view.sorted.value)),i=J(()=>t.view.group.value!==``),a=(e,t)=>e.filter(e=>cN(n.value,e).includes(t)),o=e=>[...e.items,...e.ended];return(t,n)=>e.view.groups.value.length?(B(),V(`div`,LP,[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(Ww,{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,zP)),U(`span`,BP,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`,VP,[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(Yu),{key:1,class:`size-4 text-muted-foreground`})):(B(),H(N(qu),{key:0,class:`size-4 text-muted-foreground`}))],8,HP),n.status?(B(),H(Ww,{key:0,status:n.status},null,8,[`status`])):(B(),V(`span`,UP,j(n.label),1)),U(`span`,WP,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,RP)])):(B(),V(`div`,GP,[e.view.total.value>0?(B(),V(z,{key:0},[n[1]||=G(` 沒有符合條件的項目。`,-1),W(N(JS),{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)]))}}),qP=.01,JP=e=>Math.min(2,Math.max(qP,e));function YP(e,t,n,r){let i=JP(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 XP(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=JP(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 ZP(e){if(e.deltaMode!==0)return!0;let t=e.wheelDeltaY;return typeof t==`number`&&t!==0&&t%120==0&&e.deltaX===0}function QP(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))}}var $P=[`data-node`,`aria-pressed`,`title`],eF={class:`flex min-w-0 items-center gap-2`},tF={class:`truncate`},nF={class:`shrink-0 font-mono text-xs text-muted-foreground`},rF=[`title`],iF={class:`h-1 w-12 overflow-hidden rounded-full bg-muted`},aF={class:`flex min-w-0 items-center gap-2`},oF=[`title`],sF=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??kC(t.id).title??``),i=J(()=>n.value?.status??kC(t.id).status),a=J(()=>n.value?.criteria),o=J(()=>iN(i.value??``)),s=J(()=>eC(t.id)),c=J(()=>{let e=Q.mainlines[t.id]?.tasks;return e?oN(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`,eF,[W(YC,{type:`mainline`,status:i.value},null,8,[`status`]),s.value?(B(),H(N(Dw),{key:0,variant:`outline`,class:`min-w-0 shrink font-mono text-[11px] text-muted-foreground`},{default:P(()=>[U(`span`,tF,j(s.value.hub),1)]),_:1})):K(``,!0),U(`span`,nF,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:`解決條件 ${a.value.done}/${a.value.total}`},[U(`span`,iF,[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,rF)):K(``,!0)]),U(`span`,aF,[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(YC,{type:`phase`,status:c.value.doing?`doing`:void 0},null,8,[`status`]),G(j(c.value.doing)+`/`+j(c.value.open),1)],10,oF)):K(``,!0)])],10,$P))}}),cF=[`data-serves`,`data-session`,`aria-pressed`],lF={"data-session-icon":``,class:`relative row-span-2 grid size-6 place-items-center rounded-md bg-muted text-foreground`},uF={class:`truncate font-medium`},dF={class:`truncate leading-4 text-muted-foreground`},fF=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=MC.session.icon;return(t,i)=>(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:i[0]||=e=>t.$emit(`pick`,e)},[U(`span`,lF,[(B(),H(fa(N(r)),{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`,uF,j(N(wC)(e.session)),1),U(`span`,dF,j(n.value?.do??`沒有待做的行動`),1)],10,cF))}}),pF={class:`rounded-xl border bg-card text-body shadow-xs`},mF={class:`flex h-10 items-center gap-2 px-4`},hF={class:`font-mono text-xs text-muted-foreground`},gF={class:`flex flex-col gap-4 px-4 pb-4`},_F={class:`text-base font-semibold [overflow-wrap:anywhere]`},vF={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},yF={class:`flex flex-col gap-0.5`},bF=[`onClick`],xF={class:`shrink-0 font-mono text-muted-foreground`},SF={class:`truncate`},CF={class:`ml-auto shrink-0 text-muted-foreground`},wF={key:0,class:`px-1.5 text-xs text-muted-foreground`},TF={class:`flex flex-col gap-0.5`},EF={key:0,class:`px-1.5 text-xs text-muted-foreground`},DF={class:`flex h-10 items-center gap-2 px-4`},OF={class:`flex flex-col gap-4 px-4 pb-4`},kF={class:`text-base font-semibold [overflow-wrap:anywhere]`},AF={class:`grid grid-cols-[72px_1fr] items-center gap-x-3 gap-y-1.5 text-xs`},jF={class:`flex flex-col gap-0.5`},MF={class:`flex flex-col gap-0.5`},NF={class:`shrink-0 font-mono text-muted-foreground`},PF={class:`truncate`},FF={key:1,class:`px-1.5 text-xs text-muted-foreground`},IF={key:2,class:`px-4 py-6 text-sm text-muted-foreground`},LF=I({__name:`RunningPreview`,props:{picked:{}},emits:[`pickMainline`,`pickSession`],setup(e,{emit:t}){let n=e,r=t,{open:i}=sC(),a=[`doing`,`blocked`,`todo`],o=CC,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??kC(e).title??e,status:t?.status,criteria:t?.criteria,items:t?.items,tasks:r,sessions:EC().filter(t=>TC(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`,pF,[s.value?(B(),V(z,{key:0},[U(`div`,mF,[W(YC,{type:`mainline`,status:s.value.status},null,8,[`status`]),U(`span`,hF,j(s.value.id),1),t[2]||=U(`span`,{class:`text-xs text-muted-foreground`},`主脈絡`,-1)]),U(`div`,gF,[U(`h3`,_F,j(s.value.title),1),U(`dl`,vF,[t[5]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[s.value.status?(B(),H(Ww,{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(Nj,{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(Nj,{done:s.value.items.done,total:s.value.items.total},null,8,[`done`,`total`])])],64)):K(``,!0)]),U(`section`,yF,[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(XS)(s.value.id,e.id))},[W(YC,{type:N(NC)(e),status:e.status},null,8,[`type`,`status`]),U(`span`,xF,j(e.id),1),U(`span`,SF,j(e.title),1),U(`span`,CF,j(N(HC)[e.status]),1)],8,bF))),128)),s.value.tasks.length?K(``,!0):(B(),V(`p`,wF,j(s.value.loaded?`沒有`:`載入中…`),1))]),U(`section`,TF,[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(fF,{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`,EF,`沒有`))]),U(`div`,null,[W(N(JS),{variant:`outline`,size:`sm`,"as-child":``},{default:P(()=>[W(N(xm),{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`,DF,[W(YC,{type:`session`,status:c.value.status},null,8,[`status`]),t[9]||=U(`span`,{class:`text-xs text-muted-foreground`},`會話`,-1)]),U(`div`,OF,[U(`h3`,kF,j(N(wC)(c.value)),1),U(`dl`,AF,[t[10]||=U(`dt`,{class:`text-muted-foreground`},`狀態`,-1),U(`dd`,null,[W(Ww,{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`,jF,[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`,MF,[t[13]||=U(`h4`,{class:`mb-0.5 text-xs font-medium text-muted-foreground`},`服務的主脈絡`,-1),N(TC)(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(TC)(c.value))},[W(YC,{type:`mainline`,status:N(kC)(N(TC)(c.value)).status},null,8,[`status`]),U(`span`,NF,j(N(TC)(c.value)),1),U(`span`,PF,j(N(kC)(N(TC)(c.value)).title),1)])):(B(),V(`p`,FF,`沒有`))]),U(`div`,null,[W(N(JS),{variant:`outline`,size:`sm`,onClick:t[1]||=e=>N(i)(N(QS)(c.value.id))},{default:P(()=>[...t[14]||=[G(`開啟會話`,-1)]]),_:1})])])],64)):(B(),V(`p`,IF,`點關係圖裡的主脈絡或會話看詳情。`))]))}}),RF=[`width`,`height`],zF=[`id`],BF=[`fill`],VF=[`d`,`stroke`,`stroke-dasharray`,`marker-end`],HF={class:`flex flex-wrap items-start gap-x-6 gap-y-3`},UF={key:1,class:`col-span-full mt-6 flex flex-col gap-1.5`},WF={class:`flex flex-wrap gap-x-6 gap-y-1`},GF={key:2,class:`absolute bottom-3 left-1/2 z-20 -translate-x-1/2 cursor-auto`,role:`toolbar`,"aria-label":`批次操作`,"data-canvas-overlay":``},KF={class:`flex items-center gap-1 rounded-lg border bg-popover py-1 pr-1 pl-3 text-sm shadow-md`},qF={class:`mr-2 tabular-nums`},JF={class:`text-muted-foreground tabular-nums`},YF={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":``},XF={key:1,class:`text-sm text-muted-foreground`},ZF=20,QF=260,$F=48,eI=4,tI=4,nI=`mainflow.overview.canvasHeight`,rI=240,iI=`mainflow.overview.previewWidth`,aI=260,oI=560,sI=I({__name:`RunningMap`,setup(e){let t=e=>`${e.kind}:${e.id}`,n=[`active`,`planning`,`paused`],r=e=>e&&!iN(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=>kC(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(()=>i([...new Set([...s.value,...l.value.flatMap(e=>[e.to,e.from])])],o)),d=J(()=>new Set(u.value)),f=J(()=>QP(u.value,l.value)),p=J(()=>i(EC(),e=>e.status)),m=e=>p.value.filter(t=>TC(t)===e),h=J(()=>p.value.filter(e=>!d.value.has(TC(e)??``))),g=e=>e.kind===`mainline`?d.value.has(e.id):p.value.some(t=>t.id===e.id),_=Qt(new Map),v=J(()=>[..._.values()].filter(g)),y=M(),b=J(()=>y.value&&_.has(t(y.value))&&g(y.value)?y.value:void 0),x=(e,n)=>_.has(t({kind:e,id:n})),S=e=>!!e?.shiftKey;function C(){_.clear(),y.value=void 0}function w(e,n){let r=t(e);if(S(n)){_.has(r)?_.delete(r):_.set(r,e);return}_.clear(),_.set(r,e),y.value=e}function T(e,t){if(eC(e)){S(t)||window.open(tC(e)??void 0,`_blank`,`noopener`);return}w({kind:`mainline`,id:e},t)}let ee=(e,t)=>w({kind:`session`,id:e},t);async function E(){let e=new Map;for(let t of v.value)e.set(t.kind,[...e.get(t.kind)??[],t.id]);await yC(async()=>{let t=[];for(let[n,r]of e){let e=await dC.archiveMany(n,r,!0);t.push(...e.failed.map(e=>`${e.id}(${e.error})`))}if(t.length)throw Error(`${t.length} 個沒有封存:${t.join(`、`)}`)})&&C()}let te=M(),ne=J(()=>{let e=te.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 re(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 ie.value?.querySelectorAll(`[data-node], [data-session]`)??[])n(e)&&(e.dataset.node?eC(e.dataset.node)||t.push({kind:`mainline`,id:e.dataset.node}):t.push({kind:`session`,id:e.dataset.session}));return t}let{current:D}=sC();vf(window,`keydown`,e=>{e.key!==`Escape`||D.value||Q.paletteOpen||!_.size||(b.value&&v.value.length>1?y.value=void 0:C())},{capture:!0});let ie=M(),ae=M([]),oe=M({width:0,height:0});function se(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 O(){let e=ie.value;if(!e)return;let t=t=>{let n=e.querySelector(`[data-node="${CSS.escape(t)}"]`);return n?se(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+ZF,s=i.left-2,c=i.top+ZF;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=se(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`})}ae.value=n,oe.value={width:e.offsetWidth,height:e.offsetHeight},ye||A()}Ef(ie,O),F([f,p,()=>Q.mainlines],()=>void tr(O),{deep:!0});let ce={pending:`var(--muted-foreground)`,other:`var(--status-off)`,session:`var(--status-off)`},le={pending:void 0,other:`4 3`,session:`2 2`},ue=J(()=>{let e=f.value.columns.length*308-$F,t=e=>Math.min(e,eI)*284-24;return Math.max(QF,e,t(f.value.free.length),t(h.value.length))}),de=M(),fe=M({x:0,y:0,zoom:1}),pe=M({width:0,height:0});function me(){let e=de.value;e&&(pe.value={width:e.clientWidth,height:e.clientHeight})}Ef(de,()=>{me(),ye||A()});let ge=M(!1),_e;function ve(e){ge.value=!0,fe.value=e,clearTimeout(_e),_e=setTimeout(()=>ge.value=!1,320)}let ye=!1;function A(){me(),oe.value.width&&oe.value.height&&pe.value.width&&pe.value.height&&(fe.value=XP(oe.value,pe.value),ye=!0)}let be=()=>(me(),ve(XP(oe.value,pe.value))),xe=e=>(me(),ve(YP(fe.value,fe.value.zoom*e,pe.value.width/2,pe.value.height/2))),Se=J(()=>`${Math.round(fe.value.zoom*100)}%`),Ce=0;function we(e){let t=de.value.getBoundingClientRect();if(e.ctrlKey||e.metaKey){e.preventDefault(),fe.value=YP(fe.value,JP(fe.value.zoom*Math.exp(-e.deltaY*.01)),e.clientX-t.left,e.clientY-t.top);return}let n=performance.now()<Ce||!ZP(e);if(e.preventDefault(),!n){Te(de.value).scrollBy({top:Ee(e,e.deltaY),left:Ee(e,e.deltaX)});return}Ce=performance.now()+120,fe.value={...fe.value,x:fe.value.x-e.deltaX,y:fe.value.y-e.deltaY}}function Te(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 Ee=(e,t)=>e.deltaMode===1?t*16:e.deltaMode===2?t*window.innerHeight:t;function De(e){let n=de.value,r=n.getBoundingClientRect(),i=new Map(_),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(!te.value&&Math.hypot(n-a,s-o)<tI)return;te.value={x1:a,y1:o,x2:n,y2:s};let c=re({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)});_.clear();for(let[e,t]of i)_.set(e,t);for(let e of c)_.set(t(e),e)},c=()=>{n.removeEventListener(`pointermove`,s),n.removeEventListener(`pointerup`,c),n.removeEventListener(`pointercancel`,c),te.value=void 0};n.addEventListener(`pointermove`,s),n.addEventListener(`pointerup`,c),n.addEventListener(`pointercancel`,c)}let Oe=M(!1);function ke(e){if(e.button!==0||e.target.closest(`button, a, [data-canvas-overlay]`))return;if(e.shiftKey)return De(e);let t={x:e.clientX,y:e.clientY,vx:fe.value.x,vy:fe.value.y},n=!1,r=de.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)<tI||(n=!0,Oe.value=!0,fe.value={...fe.value,x:t.vx+r,y:t.vy+i})},a=()=>{r.removeEventListener(`pointermove`,i),r.removeEventListener(`pointerup`,a),r.removeEventListener(`pointercancel`,a),Oe.value=!1,n||C()};r.addEventListener(`pointermove`,i),r.addEventListener(`pointerup`,a),r.addEventListener(`pointercancel`,a)}let Ae=e=>Math.round(Math.min(Math.max(rI,window.innerHeight),Math.max(rI,e))),je=Number(uw(nI,null)),Me=M(je>0?Ae(je):null);function Ne(e){let t=e.clientY,n=de.value.offsetHeight,r=e=>Me.value=Ae(n+e.clientY-t),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),dw(nI,Me.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}function Pe(){Me.value=null,dw(nI,null)}let Fe=e=>Math.min(oI,Math.max(aI,e)),Ie=M(Fe(Number(uw(iI,340))||340)),Le=J(()=>pe.value.width?Math.min(Ie.value,pe.value.width*.6):Ie.value);function Re(e){let t=e.clientX,n=Le.value,r=e=>Ie.value=Fe(n+t-e.clientX),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),dw(iI,Ie.value)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return(e,t)=>u.value.length||p.value.length?(B(),V(`div`,{key:0,ref_key:`viewport`,ref:de,class:k([`relative w-full touch-none overflow-hidden rounded-xl border bg-background select-none`,[Oe.value?`cursor-grabbing`:`cursor-grab`,Me.value===null&&`h-[60vh]`]]),style:he(Me.value===null?void 0:{height:`${Me.value}px`}),"data-canvas":``,onPointerdown:ke,onWheel:we},[U(`div`,{ref_key:`canvas`,ref:ie,class:k([`absolute top-0 left-0 grid origin-top-left gap-y-4`,{"transition-transform duration-300 ease-out":ge.value}]),style:he({width:`${ue.value}px`,columnGap:`${$F}px`,gridTemplateColumns:`repeat(${Math.max(f.value.columns.length,1)}, ${QF}px)`,transform:`translate(${fe.value.x}px, ${fe.value.y}px) scale(${fe.value.zoom})`})},[(B(),V(`svg`,{class:`pointer-events-none absolute inset-0 overflow-visible`,width:oe.value.width,height:oe.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:ce[e]},null,8,BF)],8,zF)),64))]),(B(!0),V(z,null,L(ae.value,e=>(B(),V(`path`,{key:e.key,d:e.d,fill:`none`,"stroke-width":`1.5`,stroke:ce[e.kind],"stroke-dasharray":le[e.kind],"marker-end":e.kind===`session`?void 0:`url(#run-arrow-${e.kind})`},null,8,VF))),128))],8,RF)),(B(!0),V(z,null,L(f.value.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:`${QF}px`})},[W(sF,{id:e,picked:x(`mainline`,e),onPick:T},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(m(e),t=>(B(),H(fF,{key:t.id,session:t,serves:e,picked:x(`session`,t.id),class:`ml-5`,onPick:e=>ee(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))]))),128)),f.value.free.length?(B(),V(`div`,{key:0,class:k([`col-span-full flex flex-col gap-1.5`,{"mt-6":f.value.columns.length}])},[U(`div`,HF,[(B(!0),V(z,null,L(f.value.free,e=>(B(),V(`div`,{key:e,class:`flex max-w-full flex-col gap-1.5`,style:he({width:`${QF}px`})},[W(sF,{id:e,picked:x(`mainline`,e),onPick:T},null,8,[`id`,`picked`]),(B(!0),V(z,null,L(m(e),t=>(B(),H(fF,{key:t.id,session:t,serves:e,picked:x(`session`,t.id),class:`ml-5`,onPick:e=>ee(t.id,e)},null,8,[`session`,`serves`,`picked`,`onPick`]))),128))],4))),128))])],2)):K(``,!0),h.value.length?(B(),V(`div`,UF,[U(`div`,WF,[(B(!0),V(z,null,L(h.value,e=>(B(),H(fF,{key:e.id,session:e,picked:x(`session`,e.id),class:`max-w-full`,style:he({width:`${QF}px`}),onPick:t=>ee(e.id,t)},null,8,[`session`,`picked`,`style`,`onPick`]))),128))])])):K(``,!0)],6),b.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:`${Le.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(Re,[`prevent`,`stop`])},null,32),W(LF,{picked:b.value,onPickMainline:T,onPickSession:ee},null,8,[`picked`])],36)):K(``,!0),te.value?(B(),V(`div`,{key:1,class:`pointer-events-none absolute z-20 rounded-sm border border-ring bg-ring/10`,style:he(ne.value),"aria-hidden":`true`},null,4)):K(``,!0),v.value.length>=1?(B(),V(`div`,GF,[U(`div`,KF,[U(`span`,qF,`已選 `+j(v.value.length)+` 個`,1),W(N(JS),{variant:`ghost`,size:`sm`,onClick:E},{default:P(()=>[W(N(Pu)),t[4]||=G(`封存`,-1),U(`span`,JF,j(v.value.length),1)]),_:1}),W(N(JS),{variant:`ghost`,size:`icon-sm`,"aria-label":`清除選取`,onClick:t[1]||=e=>C()},{default:P(()=>[W(N(ef))]),_: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(Ne,[`prevent`,`stop`]),onDblclick:Pe},null,32),U(`div`,YF,[W(N(JS),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`縮小`,onClick:t[2]||=e=>xe(1/N(1.2))},{default:P(()=>[W(N(Fd))]),_: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:be},j(Se.value),1),W(N(JS),{variant:`ghost`,size:`icon-sm`,class:`rounded-full`,"aria-label":`放大`,onClick:t[3]||=e=>xe(N(1.2))},{default:P(()=>[W(N(zd))]),_:1})])],38)):(B(),V(`p`,XF,[...t[5]||=[G(`沒有主脈絡。在 hub 內執行 `,-1),U(`code`,null,`mainflow new mainline <slug> --title <title>`,-1),G(` 建立。`,-1)]]))}}),cI={class:`flex flex-col gap-8 px-6 pt-2 pb-10`},lI={key:0,"aria-labelledby":`attention`,class:`-mb-4 rounded-lg border bg-card`},uI={id:`attention`,class:`text-sm font-medium`},dI=[`aria-expanded`],fI={class:`text-xs text-muted-foreground tabular-nums`},pI={key:2,class:`ml-2 flex min-w-0 items-center gap-3 overflow-hidden text-xs font-normal text-muted-foreground`},mI={class:`tabular-nums`},hI={id:`attention-list`,class:`border-t`},gI=[`data-peek`,`aria-current`,`onClick`],_I={class:`shrink-0 font-mono text-xs text-muted-foreground`},vI={class:`min-w-0 truncate`},yI=[`title`],bI={class:`truncate`},xI={key:0,class:`hidden max-w-48 shrink-0 truncate text-xs text-muted-foreground xl:inline`},SI={"aria-labelledby":`running`},CI={id:`running`,class:`mb-2 flex items-center gap-1.5 text-sm font-medium`},wI={class:`text-xs font-normal text-muted-foreground tabular-nums`},TI={type:`button`,class:`grid size-5 place-items-center rounded-sm text-muted-foreground hover:text-foreground`,"aria-label":`依賴線的說明`},EI={"aria-labelledby":`issues`,class:`-mx-6 min-w-0`},DI={id:`issues`,class:`px-6 text-sm font-medium`},OI={class:`ml-1 text-xs text-muted-foreground tabular-nums`},kI={class:`flex min-w-0 items-center gap-2`},AI={class:`shrink-0 font-mono text-xs text-muted-foreground`},jI=[`title`],MI={key:0,class:`flex min-w-0 items-center gap-1.5 overflow-hidden text-xs`},NI=`mainflow.overview.attentionOpen`,PI=`mainflow.list.overview.issues.axis`,FI=`箭頭由要先完成的主脈絡指向等待它的主脈絡;實線是還沒完成的依賴,虛線是已完成或無法確認的依賴。`,II=I({__name:`Overview`,setup(e){let{open:t,current:n}=sC(),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 vC(o.value));let s=J(()=>a.value.flatMap(e=>Q.mainlines[e.id]?[Q.mainlines[e.id]]:[])),c={overdue:{label:`逾期`,icon:Uu,tone:`text-destructive`},blocked:{label:`卡住`,icon:Qu,tone:`text-status-waiting`},proposed:{label:`待裁決`,icon:Xu,tone:`text-warning`},due:{label:`即將到期`,icon:Uu,tone:`text-warning`},review:{label:`待重新確認`,icon:Bd,tone:`text-warning`}},l=J(()=>[...s.value.flatMap(e=>e.tasks.filter(e=>e.status===`blocked`).map(t=>({ref:XS(e.id,t.id),type:NC(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:ZS(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&&Mw(e.due)).map(e=>{let t=jw(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&&jw(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(uw(NI,!1)===!0);function f(){d.value=!d.value,dw(NI,d.value)}let p=[`open`,`planned`],m=hN({key:`overview.issues`,queryPrefix:`i.`,id:e=>e.id,text:e=>e.title,filters:TN(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=>nN(e.priority),dir:`asc`},{key:`planned`,label:`排入`,value:e=>e.plannedIn??e.due,dir:`asc`}],groups:EN(p),defaultSort:`order`,defaultGroup:`status`},()=>Q.issues.filter(e=>!e.archivedAt&&e.status!==`closed`)),h=uw(PI,`priority`),g=M(m.spec.groups.some(e=>e.key===h)?h:`priority`);function _(e){g.value=e,dw(PI,e)}let v=J(()=>m.spec.groups.find(e=>e.key===g.value)?.label),y=e=>nN(e.priority)!==`P2`||g.value!==`category`&&!!e.category||!!e.labels?.length,b=J(()=>a.value.length),x=J(()=>DC().length);return(e,n)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`總覽`,description:`現在要注意什麼、進行中的主脈絡與會話怎麼串在一起、還有哪些待辦。`})]),default:P(()=>[U(`div`,cI,[l.value.length?(B(),V(`section`,lI,[U(`h2`,uI,[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(qu),{key:0,class:`size-4 shrink-0 text-muted-foreground`})):(B(),H(N(Yu),{key:1,class:`size-4 shrink-0 text-muted-foreground`})),n[1]||=G(` 需要注意 `,-1),U(`span`,fI,j(l.value.length),1),d.value?K(``,!0):(B(),V(`span`,pI,[(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`,mI,j(e.n),1)]))),128))]))],8,dI)]),yr(U(`ul`,hI,[(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(YC,{type:e.type,status:e.status},null,8,[`type`,`status`]),U(`span`,_I,j(e.id),1),U(`span`,vI,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`,bI,j(e.reason),1)],8,yI),e.context?(B(),V(`span`,xI,j(e.context),1)):K(``,!0)],8,gI))),128))],512),[[Vc,d.value]])])):K(``,!0),U(`section`,SI,[U(`h2`,CI,[n[2]||=G(` 進行中 `,-1),U(`span`,wI,j(b.value)+` 條主脈絡 · `+j(x.value)+` 個會話`,1),W(N(iA),{"open-delay":150,"close-delay":100},{default:P(()=>[W(N(oA),{"as-child":``},{default:P(()=>[U(`button`,TI,[W(N($u),{class:`size-3.5`})])]),_:1}),W(N(aA),{class:`w-72 text-xs`},{default:P(()=>[G(j(FI))]),_:1})]),_:1})]),W(sI)]),U(`section`,EI,[U(`h2`,DI,[n[3]||=G(`待辦事項 `,-1),U(`span`,OI,j(N(m).total.value),1)]),W(NT,{view:N(m)},{views:P(()=>[W(N(uT),null,{default:P(()=>[W(N(CT),{"as-child":``},{default:P(()=>[W(N(JS),{variant:`outline`,size:`sm`,"aria-label":`橫軸:${v.value}`},{default:P(()=>[W(N(nd)),G(j(v.value),1)]),_:1},8,[`aria-label`])]),_:1}),W(N(pT),{align:`end`,class:`w-40`},{default:P(()=>[W(N(hT),{class:`text-xs text-muted-foreground`},{default:P(()=>[...n[4]||=[G(`橫軸`,-1)]]),_:1}),W(N(gT),{"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(vT),{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(KP,{view:N(m),axis:g.value},{card:P(({item:e})=>[W(N(iP),{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`,kI,[W(YC,{type:`issue`,status:e.status},null,8,[`status`]),U(`span`,AI,j(e.id),1),U(`span`,{class:`truncate`,title:e.title},j(e.title),9,jI)]),y(e)?(B(),V(`div`,MI,[W(rA,{priority:e.priority,class:`shrink-0`},null,8,[`priority`]),g.value!==`category`&&e.category?(B(),H(N(Dw),{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(Dw),{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}))}}),LI={key:0,class:`shrink-0 text-xs text-muted-foreground`},RI=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=>[e.started,...e.actions.flatMap(e=>[e.startedAt,e.doneAt])].filter(e=>!!e).reduce((e,t)=>t>e?t:e),o=e=>Q.sessions.filter(t=>t.delegatedFrom===e).sort((e,t)=>e.started.localeCompare(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=hN({key:`sessions`,id:e=>e.id,text:e=>`${wC(e)} ${e.branch??``}`,filters:[{key:`status`,label:`狀態`,values:e=>[e.status],options:rN(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=>wC(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=>e.started,dir:`desc`},{key:`active`,label:`最後活動`,value:a,dir:`desc`}],groups:[sN(t),{key:`mainline`,label:`主脈絡`,value:e=>r(e)[0]??``,groupLabel:i},{key:`day`,label:`日期`,value:e=>e.started.slice(0,10),latestFirst:!0}],defaultSort:`started`,defaultGroup:`status`,ended:e=>iN(e.status),archived:e=>!!e.archivedAt,nested:e=>s(e)},()=>c.value),u=gN(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}=sC();Er(()=>jC(Q.sessions.flatMap(e=>e.actions.flatMap(e=>e.serves))));let p=e=>(n(e)??e.actions[0])?.serves[0]?.split(`#`)[0],m=e=>yC(()=>dC.archiveSession(e.id,!e.archivedAt));return(e,t)=>(B(),H(eN,null,{header:P(()=>[W(KT,{title:`會話`,description:`在這台電腦上推進過 hub 的 AI 會話,只存在本機,不入版控。`}),W(NT,{view:N(l)},null,8,[`view`])]),default:P(()=>[W(lT,{view:N(l),selection:N(u),columns:d,"item-ref":e=>N(QS)(e.id)},{name:P(({item:e,depth:t})=>[W(HT,{status:e.status,title:N(wC)(e),muted:t>0||!!e.archivedAt,depth:t},{default:P(()=>[e.archivedAt?(B(),V(`span`,LI,`已封存`)):K(``,!0)]),_:2},1032,[`status`,`title`,`muted`,`depth`])]),serves:P(({item:e})=>[p(e)?(B(),H(pA,q({key:0},N(kC)(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(nM,{at:e.started},null,8,[`at`])]),actions:P(({item:e})=>[W(kw,{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(zT,{selection:N(u)},null,8,[`selection`])]),_:1}))}}),zI=e=>Array.isArray(e)?e.join(`/`):e??``,BI=km({history:Zp(),routes:[{path:`/`,component:II},{path:`/mainlines`,component:MP},{path:`/mainlines/:m`,component:AP},{path:`/issues`,component:ON},{path:`/findings`,component:yN},{path:`/ops`,component:IP},{path:`/sessions`,component:RI},{path:`/mainlines/:m/tasks/:t`,redirect:e=>({path:`/mainlines/${zI(e.params.m)}`,query:{view:`tasks`,peek:XS(zI(e.params.m),zI(e.params.t))}})},{path:`/mainlines/:m/decisions/:d`,redirect:e=>({path:`/mainlines/${zI(e.params.m)}`,query:{view:`decisions`,peek:ZS(zI(e.params.m),zI(e.params.d))}})},{path:`/mainlines/:m/files/:path(.*)`,redirect:e=>({path:`/mainlines/${zI(e.params.m)}`,query:{peek:$S(zI(e.params.m),zI(e.params.path))}})},{path:`/sessions/:s`,redirect:e=>({path:`/sessions`,query:{peek:QS(zI(e.params.s))}})}]});hu(Ew).use(BI).mount(`#app`);
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>mainflow</title>
7
- <script type="module" crossorigin src="/assets/index-BvKRkaWK.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-Cx_Rtc3B.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-BUxmYhLT.css">
9
9
  </head>
10
10
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mainflow",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "description": "本機多 AI 協作的主脈絡任務管理:CLI 與介面",
5
5
  "license": "MIT",
6
6
  "type": "module",