epiq 0.2.6 → 0.2.7

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.
Files changed (2) hide show
  1. package/dist/cli.js +27 -27
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,36 +1,36 @@
1
1
  #!/usr/bin/env node
2
- import{render as gd}from"ink";import fd from"meow";import oi from"react";import Za from"chalk";import{Box as de,Text as De}from"ink";import P from"react";import et from"chalk";import{monotonicFactory as Xs,ulid as Ne}from"ulid";import{useSyncExternalStore as zs}from"react";var L={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function Fe(e){return e.context==="TICKET"}var Yn=e=>e.context==="SWIMLANE";var g={INIT:"init",HELP:"help",NEW:"new",TAG:"tag",FILTER:"filter",MOVE:"move",ASSIGN:"assign",DELETE:"delete",RENAME:"rename",CLOSE_ISSUE:"close",RE_OPEN_ISSUE:"reopen",SET_DESCRIPTION:"edit",SET_EDITOR:"set:editor",SET_VIEW:"set:view",SET_USERNAME:"set:username",SYNC:"sync",NONE:""},fe={None:"none",Invalid:"invalid",Valid:"valid"},xe={None:"none",Success:"success",Fail:"fail"},a=e=>({result:xe.Fail,message:e,data:null}),c=(e,t)=>({result:xe.Success,message:e,data:t}),Jn=()=>({result:xe.None,message:"No result",data:null}),l=e=>e.result==="fail",$e=e=>e.result==="success";var p={DEFAULT:"default",MOVE:"move",HELP:"help",COMMAND_LINE:"command-line"};function yt(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;return r}var vt=(e,t)=>t<=0?"":e.length<=t?e:t<=3?"...".slice(0,t):e.slice(0,t-3)+"...",Qn=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var Zn=e=>{let t=new Map;for(let n of e)for(let r=1;r<=n.length;r++){let o=n.slice(0,r),i=t.get(o);i?i.push(n):t.set(o,[n])}return t},er=(e,t)=>t?e.get(t)??[]:[];var tr=new WeakMap,ci=e=>{let t=tr.get(e);return t||(t=Zn(e),tr.set(e,t)),t};var nr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return er(ci(e),r).filter(i=>yt(r,i)>=n)};var rr=({inputToMatch:e,lastWord:t},n)=>{if(t.endsWith(" "))return{hint:"",hints:[],overlap:0,remainder:""};let r=nr({wordList:n,inputToMatch:e,overlapThreshold:1});return li(t,r)},li=(e,t)=>{let n=t[0]??"",r=yt(e.toLowerCase(),n.toLowerCase()),o=n?n+" ":"",i=o.slice(r);return{hint:o,hints:t,overlap:r,remainder:i}};var or=["vi","vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var Ve=24n,mi=Ve*4n,Ct=(1n<<mi)-1n,ui=/^[0-9a-f]+$/;function ir(e){if(!e||!ui.test(e))throw new Error(`Invalid hex rank: ${e}`);return BigInt("0x"+e)}function ht(e,t=Ve){if(e<0n)throw new Error("Negative rank not allowed");return e.toString(16).padStart(Number(t),"0")}function it(e,t){if(!e&&!t)return ht(Ct/2n,Ve);let n=e?ir(e):0n,r=t?ir(t):Ct;if(r<=n)return ht(Ct/2n,Ve);let o=(n+r)/2n;return o===n||o===r?"":ht(o,Ve)}function se(){return ht(Ct/2n,Ve)}var q={workspace:(e,t)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r=!1)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:r,log:[]}),swimlane:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.SWIMLANE,childRenderAxis:"vertical",childNavigationAcrossParents:!0,parentNodeId:n,readonly:!1,log:[]}),field:(e,t,n,r={},o="horizontal")=>({id:e,title:t,rank:se(),isDeleted:!1,props:r,context:L.FIELD,childRenderAxis:o,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.TICKET,childRenderAxis:"vertical",parentNodeId:n,readonly:!1,log:[]}),text:({id:e,name:t,parentNodeId:n,props:r={},readonly:o=!0})=>({id:e,title:t,rank:se(),isDeleted:!1,props:r,context:L.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:o,log:[]})};var k=e=>Object.values(C().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),sr=(e,t)=>e.findIndex(n=>n.id===t),nn=(e,t={at:"end"})=>{if(e.length===0)return c("Resolved rank",se());switch(t.at){case"start":{let n=e[0];return n?c("Resolved rank",it(void 0,n.rank)):a("Unable to resolve first sibling")}case"end":{let n=e[e.length-1];return n?c("Resolved rank",it(n.rank,void 0)):a("Unable to resolve last sibling")}case"before":{let n=sr(e,t.sibling);if(n<0)return a("Sibling not found");let r=n>0?e[n-1]:void 0,o=e[n];return o?c("Resolved rank",it(r?.rank,o.rank)):a("Sibling not found")}case"after":{let n=sr(e,t.sibling);if(n<0)return a("Sibling not found");let r=e[n],o=n<e.length-1?e[n+1]:void 0;return r?c("Resolved rank",it(r.rank,o?.rank)):a("Sibling not found")}}};var Ke=(e,t)=>{let{nodes:n}=C(),r=n[e];if(!r)return a("Node not found");if(r.context===t)return c("Resolved ancestor node",r);let o=r.parentNodeId?n[r.parentNodeId]:void 0;for(;o;){if(o.context===t)return c("Resolved ancestor node",o);o=o.parentNodeId?n[o.parentNodeId]:void 0}return a(`No ancestor found for context: ${t}`)},on=(e,t)=>{let{nodes:n}=C(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},rn=(e,t)=>e?e.readonly?a({move:"Cannot move readonly node",rename:"Cannot rename readonly node",edit:"Cannot edit readonly node"}[t]):null:a("Node not found"),h={deleteNode(e){oe(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=C(),r=n[e];if(!r)return a("Edit target node not found");let o=rn(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return h.updateNode(i),c("Issue description updated",{md:t})},renameNode(e,t){let n=this.getNode(e);if(!n)return a("Rename target node not found");let r=rn(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=C();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=C();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return k(e).find(n=>n.title===t)},moveNode({id:e,parentId:t,position:n={at:"end"},navigate:r=!0}){let{rootNodeId:o}=C(),i=this.getNode(e),s=this.getNode(t);if(!i)return a("Node not found");if(!s)return a("Target parent not found");if(o===e)return a("Cannot move root node");if(e===t)return a("Cannot move node into itself");let d=rn(i,"move");if(d)return d;if(on(t,e))return a("Cannot move node into its own descendant");let m=k(t).filter(y=>y.id!==e),u=nn(m,n);if(l(u))return u;let f={...i,parentNodeId:t,rank:u.data};return r?this.updateNodeAndSelectInParent(f):this.updateNode(f),c("Moved node successfully",f)},tombstoneNode(e){let{nodes:t,currentNodeId:n,rootNodeId:r}=C(),o=this.getNode(e);if(!o)return a("Node not found");if(r===e)return a("Cannot delete root node");let i=new Set,s=u=>{let f=t[u];if(!(!f||i.has(u))){i.add(u);for(let y of k(f.id))s(y.id)}};s(e);let d={...structuredClone(t)};for(let u of i){if(!d[u])return a("Unable to locate node to delete");d[u]={...d[u],isDeleted:!0}}if(!n)return a("Unable to delete undefined");let m=i.has(n)?o.parentNodeId??r:n;return A({nodes:d}),D.navigate({currentNode:d[m],selectedIndex:0}),c("Successfully tomb stoned",o)},createContributor(e){let t=oe(n=>({...n,contributors:{...n.contributors,[e.id]:e}}));return l(t)?a("Unable to create contributor"):c("Created contributor",e)},assign(e,t,n){let r=h.getContributor(t),o=h.getNode(e);if(!o||!r)return a("Unable assign contributor to issue");let i=this.getFieldByTitle(o.id,"Assignees");if(!i)return a("Unable to locate assignees field");if(k(i.id).some(m=>m.props?.value===t))return a("Contributor already assigned");let d=this.createNodeAtPosition(q.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Assigned contributor",d.data)},createTag(e){let t=oe(n=>({...n,tags:{...n.tags,[e.id]:e}}));return l(t)?a("Could not create tag"):c("Tag created",e)},tag(e,t,n){let r=h.getTag(t),o=h.getNode(e);if(!r)return a("Unable to add tag, missing tag");if(!o)return a("Unable to add tag, missing target");let i=this.getFieldByTitle(o.id,"Tags");if(!i)return a("Unable to locate tags field");if(k(i.id).some(m=>m.props?.value===t))return a("Tag already assigned");let d=this.createNodeAtPosition(q.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Tag added",d.data)},createNodeAtPosition(e,t={at:"end"}){if(!e.parentNodeId){let i={...e,rank:se()};return this.createNode(i),c("Created node",i)}let n=k(e.parentNodeId),r=nn(n,t);if(l(r))return r;let o={...e,rank:r.data};return this.createNode(o),c("Created node",o)},createNode(e){let t=oe(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?a("Unable to create node"):c("Node created",e)},lockNode(e){let t=this.getNode(e);if(!t)return a("Failed to locate node");let n={...t,readonly:!0},r=oe(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?a(r.message):c("Locked node",n)},updateNode(e){let t=oe(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},updateNodeAndSelectInParent(e){let t=oe(s=>({...s,nodes:{...s.nodes,[e.id]:e}}));if(l(t))return a(t.message);let n=C(),r=e.parentNodeId?n.nodes[e.parentNodeId]:n.nodes[n.rootNodeId];if(!r)return a("Unable to resolve parent after update");let i=w(r.id).findIndex(({id:s})=>s===e.id);return D.navigate({currentNode:r,selectedIndex:i===-1?0:i}),c("Updated and selected",e)},getContributor(e){return C().contributors[e]},getTag(e){return C().tags[e]},getNode(e){return C().nodes[e]},getSiblings:e=>Object.values(C().nodes).filter(t=>!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank))};var Nt={preferredEditor:null,userName:null,userId:null},ce=()=>Nt,st=e=>(Nt={...Nt,...e},Nt);var Et=()=>{let e=ce(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},ar=()=>!It();var K={bg:"#1a1b26",fg:"#c8d3ff",grayDark:"#2a2f45",gray:"#46507a",grayLight:"#969bb5",cyan:"#88d5ee",cyanSoft:"#8fe6fb",blue:"#5b8cff",magenta:"#a78bfa",magentaSoft:"#c4b5fd",green:"#8fdc8c",yellow:"#f1c27d",red:"#ff7a90",white:"#ffffff"},v={accent:K.cyan,accent2:K.magenta,primary:K.white,secondary:K.grayDark,secondary2:K.grayLight,gray:K.gray,green:K.green,yellow:K.yellow,red:K.red};var x={red:K.red,yellow:K.yellow,green:K.green,blue:K.blue,magenta:K.magenta,cyan:K.cyan},je={urgent:x.red,critical:x.red,important:x.red,blocker:x.red,asap:x.red,immediate:x.red,fail:x.red,failure:x.red,broken:x.red,bug:x.red,error:x.red,incident:x.red,outage:x.red,production:x.red,crash:x.red,security:x.red,warning:x.yellow,warn:x.yellow,risky:x.yellow,risk:x.yellow,attention:x.yellow,pending:x.yellow,review:x.yellow,"needs-review":x.yellow,qa:x.yellow,testing:x.yellow,test:x.yellow,validate:x.yellow,verification:x.yellow,staging:x.yellow,check:x.yellow,"follow-up":x.yellow,followup:x.yellow,waiting:x.yellow,blocked:x.yellow,hold:x.yellow,done:x.green,complete:x.green,completed:x.green,success:x.green,ok:x.green,stable:x.green,resolved:x.green,fixed:x.green,closed:x.green,merged:x.green,released:x.green,deployed:x.green,approved:x.green,verified:x.green,working:x.green,healthy:x.green,pass:x.green,passing:x.green,info:x.blue,information:x.blue,note:x.blue,docs:x.blue,documentation:x.blue,doc:x.blue,guide:x.blue,help:x.blue,explanation:x.blue,detail:x.blue,details:x.blue,context:x.blue,design:x.blue,discussion:x.blue,proposal:x.blue,idea:x.blue,feature:x.magenta,enhancement:x.magenta,improvement:x.magenta,refactor:x.magenta,refactoring:x.magenta,cleanup:x.magenta,optimize:x.magenta,optimization:x.magenta,perf:x.magenta,performance:x.magenta,upgrade:x.magenta,migration:x.magenta,modernize:x.magenta,debt:x.magenta,todo:x.cyan,next:x.cyan,planned:x.cyan,plan:x.cyan,future:x.cyan,backlog:x.cyan,investigate:x.cyan,explore:x.cyan,prototype:x.cyan};var _=e=>{let{currentNode:t}=C(),n=Et().isSetup,r=t.context,o=[g.SYNC,g.HELP,g.SET_VIEW,g.SET_EDITOR,g.SET_USERNAME],i=[g.NEW,g.RENAME,g.DELETE],s=[g.TAG,g.ASSIGN,g.CLOSE_ISSUE,g.RE_OPEN_ISSUE,g.SET_DESCRIPTION],m=[...{WORKSPACE:[...o,...i],BOARD:[g.FILTER,...o,...i],SWIMLANE:[g.FILTER,...o,...i],TICKET:[...o,...i,...s],FIELD:[...o,...s],FIELD_LIST:[...o,...s],TEXT:[...o]}[r||"WORKSPACE"]],u={[g.SYNC]:[],[g.INIT]:[],[g.SET_USERNAME]:[],[g.SET_DESCRIPTION]:["confirm"],[g.DELETE]:["confirm"],[g.RE_OPEN_ISSUE]:["confirm"],[g.MOVE]:["start","confirm","next","previous","to-next","to-previous","cancel"],[g.CLOSE_ISSUE]:["confirm"],[g.FILTER]:["tag","assignee","description","title","clear"],[g.SET_VIEW]:["dense","wide"],[g.SET_EDITOR]:[...or,"vim"],[g.TAG]:[...new Set([...Object.keys(je),...h.getExistingTags()])],[g.ASSIGN]:h.getExistingAssignees(),[g.HELP]:[],[g.RENAME]:[],[g.NEW]:r==="TICKET"||r==="FIELD"||r==="FIELD_LIST"?["issue","swimlane","board"]:r==="SWIMLANE"?["issue","swimlane","board"]:r==="BOARD"?["issue","swimlane","board"]:["board"],[g.NONE]:m};return n?ar()||(u={[g.NONE]:[g.HELP,g.INIT],[g.HELP]:u[g.HELP],[g.INIT]:u[g.INIT]}):u={[g.NONE]:[g.HELP,g.SET_EDITOR,g.SET_USERNAME],[g.SYNC]:u[g.SYNC],[g.HELP]:u[g.HELP],[g.SET_EDITOR]:u[g.SET_EDITOR],[g.SET_USERNAME]:u[g.SET_USERNAME]},u[e]??[]};import ln from"chalk";import ze from"chalk";var an={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},pi=(e,t,n)=>Math.max(t,Math.min(n,e)),sn=(e,t,n)=>e+(t-e)*n,dr=e=>{let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t},gi=(e,t,n)=>{let r=t/100,o=n/100,i=(1-Math.abs(2*o-1))*r,s=e/60,d=i*(1-Math.abs(s%2-1)),m=0,u=0,f=0;s>=0&&s<1?(m=i,u=d):s>=1&&s<2?(m=d,u=i):s>=2&&s<3?(u=i,f=d):s>=3&&s<4?(u=d,f=i):s>=4&&s<5?(m=d,f=i):(m=i,f=d);let y=o-i/2;return[Math.round((m+y)*255),Math.round((u+y)*255),Math.round((f+y)*255)]},fi=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,xi=(e,t,n)=>[Math.round(sn(e[0],t[0],n)),Math.round(sn(e[1],t[1],n)),Math.round(sn(e[2],t[2],n))],at=e=>{let n=dr(e)%360,r=gi(n,an.stringColor.saturation,an.stringColor.lightness);return fi(r)},yi=e=>{let t=an.gradient.stops,n=pi(e,0,1);if(t.length===0)return[0,0,0];if(t.length===1)return t[0];let r=t.length-1,o=n*r,i=Math.min(Math.floor(o),r-1),s=o-i;return xi(t[i],t[i+1],s)},bt=e=>dr(e.toLowerCase().trim())/4294967295,cr=e=>{let t=bt(e);return yi(t)},vi=e=>{let[t,n,r]=cr(e);return{normal:o=>ze.bgRgb(t,n,r).black(o),cursor:o=>ze.bgRgb(t,n,r).white.bold(o)}},dn=e=>{let[t,n,r]=cr(e);return{fg:o=>ze.rgb(t,n,r)(o),fgCursor:o=>ze.rgb(t,n,r).inverse(o),bg:o=>ze.bgRgb(t,n,r).black(o),bgCursor:o=>ze.bgRgb(t,n,r).white.bold(o)}},cn=e=>vi(e).normal(` ${e} `),ie=(e,t=je)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:at(r)};var ye="<ENTER> to confirm",G=(e="",t=[])=>({message:e,validity:fe.Valid,completionWordList:t}),ae=({message:e,completionWordList:t})=>({validity:fe.Invalid,message:e,completionWordList:t}),dt=e=>e.length===0,we=({prefix:e="",wordList:t,postfix:n="",noOfHints:r=2,inputString:o,minLengthForHints:i=1})=>{let m=[...t.filter(Boolean).filter(f=>f.startsWith(o.trim()))].sort((f,y)=>bt(f)-bt(y)).slice(0,r).map(cn),u=m.length>i?m.join(" "):"";return u?`${e}${u}${n}`:""},mn=({modifier:e})=>{let t="confirm";return e===t?G(ye):ae({message:dt(e)?`if you are certain, enter ${cn(t)}`:"",completionWordList:[t]})},Ci=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?G(ye):ae({message:dt(n)?t:"",completionWordList:[]}),hi=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?ae({message:n,completionWordList:[]}):G():ae({message:dt(r)?t:"",completionWordList:[]}),un=({hint:e})=>({modifier:t,inputString:n})=>dt(t)&&dt(n)?ae({message:e,completionWordList:[]}):G(ye),Ni={[g.INIT]:()=>G(ye),[g.FILTER]:e=>{if(e.modifier==="clear")return G();let t=s=>_(g.FILTER).includes(s);if(!e.modifier||!t(e.modifier??""))return ae({message:we({wordList:_(g.FILTER),noOfHints:100,inputString:e.inputString}),completionWordList:_(g.FILTER)});let r=Object.values(C().tags).map(s=>s.name),o=Object.values(C().contributors).map(s=>s.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?ae({message:we({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):G():ae({message:we({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[g.NONE]:e=>e.command?G():ae({message:we({prefix:"commands... ",wordList:_(g.NONE),noOfHints:100,inputString:e.inputString,minLengthForHints:0}),completionWordList:[]}),[g.NEW]:e=>hi({list:_(g.NEW),hint:we({wordList:_(g.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[g.SET_DESCRIPTION]:()=>G(ye),[g.HELP]:()=>G(ye),[g.RENAME]:()=>G(ye),[g.DELETE]:e=>mn(e),[g.CLOSE_ISSUE]:e=>mn(e),[g.RE_OPEN_ISSUE]:e=>mn(e),[g.MOVE]:e=>un({hint:we({prefix:"hey hacker! These commands are blocked for you... ",wordList:_(g.MOVE),noOfHints:10,inputString:e.inputString})})(e),[g.TAG]:e=>{let t=h.getExistingTags().map(n=>` ${ln.bgHex(ie(n))(" "+n+" ")} `).slice(0,10);return un({hint:"tag name like... "+t.join("")})(e)},[g.ASSIGN]:e=>{let t=h.getExistingAssignees().map(n=>` ${ln.bgHex(ie(n))(" "+n+" ")} `).slice(0,10);return un({hint:"assign to... "+t.join("")})(e)},[g.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=_(g.SET_EDITOR);return e.modifier?G(ye):ae({message:we({wordList:t,noOfHints:100,inputString:e.inputString}),completionWordList:[]})},[g.SET_USERNAME]:e=>e.inputString?G():ae({message:`Enter a username. Saved in ${ln.bgBlack("~/.epiqrc")}`,completionWordList:[]}),[g.SET_VIEW]:e=>Ci({list:_(g.SET_VIEW),hint:we({wordList:_(g.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[g.SYNC]:()=>G(ye)},lr=Object.fromEntries(Object.entries(Ni).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var mr=["frontend","backend","infrastructure","architecture","integration","configuration","implementation","application","deployment","environment","framework","platform","service","component","module","gateway","pipeline","containerization","orchestrator","exception","incident","defect","regression","degradation","malfunction","instability","intermittent","reproducibility","reproduction","investigation","triage","workaround","mitigation","remediation","optimization","stabilization","refinement","failure","outage","blocking","criticality","severity","escalation","diagnostics","analysis","resolution","corruption","inconsistency","validation","verification","authorization","authentication","confidentiality","availability","accessibility","reliability","compliance","governance","encryption","decryption","integrity","auditing","traceability","accountability","protection","privileges","permissions","dependency","orchestration","provisioning","synchronization","compatibility","incompatibility","interoperability","observability","instrumentation","telemetry","loadbalancing","discovery","registration","scheduling","coordination","distribution","isolation","virtualization","serialization","deserialization","initialization","instantiation","propagation","aggregation","consolidation","normalization","standardization","transformation","reconciliation","correlation","processing","indexing","partitioning","enrichment","validation","filtering","streaming","batching","concurrency","parallelism","contention","deadlock","throttling","ratelimiting","backpressure","fragmentation","saturation","exhaustion","partitioning","replication","redundancy","failover","deprecation","obsolescence","starvation","overload","underutilization","latency","throughput","refactoring","modularization","encapsulation","abstraction","extensibility","configurability","maintainability","recoverability","sustainability","readability","testability","debuggability","reusability","simplicity","consistency","performance","functionality","requirement","recommendation","improvement","enhancement","clarification","documentation","description","acceptance","criteria","estimation","prioritization","dependency","deliverable","milestone","iteration"];var M={Init:"init",None:"none",ViewHelp:"view-help",Rename:"rename",Edit:"edit",Delete:"delete",Filter:"filter",Move:"move",SetView:"set-view",SetEditor:"set-editor",SetUserName:"set-user-name",NewItem:"add-new-item",TagTicket:"ticket-tag",AssignUserToTicket:"ticket-assign-user",CloseIssue:"close-issue",ReopenIssue:"re-open-issue",Sync:"sync"};var ur=e=>Object.values(g).includes(e),pr=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:s,validity:d,completionWordList:m}=lr[n].validate(n,r,i),u=o==="command"?Object.values(g):n&&e.target==="modifier"?_(n):mr;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:s??"",autoCompletion:t?rr(e,[...m,...u]):{hint:"",hints:[],remainder:"",overlap:0}}};var gr=e=>{let t=e.trimStart(),n=Ii(t),r=(n[0]??"").trimStart().trimEnd(),o=(n[1]??"").trimStart().trimEnd(),i=bi(e),s=ur(r)?r:null,d=s!==null,m=r!=="",u=e.endsWith(" "),f=s?_(s)??[]:[],y=s&&f.includes(o)?o:"",N="word";n.length<=1?N="command":n.length===2&&(N="modifier");let S=Ei(t,s,y);return{raw:e,trimmedStart:t,words:n,firstWord:r,lastWord:i,hasCommand:m,command:s,isCommandKeyword:d,isLastWordCompleted:u,modifier:y,target:N,inputToMatch:i,inputString:S}},Ei=(e,t,n)=>{let r=e;return t&&r.startsWith(t)&&(r=r.slice(t.length)),r=r.replace(/^\s+/,""),n&&r.startsWith(n)&&(r=r.slice(n.length),r=r.replace(/^\s+/,"")),r},Ii=e=>e?e.split(/\s+/):[],bi=e=>e.trimEnd().split(/\s+/).at(-1)??"";var fr=" ",j={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:fe.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},pn=new Set,xr=()=>{for(let e of pn)e()},yr=e=>(pn.add(e),()=>pn.delete(e)),ve=e=>{let n=e(j),r=gr(n.value),o=n.cursorPosition===n.value.length;j={...n,commandMeta:pr(r,o)},xr()},St=({message:e,result:t})=>{let n=structuredClone(j);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,j=n,xr(),c(e,null)},gn=e=>{ve(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},fn=e=>{ve(t=>{let{value:n,cursorPosition:r}=t,o=r;if(e==="left"){for(;o>0&&n[o-1]===" ";)o--;for(;o>0&&n[o-1]!==" ";)o--}else{for(;o<n.length&&n[o]!==" ";)o++;for(;o<n.length&&n[o]===" ";)o++}return{...t,cursorPosition:o}})},vr=()=>{ve(e=>{let t=e.value.slice(e.cursorPosition),n=Math.max(0,e.cursorPosition-1);return{...e,value:e.value.slice(0,n)+t,cursorPosition:n,commandIsPending:!1}})},Cr=()=>{ve(e=>{let{value:t,cursorPosition:n}=e,r=n;for(;r>0&&t[r-1]===" ";)r--;for(;r>0&&t[r-1]!==" ";)r--;let o=t.slice(n);return{...e,value:t.slice(0,r)+o,cursorPosition:r,commandIsPending:!1}})},O=e=>{ve(t=>{let n=Math.max(0,Math.min(t.cursorPosition,t.value.length)),r=t.value.slice(0,n),o=t.value.slice(n),i=e(r,t.commandMeta.autoCompletion),s=i+o,d=Math.max(0,Math.min(i.length,s.length));return{...t,value:s,cursorPosition:d,commandIsPending:!1}})},hr=()=>{ve(e=>({...e,commandIsPending:!0}))},Nr=({addToHistory:e=!0})=>{ve(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),Si()},Er=()=>{ve(e=>{let t=Math.min(e.commandHistoryIndex+1,e.commandHistory.length-1),n=e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},Ir=()=>{ve(e=>{let t=Math.max(e.commandHistoryIndex-1,-1),n=t===-1?"":e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},Si=()=>O(()=>""),le=()=>j,At=()=>{let[e,...t]=j.value.split(fr);return t.join(fr).trim()};var Ai=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",Ti=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",wi=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",br=(e,t)=>{if(Ti(e,e.sequence))return"MoveCursorLeftOfWord";if(wi(e,e.sequence))return"MoveCursorRightOfWord";if(Ai(e,e.sequence))return"EraseInputWord";switch(e.name){case"tab":return"autoCompleteCommand";case"up":return"getLastCommandFromHistory";case"down":return"getNextCommandFromHistory";case"left":return"MoveCursorLeft";case"right":return"MoveCursorRight";case"return":return"confirm";case"backspace":return t?"eraseInput":"exitCommandLine";case"escape":return"exitCommandLine";default:return"captureInput"}};function Mi(e){switch(e.name){case"up":case"down":case"left":case"right":return e.name;case"k":return"up";case"j":return"down";case"h":return"left";case"l":return"right";default:return null}}function Li(e,t,n){let r=C().currentNode.childNavigationAcrossParents;switch(t){case"up":return e==="vertical"?n.prevItem:r?n.prevContainer:null;case"down":return e==="vertical"?n.nextItem:r?n.nextContainer:null;case"left":return e==="horizontal"?n.prevItem:r?n.prevContainer:null;case"right":return e==="horizontal"?n.nextItem:r?n.nextContainer:null}}function Sr(e,t){let n=le();if(e.sequence===":"&&n.value==="")return"initCommandLine";if(t===p.MOVE)switch(e.name){case"m":case"return":return"confirmMove"}if(t===p.COMMAND_LINE)return br(e,n.value);let r=Mi(e);if(r){let o=t===p.MOVE?{prevItem:"movePreviousItem",nextItem:"moveNextItem",prevContainer:"moveToPreviousContainer",nextContainer:"moveToNextContainer"}:{prevItem:"navPreviousItem",nextItem:"navNextItem",prevContainer:"navToPreviousContainer",nextContainer:"navToNextContainer"};return Li(C().currentNode.childRenderAxis,r,o)}if(e.ctrl&&e.name==="c")return"exit";switch(e.name){case"e":return"edit";case"n":return"addItem";case"m":return"initMove";case"d":return"Delete";case"return":return"confirm";case"space":return"confirm";case"v":return C().viewMode==="wide"?"SetViewDense":"SetViewWide";case"q":case"escape":return"exit";case"s":return"sync";default:return null}}var Ar=e=>{let{context:t}=C()?.currentNode;if(!t)return M.None;switch(e){case g.INIT:return M.Init;case g.DELETE:return M.Delete;case g.SET_DESCRIPTION:return M.Edit;case g.HELP:return M.ViewHelp;case g.RE_OPEN_ISSUE:return M.ReopenIssue;case g.CLOSE_ISSUE:return M.CloseIssue;case g.TAG:return M.TagTicket;case g.ASSIGN:return M.AssignUserToTicket;case g.RENAME:return M.Rename;case g.NEW:return M.NewItem;case g.FILTER:return M.Filter;case g.MOVE:return M.Move;case g.SET_USERNAME:return M.SetUserName;case g.SET_EDITOR:return M.SetEditor;case g.SET_VIEW:return M.SetView;case g.SYNC:return M.Sync;default:return M.None}};import{ulid as W}from"ulid";import{spawnSync as Ui}from"node:child_process";import Wi from"node:os";import Lr from"node:path";import{ulid as Hi}from"ulid";import{accessSync as Ri,copyFileSync as Pi,existsSync as Tt,mkdirSync as Tr,readdirSync as wr,readFileSync as Di,renameSync as Bi,rmSync as Fi,statSync as Mr,unlinkSync as ki,writeFileSync as Oi}from"node:fs";import qe from"node:path";var te={writeToFile:(e,t)=>{try{let n=qe.dirname(e);Tt(n)||Tr(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);Oi(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return Di(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=te.readFile(e);return t===null?null:JSON.parse(t)}catch(t){return logger.error(`Failed to read JSON at ${e}:`,t),null}},dirExists:e=>{try{return Tt(e)&&Mr(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Ri(e),!0}catch{return!1}},mkDir:e=>Tr(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=qe.parse(t);for(;;){let r=qe.join(t,e);try{if(Tt(r)&&Mr(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=qe.dirname(t)}return null},readFirstJSON(e){try{if(!te.dirExists(e))return null;let t=wr(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=qe.join(e,t);return te.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return te.dirExists(e)?wr(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{ki(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{Fi(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(qe.dirname(t)),!n?.overwrite&&Tt(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{Bi(e,t)}catch(r){if(r?.code==="EXDEV"){Pi(e,t),this.rmFile(e);return}throw r}}};function _i(){let{preferredEditor:e}=ce(),t=[e,process.env.VISUAL,process.env.EDITOR,"vim","vi","nano"].filter(n=>!!n?.trim());return[...new Set(t)]}function $i(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function Rr(e){let t=Lr.join(Wi.tmpdir(),"epiq");te.mkDir(t);let n=Lr.join(t,Hi());te.writeToFile(n,e??"");let r=_i();for(let o of r){let i=$i(o,n),s=Ui(i,{stdio:"inherit",shell:!0});if(!s.error&&s.status===0){let d=te.readFile(n);if(d==null)return a("Unable to read edited file");let m=d.replace(/\r?\n$/,"");return c("Successfully edited",m)}}return a("Unable to open editor")}import{monotonicFactory as Vi,ulid as wt}from"ulid";var Mt=Vi(),Pr=({name:e,parent:t,userId:n})=>{let r=Mt(),o=Mt(),i=Mt(),s=Mt();return[{id:wt(),userId:n,action:"add.issue",payload:{id:r,parent:t,name:e}},{id:wt(),userId:n,action:"add.field",payload:{id:o,parent:r,name:"Description",val:""}},{id:wt(),userId:n,action:"add.field",payload:{id:i,parent:r,name:"Assignees"}},{id:wt(),userId:n,action:"add.field",payload:{id:s,parent:r,name:"Tags"}}]};var Dr=e=>{let t=e.log??[];for(let n=t.length-1;n>=0;n--){let r=t[n];if(r&&r.action==="close.issue"&&r.payload.id===e.id)return r.payload.parent}return null};var Ki=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[Ge,Lt]=Ki;var R=(e,t)=>a(`${t.split(".").join(" ")+" failed, "+e.toLowerCase()}`),ji={"init.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=q.workspace(n,r);Br(o);let i=h.createNodeAtPosition(o);return l(i)?R(i.message??"Failed to initialize workspace",e):c("Workspace initialized",{action:e,result:i.data})},"add.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=q.workspace(n,r),i=h.createNodeAtPosition(o);return l(i)?R(i.message??"Failed to add workspace",e):c("Added workspace",{action:e,result:i.data})},"add.board":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.board(n,r,o));return l(i)?R(i.message??"Unable to create board",e):c("Added board",{action:e,result:i.data})},"add.swimlane":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.swimlane(n,r,o));return l(i)?R(i.message??"Unable to create swimlane",e):c("Added swimlane",{action:e,result:i.data})},"add.issue":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.ticket(n,r,o));return l(i)?R(i.message??"Unable to create issue",e):c("Added issue",{action:e,result:i.data})},"add.field":({action:e,payload:t})=>{let{id:n,name:r,parent:o,val:i}=t,s=h.createNodeAtPosition(q.field(n,r,o,{value:i},r.includes("Description")?"vertical":"horizontal"));return l(s)?R(s.message??`Unable to create field: ${r}`,e):c("Added field",{action:e,result:s.data})},"edit.title":({action:e,payload:t})=>{let{id:n,name:r}=t;if(!h.getNode(n))return R("Unable to locate node",e);let i=h.renameNode(n,r);return l(i)?R(i.message??"Unable to edit title",e):c("Edited title",{action:e,result:i.data})},"delete.node":({action:e,payload:t})=>{let{id:n}=t,r=h.tombstoneNode(n);return l(r)?R(r.message??"Unable to delete node",e):c("Deleted node",{action:e,result:r.data})},"create.tag":({action:e,payload:t})=>{let{id:n,name:r}=t,o=h.createTag({id:n,name:r});return l(o)?R(o.message??"Unable to create tag",e):c("Tag added",{action:e,result:o.data})},"create.contributor":({action:e,payload:t})=>{let{id:n,name:r}=t,o=h.createContributor({id:n,name:r});return l(o)?R(o.message??"Unable to create contributor",e):c("Contributor created",{action:e,result:o.data})},"tag.issue":({action:e,payload:t})=>{let{id:n,target:r,tagId:o}=t,i=h.tag(r,o,n);return l(i)?R(i.message??"Unable to tag issue",e):c("Issue tagged",{action:e,result:i.data})},"assign.issue":({action:e,payload:t})=>{let{id:n,contributor:r,target:o}=t,i=h.assign(o,r,n);return l(i)?R(i.message??"Unable to assign issue",e):c("Assigned successfully",{action:e,result:i.data})},"move.node":({action:e,payload:t})=>{let{id:n,parent:r,pos:o}=t,i=h.moveNode({id:n,parentId:r,position:o});return l(i)?R(i.message??"Failed to move node",e):c("Moved node",{action:e,result:i.data})},"edit.description":({action:e,payload:t})=>{let{id:n,md:r}=t,o=h.editValue(n,r);return l(o)?R(o.message??"Unable to edit description",e):c("Set node value",{action:e,result:o.data})},"close.issue":({action:e,payload:t})=>{let{id:n}=t,r=h.getNode(n);if(!r)return R("Unable to locate issue",e);if(!Fe(r))return R("Can only close issues",e);let o=h.getNode(Ge);if(!o)return R("Unable to locate target swimlane",e);if(o.id===r.parentNodeId)return R("Cannot close closed issue",e);let s=h.moveNode({id:n,parentId:o.id,navigate:!1});return l(s)?R(s.message??"Unable to close issue",e):c("Issue closed",{action:e,result:s.data})},"reopen.issue":({action:e,payload:t})=>{let{id:n}=t,r=h.getNode(n);if(!r)return R("Unable to locate issue",e);if(!Fe(r))return R("Can only reopen issues",e);let o=h.getNode(Ge);if(!o)return R("Unable to locate closed swimlane",e);if(!(r.parentNodeId===o.id))return R("Issue is not closed",e);let s=Dr(r);if(!s)return R("Unable to resolve previous parent from issue history",e);if(s===o.id)return R("Previous parent resolves to closed swimlane",e);if(!h.getNode(s))return R("Previous parent no longer exists",e);let m=h.moveNode({id:n,parentId:s,navigate:!1});return l(m)?R(m.message??"Unable to reopen issue",e):c("Issue reopened",{action:e,result:m.data})},"lock.node":({action:e,payload:t})=>{let{id:n}=t,r=h.lockNode(n);return l(r)?R(r.message??"Unable to lock node",e):c("Node locked",{action:e,result:r.data})}},zi=(e,t)=>{let n=h.getNode(e);n&&h.updateNode({...n,log:[...n.log??[],t]})},qi=e=>{switch(e.action){case"init.workspace":case"add.workspace":case"add.board":case"add.swimlane":case"add.issue":case"add.field":case"edit.title":case"lock.node":case"delete.node":case"move.node":case"close.issue":case"reopen.issue":return[e.payload.id];case"edit.description":let t=[e.payload.id],n=C().nodes[e.payload.id]?.parentNodeId;return n&&t.push(n),t;case"tag.issue":case"assign.issue":return[e.payload.id,e.payload.target];case"create.tag":case"create.contributor":default:return[]}};function Xe(e,t=!1){let n=ji[e.action],r=n(e);if(l(r))return r;if(!t){let s=[...new Set(qi(e))];for(let d of s)zi(d,e)}let[o,i]=e.userId.split(".");return!o?.length||!i?.length?R("Invalid user ID format",e.action):(h.createContributor({name:i,id:o}),r)}var yn=e=>e.map(t=>Xe(t));import Pt from"node:fs";import ke from"node:path";import{decodeTime as es,monotonicFactory as ts}from"ulid";var Rt=process.env.IS_LOCAL==="true",me=()=>".epiq";import vn from"node:fs";import Cn from"node:path";var Gi=me(),Xi="events",Yi=(e=process.cwd())=>Cn.join(Ye(e),Gi,Xi),Ji=e=>{let t=Object.keys(e).filter(n=>n!=="id");return t.length!==2?a(`Invalid persisted event: expected exactly 2 keys, got ${t.length}`):!t[0]||!(t[0]in e)?a("Invalid persisted event: action key is missing or invalid"):c("Resolved persisted action",t[0])},Qi=e=>{let{userId:t,...n}=e,r=Ji(n);if(l(r))return a(r.message);let o=r.data;if(!o)return a("Action key is undefined");let i=e.id?.[0];if(!i)return a("Persisted event is missing id");let s=n[o];return c("Decoded persisted event",{id:i,action:o,payload:s,userId:t})};function Fr(e=process.cwd()){let t=Yi(e);if(!vn.existsSync(t))return a("No events found");let n=vn.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>Cn.join(t,o)),r=[];for(let o of n){let i=vn.readFileSync(o,"utf8"),s=Cn.basename(o,".jsonl")||"unknown";for(let d of i.split(`
3
- `)){let m=d.trim();if(m)try{let u=JSON.parse(m);r.push({...u,userId:s})}catch{return a(`Failed to parse event from line: ${m}`)}}}return c("All events loaded",Zi(r))}function kr(e=process.cwd()){let t=Fr(e);if(l(t))return a(t.message);let n=[];for(let r of t.data){let o=Qi(r);if(l(o))return a(`Failed to decode event ${r.id?.[0]??"<unknown>"}: ${o.message}`);n.push(o.data)}return c("Loaded merged events",n)}function Or(e=process.cwd()){let t=Fr(e);return l(t)?a(t.message):c("Loaded edge reference",t.data.at(-1)?.id?.[0]??null)}var Zi=e=>{let t=new Map(e.map(d=>[d.id[0],d])),n=new Map;for(let d of e){let m=d.id[1],u=n.get(m)??[];u.push(d),n.set(m,u)}for(let d of n.values())d.sort((m,u)=>{let[f]=m.id,[y]=u.id;return f.localeCompare(y)});let r=[],o=new Set,i=d=>{let m=n.get(d)??[];for(let u of m){let[f]=u.id;o.has(f)||(o.add(f),r.push(u),i(f))}};i(null);let s=[...e].filter(d=>{let[m]=d.id;return!o.has(m)}).sort((d,m)=>{let[u,f]=d.id,[y,N]=m.id,S=f===null||t.has(f),b=N===null||t.has(N);if(S&&!b)return-1;if(!S&&b)return 1;let I=(f??"").localeCompare(N??"");return I!==0?I:u.localeCompare(y)});return[...r,...s]};var Ur=e=>({action:e.action,payload:e.payload});var ns=1,Wr=ts(),rs="events",Hr=e=>e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown",X=()=>{let{userName:e,userId:t}=ce();if(!e)return a("User name not configured");if(!t)return a("User ID not configured");let n=`${Hr(t)}.${Hr(e)}`;return e.trim()?c("Successfully resolved actor ID",n):a("Unable to resolve actor ID from settings or OS user info")},os=e=>Pt.existsSync(ke.join(e,me()))&&Pt.statSync(ke.join(e,me())).isDirectory(),Ye=(e=process.cwd())=>{let t=ke.resolve(e);for(;;){if(os(t))return t;let n=ke.dirname(t);if(n===t)return ke.resolve(e);t=n}},_r=(e=process.cwd())=>ke.join(Ye(e),me(),rs),is=(e=process.cwd())=>{let t=X();return l(t)||!t.data?a("Unable to resolve event log path"):c("Successfully resolved event log path",ke.join(_r(e),`${t.data}.jsonl`))},ss=(e,t)=>({[e.action]:e.payload,v:ns,id:t});function $r(e,t=process.cwd()){try{let n=Ye(t),r=_r(n),o=is(n);if(l(o))return o;Pt.mkdirSync(r,{recursive:!0});let i=Or(n);if(l(i))return a(i.message);let s;if(i.data){let m=es(i.data),u=Math.max(Date.now(),m+1);s=Wr(u)}else s=Wr();let d=ss(Ur(e),[s,i.data]);return Pt.appendFileSync(o.data,`${JSON.stringify(d)}
4
- `,"utf8"),c("Event persisted",{path:o.data,entry:d})}catch(n){let r=n instanceof Error?n.message:"Unknown persist error";return a(`Failed to persist event: ${r}`)}}function Y(e){let t=Xe(e);if(t.result!==xe.Success)return t;let n=$r(e);return l(n)?n:t}function Dt(e){return e.map(t=>Y(t))}import{ulid as Vr}from"ulid";var Je=null,Oe=()=>structuredClone(Je),Qe=e=>Je=e,Kr=()=>{let{currentNode:e,selectedIndex:t}=C(),r=w(e.id)[t];return r?c("Resolved selected child",r):a("Target node not found")};function hn(e){let t=Kr();if(l(t))return t;let{currentNode:n,nodes:r}=C();if(!n.parentNodeId)return a("Missing parent node id");let o=r[n.parentNodeId];if(!o)return a("Missing parent node");let i=k(o.id),s=i.findIndex(({id:y})=>y===n.id);if(s<0)return a("Current node not found among siblings");let d=i[s+e];if(!d)return a("Missing sibling node");let m=X();if(l(m))return a("Unable to resolve user ID");let u=m.data;if(Qe({id:Vr(),userId:u,action:"move.node",payload:{id:t.data.id,parent:d.id,pos:{at:"end"}}}),!Je)return a("Could not materialize move state");let f=Xe(Je,!0);return l(f)?f:c("Node moved successfully",f.data)}function Nn(e){let t=Kr();if(l(t))return t;let{currentNode:n,selectedIndex:r}=C(),i=k(n.id)[r+e];if(!i)return a("Missing sibling node");let s=X();if(l(s))return a("Unable to resolve user ID");let d=s.data;if(Qe({id:Vr(),userId:d,action:"move.node",payload:{id:t.data.id,parent:n.id,pos:{at:e===1?"after":"before",sibling:i.id}}}),!Je)return a("Could not materialize move state");let m=Xe(Je,!0);return l(m)?m:c("Node moved successfully",m.data)}import as from"node:os";import jr from"node:path";var ds={userId:"",userName:"",preferredEditor:""},cs=".epiq",ls="config.json",zr=()=>jr.join(as.homedir(),cs),En=()=>jr.join(zr(),ls),In=()=>{try{return te.mkDir(zr()),c("Ensured ~/.epiq exists",null)}catch{return a("Unable to create ~/.epiq")}},ms=e=>{try{let t=JSON.parse(e);return c("Parsed config",t??{})}catch{return a("Invalid ~/.epiq/config.json JSON")}},qr=()=>{let e=In();if(l(e))return a(e.message);let t=En(),n=te.readFile(t);return n==null||n.trim()===""?c("No config found, using empty config",{}):ms(n)},Gr=e=>{let t=In();if(l(t))return a(t.message);let n=En();try{return te.writeToFile(n,JSON.stringify(e,null,2)+`
5
- `),c("Config written",null)}catch{return a("Unable to write ~/.epiq/config.json")}},bn=e=>{let t=qr();if(l(t))return a("Failed to read existing config");let n={...t.data,...e};return Gr(n)},Xr=()=>{let e=En(),t=In();if(l(t))throw new Error("Unable to create ~/.epiq");if(!(te.readFile(e)!==null)){let d=Gr(ds);if(l(d))throw new Error("Unable to create ~/.epiq/config.json")}let r=qr();if(l(r))throw new Error("Unable to load settings");let{preferredEditor:o,userName:i,userId:s}=r.data;return!i||!s?a("User name or ID not configured in ~/.epiq/config.json"):st({preferredEditor:o,userName:i,userId:s})};var Ze=(e,t)=>{let n=e.find(r=>r.context===t);return n!==void 0?c("Found node",n):a("Unable to find node in breadcrumb")};import{spawn as Qr}from"node:child_process";import{createHash as us}from"node:crypto";import he from"node:fs";import ps from"node:os";import V from"node:path";var Ue=me(),$="epiq-state",Ce="origin",U=({args:e,cwd:t})=>new Promise(n=>{let r=Qr("git",e,{cwd:t,stdio:["ignore","pipe","pipe"]}),o="",i="";r.stdout.setEncoding("utf8"),r.stderr.setEncoding("utf8"),r.stdout.on("data",s=>{o+=s}),r.stderr.on("data",s=>{i+=s}),r.on("error",s=>{n(a([`git ${e.join(" ")}`,s.message].filter(Boolean).join(`
6
- `)))}),r.on("close",s=>{let d=s??1;if(d!==0){n(a([`git ${e.join(" ")}`,i.trim()||o.trim()||"Git command failed"].filter(Boolean).join(`
7
- `)));return}n(c("Git command succeeded",{stdout:o,stderr:i,exitCode:d}))})}),We=({args:e,cwd:t})=>new Promise(n=>{let r=Qr("git",e,{cwd:t,stdio:["ignore","pipe","pipe"]}),o="",i="";r.stdout.setEncoding("utf8"),r.stderr.setEncoding("utf8"),r.stdout.on("data",s=>{o+=s}),r.stderr.on("data",s=>{i+=s}),r.on("error",s=>{n({stdout:o,stderr:s.message,exitCode:1})}),r.on("close",s=>{n({stdout:o,stderr:i,exitCode:s??1})})}),gs=async e=>{if((await We({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Repo already initialized",!1);let n=await U({args:["commit","--allow-empty","-m","[epiq:init]"],cwd:e});return l(n)?a(`Failed to create initial commit
8
- ${n.message}`):c("Created initial commit",!0)},Sn=e=>(he.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)),Zr=e=>{he.existsSync(e)&&he.rmSync(e,{recursive:!0,force:!0})},eo=({from:e,to:t})=>he.existsSync(e)?(Zr(t),he.mkdirSync(V.dirname(t),{recursive:!0}),he.cpSync(e,t,{recursive:!0}),c("Copied directory",void 0)):a(`Source directory not found: ${e}`),fs=async(e=process.cwd())=>{let t=await U({args:["rev-parse","--show-toplevel"],cwd:e});if(l(t))return a("Not inside a Git repository");let n=t.data.stdout.trim();return c("Resolved repo root",n)},xs=async e=>{let t=await U({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return a(t.message);let n=t.data.stdout.trim(),r=V.isAbsolute(n)?n:V.join(e,n);return c("Resolved git dir",r)},Yr=async e=>{let t=await xs(e);if(l(t))return a(t.message);let n=t.data,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD",V.join("rebase-merge"),V.join("rebase-apply")].filter(i=>he.existsSync(V.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},ys=async e=>{let t=await We({args:["diff","--cached","--quiet"],cwd:e});return t.exitCode===0?c("No staged changes",!1):t.exitCode===1?c("Has staged changes",!0):a(t.stderr.trim()||"Unable to inspect staged changes")},vs=e=>us("sha1").update(e).digest("hex").slice(0,12),to=()=>V.join(ps.homedir(),".epiq"),no=()=>V.join(to(),"worktrees"),Cs=e=>{let t=vs(e);return V.join(no(),t)},hs=()=>{let e=Sn(to());if(l(e))return a(e.message);let t=Sn(no());return l(t)?a(t.message):c("Ensured epiq storage",void 0)},An=async({repoRoot:e,remote:t})=>{let r=(await We({args:["remote","get-url",t],cwd:e})).exitCode===0;return c("Checked remote",r)},ro=async({repoRoot:e,remote:t,branch:n})=>{let r=await We({args:["ls-remote","--heads",t,n],cwd:e});if(r.exitCode!==0)return a(r.stderr.trim()||`Unable to inspect remote branch ${t}/${n}`);let o=r.stdout.trim().length>0;return c("Checked remote branch",o)},Ns=async({repoRoot:e,branch:t})=>{let n=await We({args:["show-ref","--verify","--quiet",`refs/heads/${t}`],cwd:e});return n.exitCode===0?c("Local branch exists",!0):n.exitCode===1?c("Local branch missing",!1):a(n.stderr.trim()||`Unable to inspect branch ${t}`)},Es=async({repoRoot:e})=>{let t=await Ns({repoRoot:e,branch:$});if(l(t))return a(t.message);if(t.data)return c("Local board branch already exists",!1);let n=await An({repoRoot:e,remote:Ce});if(l(n))return a(n.message);if(n.data){let i=await ro({repoRoot:e,remote:Ce,branch:$});if(l(i))return a(i.message);if(i.data){let s=await U({args:["branch","--track",$,`${Ce}/${$}`],cwd:e});return l(s)?a(`Failed to create local ${$} from remote
9
- ${s.message}`):c("Created local board branch from remote",!0)}}let r=await U({args:["rev-parse","HEAD"],cwd:e});if(l(r))return a(r.message);let o=await U({args:["branch",$,r.data.stdout.trim()],cwd:e});return l(o)?a(`Failed to create local ${$}
10
- ${o.message}`):c("Created local board branch",!0)},Is=async({repoRoot:e,worktreeRoot:t})=>{let n=await U({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return a(n.message);let r=V.resolve(t),o=n.data.stdout.split(`
11
- `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(i=>V.resolve(i)).includes(r);return c("Checked worktree registration",o)},bs=async({repoRoot:e,worktreeRoot:t})=>{let n=Sn(V.dirname(t));if(l(n))return a(n.message);he.existsSync(t)&&!he.existsSync(V.join(t,".git"))&&Zr(t);let r=await U({args:["worktree","add",t,$],cwd:e});return l(r)?a(`Failed to create board worktree
12
- ${r.message}`):c("Created board worktree",!0)},Ss=async({repoRoot:e,worktreeRoot:t})=>{let n=await Is({repoRoot:e,worktreeRoot:t});return l(n)?a(n.message):n.data?c("Board worktree already exists",!1):bs({repoRoot:e,worktreeRoot:t})},As=async e=>{let t=await U({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});if(l(t))return a(t.message);if(t.data.stdout.trim()===$)return c("Board branch already checked out",!1);let r=await U({args:["checkout",$],cwd:e});return l(r)?a(`Failed to checkout ${$}
13
- ${r.message}`):c("Checked out board branch",!0)},Tn=async e=>{let t=await We({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e}),n=t.exitCode===0&&t.stdout.trim().length>0;return c("Checked upstream",n)},Ts=async e=>{let t=await Tn(e);if(l(t))return a(t.message);if(t.data)return c("Board upstream already configured",!1);let n=await An({repoRoot:e,remote:Ce});if(l(n))return a(n.message);if(!n.data)return c("No remote available for upstream",!1);let r=await ro({repoRoot:e,remote:Ce,branch:$});if(l(r))return a(r.message);if(r.data){let i=await U({args:["branch","--set-upstream-to",`${Ce}/${$}`,$],cwd:e});return l(i)?a(`Failed to set board upstream
14
- ${i.message}`):c("Configured board upstream",!0)}let o=await U({args:["push","-u",Ce,$],cwd:e});return l(o)?a(`Failed to publish board branch
15
- ${o.message}`):c("Published board branch and configured upstream",!0)},ws=async e=>{let t=await An({repoRoot:e,remote:Ce});if(l(t))return a(t.message);if(!t.data)return c("No remote configured, skipped fetch",!1);let n=await U({args:["fetch",Ce,$],cwd:e});return l(n)?a(`Failed to fetch ${$}
16
- ${n.message}`):c("Fetched board remote",!0)},Ms=async e=>{let t=await Tn(e);if(l(t))return a(t.message);if(!t.data)return c("No upstream configured, skipped pull",!1);let n=await U({args:["pull","--rebase"],cwd:e});return l(n)?a(`Failed during board pull --rebase
17
- ${n.message}`):c("Pulled board with rebase",!0)},Ls=({repoRoot:e,worktreeRoot:t})=>{let n=V.join(e,Ue),r=V.join(t,Ue);return eo({from:n,to:r})},Rs=({repoRoot:e,worktreeRoot:t})=>{let n=V.join(t,Ue),r=V.join(e,Ue);return eo({from:n,to:r})},Ps=async e=>{let t=await U({args:["add",Ue],cwd:e});return l(t)?a(`Failed to stage board ${Ue}
18
- ${t.message}`):c("Staged board .epiq",void 0)},Ds=async e=>{let t=await We({args:["diff","--cached","--quiet","--",Ue],cwd:e});return t.exitCode===0?c("No staged board .epiq changes",!1):t.exitCode===1?c("Has staged board .epiq changes",!0):a(t.stderr.trim()||"Unable to inspect staged board .epiq changes")},Jr=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",Bs=async e=>{let t=await U({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?a(t.message):c("Resolved current branch",t.data.stdout.trim())},Fs=async e=>{let t=await U({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?a(t.message):c("Resolved short HEAD sha",t.data.stdout.trim())},ks=async e=>{let t=await Bs(e);if(l(t))return a(t.message);let n=await Fs(e);if(l(n))return a(n.message);let r=Jr(t.data),o=Jr(n.data),i=`[epiq:${r}:${o}]`;return c("Built sync commit message",i)},Os=async({repoRoot:e,worktreeRoot:t})=>{let n=await Ds(t);if(l(n))return a(n.message);if(!n.data)return c("No board .epiq commit needed",null);let r=await ks(e);if(l(r))return a(r.message);let o=await U({args:["commit","-m",r.data],cwd:t});if(l(o))return a(`Failed to commit board .epiq changes
19
- ${o.message}`);let i=await U({args:["rev-parse","HEAD"],cwd:t});return l(i)?a(i.message):c("Created board sync commit",i.data.stdout.trim())},Us=async e=>{let t=await Tn(e);if(l(t))return a(t.message);if(!t.data)return c("No upstream configured, skipped push",!1);let n=await U({args:["push"],cwd:e});return l(n)?a(`Failed during board push
20
- ${n.message}`):c("Pushed board",!0)},Ws=async({repoRoot:e,worktreeRoot:t})=>{let n=!1,r=hs();if(l(r))return a(r.message);let o=await Es({repoRoot:e});if(l(o))return a(o.message);n=n||o.data;let i=await Ss({repoRoot:e,worktreeRoot:t});if(l(i))return a(i.message);n=n||i.data;let s=await As(t);if(l(s))return a(s.message);n=n||s.data;let d=await Ts(t);return l(d)?a(d.message):(n=n||d.data,c("Bootstrapped board storage",n))},oo=async(e=process.cwd())=>{let t=await fs(e);if(l(t))return a(t.message);let n=t.data,r=Cs(n),o=await Yr(n);if(l(o))return a(o.message);if(o.data)return a("Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the current repo");let i=await ys(n);if(l(i))return a(i.message);if(i.data)return a("Cannot run :sync while staged changes exist. Please commit or unstage them first.");let s=await gs(n);if(l(s))return a(s.message);let d=await Ws({repoRoot:n,worktreeRoot:r});if(l(d))return a(d.message);let m=await Yr(r);if(l(m))return a(m.message);if(m.data)return a("Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the board worktree");let u=!1,f,y=!1,N=!1,S=!1,b=d.data,I=await ws(r);if(l(I))return a(I.message);let E=await Ms(r);if(l(E))return a(E.message);y=E.data;let T=Ls({repoRoot:n,worktreeRoot:r});if(l(T))return a(T.message);let F=await Ps(r);if(l(F))return a(F.message);let Q=await Os({repoRoot:n,worktreeRoot:r});if(l(Q))return a(Q.message);Q.data&&(u=!0,f=Q.data);let re=await Us(r);if(l(re))return a([re.message,u&&f?`Local board sync commit exists: ${f}`:""].filter(Boolean).join(`
21
- `));N=re.data;let xt=Rs({repoRoot:n,worktreeRoot:r});return l(xt)?a(xt.message):(S=!0,c("Synced .epiq with board worktree and hydrated local state",{repoRoot:n,worktreeRoot:r,createdCommit:u,commitSha:f,pulled:y,pushed:N,hydrated:S,bootstrapped:b}))};var Hs=e=>Object.values(C().tags).find(t=>t.name===e),_s=e=>Object.values(C().contributors).find(t=>t.name===e),io=[{systemOnly:!0,intent:M.Move,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{modifier:n}=le().commandMeta,{currentNode:r,selectedIndex:o}=C(),i=w(r.id)[o];if(!i)return A({mode:p.DEFAULT}),a("No move target");if(n==="start"){if(i.readonly)return a("Target node is read-only");if(o===-1)return a("No item selected");if(!i.parentNodeId)return a("Target has no parent");let s=w(i.parentNodeId),d=s.findIndex(({id:y})=>y===i.id);if(d===-1)return a("Target not found among siblings");let m=s[d-1],u=s[d+1],f=u!=null?{at:"before",sibling:u.id}:m!=null?{at:"after",sibling:m.id}:{at:"start"};return Qe({id:W(),userId:t,action:"move.node",payload:{id:i.id,parent:i.parentNodeId,pos:f}}),A({mode:p.MOVE}),c("Move initialized",null)}if(n==="next")return A({mode:p.MOVE}),Nn(1);if(n==="previous")return A({mode:p.MOVE}),Nn(-1);if(n==="to-next")return A({mode:p.MOVE}),hn(1);if(n==="to-previous")return A({mode:p.MOVE}),hn(-1);if(n==="confirm"){A({mode:p.DEFAULT});let s=Oe();if(!s)return a("No pending move to confirm");let d=Y(s);return l(d)?d:(Qe(null),c("Moved item",null))}return n==="cancel"?(Qe(null),A({mode:p.DEFAULT}),c("Cancelling move",null)):a("Invalid move modifier")}},{intent:M.Delete,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];return o?Y({id:W(),userId:t,action:"delete.node",payload:{id:o.id}}):a("Unable to resolve child to delete")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Edit,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,n=Ze(C().breadCrumb,"TICKET");if(l(n))return a("Edit target must be an issue");let r=n.data;if(r.readonly)return a("Cannot edit readonly field");let{currentNode:o,selectedIndex:i}=C();if(!w(r.id)[i])return a("No selected field");let d=w(o.id)[i];if(!d)return a("No selected field");if(d.readonly)return a("Cannot edit readonly field");let m=d.props.value;if(typeof m!="string")return a("Selected field is not editable text");let u=Rr(m);if(l(u))return a("Failed to edit field");let f=u.data;return f===m?c("No changes made",null):d.title==="Description"?Y({id:W(),userId:t,action:"edit.description",payload:{id:d.id,md:f}}):d.title==="Title"?Y({id:W(),userId:t,action:"edit.title",payload:{id:d.id,name:f}}):a(`Editing not supported for "${d.title}"`)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Filter,mode:p.COMMAND_LINE,action:()=>{let{modifier:e,inputString:t}=le().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>_(g.FILTER).map(m=>m.split(n)[0]).includes(d))(r))return a("Invalid filter modifier");let s={target:r,operator:"=",value:t.trim()};return oe(d=>({...d,filters:e==="clear"?[]:[...d.filters,s],mode:p.DEFAULT})),c("Viewing help",null)}},{intent:M.ViewHelp,mode:p.COMMAND_LINE,action:()=>(A({mode:p.HELP}),c("Viewing help",null))},{intent:M.CloseIssue,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return a("Unable to close issue, no target found");if(!o.parentNodeId)return a("No target parent found");if(!Fe(o))return a("Cannot close in this context");let i=Y({id:W(),userId:t,action:"close.issue",payload:{id:o.id,parent:o.parentNodeId}});return l(i)?i:c("Viewing help",null)}},{intent:M.ReopenIssue,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return a("Unable to reopen issue, no target found");let i=o.context==="TICKET"?c("Resolved ticket",o):Ke(o.id,"TICKET");if(l(i))return a("Cannot reopen in this context");let s=i.data,d=Y({id:W(),userId:t,action:"reopen.issue",payload:{id:s.id}});return l(d)?d:c("Issue reopened",null)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetUserName,mode:p.COMMAND_LINE,action:()=>{let{userId:e,preferredEditor:t,userName:n}=ce(),r=At()?.trim();if(!r)return a("No username provided");let o=r??n,i=e??W();if(!o||!i)return a("Unable to resolve user name or id");let s=bn({userName:o,userId:i,preferredEditor:t??""});return l(s)?s:(st({userName:o,userId:i}),A({mode:p.DEFAULT}),c(`Username set to "${r}"`,null))}},{intent:M.Init,mode:p.COMMAND_LINE,action:()=>{let e=so();if(l(e))return e;let{rootNodeId:t,nodes:n}=C();return D.navigate({currentNode:n[t],selectedIndex:0}),c("Project initialized",null)}},{intent:M.SetEditor,mode:p.COMMAND_LINE,action:()=>{let e=At()?.trim();if(!e)return a("No editor provided");let t=bn({preferredEditor:e});return l(t)?t:(st({preferredEditor:e}),A({mode:p.DEFAULT}),c(`Editor configuration set to "${e}"`,null))}},{intent:M.NewItem,mode:p.COMMAND_LINE,action:(e,t)=>{let n=X();if(l(n))return a("Unable to resolve user ID");let r=n.data;if(!t.inputString)return a(`provide a name for your ${t.modifier}`);let{breadCrumb:o,currentNode:i,selectedIndex:s}=C(),d=m=>{let u=Y(m);if(l(u))return u;let f=h.getNode(u.data.result.id);if(!f)return a("Created node not found");if(!f.parentNodeId)return u;let y=h.getNode(f.parentNodeId);return y?(D.navigate({currentNode:y,selectedIndex:h.getSiblings(f.parentNodeId).findIndex(({id:N})=>N===f.id)}),u):a("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:m}=C(),u=h.getNode(m);return u?d({id:W(),userId:r,action:"add.board",payload:{id:W(),name:t.inputString,parent:u.id}}):a("Workspace not found")}if(t.modifier==="swimlane"){let m=Ze(o,"BOARD");return l(m)?a("Unable to add swimlane in this context"):d({id:W(),userId:r,action:"add.swimlane",payload:{id:W(),name:t.inputString,parent:m.data.id}})}if(t.modifier==="issue"){let m=w(i.id)[s],u=i.context==="SWIMLANE"?i:i.context==="BOARD"&&m?.context==="SWIMLANE"?m:(()=>{let b=Ze(o,"SWIMLANE");return l(b)?null:b.data})();if(!u)return a("Unable to add issue in this context");let f=Pr({userId:r,name:t.inputString,parent:u.id}),y=Dt(f);if(y.some(b=>l(b)))return a("Issue create failed: "+y.filter(l).map(b=>b.message).filter(Boolean).join(", "));let N=y[0];if(!N||l(N))return a("Issue creation failed");let S=f[0]?.payload.id;return S?(D.navigate({currentNode:u,selectedIndex:h.getSiblings(u.id).findIndex(({id:b})=>b===S)}),c("Issue created",null)):a("Unable to determine ticket id")}return Jn()},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetView,mode:p.COMMAND_LINE,action:()=>{let{commandMeta:e}=le();return e.validity===fe.Invalid?a("Invalid command "+xe):(oe(t=>({...t,viewMode:e.modifier==="wide"?"wide":e.modifier==="dense"?"dense":t.viewMode})),c("View set",null))},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Rename,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return a("Missing node");if(o.readonly)return a("Cannot rename readonly node");let i=At();return i?Y({id:W(),userId:t,action:"edit.title",payload:{id:o.id,name:i}}):a("Provide a new name")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.TagTicket,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=le().commandMeta,o=(n||r).trim();if(!o)return a("Provide a tag");let{selectedIndex:i,currentNode:s}=C(),d=w(s.id)[i];if(!d)return a("Invalid tag target");let m=Ke(d.id,"TICKET");if(l(m))return a("Unable to tag issue in this context");let u=m.data,f=Hs(o),y;if(f)y=f.id;else{let b=W(),I=Y({id:W(),userId:t,action:"create.tag",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=h.getFieldByTitle(u.id,"Tags");return N?w(N.id).some(b=>b.props?.value===y)?a("Already tagged with that tag"):Y({id:W(),userId:t,action:"tag.issue",payload:{id:W(),target:u.id,tagId:y}}):a("Unable to locate tags field")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.AssignUserToTicket,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return a("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=le().commandMeta,o=(n||r).trim();if(!o)return a("Provide an assignee");let{selectedIndex:i,currentNode:s}=C(),d=w(s.id)[i];if(!d)return a("Invalid assign target");let m=Ke(d.id,"TICKET");if(l(m))return a("Unable to assign issue in this context");let u=m.data,f=_s(o),y;if(f)y=f.id;else{let b=W(),I=Y({id:W(),userId:t,action:"create.contributor",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=h.getFieldByTitle(u.id,"Assignees");return N?w(N.id).some(b=>b.props?.value===y)?a("Assignee already assigned"):Y({id:W(),userId:t,action:"assign.issue",payload:{id:W(),target:u.id,contributor:y}}):a("Unable to locate assignees field")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Sync,mode:p.COMMAND_LINE,action:async()=>{O(()=>""),A({syncStatus:{msg:"Syncing",status:"syncing"}});let e=await oo();return l(e)?(A({syncStatus:{msg:e.message,status:"outOfSync"}}),a(`Unable to sync state. ${e.message}`)):(A({syncStatus:{msg:"Synced",status:"synced"},mode:p.DEFAULT}),c("Synced",!0))}}];var ne=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=le();if(!t)return a("No command to confirm");if(!e&&n===fe.Invalid)return a("Invalid command");let i=Ar(t);hr();let s=io.filter(m=>e||m.systemOnly!==!0).find(m=>m.intent===i);if(!s)return St({result:xe.Fail,message:"Command not found",data:null});let d=await s.action(s,{command:t,inputString:o,modifier:r});return l(d)?St(d):(Nr({addToHistory:!e}),s.onSuccess?.(),St(d))};var Bt=[{intent:"exit",mode:p.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move cancel"),ne({isForceExecutedBySystem:!0}))},{intent:"initMove",mode:p.DEFAULT,description:"[m] move init/confirm",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move start"),ne({isForceExecutedBySystem:!0}))},{intent:"confirmMove",mode:p.MOVE,action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move confirm"),ne({isForceExecutedBySystem:!0}))}],Ft=[{intent:"movePreviousItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),O(()=>"move previous"),ne({isForceExecutedBySystem:!0})):a("No pending move")},{intent:"moveNextItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),O(()=>"move next"),ne({isForceExecutedBySystem:!0})):a("No pending move")}],ao=[{intent:"moveToNextContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),O(()=>"move to-next"),ne({isForceExecutedBySystem:!0})):a("No pending move")},{intent:"moveToPreviousContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),O(()=>"move to-previous"),ne({isForceExecutedBySystem:!0})):a("No pending move")}];var co={[L.WORKSPACE]:[...Bt,...Ft],[L.BOARD]:[...Bt,...Ft],[L.SWIMLANE]:[...Bt,...Ft,...ao],[L.TICKET]:[],[L.FIELD]:[],[L.FIELD_LIST]:[],[L.TEXT]:[]};var lo=[{intent:"addItem",mode:p.DEFAULT,description:"[n] new...",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>`${g.NEW} `),c("Adding new item",null))},{intent:"Delete",mode:p.DEFAULT,description:"[d] delete",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>`${g.DELETE} `),c("Deleting item",null))},{intent:"initCommandLine",mode:p.DEFAULT,description:"[:] focus command line",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>""),c("Entering command line mode",null))},{intent:"confirm",mode:p.DEFAULT,description:"[<Enter>] confirm/enter",action:()=>(D.enterChildNode(),c("Entering context",null))},{intent:"exit",mode:p.DEFAULT,description:"[q] exit context",action:()=>(logger.debug("Executing exit action"),D.enterParentNode(),c("Exiting context",null))},{intent:"navPreviousItem",mode:p.DEFAULT,description:"[arrows/hjkl] navigate",action:()=>(D.navigateToPreviousItem(),c("Navigating to previous item",null))},{intent:"navNextItem",mode:p.DEFAULT,action:()=>(D.navigateToNextItem(),c("Navigating to next item",null))},{intent:"navToPreviousContainer",mode:p.DEFAULT,action:()=>(D.navigateToPreviousContainer(),c("Navigating to previous container",null))},{intent:"navToNextContainer",mode:p.DEFAULT,action:()=>(D.navigateToNextContainer(),c("Navigating to next container",null))},{intent:"edit",mode:p.DEFAULT,action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"edit"),ne(),c("Fired command",!0))},{intent:"SetViewDense",mode:p.DEFAULT,description:"[v] view change (wide/dense)",action:()=>(A({viewMode:"dense"}),c("View set",null))},{intent:"SetViewWide",mode:p.DEFAULT,action:()=>(A({viewMode:"wide"}),c("View set",null))},{intent:"sync",mode:p.DEFAULT,description:"[s] sync epiq with remote state branch",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"sync"),ne({isForceExecutedBySystem:!0}),c("Synced",!0))}];var mo=[{intent:"viewHelp",mode:p.DEFAULT,action:()=>(A({mode:p.HELP}),c("Viewing help",null))},{intent:"exit",mode:p.HELP,action:()=>(A({mode:p.DEFAULT}),c("Exiting help",null))},{intent:"confirm",mode:p.COMMAND_LINE,action:()=>(ne(),c("Executing command",null))},{intent:"MoveCursorLeft",mode:p.COMMAND_LINE,action:()=>(gn(-1),c("Moving cursor left",null))},{intent:"MoveCursorRight",mode:p.COMMAND_LINE,action:()=>(gn(1),c("Moving cursor right",null))},{intent:"MoveCursorLeftOfWord",mode:p.COMMAND_LINE,action:()=>(fn("left"),c("Moving cursor left of word",null))},{intent:"MoveCursorRightOfWord",mode:p.COMMAND_LINE,action:()=>(fn("right"),c("Moving cursor right of word",null))},{intent:"exitCommandLine",mode:p.COMMAND_LINE,action:()=>(A({mode:p.DEFAULT}),c("Exiting command line",null))},{intent:"autoCompleteCommand",mode:p.COMMAND_LINE,action:()=>(O((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:"captureInput",mode:p.COMMAND_LINE,action:(e,{sequence:t})=>(O(n=>n+t),c("Capturing input",null))},{intent:"eraseInput",mode:p.COMMAND_LINE,action:()=>(vr(),c("Erasing input",null))},{intent:"EraseInputWord",mode:p.COMMAND_LINE,action:()=>(Cr(),c("Erasing input word",null))},{intent:"getLastCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Er(),c("Getting last command from history",null))},{intent:"getNextCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Ir(),c("Getting next command from history",null))}];import $s from"chalk";var kt=": for command line",uo="q to exit",po=`${$s.hex(v.accent)("m")} to confirm`,wn={[L.WORKSPACE]:[kt],[L.BOARD]:[kt],[L.BOARD+p.COMMAND_LINE]:[kt],[L.SWIMLANE]:[kt],[L.TICKET+p.HELP]:[uo],[L.SWIMLANE+p.HELP]:[uo],[L.TICKET]:[],[L.FIELD]:[],[L.SWIMLANE+p.MOVE]:[po],[L.TICKET+p.MOVE]:[po]};var Ot=e=>e.trim().toLocaleLowerCase(),Vs=(e,t)=>{let n=h.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},Ks=e=>{let{tags:t}=C(),n=h.getFieldByTitle(e,"Tags");return n?k(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},js=e=>{let{contributors:t}=C(),n=h.getFieldByTitle(e,"Assignees");return n?k(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},go=(e,t)=>{let n=t.value;if(!n)return!0;switch(t.target){case"title":return Ot(e.title??"").includes(n);case"description":return Ot(Vs(e.id,"Description")).includes(n);case"tag":return Ks(e.id).map(Ot).some(d=>d.includes(n));case"assignee":return js(e.id).map(Ot).some(d=>d.includes(n));default:return!0}};function fo(e,t,n){let r=t[e];if(!r)return a("buildBreadCrumb(): current node not found");let o=[],i=r;for(;i&&(o.push(i),!(i.id===n||!i.parentNodeId));)i=t[i.parentNodeId];let s=o[o.length-1];return!s||s.id!==n?a("buildBreadCrumb(): node is not connected to root"):(o.reverse(),c("Breadcrumb built",o))}var xo=e=>{let t={};for(let n of e)n.intent&&(t[n.mode]||(t[n.mode]={}),t[n.mode][n.intent]=n);return t};var Ut,Mn=new Set,yo=()=>{for(let e of Mn)e()},qs=e=>(Mn.add(e),()=>Mn.delete(e));function vo(e){let{currentNodeId:t,mode:n,rootNodeId:r,nodes:o,filters:i}=e;if(!t)return a("derive(): currentNodeId is missing");if(!r)return a("derive(): rootNode is missing");if(!o[r])return a("derive(): unable to find root node");let d=o[t];if(!d)return logger.error("Unable to derive state, currentNode not found"),a("Unable to derive state, currentNode not found");let m=fo(t,o,r);if(l(m))return logger.error(m.message),m;let u=m.data,{context:f}=d,y=wn[f+n]??wn[f]??[],N=[...lo,...co[f]??[],...mo],S=xo(N);return c("Derived successfully",{...e,currentNode:d,breadCrumb:u,availableHints:y,availableActions:N,actionIndex:S,renderedChildrenIndex:Gs(o,i)})}var C=()=>(Ut||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),Ut);function Br(e){let t={filters:[],tags:{},contributors:{},viewMode:"dense",mode:p.DEFAULT,nodes:{[e.id]:e},rootNodeId:e.id,currentNodeId:e.id,renderedChildrenIndex:{},selectedIndex:-1,syncStatus:{status:"synced",msg:""}},n=vo(t);return l(n)?n:(Ut=n.data,yo(),c("State initialized",null))}function oe(e){let t=C(),n=e(t),r=vo(n);return l(r)?a(r.message??"Unable to update state"):(Ut=r.data,yo(),c("State updated",null))}var A=e=>oe(t=>({...t,...e}));var H=()=>zs(qs,C,C),Gs=(e,t)=>{let n={};for(let r of Object.values(e))Fe(r)&&t.length>0&&!t.every(o=>go(r,o))||!r.parentNodeId||r.isDeleted||((!r.parentNodeId||!n[r.parentNodeId])&&(n[r.parentNodeId]=[]),n[r.parentNodeId].push(r));for(let r of Object.keys(n))n[r].sort((o,i)=>{let s=e[o.id],d=e[i.id];return!s||!d?0:s.rank.localeCompare(d.rank)});return n},w=e=>C().renderedChildrenIndex[e]??[];var D={exit(){process.exit(0)},enterChildNode(){let e=C(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=w(t.id)[n];!r||t.context==="FIELD"||D.navigate({currentNode:r,selectedIndex:w(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=C();if(!e.parentNodeId){logger.info("Missing parent node id");return}let n=t[e.parentNodeId];if(!n){logger.error("Parent not found");return}let r=w(n.id),o=r.findIndex(({id:s})=>s===e.id),i=r.length===0?-1:o>=0?o:0;D.navigate({currentNode:n,selectedIndex:i})},navigateToNextItem:()=>Co(1),navigateToPreviousItem:()=>Co(-1),navigateToNextContainer:()=>ho(1),navigateToPreviousContainer:()=>ho(-1),navigate:({currentNode:e=C().currentNode,selectedIndex:t})=>{A({currentNodeId:e.id,selectedIndex:t})}},Co=e=>{let t=C(),n=w(t.currentNode.id).length;if(n===0)return;let o=(Math.max(0,t.selectedIndex)+e+n)%n;D.navigate({selectedIndex:o})},ho=e=>{let{currentNode:t,nodes:n,selectedIndex:r}=C();if(!t.childNavigationAcrossParents)return;if(!t.parentNodeId){logger.error("Missing parent node id");return}let o=n[t.parentNodeId];if(!t||!o)return;let i=w(o.id),s=i.findIndex(N=>N.id===t.id);if(s<0)return;let d=i.at(s+e)??i.at(0);if(!d)return;let m=w(d.id),u=Math.max(0,m.length-1),f=Math.min(Math.max(0,r),u),y=m.length?f:-1;D.navigate({currentNode:d,selectedIndex:y})};var Ee="system.actor",ct=Xs(),Me=null;function Ys(){let e=Object.values(C().nodes).find(r=>r.context==="WORKSPACE");if(!e)throw new Error("No workspace found in event log");let[t]=w(e.id),[n]=t?w(t.id):[];if(logger.debug("Boot navigation target:",{workspace:e?.id,firstBoard:t?.id,firstSwimlane:n?.id}),n){let r=C().renderedChildrenIndex?.[n.id]??[];return{currentNode:n,selectedIndex:r.length>0?0:-1}}else return t?{currentNode:t,selectedIndex:0}:e?{currentNode:e,selectedIndex:0}:{currentNode:C().nodes[C().rootNodeId],selectedIndex:0}}function Js(){let e=Ys();D.navigate(e)}function Qs(){let e=ct(),t=ct(),n=ct(),r=ct(),o=ct();return[{id:Ne(),userId:Ee,action:"init.workspace",payload:{id:e,name:"Workspace"}},{id:Ne(),userId:Ee,action:"add.board",payload:{id:t,name:"Default",parent:e}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:n,name:"Todo",parent:t}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:r,name:"Review",parent:t}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:o,name:"Done",parent:t}},{id:Ne(),userId:Ee,action:"add.board",payload:{id:Lt,name:"Closed",parent:e}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:Ge,name:"Closed",parent:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Ge}}]}function It(){return Me!==null}function so(){if(!Me||Me.length===0)return c("No pending default events to persist",null);let t=Dt(Me).filter(l);return t.length>0?a([et.bold.red("Materializing failed"),"",...t.map((n,r)=>`${et.dim.gray(`${r+1}.`)} ${et.dim(n.message)}`),`
2
+ import{render as fd}from"ink";import xd from"meow";import ii from"react";import ed from"chalk";import{Box as ce,Text as Be}from"ink";import P from"react";import nt from"chalk";import{monotonicFactory as Ys,ulid as Ne}from"ulid";import{useSyncExternalStore as qs}from"react";var L={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function ke(e){return e.context==="TICKET"}var Yn=e=>e.context==="SWIMLANE";var g={INIT:"init",HELP:"help",NEW:"new",TAG:"tag",FILTER:"filter",MOVE:"move",ASSIGN:"assign",DELETE:"delete",RENAME:"rename",CLOSE_ISSUE:"close",RE_OPEN_ISSUE:"reopen",SET_DESCRIPTION:"edit",SET_EDITOR:"set:editor",SET_VIEW:"set:view",SET_USERNAME:"set:username",SYNC:"sync",NONE:""},xe={None:"none",Invalid:"invalid",Valid:"valid"},ye={None:"none",Success:"success",Fail:"fail"},s=e=>({result:ye.Fail,message:e,data:null}),c=(e,t)=>({result:ye.Success,message:e,data:t}),Jn=()=>({result:ye.None,message:"No result",data:null}),l=e=>e.result==="fail",Ke=e=>e.result==="success";var p={DEFAULT:"default",MOVE:"move",HELP:"help",COMMAND_LINE:"command-line"};function Ct(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;return r}var ht=(e,t)=>t<=0?"":e.length<=t?e:t<=3?"...".slice(0,t):e.slice(0,t-3)+"...",Qn=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var Zn=e=>{let t=new Map;for(let n of e)for(let r=1;r<=n.length;r++){let o=n.slice(0,r),i=t.get(o);i?i.push(n):t.set(o,[n])}return t},er=(e,t)=>t?e.get(t)??[]:[];var tr=new WeakMap,li=e=>{let t=tr.get(e);return t||(t=Zn(e),tr.set(e,t)),t};var nr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return er(li(e),r).filter(i=>Ct(r,i)>=n)};var rr=({inputToMatch:e,lastWord:t},n)=>{if(t.endsWith(" "))return{hint:"",hints:[],overlap:0,remainder:""};let r=nr({wordList:n,inputToMatch:e,overlapThreshold:1});return mi(t,r)},mi=(e,t)=>{let n=t[0]??"",r=Ct(e.toLowerCase(),n.toLowerCase()),o=n?n+" ":"",i=o.slice(r);return{hint:o,hints:t,overlap:r,remainder:i}};var or=["vi","vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var je=24n,ui=je*4n,Nt=(1n<<ui)-1n,pi=/^[0-9a-f]+$/;function ir(e){if(!e||!pi.test(e))throw new Error(`Invalid hex rank: ${e}`);return BigInt("0x"+e)}function Et(e,t=je){if(e<0n)throw new Error("Negative rank not allowed");return e.toString(16).padStart(Number(t),"0")}function dt(e,t){if(!e&&!t)return Et(Nt/2n,je);let n=e?ir(e):0n,r=t?ir(t):Nt;if(r<=n)return Et(Nt/2n,je);let o=(n+r)/2n;return o===n||o===r?"":Et(o,je)}function se(){return Et(Nt/2n,je)}var q={workspace:(e,t)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r=!1)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:r,log:[]}),swimlane:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.SWIMLANE,childRenderAxis:"vertical",childNavigationAcrossParents:!0,parentNodeId:n,readonly:!1,log:[]}),field:(e,t,n,r={},o="horizontal")=>({id:e,title:t,rank:se(),isDeleted:!1,props:r,context:L.FIELD,childRenderAxis:o,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:L.TICKET,childRenderAxis:"vertical",parentNodeId:n,readonly:!1,log:[]}),text:({id:e,name:t,parentNodeId:n,props:r={},readonly:o=!0})=>({id:e,title:t,rank:se(),isDeleted:!1,props:r,context:L.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:o,log:[]})};var k=e=>Object.values(C().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),sr=(e,t)=>e.findIndex(n=>n.id===t),on=(e,t={at:"end"})=>{if(e.length===0)return c("Resolved rank",se());switch(t.at){case"start":{let n=e[0];return n?c("Resolved rank",dt(void 0,n.rank)):s("Unable to resolve first sibling")}case"end":{let n=e[e.length-1];return n?c("Resolved rank",dt(n.rank,void 0)):s("Unable to resolve last sibling")}case"before":{let n=sr(e,t.sibling);if(n<0)return s("Sibling not found");let r=n>0?e[n-1]:void 0,o=e[n];return o?c("Resolved rank",dt(r?.rank,o.rank)):s("Sibling not found")}case"after":{let n=sr(e,t.sibling);if(n<0)return s("Sibling not found");let r=e[n],o=n<e.length-1?e[n+1]:void 0;return r?c("Resolved rank",dt(r.rank,o?.rank)):s("Sibling not found")}}};var ze=(e,t)=>{let{nodes:n}=C(),r=n[e];if(!r)return s("Node not found");if(r.context===t)return c("Resolved ancestor node",r);let o=r.parentNodeId?n[r.parentNodeId]:void 0;for(;o;){if(o.context===t)return c("Resolved ancestor node",o);o=o.parentNodeId?n[o.parentNodeId]:void 0}return s(`No ancestor found for context: ${t}`)},an=(e,t)=>{let{nodes:n}=C(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},sn=(e,t)=>e?e.readonly?s({move:"Cannot move readonly node",rename:"Cannot rename readonly node",edit:"Cannot edit readonly node"}[t]):null:s("Node not found"),h={deleteNode(e){ne(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=C(),r=n[e];if(!r)return s("Edit target node not found");let o=sn(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return h.updateNode(i),c("Issue description updated",{md:t})},renameNode(e,t){let n=this.getNode(e);if(!n)return s("Rename target node not found");let r=sn(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=C();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=C();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return k(e).find(n=>n.title===t)},moveNode({id:e,parentId:t,position:n={at:"end"},navigate:r=!0}){let{rootNodeId:o}=C(),i=this.getNode(e),a=this.getNode(t);if(!i)return s("Node not found");if(!a)return s("Target parent not found");if(o===e)return s("Cannot move root node");if(e===t)return s("Cannot move node into itself");let d=sn(i,"move");if(d)return d;if(an(t,e))return s("Cannot move node into its own descendant");let m=k(t).filter(y=>y.id!==e),u=on(m,n);if(l(u))return u;let f={...i,parentNodeId:t,rank:u.data};return r?this.updateNodeAndSelectInParent(f):this.updateNode(f),c("Moved node successfully",f)},tombstoneNode(e){let{nodes:t,currentNodeId:n,rootNodeId:r}=C(),o=this.getNode(e);if(!o)return s("Node not found");if(r===e)return s("Cannot delete root node");let i=new Set,a=u=>{let f=t[u];if(!(!f||i.has(u))){i.add(u);for(let y of k(f.id))a(y.id)}};a(e);let d={...structuredClone(t)};for(let u of i){if(!d[u])return s("Unable to locate node to delete");d[u]={...d[u],isDeleted:!0}}if(!n)return s("Unable to delete undefined");let m=i.has(n)?o.parentNodeId??r:n;return A({nodes:d}),D.navigate({currentNode:d[m],selectedIndex:0}),c("Successfully tomb stoned",o)},createContributor(e){let t=ne(n=>({...n,contributors:{...n.contributors,[e.id]:e}}));return l(t)?s("Unable to create contributor"):c("Created contributor",e)},assign(e,t,n){let r=h.getContributor(t),o=h.getNode(e);if(!o||!r)return s("Unable assign contributor to issue");let i=this.getFieldByTitle(o.id,"Assignees");if(!i)return s("Unable to locate assignees field");if(k(i.id).some(m=>m.props?.value===t))return s("Contributor already assigned");let d=this.createNodeAtPosition(q.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Assigned contributor",d.data)},createTag(e){let t=ne(n=>({...n,tags:{...n.tags,[e.id]:e}}));return l(t)?s("Could not create tag"):c("Tag created",e)},tag(e,t,n){let r=h.getTag(t),o=h.getNode(e);if(!r)return s("Unable to add tag, missing tag");if(!o)return s("Unable to add tag, missing target");let i=this.getFieldByTitle(o.id,"Tags");if(!i)return s("Unable to locate tags field");if(k(i.id).some(m=>m.props?.value===t))return s("Tag already assigned");let d=this.createNodeAtPosition(q.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Tag added",d.data)},createNodeAtPosition(e,t={at:"end"}){if(!e.parentNodeId){let i={...e,rank:se()};return this.createNode(i),c("Created node",i)}let n=k(e.parentNodeId),r=on(n,t);if(l(r))return r;let o={...e,rank:r.data};return this.createNode(o),c("Created node",o)},createNode(e){let t=ne(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?s("Unable to create node"):c("Node created",e)},lockNode(e){let t=this.getNode(e);if(!t)return s("Failed to locate node");let n={...t,readonly:!0},r=ne(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?s(r.message):c("Locked node",n)},updateNode(e){let t=ne(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},updateNodeAndSelectInParent(e){let t=ne(a=>({...a,nodes:{...a.nodes,[e.id]:e}}));if(l(t))return s(t.message);let n=C(),r=e.parentNodeId?n.nodes[e.parentNodeId]:n.nodes[n.rootNodeId];if(!r)return s("Unable to resolve parent after update");let i=w(r.id).findIndex(({id:a})=>a===e.id);return D.navigate({currentNode:r,selectedIndex:i===-1?0:i}),c("Updated and selected",e)},getContributor(e){return C().contributors[e]},getTag(e){return C().tags[e]},getNode(e){return C().nodes[e]},getSiblings:e=>Object.values(C().nodes).filter(t=>!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank))};var It={preferredEditor:null,userName:null,userId:null},le=()=>It,ct=e=>(It={...It,...e},It);var bt=()=>{let e=le(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},ar=()=>!St();var K={bg:"#1a1b26",fg:"#c8d3ff",grayDark:"#2a2f45",gray:"#46507a",grayLight:"#969bb5",cyan:"#88d5ee",cyanSoft:"#8fe6fb",blue:"#5b8cff",magenta:"#a78bfa",magentaSoft:"#c4b5fd",green:"#8fdc8c",yellow:"#f1c27d",red:"#ff7a90",white:"#ffffff"},v={accent:K.cyan,accent2:K.magenta,primary:K.white,secondary:K.grayDark,secondary2:K.grayLight,gray:K.gray,green:K.green,yellow:K.yellow,red:K.red};var x={red:K.red,yellow:K.yellow,green:K.green,blue:K.blue,magenta:K.magenta,cyan:K.cyan},qe={urgent:x.red,critical:x.red,important:x.red,blocker:x.red,asap:x.red,immediate:x.red,fail:x.red,failure:x.red,broken:x.red,bug:x.red,error:x.red,incident:x.red,outage:x.red,production:x.red,crash:x.red,security:x.red,warning:x.yellow,warn:x.yellow,risky:x.yellow,risk:x.yellow,attention:x.yellow,pending:x.yellow,review:x.yellow,"needs-review":x.yellow,qa:x.yellow,testing:x.yellow,test:x.yellow,validate:x.yellow,verification:x.yellow,staging:x.yellow,check:x.yellow,"follow-up":x.yellow,followup:x.yellow,waiting:x.yellow,blocked:x.yellow,hold:x.yellow,done:x.green,complete:x.green,completed:x.green,success:x.green,ok:x.green,stable:x.green,resolved:x.green,fixed:x.green,closed:x.green,merged:x.green,released:x.green,deployed:x.green,approved:x.green,verified:x.green,working:x.green,healthy:x.green,pass:x.green,passing:x.green,info:x.blue,information:x.blue,note:x.blue,docs:x.blue,documentation:x.blue,doc:x.blue,guide:x.blue,help:x.blue,explanation:x.blue,detail:x.blue,details:x.blue,context:x.blue,design:x.blue,discussion:x.blue,proposal:x.blue,idea:x.blue,feature:x.magenta,enhancement:x.magenta,improvement:x.magenta,refactor:x.magenta,refactoring:x.magenta,cleanup:x.magenta,optimize:x.magenta,optimization:x.magenta,perf:x.magenta,performance:x.magenta,upgrade:x.magenta,migration:x.magenta,modernize:x.magenta,debt:x.magenta,todo:x.cyan,next:x.cyan,planned:x.cyan,plan:x.cyan,future:x.cyan,backlog:x.cyan,investigate:x.cyan,explore:x.cyan,prototype:x.cyan};var $=e=>{let{currentNode:t}=C(),n=bt().isSetup,r=t.context,o=[g.SYNC,g.HELP,g.SET_VIEW,g.SET_EDITOR,g.SET_USERNAME],i=[g.NEW,g.RENAME,g.DELETE],a=[g.TAG,g.ASSIGN,g.CLOSE_ISSUE,g.RE_OPEN_ISSUE,g.SET_DESCRIPTION],m=[...{WORKSPACE:[...o,...i],BOARD:[g.FILTER,...o,...i],SWIMLANE:[g.FILTER,...o,...i],TICKET:[...o,...i,...a],FIELD:[...o,...a],FIELD_LIST:[...o,...a],TEXT:[...o]}[r||"WORKSPACE"]],u={[g.SYNC]:[],[g.INIT]:[],[g.SET_USERNAME]:[],[g.SET_DESCRIPTION]:["confirm"],[g.DELETE]:["confirm"],[g.RE_OPEN_ISSUE]:["confirm"],[g.MOVE]:["start","confirm","next","previous","to-next","to-previous","cancel"],[g.CLOSE_ISSUE]:["confirm"],[g.FILTER]:["tag","assignee","description","title","clear"],[g.SET_VIEW]:["dense","wide"],[g.SET_EDITOR]:[...or,"vim"],[g.TAG]:[...new Set([...Object.keys(qe),...h.getExistingTags()])],[g.ASSIGN]:h.getExistingAssignees(),[g.HELP]:[],[g.RENAME]:[],[g.NEW]:r==="TICKET"||r==="FIELD"||r==="FIELD_LIST"?["issue","swimlane","board"]:r==="SWIMLANE"?["issue","swimlane","board"]:r==="BOARD"?["issue","swimlane","board"]:["board"],[g.NONE]:m};return n?ar()||(u={[g.NONE]:[g.HELP,g.INIT],[g.HELP]:u[g.HELP],[g.INIT]:u[g.INIT]}):u={[g.NONE]:[g.HELP,g.SET_EDITOR,g.SET_USERNAME],[g.SYNC]:u[g.SYNC],[g.HELP]:u[g.HELP],[g.SET_EDITOR]:u[g.SET_EDITOR],[g.SET_USERNAME]:u[g.SET_USERNAME]},u[e]??[]};import un from"chalk";import Ge from"chalk";var cn={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},gi=(e,t,n)=>Math.max(t,Math.min(n,e)),dn=(e,t,n)=>e+(t-e)*n,dr=e=>{let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t},fi=(e,t,n)=>{let r=t/100,o=n/100,i=(1-Math.abs(2*o-1))*r,a=e/60,d=i*(1-Math.abs(a%2-1)),m=0,u=0,f=0;a>=0&&a<1?(m=i,u=d):a>=1&&a<2?(m=d,u=i):a>=2&&a<3?(u=i,f=d):a>=3&&a<4?(u=d,f=i):a>=4&&a<5?(m=d,f=i):(m=i,f=d);let y=o-i/2;return[Math.round((m+y)*255),Math.round((u+y)*255),Math.round((f+y)*255)]},xi=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,yi=(e,t,n)=>[Math.round(dn(e[0],t[0],n)),Math.round(dn(e[1],t[1],n)),Math.round(dn(e[2],t[2],n))],lt=e=>{let n=dr(e)%360,r=fi(n,cn.stringColor.saturation,cn.stringColor.lightness);return xi(r)},vi=e=>{let t=cn.gradient.stops,n=gi(e,0,1);if(t.length===0)return[0,0,0];if(t.length===1)return t[0];let r=t.length-1,o=n*r,i=Math.min(Math.floor(o),r-1),a=o-i;return yi(t[i],t[i+1],a)},At=e=>dr(e.toLowerCase().trim())/4294967295,cr=e=>{let t=At(e);return vi(t)},Ci=e=>{let[t,n,r]=cr(e);return{normal:o=>Ge.bgRgb(t,n,r).black(o),cursor:o=>Ge.bgRgb(t,n,r).white.bold(o)}},ln=e=>{let[t,n,r]=cr(e);return{fg:o=>Ge.rgb(t,n,r)(o),fgCursor:o=>Ge.rgb(t,n,r).inverse(o),bg:o=>Ge.bgRgb(t,n,r).black(o),bgCursor:o=>Ge.bgRgb(t,n,r).white.bold(o)}},mn=e=>Ci(e).normal(` ${e} `),re=(e,t=qe)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:lt(r)};var ve="<ENTER> to confirm",G=(e="",t=[])=>({message:e,validity:xe.Valid,completionWordList:t}),ae=({message:e,completionWordList:t})=>({validity:xe.Invalid,message:e,completionWordList:t}),mt=e=>e.length===0,we=({prefix:e="",wordList:t,postfix:n="",noOfHints:r=2,inputString:o,minLengthForHints:i=1})=>{let m=[...t.filter(Boolean).filter(f=>f.startsWith(o.trim()))].sort((f,y)=>At(f)-At(y)).slice(0,r).map(mn),u=m.length>i?m.join(" "):"";return u?`${e}${u}${n}`:""},pn=({modifier:e})=>{let t="confirm";return e===t?G(ve):ae({message:mt(e)?`if you are certain, enter ${mn(t)}`:"",completionWordList:[t]})},hi=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?G(ve):ae({message:mt(n)?t:"",completionWordList:[]}),Ni=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?ae({message:n,completionWordList:[]}):G():ae({message:mt(r)?t:"",completionWordList:[]}),gn=({hint:e})=>({modifier:t,inputString:n})=>mt(t)&&mt(n)?ae({message:e,completionWordList:[]}):G(ve),Ei={[g.INIT]:()=>G(ve),[g.FILTER]:e=>{if(e.modifier==="clear")return G();let t=a=>$(g.FILTER).includes(a);if(!e.modifier||!t(e.modifier??""))return ae({message:we({wordList:$(g.FILTER),noOfHints:100,inputString:e.inputString}),completionWordList:$(g.FILTER)});let r=Object.values(C().tags).map(a=>a.name),o=Object.values(C().contributors).map(a=>a.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?ae({message:we({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):G():ae({message:we({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[g.NONE]:e=>e.command?G():ae({message:we({prefix:"commands... ",wordList:$(g.NONE),noOfHints:100,inputString:e.inputString,minLengthForHints:0}),completionWordList:[]}),[g.NEW]:e=>Ni({list:$(g.NEW),hint:we({wordList:$(g.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[g.SET_DESCRIPTION]:()=>G(ve),[g.HELP]:()=>G(ve),[g.RENAME]:()=>G(ve),[g.DELETE]:e=>pn(e),[g.CLOSE_ISSUE]:e=>pn(e),[g.RE_OPEN_ISSUE]:e=>pn(e),[g.MOVE]:e=>gn({hint:we({prefix:"hey hacker! These commands are blocked for you... ",wordList:$(g.MOVE),noOfHints:10,inputString:e.inputString})})(e),[g.TAG]:e=>{let t=h.getExistingTags().map(n=>` ${un.bgHex(re(n))(" "+n+" ")} `).slice(0,10);return gn({hint:"tag name like... "+t.join("")})(e)},[g.ASSIGN]:e=>{let t=h.getExistingAssignees().map(n=>` ${un.bgHex(re(n))(" "+n+" ")} `).slice(0,10);return gn({hint:"assign to... "+t.join("")})(e)},[g.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=$(g.SET_EDITOR);return e.modifier?G(ve):ae({message:we({wordList:t,noOfHints:100,inputString:e.inputString}),completionWordList:[]})},[g.SET_USERNAME]:e=>e.inputString?G():ae({message:`Enter a username. Saved in ${un.bgBlack("~/.epiqrc")}`,completionWordList:[]}),[g.SET_VIEW]:e=>hi({list:$(g.SET_VIEW),hint:we({wordList:$(g.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[g.SYNC]:()=>G(ve)},lr=Object.fromEntries(Object.entries(Ei).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var mr=["frontend","backend","infrastructure","architecture","integration","configuration","implementation","application","deployment","environment","framework","platform","service","component","module","gateway","pipeline","containerization","orchestrator","exception","incident","defect","regression","degradation","malfunction","instability","intermittent","reproducibility","reproduction","investigation","triage","workaround","mitigation","remediation","optimization","stabilization","refinement","failure","outage","blocking","criticality","severity","escalation","diagnostics","analysis","resolution","corruption","inconsistency","validation","verification","authorization","authentication","confidentiality","availability","accessibility","reliability","compliance","governance","encryption","decryption","integrity","auditing","traceability","accountability","protection","privileges","permissions","dependency","orchestration","provisioning","synchronization","compatibility","incompatibility","interoperability","observability","instrumentation","telemetry","loadbalancing","discovery","registration","scheduling","coordination","distribution","isolation","virtualization","serialization","deserialization","initialization","instantiation","propagation","aggregation","consolidation","normalization","standardization","transformation","reconciliation","correlation","processing","indexing","partitioning","enrichment","validation","filtering","streaming","batching","concurrency","parallelism","contention","deadlock","throttling","ratelimiting","backpressure","fragmentation","saturation","exhaustion","partitioning","replication","redundancy","failover","deprecation","obsolescence","starvation","overload","underutilization","latency","throughput","refactoring","modularization","encapsulation","abstraction","extensibility","configurability","maintainability","recoverability","sustainability","readability","testability","debuggability","reusability","simplicity","consistency","performance","functionality","requirement","recommendation","improvement","enhancement","clarification","documentation","description","acceptance","criteria","estimation","prioritization","dependency","deliverable","milestone","iteration"];var M={Init:"init",None:"none",ViewHelp:"view-help",Rename:"rename",Edit:"edit",Delete:"delete",Filter:"filter",Move:"move",SetView:"set-view",SetEditor:"set-editor",SetUserName:"set-user-name",NewItem:"add-new-item",TagTicket:"ticket-tag",AssignUserToTicket:"ticket-assign-user",CloseIssue:"close-issue",ReopenIssue:"re-open-issue",Sync:"sync"};var ur=e=>Object.values(g).includes(e),pr=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:a,validity:d,completionWordList:m}=lr[n].validate(n,r,i),u=o==="command"?Object.values(g):n&&e.target==="modifier"?$(n):mr;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:a??"",autoCompletion:t?rr(e,[...m,...u]):{hint:"",hints:[],remainder:"",overlap:0}}};var gr=e=>{let t=e.trimStart(),n=bi(t),r=(n[0]??"").trimStart().trimEnd(),o=(n[1]??"").trimStart().trimEnd(),i=Si(e),a=ur(r)?r:null,d=a!==null,m=r!=="",u=e.endsWith(" "),f=a?$(a)??[]:[],y=a&&f.includes(o)?o:"",N="word";n.length<=1?N="command":n.length===2&&(N="modifier");let S=Ii(t,a,y);return{raw:e,trimmedStart:t,words:n,firstWord:r,lastWord:i,hasCommand:m,command:a,isCommandKeyword:d,isLastWordCompleted:u,modifier:y,target:N,inputToMatch:i,inputString:S}},Ii=(e,t,n)=>{let r=e;return t&&r.startsWith(t)&&(r=r.slice(t.length)),r=r.replace(/^\s+/,""),n&&r.startsWith(n)&&(r=r.slice(n.length),r=r.replace(/^\s+/,"")),r},bi=e=>e?e.split(/\s+/):[],Si=e=>e.trimEnd().split(/\s+/).at(-1)??"";var fr=" ",j={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:xe.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},fn=new Set,xr=()=>{for(let e of fn)e()},yr=e=>(fn.add(e),()=>fn.delete(e)),Ce=e=>{let n=e(j),r=gr(n.value),o=n.cursorPosition===n.value.length;j={...n,commandMeta:pr(r,o)},xr()},Tt=({message:e,result:t})=>{let n=structuredClone(j);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,j=n,xr(),c(e,null)},xn=e=>{Ce(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},yn=e=>{Ce(t=>{let{value:n,cursorPosition:r}=t,o=r;if(e==="left"){for(;o>0&&n[o-1]===" ";)o--;for(;o>0&&n[o-1]!==" ";)o--}else{for(;o<n.length&&n[o]!==" ";)o++;for(;o<n.length&&n[o]===" ";)o++}return{...t,cursorPosition:o}})},vr=()=>{Ce(e=>{let t=e.value.slice(e.cursorPosition),n=Math.max(0,e.cursorPosition-1);return{...e,value:e.value.slice(0,n)+t,cursorPosition:n,commandIsPending:!1}})},Cr=()=>{Ce(e=>{let{value:t,cursorPosition:n}=e,r=n;for(;r>0&&t[r-1]===" ";)r--;for(;r>0&&t[r-1]!==" ";)r--;let o=t.slice(n);return{...e,value:t.slice(0,r)+o,cursorPosition:r,commandIsPending:!1}})},O=e=>{Ce(t=>{let n=Math.max(0,Math.min(t.cursorPosition,t.value.length)),r=t.value.slice(0,n),o=t.value.slice(n),i=e(r,t.commandMeta.autoCompletion),a=i+o,d=Math.max(0,Math.min(i.length,a.length));return{...t,value:a,cursorPosition:d,commandIsPending:!1}})},hr=()=>{Ce(e=>({...e,commandIsPending:!0}))},Nr=({addToHistory:e=!0})=>{Ce(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),Ai()},Er=()=>{Ce(e=>{let t=Math.min(e.commandHistoryIndex+1,e.commandHistory.length-1),n=e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},Ir=()=>{Ce(e=>{let t=Math.max(e.commandHistoryIndex-1,-1),n=t===-1?"":e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},Ai=()=>O(()=>""),me=()=>j,wt=()=>{let[e,...t]=j.value.split(fr);return t.join(fr).trim()};var Ti=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",wi=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",Mi=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",br=(e,t)=>{if(wi(e,e.sequence))return"MoveCursorLeftOfWord";if(Mi(e,e.sequence))return"MoveCursorRightOfWord";if(Ti(e,e.sequence))return"EraseInputWord";switch(e.name){case"tab":return"autoCompleteCommand";case"up":return"getLastCommandFromHistory";case"down":return"getNextCommandFromHistory";case"left":return"MoveCursorLeft";case"right":return"MoveCursorRight";case"return":return"confirm";case"backspace":return t?"eraseInput":"exitCommandLine";case"escape":return"exitCommandLine";default:return"captureInput"}};function Li(e){switch(e.name){case"up":case"down":case"left":case"right":return e.name;case"k":return"up";case"j":return"down";case"h":return"left";case"l":return"right";default:return null}}function Ri(e,t,n){let r=C().currentNode.childNavigationAcrossParents;switch(t){case"up":return e==="vertical"?n.prevItem:r?n.prevContainer:null;case"down":return e==="vertical"?n.nextItem:r?n.nextContainer:null;case"left":return e==="horizontal"?n.prevItem:r?n.prevContainer:null;case"right":return e==="horizontal"?n.nextItem:r?n.nextContainer:null}}function Sr(e,t){let n=me();if(e.sequence===":"&&n.value==="")return"initCommandLine";if(t===p.MOVE)switch(e.name){case"m":case"return":return"confirmMove"}if(t===p.COMMAND_LINE)return br(e,n.value);let r=Li(e);if(r){let o=t===p.MOVE?{prevItem:"movePreviousItem",nextItem:"moveNextItem",prevContainer:"moveToPreviousContainer",nextContainer:"moveToNextContainer"}:{prevItem:"navPreviousItem",nextItem:"navNextItem",prevContainer:"navToPreviousContainer",nextContainer:"navToNextContainer"};return Ri(C().currentNode.childRenderAxis,r,o)}if(e.ctrl&&e.name==="c")return"exit";switch(e.name){case"e":return"edit";case"n":return"addItem";case"m":return"initMove";case"d":return"Delete";case"return":return"confirm";case"space":return"confirm";case"v":return C().viewMode==="wide"?"SetViewDense":"SetViewWide";case"q":case"escape":return"exit";case"s":return"sync";default:return null}}var Ar=e=>{let{context:t}=C()?.currentNode;if(!t)return M.None;switch(e){case g.INIT:return M.Init;case g.DELETE:return M.Delete;case g.SET_DESCRIPTION:return M.Edit;case g.HELP:return M.ViewHelp;case g.RE_OPEN_ISSUE:return M.ReopenIssue;case g.CLOSE_ISSUE:return M.CloseIssue;case g.TAG:return M.TagTicket;case g.ASSIGN:return M.AssignUserToTicket;case g.RENAME:return M.Rename;case g.NEW:return M.NewItem;case g.FILTER:return M.Filter;case g.MOVE:return M.Move;case g.SET_USERNAME:return M.SetUserName;case g.SET_EDITOR:return M.SetEditor;case g.SET_VIEW:return M.SetView;case g.SYNC:return M.Sync;default:return M.None}};import{ulid as W}from"ulid";import{spawnSync as Wi}from"node:child_process";import Hi from"node:os";import Lr from"node:path";import{ulid as _i}from"ulid";import{accessSync as Pi,copyFileSync as Di,existsSync as Mt,mkdirSync as Tr,readdirSync as wr,readFileSync as Bi,renameSync as Fi,rmSync as ki,statSync as Mr,unlinkSync as Oi,writeFileSync as Ui}from"node:fs";import Xe from"node:path";var ee={writeToFile:(e,t)=>{try{let n=Xe.dirname(e);Mt(n)||Tr(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);Ui(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return Bi(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=ee.readFile(e);return t===null?null:JSON.parse(t)}catch(t){return logger.error(`Failed to read JSON at ${e}:`,t),null}},dirExists:e=>{try{return Mt(e)&&Mr(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Pi(e),!0}catch{return!1}},mkDir:e=>Tr(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=Xe.parse(t);for(;;){let r=Xe.join(t,e);try{if(Mt(r)&&Mr(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=Xe.dirname(t)}return null},readFirstJSON(e){try{if(!ee.dirExists(e))return null;let t=wr(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=Xe.join(e,t);return ee.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return ee.dirExists(e)?wr(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{Oi(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{ki(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(Xe.dirname(t)),!n?.overwrite&&Mt(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{Fi(e,t)}catch(r){if(r?.code==="EXDEV"){Di(e,t),this.rmFile(e);return}throw r}}};function $i(){let{preferredEditor:e}=le(),t=[e,process.env.VISUAL,process.env.EDITOR,"vim","vi","nano"].filter(n=>!!n?.trim());return[...new Set(t)]}function Vi(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function Rr(e){let t=Lr.join(Hi.tmpdir(),"epiq");ee.mkDir(t);let n=Lr.join(t,_i());ee.writeToFile(n,e??"");let r=$i();for(let o of r){let i=Vi(o,n),a=Wi(i,{stdio:"inherit",shell:!0});if(!a.error&&a.status===0){let d=ee.readFile(n);if(d==null)return s("Unable to read edited file");let m=d.replace(/\r?\n$/,"");return c("Successfully edited",m)}}return s("Unable to open editor")}import{monotonicFactory as Ki,ulid as Lt}from"ulid";var Rt=Ki(),Pr=({name:e,parent:t,userId:n})=>{let r=Rt(),o=Rt(),i=Rt(),a=Rt();return[{id:Lt(),userId:n,action:"add.issue",payload:{id:r,parent:t,name:e}},{id:Lt(),userId:n,action:"add.field",payload:{id:o,parent:r,name:"Description",val:""}},{id:Lt(),userId:n,action:"add.field",payload:{id:i,parent:r,name:"Assignees"}},{id:Lt(),userId:n,action:"add.field",payload:{id:a,parent:r,name:"Tags"}}]};var Dr=e=>{let t=e.log??[];for(let n=t.length-1;n>=0;n--){let r=t[n];if(r&&r.action==="close.issue"&&r.payload.id===e.id)return r.payload.parent}return null};var ji=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[Ye,Pt]=ji;var R=(e,t)=>s(`${t.split(".").join(" ")+" failed, "+e.toLowerCase()}`),zi={"init.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=q.workspace(n,r);Br(o);let i=h.createNodeAtPosition(o);return l(i)?R(i.message??"Failed to initialize workspace",e):c("Workspace initialized",{action:e,result:i.data})},"add.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=q.workspace(n,r),i=h.createNodeAtPosition(o);return l(i)?R(i.message??"Failed to add workspace",e):c("Added workspace",{action:e,result:i.data})},"add.board":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.board(n,r,o));return l(i)?R(i.message??"Unable to create board",e):c("Added board",{action:e,result:i.data})},"add.swimlane":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.swimlane(n,r,o));return l(i)?R(i.message??"Unable to create swimlane",e):c("Added swimlane",{action:e,result:i.data})},"add.issue":({action:e,payload:t})=>{let{id:n,name:r,parent:o}=t,i=h.createNodeAtPosition(q.ticket(n,r,o));return l(i)?R(i.message??"Unable to create issue",e):c("Added issue",{action:e,result:i.data})},"add.field":({action:e,payload:t})=>{let{id:n,name:r,parent:o,val:i}=t,a=h.createNodeAtPosition(q.field(n,r,o,{value:i},r.includes("Description")?"vertical":"horizontal"));return l(a)?R(a.message??`Unable to create field: ${r}`,e):c("Added field",{action:e,result:a.data})},"edit.title":({action:e,payload:t})=>{let{id:n,name:r}=t;if(!h.getNode(n))return R("Unable to locate node",e);let i=h.renameNode(n,r);return l(i)?R(i.message??"Unable to edit title",e):c("Edited title",{action:e,result:i.data})},"delete.node":({action:e,payload:t})=>{let{id:n}=t,r=h.tombstoneNode(n);return l(r)?R(r.message??"Unable to delete node",e):c("Deleted node",{action:e,result:r.data})},"create.tag":({action:e,payload:t})=>{let{id:n,name:r}=t,o=h.createTag({id:n,name:r});return l(o)?R(o.message??"Unable to create tag",e):c("Tag added",{action:e,result:o.data})},"create.contributor":({action:e,payload:t})=>{let{id:n,name:r}=t,o=h.createContributor({id:n,name:r});return l(o)?R(o.message??"Unable to create contributor",e):c("Contributor created",{action:e,result:o.data})},"tag.issue":({action:e,payload:t})=>{let{id:n,target:r,tagId:o}=t,i=h.tag(r,o,n);return l(i)?R(i.message??"Unable to tag issue",e):c("Issue tagged",{action:e,result:i.data})},"assign.issue":({action:e,payload:t})=>{let{id:n,contributor:r,target:o}=t,i=h.assign(o,r,n);return l(i)?R(i.message??"Unable to assign issue",e):c("Assigned successfully",{action:e,result:i.data})},"move.node":({action:e,payload:t})=>{let{id:n,parent:r,pos:o}=t,i=h.moveNode({id:n,parentId:r,position:o});return l(i)?R(i.message??"Failed to move node",e):c("Moved node",{action:e,result:i.data})},"edit.description":({action:e,payload:t})=>{let{id:n,md:r}=t,o=h.editValue(n,r);return l(o)?R(o.message??"Unable to edit description",e):c("Set node value",{action:e,result:o.data})},"close.issue":({action:e,payload:t})=>{let{id:n}=t,r=h.getNode(n);if(!r)return R("Unable to locate issue",e);if(!ke(r))return R("Can only close issues",e);let o=h.getNode(Ye);if(!o)return R("Unable to locate target swimlane",e);if(o.id===r.parentNodeId)return R("Cannot close closed issue",e);let a=h.moveNode({id:n,parentId:o.id,navigate:!1});return l(a)?R(a.message??"Unable to close issue",e):c("Issue closed",{action:e,result:a.data})},"reopen.issue":({action:e,payload:t})=>{let{id:n}=t,r=h.getNode(n);if(!r)return R("Unable to locate issue",e);if(!ke(r))return R("Can only reopen issues",e);let o=h.getNode(Ye);if(!o)return R("Unable to locate closed swimlane",e);if(!(r.parentNodeId===o.id))return R("Issue is not closed",e);let a=Dr(r);if(!a)return R("Unable to resolve previous parent from issue history",e);if(a===o.id)return R("Previous parent resolves to closed swimlane",e);if(!h.getNode(a))return R("Previous parent no longer exists",e);let m=h.moveNode({id:n,parentId:a,navigate:!1});return l(m)?R(m.message??"Unable to reopen issue",e):c("Issue reopened",{action:e,result:m.data})},"lock.node":({action:e,payload:t})=>{let{id:n}=t,r=h.lockNode(n);return l(r)?R(r.message??"Unable to lock node",e):c("Node locked",{action:e,result:r.data})}},qi=(e,t)=>{let n=h.getNode(e);n&&h.updateNode({...n,log:[...n.log??[],t]})},Gi=e=>{switch(e.action){case"init.workspace":case"add.workspace":case"add.board":case"add.swimlane":case"add.issue":case"add.field":case"edit.title":case"lock.node":case"delete.node":case"move.node":case"close.issue":case"reopen.issue":return[e.payload.id];case"edit.description":let t=[e.payload.id],n=C().nodes[e.payload.id]?.parentNodeId;return n&&t.push(n),t;case"tag.issue":case"assign.issue":return[e.payload.id,e.payload.target];case"create.tag":case"create.contributor":default:return[]}};function Je(e,t=!1){let n=zi[e.action],r=n(e);if(l(r))return r;if(!t){let a=[...new Set(Gi(e))];for(let d of a)qi(d,e)}let[o,i]=e.userId.split(".");return!o?.length||!i?.length?R("Invalid user ID format",e.action):(h.createContributor({name:i,id:o}),r)}var Cn=e=>e.map(t=>Je(t));import Bt from"node:fs";import Oe from"node:path";import{decodeTime as ts,monotonicFactory as ns}from"ulid";var Dt=process.env.IS_LOCAL==="true",ue=()=>".epiq";import hn from"node:fs";import Nn from"node:path";var Xi=ue(),Yi="events",Ji=(e=process.cwd())=>Nn.join(Qe(e),Xi,Yi),Qi=e=>{let t=Object.keys(e).filter(n=>n!=="id");return t.length!==2?s(`Invalid persisted event: expected exactly 2 keys, got ${t.length}`):!t[0]||!(t[0]in e)?s("Invalid persisted event: action key is missing or invalid"):c("Resolved persisted action",t[0])},Zi=e=>{let{userId:t,...n}=e,r=Qi(n);if(l(r))return s(r.message);let o=r.data;if(!o)return s("Action key is undefined");let i=e.id?.[0];if(!i)return s("Persisted event is missing id");let a=n[o];return c("Decoded persisted event",{id:i,action:o,payload:a,userId:t})};function Fr(e=process.cwd()){let t=Ji(e);if(!hn.existsSync(t))return s("No events found");let n=hn.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>Nn.join(t,o)),r=[];for(let o of n){let i=hn.readFileSync(o,"utf8"),a=Nn.basename(o,".jsonl")||"unknown";for(let d of i.split(`
3
+ `)){let m=d.trim();if(m)try{let u=JSON.parse(m);r.push({...u,userId:a})}catch{return s(`Failed to parse event from line: ${m}`)}}}return c("All events loaded",es(r))}function kr(e=process.cwd()){let t=Fr(e);if(l(t))return s(t.message);let n=[];for(let r of t.data){let o=Zi(r);if(l(o))return s(`Failed to decode event ${r.id?.[0]??"<unknown>"}: ${o.message}`);n.push(o.data)}return c("Loaded merged events",n)}function Or(e=process.cwd()){let t=Fr(e);return l(t)?s(t.message):c("Loaded edge reference",t.data.at(-1)?.id?.[0]??null)}var es=e=>{let t=new Map(e.map(d=>[d.id[0],d])),n=new Map;for(let d of e){let m=d.id[1],u=n.get(m)??[];u.push(d),n.set(m,u)}for(let d of n.values())d.sort((m,u)=>{let[f]=m.id,[y]=u.id;return f.localeCompare(y)});let r=[],o=new Set,i=d=>{let m=n.get(d)??[];for(let u of m){let[f]=u.id;o.has(f)||(o.add(f),r.push(u),i(f))}};i(null);let a=[...e].filter(d=>{let[m]=d.id;return!o.has(m)}).sort((d,m)=>{let[u,f]=d.id,[y,N]=m.id,S=f===null||t.has(f),b=N===null||t.has(N);if(S&&!b)return-1;if(!S&&b)return 1;let I=(f??"").localeCompare(N??"");return I!==0?I:u.localeCompare(y)});return[...r,...a]};var Ur=e=>({action:e.action,payload:e.payload});var rs=1,Wr=ns(),os="events",Hr=e=>e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown",X=()=>{let{userName:e,userId:t}=le();if(!e)return s("User name not configured");if(!t)return s("User ID not configured");let n=`${Hr(t)}.${Hr(e)}`;return e.trim()?c("Successfully resolved actor ID",n):s("Unable to resolve actor ID from settings or OS user info")},is=e=>Bt.existsSync(Oe.join(e,ue()))&&Bt.statSync(Oe.join(e,ue())).isDirectory(),Qe=(e=process.cwd())=>{let t=Oe.resolve(e);for(;;){if(is(t))return t;let n=Oe.dirname(t);if(n===t)return Oe.resolve(e);t=n}},_r=(e=process.cwd())=>Oe.join(Qe(e),ue(),os),ss=(e=process.cwd())=>{let t=X();return l(t)||!t.data?s("Unable to resolve event log path"):c("Successfully resolved event log path",Oe.join(_r(e),`${t.data}.jsonl`))},as=(e,t)=>({[e.action]:e.payload,v:rs,id:t});function $r(e,t=process.cwd()){try{let n=Qe(t),r=_r(n),o=ss(n);if(l(o))return o;Bt.mkdirSync(r,{recursive:!0});let i=Or(n);if(l(i))return s(i.message);let a;if(i.data){let m=ts(i.data),u=Math.max(Date.now(),m+1);a=Wr(u)}else a=Wr();let d=as(Ur(e),[a,i.data]);return Bt.appendFileSync(o.data,`${JSON.stringify(d)}
4
+ `,"utf8"),c("Event persisted",{path:o.data,entry:d})}catch(n){let r=n instanceof Error?n.message:"Unknown persist error";return s(`Failed to persist event: ${r}`)}}function Y(e){let t=Je(e);if(t.result!==ye.Success)return t;let n=$r(e);return l(n)?n:t}function Ft(e){return e.map(t=>Y(t))}import{ulid as Vr}from"ulid";var Ze=null,Ue=()=>structuredClone(Ze),et=e=>Ze=e,Kr=()=>{let{currentNode:e,selectedIndex:t}=C(),r=w(e.id)[t];return r?c("Resolved selected child",r):s("Target node not found")};function En(e){let t=Kr();if(l(t))return t;let{currentNode:n,nodes:r}=C();if(!n.parentNodeId)return s("Missing parent node id");let o=r[n.parentNodeId];if(!o)return s("Missing parent node");let i=k(o.id),a=i.findIndex(({id:y})=>y===n.id);if(a<0)return s("Current node not found among siblings");let d=i[a+e];if(!d)return s("Missing sibling node");let m=X();if(l(m))return s("Unable to resolve user ID");let u=m.data;if(et({id:Vr(),userId:u,action:"move.node",payload:{id:t.data.id,parent:d.id,pos:{at:"end"}}}),!Ze)return s("Could not materialize move state");let f=Je(Ze,!0);return l(f)?f:c("Node moved successfully",f.data)}function In(e){let t=Kr();if(l(t))return t;let{currentNode:n,selectedIndex:r}=C(),i=k(n.id)[r+e];if(!i)return s("Missing sibling node");let a=X();if(l(a))return s("Unable to resolve user ID");let d=a.data;if(et({id:Vr(),userId:d,action:"move.node",payload:{id:t.data.id,parent:n.id,pos:{at:e===1?"after":"before",sibling:i.id}}}),!Ze)return s("Could not materialize move state");let m=Je(Ze,!0);return l(m)?m:c("Node moved successfully",m.data)}import ds from"node:os";import jr from"node:path";var cs={userId:"",userName:"",preferredEditor:""},ls=".epiq",ms="config.json",zr=()=>jr.join(ds.homedir(),ls),bn=()=>jr.join(zr(),ms),Sn=()=>{try{return ee.mkDir(zr()),c("Ensured ~/.epiq exists",null)}catch{return s("Unable to create ~/.epiq")}},us=e=>{try{let t=JSON.parse(e);return c("Parsed config",t??{})}catch{return s("Invalid ~/.epiq/config.json JSON")}},qr=()=>{let e=Sn();if(l(e))return s(e.message);let t=bn(),n=ee.readFile(t);return n==null||n.trim()===""?c("No config found, using empty config",{}):us(n)},Gr=e=>{let t=Sn();if(l(t))return s(t.message);let n=bn();try{return ee.writeToFile(n,JSON.stringify(e,null,2)+`
5
+ `),c("Config written",null)}catch{return s("Unable to write ~/.epiq/config.json")}},An=e=>{let t=qr();if(l(t))return s("Failed to read existing config");let n={...t.data,...e};return Gr(n)},Xr=()=>{let e=bn(),t=Sn();if(l(t))throw new Error("Unable to create ~/.epiq");if(!(ee.readFile(e)!==null)){let d=Gr(cs);if(l(d))throw new Error("Unable to create ~/.epiq/config.json")}let r=qr();if(l(r))throw new Error("Unable to load settings");let{preferredEditor:o,userName:i,userId:a}=r.data;return!i||!a?s("User name or ID not configured in ~/.epiq/config.json"):ct({preferredEditor:o,userName:i,userId:a})};var tt=(e,t)=>{let n=e.find(r=>r.context===t);return n!==void 0?c("Found node",n):s("Unable to find node in breadcrumb")};import{spawn as Zr}from"node:child_process";import{createHash as ps}from"node:crypto";import de from"node:fs";import gs from"node:os";import _ from"node:path";var Me=ue(),V="epiq-state",he="origin",U=({args:e,cwd:t})=>new Promise(n=>{let r=Zr("git",e,{cwd:t,stdio:["ignore","pipe","pipe"]}),o="",i="";r.stdout.setEncoding("utf8"),r.stderr.setEncoding("utf8"),r.stdout.on("data",a=>{o+=a}),r.stderr.on("data",a=>{i+=a}),r.on("error",a=>{n(s([`git ${e.join(" ")}`,a.message].filter(Boolean).join(`
6
+ `)))}),r.on("close",a=>{let d=a??1;if(d!==0){n(s([`git ${e.join(" ")}`,i.trim()||o.trim()||"Git command failed"].filter(Boolean).join(`
7
+ `)));return}n(c("Git command succeeded",{stdout:o,stderr:i,exitCode:d}))})}),We=({args:e,cwd:t})=>new Promise(n=>{let r=Zr("git",e,{cwd:t,stdio:["ignore","pipe","pipe"]}),o="",i="";r.stdout.setEncoding("utf8"),r.stderr.setEncoding("utf8"),r.stdout.on("data",a=>{o+=a}),r.stderr.on("data",a=>{i+=a}),r.on("error",a=>{n({stdout:o,stderr:a.message,exitCode:1})}),r.on("close",a=>{n({stdout:o,stderr:i,exitCode:a??1})})}),fs=async e=>{if((await We({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Repo already initialized",!1);let n=await U({args:["commit","--allow-empty","-m","[epiq:init]"],cwd:e});return l(n)?s(`Failed to create initial commit
8
+ ${n.message}`):c("Created initial commit",!0)},Yr=e=>{let t=_.join(e,Me);return de.existsSync(t)?c("Epiq dir already exists",!1):(de.mkdirSync(t,{recursive:!0}),c("Created epiq dir",!0))},Tn=e=>(de.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)),eo=e=>{de.existsSync(e)&&de.rmSync(e,{recursive:!0,force:!0})},to=({from:e,to:t})=>de.existsSync(e)?(eo(t),de.mkdirSync(_.dirname(t),{recursive:!0}),de.cpSync(e,t,{recursive:!0}),c("Copied directory",void 0)):s(`Source directory not found: ${e}`),xs=async(e=process.cwd())=>{let t=await U({args:["rev-parse","--show-toplevel"],cwd:e});if(l(t))return s("Not inside a Git repository");let n=t.data.stdout.trim();return c("Resolved repo root",n)},ys=async e=>{let t=await U({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return s(t.message);let n=t.data.stdout.trim(),r=_.isAbsolute(n)?n:_.join(e,n);return c("Resolved git dir",r)},Jr=async e=>{let t=await ys(e);if(l(t))return s(t.message);let n=t.data,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD",_.join("rebase-merge"),_.join("rebase-apply")].filter(i=>de.existsSync(_.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},vs=async e=>{let t=await We({args:["diff","--cached","--quiet"],cwd:e});return t.exitCode===0?c("No staged changes",!1):t.exitCode===1?c("Has staged changes",!0):s(t.stderr.trim()||"Unable to inspect staged changes")},Cs=e=>ps("sha1").update(e).digest("hex").slice(0,12),no=()=>_.join(gs.homedir(),".epiq"),ro=()=>_.join(no(),"worktrees"),hs=e=>{let t=Cs(e);return _.join(ro(),t)},Ns=()=>{let e=Tn(no());if(l(e))return s(e.message);let t=Tn(ro());return l(t)?s(t.message):c("Ensured epiq storage",void 0)},wn=async({repoRoot:e,remote:t})=>{let r=(await We({args:["remote","get-url",t],cwd:e})).exitCode===0;return c("Checked remote",r)},oo=async({repoRoot:e,remote:t,branch:n})=>{let r=await We({args:["ls-remote","--heads",t,n],cwd:e});if(r.exitCode!==0)return s(r.stderr.trim()||`Unable to inspect remote branch ${t}/${n}`);let o=r.stdout.trim().length>0;return c("Checked remote branch",o)},Es=async({repoRoot:e,branch:t})=>{let n=await We({args:["show-ref","--verify","--quiet",`refs/heads/${t}`],cwd:e});return n.exitCode===0?c("Local branch exists",!0):n.exitCode===1?c("Local branch missing",!1):s(n.stderr.trim()||`Unable to inspect branch ${t}`)},Is=async({repoRoot:e})=>{let t=await Es({repoRoot:e,branch:V});if(l(t))return s(t.message);if(t.data)return c("Local board branch already exists",!1);let n=await wn({repoRoot:e,remote:he});if(l(n))return s(n.message);if(n.data){let i=await oo({repoRoot:e,remote:he,branch:V});if(l(i))return s(i.message);if(i.data){let a=await U({args:["branch","--track",V,`${he}/${V}`],cwd:e});return l(a)?s(`Failed to create local ${V} from remote
9
+ ${a.message}`):c("Created local board branch from remote",!0)}}let r=await U({args:["rev-parse","HEAD"],cwd:e});if(l(r))return s(r.message);let o=await U({args:["branch",V,r.data.stdout.trim()],cwd:e});return l(o)?s(`Failed to create local ${V}
10
+ ${o.message}`):c("Created local board branch",!0)},bs=async({repoRoot:e,worktreeRoot:t})=>{let n=await U({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);let r=_.resolve(t),o=n.data.stdout.split(`
11
+ `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(i=>_.resolve(i)).includes(r);return c("Checked worktree registration",o)},Ss=async({repoRoot:e,worktreeRoot:t})=>{let n=Tn(_.dirname(t));if(l(n))return s(n.message);de.existsSync(t)&&!de.existsSync(_.join(t,".git"))&&eo(t);let r=await U({args:["worktree","add",t,V],cwd:e});return l(r)?s(`Failed to create board worktree
12
+ ${r.message}`):c("Created board worktree",!0)},As=async({repoRoot:e,worktreeRoot:t})=>{let n=await bs({repoRoot:e,worktreeRoot:t});return l(n)?s(n.message):n.data?c("Board worktree already exists",!1):Ss({repoRoot:e,worktreeRoot:t})},Ts=async e=>{let t=await U({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});if(l(t))return s(t.message);if(t.data.stdout.trim()===V)return c("Board branch already checked out",!1);let r=await U({args:["checkout",V],cwd:e});return l(r)?s(`Failed to checkout ${V}
13
+ ${r.message}`):c("Checked out board branch",!0)},Mn=async e=>{let t=await We({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e}),n=t.exitCode===0&&t.stdout.trim().length>0;return c("Checked upstream",n)},ws=async e=>{let t=await Mn(e);if(l(t))return s(t.message);if(t.data)return c("Board upstream already configured",!1);let n=await wn({repoRoot:e,remote:he});if(l(n))return s(n.message);if(!n.data)return c("No remote available for upstream",!1);let r=await oo({repoRoot:e,remote:he,branch:V});if(l(r))return s(r.message);if(r.data){let i=await U({args:["branch","--set-upstream-to",`${he}/${V}`,V],cwd:e});return l(i)?s(`Failed to set board upstream
14
+ ${i.message}`):c("Configured board upstream",!0)}let o=await U({args:["push","-u",he,V],cwd:e});return l(o)?s(`Failed to publish board branch
15
+ ${o.message}`):c("Published board branch and configured upstream",!0)},Ms=async e=>{let t=await wn({repoRoot:e,remote:he});if(l(t))return s(t.message);if(!t.data)return c("No remote configured, skipped fetch",!1);let n=await U({args:["fetch",he,V],cwd:e});return l(n)?s(`Failed to fetch ${V}
16
+ ${n.message}`):c("Fetched board remote",!0)},Ls=async e=>{let t=await Mn(e);if(l(t))return s(t.message);if(!t.data)return c("No upstream configured, skipped pull",!1);let n=await U({args:["pull","--rebase"],cwd:e});return l(n)?s(`Failed during board pull --rebase
17
+ ${n.message}`):c("Pulled board with rebase",!0)},Rs=({repoRoot:e,worktreeRoot:t})=>{let n=_.join(e,Me),r=_.join(t,Me);return to({from:n,to:r})},Ps=({repoRoot:e,worktreeRoot:t})=>{let n=_.join(t,Me),r=_.join(e,Me);return to({from:n,to:r})},Ds=async e=>{let t=await U({args:["add",Me],cwd:e});return l(t)?s(`Failed to stage board ${Me}
18
+ ${t.message}`):c("Staged board .epiq",void 0)},Bs=async e=>{let t=await We({args:["diff","--cached","--quiet","--",Me],cwd:e});return t.exitCode===0?c("No staged board .epiq changes",!1):t.exitCode===1?c("Has staged board .epiq changes",!0):s(t.stderr.trim()||"Unable to inspect staged board .epiq changes")},Qr=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",Fs=async e=>{let t=await U({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved current branch",t.data.stdout.trim())},ks=async e=>{let t=await U({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved short HEAD sha",t.data.stdout.trim())},Os=async e=>{let t=await Fs(e);if(l(t))return s(t.message);let n=await ks(e);if(l(n))return s(n.message);let r=Qr(t.data),o=Qr(n.data),i=`[epiq:${r}:${o}]`;return c("Built sync commit message",i)},Us=async({repoRoot:e,worktreeRoot:t})=>{let n=await Bs(t);if(l(n))return s(n.message);if(!n.data)return c("No board .epiq commit needed",null);let r=await Os(e);if(l(r))return s(r.message);let o=await U({args:["commit","-m",r.data],cwd:t});if(l(o))return s(`Failed to commit board .epiq changes
19
+ ${o.message}`);let i=await U({args:["rev-parse","HEAD"],cwd:t});return l(i)?s(i.message):c("Created board sync commit",i.data.stdout.trim())},Ws=async e=>{let t=await Mn(e);if(l(t))return s(t.message);if(!t.data)return c("No upstream configured, skipped push",!1);let n=await U({args:["push"],cwd:e});return l(n)?s(`Failed during board push
20
+ ${n.message}`):c("Pushed board",!0)},Hs=async({repoRoot:e,worktreeRoot:t})=>{let n=!1,r=Ns();if(l(r))return s(r.message);let o=await Is({repoRoot:e});if(l(o))return s(o.message);n=n||o.data;let i=await As({repoRoot:e,worktreeRoot:t});if(l(i))return s(i.message);n=n||i.data;let a=await Ts(t);if(l(a))return s(a.message);n=n||a.data;let d=await ws(t);return l(d)?s(d.message):(n=n||d.data,c("Bootstrapped board storage",n))},io=async(e=process.cwd())=>{let t=await xs(e);if(l(t))return s(t.message);let n=t.data,r=hs(n),o=await Jr(n);if(l(o))return s(o.message);if(o.data)return s("Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the current repo");let i=await vs(n);if(l(i))return s(i.message);if(i.data)return s("Cannot run :sync while staged changes exist. Please commit or unstage them first.");let a=await fs(n);if(l(a))return s(a.message);let d=await Hs({repoRoot:n,worktreeRoot:r});if(l(d))return s(d.message);let m=await Jr(r);if(l(m))return s(m.message);if(m.data)return s("Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the board worktree");let u=!1,f,y=!1,N=!1,S=!1,b=d.data,I=await Ms(r);if(l(I))return s(I.message);let E=await Ls(r);if(l(E))return s(E.message);y=E.data;let T=Yr(n);if(l(T))return s(T.message);let F=Yr(r);if(l(F))return s(F.message);let oe=Rs({repoRoot:n,worktreeRoot:r});if(l(oe))return s(oe.message);let ie=await Ds(r);if(l(ie))return s(ie.message);let $e=await Us({repoRoot:n,worktreeRoot:r});if(l($e))return s($e.message);$e.data&&(u=!0,f=$e.data);let Ve=await Ws(r);if(l(Ve))return s([Ve.message,u&&f?`Local board sync commit exists: ${f}`:""].filter(Boolean).join(`
21
+ `));N=Ve.data;let at=Ps({repoRoot:n,worktreeRoot:r});return l(at)?s(at.message):(S=!0,c("Synced .epiq with board worktree and hydrated local state",{repoRoot:n,worktreeRoot:r,createdCommit:u,commitSha:f,pulled:y,pushed:N,hydrated:S,bootstrapped:b}))};var _s=e=>Object.values(C().tags).find(t=>t.name===e),$s=e=>Object.values(C().contributors).find(t=>t.name===e),so=[{systemOnly:!0,intent:M.Move,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n}=me().commandMeta,{currentNode:r,selectedIndex:o}=C(),i=w(r.id)[o];if(!i)return A({mode:p.DEFAULT}),s("No move target");if(n==="start"){if(i.readonly)return s("Target node is read-only");if(o===-1)return s("No item selected");if(!i.parentNodeId)return s("Target has no parent");let a=w(i.parentNodeId),d=a.findIndex(({id:y})=>y===i.id);if(d===-1)return s("Target not found among siblings");let m=a[d-1],u=a[d+1],f=u!=null?{at:"before",sibling:u.id}:m!=null?{at:"after",sibling:m.id}:{at:"start"};return et({id:W(),userId:t,action:"move.node",payload:{id:i.id,parent:i.parentNodeId,pos:f}}),A({mode:p.MOVE}),c("Move initialized",null)}if(n==="next")return A({mode:p.MOVE}),In(1);if(n==="previous")return A({mode:p.MOVE}),In(-1);if(n==="to-next")return A({mode:p.MOVE}),En(1);if(n==="to-previous")return A({mode:p.MOVE}),En(-1);if(n==="confirm"){A({mode:p.DEFAULT});let a=Ue();if(!a)return s("No pending move to confirm");let d=Y(a);return l(d)?d:(et(null),c("Moved item",null))}return n==="cancel"?(et(null),A({mode:p.DEFAULT}),c("Cancelling move",null)):s("Invalid move modifier")}},{intent:M.Delete,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];return o?Y({id:W(),userId:t,action:"delete.node",payload:{id:o.id}}):s("Unable to resolve child to delete")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Edit,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,n=tt(C().breadCrumb,"TICKET");if(l(n))return s("Edit target must be an issue");let r=n.data;if(r.readonly)return s("Cannot edit readonly field");let{currentNode:o,selectedIndex:i}=C();if(!w(r.id)[i])return s("No selected field");let d=w(o.id)[i];if(!d)return s("No selected field");if(d.readonly)return s("Cannot edit readonly field");let m=d.props.value;if(typeof m!="string")return s("Selected field is not editable text");let u=Rr(m);if(l(u))return s("Failed to edit field");let f=u.data;return f===m?c("No changes made",null):d.title==="Description"?Y({id:W(),userId:t,action:"edit.description",payload:{id:d.id,md:f}}):d.title==="Title"?Y({id:W(),userId:t,action:"edit.title",payload:{id:d.id,name:f}}):s(`Editing not supported for "${d.title}"`)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Filter,mode:p.COMMAND_LINE,action:()=>{let{modifier:e,inputString:t}=me().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>$(g.FILTER).map(m=>m.split(n)[0]).includes(d))(r))return s("Invalid filter modifier");let a={target:r,operator:"=",value:t.trim()};return ne(d=>({...d,filters:e==="clear"?[]:[...d.filters,a],mode:p.DEFAULT})),c("Viewing help",null)}},{intent:M.ViewHelp,mode:p.COMMAND_LINE,action:()=>(A({mode:p.HELP}),c("Viewing help",null))},{intent:M.CloseIssue,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return s("Unable to close issue, no target found");if(!o.parentNodeId)return s("No target parent found");if(!ke(o))return s("Cannot close in this context");let i=Y({id:W(),userId:t,action:"close.issue",payload:{id:o.id,parent:o.parentNodeId}});return l(i)?i:c("Viewing help",null)}},{intent:M.ReopenIssue,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return s("Unable to reopen issue, no target found");let i=o.context==="TICKET"?c("Resolved ticket",o):ze(o.id,"TICKET");if(l(i))return s("Cannot reopen in this context");let a=i.data,d=Y({id:W(),userId:t,action:"reopen.issue",payload:{id:a.id}});return l(d)?d:c("Issue reopened",null)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetUserName,mode:p.COMMAND_LINE,action:()=>{let{userId:e,preferredEditor:t,userName:n}=le(),r=wt()?.trim();if(!r)return s("No username provided");let o=r??n,i=e??W();if(!o||!i)return s("Unable to resolve user name or id");let a=An({userName:o,userId:i,preferredEditor:t??""});return l(a)?a:(ct({userName:o,userId:i}),A({mode:p.DEFAULT}),c(`Username set to "${r}"`,null))}},{intent:M.Init,mode:p.COMMAND_LINE,action:()=>{let e=ao();if(l(e))return e;let{rootNodeId:t,nodes:n}=C();return D.navigate({currentNode:n[t],selectedIndex:0}),c("Project initialized",null)}},{intent:M.SetEditor,mode:p.COMMAND_LINE,action:()=>{let e=wt()?.trim();if(!e)return s("No editor provided");let t=An({preferredEditor:e});return l(t)?t:(ct({preferredEditor:e}),A({mode:p.DEFAULT}),c(`Editor configuration set to "${e}"`,null))}},{intent:M.NewItem,mode:p.COMMAND_LINE,action:(e,t)=>{let n=X();if(l(n))return s("Unable to resolve user ID");let r=n.data;if(!t.inputString)return s(`provide a name for your ${t.modifier}`);let{breadCrumb:o,currentNode:i,selectedIndex:a}=C(),d=m=>{let u=Y(m);if(l(u))return u;let f=h.getNode(u.data.result.id);if(!f)return s("Created node not found");if(!f.parentNodeId)return u;let y=h.getNode(f.parentNodeId);return y?(D.navigate({currentNode:y,selectedIndex:h.getSiblings(f.parentNodeId).findIndex(({id:N})=>N===f.id)}),u):s("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:m}=C(),u=h.getNode(m);return u?d({id:W(),userId:r,action:"add.board",payload:{id:W(),name:t.inputString,parent:u.id}}):s("Workspace not found")}if(t.modifier==="swimlane"){let m=tt(o,"BOARD");return l(m)?s("Unable to add swimlane in this context"):d({id:W(),userId:r,action:"add.swimlane",payload:{id:W(),name:t.inputString,parent:m.data.id}})}if(t.modifier==="issue"){let m=w(i.id)[a],u=i.context==="SWIMLANE"?i:i.context==="BOARD"&&m?.context==="SWIMLANE"?m:(()=>{let b=tt(o,"SWIMLANE");return l(b)?null:b.data})();if(!u)return s("Unable to add issue in this context");let f=Pr({userId:r,name:t.inputString,parent:u.id}),y=Ft(f);if(y.some(b=>l(b)))return s("Issue create failed: "+y.filter(l).map(b=>b.message).filter(Boolean).join(", "));let N=y[0];if(!N||l(N))return s("Issue creation failed");let S=f[0]?.payload.id;return S?(D.navigate({currentNode:u,selectedIndex:h.getSiblings(u.id).findIndex(({id:b})=>b===S)}),c("Issue created",null)):s("Unable to determine ticket id")}return Jn()},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetView,mode:p.COMMAND_LINE,action:()=>{let{commandMeta:e}=me();return e.validity===xe.Invalid?s("Invalid command "+ye):(ne(t=>({...t,viewMode:e.modifier==="wide"?"wide":e.modifier==="dense"?"dense":t.viewMode})),c("View set",null))},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Rename,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=C(),o=w(n.id)[r];if(!o)return s("Missing node");if(o.readonly)return s("Cannot rename readonly node");let i=wt();return i?Y({id:W(),userId:t,action:"edit.title",payload:{id:o.id,name:i}}):s("Provide a new name")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.TagTicket,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=me().commandMeta,o=(n||r).trim();if(!o)return s("Provide a tag");let{selectedIndex:i,currentNode:a}=C(),d=w(a.id)[i];if(!d)return s("Invalid tag target");let m=ze(d.id,"TICKET");if(l(m))return s("Unable to tag issue in this context");let u=m.data,f=_s(o),y;if(f)y=f.id;else{let b=W(),I=Y({id:W(),userId:t,action:"create.tag",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=h.getFieldByTitle(u.id,"Tags");return N?w(N.id).some(b=>b.props?.value===y)?s("Already tagged with that tag"):Y({id:W(),userId:t,action:"tag.issue",payload:{id:W(),target:u.id,tagId:y}}):s("Unable to locate tags field")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.AssignUserToTicket,mode:p.COMMAND_LINE,action:()=>{let e=X();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=me().commandMeta,o=(n||r).trim();if(!o)return s("Provide an assignee");let{selectedIndex:i,currentNode:a}=C(),d=w(a.id)[i];if(!d)return s("Invalid assign target");let m=ze(d.id,"TICKET");if(l(m))return s("Unable to assign issue in this context");let u=m.data,f=$s(o),y;if(f)y=f.id;else{let b=W(),I=Y({id:W(),userId:t,action:"create.contributor",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=h.getFieldByTitle(u.id,"Assignees");return N?w(N.id).some(b=>b.props?.value===y)?s("Assignee already assigned"):Y({id:W(),userId:t,action:"assign.issue",payload:{id:W(),target:u.id,contributor:y}}):s("Unable to locate assignees field")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Sync,mode:p.COMMAND_LINE,action:async()=>{O(()=>""),A({syncStatus:{msg:"Syncing",status:"syncing"}});let e=await io();return l(e)?(A({syncStatus:{msg:e.message,status:"outOfSync"}}),s(`Unable to sync state. ${e.message}`)):(A({syncStatus:{msg:"Synced",status:"synced"},mode:p.DEFAULT}),c("Synced",!0))}}];var te=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=me();if(!t)return s("No command to confirm");if(!e&&n===xe.Invalid)return s("Invalid command");let i=Ar(t);hr();let a=so.filter(m=>e||m.systemOnly!==!0).find(m=>m.intent===i);if(!a)return Tt({result:ye.Fail,message:"Command not found",data:null});let d=await a.action(a,{command:t,inputString:o,modifier:r});return l(d)?Tt(d):(Nr({addToHistory:!e}),a.onSuccess?.(),Tt(d))};var kt=[{intent:"exit",mode:p.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move cancel"),te({isForceExecutedBySystem:!0}))},{intent:"initMove",mode:p.DEFAULT,description:"[m] move init/confirm",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move start"),te({isForceExecutedBySystem:!0}))},{intent:"confirmMove",mode:p.MOVE,action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"move confirm"),te({isForceExecutedBySystem:!0}))}],Ot=[{intent:"movePreviousItem",mode:p.MOVE,action:()=>Ue()?(A({mode:p.COMMAND_LINE}),O(()=>"move previous"),te({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveNextItem",mode:p.MOVE,action:()=>Ue()?(A({mode:p.COMMAND_LINE}),O(()=>"move next"),te({isForceExecutedBySystem:!0})):s("No pending move")}],co=[{intent:"moveToNextContainer",mode:p.MOVE,action:()=>Ue()?(A({mode:p.COMMAND_LINE}),O(()=>"move to-next"),te({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveToPreviousContainer",mode:p.MOVE,action:()=>Ue()?(A({mode:p.COMMAND_LINE}),O(()=>"move to-previous"),te({isForceExecutedBySystem:!0})):s("No pending move")}];var lo={[L.WORKSPACE]:[...kt,...Ot],[L.BOARD]:[...kt,...Ot],[L.SWIMLANE]:[...kt,...Ot,...co],[L.TICKET]:[],[L.FIELD]:[],[L.FIELD_LIST]:[],[L.TEXT]:[]};var mo=[{intent:"addItem",mode:p.DEFAULT,description:"[n] new...",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>`${g.NEW} `),c("Adding new item",null))},{intent:"Delete",mode:p.DEFAULT,description:"[d] delete",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>`${g.DELETE} `),c("Deleting item",null))},{intent:"initCommandLine",mode:p.DEFAULT,description:"[:] focus command line",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>""),c("Entering command line mode",null))},{intent:"confirm",mode:p.DEFAULT,description:"[<Enter>] confirm/enter",action:()=>(D.enterChildNode(),c("Entering context",null))},{intent:"exit",mode:p.DEFAULT,description:"[q] exit context",action:()=>(logger.debug("Executing exit action"),D.enterParentNode(),c("Exiting context",null))},{intent:"navPreviousItem",mode:p.DEFAULT,description:"[arrows/hjkl] navigate",action:()=>(D.navigateToPreviousItem(),c("Navigating to previous item",null))},{intent:"navNextItem",mode:p.DEFAULT,action:()=>(D.navigateToNextItem(),c("Navigating to next item",null))},{intent:"navToPreviousContainer",mode:p.DEFAULT,action:()=>(D.navigateToPreviousContainer(),c("Navigating to previous container",null))},{intent:"navToNextContainer",mode:p.DEFAULT,action:()=>(D.navigateToNextContainer(),c("Navigating to next container",null))},{intent:"edit",mode:p.DEFAULT,action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"edit"),te(),c("Fired command",!0))},{intent:"SetViewDense",mode:p.DEFAULT,description:"[v] view change (wide/dense)",action:()=>(A({viewMode:"dense"}),c("View set",null))},{intent:"SetViewWide",mode:p.DEFAULT,action:()=>(A({viewMode:"wide"}),c("View set",null))},{intent:"sync",mode:p.DEFAULT,description:"[s] sync epiq with remote state branch",action:()=>(A({mode:p.COMMAND_LINE}),O(()=>"sync"),te({isForceExecutedBySystem:!0}),c("Synced",!0))}];var uo=[{intent:"viewHelp",mode:p.DEFAULT,action:()=>(A({mode:p.HELP}),c("Viewing help",null))},{intent:"exit",mode:p.HELP,action:()=>(A({mode:p.DEFAULT}),c("Exiting help",null))},{intent:"confirm",mode:p.COMMAND_LINE,action:()=>(te(),c("Executing command",null))},{intent:"MoveCursorLeft",mode:p.COMMAND_LINE,action:()=>(xn(-1),c("Moving cursor left",null))},{intent:"MoveCursorRight",mode:p.COMMAND_LINE,action:()=>(xn(1),c("Moving cursor right",null))},{intent:"MoveCursorLeftOfWord",mode:p.COMMAND_LINE,action:()=>(yn("left"),c("Moving cursor left of word",null))},{intent:"MoveCursorRightOfWord",mode:p.COMMAND_LINE,action:()=>(yn("right"),c("Moving cursor right of word",null))},{intent:"exitCommandLine",mode:p.COMMAND_LINE,action:()=>(A({mode:p.DEFAULT}),c("Exiting command line",null))},{intent:"autoCompleteCommand",mode:p.COMMAND_LINE,action:()=>(O((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:"captureInput",mode:p.COMMAND_LINE,action:(e,{sequence:t})=>(O(n=>n+t),c("Capturing input",null))},{intent:"eraseInput",mode:p.COMMAND_LINE,action:()=>(vr(),c("Erasing input",null))},{intent:"EraseInputWord",mode:p.COMMAND_LINE,action:()=>(Cr(),c("Erasing input word",null))},{intent:"getLastCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Er(),c("Getting last command from history",null))},{intent:"getNextCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Ir(),c("Getting next command from history",null))}];import Vs from"chalk";var Ut=": for command line",po="q to exit",go=`${Vs.hex(v.accent)("m")} to confirm`,Ln={[L.WORKSPACE]:[Ut],[L.BOARD]:[Ut],[L.BOARD+p.COMMAND_LINE]:[Ut],[L.SWIMLANE]:[Ut],[L.TICKET+p.HELP]:[po],[L.SWIMLANE+p.HELP]:[po],[L.TICKET]:[],[L.FIELD]:[],[L.SWIMLANE+p.MOVE]:[go],[L.TICKET+p.MOVE]:[go]};var Wt=e=>e.trim().toLocaleLowerCase(),Ks=(e,t)=>{let n=h.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},js=e=>{let{tags:t}=C(),n=h.getFieldByTitle(e,"Tags");return n?k(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},zs=e=>{let{contributors:t}=C(),n=h.getFieldByTitle(e,"Assignees");return n?k(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},fo=(e,t)=>{let n=t.value;if(!n)return!0;switch(t.target){case"title":return Wt(e.title??"").includes(n);case"description":return Wt(Ks(e.id,"Description")).includes(n);case"tag":return js(e.id).map(Wt).some(d=>d.includes(n));case"assignee":return zs(e.id).map(Wt).some(d=>d.includes(n));default:return!0}};function xo(e,t,n){let r=t[e];if(!r)return s("buildBreadCrumb(): current node not found");let o=[],i=r;for(;i&&(o.push(i),!(i.id===n||!i.parentNodeId));)i=t[i.parentNodeId];let a=o[o.length-1];return!a||a.id!==n?s("buildBreadCrumb(): node is not connected to root"):(o.reverse(),c("Breadcrumb built",o))}var yo=e=>{let t={};for(let n of e)n.intent&&(t[n.mode]||(t[n.mode]={}),t[n.mode][n.intent]=n);return t};var Ht,Rn=new Set,vo=()=>{for(let e of Rn)e()},Gs=e=>(Rn.add(e),()=>Rn.delete(e));function Co(e){let{currentNodeId:t,mode:n,rootNodeId:r,nodes:o,filters:i}=e;if(!t)return s("derive(): currentNodeId is missing");if(!r)return s("derive(): rootNode is missing");if(!o[r])return s("derive(): unable to find root node");let d=o[t];if(!d)return logger.error("Unable to derive state, currentNode not found"),s("Unable to derive state, currentNode not found");let m=xo(t,o,r);if(l(m))return logger.error(m.message),m;let u=m.data,{context:f}=d,y=Ln[f+n]??Ln[f]??[],N=[...mo,...lo[f]??[],...uo],S=yo(N);return c("Derived successfully",{...e,currentNode:d,breadCrumb:u,availableHints:y,availableActions:N,actionIndex:S,renderedChildrenIndex:Xs(o,i)})}var C=()=>(Ht||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),Ht);function Br(e){let t={filters:[],tags:{},contributors:{},viewMode:"dense",mode:p.DEFAULT,nodes:{[e.id]:e},rootNodeId:e.id,currentNodeId:e.id,renderedChildrenIndex:{},selectedIndex:-1,syncStatus:{status:"synced",msg:""}},n=Co(t);return l(n)?n:(Ht=n.data,vo(),c("State initialized",null))}function ne(e){let t=C(),n=e(t),r=Co(n);return l(r)?s(r.message??"Unable to update state"):(Ht=r.data,vo(),c("State updated",null))}var A=e=>ne(t=>({...t,...e}));var H=()=>qs(Gs,C,C),Xs=(e,t)=>{let n={};for(let r of Object.values(e))ke(r)&&t.length>0&&!t.every(o=>fo(r,o))||!r.parentNodeId||r.isDeleted||((!r.parentNodeId||!n[r.parentNodeId])&&(n[r.parentNodeId]=[]),n[r.parentNodeId].push(r));for(let r of Object.keys(n))n[r].sort((o,i)=>{let a=e[o.id],d=e[i.id];return!a||!d?0:a.rank.localeCompare(d.rank)});return n},w=e=>C().renderedChildrenIndex[e]??[];var D={exit(){process.exit(0)},enterChildNode(){let e=C(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=w(t.id)[n];!r||t.context==="FIELD"||D.navigate({currentNode:r,selectedIndex:w(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=C();if(!e.parentNodeId){logger.info("Missing parent node id");return}let n=t[e.parentNodeId];if(!n){logger.error("Parent not found");return}let r=w(n.id),o=r.findIndex(({id:a})=>a===e.id),i=r.length===0?-1:o>=0?o:0;D.navigate({currentNode:n,selectedIndex:i})},navigateToNextItem:()=>ho(1),navigateToPreviousItem:()=>ho(-1),navigateToNextContainer:()=>No(1),navigateToPreviousContainer:()=>No(-1),navigate:({currentNode:e=C().currentNode,selectedIndex:t})=>{A({currentNodeId:e.id,selectedIndex:t})}},ho=e=>{let t=C(),n=w(t.currentNode.id).length;if(n===0)return;let o=(Math.max(0,t.selectedIndex)+e+n)%n;D.navigate({selectedIndex:o})},No=e=>{let{currentNode:t,nodes:n,selectedIndex:r}=C();if(!t.childNavigationAcrossParents)return;if(!t.parentNodeId){logger.error("Missing parent node id");return}let o=n[t.parentNodeId];if(!t||!o)return;let i=w(o.id),a=i.findIndex(N=>N.id===t.id);if(a<0)return;let d=i.at(a+e)??i.at(0);if(!d)return;let m=w(d.id),u=Math.max(0,m.length-1),f=Math.min(Math.max(0,r),u),y=m.length?f:-1;D.navigate({currentNode:d,selectedIndex:y})};var Ee="system.actor",ut=Ys(),Le=null;function Js(){let e=Object.values(C().nodes).find(r=>r.context==="WORKSPACE");if(!e)throw new Error("No workspace found in event log");let[t]=w(e.id),[n]=t?w(t.id):[];if(logger.debug("Boot navigation target:",{workspace:e?.id,firstBoard:t?.id,firstSwimlane:n?.id}),n){let r=C().renderedChildrenIndex?.[n.id]??[];return{currentNode:n,selectedIndex:r.length>0?0:-1}}else return t?{currentNode:t,selectedIndex:0}:e?{currentNode:e,selectedIndex:0}:{currentNode:C().nodes[C().rootNodeId],selectedIndex:0}}function Qs(){let e=Js();D.navigate(e)}function Zs(){let e=ut(),t=ut(),n=ut(),r=ut(),o=ut();return[{id:Ne(),userId:Ee,action:"init.workspace",payload:{id:e,name:"Workspace"}},{id:Ne(),userId:Ee,action:"add.board",payload:{id:t,name:"Default",parent:e}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:n,name:"Todo",parent:t}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:r,name:"Review",parent:t}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:o,name:"Done",parent:t}},{id:Ne(),userId:Ee,action:"add.board",payload:{id:Pt,name:"Closed",parent:e}},{id:Ne(),userId:Ee,action:"add.swimlane",payload:{id:Ye,name:"Closed",parent:Pt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Pt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Ye}}]}function St(){return Le!==null}function ao(){if(!Le||Le.length===0)return c("No pending default events to persist",null);let t=Ft(Le).filter(l);return t.length>0?s([nt.bold.red("Materializing failed"),"",...t.map((n,r)=>`${nt.dim.gray(`${r+1}.`)} ${nt.dim(n.message)}`),`
22
22
  `].join(`
23
- `)):(Me=null,c("Persisted pending default events",null))}function No(e){let t;e.length===0?(Me=Qs(),t=yn([...Me])):(Me=null,t=yn(e));let n=t.filter(l);return n.length>0?a([et.bold.red("Materializing failed"),"",...n.map((r,o)=>`${et.dim.gray(`${o+1}.`)} ${et.dim(r.message)}`),`
23
+ `)):(Le=null,c("Persisted pending default events",null))}function Eo(e){let t;e.length===0?(Le=Zs(),t=Cn([...Le])):(Le=null,t=Cn(e));let n=t.filter(l);return n.length>0?s([nt.bold.red("Materializing failed"),"",...n.map((r,o)=>`${nt.dim.gray(`${o+1}.`)} ${nt.dim(r.message)}`),`
24
24
  `].join(`
25
- `)):(Js(),c("State booted successfully",null))}import{Box as xa}from"ink";import Pn from"react";import mt from"chalk";import{Box as Ln,Text as Eo}from"ink";import lt,{useEffect as Zs,useMemo as ea,useState as ta}from"react";var Io=mt.gray,na=mt.inverse,ra=mt.inverse.gray,oa={hint:"",hints:[],overlap:0,remainder:""},So=({value:e,command:t})=>{if(!t)return null;let n=e.trimStart(),o=e.length-n.length;return e.slice(o,o+t.length)!==t?null:{start:o,end:o+t.length}},ia=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let n=ie(t);return{bg:r=>mt.bgHex(n).black(r),bgCursor:r=>mt.bgHex(n).inverse.black(r)}}return dn(t)},sa=({value:e,command:t,modifier:n})=>{if(!t||!n)return null;let r=So({value:e,command:t});if(!r)return null;let i=e.slice(r.end).match(/^\s*/)?.[0].length??0,s=r.end+i;return e.slice(s,s+n.length)!==n?null:{start:s,end:s+n.length}},bo=()=>({value:j.value,cursorPosition:j.cursorPosition,commandIsPending:j.commandIsPending,autoCompletion:j.commandMeta.autoCompletion??oa,infoMessage:j.commandMeta.infoMessage,validationStatus:j.commandMeta.validity,command:j.commandMeta.command,inputString:j.commandMeta.inputString,modifier:j.commandMeta.modifier}),aa=(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,Ao=({width:e})=>{let[t,n]=ta(bo());Zs(()=>{let y=()=>{let S=bo();n(b=>aa(b,S)?b:S)},N=yr(y);return y(),()=>{N()}},[]);let{value:r,cursorPosition:o,infoMessage:i,commandIsPending:s,autoCompletion:d,command:m,modifier:u}=t,f=ea(()=>{let y=Math.max(0,Math.min(o,r.length)),N=So({value:r,command:m}),S=sa({value:r,command:m,modifier:u}),b=m?dn(m):null,I=ia({command:m,modifier:u}),E=(Z,ee)=>{let en=N&&ee>=N.start&&ee<N.end,tn=S&&ee>=S.start&&ee<S.end;return en&&b?b.fg(Z):tn&&I?I.bg(Z):Z},T=(Z,ee)=>{let en=N&&ee>=N.start&&ee<N.end,tn=S&&ee>=S.start&&ee<S.end;return en&&b?b.fgCursor(Z):tn&&I?I.bgCursor(Z):na(Z)},F=r.slice(0,y),Q=r[y]??" ",re=y<r.length?r.slice(y+1):"",xt=Array.from(F).map((Z,ee)=>E(Z,ee)).join(""),Gn=T(Q,y),Xn=Array.from(re).map((Z,ee)=>E(Z,y+1+ee)).join("");if(d.hint){let Z=d.hint[d.overlap]??Q;Gn=ra(Z),Xn=Io(d.remainder.slice(1)+re)}return Io(":")+xt+Gn+Xn},[r,o,d,m,u]);return lt.createElement(Ln,{flexDirection:"column",justifyContent:"flex-start"},lt.createElement(Ln,{flexDirection:"column",paddingX:1,borderColor:v.secondary,borderStyle:"round",width:e},lt.createElement(Ln,null,lt.createElement(Eo,null,f),i&&lt.createElement(Eo,{wrap:"truncate",color:s?v.red:v.secondary2},` ${i} `))))};import To from"chalk";import{Box as da,Text as Rn}from"ink";import Wt,{useEffect as ca,useState as la}from"react";var ma=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],wo=e=>{let t=e.replace("#","");return{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}},ua=({r:e,g:t,b:n})=>{let r=o=>Math.round(Math.max(0,Math.min(255,o))).toString(16).padStart(2,"0");return`#${r(e)}${r(t)}${r(n)}`},pa=(e,t,n)=>{let r=wo(e),o=wo(t);return ua({r:r.r+(o.r-r.r)*n,g:r.g+(o.g-r.g)*n,b:r.b+(o.b-r.b)*n})},ga=(e,t)=>{if(e.length===1)return e[0];let n=t*(e.length-1),r=Math.floor(n),o=n-r,i=e[r],s=e[Math.min(r+1,e.length-1)];return pa(i,s,o)},fa=(e,t)=>e.length===t?e:e.length>t?e.slice(0,t):e.padEnd(t," "),Mo=({width:e,availableHints:t})=>{let{syncStatus:{status:n,msg:r}}=H(),[o,i]=la(0);ca(()=>{if(n!=="syncing"){i(0);return}let E=setInterval(()=>{i(T=>T+1)},50);return()=>clearInterval(E)},[n]);let s=[],d=0;for(let E of t){let F=(s.length>0?" | ":"").length+E.length;if(d+F>e-4)break;s.push(E),d+=F}let m=n!="synced"?r??s.join(" | "):s.join(" | "),u=Math.max(0,e-2),f=n==="syncing"?ga(ma,(Math.sin(o*.12)+1)/2):v.secondary,y=To.hex(f??"fff"),N=To.hex(v.secondary2),S=y(`\u256D${"\u2500".repeat(u)}\u256E`),b=y(`\u2570${"\u2500".repeat(u)}\u256F`),I=`${y("\u2502")}${N(fa(` ${m} `,u))}${y("\u2502")}`;return Wt.createElement(da,{flexDirection:"column",width:e},Wt.createElement(Rn,null,S),Wt.createElement(Rn,null,I),Wt.createElement(Rn,null,b))};var Ht=({width:e,mode:t,availableHints:n})=>{let r=H(),o=[],i=0;for(let s of n){let m=(o.length>0?" | ":"").length+s.length;if(i+m>e+2)break;o.push(s),i+=m}return Pn.createElement(xa,null,t===p.COMMAND_LINE&&r.syncStatus.status!=="syncing"?Pn.createElement(Ao,{width:e}):Pn.createElement(Mo,{width:e,mode:t,availableHints:n}))};import{Box as tt,Text as Lo}from"ink";import Le from"react";var Ro=({width:e})=>{let t=[...C().availableActions].map(n=>n.description).filter(n=>n!==void 0).map(n=>{let[r,o]=n.split("]"),i=r?.replace("[",""),s=o?.trim();return[i,s]}).filter(n=>n[0]!==void 0&&n[1]!==void 0).sort(([n],[r])=>n.length===1&&r.length!==1?-1:n.length!==1&&r.length===1?1:n.localeCompare(r,void 0,{sensitivity:"base"}));return t.unshift(["Key(s)","Action"]),Le.createElement(tt,{flexDirection:"column",marginTop:3,borderColor:v.secondary,borderStyle:"round",width:e,minHeight:19},Le.createElement(tt,{flexDirection:"column",width:e},C().mode===p.HELP?t.map(([n,r],o)=>Le.createElement(tt,{paddingLeft:1,key:o,flexDirection:"row"},Le.createElement(tt,{key:o,flexDirection:"row",paddingBottom:o?0:1},Le.createElement(tt,{width:20,justifyContent:"flex-end"},Le.createElement(Lo,{color:o?v.accent:v.secondary},n)),Le.createElement(tt,{flexGrow:1,width:40,paddingLeft:2},Le.createElement(Lo,{color:o?v.primary:v.secondary},r))))):null))};import Fo from"chalk";import{Box as Bn,Text as Oo}from"ink";import Ie from"react";import{Box as Dn,Text as Ia}from"ink";import ot from"react";import{Text as ya}from"ink";import va from"react";var Ca=e=>e.toLowerCase().trim(),ha=(e,t=je)=>{let n=Ca(e);return t[n]?t[n]:at(n)},nt=({id:e,isSelected:t})=>{let n=h.getContributor(e);if(n)return va.createElement(ya,{underline:t,color:ha(n.name)},"@"+n.name)};import{Text as Na}from"ink";import Ea from"react";var rt=({id:e,isSelected:t})=>{let n=h.getTag(e);if(n)return Ea.createElement(Na,{underline:t,backgroundColor:ie(n.name),color:v.primary}," "+n.name+" ")};var ba=(e,t)=>e.length<=t?e:t<=1?"\u2026":e.slice(0,t-1)+"\u2026",Po=({width:e})=>{let{breadCrumb:t,currentNode:n,selectedIndex:r,viewMode:o}=C(),i=k(n.id)[r],s=Ke(i?.id??n.id,"TICKET"),d=$e(s)?s.data:void 0,m=d?.id?k(d.id):[],u=I=>{let E=m.find(T=>T.title===I);return E?k(E.id).map(T=>typeof T.props?.value=="string"?T.props.value:"").filter(T=>!!T):[]},f=u("Tags"),y=u("Assignees"),N=d?.parentNodeId?!on(n.id,d?.parentNodeId)&&o==="dense":!1,S=t.map((I,E)=>{let T=E===t.length-1,F=k(I.id),Q=T?F?.[r]?.title:void 0;return`${E?" / ":""}${I.title??""}${Q?` \u25B8 ${Q}`:""}`}).join(""),b=ba(S,e);return ot.createElement(Dn,null,ot.createElement(Ia,{color:v.secondary2},b),N?f.map(I=>ot.createElement(Dn,{key:I,paddingLeft:2},ot.createElement(rt,{id:I}))):null,N?y.map(I=>ot.createElement(Dn,{key:I,paddingLeft:2},ot.createElement(nt,{id:I}))):null)};import{Box as Sa,Text as Do}from"ink";import _t from"react";var Aa=({filters:e})=>_t.createElement(Sa,{columnGap:1},_t.createElement(Do,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:n,operator:r})=>_t.createElement(Do,{backgroundColor:"black",color:"white"},` ${n}${r}"${t}" `))),Bo=_t.memo(Aa);function $t({filters:e,hideBreadCrumb:t=!1}){let{userName:n,preferredEditor:r}=ce(),o=40,i=process.stdout.columns-o-8;return Ie.createElement(Bn,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},t?Ie.createElement(Oo,null," "):Ie.createElement(Bn,{paddingLeft:1},e.length>0?Ie.createElement(Bo,{filters:e}):Ie.createElement(Po,{width:i})),Ie.createElement(Bn,{columnGap:1,paddingRight:2,"max-width":o,overflow:"hidden",justifyContent:"flex-end"},Ie.createElement(ko,{icon:"@",value:n}),Ie.createElement(ko,{icon:"\u276F",value:r})))}function ko({icon:e,value:t}){return Ie.createElement(Oo,null,Fo.dim(e)+Fo.hex(v.accent)(` ${t??"-"} `))}import{Box as Ya,Text as Ja}from"ink";import pt from"react";import{Box as Vt,Text as Fn}from"ink";import Re from"react";import{Text as Uo}from"ink";import Wo,{useEffect as Ta,useState as wa}from"react";var Ho={help:["\u25B8 ","\u25B8 ","\u25B8 "],default:["\u25B8 ","\u25B8 ","\u25B8 "],move:["\u2191 ","\u2192 ","\u2193 ","\u2190 "],"command-line":["\u276F ","\u276F ","\u276F "]},J=({isSelected:e,placeholder:t=" "})=>{let{mode:n}=H(),r=Ho[n]??Ho.default,[o,i]=wa(r.length-1);return Ta(()=>{if(!e)return;let s=setInterval(()=>{i(d=>(d+1)%r.length)},800);return()=>clearInterval(s)},[e,r]),e?Wo.createElement(Uo,{color:v.accent,dimColor:o===1},r[o]):Wo.createElement(Uo,null,t)};function kn(){let e=H(),t=e.nodes[e.rootNodeId],o=process.stdout.rows-1-3,i=process.stdout.columns||120,s=t?.id?w(t?.id):[];return Re.createElement(Vt,{flexDirection:"column",height:o,padding:1,borderStyle:"round",borderColor:v.secondary,width:i},Re.createElement(Vt,{padding:1,paddingTop:0,paddingBottom:0},Re.createElement(Fn,null,"Select a board:")),Re.createElement(Vt,{padding:1,flexDirection:"column"},s.map((d,m)=>{let u=e.currentNode.context==="WORKSPACE"&&e.selectedIndex===m,y=w(d.id).flatMap(({id:N})=>k(N)).length;return Re.createElement(Vt,{key:d.id??m},Re.createElement(Fn,{color:u?v.accent:v.secondary},Re.createElement(J,{isSelected:u})),Re.createElement(Fn,{color:u?v.accent:v.secondary},d.title," (",y," issues)",d.readonly?" \u{1F512}":""))})))}import{Box as Ga}from"ink";import Xt from"react";import{Box as Wn,Text as Da}from"ink";import ue from"react";import{Box as On,Text as Ma}from"ink";import Kt from"react";var jt=({children:e=[],height:t,selectedIndex:n,itemHeight:r=1,scrollByOne:o=!1})=>{if(e.length===0)return null;let i=Math.max(1,Math.floor(t)),s=Math.max(1,Math.ceil(r)),d=Math.max(1,Math.floor(i/s)),m=Math.max(0,Math.min(n,e.length-1)),u=Math.max(0,e.length-d),f=o?Math.min(u,Math.max(0,m-d+1)):Math.min(u,Math.floor(m/d)*d),y=f+d,N=e.slice(f,y),S=e.length>d,b=i,I=S?Math.max(1,Math.floor(d/e.length*b)):b,E=Math.max(0,b-I),T=Math.max(1,e.length-d),F=S?Math.floor(f/T*E):0;return Kt.createElement(On,{flexDirection:"row",height:i,width:"100%"},Kt.createElement(On,{flexDirection:"column",flexGrow:1,height:i},N),Kt.createElement(On,{flexDirection:"column",width:1,height:b},Array.from({length:b}).map((Q,re)=>Kt.createElement(Ma,{key:re,color:S&&re>=F&&re<F+I?v.accent:v.secondary},S?"\u2502":" "))))};import{Box as zt,Text as La}from"ink";import He from"react";var _o=({width:e,ticket:t,isSelected:n})=>{let r=e-14,o=vt(Qn(t.title),r),i=w(t.id),s=u=>{let f=i.find(y=>y.title===u);return f?w(f.id).map(y=>typeof y.props?.value=="string"?y.props.value:"").filter(y=>!!y):[]},d=s("Tags").map(u=>h.getTag(u)).filter(u=>!!u),m=s("Assignees").map(u=>h.getContributor(u)).filter(u=>!!u);return He.createElement(zt,{borderStyle:"round",width:e-7,height:4,flexDirection:"column",borderColor:n?v.accent:v.secondary,justifyContent:"space-between"},He.createElement(zt,{borderBottom:!0},He.createElement(zt,{paddingLeft:1,flexDirection:"column"},He.createElement(La,{color:v.primary},o))),He.createElement(zt,{flexDirection:"row",paddingLeft:1},d.map(u=>He.createElement(rt,{key:u.id,id:u.id})),m.map(u=>He.createElement(nt,{key:u.id,id:u.id}))))};import Ra from"chalk";import{Box as ut,Text as Un}from"ink";import be from"react";var Pa=(e,t)=>e.length>=t?e.slice(0,t)+"...":e,$o=({width:e,ticket:t,isSelected:n,index:r,mode:o})=>{let i=w(t.id),s=I=>{let E=i.find(T=>T.title===I);return E?w(E.id).map(T=>typeof T.props?.value=="string"?T.props.value:"").filter(T=>!!T):[]},d=s("Tags").map(I=>h.getTag(I)).filter(I=>!!I),m=s("Assignees").map(I=>h.getContributor(I)).filter(I=>!!I),u=1,f=d.length*(1+u),y=m.length*(2+u),N=d.map(I=>be.createElement(ut,{key:I.id,paddingRight:u},be.createElement(Un,{color:ie(I.name)},"\u25A0"))),S=m.map(I=>be.createElement(ut,{key:I.id,paddingRight:u},be.createElement(Un,{color:at(I.name)},"@"+I.name.at(0)))),b=n?v.accent:o===p.MOVE?v.secondary:v.primary;return be.createElement(ut,{borderBottom:!0,justifyContent:"space-between"},be.createElement(ut,null,be.createElement(J,{isSelected:n,placeholder:Ra.dim.gray(r+1+" ")}),be.createElement(Un,{wrap:"truncate",color:b},Pa(t.title,e-f-y-14))),be.createElement(ut,null,N,S))};var Ba=({swimlane:e,isSelected:t,width:n,height:r,isDense:o,isFocused:i,listSelectedIndex:s,mode:d})=>{let{renderedChildrenIndex:m}=H(),u=m[e.id]??[],f=`${e.title} (${u.length})`,y=3,N=o?1:4,S=r-y-(o?2:1),b=ue.createElement(Wn,{borderStyle:"round",borderColor:v.secondary,justifyContent:"flex-start",borderLeft:!1,borderTop:!1,borderRight:!1},ue.createElement(J,{isSelected:t}),ue.createElement(Da,{bold:!0,color:t?v.accent:v.primary},f," ",e.readonly?"\u{1F512}":"")),I=(E,T)=>{let F=i&&s===T;return o?ue.createElement($o,{key:E.id,index:T,width:n,ticket:E,isSelected:F,mode:d}):ue.createElement(_o,{key:E.id,width:n,ticket:E,isSelected:F})};return ue.createElement(Wn,{flexDirection:"column",width:n,borderStyle:"round",borderColor:t?v.accent:v.secondary,paddingRight:1,paddingLeft:1,height:r},b,ue.createElement(Wn,{padding:o?1:0},u.length>0&&ue.createElement(jt,{selectedIndex:s,height:S,itemHeight:N},u.map(I)),ue.createElement(J,{isSelected:i&&s===-1})))},Vo=ue.memo(Ba);import{Box as $n,Text as za}from"ink";import Pe,{useEffect as Vn,useMemo as Xo}from"react";import Se from"chalk";import jo from"string-width";import{decodeTime as Fa}from"ulid";var Ko=e=>{let t=Date.now()-e,n=[{label:"y",ms:1e3*60*60*24*365},{label:"mo",ms:1e3*60*60*24*30},{label:"w",ms:1e3*60*60*24*7},{label:"d",ms:1e3*60*60*24},{label:"h",ms:1e3*60*60},{label:"m",ms:1e3*60},{label:"s",ms:1e3}];for(let{label:r,ms:o}of n){let i=Math.floor(t/o);if(i>=1)return`${i}${r} ago`}return"just now"};var ka=(e,t)=>e+" ".repeat(Math.max(0,t-jo(e))),Oa=(e,t)=>" ".repeat(Math.max(0,t-jo(e)))+e,Ua=e=>(()=>{let n={"add.issue":"Created with title","assign.issue":"Assigned to","close.issue":"Closed","delete.node":"Deleted","edit.title":"Changed title to","edit.description":"Changed description","reopen.issue":"Reopened","tag.issue":"Tagged with","lock.node":"Locked node","move.node":"Moved issue"};return(o=>n[o]??(o.endsWith("e")?`${o}d`:`${o}ed`))(e)})(),Wa=e=>{switch(e.action){case"move.node":{let t=h.getNode(e.payload.parent),n=t?Se.dim.bgBlack(` ${t.title} `):"unknown",r=e.payload.pos;if(!r)return`to ${n}`;switch(r.at){case"start":return`to ${n} ${Se.dim("(to top of list)")}`;case"end":return`to ${n} ${Se.dim("(to bottom of list)")}`;case"before":return`to ${n} ${Se.dim("(up in list)")}`;case"after":return`to ${n} ${Se.dim("(down in list)")}`}}case"tag.issue":{let t=C().tags[e.payload.tagId];return t?Se.bgHex(ie(t.name))(` ${t.name} `):"unknown tag"}case"assign.issue":{let t=C().contributors[e.payload.contributor];return t?Se.hex(ie(t.name))(` ${t.name} `):"unknown user"}case"add.board":case"add.swimlane":case"add.issue":case"add.field":case"create.tag":case"create.contributor":case"edit.title":return`"${"name"in e.payload?e.payload.name:""}"`;default:return""}},Ha=e=>{let t=Ko(Fa(e));return Se.gray(Oa(t,8))},_a=12,$a=e=>{let t=e.split(".")[1]??"unknown";return ka(`${t}`,_a)},zo=e=>{let t=Ha(e.id),n=$a(e.userId),r=Ua(e.action),o=Wa(e),i=Se.dim("\u203A"),s=[r,o].filter(Boolean).join(" ");return`${n} ${t} ${i} ${s}`};import{Box as qt,Text as Va}from"ink";import Ae from"react";var qo=({selectedIndex:e,parent:t,selected:n})=>{let{currentNode:r}=H(),{title:o}=t,i=w(t.id).map(s=>{let d=typeof s.props?.value=="string"?s.props.value:"";if(o==="Assignees")return h.getContributor(d)?.id;if(o==="Tags")return h.getTag(d)?.id}).filter(s=>!!s);return Ae.createElement(qt,{alignItems:"center",paddingTop:1},Ae.createElement(qt,{minWidth:12},Ae.createElement(J,{isSelected:n}),Ae.createElement(Va,{color:n?v.accent:v.secondary2},o,":")),Ae.createElement(qt,{flexDirection:"row",marginLeft:1,paddingRight:1},i.map((s,d)=>{let m=r.id===t.id&&d===e;return Ae.createElement(qt,{key:`${o}-${s}`,paddingRight:2,minHeight:1},Ae.createElement(J,{isSelected:m}),o==="Assignees"?Ae.createElement(nt,{isSelected:m,id:s}):o==="Tags"?Ae.createElement(rt,{isSelected:m,id:s}):null)})))};import{Box as Gt,Text as Hn}from"ink";import{marked as Go}from"marked";import Ka from"marked-terminal";import Te,{useEffect as ja}from"react";var _n=({id:e,label:t,text:n,height:r,selected:o,maxWidth:i})=>{let{selectedIndex:s,currentNode:d}=H();Go.setOptions({renderer:new Ka});let m=N=>String(Go.parseInline(N)).replace(/\r?\n/g,""),u=typeof n=="string"?n.split(/\r?\n|\u2028|\u2029/):[];ja(()=>{let N=[];return u.forEach((S,b)=>{let I=q.text({id:`${b}`,name:`Line ${b+1}`,parentNodeId:e,props:{value:S},readonly:!0}),E=h.createNodeAtPosition(I);$e(E)&&N.push(E.data.id)}),()=>N.forEach(h.deleteNode)},[e,n]);let f="\u2029",y=u.map((N,S)=>{let b=d.id===e&&s===S;return Te.createElement(Gt,{key:`${e}-${S}`},Te.createElement(Hn,{color:b?v.primary:v.secondary2,dimColor:!b},`${S+1} `.padStart(5,"\xA0")),Te.createElement(Hn,{backgroundColor:b?"gray":""},m(N.length?vt(N,i-10):f)))});return Te.createElement(Gt,{flexDirection:"column",paddingTop:1},Te.createElement(Gt,null,Te.createElement(J,{isSelected:o}),Te.createElement(Hn,{color:o?v.accent:v.secondary2},t)),Te.createElement(Gt,{flexDirection:"row",borderStyle:"round",borderColor:v.secondary,paddingLeft:1,paddingRight:1,marginLeft:1},Te.createElement(jt,{scrollByOne:!0,children:y,height:r-2,selectedIndex:s,itemHeight:1})))};var qa=e=>`${e}::log`,Yo=({ticket:e,height:t})=>{let{selectedIndex:n,currentNode:r}=H(),o=process.stdout.columns||120,i=Xo(()=>qa(e.id),[e.id]),s=Xo(()=>[...e.log].reverse().map(zo).join(`
26
- `),[e.log]);Vn(()=>{if(h.getNode(i))return;let T={...q.field(i,"Log",e.id,{value:s}),readonly:!0,childRenderAxis:"vertical"};return h.createNodeAtPosition(T),()=>{h.deleteNode(i)}},[i,e.id]),Vn(()=>{let E=h.getNode(i);E&&E.props.value!==s&&h.updateNode({...E,props:{...E.props,value:s},childRenderAxis:"vertical",readonly:!0})},[i,s]);let d=r.id===e.id,m=r.id===i||r.parentNodeId===i;Vn(()=>{m&&(n>=0||D.navigate({selectedIndex:0}))},[m,n]);let u=w(e.id);if(m){let E=h.getNode(i),F=t-3;return Pe.createElement($n,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},E?Pe.createElement(_n,{id:E.id,label:"Event log",text:E.props.value??"",selected:!1,maxWidth:o,height:F}):null)}let f=u.reduce((E,T)=>T.title==="Assignees"||T.title==="Tags"||T.id===i?++E:E,0),y=2,N=f*1,b=t-3-N-y,I=(E,T)=>E.title==="Assignees"||E.title==="Tags"?Pe.createElement(qo,{key:E.id,parent:E,selected:T,selectedIndex:n}):E.id===i?Pe.createElement($n,{key:E.id,paddingTop:1},Pe.createElement(J,{isSelected:T}),Pe.createElement(za,{backgroundColor:v.secondary,color:T?v.accent:v.primary}," History \u203A\u203A ")):Pe.createElement(_n,{label:"Description (press e to edit)",key:E.id,id:E.id,text:E.props.value??"",selected:T,maxWidth:o,height:b});return Pe.createElement($n,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},u.map((E,T)=>I(E,d&&n===T)))};var Xa=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:s,width:d})=>{let m=t.context,u=m===L.TICKET||m===L.FIELD_LIST||m===L.FIELD,f=m===L.BOARD||m===L.SWIMLANE,y=m===L.TICKET?t:r.find(E=>E.context===L.TICKET),N=Math.floor(d/3),S=Math.floor(d/Math.max(e.length,1)),b=Math.min(S,N),I=i==="dense";return Xt.createElement(Ga,{flexDirection:"row",height:s},f&&e.map((E,T)=>{let F=t.id===E.id,Q=F?n:-1,re=t.context===L.BOARD&&n===T;return Xt.createElement(Vo,{key:E.id,height:s,width:b,swimlane:E,isSelected:re,isDense:I,isFocused:F,listSelectedIndex:Q,mode:o})}),u&&y&&Xt.createElement(Yo,{height:s,ticket:y}))},Jo=Xt.memo(Xa);var Qa=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:s})=>{let{renderedChildrenIndex:d}=H(),m=n.find(({context:N})=>N==="BOARD"),y=i-1-3;return pt.createElement(Ya,{flexDirection:"row"},e.context==="WORKSPACE"?pt.createElement(kn,null):m?pt.createElement(Jo,{height:y,width:s,swimlanes:(d[m.id]??[]).filter(N=>N!==void 0&&Yn(N)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):pt.createElement(Ja,null))},Qo=pt.memo(Qa);import{Box as gt,Text as pe}from"ink";import B from"react";var Yt=({isDone:e,command:t,value:n})=>B.createElement(gt,null,B.createElement(pe,{color:v.accent,dimColor:e},e?" \u2714 ":" "),B.createElement(pe,{dimColor:e},"Type "),B.createElement(pe,{backgroundColor:v.secondary,dimColor:e}," "+t+" "),n&&B.createElement(B.Fragment,null,B.createElement(pe,{dimColor:e}," "),B.createElement(pe,{color:v.secondary,dimColor:e},"<"+n+">")));function Kn({width:e,height:t,hasUserName:n,hasPreferredEditor:r,userName:o,preferredEditor:i}){let s=n&&r,d=n?r?null:":set:editor":":set:username";return B.createElement(gt,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},B.createElement(pe,{color:v.accent,bold:!0},"Welcome! \u{1F539}"),B.createElement(pe,null,"Lets get you started - its a breeze."),B.createElement(pe,{color:v.secondary2},"And remember, you can always get help with"," ",B.createElement(pe,{color:v.accent},":help"),"."),!s&&B.createElement(pe,{color:v.secondary2},d===":set:username"?"First, choose your username.":"Nice. One more step."),B.createElement(gt,{flexDirection:"column"},n&&B.createElement(gt,{marginBottom:1},B.createElement(Yt,{isDone:!0,command:":set:username",value:o})),!n&&B.createElement(Yt,{isDone:!1,command:":set:username"}),n&&!r&&B.createElement(Yt,{isDone:!1,command:":set:editor"}),s&&B.createElement(gt,null,B.createElement(Yt,{isDone:!0,command:":set:editor",value:i}))))}var ed=({width:e,height:t})=>P.createElement(de,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},P.createElement(De,{color:v.accent,bold:!0},"Initialize project"),P.createElement(De,null,`This folder is not an ${Za.hex(v.accent)("epiq")} project yet.`),P.createElement(De,{color:v.primary},"To start tracking issues here, we need to initialize a new"," ",P.createElement(De,{color:v.primary,backgroundColor:v.secondary}," .epiq/ ")," ","directory in this repository."),P.createElement(de,{marginTop:1,flexDirection:"column"},P.createElement(de,null,P.createElement(De,{color:v.accent}," "),P.createElement(De,{color:v.primary},"Type "),P.createElement(De,{backgroundColor:v.secondary}," :init "))),P.createElement(de,{marginTop:1},P.createElement(De,{color:v.secondary2},"(This will create the local epiq project files)")));function jn({width:e,height:t}){let n=H(),r=n.filters;if(n.mode===p.HELP)return P.createElement(de,{flexDirection:"column"},P.createElement(Ro,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:s,userName:d,preferredEditor:m}=Et(),u=!o,f=o&&It();if(u)return P.createElement(de,{flexDirection:"column"},P.createElement(de,{flexDirection:"column"},P.createElement($t,{hideBreadCrumb:!0,filters:r}),P.createElement(Kn,{height:t,width:e,hasUserName:s,hasPreferredEditor:i,userName:d??"",preferredEditor:m??""})),P.createElement(Ht,{width:e,mode:n.mode,availableHints:n.availableHints}));if(f)return P.createElement(de,{flexDirection:"column"},P.createElement(de,{flexDirection:"column"},P.createElement($t,{hideBreadCrumb:!0,filters:r}),P.createElement(ed,{height:t,width:e})),P.createElement(Ht,{width:e,mode:n.mode,availableHints:n.availableHints}));let y=Ze(C().breadCrumb??[],"BOARD");if($e(y)){let N=y.data.id,S=w(N).length,b=3,I=Math.floor(e/b),E=Math.floor(e/Math.max(S,1));e=Math.min(E,I)*Math.max(S,b)}return P.createElement(de,{flexDirection:"column"},P.createElement(de,{flexDirection:"column"},P.createElement($t,{filters:r}),P.createElement(Qo,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),P.createElement(Ht,{width:e,mode:n.mode,availableHints:n.availableHints}))}import{Box as _e,Text as Be}from"ink";import z,{useEffect as td,useMemo as nd,useState as rd}from"react";var od=["\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 "];function id(e,t,n){return Math.min(n,Math.max(t,e))}function sd(e,t){return z.createElement(Be,null,z.createElement(Be,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(0,14)),z.createElement(Be,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(14)))}function ad(e,t=28){if(e>=1)return"\u2588".repeat(t);let n=Math.floor(e*(t-1));return Array.from({length:t},(r,o)=>{let i=Math.abs(o-n);return i===0?"\u2588":i===1?"\u2593":i===2?"\u2592":i===3?"\u2591":o<n?"\u2500":"\xB7"}).join("")}function zn({durationMs:e=3e3,slogan:t="Never leave the command line"}){let n=Math.max(1,e),[r,o]=rd(0);td(()=>{let m=Date.now(),u=setInterval(()=>{let f=Date.now()-m;if(f>=n){o(n),clearInterval(u);return}o(f)},33);return()=>clearInterval(u)},[n]);let i=id(r/n,0,1),s=nd(()=>ad(i,28),[i]),d=`${Math.round(i*100)}%`;return z.createElement(_e,{flexDirection:"column",alignItems:"center",justifyContent:"center",paddingX:4,paddingY:1},z.createElement(_e,{flexDirection:"column",minWidth:42},z.createElement(_e,{flexDirection:"column",marginBottom:1},od.map((m,u)=>z.createElement(_e,{key:u,justifyContent:"center"},sd(m,u)))),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Be,{color:"gray"},t)),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Be,{color:"cyan"},s.slice(0,10)),z.createElement(Be,{color:"blue"},s.slice(10,18)),z.createElement(Be,{color:"magenta"},s.slice(18))),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Be,{color:"gray"},d))))}import dd from"readline";var Jt,Qt,ge,Zo=async e=>{if(e.ctrl&&e.name==="c")return D.exit();let{actionIndex:t,mode:n}=C(),r=Sr(e,n);if(!r)return;let o=t[n]?.[r];if(o?.action)try{await o.action(o,e)}catch(i){logger.error(i)}},cd=()=>async function(t,n){n.name!=="escape"&&(ge&&(clearTimeout(ge),ge=void 0),await Zo(n))},ld=()=>async function(t){if(t.length===1&&t[0]===27){ge&&clearTimeout(ge),ge=setTimeout(()=>{Zo({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),ge=void 0},25);return}ge&&(clearTimeout(ge),ge=void 0)};function ei(){Jt&&process.stdin.removeListener("keypress",Jt),Qt&&process.stdin.removeListener("data",Qt),Jt=cd(),Qt=ld(),dd.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",Qt),process.stdin.on("keypress",Jt)}import ft from"fs";import ni from"path";import md from"util";var ti=1e3,ri=(e=process.cwd())=>ni.join(Ye(e),me(),"log","epiq.log");function ud(e=process.cwd()){if(!Rt)return;let t=ri(e);if(!ft.existsSync(t))return;let r=ft.readFileSync(t,"utf8").split(`
27
- `);if(r[r.length-1]===""&&r.pop(),r.length<=ti)return;let o=r.slice(-ti).join(`
25
+ `)):(Qs(),c("State booted successfully",null))}import{Box as ya}from"ink";import Bn from"react";import gt from"chalk";import{Box as Pn,Text as Io}from"ink";import pt,{useEffect as ea,useMemo as ta,useState as na}from"react";var bo=gt.gray,ra=gt.inverse,oa=gt.inverse.gray,ia={hint:"",hints:[],overlap:0,remainder:""},Ao=({value:e,command:t})=>{if(!t)return null;let n=e.trimStart(),o=e.length-n.length;return e.slice(o,o+t.length)!==t?null:{start:o,end:o+t.length}},sa=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let n=re(t);return{bg:r=>gt.bgHex(n).black(r),bgCursor:r=>gt.bgHex(n).inverse.black(r)}}return ln(t)},aa=({value:e,command:t,modifier:n})=>{if(!t||!n)return null;let r=Ao({value:e,command:t});if(!r)return null;let i=e.slice(r.end).match(/^\s*/)?.[0].length??0,a=r.end+i;return e.slice(a,a+n.length)!==n?null:{start:a,end:a+n.length}},So=()=>({value:j.value,cursorPosition:j.cursorPosition,commandIsPending:j.commandIsPending,autoCompletion:j.commandMeta.autoCompletion??ia,infoMessage:j.commandMeta.infoMessage,validationStatus:j.commandMeta.validity,command:j.commandMeta.command,inputString:j.commandMeta.inputString,modifier:j.commandMeta.modifier}),da=(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,To=({width:e})=>{let[t,n]=na(So());ea(()=>{let y=()=>{let S=So();n(b=>da(b,S)?b:S)},N=yr(y);return y(),()=>{N()}},[]);let{value:r,cursorPosition:o,infoMessage:i,commandIsPending:a,autoCompletion:d,command:m,modifier:u}=t,f=ta(()=>{let y=Math.max(0,Math.min(o,r.length)),N=Ao({value:r,command:m}),S=aa({value:r,command:m,modifier:u}),b=m?ln(m):null,I=sa({command:m,modifier:u}),E=(Q,Z)=>{let nn=N&&Z>=N.start&&Z<N.end,rn=S&&Z>=S.start&&Z<S.end;return nn&&b?b.fg(Q):rn&&I?I.bg(Q):Q},T=(Q,Z)=>{let nn=N&&Z>=N.start&&Z<N.end,rn=S&&Z>=S.start&&Z<S.end;return nn&&b?b.fgCursor(Q):rn&&I?I.bgCursor(Q):ra(Q)},F=r.slice(0,y),oe=r[y]??" ",ie=y<r.length?r.slice(y+1):"",$e=Array.from(F).map((Q,Z)=>E(Q,Z)).join(""),Ve=T(oe,y),at=Array.from(ie).map((Q,Z)=>E(Q,y+1+Z)).join("");if(d.hint){let Q=d.hint[d.overlap]??oe;Ve=oa(Q),at=bo(d.remainder.slice(1)+ie)}return bo(":")+$e+Ve+at},[r,o,d,m,u]);return pt.createElement(Pn,{flexDirection:"column",justifyContent:"flex-start"},pt.createElement(Pn,{flexDirection:"column",paddingX:1,borderColor:v.secondary,borderStyle:"round",width:e},pt.createElement(Pn,null,pt.createElement(Io,null,f),i&&pt.createElement(Io,{wrap:"truncate",color:a?v.red:v.secondary2},` ${i} `))))};import wo from"chalk";import{Box as ca,Text as Dn}from"ink";import _t,{useEffect as la,useState as ma}from"react";var ua=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],Mo=e=>{let t=e.replace("#","");return{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}},pa=({r:e,g:t,b:n})=>{let r=o=>Math.round(Math.max(0,Math.min(255,o))).toString(16).padStart(2,"0");return`#${r(e)}${r(t)}${r(n)}`},ga=(e,t,n)=>{let r=Mo(e),o=Mo(t);return pa({r:r.r+(o.r-r.r)*n,g:r.g+(o.g-r.g)*n,b:r.b+(o.b-r.b)*n})},fa=(e,t)=>{if(e.length===1)return e[0];let n=t*(e.length-1),r=Math.floor(n),o=n-r,i=e[r],a=e[Math.min(r+1,e.length-1)];return ga(i,a,o)},xa=(e,t)=>e.length===t?e:e.length>t?e.slice(0,t):e.padEnd(t," "),Lo=({width:e,availableHints:t})=>{let{syncStatus:{status:n,msg:r}}=H(),[o,i]=ma(0);la(()=>{if(n!=="syncing"){i(0);return}let E=setInterval(()=>{i(T=>T+1)},50);return()=>clearInterval(E)},[n]);let a=[],d=0;for(let E of t){let F=(a.length>0?" | ":"").length+E.length;if(d+F>e-4)break;a.push(E),d+=F}let m=n!="synced"?r??a.join(" | "):a.join(" | "),u=Math.max(0,e-2),f=n==="syncing"?fa(ua,(Math.sin(o*.12)+1)/2):v.secondary,y=wo.hex(f??"fff"),N=wo.hex(v.secondary2),S=y(`\u256D${"\u2500".repeat(u)}\u256E`),b=y(`\u2570${"\u2500".repeat(u)}\u256F`),I=`${y("\u2502")}${N(xa(` ${m} `,u))}${y("\u2502")}`;return _t.createElement(ca,{flexDirection:"column",width:e},_t.createElement(Dn,null,S),_t.createElement(Dn,null,I),_t.createElement(Dn,null,b))};var $t=({width:e,mode:t,availableHints:n})=>{let r=H(),o=[],i=0;for(let a of n){let m=(o.length>0?" | ":"").length+a.length;if(i+m>e+2)break;o.push(a),i+=m}return Bn.createElement(ya,null,t===p.COMMAND_LINE&&r.syncStatus.status!=="syncing"?Bn.createElement(To,{width:e}):Bn.createElement(Lo,{width:e,mode:t,availableHints:n}))};import{Box as rt,Text as Ro}from"ink";import Re from"react";var Po=({width:e})=>{let t=[...C().availableActions].map(n=>n.description).filter(n=>n!==void 0).map(n=>{let[r,o]=n.split("]"),i=r?.replace("[",""),a=o?.trim();return[i,a]}).filter(n=>n[0]!==void 0&&n[1]!==void 0).sort(([n],[r])=>n.length===1&&r.length!==1?-1:n.length!==1&&r.length===1?1:n.localeCompare(r,void 0,{sensitivity:"base"}));return t.unshift(["Key(s)","Action"]),Re.createElement(rt,{flexDirection:"column",marginTop:3,borderColor:v.secondary,borderStyle:"round",width:e,minHeight:19},Re.createElement(rt,{flexDirection:"column",width:e},C().mode===p.HELP?t.map(([n,r],o)=>Re.createElement(rt,{paddingLeft:1,key:o,flexDirection:"row"},Re.createElement(rt,{key:o,flexDirection:"row",paddingBottom:o?0:1},Re.createElement(rt,{width:20,justifyContent:"flex-end"},Re.createElement(Ro,{color:o?v.accent:v.secondary},n)),Re.createElement(rt,{flexGrow:1,width:40,paddingLeft:2},Re.createElement(Ro,{color:o?v.primary:v.secondary},r))))):null))};import ko from"chalk";import{Box as kn,Text as Uo}from"ink";import Ie from"react";import{Box as Fn,Text as ba}from"ink";import st from"react";import{Text as va}from"ink";import Ca from"react";var ha=e=>e.toLowerCase().trim(),Na=(e,t=qe)=>{let n=ha(e);return t[n]?t[n]:lt(n)},ot=({id:e,isSelected:t})=>{let n=h.getContributor(e);if(n)return Ca.createElement(va,{underline:t,color:Na(n.name)},"@"+n.name)};import{Text as Ea}from"ink";import Ia from"react";var it=({id:e,isSelected:t})=>{let n=h.getTag(e);if(n)return Ia.createElement(Ea,{underline:t,backgroundColor:re(n.name),color:v.primary}," "+n.name+" ")};var Sa=(e,t)=>e.length<=t?e:t<=1?"\u2026":e.slice(0,t-1)+"\u2026",Do=({width:e})=>{let{breadCrumb:t,currentNode:n,selectedIndex:r,viewMode:o}=C(),i=k(n.id)[r],a=ze(i?.id??n.id,"TICKET"),d=Ke(a)?a.data:void 0,m=d?.id?k(d.id):[],u=I=>{let E=m.find(T=>T.title===I);return E?k(E.id).map(T=>typeof T.props?.value=="string"?T.props.value:"").filter(T=>!!T):[]},f=u("Tags"),y=u("Assignees"),N=d?.parentNodeId?!an(n.id,d?.parentNodeId)&&o==="dense":!1,S=t.map((I,E)=>{let T=E===t.length-1,F=k(I.id),oe=T?F?.[r]?.title:void 0;return`${E?" / ":""}${I.title??""}${oe?` \u25B8 ${oe}`:""}`}).join(""),b=Sa(S,e);return st.createElement(Fn,null,st.createElement(ba,{color:v.secondary2},b),N?f.map(I=>st.createElement(Fn,{key:I,paddingLeft:2},st.createElement(it,{id:I}))):null,N?y.map(I=>st.createElement(Fn,{key:I,paddingLeft:2},st.createElement(ot,{id:I}))):null)};import{Box as Aa,Text as Bo}from"ink";import Vt from"react";var Ta=({filters:e})=>Vt.createElement(Aa,{columnGap:1},Vt.createElement(Bo,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:n,operator:r})=>Vt.createElement(Bo,{backgroundColor:"black",color:"white"},` ${n}${r}"${t}" `))),Fo=Vt.memo(Ta);function Kt({filters:e,hideBreadCrumb:t=!1}){let{userName:n,preferredEditor:r}=le(),o=40,i=process.stdout.columns-o-8;return Ie.createElement(kn,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},t?Ie.createElement(Uo,null," "):Ie.createElement(kn,{paddingLeft:1},e.length>0?Ie.createElement(Fo,{filters:e}):Ie.createElement(Do,{width:i})),Ie.createElement(kn,{columnGap:1,paddingRight:2,"max-width":o,overflow:"hidden",justifyContent:"flex-end"},Ie.createElement(Oo,{icon:"@",value:n}),Ie.createElement(Oo,{icon:"\u276F",value:r})))}function Oo({icon:e,value:t}){return Ie.createElement(Uo,null,ko.dim(e)+ko.hex(v.accent)(` ${t??"-"} `))}import{Box as Ja,Text as Qa}from"ink";import xt from"react";import{Box as jt,Text as On}from"ink";import Pe from"react";import{Text as Wo}from"ink";import Ho,{useEffect as wa,useState as Ma}from"react";var _o={help:["\u25B8 ","\u25B8 ","\u25B8 "],default:["\u25B8 ","\u25B8 ","\u25B8 "],move:["\u2191 ","\u2192 ","\u2193 ","\u2190 "],"command-line":["\u276F ","\u276F ","\u276F "]},J=({isSelected:e,placeholder:t=" "})=>{let{mode:n}=H(),r=_o[n]??_o.default,[o,i]=Ma(r.length-1);return wa(()=>{if(!e)return;let a=setInterval(()=>{i(d=>(d+1)%r.length)},800);return()=>clearInterval(a)},[e,r]),e?Ho.createElement(Wo,{color:v.accent,dimColor:o===1},r[o]):Ho.createElement(Wo,null,t)};function Un(){let e=H(),t=e.nodes[e.rootNodeId],o=process.stdout.rows-1-3,i=process.stdout.columns||120,a=t?.id?w(t?.id):[];return Pe.createElement(jt,{flexDirection:"column",height:o,padding:1,borderStyle:"round",borderColor:v.secondary,width:i},Pe.createElement(jt,{padding:1,paddingTop:0,paddingBottom:0},Pe.createElement(On,null,"Select a board:")),Pe.createElement(jt,{padding:1,flexDirection:"column"},a.map((d,m)=>{let u=e.currentNode.context==="WORKSPACE"&&e.selectedIndex===m,y=w(d.id).flatMap(({id:N})=>k(N)).length;return Pe.createElement(jt,{key:d.id??m},Pe.createElement(On,{color:u?v.accent:v.secondary},Pe.createElement(J,{isSelected:u})),Pe.createElement(On,{color:u?v.accent:v.secondary},d.title," (",y," issues)",d.readonly?" \u{1F512}":""))})))}import{Box as Xa}from"ink";import Jt from"react";import{Box as _n,Text as Ba}from"ink";import pe from"react";import{Box as Wn,Text as La}from"ink";import zt from"react";var qt=({children:e=[],height:t,selectedIndex:n,itemHeight:r=1,scrollByOne:o=!1})=>{if(e.length===0)return null;let i=Math.max(1,Math.floor(t)),a=Math.max(1,Math.ceil(r)),d=Math.max(1,Math.floor(i/a)),m=Math.max(0,Math.min(n,e.length-1)),u=Math.max(0,e.length-d),f=o?Math.min(u,Math.max(0,m-d+1)):Math.min(u,Math.floor(m/d)*d),y=f+d,N=e.slice(f,y),S=e.length>d,b=i,I=S?Math.max(1,Math.floor(d/e.length*b)):b,E=Math.max(0,b-I),T=Math.max(1,e.length-d),F=S?Math.floor(f/T*E):0;return zt.createElement(Wn,{flexDirection:"row",height:i,width:"100%"},zt.createElement(Wn,{flexDirection:"column",flexGrow:1,height:i},N),zt.createElement(Wn,{flexDirection:"column",width:1,height:b},Array.from({length:b}).map((oe,ie)=>zt.createElement(La,{key:ie,color:S&&ie>=F&&ie<F+I?v.accent:v.secondary},S?"\u2502":" "))))};import{Box as Gt,Text as Ra}from"ink";import He from"react";var $o=({width:e,ticket:t,isSelected:n})=>{let r=e-14,o=ht(Qn(t.title),r),i=w(t.id),a=u=>{let f=i.find(y=>y.title===u);return f?w(f.id).map(y=>typeof y.props?.value=="string"?y.props.value:"").filter(y=>!!y):[]},d=a("Tags").map(u=>h.getTag(u)).filter(u=>!!u),m=a("Assignees").map(u=>h.getContributor(u)).filter(u=>!!u);return He.createElement(Gt,{borderStyle:"round",width:e-7,height:4,flexDirection:"column",borderColor:n?v.accent:v.secondary,justifyContent:"space-between"},He.createElement(Gt,{borderBottom:!0},He.createElement(Gt,{paddingLeft:1,flexDirection:"column"},He.createElement(Ra,{color:v.primary},o))),He.createElement(Gt,{flexDirection:"row",paddingLeft:1},d.map(u=>He.createElement(it,{key:u.id,id:u.id})),m.map(u=>He.createElement(ot,{key:u.id,id:u.id}))))};import Pa from"chalk";import{Box as ft,Text as Hn}from"ink";import be from"react";var Da=(e,t)=>e.length>=t?e.slice(0,t)+"...":e,Vo=({width:e,ticket:t,isSelected:n,index:r,mode:o})=>{let i=w(t.id),a=I=>{let E=i.find(T=>T.title===I);return E?w(E.id).map(T=>typeof T.props?.value=="string"?T.props.value:"").filter(T=>!!T):[]},d=a("Tags").map(I=>h.getTag(I)).filter(I=>!!I),m=a("Assignees").map(I=>h.getContributor(I)).filter(I=>!!I),u=1,f=d.length*(1+u),y=m.length*(2+u),N=d.map(I=>be.createElement(ft,{key:I.id,paddingRight:u},be.createElement(Hn,{color:re(I.name)},"\u25A0"))),S=m.map(I=>be.createElement(ft,{key:I.id,paddingRight:u},be.createElement(Hn,{color:lt(I.name)},"@"+I.name.at(0)))),b=n?v.accent:o===p.MOVE?v.secondary:v.primary;return be.createElement(ft,{borderBottom:!0,justifyContent:"space-between"},be.createElement(ft,null,be.createElement(J,{isSelected:n,placeholder:Pa.dim.gray(r+1+" ")}),be.createElement(Hn,{wrap:"truncate",color:b},Da(t.title,e-f-y-14))),be.createElement(ft,null,N,S))};var Fa=({swimlane:e,isSelected:t,width:n,height:r,isDense:o,isFocused:i,listSelectedIndex:a,mode:d})=>{let{renderedChildrenIndex:m}=H(),u=m[e.id]??[],f=`${e.title} (${u.length})`,y=3,N=o?1:4,S=r-y-(o?2:1),b=pe.createElement(_n,{borderStyle:"round",borderColor:v.secondary,justifyContent:"flex-start",borderLeft:!1,borderTop:!1,borderRight:!1},pe.createElement(J,{isSelected:t}),pe.createElement(Ba,{bold:!0,color:t?v.accent:v.primary},f," ",e.readonly?"\u{1F512}":"")),I=(E,T)=>{let F=i&&a===T;return o?pe.createElement(Vo,{key:E.id,index:T,width:n,ticket:E,isSelected:F,mode:d}):pe.createElement($o,{key:E.id,width:n,ticket:E,isSelected:F})};return pe.createElement(_n,{flexDirection:"column",width:n,borderStyle:"round",borderColor:t?v.accent:v.secondary,paddingRight:1,paddingLeft:1,height:r},b,pe.createElement(_n,{padding:o?1:0},u.length>0&&pe.createElement(qt,{selectedIndex:a,height:S,itemHeight:N},u.map(I)),pe.createElement(J,{isSelected:i&&a===-1})))},Ko=pe.memo(Fa);import{Box as Kn,Text as qa}from"ink";import De,{useEffect as jn,useMemo as Yo}from"react";import Se from"chalk";import zo from"string-width";import{decodeTime as ka}from"ulid";var jo=e=>{let t=Date.now()-e,n=[{label:"y",ms:1e3*60*60*24*365},{label:"mo",ms:1e3*60*60*24*30},{label:"w",ms:1e3*60*60*24*7},{label:"d",ms:1e3*60*60*24},{label:"h",ms:1e3*60*60},{label:"m",ms:1e3*60},{label:"s",ms:1e3}];for(let{label:r,ms:o}of n){let i=Math.floor(t/o);if(i>=1)return`${i}${r} ago`}return"just now"};var Oa=(e,t)=>e+" ".repeat(Math.max(0,t-zo(e))),Ua=(e,t)=>" ".repeat(Math.max(0,t-zo(e)))+e,Wa=e=>(()=>{let n={"add.issue":"Created with title","assign.issue":"Assigned to","close.issue":"Closed","delete.node":"Deleted","edit.title":"Changed title to","edit.description":"Changed description","reopen.issue":"Reopened","tag.issue":"Tagged with","lock.node":"Locked node","move.node":"Moved issue"};return(o=>n[o]??(o.endsWith("e")?`${o}d`:`${o}ed`))(e)})(),Ha=e=>{switch(e.action){case"move.node":{let t=h.getNode(e.payload.parent),n=t?Se.dim.bgBlack(` ${t.title} `):"unknown",r=e.payload.pos;if(!r)return`to ${n}`;switch(r.at){case"start":return`to ${n} ${Se.dim("(to top of list)")}`;case"end":return`to ${n} ${Se.dim("(to bottom of list)")}`;case"before":return`to ${n} ${Se.dim("(up in list)")}`;case"after":return`to ${n} ${Se.dim("(down in list)")}`}}case"tag.issue":{let t=C().tags[e.payload.tagId];return t?Se.bgHex(re(t.name))(` ${t.name} `):"unknown tag"}case"assign.issue":{let t=C().contributors[e.payload.contributor];return t?Se.hex(re(t.name))(` ${t.name} `):"unknown user"}case"add.board":case"add.swimlane":case"add.issue":case"add.field":case"create.tag":case"create.contributor":case"edit.title":return`"${"name"in e.payload?e.payload.name:""}"`;default:return""}},_a=e=>{let t=jo(ka(e));return Se.gray(Ua(t,8))},$a=12,Va=e=>{let t=e.split(".")[1]??"unknown";return Oa(`${t}`,$a)},qo=e=>{let t=_a(e.id),n=Va(e.userId),r=Wa(e.action),o=Ha(e),i=Se.dim("\u203A"),a=[r,o].filter(Boolean).join(" ");return`${n} ${t} ${i} ${a}`};import{Box as Xt,Text as Ka}from"ink";import Ae from"react";var Go=({selectedIndex:e,parent:t,selected:n})=>{let{currentNode:r}=H(),{title:o}=t,i=w(t.id).map(a=>{let d=typeof a.props?.value=="string"?a.props.value:"";if(o==="Assignees")return h.getContributor(d)?.id;if(o==="Tags")return h.getTag(d)?.id}).filter(a=>!!a);return Ae.createElement(Xt,{alignItems:"center",paddingTop:1},Ae.createElement(Xt,{minWidth:12},Ae.createElement(J,{isSelected:n}),Ae.createElement(Ka,{color:n?v.accent:v.secondary2},o,":")),Ae.createElement(Xt,{flexDirection:"row",marginLeft:1,paddingRight:1},i.map((a,d)=>{let m=r.id===t.id&&d===e;return Ae.createElement(Xt,{key:`${o}-${a}`,paddingRight:2,minHeight:1},Ae.createElement(J,{isSelected:m}),o==="Assignees"?Ae.createElement(ot,{isSelected:m,id:a}):o==="Tags"?Ae.createElement(it,{isSelected:m,id:a}):null)})))};import{Box as Yt,Text as $n}from"ink";import{marked as Xo}from"marked";import ja from"marked-terminal";import Te,{useEffect as za}from"react";var Vn=({id:e,label:t,text:n,height:r,selected:o,maxWidth:i})=>{let{selectedIndex:a,currentNode:d}=H();Xo.setOptions({renderer:new ja});let m=N=>String(Xo.parseInline(N)).replace(/\r?\n/g,""),u=typeof n=="string"?n.split(/\r?\n|\u2028|\u2029/):[];za(()=>{let N=[];return u.forEach((S,b)=>{let I=q.text({id:`${b}`,name:`Line ${b+1}`,parentNodeId:e,props:{value:S},readonly:!0}),E=h.createNodeAtPosition(I);Ke(E)&&N.push(E.data.id)}),()=>N.forEach(h.deleteNode)},[e,n]);let f="\u2029",y=u.map((N,S)=>{let b=d.id===e&&a===S;return Te.createElement(Yt,{key:`${e}-${S}`},Te.createElement($n,{color:b?v.primary:v.secondary2,dimColor:!b},`${S+1} `.padStart(5,"\xA0")),Te.createElement($n,{backgroundColor:b?"gray":""},m(N.length?ht(N,i-10):f)))});return Te.createElement(Yt,{flexDirection:"column",paddingTop:1},Te.createElement(Yt,null,Te.createElement(J,{isSelected:o}),Te.createElement($n,{color:o?v.accent:v.secondary2},t)),Te.createElement(Yt,{flexDirection:"row",borderStyle:"round",borderColor:v.secondary,paddingLeft:1,paddingRight:1,marginLeft:1},Te.createElement(qt,{scrollByOne:!0,children:y,height:r-2,selectedIndex:a,itemHeight:1})))};var Ga=e=>`${e}::log`,Jo=({ticket:e,height:t})=>{let{selectedIndex:n,currentNode:r}=H(),o=process.stdout.columns||120,i=Yo(()=>Ga(e.id),[e.id]),a=Yo(()=>[...e.log].reverse().map(qo).join(`
26
+ `),[e.log]);jn(()=>{if(h.getNode(i))return;let T={...q.field(i,"Log",e.id,{value:a}),readonly:!0,childRenderAxis:"vertical"};return h.createNodeAtPosition(T),()=>{h.deleteNode(i)}},[i,e.id]),jn(()=>{let E=h.getNode(i);E&&E.props.value!==a&&h.updateNode({...E,props:{...E.props,value:a},childRenderAxis:"vertical",readonly:!0})},[i,a]);let d=r.id===e.id,m=r.id===i||r.parentNodeId===i;jn(()=>{m&&(n>=0||D.navigate({selectedIndex:0}))},[m,n]);let u=w(e.id);if(m){let E=h.getNode(i),F=t-3;return De.createElement(Kn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},E?De.createElement(Vn,{id:E.id,label:"Event log",text:E.props.value??"",selected:!1,maxWidth:o,height:F}):null)}let f=u.reduce((E,T)=>T.title==="Assignees"||T.title==="Tags"||T.id===i?++E:E,0),y=2,N=f*1,b=t-3-N-y,I=(E,T)=>E.title==="Assignees"||E.title==="Tags"?De.createElement(Go,{key:E.id,parent:E,selected:T,selectedIndex:n}):E.id===i?De.createElement(Kn,{key:E.id,paddingTop:1},De.createElement(J,{isSelected:T}),De.createElement(qa,{backgroundColor:v.secondary,color:T?v.accent:v.primary}," History \u203A\u203A ")):De.createElement(Vn,{label:"Description (press e to edit)",key:E.id,id:E.id,text:E.props.value??"",selected:T,maxWidth:o,height:b});return De.createElement(Kn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},u.map((E,T)=>I(E,d&&n===T)))};var Ya=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:a,width:d})=>{let m=t.context,u=m===L.TICKET||m===L.FIELD_LIST||m===L.FIELD,f=m===L.BOARD||m===L.SWIMLANE,y=m===L.TICKET?t:r.find(E=>E.context===L.TICKET),N=Math.floor(d/3),S=Math.floor(d/Math.max(e.length,1)),b=Math.min(S,N),I=i==="dense";return Jt.createElement(Xa,{flexDirection:"row",height:a},f&&e.map((E,T)=>{let F=t.id===E.id,oe=F?n:-1,ie=t.context===L.BOARD&&n===T;return Jt.createElement(Ko,{key:E.id,height:a,width:b,swimlane:E,isSelected:ie,isDense:I,isFocused:F,listSelectedIndex:oe,mode:o})}),u&&y&&Jt.createElement(Jo,{height:a,ticket:y}))},Qo=Jt.memo(Ya);var Za=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:a})=>{let{renderedChildrenIndex:d}=H(),m=n.find(({context:N})=>N==="BOARD"),y=i-1-3;return xt.createElement(Ja,{flexDirection:"row"},e.context==="WORKSPACE"?xt.createElement(Un,null):m?xt.createElement(Qo,{height:y,width:a,swimlanes:(d[m.id]??[]).filter(N=>N!==void 0&&Yn(N)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):xt.createElement(Qa,null))},Zo=xt.memo(Za);import{Box as yt,Text as ge}from"ink";import B from"react";var Qt=({isDone:e,command:t,value:n})=>B.createElement(yt,null,B.createElement(ge,{color:v.accent,dimColor:e},e?" \u2714 ":" "),B.createElement(ge,{dimColor:e},"Type "),B.createElement(ge,{backgroundColor:v.secondary,dimColor:e}," "+t+" "),n&&B.createElement(B.Fragment,null,B.createElement(ge,{dimColor:e}," "),B.createElement(ge,{color:v.secondary,dimColor:e},"<"+n+">")));function zn({width:e,height:t,hasUserName:n,hasPreferredEditor:r,userName:o,preferredEditor:i}){let a=n&&r,d=n?r?null:":set:editor":":set:username";return B.createElement(yt,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},B.createElement(ge,{color:v.accent,bold:!0},"Welcome! \u{1F539}"),B.createElement(ge,null,"Lets get you started - its a breeze."),B.createElement(ge,{color:v.secondary2},"And remember, you can always get help with"," ",B.createElement(ge,{color:v.accent},":help"),"."),!a&&B.createElement(ge,{color:v.secondary2},d===":set:username"?"First, choose your username.":"Nice. One more step."),B.createElement(yt,{flexDirection:"column"},n&&B.createElement(yt,{marginBottom:1},B.createElement(Qt,{isDone:!0,command:":set:username",value:o})),!n&&B.createElement(Qt,{isDone:!1,command:":set:username"}),n&&!r&&B.createElement(Qt,{isDone:!1,command:":set:editor"}),a&&B.createElement(yt,null,B.createElement(Qt,{isDone:!0,command:":set:editor",value:i}))))}var td=({width:e,height:t})=>P.createElement(ce,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},P.createElement(Be,{color:v.accent,bold:!0},"Initialize project"),P.createElement(Be,null,`This folder is not an ${ed.hex(v.accent)("epiq")} project yet.`),P.createElement(Be,{color:v.primary},"To start tracking issues here, we need to initialize a new"," ",P.createElement(Be,{color:v.primary,backgroundColor:v.secondary}," .epiq/ ")," ","directory in this repository."),P.createElement(ce,{marginTop:1,flexDirection:"column"},P.createElement(ce,null,P.createElement(Be,{color:v.accent}," "),P.createElement(Be,{color:v.primary},"Type "),P.createElement(Be,{backgroundColor:v.secondary}," :init "))),P.createElement(ce,{marginTop:1},P.createElement(Be,{color:v.secondary2},"(This will create the local epiq project files)")));function qn({width:e,height:t}){let n=H(),r=n.filters;if(n.mode===p.HELP)return P.createElement(ce,{flexDirection:"column"},P.createElement(Po,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:a,userName:d,preferredEditor:m}=bt(),u=!o,f=o&&St();if(u)return P.createElement(ce,{flexDirection:"column"},P.createElement(ce,{flexDirection:"column"},P.createElement(Kt,{hideBreadCrumb:!0,filters:r}),P.createElement(zn,{height:t,width:e,hasUserName:a,hasPreferredEditor:i,userName:d??"",preferredEditor:m??""})),P.createElement($t,{width:e,mode:n.mode,availableHints:n.availableHints}));if(f)return P.createElement(ce,{flexDirection:"column"},P.createElement(ce,{flexDirection:"column"},P.createElement(Kt,{hideBreadCrumb:!0,filters:r}),P.createElement(td,{height:t,width:e})),P.createElement($t,{width:e,mode:n.mode,availableHints:n.availableHints}));let y=tt(C().breadCrumb??[],"BOARD");if(Ke(y)){let N=y.data.id,S=w(N).length,b=3,I=Math.floor(e/b),E=Math.floor(e/Math.max(S,1));e=Math.min(E,I)*Math.max(S,b)}return P.createElement(ce,{flexDirection:"column"},P.createElement(ce,{flexDirection:"column"},P.createElement(Kt,{filters:r}),P.createElement(Zo,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),P.createElement($t,{width:e,mode:n.mode,availableHints:n.availableHints}))}import{Box as _e,Text as Fe}from"ink";import z,{useEffect as nd,useMemo as rd,useState as od}from"react";var id=["\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 "];function sd(e,t,n){return Math.min(n,Math.max(t,e))}function ad(e,t){return z.createElement(Fe,null,z.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(0,14)),z.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(14)))}function dd(e,t=28){if(e>=1)return"\u2588".repeat(t);let n=Math.floor(e*(t-1));return Array.from({length:t},(r,o)=>{let i=Math.abs(o-n);return i===0?"\u2588":i===1?"\u2593":i===2?"\u2592":i===3?"\u2591":o<n?"\u2500":"\xB7"}).join("")}function Gn({durationMs:e=3e3,slogan:t="Never leave the command line"}){let n=Math.max(1,e),[r,o]=od(0);nd(()=>{let m=Date.now(),u=setInterval(()=>{let f=Date.now()-m;if(f>=n){o(n),clearInterval(u);return}o(f)},33);return()=>clearInterval(u)},[n]);let i=sd(r/n,0,1),a=rd(()=>dd(i,28),[i]),d=`${Math.round(i*100)}%`;return z.createElement(_e,{flexDirection:"column",alignItems:"center",justifyContent:"center",paddingX:4,paddingY:1},z.createElement(_e,{flexDirection:"column",minWidth:42},z.createElement(_e,{flexDirection:"column",marginBottom:1},id.map((m,u)=>z.createElement(_e,{key:u,justifyContent:"center"},ad(m,u)))),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Fe,{color:"gray"},t)),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Fe,{color:"cyan"},a.slice(0,10)),z.createElement(Fe,{color:"blue"},a.slice(10,18)),z.createElement(Fe,{color:"magenta"},a.slice(18))),z.createElement(_e,{justifyContent:"center",marginBottom:1},z.createElement(Fe,{color:"gray"},d))))}import cd from"readline";var Zt,en,fe,ei=async e=>{if(e.ctrl&&e.name==="c")return D.exit();let{actionIndex:t,mode:n}=C(),r=Sr(e,n);if(!r)return;let o=t[n]?.[r];if(o?.action)try{await o.action(o,e)}catch(i){logger.error(i)}},ld=()=>async function(t,n){n.name!=="escape"&&(fe&&(clearTimeout(fe),fe=void 0),await ei(n))},md=()=>async function(t){if(t.length===1&&t[0]===27){fe&&clearTimeout(fe),fe=setTimeout(()=>{ei({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),fe=void 0},25);return}fe&&(clearTimeout(fe),fe=void 0)};function ti(){Zt&&process.stdin.removeListener("keypress",Zt),en&&process.stdin.removeListener("data",en),Zt=ld(),en=md(),cd.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",en),process.stdin.on("keypress",Zt)}import vt from"fs";import ri from"path";import ud from"util";var ni=1e3,oi=(e=process.cwd())=>ri.join(Qe(e),ue(),"log","epiq.log");function pd(e=process.cwd()){if(!Dt)return;let t=oi(e);if(!vt.existsSync(t))return;let r=vt.readFileSync(t,"utf8").split(`
27
+ `);if(r[r.length-1]===""&&r.pop(),r.length<=ni)return;let o=r.slice(-ni).join(`
28
28
  `)+`
29
- `;ft.writeFileSync(t,o,"utf8")}function qn(e,t,n=!1,r=process.cwd()){if(!Rt)return;let o=ri(r),i=md.format(...t),s=new Date,m=`[${n?s.toISOString().slice(11,19):s.toISOString()}] ${e} ${i}
30
- `;ft.mkdirSync(ni.dirname(o),{recursive:!0}),ft.appendFileSync(o,m,"utf8"),ud(r)}var pd={info(...e){qn("[Info]",e,!1)},debug(...e){qn("->",e,!0)},error(...e){qn("[Error]",[...e,new Error().stack],!1)}};globalThis.logger=pd;fd(`
29
+ `;vt.writeFileSync(t,o,"utf8")}function Xn(e,t,n=!1,r=process.cwd()){if(!Dt)return;let o=oi(r),i=ud.format(...t),a=new Date,m=`[${n?a.toISOString().slice(11,19):a.toISOString()}] ${e} ${i}
30
+ `;vt.mkdirSync(ri.dirname(o),{recursive:!0}),vt.appendFileSync(o,m,"utf8"),pd(r)}var gd={info(...e){Xn("[Info]",e,!1)},debug(...e){Xn("->",e,!0)},error(...e){Xn("[Error]",[...e,new Error().stack],!1)}};globalThis.logger=gd;xd(`
31
31
  View board in directory:
32
32
  $ epiq
33
33
 
34
34
  Init project in directory:
35
35
  $ epiq --init "Project Name"
36
- `,{importMeta:import.meta,flags:{init:{type:"string"}}});var xd=2e3,yd=600,ii=process.stdout.columns||120,si=process.stdout.rows||20,Zt=null,vd=e=>new Promise(t=>setTimeout(t,e)),ai=e=>{if(!Zt){Zt=gd(e);return}Zt.rerender(e)},di=()=>{ai(oi.createElement(jn,{width:ii,height:si}))},Cd=e=>{ai(oi.createElement(zn,{durationMs:e}))},hd=()=>{let e=kr();if(l(e)){if(e.message.includes("No events found"))return logger.info("No events found, starting with empty state"),[];throw new Error(e.message)}return e.data},Nd=e=>{let t=No(e);if(l(t))throw new Error(`Failed to boot state: ${t.message}`)};async function Ed(){Xr();let e=hd(),n=e.length===0?xd:yd;n>0&&Cd(n);let r=Date.now();Nd(e);let o=Date.now()-r,i=Math.max(0,n-o);i>0&&await vd(i),di(),ei()}process.stdout.on("resize",()=>{ii=process.stdout.columns||120,si=process.stdout.rows||20,Zt&&di()});(async()=>(console.clear(),await Ed()))();
36
+ `,{importMeta:import.meta,flags:{init:{type:"string"}}});var yd=2e3,vd=600,si=process.stdout.columns||120,ai=process.stdout.rows||20,tn=null,Cd=e=>new Promise(t=>setTimeout(t,e)),di=e=>{if(!tn){tn=fd(e);return}tn.rerender(e)},ci=()=>{di(ii.createElement(qn,{width:si,height:ai}))},hd=e=>{di(ii.createElement(Gn,{durationMs:e}))},Nd=()=>{let e=kr();if(l(e)){if(e.message.includes("No events found"))return logger.info("No events found, starting with empty state"),[];throw new Error(e.message)}return e.data},Ed=e=>{let t=Eo(e);if(l(t))throw new Error(`Failed to boot state: ${t.message}`)};async function Id(){Xr();let e=Nd(),n=e.length===0?yd:vd;n>0&&hd(n);let r=Date.now();Ed(e);let o=Date.now()-r,i=Math.max(0,n-o);i>0&&await Cd(i),ci(),ti()}process.stdout.on("resize",()=>{si=process.stdout.columns||120,ai=process.stdout.rows||20,tn&&ci()});(async()=>(console.clear(),await Id()))();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "epiq",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "description": "EPIQ - CLI based issue tracker",