epiq 1.13.2 → 1.14.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.
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import{a as Y}from"./chunk-3A5BVO43.js";import{$ as no,A as zr,B as Qr,C as Zr,E as en,F as tn,H as on,I as rn,J as nn,K as sn,L as an,M as ln,O as mn,Q as cn,R as dn,T as un,U as pn,V as Tt,W as Ct,X as fn,Y as gn,Z as yn,_ as ro,a as Lr,aa as hn,b as de,ba as Pe,c as ie,ca as io,d as Rr,da as xn,e as jr,ea as bn,f as Dr,g as _r,ga as vn,h as Or,ha as Sn,i as Gr,ia as wn,j as $r,ja as so,k as Fr,ka as Et,l as Ur,m as Hr,n as kr,o as Wr,q as Vr,r as wt,s as ee,t as It,v as Kr,w as Yr,x as qr,y as Jr,z as Xr}from"./chunk-KQQQ5HBS.js";import{$ as Yo,$a as nr,$b as Ee,Ab as ur,Bb as pr,Cb as fr,Db as xt,E as to,Eb as gr,Fb as yr,G as $o,Gb as bt,Hb as hr,Ia as Xo,Ib as xr,Ja as zo,Jb as br,Ka as Qo,L as Fo,La as pt,Mb as vr,Nb as Sr,Oa as ft,Ob as wr,P as Uo,Pa as Zo,Pb as Ir,Q as Ho,T as lt,Tb as Tr,U as Ie,Ub as oo,V as ko,Vb as Cr,Wb as vt,X as U,Xa as er,Xb as St,Y as Wo,Ya as tr,Yb as Er,Z as Vo,Za as or,Zb as Pr,_ as Ko,_a as rr,_b as Q,a as Bo,aa as mt,b as nt,ba as Oe,bc as _,c as it,cc as $e,da as ct,db as ir,ea as dt,eb as sr,ec as Ar,fb as ne,fc as Nr,g as st,gb as ar,gc as Mr,hb as lr,hc as q,ia as ut,ib as x,j as Lo,ja as qo,jb as mr,k as oe,kb as gt,l as Ro,n as we,nb as Ce,nc as Br,o as re,p as jo,pb as cr,q as _e,qa as Ge,qb as ce,r as m,ra as Jo,s as Do,t as _o,u as Oo,ub as yt,v as Go,vb as ht,w as eo,x as at,xa as me,za as Te,zb as dr}from"./chunk-C4V7IKIG.js";import{f as rt,g as Mo}from"./chunk-WUCQWBQE.js";import{b as $,c as T,d as h,e as F}from"./chunk-5RIQL7P4.js";import z from"chalk";import{render as hl}from"ink";import xl from"meow";import bl from"react";import rs from"node:os";import ns from"node:path";import Fe from"chalk";var Pt=["\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 ","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557","\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551","\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551\u2584\u2584 \u2588\u2588\u2551","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D","\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2580\u2580\u255D "];var At=" ",Cn=Fe.hex(m.secondary2),In=Fe.hex(m.gray),is=()=>{let t=Pt[0].length+Pt.length*2;return Pt.map((o,n)=>Array.from(o).map((s,u)=>{let[r,f,y]=_o((u+n*2)/t);return Fe.rgb(r,f,y)(s)}).join(""))},ss=e=>{let t=rs.homedir();return e===t||e.startsWith(t+ns.sep)?"~"+e.slice(t.length):e},Tn=(e,t)=>`${At}${Fe.hex(m.accent)("\u279C")} ${Cn(e.padEnd(9))}${t}`,ao=({url:e,repoRoot:t,version:o,reused:n})=>["",...is().map(s=>At+s),"",`${At}${Cn("gui")} ${In(`\xB7 v${o}`)}`,"",Tn("Local",Fe.hex(m.accent).bold(e)),Tn("Project",ss(t)),"",At+In(n?"already running for this project \xB7 opened in your browser":"press ctrl+c to stop"),""].join(`
3
+ `);import{spawn as as}from"node:child_process";import Ue from"node:process";var En=(e=Ue.platform,t=Ue.env)=>e==="darwin"||e==="win32"||!!(t.DISPLAY||t.WAYLAND_DISPLAY||t.BROWSER),Pn=e=>{let t=Ue.platform==="darwin"?"open":Ue.platform==="win32"?"cmd":"xdg-open",o=Ue.platform==="win32"?["/c","start","",e]:[e];try{let n=as(t,o,{detached:!0,stdio:"ignore"});n.on("error",s=>{logger.info(`[gui] could not open a browser: ${s.message}`)}),n.unref()}catch(n){logger.info(`[gui] could not open a browser: ${String(n)}`)}};import{readFile as ei,stat as ks}from"node:fs/promises";import{createHash as Ws}from"node:crypto";import Vs from"node:http";import xe from"node:path";import{fileURLToPath as Ks}from"node:url";import ls from"node:fs";import An from"node:path";var He=Number(process.env.EPIQ_GUI_PORT)||3710,lo="/api/instance",mo="epiq",Nt=e=>{try{return ls.realpathSync(An.resolve(e))}catch{return An.resolve(e)}},ms=e=>{let t=e;return typeof t=="object"&&t!==null&&t.app===mo&&typeof t.repoRoot=="string"&&typeof t.version=="string"&&typeof t.pid=="number"},Nn=async(e,t=500)=>{let o=new AbortController,n=setTimeout(()=>o.abort(),t);try{let s=await fetch(`http://127.0.0.1:${e}${lo}`,{signal:o.signal});if(!s.ok)return null;let u=await s.json();return ms(u)?u:null}catch{return null}finally{clearTimeout(n)}};var cs=6e4,Mn=e=>{let t,o=!1,n=!1,s=0,u=()=>{let g=Ro();return h(g)?(nt.error(g.message),null):g.value},r=()=>{let g=u();if(!g)return!1;let l=we();return h(l)?!1:!!g.autoSync&&Tr(l.value)===null},f=()=>{let g=Bo(u()?.autoSyncDebounceMs);return Math.max(0,g-(Date.now()-s))},y=async()=>{if(!(o||n)&&r()){n=!0,s=Date.now();try{await de(async()=>{if(ie().mode!=="live")return!1;let l=await It({repoRoot:e.project.repoRoot});return await e.publisher.publishIfLogMoved(),!h(l)})&&e.onReposFetch?.(cs)}finally{n=!1,p()}}};function p(){o||!r()||n||t||(t=setTimeout(()=>{t=void 0,y()},f()))}return p(),{queueSync:p,reschedule:()=>{t&&(clearTimeout(t),t=void 0),p()},dispose:()=>{o=!0,t&&clearTimeout(t)}}};var Mt=(e,t)=>{let o,n=!1,s=async()=>{let u=Date.now();try{await e()}catch(r){logger.error("[watch] check threw",r)}n||(o=setTimeout(s,Math.max(t,Date.now()-u)))};return o=setTimeout(s,t),()=>{n=!0,o&&clearTimeout(o)}};var ds=/^(```|~~~)[^\n]*\n[\s\S]*?\n\1[ \t]*$/gm,us=/^(?:```|~~~)[\s\S]*$/m,ps=/^[ \t]*\|?[ \t]*:?-{2,}:?[ \t]*(?:\|[ \t]*:?-{2,}:?[ \t]*)*\|?[ \t]*$/gm,fs=/^[ \t]*\|.*$/gm,gs=/!\[[^\]]*\]\([^)]*\)/g,ys=/\[([^\]]*)\]\([^)]*\)/g,hs=/^[ \t]*(?:[#>]+[ \t]*|[-*+][ \t]+|\d+[.)][ \t]+)/gm,xs=/^[ \t]*(?:-{3,}|\*{3,}|_{3,})[ \t]*$/gm,bs=/[*`~]/g,vs=/(?<![0-9A-Za-z])_|_(?![0-9A-Za-z])/g,Ss=e=>Ko(e.replace(ds," ").replace(us," ").replace(gs," ").replace(ys,"$1").replace(xs," ").replace(ps," ").replace(fs,t=>t.replaceAll("|"," ")).replace(hs,"").replace(bs,"").replace(vs,"")),ws=.5,Bn=(e,t)=>{if(t<=0)return"";let o=Ss(e);if(o.length<=t)return o;let n="\u2026",s=t-n.length;if(s<=0)return n.slice(0,t);let u=o.slice(0,s),r=u.lastIndexOf(" ");return`${(r>=s*ws?u.slice(0,r):u).trimEnd()}${n}`};var Is=e=>({...e,boards:(e.boards??[]).map(t=>({...t,swimlanes:(t.swimlanes??[]).map(o=>({...o,issues:(o.issues??[]).map(n=>({...n,description:""}))}))})),commentsByIssueId:Object.fromEntries(Object.entries(e.commentsByIssueId??{}).filter(([,t])=>t.length>0).map(([t,o])=>[t,o.map(n=>({...n,body:""}))])),attachmentsByIssueId:Object.fromEntries(Object.entries(e.attachmentsByIssueId??{}).filter(([,t])=>t.length>0))}),he=e=>h(e)?e:T(e.message,Is(e.value)),Ts=(e,t)=>(e.boards??[]).flatMap(o=>o.swimlanes??[]).flatMap(o=>o.issues??[]).find(o=>o.id===t),Ln=(e,t)=>{let o=Ts(e,t);return{issueId:t,description:o?.description??"",comments:e.commentsByIssueId?.[t]??[]}},Cs=280,Rn=(e,t)=>({issueId:e,excerpt:Bn(t,Cs)});var Es=1e3,jn=e=>{let t=oe(e.repoRoot);if(h(t))return null;let o=st({repoRoot:t.value});return h(o)?null:o.value},Dn=e=>{let t=()=>{let r=jn(e.project);return r===null?null:Ge(r)},o=()=>{let r=Qo(e.project.repoRoot);return h(r)?null:JSON.stringify([r.value.live,r.value.overLimit])},n=o(),s=t();return{publishIfLogMoved:async()=>{let r=jn(e.project);if(r===null||await pt(r))return;let f=Ge(r);if(f===s)return;s=f;let y=he(await ee({repoRoot:e.project.repoRoot}));if(h(y))return;ce({type:"state",payload:y});let p=o();p!==null&&p!==n&&(n=p,ce({type:"repos:changed"}))}}},_n=(e,t=Es)=>Mt(()=>de(async()=>{ie().mode==="live"&&await e.publishIfLogMoved()}),t);var Ps=new Set(["127.0.0.1","[::1]","localhost","epiq.localhost"]),co=(e,t)=>{if(!e)return!1;if(e==="null")return!0;let o;try{o=new URL(e)}catch{return!0}return o.protocol!=="http:"||o.port!==String(t)?!0:!Ps.has(o.hostname)},On=(e,t)=>e.method==="GET"||e.method==="HEAD"?null:co(e.origin,t)?{status:403,message:"Cross-origin request"}:e.method==="POST"&&!(e.contentType??"").toLowerCase().startsWith("application/json")?{status:415,message:"Expected content-type: application/json"}:null;import{WebSocketServer as $s}from"ws";var Ns=new RegExp(`^[0-9A-Z]{${7}}$`),Ms=e=>{let t=e.indexOf(" ");if(t===-1)return null;let o=e.slice(0,t).toUpperCase();return Ns.test(o)?o:null},Bs=e=>{let t={};for(let o of e){let n=Ms(o.subject),s=new Set([...n?[n]:[],...o.refs??[]]);for(let u of s){let r=t[u]??={commits:0,insertions:0,deletions:0};r.commits++,r.insertions+=o.insertions,r.deletions+=o.deletions}}return t},Gn=async(e={})=>{let t=await ft({repoRoot:e.repoRoot});return h(t)?t:T("Collected diff stats by ref",Bs(t.value))};var Ls="Filed here",$n=(e,t)=>e.set(t,(e.get(t)??0)+1),Fn=(e,t,o)=>[...e.entries()].map(([n,s])=>({laneId:n,title:n===null?Ls:o(n),count:s,share:t===0?0:s/t})).sort((n,s)=>s.count-n.count||n.title.localeCompare(s.title)),Un=(e,t,o)=>{let n=new Map,s=new Map,u=0,r=0;for(let f of t)for(let[y,p]of f.entries()){if(p!==e)continue;u++,$n(n,f[y-1]??null);let g=f[y+1];g!==void 0&&(r++,$n(s,g))}return{arrived:u,departed:r,arrivesFrom:Fn(n,u,o),movesOnTo:Fn(s,r,o)}};var ke=1440*60*1e3,Rs=({laneIds:e,journeys:t,now:o,days:n})=>{let s=o-(n-1)*ke,u=new Map(e.map(r=>[r,Array.from({length:n},()=>[])]));for(let r of t)for(let[f,y]of r.entries()){let p=u.get(y.laneId);if(!p)continue;let g=r[f+1]?.enteredAt,l=Math.max(0,Math.ceil((y.enteredAt-s)/ke)),d=g===void 0?n-1:Math.min(n-1,Math.ceil((g-s)/ke)-1);for(let a=l;a<=d;a++)p[a].push(s+a*ke-y.enteredAt)}return Object.fromEntries([...u].map(([r,f])=>[r,f.map((y,p)=>({t:s+p*ke,median:Sn(y.sort((g,l)=>g-l)),count:y.length}))]))},Hn=({laneId:e,journeys:t,now:o,days:n})=>Rs({laneIds:[e],journeys:t,now:o,days:n})[e];var js=40,Ds=30,_s=()=>({tickets:0,commits:0,insertions:0,deletions:0}),Os=async(e,t)=>{let o=_s();for(let n of t.slice(0,js)){let s=await Et({repoRoot:e,idOrRef:me(n)});h(s)||s.value.shape.commits===0||(o.tickets++,o.commits+=s.value.shape.commits,o.insertions+=s.value.shape.insertions,o.deletions+=s.value.shape.deletions)}return o},kn=async e=>{let t=$r();if(h(t))return t;let{nodes:o}=t.value;if(!o[e.swimlaneId])return $("Swimlane not found");let s=Object.values(o).filter(lt),u=s.map(y=>Lr(y.log??[],to(y.id))),r=Un(e.swimlaneId,u.map(y=>y.map(p=>p.laneId)),y=>o[y]?.title??"Elsewhere"),f=s.filter(y=>y.parentNodeId===e.swimlaneId).map(y=>y.id);return T("Derived swimlane stats",{swimlaneId:e.swimlaneId,createdAt:to(e.swimlaneId),...r,stayTrend:Hn({laneId:e.swimlaneId,journeys:u,now:Date.now(),days:Ds}),code:await Os(e.repoRoot,f)})};var Wn=new Set(["sync","email:link","email:unlink","repo:connect","repo:disconnect","issues:create","board:create","board:edit:title","swimlane:create","swimlane:edit:title","board:edit:description","swimlane:edit:description","swimlane:delete","swimlane:move","issues:move","issue:close","issue:reopen","issue:edit:title","issue:edit:description","issue:tag:add","issue:tag:remove","contributor:remove","tag:remove","issue:assignee:add","issue:assignee:remove","issue:comment:add","issue:comment:delete"]);var Vn=e=>{let t=Oe({exclude:e});return h(t)?[]:t.value.map(o=>({projectId:o.projectId,name:mt(o.root),root:o.root,lastOpenedAt:o.lastOpenedAt}))},Kn=e=>{let t=Oe();if(h(t))return $(t.message);let o=t.value.find(n=>n.root===e);return o?T("Resolved recent project",o.root):$(`Not a recent project: ${e}`)};import{z as c}from"zod";var w=c.string().min(1),Yn=c.discriminatedUnion("at",[c.object({at:c.literal("start")}),c.object({at:c.literal("end")}),c.object({at:c.literal("before"),sibling:w}),c.object({at:c.literal("after"),sibling:w})]),We=c.number().finite(),v=(e,t)=>c.object({type:c.literal(e),payload:t}),ue=e=>c.object({type:c.literal(e)}),Gs=c.discriminatedUnion("type",[ue("state:get"),ue("issues:list"),ue("sync"),ue("time-travel:live"),ue("diff-stats:get"),v("project:open",c.object({root:c.string().min(1)})),v("issues:create",c.object({title:c.string(),parentId:w,description:c.string().optional(),tagNames:c.array(c.string()).optional()})),v("board:create",c.object({title:c.string()})),v("board:edit:title",c.object({boardId:w,title:c.string()})),v("swimlane:create",c.object({title:c.string(),boardId:w})),v("swimlane:edit:title",c.object({swimlaneId:w,title:c.string()})),v("board:edit:description",c.object({boardId:w,description:c.string()})),v("swimlane:edit:description",c.object({swimlaneId:w,description:c.string()})),v("swimlane:delete",c.object({swimlaneId:w})),v("swimlane:move",c.object({swimlaneId:w,boardId:w,position:Yn.optional()})),v("issues:move",c.object({issueId:w,parentId:w,position:Yn.optional()})),v("issue:edit:title",c.object({issueId:w,title:c.string()})),v("issue:edit:description",c.object({issueId:w,description:c.string()})),v("issue:tag:add",c.object({issueId:w,tagName:c.string()})),v("issue:tag:remove",c.object({issueId:w,tagId:w})),v("contributor:remove",c.object({contributorId:w})),v("tag:remove",c.object({tagId:w})),c.object({type:c.literal("contributors:get"),payload:c.object({boardId:w.optional()}).optional()}),v("issue:assignee:add",c.object({issueId:w,assigneeId:w.optional(),assigneeName:c.string().optional(),createUnlinked:c.boolean().optional()})),v("issue:assignee:remove",c.object({issueId:w,assigneeId:w})),v("issue:close",c.object({issueId:w})),v("issue:reopen",c.object({issueId:w})),v("issue:comment:add",c.object({issueId:w,body:c.string()})),v("issue:comment:delete",c.object({issueId:w,commentId:w})),v("issue:comment:edit",c.object({issueId:w,commentId:w,body:c.string()})),v("issue:get",c.object({issueId:w})),v("issue:preview:get",c.object({issueId:w})),c.object({type:c.literal("timeline:get"),payload:c.object({start:We.optional(),end:We.optional(),boardId:w.optional(),requestId:c.number().finite().optional()}).optional()}),c.object({type:c.literal("commits:get"),payload:c.object({start:We.optional(),end:We.optional(),requestId:c.number().finite().optional()}).optional()}),v("time-travel:scrub",c.object({targetTime:We})),v("time-travel:checkout-event",c.object({eventId:c.string().min(1)})),v("commit:inspect",c.object({sha:c.string(),repo:c.string().max(80).optional()})),ue("repos:get"),v("repo:preview",c.object({url:c.string().min(1).max(at),branches:c.enum(["default","all"]).optional(),since:c.string().max(20).optional(),label:c.string().max(24).optional()})),v("repo:preview:cancel",c.union([c.object({repo:c.string().min(1).max(80)}),c.object({url:c.string().min(1).max(at)})])),v("repo:connect",c.object({url:c.string().min(1).max(at),branches:c.enum(["default","all"]).optional(),since:c.string().max(20).optional(),label:c.string().max(24).optional()})),v("repo:disconnect",c.object({repo:c.string().min(1).max(2e3)})),c.object({type:c.literal("emails:get")}),v("email:link",c.object({email:c.string().min(1).max(254),contributorId:c.string().min(1).optional()})),v("email:unlink",c.object({email:c.string().min(1).max(254),contributorId:c.string().min(1).optional()})),v("commit:diff:get",c.object({sha:c.string(),repo:c.string().max(80).optional()})),v("issue:commits:get",c.object({issueId:w})),v("issue:squashed-diff:get",c.object({issueId:w})),v("issue:stats:get",c.object({issueId:w})),v("swimlane:stats:get",c.object({swimlaneId:w})),v("board:overview:get",c.object({boardId:w})),ue("me:stats:get"),ue("settings:get"),v("settings:set",c.object({autoSync:c.boolean().optional(),autoSyncIntervalMs:c.number().finite().optional()}))]);var qn=e=>{let t=Gs.safeParse(e);return t.success?{ok:!0,message:t.data}:{ok:!1,error:`Invalid message: ${t.error.issues.map(n=>`${n.path.join(".")||"<root>"}: ${n.message}`).join(", ")}`}};var Fs=1024*1024,uo=()=>{ce({type:"state",payload:he(wt())})},Jn=()=>{ce({type:"repos:changed"})},po=async(e,t)=>{Us(await vn({repoRoot:e,minIntervalMs:t}))},Us=e=>{h(e)||(e.value.some(t=>t.changed)&&Jn(),e.value.some(t=>t.changed||!t.ok)&&ce({type:"repos:fetched"}))},b=(e,t)=>{e.send(JSON.stringify(t))},Ve=async(e,t)=>{let o=he(await ee({repoRoot:t}));return h(o)&&o.message===Lo?b(e,{type:"state:unavailable",payload:{message:o.message,repoRoot:t,recentProjects:Vn(t)}}):b(e,{type:"state",payload:o})},Hs=async(e,t)=>{let o=()=>b(e,{type:"state",payload:he(wt())});if(ie().mode!=="live")return o();let n=await ee({repoRoot:t});return ie().mode!=="live"?o():b(e,{type:"state",payload:he(n)})},L=async(e,t,o,n,s)=>{if(b(e,{type:n,payload:s}),h(s))return b(e,{type:"failed",payload:s.message});o(),Hs(e,t)},Xn=(e,t,{onStateChanged:o,onSyncSettingsChanged:n,getPort:s})=>{new $s({server:e,path:"/ws",maxPayload:Fs,verifyClient:r=>!co(r.origin,s())}).on("connection",r=>{cr(r),r.on("message",async f=>{let y=async l=>{let{type:d}=l,a=t.repoRoot;if(d==="project:open"){let i=Kn(l.payload.root);return b(r,{type:"project:open:result",payload:i}),h(i)?void 0:(t.repoRoot=i.value,Ve(r,i.value))}if(d==="timeline:get"){let{requestId:i,...S}=l.payload??{};return b(r,{type:"timeline",requestId:i,payload:await Rr({repoRoot:a,...S})})}if(d==="issue:get"){let i=l.payload?.issueId,S=wt(),G=zr(i);return b(r,{type:"issue",payload:h(S)?S:T("Issue detail",{...Ln(S.value,i),history:h(G)?[]:G.value})})}if(d==="issue:preview:get"){let{issueId:i}=l.payload,S=Vr(i);return b(r,{type:"issue:preview:result",payload:{issueId:i,result:h(S)?S:T("Issue preview",Rn(i,S.value))}})}if(d==="commits:get"){let{requestId:i,...S}=l.payload??{};return b(r,{type:"commits",requestId:i,payload:so(await ft({repoRoot:a,...S}))})}if(d==="emails:get")return b(r,{type:"emails",payload:await ro({repoRoot:a}),suggestions:await no({repoRoot:a})});if(d==="email:link"||d==="email:unlink"){let S=await(d==="email:link"?gn:yn)({repoRoot:a,...l.payload});return b(r,{type:"emails",payload:await ro({repoRoot:a}),suggestions:await no({repoRoot:a}),lastAction:h(S)?{ok:!1,message:S.message}:{ok:!0,message:S.message}}),L(r,a,o,`${d}:result`,S)}if(d==="me:stats:get")return b(r,{type:"me:stats",payload:await hn({repoRoot:a})});if(d==="settings:get")return b(r,{type:"settings",payload:oo()});if(d==="settings:set"){let i=Cr({enabled:l.payload.autoSync,intervalMs:l.payload.autoSyncIntervalMs});return h(i)||n(),b(r,{type:"settings",payload:h(i)?oo():i,lastAction:h(i)?{ok:!1,message:i.message}:{ok:!0,message:i.message}})}if(d==="commit:inspect")return b(r,{type:"commit:inspect:result",payload:await nr({repoRoot:a,sha:l.payload.sha,repo:l.payload.repo})});if(d==="commit:diff:get"){let{sha:i,repo:S}=l.payload;return b(r,{type:"commit:diff:result",payload:{sha:i,repo:S,result:await or({repoRoot:a,sha:i,repo:S})}})}if(d==="repos:get"){let i=await er(a);return b(r,{type:"repos",payload:await Pe({repoRoot:a}),own:i})}if(d==="repo:preview"){let i=await io({repoRoot:a,...l.payload,previewOnly:!0});return b(r,{type:"repos",for:d,url:l.payload.url.trim(),payload:h(i)?await Pe({repoRoot:a}):i,preview:h(i)?null:i.value.preview??null,lastAction:{ok:!h(i),message:i.message}})}if(d==="repo:preview:cancel")return bn(l.payload),b(r,{type:"repos",for:d,payload:await Pe({repoRoot:a}),preview:null});if(d==="repo:connect"||d==="repo:disconnect"){let i=d==="repo:connect"?await io({repoRoot:a,...l.payload,confirm:!0}):await xn({repoRoot:a,...l.payload});return b(r,{type:"repos",for:d,payload:h(i)?await Pe({repoRoot:a}):i,preview:null,lastAction:{ok:!h(i),message:i.message}}),h(i)?b(r,{type:`${d}:result`,payload:i}):(!h(i)&&i.message!==Xo&&!i.message.startsWith(zo)&&Jn(),L(r,a,o,`${d}:result`,i))}if(d==="issue:commits:get"){let{issueId:i}=l.payload;return b(r,{type:"issue:commits:result",payload:{issueId:i,result:await tr(a,so(await Zo({repoRoot:a,ref:me(i)})))}})}if(d==="issue:squashed-diff:get"){let{issueId:i}=l.payload;return b(r,{type:"issue:squashed-diff:result",payload:{issueId:i,result:await rr({repoRoot:a,ref:me(i)})}})}if(d==="issue:stats:get"){let{issueId:i}=l.payload;return b(r,{type:"issue:stats:result",payload:{issueId:i,result:await Et({repoRoot:a,idOrRef:me(i)})}})}if(d==="diff-stats:get")return b(r,{type:"diff-stats",payload:await Gn({repoRoot:a})});if(d==="swimlane:stats:get"){let{swimlaneId:i}=l.payload;return b(r,{type:"swimlane:stats:result",payload:{swimlaneId:i,result:await kn({repoRoot:a,swimlaneId:i})}})}if(d==="board:overview:get"){let{boardId:i}=l.payload;return b(r,{type:"board:overview:result",payload:{boardId:i,result:wn({boardId:i})}})}if(d==="time-travel:scrub"){let i=await jr({repoRoot:a,targetTime:l.payload.targetTime});return b(r,{type:"time-travel:result",payload:i}),h(i)?void 0:uo()}if(d==="time-travel:checkout-event"){let i=await Dr({repoRoot:a,eventId:l.payload.eventId});return b(r,{type:"time-travel:result",payload:i}),h(i)?void 0:uo()}if(d==="time-travel:live"){let i=await _r({repoRoot:a});return b(r,{type:"time-travel:result",payload:i}),h(i)?void 0:uo()}if(d==="state:get")return Ve(r,a);if(d==="sync"){let i=await It({repoRoot:a});return b(r,{type:"sync:result",payload:i}),o(),h(i)||po(a),Ve(r,a)}if(d==="issue:comment:add"){let i=await Tt({repoRoot:a,...l.payload});return L(r,a,o,"issue:comment:add:result",i)}if(d==="issue:comment:edit"){let i=await fn({repoRoot:a,...l.payload});return L(r,a,o,"issue:comment:edit:result",i)}if(d==="issue:comment:delete"){let i=await Ct({repoRoot:a,...l.payload});return b(r,{type:"issue:comment:delete:result",payload:i}),h(i)?b(r,{type:"failed",payload:i.message}):(o(),Ve(r,a))}if(d==="issue:edit:description"){let i=await Qr({repoRoot:a,...l.payload});return L(r,a,o,"issue:edit:description:result",i)}if(d==="issue:edit:title"){let i=await Zr({repoRoot:a,...l.payload});return L(r,a,o,"issue:edit:title:result",i)}if(d==="issue:tag:add"){let i=await an({repoRoot:a,...l.payload});return L(r,a,o,"issue:tag:add:result",i)}if(d==="issue:tag:remove"){let i=await mn({repoRoot:a,...l.payload});return L(r,a,o,"issue:tag:remove:result",i)}if(d==="contributor:remove"){let i=await dn({repoRoot:a,...l.payload});return L(r,a,o,"contributor:remove:result",i)}if(d==="tag:remove"){let i=await ln({repoRoot:a,...l.payload});return L(r,a,o,"tag:remove:result",i)}if(d==="contributors:get")return b(r,{type:"contributors",boardId:l.payload?.boardId,payload:await un({repoRoot:a,...l.payload})});if(d==="issue:assignee:add"){let i=await cn({repoRoot:a,...l.payload});return L(r,a,o,"issue:assignee:add:result",i)}if(d==="issue:assignee:remove"){let i=await pn({repoRoot:a,...l.payload});return L(r,a,o,"issue:assignee:remove:result",i)}if(d==="issues:list")return b(r,{type:"issues",payload:await Kr({repoRoot:a})});if(d==="issues:create"){let i=await Yr({...l.payload,repoRoot:a});return b(r,{type:"issues:create:result",payload:i}),h(i)?ce({type:"failed",payload:i.message}):(o(),Ve(r,a))}if(d==="board:create"){let i=await en({...l.payload,repoRoot:a});return L(r,a,o,"board:create:result",i)}if(d==="board:edit:title"){let i=await tn({...l.payload,repoRoot:a});return L(r,a,o,"board:edit:title:result",i)}if(d==="swimlane:create"){let i=await on({...l.payload,repoRoot:a});return L(r,a,o,"swimlane:create:result",i)}if(d==="swimlane:edit:title"){let i=await rn({...l.payload,repoRoot:a});return L(r,a,o,"swimlane:edit:title:result",i)}if(d==="board:edit:description"){let i=await Fr({...l.payload,repoRoot:a});return L(r,a,o,"board:edit:description:result",i)}if(d==="swimlane:edit:description"){let i=await Ur({...l.payload,repoRoot:a});return L(r,a,o,"swimlane:edit:description:result",i)}if(d==="swimlane:delete"){let i=await sn({...l.payload,repoRoot:a});return L(r,a,o,"swimlane:delete:result",i)}if(d==="swimlane:move"){if(!l.payload.position)return b(r,{type:"error",message:"Missing move position"});let i=await nn({...l.payload,repoRoot:a});return L(r,a,o,"swimlane:move:result",i)}if(d==="issues:move"){if(!l.payload.position)return b(r,{type:"error",message:"Missing move position"});let i=await Xr({...l.payload,repoRoot:a});return L(r,a,o,"issues:move:result",i)}if(d==="issue:close"){let i=await qr({repoRoot:a,issueId:l.payload.issueId});return L(r,a,o,"issue:close:result",i)}if(d==="issue:reopen"){let i=await Jr({repoRoot:a,issueId:l.payload.issueId});return L(r,a,o,"issue:reopen:result",i)}return b(r,{type:"error",message:"Unknown message type"})},p,g=async l=>{if(p!=="repo:connect"&&p!=="repo:disconnect"&&p!=="repo:preview")return b(r,{type:"error",message:l});b(r,{type:"repos",for:p,payload:await Pe({repoRoot:t.repoRoot}),preview:null,lastAction:{ok:!1,message:l}}),p!=="repo:preview"&&b(r,{type:`${p}:result`,payload:$(l)})};try{let l=JSON.parse(f.toString());p=l?.type;let d=qn(l);if(!d.ok)return await g(d.error);let a=d.message;return Wn.has(a.type)?await de(async()=>ie().mode!=="live"?b(r,{type:"failed",payload:"Read-only while viewing history"}):y(a)):await y(a)}catch(l){return g(l instanceof Error?l.message:String(l))}})})};var Ys=xe.dirname(Ks(import.meta.url)),qs=process.env.IS_LOCAL==="true"?xe.resolve(process.cwd(),"dist/gui"):xe.join(Ys,"gui"),Bt,Js=async()=>(Bt===void 0&&(Bt=await import("node:sea").catch(()=>null)),Bt?.isSea()?Bt:null),M=(e,t,o)=>{e.writeHead(t,{"content-type":"application/json"}),e.end(JSON.stringify(o))},Xs=e=>M(e,409,{isError:!0,message:"Read-only while viewing history"}),Lt=(e,t)=>de(async()=>ie().mode!=="live"?Xs(e):t()),zn=async(e,t=1024*1024)=>new Promise((o,n)=>{let s=[],u=0;e.on("data",r=>{if(u+=r.length,u>t){e.destroy(),n(new Error("Request body too large"));return}s.push(r)}),e.on("end",()=>{let r=Buffer.concat(s).toString("utf8");try{o(r?JSON.parse(r):{})}catch{n(new Error("Invalid JSON body"))}}),e.on("error",n)}),zs=2*1024*1024,Qs={png:"image/png",jpg:"image/jpeg",gif:"image/gif",webp:"image/webp"},Zs=e=>e.endsWith(".html")?"text/html; charset=utf-8":e.endsWith(".js")?"text/javascript; charset=utf-8":e.endsWith(".css")?"text/css; charset=utf-8":e.endsWith(".json")?"application/json; charset=utf-8":e.endsWith(".ico")?"image/x-icon":"application/octet-stream",Qn=new Map,ea=e=>`"${Ws("sha1").update(e).digest("base64url")}"`,ta=async e=>{try{let{size:t,mtimeMs:o}=await ks(e);return`${t}:${o}`}catch{return null}},oa=e=>{try{return decodeURIComponent(e)}catch{return null}},Zn=async(e,t,o)=>{let n=e==="/"?"/index.html":oa(e);if(n===null)return M(o,404,{isError:!0,message:"Not found"});let s=n.replace(/^\/+/,""),u=xe.resolve(qs),r=xe.resolve(u,s),f=xe.relative(u,r);if(f.startsWith("..")||xe.isAbsolute(f))return M(o,403,{isError:!0,message:"Forbidden"});let y=await Js(),p=y?"sea":await ta(r),g=p===null?void 0:Qn.get(f),l=g&&g.stamp===p?g.etag:null;if(l&&t.headers["if-none-match"]===l)return o.writeHead(304,{etag:l,"cache-control":"no-cache"}),o.end();try{let d=y?Buffer.from(y.getAsset(`gui/${f}`)):await ei(r),a=l??ea(d);return p!==null&&Qn.set(f,{stamp:p,etag:a}),o.writeHead(200,{"content-type":Zs(r),etag:a,"cache-control":"no-cache"}),o.end(d)}catch{return M(o,404,{isError:!0,message:`Not found: ${s}`})}},ra=async(e,t=He)=>new Promise((o,n)=>{let s=u=>{let r=y=>{if(e.off("listening",f),y.code==="EADDRINUSE"&&u===t){e.removeListener("error",r),s(0);return}n(y)},f=()=>{e.off("error",r);let y=e.address();if(!y||typeof y=="string"){n(new Error("Unable to resolve address"));return}o(y.port)};e.once("error",r),e.once("listening",f),e.listen(u,"127.0.0.1")};s(t)}),ti=async e=>{Br(!1);let t=0,o={repoRoot:e.repoRoot},n=Vs.createServer((p,g)=>{s(p,g).catch(l=>(logger.error(`[gui] ${p.method} ${p.url}: ${l instanceof Error?l.message:String(l)}`),g.headersSent?g.end():M(g,500,{isError:!0,message:"Internal error"})))});async function s(p,g){let l=new URL(p.url??"/","http://127.0.0.1"),d=On({method:p.method,origin:p.headers.origin,contentType:p.headers["content-type"]},t);if(d)return M(g,d.status,{isError:!0,message:d.message});if(p.method==="GET"&&l.pathname===lo)return M(g,200,{app:mo,repoRoot:Nt(o.repoRoot),version:Y,pid:process.pid});if(l.pathname==="/api/state")return M(g,200,await ee({repoRoot:o.repoRoot}));if(p.method==="POST"&&l.pathname==="/api/comments")try{let a=await zn(p);if(!a.issueId||!a.body?.trim())return M(g,400,{isError:!0,message:"Missing issueId or body"});let i=a.issueId,S=a.body;return await Lt(g,async()=>{let G=await Tt({repoRoot:o.repoRoot,issueId:i,body:S});return h(G)?M(g,400,{isError:!0,message:G.message}):M(g,200,await ee({repoRoot:o.repoRoot}))})}catch(a){return M(g,400,{isError:!0,message:a instanceof Error?a.message:"Unable to add comment"})}if(p.method==="POST"&&l.pathname==="/api/attachments")try{let a=await zn(p,zs);if(!a.issueId||!a.dataBase64)return M(g,400,{isError:!0,message:"Missing issueId or dataBase64"});let i=a.issueId,S=a.dataBase64,G=a.name??"";return await Lt(g,async()=>{let D=await Hr({repoRoot:o.repoRoot,issueId:i,name:G,dataBase64:S});return h(D)?M(g,400,{isError:!0,message:D.message}):M(g,200,{...await ee({repoRoot:o.repoRoot}),attachment:D.value})})}catch(a){return M(g,400,{isError:!0,message:a instanceof Error?a.message:"Unable to add attachment"})}if(p.method==="DELETE"&&l.pathname.startsWith("/api/attachments/")){let a=decodeURIComponent(l.pathname.replace("/api/attachments/",""));return a?Lt(g,async()=>{let i=await kr({repoRoot:o.repoRoot,attachmentId:a});return h(i)?M(g,400,{isError:!0,message:i.message}):M(g,200,await ee({repoRoot:o.repoRoot}))}):M(g,400,{isError:!0,message:"Missing attachment id"})}if(p.method==="GET"&&l.pathname.startsWith("/media/")){let a=decodeURIComponent(l.pathname.replace("/media/","")),i=await Wr({repoRoot:o.repoRoot,fileName:a});if(h(i))return M(g,404,{isError:!0,message:i.message});try{let S=await ei(i.value.filePath);return g.writeHead(200,{"content-type":Qs[i.value.ext]??"application/octet-stream","cache-control":"public, max-age=31536000, immutable"}),g.end(S)}catch{return M(g,404,{isError:!0,message:"Attachment blob not found"})}}if(p.method==="DELETE"&&l.pathname.startsWith("/api/comments/")){let a=decodeURIComponent(l.pathname.replace("/api/comments/",""));return a?Lt(g,async()=>{let i=await Ct({repoRoot:o.repoRoot,commentId:a});return h(i)?M(g,400,{isError:!0,message:i.message}):M(g,200,await ee({repoRoot:o.repoRoot}))}):M(g,400,{isError:!0,message:"Missing comment id"})}return l.pathname.startsWith("/board/")||l.pathname==="/log"?Zn("/",p,g):Zn(l.pathname,p,g)}try{t=await ra(n)}catch(p){return $(p instanceof Error?`Unable to start GUI server: ${p.message}`:`Unable to start GUI server: ${String(p)}`)}let u=Dn({project:o}),r=Mn({project:o,publisher:u,onReposFetch:p=>po(o.repoRoot,p)}),f=_n(u);Xn(n,o,{onStateChanged:()=>r.queueSync(),onSyncSettingsChanged:()=>r.reschedule(),getPort:()=>t}),n.on("close",()=>{r.dispose(),f()});let y=n.address();return!y||typeof y=="string"?(n.close(),$("Unable to resolve GUI server address")):T("Started GUI server",{url:`http://epiq.localhost:${y.port}${e.boardId?`/board/${e.boardId}`:""}`,server:n})};var oi=async e=>{let t=f=>{e.open!==!1&&En()&&Pn(f)},o=rt({});if(h(o))return $(o.message);let n=we();F(n)&&_e(n.value);let s=await Nn(He);if(s&&s.repoRoot===Nt(e.repoRoot)){let f=`http://127.0.0.1:${He}`;return console.log(ao({url:f,repoRoot:e.repoRoot,version:Y,reused:!0})),t(f),T("Reused running GUI",{url:f})}let u=await ti({repoRoot:e.repoRoot,boardId:""});if(h(u))return u;let{url:r}=u.value;return console.log(ao({url:r,repoRoot:e.repoRoot,version:Y,reused:!1})),t(r),T("Started GUI",{url:r})};import{Box as le}from"ink";import N from"react";import{Box as fo,Text as Ke}from"ink";import te,{useEffect as na,useMemo as ia}from"react";import{ulid as sa}from"ulid";var ri=({text:e,match:t,color:o,highlightColor:n=m.secondary,dimColor:s=!1})=>{if(!t)return te.createElement(Ke,{color:o,dimColor:s},e);let u=e.toLowerCase(),r=t.toLowerCase(),f=u.indexOf(r);return f===-1?te.createElement(Ke,{color:o,dimColor:s},e):te.createElement(Ke,{color:o,dimColor:s},e.slice(0,f),te.createElement(Ke,{backgroundColor:n,bold:!0},e.slice(f,f+t.length)),e.slice(f+t.length))},ni=sa(),aa=e=>`${e}`,la=e=>{let{pendingNavTarget:t}=xr();if(!t)return[];let{breadCrumb:o,contextNode:n,selectedNode:s}=t,u=new Set(qo(ut.NONE,{breadCrumb:o,contextNode:n,readOnly:Q().readOnly,selectedNode:s}));return[...new Set(Object.values(ut))].filter(r=>r!=="move").filter(r=>r.length>0).filter(r=>r!==ut.PALETTE).map(r=>{let f=pr(r),y=Er.find(p=>p.intent===f);return{command:r,description:y?.description??`[${r}] Run command`,isAvailable:u.has(r)}}).filter(r=>r.command.toLowerCase().startsWith(e)||e.length>=2&&r.description.toLowerCase().includes(e)).sort((r,f)=>r.isAvailable!==f.isAvailable?r.isAvailable?-1:1:r.command.localeCompare(f.command))},ma=e=>Te.text({id:ni,parentNodeId:e,rank:"000000",name:"Command Palette",readonly:!0,isVirtual:!0}),ca=(e,t,o)=>Te.text({id:aa(e.command),parentNodeId:o,rank:String(t).padStart(6,"0"),name:e.command,disabled:!e.isAvailable,readonly:!0,isVirtual:!0}),go=[],da=e=>{ii();let t=q.createNode(ma(Q().rootNodeId));h(t)||!Ie(t.value)||(go=[t.value,...e.map((o,n)=>ca(o,n,ni)).map(q.createNode).filter(F).map(({value:o})=>o).filter(Ie)],Ce.navigate({contextNode:t.value,selectedIndex:0}))},ii=()=>{let e=go.map(t=>t.id);go=[];for(let t of e)q.deleteNode(t)};function si({width:e,height:t}){let n=lr().value.trim().toLowerCase(),s=ia(()=>la(n),[n]);na(()=>(da(s),()=>{ii()}),[s]);let u=Q().selectedIndex;return te.createElement(fo,{flexDirection:"column",width:e,height:t-2},te.createElement(xt,{height:t-4,itemHeight:3,selectedIndex:u},s.map((r,f)=>{let y=f===u,p=r.isAvailable?m.accent:m.secondary2,g=r.isAvailable?"":"[unavailable] ";return te.createElement(fo,{key:r.command,flexDirection:"column",paddingX:1,borderLeft:!1,borderBottom:!1,borderRight:!1,borderColor:m.secondary,borderStyle:"single"},te.createElement(Ke,{color:p,dimColor:!r.isAvailable},y?"\u276F ":" ",te.createElement(ri,{text:Yo(r.command),match:n,color:p,dimColor:!r.isAvailable})),te.createElement(fo,{paddingLeft:2},te.createElement(ri,{text:g+r.description,match:n.length>=2?n:"",color:y&&r.isAvailable?m.primary:m.secondary2,dimColor:!r.isAvailable})))})))}import{Box as Ea}from"ink";import Dt from"react";import qe from"chalk";import{Box as Ye,Text as ci}from"ink";import be,{useEffect as di,useMemo as ua,useState as ui}from"react";var Ae=["\u2803","\u2806","\u2830","\u2818"],ai=120,li=({isPalette:e,isPending:t,frame:o})=>{if(t){let n=(o%Ae.length+Ae.length)%Ae.length;return Ae[n]}return e?"?":":"},mi=({infoMessage:e,isPending:t})=>t&&e.includes(sr)?"":e;var pi=qe.hex(m.secondary),pa=qe.inverse,fa=qe.inverse.hex(m.secondary2),ga={hint:"",hints:[],overlap:0,remainder:""},gi=({value:e,command:t})=>{if(!t)return null;let o=e.trimStart(),s=e.length-o.length;return e.slice(s,s+t.length)!==t?null:{start:s,end:s+t.length}},ya=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let o=Do(t);return{bg:n=>qe.bgHex(o).black(n),bgCursor:n=>qe.bgHex(o).inverse.black(n)}}return eo(t)},ha=({value:e,command:t,modifier:o})=>{if(!t||!o)return null;let n=gi({value:e,command:t});if(!n)return null;let u=e.slice(n.end).match(/^\s*/)?.[0].length??0,r=n.end+u;return e.slice(r,r+o.length)!==o?null:{start:r,end:r+o.length}},fi=()=>({value:ne.value,cursorPosition:ne.cursorPosition,commandIsPending:ne.commandIsPending,autoCompletion:ne.commandMeta.autoCompletion??ga,infoMessage:ne.commandMeta.infoMessage,validationStatus:ne.commandMeta.validity,command:ne.commandMeta.command,inputString:ne.commandMeta.inputString,modifier:ne.commandMeta.modifier}),xa=(e,t)=>e.value===t.value&&e.cursorPosition===t.cursorPosition&&e.commandIsPending===t.commandIsPending&&e.infoMessage===t.infoMessage&&e.autoCompletion.hint===t.autoCompletion.hint&&e.autoCompletion.overlap===t.autoCompletion.overlap&&e.autoCompletion.remainder===t.autoCompletion.remainder&&e.validationStatus===t.validationStatus&&e.command===t.command&&e.modifier===t.modifier&&e.inputString===t.inputString,yi=({width:e,mode:t})=>{let[o,n]=ui(fi());di(()=>{let B=()=>{let C=fi();n(I=>xa(I,C)?I:C)},E=ar(B);return B(),()=>{E()}},[]);let{value:s,cursorPosition:u,infoMessage:r,commandIsPending:f,autoCompletion:y,command:p,modifier:g,validationStatus:l}=o,d=f&&l===ir.Invalid,a=mi({infoMessage:r,isPending:f}),[i,S]=ui(0);di(()=>{if(!f){S(0);return}let B=setInterval(()=>{S(E=>(E+1)%Ae.length)},ai);return()=>{clearInterval(B)}},[f]);let G=li({isPalette:t===U.PALETTE,isPending:f,frame:i}),D=ua(()=>{let B=Math.max(0,Math.min(u,s.length)),E=gi({value:s,command:p}),C=ha({value:s,command:p,modifier:g}),I=p?eo(p):null,W=ya({command:p,modifier:g}),Se=(V,K)=>{let Qt=E&&K>=E.start&&K<E.end,Zt=C&&K>=C.start&&K<C.end;return Qt&&I?I.fg(V):Zt&&W?W.bg(V):V},je=(V,K)=>{let Qt=E&&K>=E.start&&K<E.end,Zt=C&&K>=C.start&&K<C.end;return Qt&&I?I.fgCursor(V):Zt&&W?W.bgCursor(V):pa(V)},ye=s.slice(0,B),Z=s[B]??" ",De=B<s.length?s.slice(B+1):"",ot=Array.from(ye).map((V,K)=>Se(V,K)).join(""),Ao=je(Z,B),No=Array.from(De).map((V,K)=>Se(V,B+1+K)).join("");if(y.hint){let V=y.hint[y.overlap]??Z;Ao=fa(V),No=pi(y.remainder.slice(1)+De)}return ot+Ao+No},[s,u,y,p,g]);return be.createElement(Ye,{flexDirection:"column",justifyContent:"flex-start"},be.createElement(Ye,{flexDirection:"column",paddingX:1,borderColor:m.secondary,borderStyle:"round",width:e},be.createElement(Ye,{height:1,flexWrap:"nowrap"},be.createElement(Ye,{flexShrink:0},be.createElement(ci,{wrap:"truncate-start"},pi(G),D)),a&&be.createElement(Ye,{flexShrink:1,minWidth:0},be.createElement(ci,{wrap:"truncate",color:d?m.red:m.secondary2},` ${a} `)))))};import{Box as ba,Text as Je}from"ink";import Ne from"react";var hi=" ",va=({keys:e,label:t})=>e.length+1+t.length,Sa=(e,t)=>{let o=[],n=0;for(let s of e){let r=(o.length>0?hi.length:0)+va(s);if(n+r>t-4)break;o.push(s),n+=r}return o},xi=({width:e,availableHints:t})=>{let o=Sa(t,e);return Ne.createElement(ba,{width:e,borderStyle:"round",borderColor:m.secondary,paddingX:1},o.length?Ne.createElement(Je,{wrap:"truncate"},o.map(({keys:s,label:u},r)=>Ne.createElement(Je,{key:`${s}-${u}`},r>0?hi:"",Ne.createElement(Je,{color:m.accent},s),Ne.createElement(Je,{color:m.secondary2}," ",u)))):Ne.createElement(Je,{color:m.secondary2},"\xA0"))};import{Box as wa,Text as Rt}from"ink";import Xe,{useEffect as Ia,useRef as Me,useState as Ta}from"react";var Ca=40,jt=.3,yo="\u2500",bi=1,vi=16,Si=({width:e})=>{let{replay:t}=_(),o=t!==null,n=t?Math.min(1,Math.max(0,t.progress)):0,u=Math.max(4,e-6),r=u*bi,[f,y]=Ta(0),p=Me(n);p.current=n;let g=Me(0),l=Me(0),d=Me(0),a=Me(0),i=Me(0);if(Ia(()=>{if(!o){g.current=0,d.current=0,a.current=0,i.current=0,y(0);return}g.current=p.current,l.current=Date.now(),d.current=p.current;let E=setInterval(()=>{let C=Date.now(),I=p.current;if(I!==d.current){let Z=I-d.current,De=C-l.current;if(Z<0)a.current=0,i.current=0;else if(Z>0&&De>0){let ot=Z/De;a.current=a.current===0?ot:a.current*(1-jt)+ot*jt,i.current=i.current===0?Z:i.current*(1-jt)+Z*jt}g.current=I,l.current=C,d.current=I}let W=C-l.current,Se=Math.min(i.current,a.current*W),je=Math.min(1,g.current+Se),ye=Math.round(je*r);y(Z=>Z===ye?Z:ye)},Ca);return()=>clearInterval(E)},[o,r]),!t)return null;let S=E=>{let C=u>1?E/(u-1):0,I=Math.round(C*(vi-1))/(vi-1);return Go(I)},G=Math.min(u,Math.floor(f/bi)),D=[];for(let E=0;E<G;E++){let C=S(E),I=D[D.length-1];I&&I.color===C?I.text+=yo:D.push({text:yo,color:C})}let B=yo.repeat(Math.max(0,u-G));return Xe.createElement(wa,{width:e,borderStyle:"round",borderColor:m.secondary,paddingX:1,columnGap:1},Xe.createElement(Rt,{color:m.secondary2},"\u25B6"),Xe.createElement(Rt,null,D.map((E,C)=>Xe.createElement(Rt,{key:C,color:E.color},E.text)),Xe.createElement(Rt,{color:m.secondary,dimColor:!0},B)))};var ze=({width:e,mode:t,availableHints:o})=>{let{timeMode:n}=_(),s=t===U.COMMAND_LINE||t===U.PALETTE;return Dt.createElement(Ea,null,s?Dt.createElement(yi,{width:e,mode:t}):n==="replay"?Dt.createElement(Si,{width:e}):Dt.createElement(xi,{width:e,mode:t,availableHints:o}))};import{Box as pe,Text as Be}from"ink";import H,{useEffect as Pa,useMemo as Aa}from"react";import{ulid as wi}from"ulid";var Ot=wi(),Na=()=>[...new Set([...Q().availableActions].map(e=>e.description).filter(e=>e!==void 0))].map(Pr).filter(e=>e!==null).sort(({keys:e},{keys:t})=>e.length===1&&t.length!==1?-1:e.length!==1&&t.length===1?1:e.localeCompare(t,void 0,{sensitivity:"base"})).map(({keys:e,label:t})=>({keys:e,action:t})),Ma=e=>Te.text({id:Ot,parentNodeId:e,rank:"000000",name:"Help",isVirtual:!0,readonly:!0}),Ba=(e,t,o)=>Te.text({id:wi(),parentNodeId:o,rank:String(t).padStart(6,"0"),name:e.keys,readonly:!0,isVirtual:!0}),_t=[],Ii=()=>{let e=_t.filter(o=>o.id!==Ot).map(o=>o.id),t=_t.filter(o=>o.id===Ot).map(o=>o.id);_t=[];for(let o of[...e,...t])q.deleteNode(o)},La=e=>{Ii();let t=q.createNode(Ma(Q().rootNodeId));if(h(t)||!Ie(t.value))return logger.error("Could not attach help nodes");_t=[t.value,...e.map((o,n)=>Ba(o,n,Ot)).map(q.createNode).filter(F).map(({value:o})=>o).filter(Ie)],Ce.navigate({contextNode:t.value,selectedIndex:0})},Ti=({width:e,height:t})=>{let o=Aa(()=>Na(),[]);Pa(()=>(La(o),()=>{Ii()}),[o]);let n=Q().selectedIndex;return H.createElement(pe,{flexDirection:"column",marginTop:3,borderColor:m.secondary,borderStyle:"round",width:e,height:t-2},H.createElement(pe,{paddingX:1,justifyContent:"center"},H.createElement(Be,{color:m.accent},"Help"),H.createElement(Be,{dimColor:!0}," \u2014 navigate with arrows/hjkl, press q to close")),H.createElement(pe,{paddingX:1,marginTop:1},H.createElement(pe,{width:20,justifyContent:"flex-end"},H.createElement(Be,{color:m.secondary},"Key(s)")),H.createElement(pe,{flexGrow:1,width:40,paddingLeft:2},H.createElement(Be,{color:m.secondary},"Action"))),H.createElement(xt,{height:t-7,itemHeight:1,selectedIndex:n},o.map(({keys:s,action:u},r)=>{let f=r===n;return H.createElement(pe,{paddingX:1,key:`${s}-${u}-${r}`,flexDirection:"row"},H.createElement(pe,{width:20,justifyContent:"flex-end"},H.createElement(Be,{color:m.accent},s)),H.createElement(pe,{flexGrow:1,width:40,paddingLeft:2},H.createElement(Be,{color:f?m.primary:m.secondary2},u)))})))};import{Box as Le,Text as k}from"ink";import P,{useEffect as Ra,useState as ho}from"react";var Gt=({index:e,email:t,note:o,noteColor:n})=>P.createElement(Le,null,P.createElement(k,{color:m.accent},e===void 0?" ":` ${e}.`),P.createElement(k,null," ",t),o&&P.createElement(k,{color:n??m.secondary2},` ${o}`)),Ci=({height:e})=>{let[t,o]=ho([]),[n,s]=ho([]),[u,r]=ho(null),{userName:f,gitEmail:y,gitName:p,userId:g}=re();return Ra(()=>{let l=!0;return(async()=>{let a=Ee(),i=oe(process.cwd());if(h(a)||h(i)||!g)return;let S=a.value.emailLinks,G=Ho(S,g);o(G.map(C=>({email:C,others:Uo(S,C).filter(I=>I!==g).map(I=>a.value.contributors[I]?.name??I)})));let D=it(i.value),B=await vt({repoRoot:i.value,stateBranch:h(D)?void 0:D.value,names:[f,p],links:S});if(!l)return;if(h(B)){r(B.message);return}let E=St(B.value);ct(E.map(C=>C.email)),s(E)})(),()=>{l=!1}},[g,f,p,y]),P.createElement(Le,{height:e-4,flexDirection:"column",paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:m.secondary,rowGap:1},P.createElement(Le,null,P.createElement(k,{color:m.accent,bold:!0},f??"Not configured"),P.createElement(k,{color:m.secondary2}," on this board")),u&&P.createElement(k,{color:m.red},u),P.createElement(Le,{flexDirection:"column"},P.createElement(k,{color:m.secondary2},"CLAIMED"),t.length===0?P.createElement(Gt,{email:"Nothing claimed \u2014 your commits show the name git signed them with.",note:""}):t.map(l=>P.createElement(Gt,{key:l.email,email:l.email,note:l.others.length>0?`CONTESTED: also ${l.others.join(", ")}, resolves to nobody`:l.email===y?"your git identity here":void 0,noteColor:l.others.length>0?m.yellow:void 0}))),P.createElement(Le,{flexDirection:"column"},P.createElement(k,{color:m.secondary2},"UNCLAIMED IN THIS HISTORY"),n.length===0?P.createElement(Gt,{email:"Nothing left to claim here."}):n.map(l=>P.createElement(Gt,{key:l.email,email:l.email,note:`${l.commits} commit${l.commits===1?"":"s"} as ${l.names.join(", ")||"unknown"}`}))),P.createElement(Le,{flexDirection:"column"},P.createElement(k,{color:m.secondary2},P.createElement(k,{color:m.accent},"[enter]")," writes a claim for the first into the command line, to confirm or change."),P.createElement(k,{color:m.secondary2},P.createElement(k,{color:m.accent},":config emails")," claims by address,",P.createElement(k,{color:m.accent}," :config emails-unclaim "),"gives one back."),P.createElement(k,{color:m.secondary2},P.createElement(k,{color:m.accent},"[esc]")," to close")))};import ja from"chalk";import{Box as ve,Text as O}from"ink";import A from"react";var Da=8,_a=()=>{let e=Oe({exclude:process.cwd()});return h(e)?[]:e.value.slice(0,Da)},Ei=({width:e,height:t})=>{let o=_a();return A.createElement(ve,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:m.secondary,rowGap:1},A.createElement(O,{color:m.accent,bold:!0},"Initialize project"),A.createElement(O,null,`This folder is not an ${ja.hex(m.accent)("epiq")} project yet.`),A.createElement(O,{color:m.primary},"To start tracking issues here, we need to initialize a new",A.createElement(O,{color:m.primary,backgroundColor:m.secondary}," .epiq/project.json "),"file in this repository."),A.createElement(ve,{marginTop:1,flexDirection:"column"},A.createElement(ve,null,A.createElement(O,{color:m.accent}," "),A.createElement(O,{color:m.primary},"Type "),A.createElement(O,{backgroundColor:m.secondary}," :init "))),A.createElement(ve,{marginTop:1},A.createElement(O,{color:m.secondary2},"This will create, commit and push "),A.createElement(O,{color:m.primary,backgroundColor:m.secondary}," .epiq/project.json ")),o.length>0&&A.createElement(ve,{marginTop:1,flexDirection:"column"},A.createElement(O,{color:m.accent,bold:!0},"Or open a recent project"),o.map((n,s)=>A.createElement(ve,{key:n.projectId},A.createElement(O,{color:m.accent},` ${s+1} `),A.createElement(O,{color:m.primary},mt(n.root)),A.createElement(O,{color:m.secondary2},` ${n.root}`))),A.createElement(ve,{marginTop:1},A.createElement(O,{color:m.accent}," "),A.createElement(O,{color:m.primary},"Type "),A.createElement(O,{backgroundColor:m.secondary}," :open 1 "),A.createElement(O,{color:m.secondary2}," or "),A.createElement(O,{backgroundColor:m.secondary}," :open <path> "))))};import{Box as Ft,Text as X}from"ink";import R from"react";import{Box as $t,Text as ae}from"ink";import J,{useEffect as Oa,useState as Pi}from"react";var Ai=()=>{let[e,t]=Pi(null),[o,n]=Pi(null);return Oa(()=>{let s=!0;return(async()=>{let r=Ee(),f=oe(process.cwd());if(h(r)||h(f))return;let y=it(f.value),{userName:p,gitName:g}=re(),l=await vt({repoRoot:f.value,stateBranch:h(y)?void 0:y.value,names:[p,g],links:r.value.emailLinks});if(!s)return;if(h(l)){n(l.message);return}let d=St(l.value);ct(d.map(a=>a.email)),t(d)})(),()=>{s=!1}},[]),o?J.createElement($t,{marginTop:1},J.createElement(ae,{color:m.red},o)):e===null?null:e.length===0?J.createElement($t,{marginTop:1},J.createElement(ae,{color:m.secondary2},"No unclaimed addresses in this history \u2014 type",J.createElement(ae,{color:m.accent}," :config emails none "),"to move on.")):J.createElement($t,{flexDirection:"column",marginTop:1},e.map(s=>J.createElement(ae,{key:s.email},J.createElement(ae,{color:m.accent}," \xB7 "),J.createElement(ae,null,s.email),J.createElement(ae,{color:m.secondary2},` ${s.commits} commit${s.commits===1?"":"s"} as ${s.names.join(", ")||"unknown"}`))),J.createElement($t,{marginTop:1},J.createElement(ae,{color:m.secondary2},"Claim yours by address, or",J.createElement(ae,{color:m.accent}," none "),"to skip.")))};var Ga=({isDone:e,command:t,value:o,verb:n="Type",hint:s})=>R.createElement(Ft,null,R.createElement(X,{color:m.accent,dimColor:e},e?" \u2714 ":" "),R.createElement(X,{dimColor:e},n," "),R.createElement(X,{backgroundColor:m.secondary,dimColor:e}," "+t+" "),o!==void 0&&R.createElement(R.Fragment,null,R.createElement(X,{dimColor:e}," "),R.createElement(X,{color:m.secondary,dimColor:e},"<"+o+">")),s),$a=(e,t)=>e.length===0?void 0:Vo(e.join(", "),Math.max(12,t-34)),Fa=e=>{if(typeof e=="string")return e;if(typeof e=="boolean")return e?"on":"off"};function xo({width:e,height:t}){let{isSetPreferredEditor:o,isSetUserName:n,userName:s,preferredEditor:u,autoSync:r,isSetAutoSync:f,isSetEmails:y,claimedEmails:p,emailSetupDeclined:g}=dt(),l=[{key:"username",done:n,command:":config username",value:s,message:"First, choose your username."},{key:"editor",done:o,command:":config editor",value:u,message:"Nice. Now pick your editor."},{key:"autosync",done:f,command:":config autosync",value:r,message:"Almost there. Configure auto sync."},{key:"emails",done:y,command:":config emails",value:g?"declined":$a(p,e),message:"Last one. Claim the git addresses whose commits are yours, so the board calls them by your name."}],d=l.findIndex(i=>!i.done),a=d===-1?void 0:l[d];return R.createElement(Ft,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:m.secondary,rowGap:1},R.createElement(X,{color:m.accent,bold:!0},"Welcome! \u{1F539}"),R.createElement(X,null,"Let's get you started - it's a breeze."),R.createElement(X,{color:m.secondary2},"Remember - you can always search available commands by typing:",R.createElement(X,{color:m.accent}," ? ")),a&&R.createElement(X,{color:m.secondary2},a.message),R.createElement(Ft,{flexDirection:"column"},l.map((i,S)=>{if(!(d===-1||S<=d))return null;let D=S===d,B=D&&d===0;return R.createElement(Ft,{key:i.key,flexDirection:"column",marginBottom:1},R.createElement(Ga,{isDone:i.done,command:B?":config us":i.command,value:i.done?Fa(i.value):void 0,verb:D&&!B?"Waiting:":"Type",hint:B?R.createElement(X,{color:m.secondary2}," then ",R.createElement(X,{color:m.accent},"tab")," to auto-complete ",R.createElement(X,{backgroundColor:m.secondary},` ${i.command.split(" ").pop()} `)):void 0}),i.key==="emails"&&!i.done&&R.createElement(Ai,null))})))}import Vt from"chalk";import{Box as Ze,Text as Re}from"ink";import j from"react";import{Box as Ut,Text as Ni}from"ink";import fe from"react";import Ua from"chalk";var Ha=e=>(q.getTag(e)?.name??"").length+3,ka=e=>{let t=q.getContributor(e);return(t?t.name:"").length+3},Mi=({width:e})=>{let{viewMode:t}=re(),o=_(),{breadCrumb:n,contextNode:s,selectedIndex:u,renderedChildrenIndex:r}=o,f=r[s.id]?.[u],y=Nr(f?.id??s.id,"TICKET"),p=F(y)?y.value:void 0,g=(p?.props.tags??[]).filter(I=>q.getTag(I)),l=p?.props.assignees??[],d=p?.parentNodeId?!Mr(s.id,p.parentNodeId)&&t==="dense":!1,a=n.map((I,W)=>{let Se=W===n.length-1,je=gt(I.id),ye=Se?je?.[u]?.title:void 0;return`${W?" / ":""}${I.title??""}${ye?` \u25B8 ${ye}`:""}`}).join(""),i=p?q.getCommentsByIssue(p.id):[],S=i.length?String(i.length).length+11:0,G=d?g.reduce((I,W)=>I+Ha(W),0)+l.reduce((I,W)=>I+ka(W),0)+S:0,D=f?.id!=null&&!(t==="wide"&&lt(f)),B=Math.max(0,e-G),E=a.substring(0,B)+(D?Ua.hex(m.secondary2).dim(` ${me(f.id)}`):""),C=d?[...g.map(I=>fe.createElement(Ut,{key:`tag-${I}`,paddingLeft:1},fe.createElement(yr,{id:I}))),...l.map(I=>fe.createElement(Ut,{key:`assignee-${I}`,paddingLeft:1},fe.createElement(gr,{id:I}))),i.length?fe.createElement(Ut,{key:"comments",paddingLeft:1},fe.createElement(Ni,{color:m.accent},"[",i.length," comment",i.length===1?"":"s","]")):null]:[];return fe.createElement(Ut,{overflow:"hidden",justifyContent:"flex-start",alignItems:"flex-start"},fe.createElement(Ni,{color:m.secondary2},E),C)};import{Box as Wa,Text as Bi}from"ink";import Ht from"react";var Va=({filters:e})=>Ht.createElement(Wa,{columnGap:1},Ht.createElement(Bi,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:o,operator:n})=>Ht.createElement(Bi,{backgroundColor:"black",color:"white"},` ${o}${n}"${t}" `))),Li=Ht.memo(Va);import{Box as Ka,Text as kt}from"ink";import Qe from"react";function Ri(){let{eventLog:e,unappliedEvents:t}=_(),o=e.at(-1)?.id,n=$o(o??""),s=F(n)?bt(n.value):"INVALID DATE";return Qe.createElement(Ka,{paddingLeft:1},Qe.createElement(kt,{backgroundColor:m.accent,color:m.secondary}," Readonly "),Qe.createElement(kt,{color:m.accent}," "+t.length+" edits ago at "+s+"."),Qe.createElement(kt,{color:m.accent}," Resume with "),Qe.createElement(kt,{backgroundColor:m.accent,color:m.secondary}," ",":peek now"," "))}import{Box as Ya,Text as bo}from"ink";import Wt from"react";function ji(){let{replay:e}=_();if(!e)return null;let{appliedCount:t,totalCount:o,currentTime:n}=e;return Wt.createElement(Ya,{paddingRight:2,columnGap:1,justifyContent:"flex-end"},Wt.createElement(bo,{backgroundColor:m.accent,color:m.secondary}," \u25B6 REPLAY "),Wt.createElement(bo,{color:m.secondary2},bt(new Date(n))),Wt.createElement(bo,{color:m.accent},`${t}/${o} edits`))}import vo from"chalk";import{Box as qa,Text as Di}from"ink";import So,{useEffect as Ja,useState as Xa}from"react";var za=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],Qa=150,_i=12,Za=.36;function Oi({syncStatus:e,autoSync:t}){let[o,n]=Xa(0);Ja(()=>{if(e.status!=="syncing"){n(0);return}let f=0,y=setInterval(()=>{f+=1;let p=(Math.sin(f*Za)+1)/2,g=Math.round(p*(_i-1));n(l=>l===g?l:g)},Qa);return()=>clearInterval(y)},[e.status]);let s={synced:" ",failed:"---",offline:"off",syncing:"...",pending:"idle"},r={synced:m.secondary2,failed:m.yellow,offline:m.secondary2,pending:m.secondary2,syncing:Oo(za,o/(_i-1))??""}[e.status];return So.createElement(qa,null,So.createElement(Di,null,vo.hex(m.secondary2).dim(t?"Sync (auto): ":"Sync: ")),So.createElement(Di,null,vo.hex(r)("\u25CF")+vo.hex(m.secondary2).dim(` ${s[e.status].padEnd(4)} `)))}import Hi from"chalk";import{Text as ki}from"ink";import Wi,{useEffect as rl,useState as nl}from"react";import wo from"chalk";var el="https://registry.npmjs.org/epiq/latest",Io=null,Gi=0,tl=1e3*60*60*24,$i=e=>e.replace(/^v/,""),ol=(e,t)=>{let o=$i(e).split(".").map(Number),n=$i(t).split(".").map(Number);for(let s=0;s<Math.max(o.length,n.length);s++){let u=o[s]??0,r=n[s]??0;if(u>r)return 1;if(u<r)return-1}return 0},Fi=async e=>{if(process.env.IS_CI==="true")return{current:"1.2.3",latest:"1.2.3",updateAvailable:!1};if(Io&&Date.now()-Gi<tl)return Io;try{let t=await fetch(el);if(!t.ok)throw new Error(`Failed to fetch latest version: ${t.status}`);let n=(await t.json()).version??null,s={current:e,latest:n,updateAvailable:n?ol(n,e)>0:!1};return Io=s,Gi=Date.now(),s}catch{return{current:e,latest:null,updateAvailable:!1}}},Ui=(e,t)=>{let o=e.split("."),n=t.split("."),s=n.findIndex((u,r)=>u!=o[r]);return n.map((u,r)=>r>=s?wo.hex(m.accent).dim(u):wo.hex(m.secondary).dim(u)).join(wo.hex(m.secondary2).dim("."))};function Vi(){let[e,t]=nl({current:Y,latest:null,updateAvailable:!1});return rl(()=>{let o=!0;return Fi(Y).then(n=>{o&&t(n)}),()=>{o=!1}},[]),!e.updateAvailable||!e.latest?Wi.createElement(ki,{dimColor:!0,color:m.secondary2},Y+" "):Wi.createElement(ki,null,Hi.hex(m.secondary2).dim(Y),Hi.hex(m.accent).dim(" \u2197 "),Ui(Y,e.latest))}function et({filters:e,hideBreadCrumb:t=!1}){let{timeMode:o,syncStatus:n,mode:s,replay:u}=_(),{userName:r,preferredEditor:f,autoSync:y}=re(),p=64,g=process.stdout.columns-p-8,l=t||o==="replay",d=u?Wo(u.currentLabel,Math.max(0,g)):"";return j.createElement(Ze,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},o==="replay"?j.createElement(Ze,{paddingLeft:1},j.createElement(Re,{color:m.secondary2},d)):l?j.createElement(Re,null," "):s===U.PALETTE?j.createElement(Ze,null,j.createElement(Re,{color:m.accent},"Command Palette"),j.createElement(Re,{dimColor:!0,color:m.secondary2}," ","- search, select and press enter")):j.createElement(Ze,{paddingLeft:1},e.length>0?j.createElement(Li,{filters:e}):j.createElement(Mi,{width:g})),o==="live"?j.createElement(Ze,{columnGap:1,paddingRight:2,"max-width":p,overflow:"hidden",justifyContent:"flex-end"},j.createElement(Oi,{autoSync:!!y,syncStatus:n}),j.createElement(Re,null,Vt.hex(m.secondary2).dim("Mode: ")+Vt.hex(m.secondary2).dim(s.padEnd(8," "))," "),j.createElement(Ki,{icon:"@",value:r}),j.createElement(Ki,{icon:"\u276F",value:f}),j.createElement(Vi,null)):"",o==="peek"?j.createElement(Ri,null):"",o==="replay"?j.createElement(ji,null):"")}function Ki({icon:e,value:t}){return j.createElement(Re,null,Vt.dim(e)+Vt.hex(m.accent)(` ${t??"-"} `))}import{Box as il,Text as sl}from"ink";import tt from"react";import{Box as Kt,Text as To}from"ink";import ge from"react";function Co(){let e=_(),t=e.nodes[e.rootNodeId],s=process.stdout.rows-1-3,u=process.stdout.columns||120,r=t?.id?$e(t?.id):[];return ge.createElement(Kt,{flexDirection:"column",height:s,padding:1,borderStyle:"round",borderColor:m.secondary,width:u},ge.createElement(Kt,{padding:1,paddingTop:0,paddingBottom:0},ge.createElement(To,null,"Select a board:")),ge.createElement(Kt,{padding:1,flexDirection:"column"},r.map((f,y)=>{let p=e.contextNode.context==="WORKSPACE"&&e.selectedIndex===y,l=$e(f.id).flatMap(({id:d})=>gt(d)).length;return ge.createElement(Kt,{key:f.id??y},ge.createElement(To,{color:p?m.accent:m.secondary2},ge.createElement(fr,{isSelected:p})),ge.createElement(To,{color:p?m.accent:m.secondary2},f.title," (",l," issues)",f.readonly?" \u{1F512}":""))})))}var al=({contextNode:e,selectedIndex:t,breadCrumb:o,mode:n,viewMode:s,height:u,width:r})=>{let{renderedChildrenIndex:f}=_(),y=o.find(({context:d})=>d==="BOARD"),l=u-1-3;return tt.createElement(il,{flexDirection:"row"},e.context==="WORKSPACE"?tt.createElement(Co,null):y?tt.createElement(hr,{height:l,width:r,swimlanes:(f[y.id]??[]).filter(d=>d!==void 0&&ko(d)),contextNode:e,selectedIndex:t,breadCrumb:o,viewMode:s,mode:n}):tt.createElement(sl,null))},Yi=tt.memo(al);import{useEffect as ll}from"react";var ml=e=>{ll(()=>{if(!e)return;let t,o=!1,n=()=>{if(o)return;let{autoSyncIntervalMs:s,userName:u,preferredEditor:r}=re();r&&u&&s&&(t=setTimeout(()=>{if(o)return;let{readOnly:f,mode:y}=Q();y==="default"&&!f&&ur(),n()},s))};return n(),()=>{o=!0,t&&clearTimeout(t)}},[e])},qi=({autoSync:e})=>(ml(e),null);import{useEffect as cl}from"react";var Ji=()=>{let e=oe(process.cwd());return h(e)?T("No project here",null):st({repoRoot:e.value})},Xi=async()=>{let e=Ji();if(h(e))return $(e.message);if(e.value===null)return T("No project here",null);let t=e.value,o=await pt(t);if(!Ar())return T("State not initialized",null);let n=Ee();if(h(n))return T("State not initialized",null);let{mode:s,readOnly:u,timeMode:r,syncStatus:f,selectedNode:y,contextNode:p}=n.value;if(vr())return T("Project loading",null);let g=Ji();return h(g)||g.value!==t?T("Project changed",null):s!==U.DEFAULT||u||r!=="live"?T("Skipped while not on the live board",null):y?.isVirtual||p?.isVirtual?T("Skipped on a virtual node",null):f?.status==="syncing"?T("Sync in progress",null):o?T("Worktree held by a sync",null):Ge(t)===Jo(t)?T("Log unchanged",null):(nt.debug("[watch] event log moved, reloading state"),dr(t))};var dl=1e3,zi=()=>(cl(()=>Mt(Xi,dl),[]),null);function Eo({width:e,height:t}){let o=_(),{autoSync:n,viewMode:s}=jo(),u=o.filters;if(o.mode===U.HELP)return N.createElement(le,{flexDirection:"column"},N.createElement(Ti,{width:e,height:t}));if(o.mode===U.IDENTITY)return N.createElement(le,{flexDirection:"column"},N.createElement(Ci,{width:e,height:t}));if(o.mode===U.PALETTE)return N.createElement(le,{flexDirection:"column"},N.createElement(et,{filters:u}),N.createElement(si,{width:e,height:t-2}),N.createElement(ze,{width:e,mode:o.mode,availableHints:o.availableHints}));let{isSetupDone:r}=dt(),f=!r,y=r&&!o.hasProjectDefinition;if(f)return N.createElement(le,{flexDirection:"column"},N.createElement(le,{flexDirection:"column"},N.createElement(et,{hideBreadCrumb:!0,filters:u}),N.createElement(xo,{height:t,width:e})),N.createElement(ze,{width:e,mode:o.mode,availableHints:[]}));if(y)return N.createElement(le,{flexDirection:"column"},N.createElement(le,{flexDirection:"column"},N.createElement(et,{hideBreadCrumb:!0,filters:u}),N.createElement(Ei,{height:t,width:e})),N.createElement(ze,{width:e,mode:o.mode,availableHints:[]}));let p=Fo(o.breadCrumb??[],"BOARD");if(F(p)){let g=p.value.id,l=$e(g).length,d=3,a=Math.floor(e/d),i=Math.floor(e/Math.max(l,1));e=Math.min(i,a)*Math.max(l,d)}return N.createElement(le,{flexDirection:"column"},N.createElement(qi,{autoSync:n}),N.createElement(zi,null),N.createElement(le,{flexDirection:"column"},N.createElement(et,{filters:u}),N.createElement(Yi,{width:e,height:t,contextNode:o.contextNode,selectedIndex:o.selectedIndex,breadCrumb:o.breadCrumb,viewMode:s??"dense",mode:o.mode})),N.createElement(ze,{width:e,mode:o.mode,availableHints:o.availableHints}))}import ul from"readline";var Yt,qt,se,pl=new Set([x.MoveCursorLeft,x.EraseInputWord,x.MoveCursorLeftOfWord,x.MoveCursorRight,x.MoveCursorRightOfWord,x.NavToPreviousContainer,x.NavToNextContainer,x.NavPreviousItem,x.NavNextItem,x.NavPreviousItemJump,x.NavNextItemJump,x.SetViewDense,x.SetViewWide,x.Confirm,x.Exit,x.Yank,x.InitCommandLine,x.InitCommandPalette,x.ExitCommandLine,x.CaptureInput,x.EraseInput,x.EraseInputWord,x.HideHelp,x.ViewHelp,x.SetViewDense,x.SetViewWide,x.GetLastCommandFromHistory,x.GetNextCommandFromHistory,x.AutoCompleteCommand]),fl=new Set([x.NavPreviousItem,x.NavNextItem,x.NavPreviousItemJump,x.NavNextItemJump,x.NavToPreviousContainer,x.NavToNextContainer,x.Confirm,x.Exit,x.InitCommandPalette,x.InitMove,x.MoveNextItem,x.MovePreviousItem,x.MoveNextItemJump,x.MovePreviousItemJump,x.MoveToNextContainer,x.MoveToPreviousContainer,x.Delete,x.AddItem,x.EditTitle,x.EditDescription,x.ConfirmMove,x.Edit,x.ViewHelp,x.Yank]),Qi=async e=>{if(e.ctrl&&e.name==="c")return Ce.exit();let{actionIndex:t,mode:o,readOnly:n,timeMode:s}=Q(),u=mr(e,o);if(!u||n&&!pl.has(u)||s==="replay"&&o===U.DEFAULT&&fl.has(u))return;let r=t[o]?.[u];if(r?.action)try{await r.action(r,e)}catch(f){logger.error(f)}},gl=()=>async function(t,o){o.name!=="escape"&&(se&&(clearTimeout(se),se=void 0),await Qi(o))},yl=()=>async function(t){if(t.length===1&&t[0]===27){se&&clearTimeout(se),se=setTimeout(()=>{Qi({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),se=void 0},25);return}se&&(clearTimeout(se),se=void 0)};function Zi(){Yt&&process.stdin.removeListener("keypress",Yt),qt&&process.stdin.removeListener("data",qt),Yt=gl(),qt=yl(),ul.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",qt),process.stdin.on("keypress",Yt)}async function es(){try{let e=rt({});if(h(e))return yt(0,e.message);let t=we();F(t)&&_e(t.value);let o=oe(process.cwd());_e({gitEmail:await Or(process.cwd()),gitName:await Gr(process.cwd())});let n=F(o)?await Sr(o.value):Ir();if(h(n))return n;let s=Po();return h(s)?yt(6,s.message):(Zi(),F(o)&&wr(o.value),T("Booted Epiq",void 0))}catch(e){return yt(0,ht(e))}}br();var vl=`${z.bold("Epiq CLI")}
4
+
5
+ ${z.dim("Boot in directory:")}
6
+ ${z.cyan("$ epiq")}
7
+
8
+ ${z.dim("Launch GUI:")}
9
+ ${z.cyan("$ epiq gui")}
10
+ ${z.cyan("$ epiq gui --no-open")} ${z.dim("no browser")}
11
+
12
+ ${z.dim("Act as somebody other than the configured user:")}
13
+ ${z.cyan("$ epiq --as claude")}
14
+ `,zt=xl(vl,{importMeta:import.meta,version:Y,flags:{init:{type:"boolean",default:!1},as:{type:"string"},open:{type:"boolean",default:!0}}}),Jt=zt.input[0];Jt&&Jt!=="gui"&&(console.error(z.red(`Unknown command: ${Jt}`)),process.exit(1));if(zt.flags.as!==void 0){let e=Mo(zt.flags.as,"--as");h(e)&&(console.error(z.red(e.message)),process.exit(1))}var ts=process.stdout.columns||120,os=process.stdout.rows||20,Xt=null,Sl=e=>{try{return Xt?(Xt.rerender(e),T("Rerendered app",void 0)):(Xt=hl(e),T("Rendered app",void 0))}catch(t){return $(`Unable to render app: ${ht(t)}`)}},Po=()=>Sl(bl.createElement(Eo,{width:ts,height:os}));process.stdout.on("resize",()=>{if(ts=process.stdout.columns||120,os=process.stdout.rows||20,!Xt)return;let e=Po();h(e)&&logger.info(`[boot:resize] ${e.message}`)});if(Jt==="gui"){let e=await oi({repoRoot:process.cwd(),open:zt.flags.open});h(e)&&(console.error(z.red(`Failed to start Epiq GUI:
15
+ ${e.message}`)),process.exitCode=1)}else{console.clear();let e=await es();h(e)&&(logger.info(e.message),console.error(z.red(`Failed to boot Epiq:
16
+ ${e.message}`)),process.exitCode=1)}export{Po as renderApp};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{a as t}from"./chunk-XT55VAG4.js";var r=`epiq-mcp ${t}
2
+ import{a as t}from"./chunk-3A5BVO43.js";var r=`epiq-mcp ${t}
3
3
 
4
4
  Usage: epiq-mcp [name]
5
5
 
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ var o="1.14.0";export{o as a};