epiq 0.2.18 → 0.2.20

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 +22 -22
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
- import{render as bd}from"ink";import Sd from"meow";import Ii from"react";import cd from"chalk";import{Box as me,Text as De}from"ink";import P from"react";import et from"chalk";import{monotonicFactory as sa,ulid as Ne}from"ulid";import{useSyncExternalStore as ra}from"react";var R={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function Be(e){return e.context==="TICKET"}var ir=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:""},ye={None:"none",Invalid:"invalid",Valid:"valid"},ve={None:"none",Success:"success",Fail:"fail"},s=e=>({result:ve.Fail,message:e,data:null}),c=(e,t)=>({result:ve.Success,message:e,data:t}),sr=()=>({result:ve.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 vt(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)+"...",ar=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var dr=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},cr=(e,t)=>t?e.get(t)??[]:[];var lr=new WeakMap,Mi=e=>{let t=lr.get(e);return t||(t=dr(e),lr.set(e,t)),t};var mr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return cr(Mi(e),r).filter(i=>vt(r,i)>=n)};var ur=({inputToMatch:e,lastWord:t},n)=>{if(t.endsWith(" "))return{hint:"",hints:[],overlap:0,remainder:""};let r=mr({wordList:n,inputToMatch:e,overlapThreshold:1});return Ri(t,r)},Ri=(e,t)=>{let n=t[0]??"",r=vt(e.toLowerCase(),n.toLowerCase()),o=n?n+" ":"",i=o.slice(r);return{hint:o,hints:t,overlap:r,remainder:i}};var pr=["vi","vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var $e=24n,Li=$e*4n,Ct=(1n<<Li)-1n,Pi=/^[0-9a-f]+$/;function gr(e){if(!e||!Pi.test(e))throw new Error(`Invalid hex rank: ${e}`);return BigInt("0x"+e)}function Nt(e,t=$e){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 Nt(Ct/2n,$e);let n=e?gr(e):0n,r=t?gr(t):Ct;if(r<=n)return Nt(Ct/2n,$e);let o=(n+r)/2n;return o===n||o===r?"":Nt(o,$e)}function ae(){return Nt(Ct/2n,$e)}var G={workspace:(e,t)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r=!1)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:r,log:[]}),swimlane:(e,t,n)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.SWIMLANE,childRenderAxis:"vertical",childNavigationAcrossParents:!0,parentNodeId:n,readonly:!1,log:[]}),field:(e,t,n,r={},o="horizontal")=>({id:e,title:t,rank:ae(),isDeleted:!1,props:r,context:R.FIELD,childRenderAxis:o,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.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:ae(),isDeleted:!1,props:r,context:R.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:o,log:[]})};var W=e=>Object.values(h().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),fr=(e,t)=>e.findIndex(n=>n.id===t),sn=(e,t={at:"end"})=>{if(e.length===0)return c("Resolved rank",ae());switch(t.at){case"start":{let n=e[0];return n?c("Resolved rank",it(void 0,n.rank)):s("Unable to resolve first sibling")}case"end":{let n=e[e.length-1];return n?c("Resolved rank",it(n.rank,void 0)):s("Unable to resolve last sibling")}case"before":{let n=fr(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",it(r?.rank,o.rank)):s("Sibling not found")}case"after":{let n=fr(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",it(r.rank,o?.rank)):s("Sibling not found")}}};var Ve=(e,t)=>{let{nodes:n}=h(),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}`)},dn=(e,t)=>{let{nodes:n}=h(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},an=(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"),C={deleteNode(e){ie(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=h(),r=n[e];if(!r)return s("Edit target node not found");let o=an(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return C.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=an(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=h();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=h();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return W(e).find(n=>n.title===t)},moveNode({id:e,parentId:t,position:n={at:"end"},navigate:r=!0}){let{rootNodeId:o}=h(),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=an(i,"move");if(d)return d;if(dn(t,e))return s("Cannot move node into its own descendant");let m=W(t).filter(y=>y.id!==e),u=sn(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}=h(),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 W(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=ie(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=C.getContributor(t),o=C.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(W(i.id).some(m=>m.props?.value===t))return s("Contributor already assigned");let d=this.createNodeAtPosition(G.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Assigned contributor",d.data)},createTag(e){let t=ie(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=C.getTag(t),o=C.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(W(i.id).some(m=>m.props?.value===t))return s("Tag already assigned");let d=this.createNodeAtPosition(G.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:ae()};return this.createNode(i),c("Created node",i)}let n=W(e.parentNodeId),r=sn(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=ie(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=ie(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?s(r.message):c("Locked node",n)},updateNode(e){let t=ie(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},updateNodeAndSelectInParent(e){let t=ie(a=>({...a,nodes:{...a.nodes,[e.id]:e}}));if(l(t))return s(t.message);let n=h(),r=e.parentNodeId?n.nodes[e.parentNodeId]:n.nodes[n.rootNodeId];if(!r)return s("Unable to resolve parent after update");let i=T(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 h().contributors[e]},getTag(e){return h().tags[e]},getNode(e){return h().nodes[e]},getSiblings:e=>Object.values(h().nodes).filter(t=>!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank))};var Et={preferredEditor:null,userName:null,userId:null},de=()=>Et,st=e=>(Et={...Et,...e},Et);var It=()=>{let e=de(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},xr=()=>!bt();var j={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:j.cyan,accent2:j.magenta,primary:j.white,secondary:j.grayDark,secondary2:j.grayLight,gray:j.gray,green:j.green,yellow:j.yellow,red:j.red};var x={red:j.red,yellow:j.yellow,green:j.green,blue:j.blue,magenta:j.magenta,cyan:j.cyan},Ke={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 V=e=>{let{currentNode:t}=h(),n=It().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]:[...pr,"vim"],[g.TAG]:[...new Set([...Object.keys(Ke),...C.getExistingTags()])],[g.ASSIGN]:C.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?xr()||(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 pn from"chalk";import je from"chalk";var ln={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},Di=(e,t,n)=>Math.max(t,Math.min(n,e)),cn=(e,t,n)=>e+(t-e)*n,yr=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)]},Bi=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,ki=(e,t,n)=>[Math.round(cn(e[0],t[0],n)),Math.round(cn(e[1],t[1],n)),Math.round(cn(e[2],t[2],n))],at=e=>{let n=yr(e)%360,r=Fi(n,ln.stringColor.saturation,ln.stringColor.lightness);return Bi(r)},Oi=e=>{let t=ln.gradient.stops,n=Di(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 ki(t[i],t[i+1],a)},St=e=>yr(e.toLowerCase().trim())/4294967295,vr=e=>{let t=St(e);return Oi(t)},Ui=e=>{let[t,n,r]=vr(e);return{normal:o=>je.bgRgb(t,n,r).black(o),cursor:o=>je.bgRgb(t,n,r).white.bold(o)}},mn=e=>{let[t,n,r]=vr(e);return{fg:o=>je.rgb(t,n,r)(o),fgCursor:o=>je.rgb(t,n,r).inverse(o),bg:o=>je.bgRgb(t,n,r).black(o),bgCursor:o=>je.bgRgb(t,n,r).white.bold(o)}},un=e=>Ui(e).normal(` ${e} `),se=(e,t=Ke)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:at(r)};var he="<ENTER> to confirm",X=(e="",t=[])=>({message:e,validity:ye.Valid,completionWordList:t}),ce=({message:e,completionWordList:t})=>({validity:ye.Invalid,message:e,completionWordList:t}),dt=e=>e.length===0,Te=({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)=>St(f)-St(y)).slice(0,r).map(un),u=m.length>i?m.join(" "):"";return u?`${e}${u}${n}`:""},gn=({modifier:e})=>{let t="confirm";return e===t?X(he):ce({message:dt(e)?`if you are certain, enter ${un(t)}`:"",completionWordList:[t]})},Wi=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?X(he):ce({message:dt(n)?t:"",completionWordList:[]}),Hi=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?ce({message:n,completionWordList:[]}):X():ce({message:dt(r)?t:"",completionWordList:[]}),fn=({hint:e})=>({modifier:t,inputString:n})=>dt(t)&&dt(n)?ce({message:e,completionWordList:[]}):X(he),_i={[g.INIT]:()=>X(he),[g.FILTER]:e=>{if(e.modifier==="clear")return X();let t=a=>V(g.FILTER).includes(a);if(!e.modifier||!t(e.modifier??""))return ce({message:Te({wordList:V(g.FILTER),noOfHints:100,inputString:e.inputString}),completionWordList:V(g.FILTER)});let r=Object.values(h().tags).map(a=>a.name),o=Object.values(h().contributors).map(a=>a.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?ce({message:Te({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):X():ce({message:Te({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[g.NONE]:e=>e.command?X():ce({message:Te({prefix:"commands... ",wordList:V(g.NONE),noOfHints:100,inputString:e.inputString,minLengthForHints:0}),completionWordList:[]}),[g.NEW]:e=>Hi({list:V(g.NEW),hint:Te({wordList:V(g.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[g.SET_DESCRIPTION]:()=>X(he),[g.HELP]:()=>X(he),[g.RENAME]:()=>X(he),[g.DELETE]:e=>gn(e),[g.CLOSE_ISSUE]:e=>gn(e),[g.RE_OPEN_ISSUE]:e=>gn(e),[g.MOVE]:e=>fn({hint:Te({prefix:"hey hacker! These commands are blocked for you... ",wordList:V(g.MOVE),noOfHints:10,inputString:e.inputString})})(e),[g.TAG]:e=>{let t=C.getExistingTags().map(n=>` ${pn.bgHex(se(n))(" "+n+" ")} `).slice(0,10);return fn({hint:"tag name like... "+t.join("")})(e)},[g.ASSIGN]:e=>{let t=C.getExistingAssignees().map(n=>` ${pn.bgHex(se(n))(" "+n+" ")} `).slice(0,10);return fn({hint:"assign to... "+t.join("")})(e)},[g.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=V(g.SET_EDITOR);return e.modifier?X(he):ce({message:Te({wordList:t,noOfHints:100,inputString:e.inputString}),completionWordList:[]})},[g.SET_USERNAME]:e=>e.inputString?X():ce({message:`Enter a username. Saved in ${pn.bgBlack("~/.epiqrc")}`,completionWordList:[]}),[g.SET_VIEW]:e=>Wi({list:V(g.SET_VIEW),hint:Te({wordList:V(g.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[g.SYNC]:()=>X(he)},hr=Object.fromEntries(Object.entries(_i).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var Cr=["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 Nr=e=>Object.values(g).includes(e),Er=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:a,validity:d,completionWordList:m}=hr[n].validate(n,r,i),u=o==="command"?Object.values(g):n&&e.target==="modifier"?V(n):Cr;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:a??"",autoCompletion:t?ur(e,[...m,...u]):{hint:"",hints:[],remainder:"",overlap:0}}};var Ir=e=>{let t=e.trimStart(),n=Vi(t),r=(n[0]??"").trimStart().trimEnd(),o=(n[1]??"").trimStart().trimEnd(),i=Ki(e),a=Nr(r)?r:null,d=a!==null,m=r!=="",u=e.endsWith(" "),f=a?V(a)??[]:[],y=a&&f.includes(o)?o:"",N="word";n.length<=1?N="command":n.length===2&&(N="modifier");let S=$i(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}},$i=(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},Vi=e=>e?e.split(/\s+/):[],Ki=e=>e.trimEnd().split(/\s+/).at(-1)??"";var br=" ",z={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:ye.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},xn=new Set,Sr=()=>{for(let e of xn)e()},Ar=e=>(xn.add(e),()=>xn.delete(e)),Ce=e=>{let n=e(z),r=Ir(n.value),o=n.cursorPosition===n.value.length;z={...n,commandMeta:Er(r,o)},Sr()},At=({message:e,result:t})=>{let n=structuredClone(z);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,z=n,Sr(),c(e,null)},yn=e=>{Ce(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},vn=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}})},wr=()=>{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}})},Tr=()=>{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}})},H=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}})},Mr=()=>{Ce(e=>({...e,commandIsPending:!0}))},Rr=({addToHistory:e=!0})=>{Ce(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),ji()},Lr=()=>{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}})},Pr=()=>{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}})},ji=()=>H(()=>""),ue=()=>z,wt=()=>{let[e,...t]=z.value.split(br);return t.join(br).trim()};var zi=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",qi=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",Gi=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",Dr=(e,t)=>{if(qi(e,e.sequence))return"MoveCursorLeftOfWord";if(Gi(e,e.sequence))return"MoveCursorRightOfWord";if(zi(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 Xi(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 Yi(e,t,n){let r=h().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 Fr(e,t){let n=ue();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 Dr(e,n.value);let r=Xi(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 Yi(h().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 h().viewMode==="wide"?"SetViewDense":"SetViewWide";case"q":case"escape":return"exit";case"s":return"sync";default:return null}}var Br=e=>{let{context:t}=h()?.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 _}from"ulid";import{spawnSync as os}from"node:child_process";import is from"node:os";import Wr from"node:path";import{ulid as ss}from"ulid";import{accessSync as Ji,copyFileSync as Qi,existsSync as Tt,mkdirSync as kr,readdirSync as Or,readFileSync as Zi,renameSync as es,rmSync as ts,statSync as Ur,unlinkSync as ns,writeFileSync as rs}from"node:fs";import ze from"node:path";var ne={writeToFile:(e,t)=>{try{let n=ze.dirname(e);Tt(n)||kr(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);rs(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return Zi(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=ne.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)&&Ur(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Ji(e),!0}catch{return!1}},mkDir:e=>kr(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=ze.parse(t);for(;;){let r=ze.join(t,e);try{if(Tt(r)&&Ur(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=ze.dirname(t)}return null},readFirstJSON(e){try{if(!ne.dirExists(e))return null;let t=Or(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=ze.join(e,t);return ne.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return ne.dirExists(e)?Or(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{ns(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{ts(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(ze.dirname(t)),!n?.overwrite&&Tt(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{es(e,t)}catch(r){if(r?.code==="EXDEV"){Qi(e,t),this.rmFile(e);return}throw r}}};function as(){let{preferredEditor:e}=de(),t=[e,process.env.VISUAL,process.env.EDITOR,"vim","vi","nano"].filter(n=>!!n?.trim());return[...new Set(t)]}function ds(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function Hr(e){let t=Wr.join(is.tmpdir(),"epiq");ne.mkDir(t);let n=Wr.join(t,ss());ne.writeToFile(n,e??"");let r=as();for(let o of r){let i=ds(o,n),a=os(i,{stdio:"inherit",shell:!0});if(!a.error&&a.status===0){let d=ne.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 cs,ulid as Mt}from"ulid";var Rt=cs(),_r=({name:e,parent:t,userId:n})=>{let r=Rt(),o=Rt(),i=Rt(),a=Rt();return[{id:Mt(),userId:n,action:"add.issue",payload:{id:r,parent:t,name:e}},{id:Mt(),userId:n,action:"add.field",payload:{id:o,parent:r,name:"Description",val:""}},{id:Mt(),userId:n,action:"add.field",payload:{id:i,parent:r,name:"Assignees"}},{id:Mt(),userId:n,action:"add.field",payload:{id:a,parent:r,name:"Tags"}}]};var $r=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 ls=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[qe,Lt]=ls;var L=(e,t)=>s(`${t.split(".").join(" ")+" failed, "+e.toLowerCase()}`),ms={"init.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=G.workspace(n,r);Vr(o);let i=C.createNodeAtPosition(o);return l(i)?L(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=G.workspace(n,r),i=C.createNodeAtPosition(o);return l(i)?L(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=C.createNodeAtPosition(G.board(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.swimlane(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.ticket(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.field(n,r,o,{value:i},r.includes("Description")?"vertical":"horizontal"));return l(a)?L(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(!C.getNode(n))return L("Unable to locate node",e);let i=C.renameNode(n,r);return l(i)?L(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=C.tombstoneNode(n);return l(r)?L(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=C.createTag({id:n,name:r});return l(o)?L(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=C.createContributor({id:n,name:r});return l(o)?L(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=C.tag(r,o,n);return l(i)?L(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=C.assign(o,r,n);return l(i)?L(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=C.moveNode({id:n,parentId:r,position:o});return l(i)?L(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=C.editValue(n,r);return l(o)?L(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=C.getNode(n);if(!r)return L("Unable to locate issue",e);if(!Be(r))return L("Can only close issues",e);let o=C.getNode(qe);if(!o)return L("Unable to locate target swimlane",e);if(o.id===r.parentNodeId)return L("Cannot close closed issue",e);let a=C.moveNode({id:n,parentId:o.id,navigate:!1});return l(a)?L(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=C.getNode(n);if(!r)return L("Unable to locate issue",e);if(!Be(r))return L("Can only reopen issues",e);let o=C.getNode(qe);if(!o)return L("Unable to locate closed swimlane",e);if(!(r.parentNodeId===o.id))return L("Issue is not closed",e);let a=$r(r);if(!a)return L("Unable to resolve previous parent from issue history",e);if(a===o.id)return L("Previous parent resolves to closed swimlane",e);if(!C.getNode(a))return L("Previous parent no longer exists",e);let m=C.moveNode({id:n,parentId:a,navigate:!1});return l(m)?L(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=C.lockNode(n);return l(r)?L(r.message??"Unable to lock node",e):c("Node locked",{action:e,result:r.data})}},us=(e,t)=>{let n=C.getNode(e);n&&C.updateNode({...n,log:[...n.log??[],t]})},ps=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=h().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 Ge(e,t=!1){let n=ms[e.action],r=n(e);if(l(r))return r;if(!t){let a=[...new Set(ps(e))];for(let d of a)us(d,e)}let[o,i]=e.userId.split(".");return!o?.length||!i?.length?L("Invalid user ID format",e.action):(C.createContributor({name:i,id:o}),r)}var Cn=e=>e.map(t=>Ge(t));import Dt from"node:fs";import ke from"node:path";import{decodeTime as Cs,monotonicFactory as Ns}from"ulid";var Pt=process.env.IS_LOCAL==="true",pe=()=>".epiq";import Nn from"node:fs";import En from"node:path";var gs=pe(),fs="events",xs=(e=process.cwd())=>En.join(Xe(e),gs,fs),ys=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])},vs=e=>{let{userId:t,...n}=e,r=ys(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 Kr(e=process.cwd()){let t=xs(e);if(!Nn.existsSync(t))return s("No events found");let n=Nn.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>En.join(t,o)),r=[];for(let o of n){let i=Nn.readFileSync(o,"utf8"),a=En.basename(o,".jsonl")||"unknown";for(let d of i.split(`
2
+ import{render as bd}from"ink";import Sd from"meow";import Ii from"react";import cd from"chalk";import{Box as me,Text as De}from"ink";import P from"react";import et from"chalk";import{monotonicFactory as sa,ulid as Ne}from"ulid";import{useSyncExternalStore as ra}from"react";var R={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function Be(e){return e.context==="TICKET"}var ir=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:""},ye={None:"none",Invalid:"invalid",Valid:"valid"},ve={None:"none",Success:"success",Fail:"fail"},s=e=>({result:ve.Fail,message:e,data:null}),c=(e,t)=>({result:ve.Success,message:e,data:t}),sr=()=>({result:ve.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 vt(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)+"...",ar=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var dr=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},cr=(e,t)=>t?e.get(t)??[]:[];var lr=new WeakMap,Mi=e=>{let t=lr.get(e);return t||(t=dr(e),lr.set(e,t)),t};var mr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return cr(Mi(e),r).filter(i=>vt(r,i)>=n)};var ur=({inputToMatch:e,lastWord:t},n)=>{if(t.endsWith(" "))return{hint:"",hints:[],overlap:0,remainder:""};let r=mr({wordList:n,inputToMatch:e,overlapThreshold:1});return Ri(t,r)},Ri=(e,t)=>{let n=t[0]??"",r=vt(e.toLowerCase(),n.toLowerCase()),o=n?n+" ":"",i=o.slice(r);return{hint:o,hints:t,overlap:r,remainder:i}};var pr=["vi","vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var $e=24n,Li=$e*4n,Ct=(1n<<Li)-1n,Pi=/^[0-9a-f]+$/;function gr(e){if(!e||!Pi.test(e))throw new Error(`Invalid hex rank: ${e}`);return BigInt("0x"+e)}function Nt(e,t=$e){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 Nt(Ct/2n,$e);let n=e?gr(e):0n,r=t?gr(t):Ct;if(r<=n)return Nt(Ct/2n,$e);let o=(n+r)/2n;return o===n||o===r?"":Nt(o,$e)}function ae(){return Nt(Ct/2n,$e)}var G={workspace:(e,t)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r=!1)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:r,log:[]}),swimlane:(e,t,n)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.SWIMLANE,childRenderAxis:"vertical",childNavigationAcrossParents:!0,parentNodeId:n,readonly:!1,log:[]}),field:(e,t,n,r={},o="horizontal")=>({id:e,title:t,rank:ae(),isDeleted:!1,props:r,context:R.FIELD,childRenderAxis:o,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n)=>({id:e,title:t,rank:ae(),isDeleted:!1,props:{},context:R.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:ae(),isDeleted:!1,props:r,context:R.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:o,log:[]})};var W=e=>Object.values(h().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),fr=(e,t)=>e.findIndex(n=>n.id===t),sn=(e,t={at:"end"})=>{if(e.length===0)return c("Resolved rank",ae());switch(t.at){case"start":{let n=e[0];return n?c("Resolved rank",it(void 0,n.rank)):s("Unable to resolve first sibling")}case"end":{let n=e[e.length-1];return n?c("Resolved rank",it(n.rank,void 0)):s("Unable to resolve last sibling")}case"before":{let n=fr(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",it(r?.rank,o.rank)):s("Sibling not found")}case"after":{let n=fr(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",it(r.rank,o?.rank)):s("Sibling not found")}}};var Ve=(e,t)=>{let{nodes:n}=h(),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}`)},dn=(e,t)=>{let{nodes:n}=h(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},an=(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"),C={deleteNode(e){ie(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=h(),r=n[e];if(!r)return s("Edit target node not found");let o=an(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return C.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=an(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=h();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=h();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return W(e).find(n=>n.title===t)},moveNode({id:e,parentId:t,position:n={at:"end"},navigate:r=!0}){let{rootNodeId:o}=h(),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=an(i,"move");if(d)return d;if(dn(t,e))return s("Cannot move node into its own descendant");let m=W(t).filter(y=>y.id!==e),u=sn(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}=h(),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 W(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}),F.navigate({currentNode:d[m],selectedIndex:0}),c("Successfully tomb stoned",o)},createContributor(e){let t=ie(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=C.getContributor(t),o=C.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(W(i.id).some(m=>m.props?.value===t))return s("Contributor already assigned");let d=this.createNodeAtPosition(G.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Assigned contributor",d.data)},createTag(e){let t=ie(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=C.getTag(t),o=C.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(W(i.id).some(m=>m.props?.value===t))return s("Tag already assigned");let d=this.createNodeAtPosition(G.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:ae()};return this.createNode(i),c("Created node",i)}let n=W(e.parentNodeId),r=sn(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=ie(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=ie(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?s(r.message):c("Locked node",n)},updateNode(e){let t=ie(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},updateNodeAndSelectInParent(e){let t=ie(a=>({...a,nodes:{...a.nodes,[e.id]:e}}));if(l(t))return s(t.message);let n=h(),r=e.parentNodeId?n.nodes[e.parentNodeId]:n.nodes[n.rootNodeId];if(!r)return s("Unable to resolve parent after update");let i=T(r.id).findIndex(({id:a})=>a===e.id);return F.navigate({currentNode:r,selectedIndex:i===-1?0:i}),c("Updated and selected",e)},getContributor(e){return h().contributors[e]},getTag(e){return h().tags[e]},getNode(e){return h().nodes[e]},getSiblings:e=>Object.values(h().nodes).filter(t=>!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank))};var Et={preferredEditor:null,userName:null,userId:null},de=()=>Et,st=e=>(Et={...Et,...e},Et);var It=()=>{let e=de(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},xr=()=>!bt();var j={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:j.cyan,accent2:j.magenta,primary:j.white,secondary:j.grayDark,secondary2:j.grayLight,gray:j.gray,green:j.green,yellow:j.yellow,red:j.red};var x={red:j.red,yellow:j.yellow,green:j.green,blue:j.blue,magenta:j.magenta,cyan:j.cyan},Ke={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 V=e=>{let{currentNode:t}=h(),n=It().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]:[...pr,"vim"],[g.TAG]:[...new Set([...Object.keys(Ke),...C.getExistingTags()])],[g.ASSIGN]:C.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?xr()||(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 pn from"chalk";import je from"chalk";var ln={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},Di=(e,t,n)=>Math.max(t,Math.min(n,e)),cn=(e,t,n)=>e+(t-e)*n,yr=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)]},Bi=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,ki=(e,t,n)=>[Math.round(cn(e[0],t[0],n)),Math.round(cn(e[1],t[1],n)),Math.round(cn(e[2],t[2],n))],at=e=>{let n=yr(e)%360,r=Fi(n,ln.stringColor.saturation,ln.stringColor.lightness);return Bi(r)},Oi=e=>{let t=ln.gradient.stops,n=Di(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 ki(t[i],t[i+1],a)},St=e=>yr(e.toLowerCase().trim())/4294967295,vr=e=>{let t=St(e);return Oi(t)},Ui=e=>{let[t,n,r]=vr(e);return{normal:o=>je.bgRgb(t,n,r).black(o),cursor:o=>je.bgRgb(t,n,r).white.bold(o)}},mn=e=>{let[t,n,r]=vr(e);return{fg:o=>je.rgb(t,n,r)(o),fgCursor:o=>je.rgb(t,n,r).inverse(o),bg:o=>je.bgRgb(t,n,r).black(o),bgCursor:o=>je.bgRgb(t,n,r).white.bold(o)}},un=e=>Ui(e).normal(` ${e} `),se=(e,t=Ke)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:at(r)};var he="<ENTER> to confirm",X=(e="",t=[])=>({message:e,validity:ye.Valid,completionWordList:t}),ce=({message:e,completionWordList:t})=>({validity:ye.Invalid,message:e,completionWordList:t}),dt=e=>e.length===0,Te=({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)=>St(f)-St(y)).slice(0,r).map(un),u=m.length>i?m.join(" "):"";return u?`${e}${u}${n}`:""},gn=({modifier:e})=>{let t="confirm";return e===t?X(he):ce({message:dt(e)?`if you are certain, enter ${un(t)}`:"",completionWordList:[t]})},Wi=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?X(he):ce({message:dt(n)?t:"",completionWordList:[]}),Hi=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?ce({message:n,completionWordList:[]}):X():ce({message:dt(r)?t:"",completionWordList:[]}),fn=({hint:e})=>({modifier:t,inputString:n})=>dt(t)&&dt(n)?ce({message:e,completionWordList:[]}):X(he),_i={[g.INIT]:()=>X(he),[g.FILTER]:e=>{if(e.modifier==="clear")return X();let t=a=>V(g.FILTER).includes(a);if(!e.modifier||!t(e.modifier??""))return ce({message:Te({wordList:V(g.FILTER),noOfHints:100,inputString:e.inputString}),completionWordList:V(g.FILTER)});let r=Object.values(h().tags).map(a=>a.name),o=Object.values(h().contributors).map(a=>a.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?ce({message:Te({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):X():ce({message:Te({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[g.NONE]:e=>e.command?X():ce({message:Te({prefix:"commands... ",wordList:V(g.NONE),noOfHints:100,inputString:e.inputString,minLengthForHints:0}),completionWordList:[]}),[g.NEW]:e=>Hi({list:V(g.NEW),hint:Te({wordList:V(g.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[g.SET_DESCRIPTION]:()=>X(he),[g.HELP]:()=>X(he),[g.RENAME]:()=>X(he),[g.DELETE]:e=>gn(e),[g.CLOSE_ISSUE]:e=>gn(e),[g.RE_OPEN_ISSUE]:e=>gn(e),[g.MOVE]:e=>fn({hint:Te({prefix:"hey hacker! These commands are blocked for you... ",wordList:V(g.MOVE),noOfHints:10,inputString:e.inputString})})(e),[g.TAG]:e=>{let t=C.getExistingTags().map(n=>` ${pn.bgHex(se(n))(" "+n+" ")} `).slice(0,10);return fn({hint:"tag name like... "+t.join("")})(e)},[g.ASSIGN]:e=>{let t=C.getExistingAssignees().map(n=>` ${pn.bgHex(se(n))(" "+n+" ")} `).slice(0,10);return fn({hint:"assign to... "+t.join("")})(e)},[g.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=V(g.SET_EDITOR);return e.modifier?X(he):ce({message:Te({wordList:t,noOfHints:100,inputString:e.inputString}),completionWordList:[]})},[g.SET_USERNAME]:e=>e.inputString?X():ce({message:`Enter a username. Saved in ${pn.bgBlack("~/.epiqrc")}`,completionWordList:[]}),[g.SET_VIEW]:e=>Wi({list:V(g.SET_VIEW),hint:Te({wordList:V(g.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[g.SYNC]:()=>X(he)},hr=Object.fromEntries(Object.entries(_i).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var Cr=["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 Nr=e=>Object.values(g).includes(e),Er=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:a,validity:d,completionWordList:m}=hr[n].validate(n,r,i),u=o==="command"?Object.values(g):n&&e.target==="modifier"?V(n):Cr;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:a??"",autoCompletion:t?ur(e,[...m,...u]):{hint:"",hints:[],remainder:"",overlap:0}}};var Ir=e=>{let t=e.trimStart(),n=Vi(t),r=(n[0]??"").trimStart().trimEnd(),o=(n[1]??"").trimStart().trimEnd(),i=Ki(e),a=Nr(r)?r:null,d=a!==null,m=r!=="",u=e.endsWith(" "),f=a?V(a)??[]:[],y=a&&f.includes(o)?o:"",N="word";n.length<=1?N="command":n.length===2&&(N="modifier");let S=$i(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}},$i=(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},Vi=e=>e?e.split(/\s+/):[],Ki=e=>e.trimEnd().split(/\s+/).at(-1)??"";var br=" ",z={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:ye.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},xn=new Set,Sr=()=>{for(let e of xn)e()},Ar=e=>(xn.add(e),()=>xn.delete(e)),Ce=e=>{let n=e(z),r=Ir(n.value),o=n.cursorPosition===n.value.length;z={...n,commandMeta:Er(r,o)},Sr()},At=({message:e,result:t})=>{let n=structuredClone(z);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,z=n,Sr(),c(e,null)},yn=e=>{Ce(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},vn=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}})},wr=()=>{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}})},Tr=()=>{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}})},H=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}})},Mr=()=>{Ce(e=>({...e,commandIsPending:!0}))},Rr=({addToHistory:e=!0})=>{Ce(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),ji()},Lr=()=>{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}})},Pr=()=>{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}})},ji=()=>H(()=>""),ue=()=>z,wt=()=>{let[e,...t]=z.value.split(br);return t.join(br).trim()};var zi=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",qi=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",Gi=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",Dr=(e,t)=>{if(qi(e,e.sequence))return"MoveCursorLeftOfWord";if(Gi(e,e.sequence))return"MoveCursorRightOfWord";if(zi(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 Xi(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 Yi(e,t,n){let r=h().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 Fr(e,t){let n=ue();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 Dr(e,n.value);let r=Xi(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 Yi(h().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 h().viewMode==="wide"?"SetViewDense":"SetViewWide";case"q":case"escape":return"exit";case"s":return"sync";default:return null}}var Br=e=>{let{context:t}=h()?.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 _}from"ulid";import{spawnSync as os}from"node:child_process";import is from"node:os";import Wr from"node:path";import{ulid as ss}from"ulid";import{accessSync as Ji,copyFileSync as Qi,existsSync as Tt,mkdirSync as kr,readdirSync as Or,readFileSync as Zi,renameSync as es,rmSync as ts,statSync as Ur,unlinkSync as ns,writeFileSync as rs}from"node:fs";import ze from"node:path";var ne={writeToFile:(e,t)=>{try{let n=ze.dirname(e);Tt(n)||kr(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);rs(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return Zi(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=ne.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)&&Ur(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Ji(e),!0}catch{return!1}},mkDir:e=>kr(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=ze.parse(t);for(;;){let r=ze.join(t,e);try{if(Tt(r)&&Ur(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=ze.dirname(t)}return null},readFirstJSON(e){try{if(!ne.dirExists(e))return null;let t=Or(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=ze.join(e,t);return ne.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return ne.dirExists(e)?Or(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{ns(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{ts(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(ze.dirname(t)),!n?.overwrite&&Tt(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{es(e,t)}catch(r){if(r?.code==="EXDEV"){Qi(e,t),this.rmFile(e);return}throw r}}};function as(){let{preferredEditor:e}=de(),t=[e,process.env.VISUAL,process.env.EDITOR,"vim","vi","nano"].filter(n=>!!n?.trim());return[...new Set(t)]}function ds(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function Hr(e){let t=Wr.join(is.tmpdir(),"epiq");ne.mkDir(t);let n=Wr.join(t,ss());ne.writeToFile(n,e??"");let r=as();for(let o of r){let i=ds(o,n),a=os(i,{stdio:"inherit",shell:!0});if(!a.error&&a.status===0){let d=ne.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 cs,ulid as Mt}from"ulid";var Rt=cs(),_r=({name:e,parent:t,userId:n})=>{let r=Rt(),o=Rt(),i=Rt(),a=Rt();return[{id:Mt(),userId:n,action:"add.issue",payload:{id:r,parent:t,name:e}},{id:Mt(),userId:n,action:"add.field",payload:{id:o,parent:r,name:"Description",val:""}},{id:Mt(),userId:n,action:"add.field",payload:{id:i,parent:r,name:"Assignees"}},{id:Mt(),userId:n,action:"add.field",payload:{id:a,parent:r,name:"Tags"}}]};var $r=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 ls=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[qe,Lt]=ls;var L=(e,t)=>s(`${t.split(".").join(" ")+" failed, "+e.toLowerCase()}`),ms={"init.workspace":({action:e,payload:t})=>{let{id:n,name:r}=t,o=G.workspace(n,r);Vr(o);let i=C.createNodeAtPosition(o);return l(i)?L(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=G.workspace(n,r),i=C.createNodeAtPosition(o);return l(i)?L(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=C.createNodeAtPosition(G.board(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.swimlane(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.ticket(n,r,o));return l(i)?L(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=C.createNodeAtPosition(G.field(n,r,o,{value:i},r.includes("Description")?"vertical":"horizontal"));return l(a)?L(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(!C.getNode(n))return L("Unable to locate node",e);let i=C.renameNode(n,r);return l(i)?L(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=C.tombstoneNode(n);return l(r)?L(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=C.createTag({id:n,name:r});return l(o)?L(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=C.createContributor({id:n,name:r});return l(o)?L(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=C.tag(r,o,n);return l(i)?L(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=C.assign(o,r,n);return l(i)?L(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=C.moveNode({id:n,parentId:r,position:o});return l(i)?L(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=C.editValue(n,r);return l(o)?L(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=C.getNode(n);if(!r)return L("Unable to locate issue",e);if(!Be(r))return L("Can only close issues",e);let o=C.getNode(qe);if(!o)return L("Unable to locate target swimlane",e);if(o.id===r.parentNodeId)return L("Cannot close closed issue",e);let a=C.moveNode({id:n,parentId:o.id,navigate:!1});return l(a)?L(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=C.getNode(n);if(!r)return L("Unable to locate issue",e);if(!Be(r))return L("Can only reopen issues",e);let o=C.getNode(qe);if(!o)return L("Unable to locate closed swimlane",e);if(!(r.parentNodeId===o.id))return L("Issue is not closed",e);let a=$r(r);if(!a)return L("Unable to resolve previous parent from issue history",e);if(a===o.id)return L("Previous parent resolves to closed swimlane",e);if(!C.getNode(a))return L("Previous parent no longer exists",e);let m=C.moveNode({id:n,parentId:a,navigate:!1});return l(m)?L(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=C.lockNode(n);return l(r)?L(r.message??"Unable to lock node",e):c("Node locked",{action:e,result:r.data})}},us=(e,t)=>{let n=C.getNode(e);n&&C.updateNode({...n,log:[...n.log??[],t]})},ps=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=h().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 Ge(e,t=!1){let n=ms[e.action],r=n(e);if(l(r))return r;if(!t){let a=[...new Set(ps(e))];for(let d of a)us(d,e)}let[o,i]=e.userId.split(".");return!o?.length||!i?.length?L("Invalid user ID format",e.action):(C.createContributor({name:i,id:o}),r)}var Cn=e=>e.map(t=>Ge(t));import Dt from"node:fs";import ke from"node:path";import{decodeTime as Cs,monotonicFactory as Ns}from"ulid";var Pt=process.env.IS_LOCAL==="true",pe=()=>".epiq";import Nn from"node:fs";import En from"node:path";var gs=pe(),fs="events",xs=(e=process.cwd())=>En.join(Xe(e),gs,fs),ys=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])},vs=e=>{let{userId:t,...n}=e,r=ys(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 Kr(e=process.cwd()){let t=xs(e);if(!Nn.existsSync(t))return s("No events found");let n=Nn.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>En.join(t,o)),r=[];for(let o of n){let i=Nn.readFileSync(o,"utf8"),a=En.basename(o,".jsonl")||"unknown";for(let d of i.split(`
3
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",hs(r))}function jr(e=process.cwd()){let t=Kr(e);if(l(t))return s(t.message);let n=[];for(let r of t.data){let o=vs(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 zr(e=process.cwd()){let t=Kr(e);return l(t)?s(t.message):c("Loaded edge reference",t.data.at(-1)?.id?.[0]??null)}var hs=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 qr=e=>({action:e.action,payload:e.payload});var Es=1,Gr=Ns(),Is="events",Xr=e=>e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown",Y=()=>{let{userName:e,userId:t}=de();if(!e)return s("User name not configured");if(!t)return s("User ID not configured");let n=`${Xr(t)}.${Xr(e)}`;return e.trim()?c("Successfully resolved actor ID",n):s("Unable to resolve actor ID from settings or OS user info")},bs=e=>Dt.existsSync(ke.join(e,pe()))&&Dt.statSync(ke.join(e,pe())).isDirectory(),Xe=(e=process.cwd())=>{let t=ke.resolve(e);for(;;){if(bs(t))return t;let n=ke.dirname(t);if(n===t)return ke.resolve(e);t=n}},Yr=(e=process.cwd())=>ke.join(Xe(e),pe(),Is),In=()=>{let e=Y();return l(e)||!e.data?s("Unable to resolve event log path"):c("Succeeded",`${e.data}.jsonl`)},Ss=(e=process.cwd())=>{let t=In();return l(t)?s("Unable to resolve file name"):c("Successfully resolved event log path",ke.join(Yr(e),`${t.data}.jsonl`))},As=(e,t)=>({[e.action]:e.payload,v:Es,id:t});function Jr(e,t=process.cwd()){try{let n=Xe(t),r=Yr(n),o=Ss(n);if(l(o))return o;Dt.mkdirSync(r,{recursive:!0});let i=zr(n);if(l(i))return s(i.message);let a;if(i.data){let m=Cs(i.data),u=Math.max(Date.now(),m+1);a=Gr(u)}else a=Gr();let d=As(qr(e),[a,i.data]);return Dt.appendFileSync(o.data,`${JSON.stringify(d)}
4
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 J(e){let t=Ge(e);if(t.result!==ve.Success)return t;let n=Jr(e);return l(n)?n:t}function Ft(e){return e.map(t=>J(t))}import{ulid as Qr}from"ulid";var Ye=null,Oe=()=>structuredClone(Ye),Je=e=>Ye=e,Zr=()=>{let{currentNode:e,selectedIndex:t}=h(),r=T(e.id)[t];return r?c("Resolved selected child",r):s("Target node not found")};function bn(e){let t=Zr();if(l(t))return t;let{currentNode:n,nodes:r}=h();if(!n.parentNodeId)return s("Missing parent node id");let o=r[n.parentNodeId];if(!o)return s("Missing parent node");let i=W(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=Y();if(l(m))return s("Unable to resolve user ID");let u=m.data;if(Je({id:Qr(),userId:u,action:"move.node",payload:{id:t.data.id,parent:d.id,pos:{at:"end"}}}),!Ye)return s("Could not materialize move state");let f=Ge(Ye,!0);return l(f)?f:c("Node moved successfully",f.data)}function Sn(e){let t=Zr();if(l(t))return t;let{currentNode:n,selectedIndex:r}=h(),i=W(n.id)[r+e];if(!i)return s("Missing sibling node");let a=Y();if(l(a))return s("Unable to resolve user ID");let d=a.data;if(Je({id:Qr(),userId:d,action:"move.node",payload:{id:t.data.id,parent:n.id,pos:{at:e===1?"after":"before",sibling:i.id}}}),!Ye)return s("Could not materialize move state");let m=Ge(Ye,!0);return l(m)?m:c("Node moved successfully",m.data)}import ws from"node:os";import eo from"node:path";var Ts={userId:"",userName:"",preferredEditor:""},Ms=".epiq",Rs="config.json",to=()=>eo.join(ws.homedir(),Ms),An=()=>eo.join(to(),Rs),wn=()=>{try{return ne.mkDir(to()),c("Ensured ~/.epiq exists",null)}catch{return s("Unable to create ~/.epiq")}},Ls=e=>{try{let t=JSON.parse(e);return c("Parsed config",t??{})}catch{return s("Invalid ~/.epiq/config.json JSON")}},no=()=>{let e=wn();if(l(e))return s(e.message);let t=An(),n=ne.readFile(t);return n==null||n.trim()===""?c("No config found, using empty config",{}):Ls(n)},ro=e=>{let t=wn();if(l(t))return s(t.message);let n=An();try{return ne.writeToFile(n,JSON.stringify(e,null,2)+`
5
- `),c("Config written",null)}catch{return s("Unable to write ~/.epiq/config.json")}},Tn=e=>{let t=no();if(l(t))return s("Failed to read existing config");let n={...t.data,...e};return ro(n)},oo=()=>{let e=An(),t=wn();if(l(t))throw new Error("Unable to create ~/.epiq");if(!(ne.readFile(e)!==null)){let d=ro(Ts);if(l(d))throw new Error("Unable to create ~/.epiq/config.json")}let r=no();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"):st({preferredEditor:o,userName:i,userId:a})};var Qe=(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{createHash as Ds}from"node:crypto";import B from"node:fs";import Fs from"node:os";import re from"node:path";import{spawn as io}from"node:child_process";import Mn from"node:fs";import Ue from"node:path";var F=({args:e,cwd:t})=>new Promise(n=>{if(!Mn.existsSync(t))return n(s(`Git cwd does not exist: ${t}`));let r=io("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(" ")}`,`cwd=${t}`,a.message].join(`
5
+ `),c("Config written",null)}catch{return s("Unable to write ~/.epiq/config.json")}},Tn=e=>{let t=no();if(l(t))return s("Failed to read existing config");let n={...t.data,...e};return ro(n)},oo=()=>{let e=An(),t=wn();if(l(t))throw new Error("Unable to create ~/.epiq");if(!(ne.readFile(e)!==null)){let d=ro(Ts);if(l(d))throw new Error("Unable to create ~/.epiq/config.json")}let r=no();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"):st({preferredEditor:o,userName:i,userId:a})};var Qe=(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{createHash as Ds}from"node:crypto";import D from"node:fs";import Fs from"node:os";import re from"node:path";import{spawn as io}from"node:child_process";import Mn from"node:fs";import Ue from"node:path";var B=({args:e,cwd:t})=>new Promise(n=>{if(!Mn.existsSync(t))return n(s(`Git cwd does not exist: ${t}`));let r=io("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(" ")}`,`cwd=${t}`,a.message].join(`
6
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}))})}),Ze=({args:e,cwd:t})=>new Promise(n=>{if(!Mn.existsSync(t))return n({stdout:"",stderr:`Git cwd does not exist: ${t}`,exitCode:1});let r=io("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})})}),Rn=async(e=process.cwd())=>{let t=await F({args:["rev-parse","--show-toplevel"],cwd:e});return l(t)?s("Not inside a Git repository"):t.data?c("Resolved repo root",t.data.stdout.trim()):s("Git command returned no repo root")},Ps=async e=>{let t=await F({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return s(t.message);if(!t.data)return s("Git command returned no git dir");let n=t.data.stdout.trim(),r=Ue.isAbsolute(n)?n:Ue.join(e,n);return c("Resolved git dir",r)},ct=async e=>{let t=await Ps(e);if(l(t))return s(t.message);if(!t.data)return s("Git dir result missing data");let n=t.data,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD",Ue.join("rebase-merge"),Ue.join("rebase-apply")].filter(i=>Mn.existsSync(Ue.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},so=async e=>{let t=await Ze({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")},Ln=async({repoRoot:e,remote:t})=>{let n=await Ze({args:["remote","get-url",t],cwd:e});return c("Checked remote",n.exitCode===0)},Bt=async({repoRoot:e,remote:t,branch:n})=>{let r=await Ze({args:["ls-remote","--heads",t,n],cwd:e});return r.exitCode!==0?s(r.stderr.trim()||`Unable to inspect remote branch ${t}/${n}`):c("Checked remote branch",r.stdout.trim().length>0)},ao=async({repoRoot:e,branch:t})=>{let n=await Ze({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}`)},Pn=async({repoRoot:e,worktreeRoot:t})=>{let n=await F({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);if(!n.data)return s("Git command returned no worktree data");let r=Ue.resolve(t),o=n.data.stdout.split(`
8
- `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(i=>Ue.resolve(i)).includes(r);return c("Checked worktree registration",o)},kt=async e=>{let t=await Ze({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e});return c("Checked upstream",t.exitCode===0&&t.stdout.trim().length>0)},Dn=async e=>{let t=await F({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?s(t.message):t.data?c("Resolved current branch",t.data.stdout.trim()):s("Git command returned no branch name")},co=async e=>{let t=await F({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?s(t.message):t.data?c("Resolved short HEAD sha",t.data.stdout.trim()):s("Git command returned no short sha")},Fn=async e=>{if((await Ze({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Repo already initialized",!1);let n=await F({args:["commit","--allow-empty","-m","[epiq:init]"],cwd:e});return l(n)?s(`Failed to create initial commit
9
- ${n.message}`):n.data?c("Created initial commit",!0):s("Git command returned no commit result data")},Bn=async({cwd:e,remote:t,branch:n})=>{let r=await kt(e);if(l(r))return s(r.message);if(!r.data)return c("No upstream configured, skipped pull",!1);let o=await Bt({repoRoot:e,remote:t,branch:n});if(l(o))return s(o.message);if(!o.data)return c("Remote branch missing, skipped pull",!1);let i=await F({args:["fetch",t,n],cwd:e});if(l(i))return s(`Failed to fetch ${n}
10
- ${i.message}`);if(!i.data)return s("Git command returned no fetch result data");let a=await F({args:["pull","--rebase"],cwd:e});return l(a)?s(`Failed during pull --rebase
11
- ${a.message}`):a.data?c("Pulled with rebase",!0):s("Git command returned no pull result data")};var go=pe(),fo="events",O="epiq-state-4",le="origin",xo=e=>re.join(go,fo,e),Bs=e=>Ds("sha1").update(e).digest("hex").slice(0,12),yo=()=>re.join(Fs.homedir(),".epiq"),vo=()=>re.join(yo(),"worktrees"),ho=e=>re.join(vo(),Bs(e)),Co=e=>re.join(e,go),lt=e=>re.join(Co(e),fo),lo=({root:e,fileName:t})=>re.join(lt(e),t),kn=e=>(B.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)),ks=()=>{let e=kn(yo());if(l(e))return s(e.message);let t=kn(vo());return l(t)?s(t.message):c("Ensured epiq storage",void 0)},mo=e=>{let t=Co(e);return B.existsSync(t)?c("Epiq dir already exists",!1):(B.mkdirSync(t,{recursive:!0}),c("Created epiq dir",!0))},uo=e=>{let t=lt(e);return B.existsSync(t)?c("Events dir already exists",!1):(B.mkdirSync(t,{recursive:!0}),c("Created events dir",!0))},Os=e=>{B.existsSync(e)&&B.rmSync(e,{recursive:!0,force:!0})},Us=e=>e.endsWith(".jsonl")?e.includes("/")||e.includes("\\")?s("Own event file must be a file name, not a path"):e==="."||e===".."||e.trim()===""?s("Own event file name is invalid"):c("Validated own event file name",e):s("Own event file must end with .jsonl"),Ws=e=>{let t=lt(e);return B.existsSync(t)?c("Listed event files",B.readdirSync(t,{withFileTypes:!0}).filter(n=>n.isFile()).map(n=>n.name).filter(n=>n.endsWith(".jsonl")).sort()):c("Events dir missing",[])},Hs=({repoRoot:e,worktreeRoot:t,ownEventFileName:n})=>{let r=lo({root:e,fileName:n}),o=lo({root:t,fileName:n});if(!B.existsSync(r))return c("Local own event file missing, nothing to copy",!1);let i=B.readFileSync(r,"utf8"),a=B.existsSync(o)?B.readFileSync(o,"utf8"):"";return i===a?c("Own event file already matches board worktree",!1):(B.mkdirSync(re.dirname(o),{recursive:!0}),B.copyFileSync(r,o),c("Copied own event file into board worktree",!0))},No=({repoRoot:e,worktreeRoot:t})=>{let n=Ws(t);if(l(n))return s(n.message);let r=lt(t),o=lt(e),i=!1;for(let a of n.data){let d=re.join(r,a),m=re.join(o,a),u=B.existsSync(d)?B.readFileSync(d,"utf8"):"",f=B.existsSync(m)?B.readFileSync(m,"utf8"):"";u!==f&&(B.mkdirSync(re.dirname(m),{recursive:!0}),B.copyFileSync(d,m),i=!0)}return c("Hydrated event files from board worktree",i)},po=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",_s=async e=>{let t=await Dn(e);if(l(t))return s(t.message);let n=await co(e);return l(n)?s(n.message):c("Built sync commit message",`[epiq:sync:${po(t.data)}:${po(n.data)}]`)},$s=async({repoRoot:e})=>{let t=await ao({repoRoot:e,branch:O});if(l(t))return s(t.message);if(t.data)return c("Local board branch already exists",!1);let n=await Ln({repoRoot:e,remote:le});if(l(n))return s(n.message);if(n.data){let o=await Bt({repoRoot:e,remote:le,branch:O});if(l(o))return s(o.message);if(o.data){let i=await F({args:["fetch",le,O],cwd:e});if(l(i))return s(`Failed to fetch ${O} from remote
12
- ${i.message}`);let a=await F({args:["branch","--track",O,`${le}/${O}`],cwd:e});return l(a)?s(`Failed to create local ${O} from remote
13
- ${a.message}`):c("Created local board branch from remote",!0)}}let r=await F({args:["branch",O,"HEAD"],cwd:e});return l(r)?s(`Failed to create local ${O}
14
- ${r.message}`):c("Created local board branch",!0)},Vs=async({repoRoot:e,worktreeRoot:t})=>{let n=kn(re.dirname(t));if(l(n))return s(n.message);B.existsSync(t)&&!B.existsSync(re.join(t,".git"))&&Os(t);let r=await F({args:["worktree","add",t,O],cwd:e});return l(r)?s(`Failed to create board worktree
15
- ${r.message}`):c("Created board worktree",!0)},Ks=async({repoRoot:e,worktreeRoot:t})=>{let n=await Pn({repoRoot:e,worktreeRoot:t});if(l(n))return s(n.message);let r=B.existsSync(t);if(n.data&&r)return c("Board worktree already exists",!1);if(n.data&&!r){let o=await F({args:["worktree","prune"],cwd:e});if(l(o))return s(`Failed to prune stale worktrees
16
- ${o.message}`);let i=await Pn({repoRoot:e,worktreeRoot:t});if(l(i))return s(i.message);if(i.data){let a=await F({args:["worktree","remove","--force",t],cwd:e});if(l(a))return s(`Failed to remove stale worktree registration
17
- ${a.message}`)}}return Vs({repoRoot:e,worktreeRoot:t})},js=async e=>{let t=await Dn(e);if(l(t))return s(t.message);if(t.data===O)return c("Board branch already checked out",!1);let n=await F({args:["checkout",O],cwd:e});return l(n)?s(`Failed to checkout ${O}
18
- ${n.message}`):c("Checked out board branch",!0)},zs=async e=>{let t=await kt(e);if(l(t))return s(t.message);if(t.data)return c("Board upstream already configured",!1);let n=await Ln({repoRoot:e,remote:le});if(l(n))return s(n.message);if(!n.data)return c("No remote available for upstream",!1);let r=await Bt({repoRoot:e,remote:le,branch:O});if(l(r))return s(r.message);if(r.data){let i=await F({args:["fetch",le,O],cwd:e});if(l(i))return s(`Failed to fetch ${O}
19
- ${i.message}`);let a=await F({args:["branch","--set-upstream-to",`${le}/${O}`,O],cwd:e});return l(a)?s(`Failed to set board upstream
20
- ${a.message}`):c("Configured board upstream",!0)}let o=await F({args:["push","-u",le,O],cwd:e});return l(o)?s(`Failed to publish board branch
21
- ${o.message}`):c("Published board branch and configured upstream",!0)},qs=async({worktreeRoot:e,ownEventFileName:t})=>{let n=await F({args:["add",xo(t)],cwd:e});return l(n)?s(`Failed to stage board own event file
22
- ${n.message}`):c("Staged board own event file",void 0)},Gs=async({worktreeRoot:e,ownEventFileName:t})=>{let n=await F({args:["diff","--cached","--quiet","--",xo(t)],cwd:e});return l(n)?n.message.includes("git diff --cached --quiet")?c("Has staged board own event file change",!0):s(n.message):c("No staged board own event file change",!1)},Xs=async({repoRoot:e,worktreeRoot:t,ownEventFileName:n})=>{let r=await Gs({worktreeRoot:t,ownEventFileName:n});if(l(r))return s(r.message);if(!r.data)return c("No board own event file commit needed",null);let o=await _s(e);if(l(o))return s(o.message);let i=await F({args:["commit","-m",o.data],cwd:t});if(l(i))return s(`Failed to commit board own event file
23
- ${i.message}`);let a=await F({args:["rev-parse","HEAD"],cwd:t});return l(a)?s(a.message):c("Created board sync commit",a.data.stdout.trim())},Ys=async e=>{let t=await kt(e);if(l(t))return s(t.message);if(!t.data)return c("No upstream configured, skipped push",!1);let n=await F({args:["push"],cwd:e});return l(n)?s(`Failed during board push
24
- ${n.message}`):c("Pushed board",!0)},Eo=async({repoRoot:e,worktreeRoot:t,ensureUpstream:n})=>{let r=!1;for(let o of[ks(),await $s({repoRoot:e}),await Ks({repoRoot:e,worktreeRoot:t}),await js(t),n?await zs(t):c("Skipped upstream bootstrap",!1)]){if(l(o))return s(o.message);r=r||!!o.data}return c(n?"Bootstrapped board storage":"Bootstrapped board storage (readonly)",r)},Io=(e,t)=>{for(let n of[mo(e),mo(t),uo(e),uo(t)])if(l(n))return s(n.message);return c("Ensured board layout",void 0)},bo=async({cwd:e=process.cwd(),ownEventFileName:t})=>{let n=Us(t);if(l(n))return s(n.message);let r=await Rn(e);if(l(r))return s(r.message);let o=r.data,i=ho(o);for(let K of[await ct(o),await so(o)]){if(l(K))return s(K.message);if(K.data)return s(K.message.includes("staged")?"Cannot run :sync while staged changes exist. Please commit or unstage them first.":"Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the current repo")}let a=await Fn(o);if(l(a))return s(a.message);let d=await Eo({repoRoot:o,worktreeRoot:i,ensureUpstream:!0});if(l(d))return s(d.message);let m=await ct(i);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=Io(o,i);if(l(u))return s(u.message);let f=!1,y,N=!1,S=!1,b=!1,I=Hs({repoRoot:o,worktreeRoot:i,ownEventFileName:n.data});if(l(I))return s(I.message);if(I.data){let K=await qs({worktreeRoot:i,ownEventFileName:n.data});if(l(K))return s(K.message);let Z=await Xs({repoRoot:o,worktreeRoot:i,ownEventFileName:n.data});if(l(Z))return s(Z.message);f=!!Z.data,y=Z.data??void 0}let E=await Bn({cwd:i,remote:le,branch:O});if(l(E))return s(E.message);N=E.data;let w=await Ys(i);if(l(w))return s([w.message,f&&y?`Local board sync commit exists: ${y}`:""].filter(Boolean).join(`
25
- `));S=w.data;let k=No({repoRoot:o,worktreeRoot:i});return l(k)?s(k.message):(b=k.data,c("Synced board event logs via git",{repoRoot:o,worktreeRoot:i,createdCommit:f,commitSha:y,pulled:N,pushed:S,hydrated:b,bootstrapped:d.data}))},So=async(e=process.cwd())=>{let t=await Rn(e);if(l(t))return s(t.message);let n=t.data,r=ho(n),o=await ct(n);if(l(o))return s(o.message);if(o.data)return s("Cannot sync while a git operation is in progress in the current repo");let i=await Fn(n);if(l(i))return s(i.message);let a=await Eo({repoRoot:n,worktreeRoot:r,ensureUpstream:!1});if(l(a))return s(a.message);let d=await ct(r);if(l(d))return s(d.message);if(d.data)return s("Cannot sync while a git operation is in progress in the board worktree");let m=Io(n,r);if(l(m))return s(m.message);let u=await Bn({cwd:r,remote:le,branch:O});if(l(u))return s(u.message);let f=No({repoRoot:n,worktreeRoot:r});return l(f)?s(f.message):c("Synced from remote",{repoRoot:n,worktreeRoot:r})};var Js=e=>Object.values(h().tags).find(t=>t.name===e),Qs=e=>Object.values(h().contributors).find(t=>t.name===e),Ao=[{systemOnly:!0,intent:M.Move,mode:p.COMMAND_LINE,action:()=>{let e=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n}=ue().commandMeta,{currentNode:r,selectedIndex:o}=h(),i=T(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=T(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 Je({id:_(),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}),Sn(1);if(n==="previous")return A({mode:p.MOVE}),Sn(-1);if(n==="to-next")return A({mode:p.MOVE}),bn(1);if(n==="to-previous")return A({mode:p.MOVE}),bn(-1);if(n==="confirm"){A({mode:p.DEFAULT});let a=Oe();if(!a)return s("No pending move to confirm");let d=J(a);return l(d)?d:(Je(null),c("Moved item",null))}return n==="cancel"?(Je(null),A({mode:p.DEFAULT}),c("Cancelling move",null)):s("Invalid move modifier")}},{intent:M.Delete,mode:p.COMMAND_LINE,action:()=>{let e=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];return o?J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,n=Qe(h().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}=h();if(!T(r.id)[i])return s("No selected field");let d=T(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=Hr(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"?J({id:_(),userId:t,action:"edit.description",payload:{id:d.id,md:f}}):d.title==="Title"?J({id:_(),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}=ue().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>V(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 ie(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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Unable to close issue, no target found");if(!o.parentNodeId)return s("No target parent found");if(!Be(o))return s("Cannot close in this context");let i=J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Unable to reopen issue, no target found");let i=o.context==="TICKET"?c("Resolved ticket",o):Ve(o.id,"TICKET");if(l(i))return s("Cannot reopen in this context");let a=i.data,d=J({id:_(),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}=de(),r=wt()?.trim();if(!r)return s("No username provided");let o=r??n,i=e??_();if(!o||!i)return s("Unable to resolve user name or id");let a=Tn({userName:o,userId:i,preferredEditor:t??""});return l(a)?a:(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=wo();if(l(e))return e;let{rootNodeId:t,nodes:n}=h();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=Tn({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=Y();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}=h(),d=m=>{let u=J(m);if(l(u))return u;let f=C.getNode(u.data.result.id);if(!f)return s("Created node not found");if(!f.parentNodeId)return u;let y=C.getNode(f.parentNodeId);return y?(D.navigate({currentNode:y,selectedIndex:C.getSiblings(f.parentNodeId).findIndex(({id:N})=>N===f.id)}),u):s("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:m}=h(),u=C.getNode(m);return u?d({id:_(),userId:r,action:"add.board",payload:{id:_(),name:t.inputString,parent:u.id}}):s("Workspace not found")}if(t.modifier==="swimlane"){let m=Qe(o,"BOARD");return l(m)?s("Unable to add swimlane in this context"):d({id:_(),userId:r,action:"add.swimlane",payload:{id:_(),name:t.inputString,parent:m.data.id}})}if(t.modifier==="issue"){let m=T(i.id)[a],u=i.context==="SWIMLANE"?i:i.context==="BOARD"&&m?.context==="SWIMLANE"?m:(()=>{let b=Qe(o,"SWIMLANE");return l(b)?null:b.data})();if(!u)return s("Unable to add issue in this context");let f=_r({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:C.getSiblings(u.id).findIndex(({id:b})=>b===S)}),c("Issue created",null)):s("Unable to determine ticket id")}return sr()},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetView,mode:p.COMMAND_LINE,action:()=>{let{commandMeta:e}=ue();return e.validity===ye.Invalid?s("Invalid command "+ve):(ie(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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Missing node");if(o.readonly)return s("Cannot rename readonly node");let i=wt();return i?J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=ue().commandMeta,o=(n||r).trim();if(!o)return s("Provide a tag");let{selectedIndex:i,currentNode:a}=h(),d=T(a.id)[i];if(!d)return s("Invalid tag target");let m=Ve(d.id,"TICKET");if(l(m))return s("Unable to tag issue in this context");let u=m.data,f=Js(o),y;if(f)y=f.id;else{let b=_(),I=J({id:_(),userId:t,action:"create.tag",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=C.getFieldByTitle(u.id,"Tags");return N?T(N.id).some(b=>b.props?.value===y)?s("Already tagged with that tag"):J({id:_(),userId:t,action:"tag.issue",payload:{id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=ue().commandMeta,o=(n||r).trim();if(!o)return s("Provide an assignee");let{selectedIndex:i,currentNode:a}=h(),d=T(a.id)[i];if(!d)return s("Invalid assign target");let m=Ve(d.id,"TICKET");if(l(m))return s("Unable to assign issue in this context");let u=m.data,f=Qs(o),y;if(f)y=f.id;else{let b=_(),I=J({id:_(),userId:t,action:"create.contributor",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=C.getFieldByTitle(u.id,"Assignees");return N?T(N.id).some(b=>b.props?.value===y)?s("Assignee already assigned"):J({id:_(),userId:t,action:"assign.issue",payload:{id:_(),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()=>{H(()=>""),A({syncStatus:{msg:"Syncing",status:"syncing"}});let{userId:e,userName:t}=de();if(!e)return s("Unable to resolve userId");if(!t)return s("Unable to resolve userName");let n=In();if(l(n))return s("Unable to resolve log file name");let r=await bo({ownEventFileName:n.data});return l(r)?(A({syncStatus:{msg:r.message,status:"outOfSync"}}),s(`Unable to sync state. ${r.message}`)):(A({syncStatus:{msg:"Synced",status:"synced"},mode:p.DEFAULT}),c("Synced",!0))}}];var oe=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=ue();if(!t)return s("No command to confirm");if(!e&&n===ye.Invalid)return s("Invalid command");let i=Br(t);Mr();let a=Ao.filter(m=>e||m.systemOnly!==!0).find(m=>m.intent===i);if(!a)return At({result:ve.Fail,message:"Command not found",data:null});let d=await a.action(a,{command:t,inputString:o,modifier:r});return l(d)?At(d):(Rr({addToHistory:!e}),a.onSuccess?.(),At(d))};var Ot=[{intent:"exit",mode:p.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move cancel"),oe({isForceExecutedBySystem:!0}))},{intent:"initMove",mode:p.DEFAULT,description:"[m] move init/confirm",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move start"),oe({isForceExecutedBySystem:!0}))},{intent:"confirmMove",mode:p.MOVE,action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move confirm"),oe({isForceExecutedBySystem:!0}))}],Ut=[{intent:"movePreviousItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move previous"),oe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveNextItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move next"),oe({isForceExecutedBySystem:!0})):s("No pending move")}],To=[{intent:"moveToNextContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move to-next"),oe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveToPreviousContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move to-previous"),oe({isForceExecutedBySystem:!0})):s("No pending move")}];var Mo={[R.WORKSPACE]:[...Ot,...Ut],[R.BOARD]:[...Ot,...Ut],[R.SWIMLANE]:[...Ot,...Ut,...To],[R.TICKET]:[],[R.FIELD]:[],[R.FIELD_LIST]:[],[R.TEXT]:[]};var Ro=[{intent:"addItem",mode:p.DEFAULT,description:"[n] new...",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>`${g.NEW} `),c("Adding new item",null))},{intent:"Delete",mode:p.DEFAULT,description:"[d] delete",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>`${g.DELETE} `),c("Deleting item",null))},{intent:"initCommandLine",mode:p.DEFAULT,description:"[:] focus command line",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>""),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}),H(()=>"edit"),oe(),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}),H(()=>"sync"),oe({isForceExecutedBySystem:!0}),c("Synced",!0))}];var Lo=[{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:()=>(oe(),c("Executing command",null))},{intent:"MoveCursorLeft",mode:p.COMMAND_LINE,action:()=>(yn(-1),c("Moving cursor left",null))},{intent:"MoveCursorRight",mode:p.COMMAND_LINE,action:()=>(yn(1),c("Moving cursor right",null))},{intent:"MoveCursorLeftOfWord",mode:p.COMMAND_LINE,action:()=>(vn("left"),c("Moving cursor left of word",null))},{intent:"MoveCursorRightOfWord",mode:p.COMMAND_LINE,action:()=>(vn("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:()=>(H((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:"captureInput",mode:p.COMMAND_LINE,action:(e,{sequence:t})=>(H(n=>n+t),c("Capturing input",null))},{intent:"eraseInput",mode:p.COMMAND_LINE,action:()=>(wr(),c("Erasing input",null))},{intent:"EraseInputWord",mode:p.COMMAND_LINE,action:()=>(Tr(),c("Erasing input word",null))},{intent:"getLastCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Lr(),c("Getting last command from history",null))},{intent:"getNextCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Pr(),c("Getting next command from history",null))}];import Zs from"chalk";var Wt=": for command line",Po="q to exit",Do=`${Zs.hex(v.accent)("m")} to confirm`,On={[R.WORKSPACE]:[Wt],[R.BOARD]:[Wt],[R.BOARD+p.COMMAND_LINE]:[Wt],[R.SWIMLANE]:[Wt],[R.TICKET+p.HELP]:[Po],[R.SWIMLANE+p.HELP]:[Po],[R.TICKET]:[],[R.FIELD]:[],[R.SWIMLANE+p.MOVE]:[Do],[R.TICKET+p.MOVE]:[Do]};var Ht=e=>e.trim().toLocaleLowerCase(),ea=(e,t)=>{let n=C.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},ta=e=>{let{tags:t}=h(),n=C.getFieldByTitle(e,"Tags");return n?W(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},na=e=>{let{contributors:t}=h(),n=C.getFieldByTitle(e,"Assignees");return n?W(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 Ht(e.title??"").includes(n);case"description":return Ht(ea(e.id,"Description")).includes(n);case"tag":return ta(e.id).map(Ht).some(d=>d.includes(n));case"assignee":return na(e.id).map(Ht).some(d=>d.includes(n));default:return!0}};function Bo(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 ko=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 _t,Un=new Set,Oo=()=>{for(let e of Un)e()},oa=e=>(Un.add(e),()=>Un.delete(e));function Uo(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=Bo(t,o,r);if(l(m))return logger.error(m.message),m;let u=m.data,{context:f}=d,y=On[f+n]??On[f]??[],N=[...Ro,...Mo[f]??[],...Lo],S=ko(N);return c("Derived successfully",{...e,currentNode:d,breadCrumb:u,availableHints:y,availableActions:N,actionIndex:S,renderedChildrenIndex:ia(o,i)})}var h=()=>(_t||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),_t);function Vr(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=Uo(t);return l(n)?n:(_t=n.data,Oo(),c("State initialized",null))}function ie(e){let t=h(),n=e(t),r=Uo(n);return l(r)?s(r.message??"Unable to update state"):(_t=r.data,Oo(),c("State updated",null))}var A=e=>ie(t=>({...t,...e}));var $=()=>ra(oa,h,h),ia=(e,t)=>{let n={};for(let r of Object.values(e))Be(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},T=e=>h().renderedChildrenIndex[e]??[];var D={exit(){process.exit(0)},enterChildNode(){let e=h(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=T(t.id)[n];!r||t.context==="FIELD"||D.navigate({currentNode:r,selectedIndex:T(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=h();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=T(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:()=>Wo(1),navigateToPreviousItem:()=>Wo(-1),navigateToNextContainer:()=>Ho(1),navigateToPreviousContainer:()=>Ho(-1),navigate:({currentNode:e=h().currentNode,selectedIndex:t})=>{A({currentNodeId:e.id,selectedIndex:t})}},Wo=e=>{let t=h(),n=T(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}=h();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=T(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=T(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",mt=sa(),Me=null;function aa(){let e=Object.values(h().nodes).find(r=>r.context==="WORKSPACE");if(!e)throw new Error("No workspace found in event log");let[t]=T(e.id),[n]=t?T(t.id):[];if(logger.debug("Boot navigation target:",{workspace:e?.id,firstBoard:t?.id,firstSwimlane:n?.id}),n){let r=h().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:h().nodes[h().rootNodeId],selectedIndex:0}}function da(){let e=aa();D.navigate(e)}function ca(){let e=mt(),t=mt(),n=mt(),r=mt(),o=mt();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:qe,name:"Closed",parent:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:qe}}]}function bt(){return Me!==null}function wo(){if(!Me||Me.length===0)return c("No pending default events to persist",null);let t=Ft(Me).filter(l);return t.length>0?s([et.bold.red("Materializing failed"),"",...t.map((n,r)=>`${et.dim.gray(`${r+1}.`)} ${et.dim(n.message)}`),`
7
+ `)));return}n(c("Git command succeeded",{stdout:o,stderr:i,exitCode:d}))})}),Ze=({args:e,cwd:t})=>new Promise(n=>{if(!Mn.existsSync(t))return n({stdout:"",stderr:`Git cwd does not exist: ${t}`,exitCode:1});let r=io("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})})}),Rn=async(e=process.cwd())=>{let t=await B({args:["rev-parse","--show-toplevel"],cwd:e});return l(t)?s("Not inside a Git repository"):t.data?c("Resolved repo root",t.data.stdout.trim()):s("Git command returned no repo root")},Ps=async e=>{let t=await B({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return s(t.message);if(!t.data)return s("Git command returned no git dir");let n=t.data.stdout.trim(),r=Ue.isAbsolute(n)?n:Ue.join(e,n);return c("Resolved git dir",r)},ct=async e=>{let t=await Ps(e);if(l(t))return s(t.message);if(!t.data)return s("Git dir result missing data");let n=t.data,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD",Ue.join("rebase-merge"),Ue.join("rebase-apply")].filter(i=>Mn.existsSync(Ue.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},so=async e=>{let t=await Ze({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")},Ln=async({repoRoot:e,remote:t})=>{let n=await Ze({args:["remote","get-url",t],cwd:e});return c("Checked remote",n.exitCode===0)},Bt=async({repoRoot:e,remote:t,branch:n})=>{let r=await Ze({args:["ls-remote","--heads",t,n],cwd:e});return r.exitCode!==0?s(r.stderr.trim()||`Unable to inspect remote branch ${t}/${n}`):c("Checked remote branch",r.stdout.trim().length>0)},ao=async({repoRoot:e,branch:t})=>{let n=await Ze({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}`)},Pn=async({repoRoot:e,worktreeRoot:t})=>{let n=await B({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);if(!n.data)return s("Git command returned no worktree data");let r=Ue.resolve(t),o=n.data.stdout.split(`
8
+ `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(i=>Ue.resolve(i)).includes(r);return c("Checked worktree registration",o)},kt=async e=>{let t=await Ze({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e});return c("Checked upstream",t.exitCode===0&&t.stdout.trim().length>0)},Dn=async e=>{let t=await B({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?s(t.message):t.data?c("Resolved current branch",t.data.stdout.trim()):s("Git command returned no branch name")},co=async e=>{let t=await B({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?s(t.message):t.data?c("Resolved short HEAD sha",t.data.stdout.trim()):s("Git command returned no short sha")},Fn=async e=>{if((await Ze({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Repo already initialized",!1);let n=await B({args:["commit","--allow-empty","-m","[epiq:init]"],cwd:e});return l(n)?s(`Failed to create initial commit
9
+ ${n.message}`):n.data?c("Created initial commit",!0):s("Git command returned no commit result data")},Bn=async({cwd:e,remote:t,branch:n})=>{let r=await kt(e);if(l(r))return s(r.message);if(!r.data)return c("No upstream configured, skipped pull",!1);let o=await Bt({repoRoot:e,remote:t,branch:n});if(l(o))return s(o.message);if(!o.data)return c("Remote branch missing, skipped pull",!1);let i=await B({args:["fetch",t,n],cwd:e});if(l(i))return s(`Failed to fetch ${n}
10
+ ${i.message}`);if(!i.data)return s("Git command returned no fetch result data");let a=await B({args:["pull","--rebase"],cwd:e});return l(a)?s(`Failed during pull --rebase
11
+ ${a.message}`):a.data?c("Pulled with rebase",!0):s("Git command returned no pull result data")};var go=pe(),fo="events",O="epiq-state-5",le="origin",xo=e=>re.join(go,fo,e),Bs=e=>Ds("sha1").update(e).digest("hex").slice(0,12),yo=()=>re.join(Fs.homedir(),".epiq"),vo=()=>re.join(yo(),"worktrees"),ho=e=>re.join(vo(),Bs(e)),Co=e=>re.join(e,go),lt=e=>re.join(Co(e),fo),lo=({root:e,fileName:t})=>re.join(lt(e),t),kn=e=>(D.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)),ks=()=>{let e=kn(yo());if(l(e))return s(e.message);let t=kn(vo());return l(t)?s(t.message):c("Ensured epiq storage",void 0)},mo=e=>{let t=Co(e);return D.existsSync(t)?c("Epiq dir already exists",!1):(D.mkdirSync(t,{recursive:!0}),c("Created epiq dir",!0))},uo=e=>{let t=lt(e);return D.existsSync(t)?c("Events dir already exists",!1):(D.mkdirSync(t,{recursive:!0}),c("Created events dir",!0))},Os=e=>{D.existsSync(e)&&D.rmSync(e,{recursive:!0,force:!0})},Us=e=>e.endsWith(".jsonl")?e.includes("/")||e.includes("\\")?s("Own event file must be a file name, not a path"):e==="."||e===".."||e.trim()===""?s("Own event file name is invalid"):c("Validated own event file name",e):s("Own event file must end with .jsonl"),Ws=e=>{let t=lt(e);return D.existsSync(t)?c("Listed event files",D.readdirSync(t,{withFileTypes:!0}).filter(n=>n.isFile()).map(n=>n.name).filter(n=>n.endsWith(".jsonl")).sort()):c("Events dir missing",[])},Hs=({repoRoot:e,worktreeRoot:t,ownEventFileName:n})=>{let r=lo({root:e,fileName:n}),o=lo({root:t,fileName:n});if(!D.existsSync(r))return c("Local own event file missing, nothing to copy",!1);let i=D.readFileSync(r,"utf8"),a=D.existsSync(o)?D.readFileSync(o,"utf8"):"";return i===a?c("Own event file already matches board worktree",!1):(D.mkdirSync(re.dirname(o),{recursive:!0}),D.copyFileSync(r,o),c("Copied own event file into board worktree",!0))},No=({repoRoot:e,worktreeRoot:t,overwriteExisting:n=!0})=>{let r=Ws(t);if(l(r))return s(r.message);let o=lt(t),i=lt(e),a=!1;for(let d of r.data){let m=re.join(o,d),u=re.join(i,d);if(!n&&D.existsSync(u))continue;let f=D.existsSync(m)?D.readFileSync(m,"utf8"):"",y=D.existsSync(u)?D.readFileSync(u,"utf8"):"";f!==y&&(D.mkdirSync(re.dirname(u),{recursive:!0}),D.copyFileSync(m,u),a=!0)}return c("Hydrated event files from board worktree",a)},po=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",_s=async e=>{let t=await Dn(e);if(l(t))return s(t.message);let n=await co(e);return l(n)?s(n.message):c("Built sync commit message",`[epiq:sync:${po(t.data)}:${po(n.data)}]`)},$s=async({repoRoot:e})=>{let t=await ao({repoRoot:e,branch:O});if(l(t))return s(t.message);if(t.data)return c("Local board branch already exists",!1);let n=await Ln({repoRoot:e,remote:le});if(l(n))return s(n.message);if(n.data){let o=await Bt({repoRoot:e,remote:le,branch:O});if(l(o))return s(o.message);if(o.data){let i=await B({args:["fetch",le,O],cwd:e});if(l(i))return s(`Failed to fetch ${O} from remote
12
+ ${i.message}`);let a=await B({args:["branch","--track",O,`${le}/${O}`],cwd:e});return l(a)?s(`Failed to create local ${O} from remote
13
+ ${a.message}`):c("Created local board branch from remote",!0)}}let r=await B({args:["branch",O,"HEAD"],cwd:e});return l(r)?s(`Failed to create local ${O}
14
+ ${r.message}`):c("Created local board branch",!0)},Vs=async({repoRoot:e,worktreeRoot:t})=>{let n=kn(re.dirname(t));if(l(n))return s(n.message);D.existsSync(t)&&!D.existsSync(re.join(t,".git"))&&Os(t);let r=await B({args:["worktree","add",t,O],cwd:e});return l(r)?s(`Failed to create board worktree
15
+ ${r.message}`):c("Created board worktree",!0)},Ks=async({repoRoot:e,worktreeRoot:t})=>{let n=await Pn({repoRoot:e,worktreeRoot:t});if(l(n))return s(n.message);let r=D.existsSync(t);if(n.data&&r)return c("Board worktree already exists",!1);if(n.data&&!r){let o=await B({args:["worktree","prune"],cwd:e});if(l(o))return s(`Failed to prune stale worktrees
16
+ ${o.message}`);let i=await Pn({repoRoot:e,worktreeRoot:t});if(l(i))return s(i.message);if(i.data){let a=await B({args:["worktree","remove","--force",t],cwd:e});if(l(a))return s(`Failed to remove stale worktree registration
17
+ ${a.message}`)}}return Vs({repoRoot:e,worktreeRoot:t})},js=async e=>{let t=await Dn(e);if(l(t))return s(t.message);if(t.data===O)return c("Board branch already checked out",!1);let n=await B({args:["checkout",O],cwd:e});return l(n)?s(`Failed to checkout ${O}
18
+ ${n.message}`):c("Checked out board branch",!0)},zs=async e=>{let t=await kt(e);if(l(t))return s(t.message);if(t.data)return c("Board upstream already configured",!1);let n=await Ln({repoRoot:e,remote:le});if(l(n))return s(n.message);if(!n.data)return c("No remote available for upstream",!1);let r=await Bt({repoRoot:e,remote:le,branch:O});if(l(r))return s(r.message);if(r.data){let i=await B({args:["fetch",le,O],cwd:e});if(l(i))return s(`Failed to fetch ${O}
19
+ ${i.message}`);let a=await B({args:["branch","--set-upstream-to",`${le}/${O}`,O],cwd:e});return l(a)?s(`Failed to set board upstream
20
+ ${a.message}`):c("Configured board upstream",!0)}let o=await B({args:["push","-u",le,O],cwd:e});return l(o)?s(`Failed to publish board branch
21
+ ${o.message}`):c("Published board branch and configured upstream",!0)},qs=async({worktreeRoot:e,ownEventFileName:t})=>{let n=await B({args:["add",xo(t)],cwd:e});return l(n)?s(`Failed to stage board own event file
22
+ ${n.message}`):c("Staged board own event file",void 0)},Gs=async({worktreeRoot:e,ownEventFileName:t})=>{let n=await B({args:["diff","--cached","--quiet","--",xo(t)],cwd:e});return l(n)?n.message.includes("git diff --cached --quiet")?c("Has staged board own event file change",!0):s(n.message):c("No staged board own event file change",!1)},Xs=async({repoRoot:e,worktreeRoot:t,ownEventFileName:n})=>{let r=await Gs({worktreeRoot:t,ownEventFileName:n});if(l(r))return s(r.message);if(!r.data)return c("No board own event file commit needed",null);let o=await _s(e);if(l(o))return s(o.message);let i=await B({args:["commit","-m",o.data],cwd:t});if(l(i))return s(`Failed to commit board own event file
23
+ ${i.message}`);let a=await B({args:["rev-parse","HEAD"],cwd:t});return l(a)?s(a.message):c("Created board sync commit",a.data.stdout.trim())},Ys=async e=>{let t=await kt(e);if(l(t))return s(t.message);if(!t.data)return c("No upstream configured, skipped push",!1);let n=await B({args:["push"],cwd:e});return l(n)?s(`Failed during board push
24
+ ${n.message}`):c("Pushed board",!0)},Eo=async({repoRoot:e,worktreeRoot:t,ensureUpstream:n})=>{let r=!1;for(let o of[ks(),await $s({repoRoot:e}),await Ks({repoRoot:e,worktreeRoot:t}),await js(t),n?await zs(t):c("Skipped upstream bootstrap",!1)]){if(l(o))return s(o.message);r=r||!!o.data}return c(n?"Bootstrapped board storage":"Bootstrapped board storage (readonly)",r)},Io=(e,t)=>{for(let n of[mo(e),mo(t),uo(e),uo(t)])if(l(n))return s(n.message);return c("Ensured board layout",void 0)},bo=async({cwd:e=process.cwd(),ownEventFileName:t})=>{let n=Us(t);if(l(n))return s(n.message);let r=await Rn(e);if(l(r))return s(r.message);let o=r.data,i=ho(o);for(let K of[await ct(o),await so(o)]){if(l(K))return s(K.message);if(K.data)return s(K.message.includes("staged")?"Cannot run :sync while staged changes exist. Please commit or unstage them first.":"Cannot run :sync while a merge, rebase, cherry-pick, or revert is in progress in the current repo")}let a=await Fn(o);if(l(a))return s(a.message);let d=await Eo({repoRoot:o,worktreeRoot:i,ensureUpstream:!0});if(l(d))return s(d.message);let m=await ct(i);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=Io(o,i);if(l(u))return s(u.message);let f=!1,y,N=!1,S=!1,b=!1,I=await Bn({cwd:i,remote:le,branch:O});if(l(I))return s(I.message);N=I.data;let E=Hs({repoRoot:o,worktreeRoot:i,ownEventFileName:n.data});if(l(E))return s(E.message);if(E.data){let K=await qs({worktreeRoot:i,ownEventFileName:n.data});if(l(K))return s(K.message);let Z=await Xs({repoRoot:o,worktreeRoot:i,ownEventFileName:n.data});if(l(Z))return s(Z.message);f=!!Z.data,y=Z.data??void 0}let w=await Ys(i);if(l(w))return s([w.message,f&&y?`Local board sync commit exists: ${y}`:""].filter(Boolean).join(`
25
+ `));S=w.data;let k=No({repoRoot:o,worktreeRoot:i,overwriteExisting:!0});return l(k)?s(k.message):(b=k.data,c("Synced board event logs via git",{repoRoot:o,worktreeRoot:i,createdCommit:f,commitSha:y,pulled:N,pushed:S,hydrated:b,bootstrapped:d.data}))},So=async(e=process.cwd())=>{let t=await Rn(e);if(l(t))return s(t.message);let n=t.data,r=ho(n),o=await ct(n);if(l(o))return s(o.message);if(o.data)return s("Cannot sync while a git operation is in progress in the current repo");let i=await Fn(n);if(l(i))return s(i.message);let a=await Eo({repoRoot:n,worktreeRoot:r,ensureUpstream:!1});if(l(a))return s(a.message);let d=await ct(r);if(l(d))return s(d.message);if(d.data)return s("Cannot sync while a git operation is in progress in the board worktree");let m=Io(n,r);if(l(m))return s(m.message);let u=await Bn({cwd:r,remote:le,branch:O});if(l(u))return s(u.message);let f=No({repoRoot:n,worktreeRoot:r,overwriteExisting:!1});return l(f)?s(f.message):c("Synced from remote",{repoRoot:n,worktreeRoot:r})};var Js=e=>Object.values(h().tags).find(t=>t.name===e),Qs=e=>Object.values(h().contributors).find(t=>t.name===e),Ao=[{systemOnly:!0,intent:M.Move,mode:p.COMMAND_LINE,action:()=>{let e=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n}=ue().commandMeta,{currentNode:r,selectedIndex:o}=h(),i=T(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=T(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 Je({id:_(),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}),Sn(1);if(n==="previous")return A({mode:p.MOVE}),Sn(-1);if(n==="to-next")return A({mode:p.MOVE}),bn(1);if(n==="to-previous")return A({mode:p.MOVE}),bn(-1);if(n==="confirm"){A({mode:p.DEFAULT});let a=Oe();if(!a)return s("No pending move to confirm");let d=J(a);return l(d)?d:(Je(null),c("Moved item",null))}return n==="cancel"?(Je(null),A({mode:p.DEFAULT}),c("Cancelling move",null)):s("Invalid move modifier")}},{intent:M.Delete,mode:p.COMMAND_LINE,action:()=>{let e=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];return o?J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,n=Qe(h().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}=h();if(!T(r.id)[i])return s("No selected field");let d=T(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=Hr(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"?J({id:_(),userId:t,action:"edit.description",payload:{id:d.id,md:f}}):d.title==="Title"?J({id:_(),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}=ue().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>V(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 ie(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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Unable to close issue, no target found");if(!o.parentNodeId)return s("No target parent found");if(!Be(o))return s("Cannot close in this context");let i=J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Unable to reopen issue, no target found");let i=o.context==="TICKET"?c("Resolved ticket",o):Ve(o.id,"TICKET");if(l(i))return s("Cannot reopen in this context");let a=i.data,d=J({id:_(),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}=de(),r=wt()?.trim();if(!r)return s("No username provided");let o=r??n,i=e??_();if(!o||!i)return s("Unable to resolve user name or id");let a=Tn({userName:o,userId:i,preferredEditor:t??""});return l(a)?a:(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=wo();if(l(e))return e;let{rootNodeId:t,nodes:n}=h();return F.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=Tn({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=Y();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}=h(),d=m=>{let u=J(m);if(l(u))return u;let f=C.getNode(u.data.result.id);if(!f)return s("Created node not found");if(!f.parentNodeId)return u;let y=C.getNode(f.parentNodeId);return y?(F.navigate({currentNode:y,selectedIndex:C.getSiblings(f.parentNodeId).findIndex(({id:N})=>N===f.id)}),u):s("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:m}=h(),u=C.getNode(m);return u?d({id:_(),userId:r,action:"add.board",payload:{id:_(),name:t.inputString,parent:u.id}}):s("Workspace not found")}if(t.modifier==="swimlane"){let m=Qe(o,"BOARD");return l(m)?s("Unable to add swimlane in this context"):d({id:_(),userId:r,action:"add.swimlane",payload:{id:_(),name:t.inputString,parent:m.data.id}})}if(t.modifier==="issue"){let m=T(i.id)[a],u=i.context==="SWIMLANE"?i:i.context==="BOARD"&&m?.context==="SWIMLANE"?m:(()=>{let b=Qe(o,"SWIMLANE");return l(b)?null:b.data})();if(!u)return s("Unable to add issue in this context");let f=_r({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?(F.navigate({currentNode:u,selectedIndex:C.getSiblings(u.id).findIndex(({id:b})=>b===S)}),c("Issue created",null)):s("Unable to determine ticket id")}return sr()},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetView,mode:p.COMMAND_LINE,action:()=>{let{commandMeta:e}=ue();return e.validity===ye.Invalid?s("Invalid command "+ve):(ie(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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{currentNode:n,selectedIndex:r}=h(),o=T(n.id)[r];if(!o)return s("Missing node");if(o.readonly)return s("Cannot rename readonly node");let i=wt();return i?J({id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=ue().commandMeta,o=(n||r).trim();if(!o)return s("Provide a tag");let{selectedIndex:i,currentNode:a}=h(),d=T(a.id)[i];if(!d)return s("Invalid tag target");let m=Ve(d.id,"TICKET");if(l(m))return s("Unable to tag issue in this context");let u=m.data,f=Js(o),y;if(f)y=f.id;else{let b=_(),I=J({id:_(),userId:t,action:"create.tag",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=C.getFieldByTitle(u.id,"Tags");return N?T(N.id).some(b=>b.props?.value===y)?s("Already tagged with that tag"):J({id:_(),userId:t,action:"tag.issue",payload:{id:_(),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=Y();if(l(e))return s("Unable to resolve user ID");let t=e.data,{modifier:n,inputString:r}=ue().commandMeta,o=(n||r).trim();if(!o)return s("Provide an assignee");let{selectedIndex:i,currentNode:a}=h(),d=T(a.id)[i];if(!d)return s("Invalid assign target");let m=Ve(d.id,"TICKET");if(l(m))return s("Unable to assign issue in this context");let u=m.data,f=Qs(o),y;if(f)y=f.id;else{let b=_(),I=J({id:_(),userId:t,action:"create.contributor",payload:{id:b,name:o}});if(l(I))return I;y=I.data.result.id}let N=C.getFieldByTitle(u.id,"Assignees");return N?T(N.id).some(b=>b.props?.value===y)?s("Assignee already assigned"):J({id:_(),userId:t,action:"assign.issue",payload:{id:_(),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()=>{H(()=>""),A({syncStatus:{msg:"Syncing",status:"syncing"}});let{userId:e,userName:t}=de();if(!e)return s("Unable to resolve userId");if(!t)return s("Unable to resolve userName");let n=In();if(l(n))return s("Unable to resolve log file name");let r=await bo({ownEventFileName:n.data});return l(r)?(A({syncStatus:{msg:r.message,status:"outOfSync"}}),s(`Unable to sync state. ${r.message}`)):(A({syncStatus:{msg:"Synced",status:"synced"},mode:p.DEFAULT}),c("Synced",!0))}}];var oe=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=ue();if(!t)return s("No command to confirm");if(!e&&n===ye.Invalid)return s("Invalid command");let i=Br(t);Mr();let a=Ao.filter(m=>e||m.systemOnly!==!0).find(m=>m.intent===i);if(!a)return At({result:ve.Fail,message:"Command not found",data:null});let d=await a.action(a,{command:t,inputString:o,modifier:r});return l(d)?At(d):(Rr({addToHistory:!e}),a.onSuccess?.(),At(d))};var Ot=[{intent:"exit",mode:p.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move cancel"),oe({isForceExecutedBySystem:!0}))},{intent:"initMove",mode:p.DEFAULT,description:"[m] move init/confirm",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move start"),oe({isForceExecutedBySystem:!0}))},{intent:"confirmMove",mode:p.MOVE,action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"move confirm"),oe({isForceExecutedBySystem:!0}))}],Ut=[{intent:"movePreviousItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move previous"),oe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveNextItem",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move next"),oe({isForceExecutedBySystem:!0})):s("No pending move")}],To=[{intent:"moveToNextContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move to-next"),oe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:"moveToPreviousContainer",mode:p.MOVE,action:()=>Oe()?(A({mode:p.COMMAND_LINE}),H(()=>"move to-previous"),oe({isForceExecutedBySystem:!0})):s("No pending move")}];var Mo={[R.WORKSPACE]:[...Ot,...Ut],[R.BOARD]:[...Ot,...Ut],[R.SWIMLANE]:[...Ot,...Ut,...To],[R.TICKET]:[],[R.FIELD]:[],[R.FIELD_LIST]:[],[R.TEXT]:[]};var Ro=[{intent:"addItem",mode:p.DEFAULT,description:"[n] new...",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>`${g.NEW} `),c("Adding new item",null))},{intent:"Delete",mode:p.DEFAULT,description:"[d] delete",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>`${g.DELETE} `),c("Deleting item",null))},{intent:"initCommandLine",mode:p.DEFAULT,description:"[:] focus command line",action:()=>(A({mode:p.COMMAND_LINE}),H(()=>""),c("Entering command line mode",null))},{intent:"confirm",mode:p.DEFAULT,description:"[<Enter>] confirm/enter",action:()=>(F.enterChildNode(),c("Entering context",null))},{intent:"exit",mode:p.DEFAULT,description:"[q] exit context",action:()=>(logger.debug("Executing exit action"),F.enterParentNode(),c("Exiting context",null))},{intent:"navPreviousItem",mode:p.DEFAULT,description:"[arrows/hjkl] navigate",action:()=>(F.navigateToPreviousItem(),c("Navigating to previous item",null))},{intent:"navNextItem",mode:p.DEFAULT,action:()=>(F.navigateToNextItem(),c("Navigating to next item",null))},{intent:"navToPreviousContainer",mode:p.DEFAULT,action:()=>(F.navigateToPreviousContainer(),c("Navigating to previous container",null))},{intent:"navToNextContainer",mode:p.DEFAULT,action:()=>(F.navigateToNextContainer(),c("Navigating to next container",null))},{intent:"edit",mode:p.DEFAULT,action:()=>(A({mode:p.COMMAND_LINE}),H(()=>"edit"),oe(),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}),H(()=>"sync"),oe({isForceExecutedBySystem:!0}),c("Synced",!0))}];var Lo=[{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:()=>(oe(),c("Executing command",null))},{intent:"MoveCursorLeft",mode:p.COMMAND_LINE,action:()=>(yn(-1),c("Moving cursor left",null))},{intent:"MoveCursorRight",mode:p.COMMAND_LINE,action:()=>(yn(1),c("Moving cursor right",null))},{intent:"MoveCursorLeftOfWord",mode:p.COMMAND_LINE,action:()=>(vn("left"),c("Moving cursor left of word",null))},{intent:"MoveCursorRightOfWord",mode:p.COMMAND_LINE,action:()=>(vn("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:()=>(H((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:"captureInput",mode:p.COMMAND_LINE,action:(e,{sequence:t})=>(H(n=>n+t),c("Capturing input",null))},{intent:"eraseInput",mode:p.COMMAND_LINE,action:()=>(wr(),c("Erasing input",null))},{intent:"EraseInputWord",mode:p.COMMAND_LINE,action:()=>(Tr(),c("Erasing input word",null))},{intent:"getLastCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Lr(),c("Getting last command from history",null))},{intent:"getNextCommandFromHistory",mode:p.COMMAND_LINE,action:()=>(Pr(),c("Getting next command from history",null))}];import Zs from"chalk";var Wt=": for command line",Po="q to exit",Do=`${Zs.hex(v.accent)("m")} to confirm`,On={[R.WORKSPACE]:[Wt],[R.BOARD]:[Wt],[R.BOARD+p.COMMAND_LINE]:[Wt],[R.SWIMLANE]:[Wt],[R.TICKET+p.HELP]:[Po],[R.SWIMLANE+p.HELP]:[Po],[R.TICKET]:[],[R.FIELD]:[],[R.SWIMLANE+p.MOVE]:[Do],[R.TICKET+p.MOVE]:[Do]};var Ht=e=>e.trim().toLocaleLowerCase(),ea=(e,t)=>{let n=C.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},ta=e=>{let{tags:t}=h(),n=C.getFieldByTitle(e,"Tags");return n?W(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},na=e=>{let{contributors:t}=h(),n=C.getFieldByTitle(e,"Assignees");return n?W(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 Ht(e.title??"").includes(n);case"description":return Ht(ea(e.id,"Description")).includes(n);case"tag":return ta(e.id).map(Ht).some(d=>d.includes(n));case"assignee":return na(e.id).map(Ht).some(d=>d.includes(n));default:return!0}};function Bo(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 ko=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 _t,Un=new Set,Oo=()=>{for(let e of Un)e()},oa=e=>(Un.add(e),()=>Un.delete(e));function Uo(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=Bo(t,o,r);if(l(m))return logger.error(m.message),m;let u=m.data,{context:f}=d,y=On[f+n]??On[f]??[],N=[...Ro,...Mo[f]??[],...Lo],S=ko(N);return c("Derived successfully",{...e,currentNode:d,breadCrumb:u,availableHints:y,availableActions:N,actionIndex:S,renderedChildrenIndex:ia(o,i)})}var h=()=>(_t||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),_t);function Vr(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=Uo(t);return l(n)?n:(_t=n.data,Oo(),c("State initialized",null))}function ie(e){let t=h(),n=e(t),r=Uo(n);return l(r)?s(r.message??"Unable to update state"):(_t=r.data,Oo(),c("State updated",null))}var A=e=>ie(t=>({...t,...e}));var $=()=>ra(oa,h,h),ia=(e,t)=>{let n={};for(let r of Object.values(e))Be(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},T=e=>h().renderedChildrenIndex[e]??[];var F={exit(){process.exit(0)},enterChildNode(){let e=h(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=T(t.id)[n];!r||t.context==="FIELD"||F.navigate({currentNode:r,selectedIndex:T(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=h();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=T(n.id),o=r.findIndex(({id:a})=>a===e.id),i=r.length===0?-1:o>=0?o:0;F.navigate({currentNode:n,selectedIndex:i})},navigateToNextItem:()=>Wo(1),navigateToPreviousItem:()=>Wo(-1),navigateToNextContainer:()=>Ho(1),navigateToPreviousContainer:()=>Ho(-1),navigate:({currentNode:e=h().currentNode,selectedIndex:t})=>{A({currentNodeId:e.id,selectedIndex:t})}},Wo=e=>{let t=h(),n=T(t.currentNode.id).length;if(n===0)return;let o=(Math.max(0,t.selectedIndex)+e+n)%n;F.navigate({selectedIndex:o})},Ho=e=>{let{currentNode:t,nodes:n,selectedIndex:r}=h();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=T(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=T(d.id),u=Math.max(0,m.length-1),f=Math.min(Math.max(0,r),u),y=m.length?f:-1;F.navigate({currentNode:d,selectedIndex:y})};var Ee="system.actor",mt=sa(),Me=null;function aa(){let e=Object.values(h().nodes).find(r=>r.context==="WORKSPACE");if(!e)throw new Error("No workspace found in event log");let[t]=T(e.id),[n]=t?T(t.id):[];if(logger.debug("Boot navigation target:",{workspace:e?.id,firstBoard:t?.id,firstSwimlane:n?.id}),n){let r=h().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:h().nodes[h().rootNodeId],selectedIndex:0}}function da(){let e=aa();F.navigate(e)}function ca(){let e=mt(),t=mt(),n=mt(),r=mt(),o=mt();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:qe,name:"Closed",parent:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:Lt}},{id:Ne(),userId:Ee,action:"lock.node",payload:{id:qe}}]}function bt(){return Me!==null}function wo(){if(!Me||Me.length===0)return c("No pending default events to persist",null);let t=Ft(Me).filter(l);return t.length>0?s([et.bold.red("Materializing failed"),"",...t.map((n,r)=>`${et.dim.gray(`${r+1}.`)} ${et.dim(n.message)}`),`
26
26
  `].join(`
27
27
  `)):(Me=null,c("Persisted pending default events",null))}function _o(e){let t;e.some(r=>r.action==="init.workspace")?(Me=null,t=Cn(e)):(Me=ca(),t=Cn([...Me]));let n=t.filter(l);return n.length>0?s([et.bold.red("Materializing failed"),"",...n.map((r,o)=>`${et.dim.gray(`${o+1}.`)} ${et.dim(r.message)}`),`
28
28
  `].join(`
29
29
  `)):(da(),c("State booted successfully",null))}import{Box as wa}from"ink";import _n from"react";import pt from"chalk";import{Box as Wn,Text as $o}from"ink";import ut,{useEffect as la,useMemo as ma,useState as ua}from"react";var Vo=pt.gray,pa=pt.inverse,ga=pt.inverse.gray,fa={hint:"",hints:[],overlap:0,remainder:""},jo=({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}},xa=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let n=se(t);return{bg:r=>pt.bgHex(n).black(r),bgCursor:r=>pt.bgHex(n).inverse.black(r)}}return mn(t)},ya=({value:e,command:t,modifier:n})=>{if(!t||!n)return null;let r=jo({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}},Ko=()=>({value:z.value,cursorPosition:z.cursorPosition,commandIsPending:z.commandIsPending,autoCompletion:z.commandMeta.autoCompletion??fa,infoMessage:z.commandMeta.infoMessage,validationStatus:z.commandMeta.validity,command:z.commandMeta.command,inputString:z.commandMeta.inputString,modifier:z.commandMeta.modifier}),va=(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,zo=({width:e})=>{let[t,n]=ua(Ko());la(()=>{let y=()=>{let S=Ko();n(b=>va(b,S)?b:S)},N=Ar(y);return y(),()=>{N()}},[]);let{value:r,cursorPosition:o,infoMessage:i,commandIsPending:a,autoCompletion:d,command:m,modifier:u}=t,f=ma(()=>{let y=Math.max(0,Math.min(o,r.length)),N=jo({value:r,command:m}),S=ya({value:r,command:m,modifier:u}),b=m?mn(m):null,I=xa({command:m,modifier:u}),E=(ee,te)=>{let rn=N&&te>=N.start&&te<N.end,on=S&&te>=S.start&&te<S.end;return rn&&b?b.fg(ee):on&&I?I.bg(ee):ee},w=(ee,te)=>{let rn=N&&te>=N.start&&te<N.end,on=S&&te>=S.start&&te<S.end;return rn&&b?b.fgCursor(ee):on&&I?I.bgCursor(ee):pa(ee)},k=r.slice(0,y),K=r[y]??" ",Z=y<r.length?r.slice(y+1):"",Ti=Array.from(k).map((ee,te)=>E(ee,te)).join(""),rr=w(K,y),or=Array.from(Z).map((ee,te)=>E(ee,y+1+te)).join("");if(d.hint){let ee=d.hint[d.overlap]??K;rr=ga(ee),or=Vo(d.remainder.slice(1)+Z)}return Vo(":")+Ti+rr+or},[r,o,d,m,u]);return ut.createElement(Wn,{flexDirection:"column",justifyContent:"flex-start"},ut.createElement(Wn,{flexDirection:"column",paddingX:1,borderColor:v.secondary,borderStyle:"round",width:e},ut.createElement(Wn,null,ut.createElement($o,null,f),i&&ut.createElement($o,{wrap:"truncate",color:a?v.red:v.secondary2},` ${i} `))))};import qo from"chalk";import{Box as ha,Text as Hn}from"ink";import $t,{useEffect as Ca,useState as Na}from"react";var Ea=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],Go=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)}},Ia=({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)}`},ba=(e,t,n)=>{let r=Go(e),o=Go(t);return Ia({r:r.r+(o.r-r.r)*n,g:r.g+(o.g-r.g)*n,b:r.b+(o.b-r.b)*n})},Sa=(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 ba(i,a,o)},Aa=(e,t)=>e.length===t?e:e.length>t?e.slice(0,t):e.padEnd(t," "),Xo=({width:e,availableHints:t})=>{let{syncStatus:{status:n,msg:r}}=$(),[o,i]=Na(0);Ca(()=>{if(n!=="syncing"){i(0);return}let E=setInterval(()=>{i(w=>w+1)},50);return()=>clearInterval(E)},[n]);let a=[],d=0;for(let E of t){let k=(a.length>0?" | ":"").length+E.length;if(d+k>e-4)break;a.push(E),d+=k}let m=n!="synced"?r??a.join(" | "):a.join(" | "),u=Math.max(0,e-2),f=n==="syncing"?Sa(Ea,(Math.sin(o*.12)+1)/2):v.secondary,y=qo.hex(f??"fff"),N=qo.hex(v.secondary2),S=y(`\u256D${"\u2500".repeat(u)}\u256E`),b=y(`\u2570${"\u2500".repeat(u)}\u256F`),I=`${y("\u2502")}${N(Aa(` ${m} `,u))}${y("\u2502")}`;return $t.createElement(ha,{flexDirection:"column",width:e},$t.createElement(Hn,null,S),$t.createElement(Hn,null,I),$t.createElement(Hn,null,b))};var Vt=({width:e,mode:t,availableHints:n})=>{let r=$(),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 _n.createElement(wa,null,t===p.COMMAND_LINE&&r.syncStatus.status!=="syncing"?_n.createElement(zo,{width:e}):_n.createElement(Xo,{width:e,mode:t,availableHints:n}))};import{Box as tt,Text as Yo}from"ink";import Re from"react";var Jo=({width:e})=>{let t=[...h().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(tt,{flexDirection:"column",marginTop:3,borderColor:v.secondary,borderStyle:"round",width:e,minHeight:19},Re.createElement(tt,{flexDirection:"column",width:e},h().mode===p.HELP?t.map(([n,r],o)=>Re.createElement(tt,{paddingLeft:1,key:o,flexDirection:"row"},Re.createElement(tt,{key:o,flexDirection:"row",paddingBottom:o?0:1},Re.createElement(tt,{width:20,justifyContent:"flex-end"},Re.createElement(Yo,{color:o?v.accent:v.secondary},n)),Re.createElement(tt,{flexGrow:1,width:40,paddingLeft:2},Re.createElement(Yo,{color:o?v.primary:v.secondary},r))))):null))};import ti from"chalk";import{Box as Vn,Text as ri}from"ink";import Ie from"react";import{Box as $n,Text as Fa}from"ink";import ot from"react";import{Text as Ta}from"ink";import Ma from"react";var Ra=e=>e.toLowerCase().trim(),La=(e,t=Ke)=>{let n=Ra(e);return t[n]?t[n]:at(n)},nt=({id:e,isSelected:t})=>{let n=C.getContributor(e);if(n)return Ma.createElement(Ta,{underline:t,color:La(n.name)},"@"+n.name)};import{Text as Pa}from"ink";import Da from"react";var rt=({id:e,isSelected:t})=>{let n=C.getTag(e);if(n)return Da.createElement(Pa,{underline:t,backgroundColor:se(n.name),color:v.primary}," "+n.name+" ")};var Ba=(e,t)=>e.length<=t?e:t<=1?"\u2026":e.slice(0,t-1)+"\u2026",Qo=({width:e})=>{let{breadCrumb:t,currentNode:n,selectedIndex:r,viewMode:o}=h(),i=W(n.id)[r],a=Ve(i?.id??n.id,"TICKET"),d=_e(a)?a.data:void 0,m=d?.id?W(d.id):[],u=I=>{let E=m.find(w=>w.title===I);return E?W(E.id).map(w=>typeof w.props?.value=="string"?w.props.value:"").filter(w=>!!w):[]},f=u("Tags"),y=u("Assignees"),N=d?.parentNodeId?!dn(n.id,d?.parentNodeId)&&o==="dense":!1,S=t.map((I,E)=>{let w=E===t.length-1,k=W(I.id),K=w?k?.[r]?.title:void 0;return`${E?" / ":""}${I.title??""}${K?` \u25B8 ${K}`:""}`}).join(""),b=Ba(S,e);return ot.createElement($n,null,ot.createElement(Fa,{color:v.secondary2},b),N?f.map(I=>ot.createElement($n,{key:I,paddingLeft:2},ot.createElement(rt,{id:I}))):null,N?y.map(I=>ot.createElement($n,{key:I,paddingLeft:2},ot.createElement(nt,{id:I}))):null)};import{Box as ka,Text as Zo}from"ink";import Kt from"react";var Oa=({filters:e})=>Kt.createElement(ka,{columnGap:1},Kt.createElement(Zo,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:n,operator:r})=>Kt.createElement(Zo,{backgroundColor:"black",color:"white"},` ${n}${r}"${t}" `))),ei=Kt.memo(Oa);function jt({filters:e,hideBreadCrumb:t=!1}){let{userName:n,preferredEditor:r}=de(),o=40,i=process.stdout.columns-o-8;return Ie.createElement(Vn,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},t?Ie.createElement(ri,null," "):Ie.createElement(Vn,{paddingLeft:1},e.length>0?Ie.createElement(ei,{filters:e}):Ie.createElement(Qo,{width:i})),Ie.createElement(Vn,{columnGap:1,paddingRight:2,"max-width":o,overflow:"hidden",justifyContent:"flex-end"},Ie.createElement(ni,{icon:"@",value:n}),Ie.createElement(ni,{icon:"\u276F",value:r})))}function ni({icon:e,value:t}){return Ie.createElement(ri,null,ti.dim(e)+ti.hex(v.accent)(` ${t??"-"} `))}import{Box as sd,Text as ad}from"ink";import ft from"react";import{Box as zt,Text as Kn}from"ink";import Le from"react";import{Text as oi}from"ink";import ii,{useEffect as Ua,useState as Wa}from"react";var si={help:["\u25B8 ","\u25B8 ","\u25B8 "],default:["\u25B8 ","\u25B8 ","\u25B8 "],move:["\u2191 ","\u2192 ","\u2193 ","\u2190 "],"command-line":["\u276F ","\u276F ","\u276F "]},Q=({isSelected:e,placeholder:t=" "})=>{let{mode:n}=$(),r=si[n]??si.default,[o,i]=Wa(r.length-1);return Ua(()=>{if(!e)return;let a=setInterval(()=>{i(d=>(d+1)%r.length)},800);return()=>clearInterval(a)},[e,r]),e?ii.createElement(oi,{color:v.accent,dimColor:o===1},r[o]):ii.createElement(oi,null,t)};function jn(){let e=$(),t=e.nodes[e.rootNodeId],o=process.stdout.rows-1-3,i=process.stdout.columns||120,a=t?.id?T(t?.id):[];return Le.createElement(zt,{flexDirection:"column",height:o,padding:1,borderStyle:"round",borderColor:v.secondary,width:i},Le.createElement(zt,{padding:1,paddingTop:0,paddingBottom:0},Le.createElement(Kn,null,"Select a board:")),Le.createElement(zt,{padding:1,flexDirection:"column"},a.map((d,m)=>{let u=e.currentNode.context==="WORKSPACE"&&e.selectedIndex===m,y=T(d.id).flatMap(({id:N})=>W(N)).length;return Le.createElement(zt,{key:d.id??m},Le.createElement(Kn,{color:u?v.accent:v.secondary},Le.createElement(Q,{isSelected:u})),Le.createElement(Kn,{color:u?v.accent:v.secondary},d.title," (",y," issues)",d.readonly?" \u{1F512}":""))})))}import{Box as od}from"ink";import Qt from"react";import{Box as Gn,Text as Ka}from"ink";import ge from"react";import{Box as zn,Text as Ha}from"ink";import qt from"react";var Gt=({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),w=Math.max(1,e.length-d),k=S?Math.floor(f/w*E):0;return qt.createElement(zn,{flexDirection:"row",height:i,width:"100%"},qt.createElement(zn,{flexDirection:"column",flexGrow:1,height:i},N),qt.createElement(zn,{flexDirection:"column",width:1,height:b},Array.from({length:b}).map((K,Z)=>qt.createElement(Ha,{key:Z,color:S&&Z>=k&&Z<k+I?v.accent:v.secondary},S?"\u2502":" "))))};import{Box as Xt,Text as _a}from"ink";import We from"react";var ai=({width:e,ticket:t,isSelected:n})=>{let r=e-14,o=ht(ar(t.title),r),i=T(t.id),a=u=>{let f=i.find(y=>y.title===u);return f?T(f.id).map(y=>typeof y.props?.value=="string"?y.props.value:"").filter(y=>!!y):[]},d=a("Tags").map(u=>C.getTag(u)).filter(u=>!!u),m=a("Assignees").map(u=>C.getContributor(u)).filter(u=>!!u);return We.createElement(Xt,{borderStyle:"round",width:e-7,height:4,flexDirection:"column",borderColor:n?v.accent:v.secondary,justifyContent:"space-between"},We.createElement(Xt,{borderBottom:!0},We.createElement(Xt,{paddingLeft:1,flexDirection:"column"},We.createElement(_a,{color:v.primary},o))),We.createElement(Xt,{flexDirection:"row",paddingLeft:1},d.map(u=>We.createElement(rt,{key:u.id,id:u.id})),m.map(u=>We.createElement(nt,{key:u.id,id:u.id}))))};import $a from"chalk";import{Box as gt,Text as qn}from"ink";import be from"react";var Va=(e,t)=>e.length>=t?e.slice(0,t)+"...":e,di=({width:e,ticket:t,isSelected:n,index:r,mode:o})=>{let i=T(t.id),a=I=>{let E=i.find(w=>w.title===I);return E?T(E.id).map(w=>typeof w.props?.value=="string"?w.props.value:"").filter(w=>!!w):[]},d=a("Tags").map(I=>C.getTag(I)).filter(I=>!!I),m=a("Assignees").map(I=>C.getContributor(I)).filter(I=>!!I),u=1,f=d.length*(1+u),y=m.length*(2+u),N=d.map(I=>be.createElement(gt,{key:I.id,paddingRight:u},be.createElement(qn,{color:se(I.name)},"\u25A0"))),S=m.map(I=>be.createElement(gt,{key:I.id,paddingRight:u},be.createElement(qn,{color:at(I.name)},"@"+I.name.at(0)))),b=n?v.accent:o===p.MOVE?v.secondary:v.primary;return be.createElement(gt,{borderBottom:!0,justifyContent:"space-between"},be.createElement(gt,null,be.createElement(Q,{isSelected:n,placeholder:$a.dim.gray(r+1+" ")}),be.createElement(qn,{wrap:"truncate",color:b},Va(t.title,e-f-y-14))),be.createElement(gt,null,N,S))};var ja=({swimlane:e,isSelected:t,width:n,height:r,isDense:o,isFocused:i,listSelectedIndex:a,mode:d})=>{let{renderedChildrenIndex:m}=$(),u=m[e.id]??[],f=`${e.title} (${u.length})`,y=3,N=o?1:4,S=r-y-(o?2:1),b=ge.createElement(Gn,{borderStyle:"round",borderColor:v.secondary,justifyContent:"flex-start",borderLeft:!1,borderTop:!1,borderRight:!1},ge.createElement(Q,{isSelected:t}),ge.createElement(Ka,{bold:!0,color:t?v.accent:v.primary},f," ",e.readonly?"\u{1F512}":"")),I=(E,w)=>{let k=i&&a===w;return o?ge.createElement(di,{key:E.id,index:w,width:n,ticket:E,isSelected:k,mode:d}):ge.createElement(ai,{key:E.id,width:n,ticket:E,isSelected:k})};return ge.createElement(Gn,{flexDirection:"column",width:n,borderStyle:"round",borderColor:t?v.accent:v.secondary,paddingRight:1,paddingLeft:1,height:r},b,ge.createElement(Gn,{padding:o?1:0},u.length>0&&ge.createElement(Gt,{selectedIndex:a,height:S,itemHeight:N},u.map(I)),ge.createElement(Q,{isSelected:i&&a===-1})))},ci=ge.memo(ja);import{Box as Jn,Text as nd}from"ink";import Pe,{useEffect as Qn,useMemo as gi}from"react";import Se from"chalk";import mi from"string-width";import{decodeTime as za}from"ulid";var li=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 qa=(e,t)=>e+" ".repeat(Math.max(0,t-mi(e))),Ga=(e,t)=>" ".repeat(Math.max(0,t-mi(e)))+e,Xa=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)})(),Ya=e=>{switch(e.action){case"move.node":{let t=C.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=h().tags[e.payload.tagId];return t?Se.bgHex(se(t.name))(` ${t.name} `):"unknown tag"}case"assign.issue":{let t=h().contributors[e.payload.contributor];return t?Se.hex(se(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""}},Ja=e=>{let t=li(za(e));return Se.gray(Ga(t,8))},Qa=12,Za=e=>{let t=e.split(".")[1]??"unknown";return qa(`${t}`,Qa)},ui=e=>{let t=Ja(e.id),n=Za(e.userId),r=Xa(e.action),o=Ya(e),i=Se.dim("\u203A"),a=[r,o].filter(Boolean).join(" ");return`${n} ${t} ${i} ${a}`};import{Box as Yt,Text as ed}from"ink";import Ae from"react";var pi=({selectedIndex:e,parent:t,selected:n})=>{let{currentNode:r}=$(),{title:o}=t,i=T(t.id).map(a=>{let d=typeof a.props?.value=="string"?a.props.value:"";if(o==="Assignees")return C.getContributor(d)?.id;if(o==="Tags")return C.getTag(d)?.id}).filter(a=>!!a);return Ae.createElement(Yt,{alignItems:"center",paddingTop:1},Ae.createElement(Yt,{minWidth:12},Ae.createElement(Q,{isSelected:n}),Ae.createElement(ed,{color:n?v.accent:v.secondary2},o,":")),Ae.createElement(Yt,{flexDirection:"row",marginLeft:1,paddingRight:1},i.map((a,d)=>{let m=r.id===t.id&&d===e;return Ae.createElement(Yt,{key:`${o}-${a}`,paddingRight:2,minHeight:1},Ae.createElement(Q,{isSelected:m}),o==="Assignees"?Ae.createElement(nt,{isSelected:m,id:a}):o==="Tags"?Ae.createElement(rt,{isSelected:m,id:a}):null)})))};import{Box as Jt,Text as Xn}from"ink";import we,{useEffect as td}from"react";var Yn=({id:e,label:t,text:n,height:r,selected:o,maxWidth:i})=>{let{selectedIndex:a,currentNode:d}=$(),m=N=>String(N).replace(/\r?\n/g,""),u=typeof n=="string"?n.split(/\r?\n|\u2028|\u2029/):[];td(()=>{let N=[];return u.forEach((S,b)=>{let I=G.text({id:`${b}`,name:`Line ${b+1}`,parentNodeId:e,props:{value:S},readonly:!0}),E=C.createNodeAtPosition(I);_e(E)&&N.push(E.data.id)}),()=>N.forEach(C.deleteNode)},[e,n]);let f="\u2029",y=u.map((N,S)=>{let b=d.id===e&&a===S;return we.createElement(Jt,{key:`${e}-${S}`},we.createElement(Xn,{color:b?v.primary:v.secondary2,dimColor:!b},`${S+1} `.padStart(5,"\xA0")),we.createElement(Xn,{backgroundColor:b?"gray":""},m(N.length?ht(N,i-10):f)))});return we.createElement(Jt,{flexDirection:"column",paddingTop:1},we.createElement(Jt,null,we.createElement(Q,{isSelected:o}),we.createElement(Xn,{color:o?v.accent:v.secondary2},t)),we.createElement(Jt,{flexDirection:"row",borderStyle:"round",borderColor:v.secondary,paddingLeft:1,paddingRight:1,marginLeft:1},we.createElement(Gt,{scrollByOne:!0,children:y,height:r-2,selectedIndex:a,itemHeight:1})))};var rd=e=>`${e}::log`,fi=({ticket:e,height:t})=>{let{selectedIndex:n,currentNode:r}=$(),o=process.stdout.columns||120,i=gi(()=>rd(e.id),[e.id]),a=gi(()=>[...e.log].reverse().map(ui).join(`
30
- `),[e.log]);Qn(()=>{if(C.getNode(i))return;let w={...G.field(i,"Log",e.id,{value:a}),readonly:!0,childRenderAxis:"vertical"};return C.createNodeAtPosition(w),()=>{C.deleteNode(i)}},[i,e.id]),Qn(()=>{let E=C.getNode(i);E&&E.props.value!==a&&C.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;Qn(()=>{m&&(n>=0||D.navigate({selectedIndex:0}))},[m,n]);let u=T(e.id);if(m){let E=C.getNode(i),k=t-3;return Pe.createElement(Jn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},E?Pe.createElement(Yn,{id:E.id,label:"Event log",text:E.props.value??"",selected:!1,maxWidth:o,height:k}):null)}let f=u.reduce((E,w)=>w.title==="Assignees"||w.title==="Tags"||w.id===i?++E:E,0),y=2,N=f*1,b=t-3-N-y,I=(E,w)=>E.title==="Assignees"||E.title==="Tags"?Pe.createElement(pi,{key:E.id,parent:E,selected:w,selectedIndex:n}):E.id===i?Pe.createElement(Jn,{key:E.id,paddingTop:1},Pe.createElement(Q,{isSelected:w}),Pe.createElement(nd,{backgroundColor:v.secondary,color:w?v.accent:v.primary}," History \u203A\u203A ")):Pe.createElement(Yn,{label:"Description (press e to edit)",key:E.id,id:E.id,text:E.props.value??"",selected:w,maxWidth:o,height:b});return Pe.createElement(Jn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},u.map((E,w)=>I(E,d&&n===w)))};var id=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:a,width:d})=>{let m=t.context,u=m===R.TICKET||m===R.FIELD_LIST||m===R.FIELD,f=m===R.BOARD||m===R.SWIMLANE,y=m===R.TICKET?t:r.find(E=>E.context===R.TICKET),N=Math.floor(d/3),S=Math.floor(d/Math.max(e.length,1)),b=Math.min(S,N),I=i==="dense";return Qt.createElement(od,{flexDirection:"row",height:a},f&&e.map((E,w)=>{let k=t.id===E.id,K=k?n:-1,Z=t.context===R.BOARD&&n===w;return Qt.createElement(ci,{key:E.id,height:a,width:b,swimlane:E,isSelected:Z,isDense:I,isFocused:k,listSelectedIndex:K,mode:o})}),u&&y&&Qt.createElement(fi,{height:a,ticket:y}))},xi=Qt.memo(id);var dd=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:a})=>{let{renderedChildrenIndex:d}=$(),m=n.find(({context:N})=>N==="BOARD"),y=i-1-3;return ft.createElement(sd,{flexDirection:"row"},e.context==="WORKSPACE"?ft.createElement(jn,null):m?ft.createElement(xi,{height:y,width:a,swimlanes:(d[m.id]??[]).filter(N=>N!==void 0&&ir(N)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):ft.createElement(ad,null))},yi=ft.memo(dd);import{Box as xt,Text as fe}from"ink";import U from"react";var Zt=({isDone:e,command:t,value:n})=>U.createElement(xt,null,U.createElement(fe,{color:v.accent,dimColor:e},e?" \u2714 ":" "),U.createElement(fe,{dimColor:e},"Type "),U.createElement(fe,{backgroundColor:v.secondary,dimColor:e}," "+t+" "),n&&U.createElement(U.Fragment,null,U.createElement(fe,{dimColor:e}," "),U.createElement(fe,{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 U.createElement(xt,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},U.createElement(fe,{color:v.accent,bold:!0},"Welcome! \u{1F539}"),U.createElement(fe,null,"Lets get you started - its a breeze."),U.createElement(fe,{color:v.secondary2},"And remember, you can always get help with"," ",U.createElement(fe,{color:v.accent},":help"),"."),!a&&U.createElement(fe,{color:v.secondary2},d===":set:username"?"First, choose your username.":"Nice. One more step."),U.createElement(xt,{flexDirection:"column"},n&&U.createElement(xt,{marginBottom:1},U.createElement(Zt,{isDone:!0,command:":set:username",value:o})),!n&&U.createElement(Zt,{isDone:!1,command:":set:username"}),n&&!r&&U.createElement(Zt,{isDone:!1,command:":set:editor"}),a&&U.createElement(xt,null,U.createElement(Zt,{isDone:!0,command:":set:editor",value:i}))))}var ld=({width:e,height:t})=>P.createElement(me,{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 ${cd.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(me,{marginTop:1,flexDirection:"column"},P.createElement(me,null,P.createElement(De,{color:v.accent}," "),P.createElement(De,{color:v.primary},"Type "),P.createElement(De,{backgroundColor:v.secondary}," :init "))),P.createElement(me,{marginTop:1},P.createElement(De,{color:v.secondary2},"(This will create the local epiq project files)")));function er({width:e,height:t}){let n=$(),r=n.filters;if(n.mode===p.HELP)return P.createElement(me,{flexDirection:"column"},P.createElement(Jo,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:a,userName:d,preferredEditor:m}=It(),u=!o,f=o&&bt();if(u)return P.createElement(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{hideBreadCrumb:!0,filters:r}),P.createElement(Zn,{height:t,width:e,hasUserName:a,hasPreferredEditor:i,userName:d??"",preferredEditor:m??""})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}));if(f)return P.createElement(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{hideBreadCrumb:!0,filters:r}),P.createElement(ld,{height:t,width:e})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}));let y=Qe(h().breadCrumb??[],"BOARD");if(_e(y)){let N=y.data.id,S=T(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(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{filters:r}),P.createElement(yi,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}))}import{Box as He,Text as Fe}from"ink";import q,{useEffect as md,useMemo as ud,useState as pd}from"react";var gd=["\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 fd(e,t,n){return Math.min(n,Math.max(t,e))}function xd(e,t){return q.createElement(Fe,null,q.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(0,14)),q.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(14)))}function yd(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 tr({durationMs:e=3e3,slogan:t="Never leave the command line"}){let n=Math.max(1,e),[r,o]=pd(0);md(()=>{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=fd(r/n,0,1),a=ud(()=>yd(i,28),[i]),d=`${Math.round(i*100)}%`;return q.createElement(He,{flexDirection:"column",alignItems:"center",justifyContent:"center",paddingX:4,paddingY:1},q.createElement(He,{flexDirection:"column",minWidth:42},q.createElement(He,{flexDirection:"column",marginBottom:1},gd.map((m,u)=>q.createElement(He,{key:u,justifyContent:"center"},xd(m,u)))),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"gray"},t)),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"cyan"},a.slice(0,10)),q.createElement(Fe,{color:"blue"},a.slice(10,18)),q.createElement(Fe,{color:"magenta"},a.slice(18))),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"gray"},d))))}import vd from"readline";var en,tn,xe,vi=async e=>{if(e.ctrl&&e.name==="c")return D.exit();let{actionIndex:t,mode:n}=h(),r=Fr(e,n);if(!r)return;let o=t[n]?.[r];if(o?.action)try{await o.action(o,e)}catch(i){logger.error(i)}},hd=()=>async function(t,n){n.name!=="escape"&&(xe&&(clearTimeout(xe),xe=void 0),await vi(n))},Cd=()=>async function(t){if(t.length===1&&t[0]===27){xe&&clearTimeout(xe),xe=setTimeout(()=>{vi({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),xe=void 0},25);return}xe&&(clearTimeout(xe),xe=void 0)};function hi(){en&&process.stdin.removeListener("keypress",en),tn&&process.stdin.removeListener("data",tn),en=hd(),tn=Cd(),vd.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",tn),process.stdin.on("keypress",en)}import yt from"fs";import Ni from"path";import Nd from"util";var Ci=1e3,Ei=(e=process.cwd())=>Ni.join(Xe(e),pe(),"log","epiq.log");function Ed(e=process.cwd()){if(!Pt)return;let t=Ei(e);if(!yt.existsSync(t))return;let r=yt.readFileSync(t,"utf8").split(`
30
+ `),[e.log]);Qn(()=>{if(C.getNode(i))return;let w={...G.field(i,"Log",e.id,{value:a}),readonly:!0,childRenderAxis:"vertical"};return C.createNodeAtPosition(w),()=>{C.deleteNode(i)}},[i,e.id]),Qn(()=>{let E=C.getNode(i);E&&E.props.value!==a&&C.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;Qn(()=>{m&&(n>=0||F.navigate({selectedIndex:0}))},[m,n]);let u=T(e.id);if(m){let E=C.getNode(i),k=t-3;return Pe.createElement(Jn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},E?Pe.createElement(Yn,{id:E.id,label:"Event log",text:E.props.value??"",selected:!1,maxWidth:o,height:k}):null)}let f=u.reduce((E,w)=>w.title==="Assignees"||w.title==="Tags"||w.id===i?++E:E,0),y=2,N=f*1,b=t-3-N-y,I=(E,w)=>E.title==="Assignees"||E.title==="Tags"?Pe.createElement(pi,{key:E.id,parent:E,selected:w,selectedIndex:n}):E.id===i?Pe.createElement(Jn,{key:E.id,paddingTop:1},Pe.createElement(Q,{isSelected:w}),Pe.createElement(nd,{backgroundColor:v.secondary,color:w?v.accent:v.primary}," History \u203A\u203A ")):Pe.createElement(Yn,{label:"Description (press e to edit)",key:E.id,id:E.id,text:E.props.value??"",selected:w,maxWidth:o,height:b});return Pe.createElement(Jn,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},u.map((E,w)=>I(E,d&&n===w)))};var id=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:a,width:d})=>{let m=t.context,u=m===R.TICKET||m===R.FIELD_LIST||m===R.FIELD,f=m===R.BOARD||m===R.SWIMLANE,y=m===R.TICKET?t:r.find(E=>E.context===R.TICKET),N=Math.floor(d/3),S=Math.floor(d/Math.max(e.length,1)),b=Math.min(S,N),I=i==="dense";return Qt.createElement(od,{flexDirection:"row",height:a},f&&e.map((E,w)=>{let k=t.id===E.id,K=k?n:-1,Z=t.context===R.BOARD&&n===w;return Qt.createElement(ci,{key:E.id,height:a,width:b,swimlane:E,isSelected:Z,isDense:I,isFocused:k,listSelectedIndex:K,mode:o})}),u&&y&&Qt.createElement(fi,{height:a,ticket:y}))},xi=Qt.memo(id);var dd=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:a})=>{let{renderedChildrenIndex:d}=$(),m=n.find(({context:N})=>N==="BOARD"),y=i-1-3;return ft.createElement(sd,{flexDirection:"row"},e.context==="WORKSPACE"?ft.createElement(jn,null):m?ft.createElement(xi,{height:y,width:a,swimlanes:(d[m.id]??[]).filter(N=>N!==void 0&&ir(N)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):ft.createElement(ad,null))},yi=ft.memo(dd);import{Box as xt,Text as fe}from"ink";import U from"react";var Zt=({isDone:e,command:t,value:n})=>U.createElement(xt,null,U.createElement(fe,{color:v.accent,dimColor:e},e?" \u2714 ":" "),U.createElement(fe,{dimColor:e},"Type "),U.createElement(fe,{backgroundColor:v.secondary,dimColor:e}," "+t+" "),n&&U.createElement(U.Fragment,null,U.createElement(fe,{dimColor:e}," "),U.createElement(fe,{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 U.createElement(xt,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:v.secondary,rowGap:1},U.createElement(fe,{color:v.accent,bold:!0},"Welcome! \u{1F539}"),U.createElement(fe,null,"Lets get you started - its a breeze."),U.createElement(fe,{color:v.secondary2},"And remember, you can always get help with"," ",U.createElement(fe,{color:v.accent},":help"),"."),!a&&U.createElement(fe,{color:v.secondary2},d===":set:username"?"First, choose your username.":"Nice. One more step."),U.createElement(xt,{flexDirection:"column"},n&&U.createElement(xt,{marginBottom:1},U.createElement(Zt,{isDone:!0,command:":set:username",value:o})),!n&&U.createElement(Zt,{isDone:!1,command:":set:username"}),n&&!r&&U.createElement(Zt,{isDone:!1,command:":set:editor"}),a&&U.createElement(xt,null,U.createElement(Zt,{isDone:!0,command:":set:editor",value:i}))))}var ld=({width:e,height:t})=>P.createElement(me,{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 ${cd.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(me,{marginTop:1,flexDirection:"column"},P.createElement(me,null,P.createElement(De,{color:v.accent}," "),P.createElement(De,{color:v.primary},"Type "),P.createElement(De,{backgroundColor:v.secondary}," :init "))),P.createElement(me,{marginTop:1},P.createElement(De,{color:v.secondary2},"(This will create the local epiq project files)")));function er({width:e,height:t}){let n=$(),r=n.filters;if(n.mode===p.HELP)return P.createElement(me,{flexDirection:"column"},P.createElement(Jo,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:a,userName:d,preferredEditor:m}=It(),u=!o,f=o&&bt();if(u)return P.createElement(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{hideBreadCrumb:!0,filters:r}),P.createElement(Zn,{height:t,width:e,hasUserName:a,hasPreferredEditor:i,userName:d??"",preferredEditor:m??""})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}));if(f)return P.createElement(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{hideBreadCrumb:!0,filters:r}),P.createElement(ld,{height:t,width:e})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}));let y=Qe(h().breadCrumb??[],"BOARD");if(_e(y)){let N=y.data.id,S=T(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(me,{flexDirection:"column"},P.createElement(me,{flexDirection:"column"},P.createElement(jt,{filters:r}),P.createElement(yi,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),P.createElement(Vt,{width:e,mode:n.mode,availableHints:n.availableHints}))}import{Box as He,Text as Fe}from"ink";import q,{useEffect as md,useMemo as ud,useState as pd}from"react";var gd=["\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 fd(e,t,n){return Math.min(n,Math.max(t,e))}function xd(e,t){return q.createElement(Fe,null,q.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(0,14)),q.createElement(Fe,{color:t%2===0?"cyan":"blue",bold:!0},e.slice(14)))}function yd(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 tr({durationMs:e=3e3,slogan:t="Never leave the command line"}){let n=Math.max(1,e),[r,o]=pd(0);md(()=>{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=fd(r/n,0,1),a=ud(()=>yd(i,28),[i]),d=`${Math.round(i*100)}%`;return q.createElement(He,{flexDirection:"column",alignItems:"center",justifyContent:"center",paddingX:4,paddingY:1},q.createElement(He,{flexDirection:"column",minWidth:42},q.createElement(He,{flexDirection:"column",marginBottom:1},gd.map((m,u)=>q.createElement(He,{key:u,justifyContent:"center"},xd(m,u)))),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"gray"},t)),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"cyan"},a.slice(0,10)),q.createElement(Fe,{color:"blue"},a.slice(10,18)),q.createElement(Fe,{color:"magenta"},a.slice(18))),q.createElement(He,{justifyContent:"center",marginBottom:1},q.createElement(Fe,{color:"gray"},d))))}import vd from"readline";var en,tn,xe,vi=async e=>{if(e.ctrl&&e.name==="c")return F.exit();let{actionIndex:t,mode:n}=h(),r=Fr(e,n);if(!r)return;let o=t[n]?.[r];if(o?.action)try{await o.action(o,e)}catch(i){logger.error(i)}},hd=()=>async function(t,n){n.name!=="escape"&&(xe&&(clearTimeout(xe),xe=void 0),await vi(n))},Cd=()=>async function(t){if(t.length===1&&t[0]===27){xe&&clearTimeout(xe),xe=setTimeout(()=>{vi({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),xe=void 0},25);return}xe&&(clearTimeout(xe),xe=void 0)};function hi(){en&&process.stdin.removeListener("keypress",en),tn&&process.stdin.removeListener("data",tn),en=hd(),tn=Cd(),vd.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",tn),process.stdin.on("keypress",en)}import yt from"fs";import Ni from"path";import Nd from"util";var Ci=1e3,Ei=(e=process.cwd())=>Ni.join(Xe(e),pe(),"log","epiq.log");function Ed(e=process.cwd()){if(!Pt)return;let t=Ei(e);if(!yt.existsSync(t))return;let r=yt.readFileSync(t,"utf8").split(`
31
31
  `);if(r[r.length-1]===""&&r.pop(),r.length<=Ci)return;let o=r.slice(-Ci).join(`
32
32
  `)+`
33
33
  `;yt.writeFileSync(t,o,"utf8")}function nr(e,t,n=!1,r=process.cwd()){if(!Pt)return;let o=Ei(r),i=Nd.format(...t),a=new Date,m=`[${n?a.toISOString().slice(11,19):a.toISOString()}] ${e} ${i}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "epiq",
3
- "version": "0.2.18",
3
+ "version": "0.2.20",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "description": "EPIQ - CLI based issue tracker",