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