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