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