epiq 0.4.1 → 0.4.3

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/index.js CHANGED
@@ -1,69 +1,69 @@
1
1
  #!/usr/bin/env node
2
- import Wr from"chalk";import{render as tc}from"ink";import nc from"meow";import rc from"react";import Yl from"chalk";import{Box as xe,Text as je}from"ink";import D from"react";import ct from"chalk";import{monotonicFactory as Nl,ulid as Me}from"ulid";import{useSyncExternalStore as xl}from"react";var P={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function Dn(e){return e.context==="WORKSPACE"}function ce(e){return e.context==="TICKET"}function Vr(e){return e.context==="FIELD"}var Qe=e=>e.context==="SWIMLANE",jr=e=>e.context==="BOARD";var Ee={None:"none",Success:"success",Fail:"fail"},s=e=>({status:Ee.Fail,message:e,value:null}),c=(e,t)=>({status:Ee.Success,message:e,value:t}),l=e=>e.status==="fail",Oe=e=>e.status==="success";var p={DEFAULT:"default",MOVE:"move",HELP:"help",COMMAND_LINE:"command-line"};function Dt(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;return r}var Ft=(e,t)=>t<=0?"":e.length<=t?e:t<=3?"...".slice(0,t):e.slice(0,t-3)+"...",Fn=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var Gr=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},zr=(e,t)=>t?e.get(t)??[]:[];var qr=new WeakMap,Ws=e=>{let t=qr.get(e);return t||(t=Gr(e),qr.set(e,t)),t};var Yr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return zr(Ws(e),r).filter(i=>Dt(r,i)>=n)};var Hs={hint:"",hints:[],overlap:0,remainder:""},Xr=({inputToMatch:e,lastWord:t,isLastWordCompleted:n},r)=>{if(n||e==="")return Hs;let o=Yr({wordList:r,inputToMatch:e,overlapThreshold:1});return Ks(t,o)},Ks=(e,t)=>{let n=t[0]??"",r=Dt(e.toLowerCase(),n.toLowerCase()),[o,i]=n.split(":"),a=r<(o??"").length,d=!!i,g=(d&&a?o:n)+(d&&a?":":" "),h=g.slice(r);return{hint:g,hints:t,overlap:r,remainder:h}};var Jr=["vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var et=24n,Vs=et*4n,Ot=(1n<<Vs)-1n,js=/^[0-9a-f]+$/;function Zr(e){if(!e||!js.test(e))throw new Error(`Invalid hex rank: ${e}`);return BigInt("0x"+e)}function Bt(e,t=et){if(e<0n)throw new Error("Negative rank not allowed");return e.toString(16).padStart(Number(t),"0")}function z(e,t){if(!e&&!t)return Bt(Ot/2n,et);let n=e?Zr(e):0n,r=t?Zr(t):Ot;if(r<=n)return Bt(Ot/2n,et);let o=(n+r)/2n;return o===n||o===r?"":Bt(o,et)}function se(){return Bt(Ot/2n,et)}var te={workspace:(e,t)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:P.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r=!1)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:P.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:r,log:[]}),swimlane:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:P.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:P.FIELD,childRenderAxis:o,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n)=>({id:e,title:t,rank:se(),isDeleted:!1,props:{},context:P.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:P.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:o,log:[]})};var Ut=e=>Ce(F(e),{at:"end"}),Ce=(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",z(void 0,n.rank)):s("Unable to resolve first sibling")}case"end":{let n=e[e.length-1];return n?c("Resolved rank",z(n.rank,void 0)):s("Unable to resolve last sibling")}case"before":{let n=Qr(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",z(r?.rank,o.rank)):s("Sibling not found")}case"after":{let n=Qr(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",z(r.rank,o?.rank)):s("Sibling not found")}}},F=e=>Object.values(v().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),Qr=(e,t)=>e.findIndex(n=>n.id===t);var Be=(e,t)=>{let{nodes:n}=v(),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}`)},Bn=(e,t)=>{let{nodes:n}=v(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},On=(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"),E={deleteNode(e){ae(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=v(),r=n[e];if(!r)return s("Edit target node not found");let o=On(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return E.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=On(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=v();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=v();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return F(e).find(n=>n.title===t)},moveNodeToRank({id:e,parentId:t,rank:n}){let{rootNodeId:r}=v(),o=this.getNode(e),i=this.getNode(t);if(!o)return s("Node not found");if(!i)return s("Target parent not found");if(r===e)return s("Cannot move root node");if(e===t)return s("Cannot move node into itself");let a=On(o,"move");if(a)return a;if(Bn(t,e))return s("Cannot move node into its own descendant");let d={...o,parentNodeId:t,rank:n};return this.updateNode(d),c("Moved node successfully",d)},moveNodeToPosition({id:e,parentId:t,position:n={at:"end"}}){let r=F(t).filter(i=>i.id!==e),o=Ce(r,n);return l(o)?o:this.moveNodeToRank({id:e,parentId:t,rank:o.value})},tombstoneNode(e){let{nodes:t,currentNodeId:n,rootNodeId:r}=v(),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 m=t[u];if(!(!m||i.has(u))){i.add(u);for(let g of F(m.id))a(g.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}}return n?(A({nodes:d}),c("Successfully tomb stoned",o)):s("Unable to delete undefined")},createContributor(e){let t=ae(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=E.getContributor(t),o=E.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(F(i.id).some(u=>u.props?.value===t))return s("Contributor already assigned");let d=this.createNodeAtPosition(te.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Assigned contributor",d.value)},createTag(e){let t=ae(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=E.getTag(t),o=E.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(F(i.id).some(u=>u.props?.value===t))return s("Tag already assigned");let d=this.createNodeAtPosition(te.field(n,r.name,i.id,{value:t}));return l(d)?d:c("Tag added",d.value)},untag(e,t){let n=E.getTag(t),r=E.getNode(e);if(!n)return s("Unable to remove tag, missing tag");if(!r)return s("Unable to remove tag, missing target");let o=this.getFieldByTitle(r.id,"Tags");if(!o)return s("Unable to locate tags field");let i=F(o.id).find(d=>d.props?.value===t);if(!i)return c("Issue is not tagged with that tag",null);let a={...i,isDeleted:!0};return this.updateNode(a),c("Tag removed",a)},unassign(e,t){let n=E.getContributor(t),r=E.getNode(e);if(!n)return s("Unable to unassign, missing contributor");if(!r)return s("Unable to unassign, missing target");let o=this.getFieldByTitle(r.id,"Assignees");if(!o)return s("Unable to locate assignees field");let i=F(o.id).find(d=>d.props?.value===t);if(!i)return c("Issue is not assigned to that contributor",null);let a={...i,isDeleted:!0};return this.updateNode(a),c("Assignee removed",a)},createNodeAtPosition(e,t={at:"end"}){if(!e.parentNodeId){let i={...e,rank:se()};return this.createNode(i),c("Created node",i)}let n=F(e.parentNodeId),r=Ce(n,t);if(l(r))return r;let o={...e,rank:r.value};return this.createNode(o),c("Created node",o)},createNode(e){let t=ae(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=ae(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?s(r.message):c("Locked node",n)},updateNode(e){let t=ae(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},getContributor(e){return v().contributors[e]},getTag(e){return v().tags[e]},getNode(e){return v().nodes[e]},getSiblings:e=>Object.values(v().nodes).filter(t=>!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank))};var $t={autoSync:!1,preferredEditor:null,userName:null,userId:null},fe=()=>$t,tt=e=>($t={...$t,...e},$t);var _t=()=>{let e=fe(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},eo=()=>!Ge();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"},N={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 y={red:q.red,yellow:q.yellow,green:q.green,blue:q.blue,magenta:q.magenta,cyan:q.cyan},nt={urgent:y.red,critical:y.red,important:y.red,blocker:y.red,asap:y.red,immediate:y.red,fail:y.red,failure:y.red,broken:y.red,bug:y.red,error:y.red,incident:y.red,outage:y.red,production:y.red,crash:y.red,security:y.red,warning:y.yellow,warn:y.yellow,risky:y.yellow,risk:y.yellow,attention:y.yellow,pending:y.yellow,review:y.yellow,"needs-review":y.yellow,qa:y.yellow,testing:y.yellow,test:y.yellow,validate:y.yellow,verification:y.yellow,staging:y.yellow,check:y.yellow,"follow-up":y.yellow,followup:y.yellow,waiting:y.yellow,blocked:y.yellow,hold:y.yellow,done:y.green,complete:y.green,completed:y.green,success:y.green,ok:y.green,stable:y.green,resolved:y.green,fixed:y.green,closed:y.green,merged:y.green,released:y.green,deployed:y.green,approved:y.green,verified:y.green,working:y.green,healthy:y.green,pass:y.green,passing:y.green,info:y.blue,information:y.blue,note:y.blue,docs:y.blue,documentation:y.blue,doc:y.blue,guide:y.blue,help:y.blue,explanation:y.blue,detail:y.blue,details:y.blue,context:y.blue,design:y.blue,discussion:y.blue,proposal:y.blue,idea:y.blue,feature:y.magenta,enhancement:y.magenta,improvement:y.magenta,refactor:y.magenta,refactoring:y.magenta,cleanup:y.magenta,optimize:y.magenta,optimization:y.magenta,perf:y.magenta,performance:y.magenta,upgrade:y.magenta,migration:y.magenta,modernize:y.magenta,debt:y.magenta,todo:y.cyan,next:y.cyan,planned:y.cyan,plan:y.cyan,future:y.cyan,backlog:y.cyan,investigate:y.cyan,explore:y.cyan,prototype:y.cyan};var to=(e,t)=>{let r=w(e.id).find(o=>o.title===t);return r?w(r.id).map(o=>typeof o.props?.value=="string"?o.props.value:"").filter(o=>!!o):[]},Un=e=>to(e,"Tags").map(t=>E.getTag(t)).filter(t=>!!t),Wt=()=>{let{breadCrumb:e,selectedNode:t}=v(),n=[...e,t].find(r=>r?.context==="TICKET");return!n||!ce(n)?s("Invalid untag target"):c("Retrieved tags from ticket in breadcrumb",Un(n)??[])},Ht=()=>{let{breadCrumb:e,selectedNode:t}=v(),n=[...e,t].find(r=>r?.context==="TICKET");return!n||!ce(n)?s("Invalid untag target"):c("Retrieved tags from ticket in breadcrumb",$n(n)??[])},$n=e=>to(e,"Assignees").map(t=>E.getContributor(t)).filter(t=>!!t);var f={EXIT:"exit",INIT:"init",HELP:"help",NEW:"new",TAG:"tag",UNTAG:"untag",MOVE:"move",PEEK:"peek",FILTER:"filter",ASSIGN:"assign",UNASSIGN:"unassign",DELETE:"delete",RENAME:"rename",CLOSE_ISSUE:"close",RE_OPEN_ISSUE:"reopen",SET_DESCRIPTION:"edit",SET_EDITOR:"config:editor",SET_VIEW:"config:view",SET_USERNAME:"config:username",SYNC:"sync",EXPORT:"export",NONE:""};var Gs=/^(\d+)(h|d|w|mo|y)$/,zs=/^(\d{4})-(\d{2})-(\d{2})(?:(?::|\s)(\d{2}):(\d{2}))?$/,qs=({year:e,month:t,day:n,hour:r=0,minute:o=0})=>{let i=new Date(e,t-1,n,r,o);return i.getFullYear()===e&&i.getMonth()===t-1&&i.getDate()===n&&i.getHours()===r&&i.getMinutes()===o},Ys=(e,t=new Date)=>{let n=e.match(Gs);if(!n)return null;let[,r,o]=n,i=Number(r);if(!Number.isInteger(i)||i<=0)return null;let a=new Date(t);switch(o){case"h":return a.setHours(a.getHours()-i),a;case"d":return a.setDate(a.getDate()-i),a;case"w":return a.setDate(a.getDate()-i*7),a;case"mo":return a.setMonth(a.getMonth()-i),a;case"y":return a.setFullYear(a.getFullYear()-i),a;default:return null}},Xs=e=>{let t=e.match(zs);if(!t)return null;let[,n,r,o,i,a]=t,d=Number(n),u=Number(r),m=Number(o),g=i?Number(i):0,h=a?Number(a):0;return qs({year:d,month:u,day:m,hour:g,minute:h})?new Date(d,u-1,m,g,h):null},Kt=e=>{let t=e.trim().toLowerCase();return Ys(t)??Xs(t)},no=({date:e,horizonDate:t})=>t?e.getTime()>=t.getTime():!0,Js=[{unit:"h",from:1,to:24},{unit:"d",from:1,to:7},{unit:"w",from:1,to:52},{unit:"mo",from:1,to:12},{unit:"y",from:1,to:5}],ro=(e=Js)=>{let t=[];for(let{unit:n,from:r,to:o}of e)for(let i=r;i<=o;i++)t.push(`${i}${n}`);return t};var Zs=["BOARD","TICKET","SWIMLANE"],ze=[f.SYNC,f.HELP,f.EXPORT,f.SET_VIEW,f.SET_EDITOR,f.SET_USERNAME],Vt=[f.NEW,f.RENAME,f.DELETE,f.MOVE],_n=[f.TAG,f.UNTAG,f.ASSIGN,f.UNASSIGN,f.CLOSE_ISSUE,f.RE_OPEN_ISSUE,f.SET_DESCRIPTION],oo=[f.FILTER,f.PEEK],Qs={WORKSPACE:[...ze,...Vt],BOARD:[...oo,...ze,...Vt],SWIMLANE:[...oo,...ze,...Vt],TICKET:[...ze,...Vt,..._n],FIELD:[...ze,..._n],FIELD_LIST:[...ze,..._n],TEXT:[...ze]},ea=e=>e==="WORKSPACE"?["board"]:["issue","swimlane","board"],ta=()=>{let{currentNode:e,selectedNode:t,readOnly:n}=v();if(!_t().isSetup)return[f.HELP,f.SET_EDITOR,f.SET_USERNAME];if(!eo())return[f.HELP,f.INIT];if(n)return[f.HELP,f.PEEK,f.EXPORT,f.SET_VIEW];let o=e.context??"WORKSPACE",i=t?.context,a=i&&Zs.includes(i);return Qs[o].filter(d=>d===f.RENAME||d===f.DELETE||d===f.MOVE?a:!0)},j=e=>{let{currentNode:t}=v(),n=t.context??"WORKSPACE";return{[f.NONE]:ta(),[f.EXIT]:["confirm"],[f.EXPORT]:[],[f.SYNC]:[],[f.INIT]:[],[f.HELP]:[],[f.PEEK]:[...ro(),"now","prev","next"],[f.SET_USERNAME]:[],[f.SET_DESCRIPTION]:["confirm"],[f.DELETE]:["confirm"],[f.RE_OPEN_ISSUE]:["confirm"],[f.CLOSE_ISSUE]:["confirm"],[f.MOVE]:["start","confirm","next","previous","to-next","to-previous","cancel"],[f.FILTER]:["tag","assignee","description","title","clear"],[f.SET_VIEW]:["dense","wide"],[f.SET_EDITOR]:[...Jr],[f.TAG]:[...new Set([...Object.keys(nt),...E.getExistingTags()])],[f.UNTAG]:[...Wt()?.value?.map(({name:o})=>o)??[]],[f.UNASSIGN]:[...Ht()?.value?.map(({name:o})=>o)??[]],[f.ASSIGN]:E.getExistingAssignees(),[f.RENAME]:[],[f.NEW]:ea(n)}[e]??[]};import ot from"chalk";import{decodeTime as io}from"ulid";var so=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"},ao=e=>{let t=n=>String(n).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())} ${t(e.getHours())}:${t(e.getMinutes())}`},jt=e=>{try{return c("Decoded date",new Date(io(e)))}catch(t){return s("Decoding failed + "+t.message)}},Wn=e=>{if(!e?.id)return null;try{return io(e.id)}catch{return null}};var Ie=(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 rt from"chalk";var Kn={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},na=(e,t,n)=>Math.max(t,Math.min(n,e)),Hn=(e,t,n)=>e+(t-e)*n,lo=e=>{let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t},ra=(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)),u=0,m=0,g=0;a>=0&&a<1?(u=i,m=d):a>=1&&a<2?(u=d,m=i):a>=2&&a<3?(m=i,g=d):a>=3&&a<4?(m=d,g=i):a>=4&&a<5?(u=d,g=i):(u=i,g=d);let h=o-i/2;return[Math.round((u+h)*255),Math.round((m+h)*255),Math.round((g+h)*255)]},oa=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,ia=(e,t,n)=>[Math.round(Hn(e[0],t[0],n)),Math.round(Hn(e[1],t[1],n)),Math.round(Hn(e[2],t[2],n))],pt=e=>{let n=lo(e)%360,r=ra(n,Kn.stringColor.saturation,Kn.stringColor.lightness);return oa(r)},sa=e=>{let t=Kn.gradient.stops,n=na(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 ia(t[i],t[i+1],a)},Gt=e=>lo(e.toLowerCase().trim())/4294967295,co=e=>{let t=Gt(e);return sa(t)},aa=e=>{let[t,n,r]=co(e);return{normal:o=>rt.bgRgb(t,n,r).black(o),cursor:o=>rt.bgRgb(t,n,r).white.bold(o)}},Vn=e=>{let[t,n,r]=co(e);return{fg:o=>rt.rgb(t,n,r)(o),fgCursor:o=>rt.rgb(t,n,r).inverse(o),bg:o=>rt.bgRgb(t,n,r).black(o),bgCursor:o=>rt.bgRgb(t,n,r).white.bold(o)}},jn=e=>aa(e).normal(` ${e} `),Y=(e,t=nt)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:pt(r)};var be={None:"none",Invalid:"invalid",Valid:"valid"};var da=["BOARD","TICKET","SWIMLANE"],Gn=()=>{let e=v().selectedNode;return e?.context?da.includes(e?.context)?H():$({message:"Command not available in this context"}):$({message:"Missing target context"})},Z="<ENTER> to confirm",H=(e="",t=[])=>({message:e,validity:be.Valid,completionWordList:t}),$=({message:e,completionWordList:t=[]})=>({validity:be.Invalid,message:e,completionWordList:t}),ft=e=>e.length===0,Ue=({prefix:e="",wordList:t,postfix:n="",noOfHints:r=100,inputString:o,minLengthForHints:i=1})=>{let u=[...t.filter(Boolean).filter(g=>g.startsWith(o.trim()))].sort((g,h)=>Gt(g)-Gt(h)).slice(0,r).map(jn),m=u.length>i?u.join(" "):"";return m?`${e}${m}${n}`:""},zn=({modifier:e})=>{let t="confirm";return e===t?H(Z):$({message:ft(e)?`if you are certain, enter ${jn(t)}`:"",completionWordList:[t]})},la=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?H(Z):$({message:ft(n)?t:""}),ca=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?$({message:n}):H():$({message:ft(r)?t:""}),gt=({hint:e})=>({modifier:t,inputString:n})=>ft(t)&&ft(n)?$({message:e,completionWordList:[]}):H(Z),ua={[f.EXPORT]:()=>H(Z+", and create export markdown file"),[f.PEEK]:e=>{let t=e.modifier;if(t==="now")return H(Z);let n={message:"historical state from: '1h', '2d', '23h', '1mo', '2y', 'previous', 'next' or full date as YYYY-MM-DD"};if(t==="prev"||t==="next")return H(Z);let r=Kt(t);if(!t||!r)return $(n);let o=Ie(v().breadCrumb,"BOARD");if(l(o))return $({message:"Command is not applicable in this context"});let i=jt(o.value.id);return l(i)?$({message:"Unable to peek: board id is not a valid ULID"}):no({date:r,horizonDate:i.value})?H(Z):$({message:ot.red(`nothing to peek before ${i.value.toISOString().slice(0,16).replace("T"," ")}`)})},[f.EXIT]:()=>H(Z+" and exit the application"),[f.INIT]:()=>H(Z),[f.FILTER]:e=>{if(e.modifier==="clear")return H();let t=a=>j(f.FILTER).includes(a);if(!e.modifier||!t(e.modifier??""))return $({message:Ue({wordList:j(f.FILTER),inputString:e.inputString}),completionWordList:j(f.FILTER)});let r=Object.values(v().tags).map(a=>a.name),o=Object.values(v().contributors).map(a=>a.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?$({message:Ue({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):H():$({message:Ue({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[f.NONE]:e=>{let t=j(f.NONE),n=/^[A-Za-z_]+:/g,r=e.inputString.match(n);return r&&r.length?t=[...t.filter(o=>o.trim().match(n))]:t=[...new Set(t.flatMap(o=>o.match(n)?.join("").replace(":","")??o))],e.command?H():$({message:Ue({prefix:"... ",wordList:t,inputString:e.inputString,minLengthForHints:0})})},[f.NEW]:e=>ca({list:j(f.NEW),hint:Ue({wordList:j(f.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[f.SET_DESCRIPTION]:()=>H(Z),[f.HELP]:()=>H(Z),[f.RENAME]:()=>{let e=Gn();return e.validity==="invalid"?e:H(Z)},[f.DELETE]:e=>{let t=Gn();return t.validity==="invalid"?t:zn(e)},[f.CLOSE_ISSUE]:e=>zn(e),[f.RE_OPEN_ISSUE]:e=>zn(e),[f.MOVE]:e=>{let t=Gn();return t.validity==="invalid"?t:gt({hint:Ue({prefix:"hey hacker! These commands are blocked for you... ",wordList:j(f.MOVE),noOfHints:10,inputString:e.inputString})})(e)},[f.TAG]:e=>{let t=E.getExistingTags().map(n=>` ${ot.bgHex(Y(n))(" "+n+" ")} `).slice(0,10);return gt({hint:"tag name like... "+t.join("")})(e)},[f.UNTAG]:e=>{let t=Wt();if(l(t))return $({message:"Invalid untag target",completionWordList:[]});let n=t.value.map(({name:r})=>r).map(r=>` ${ot.bgHex(Y(r))(" "+r+" ")} `).slice(0,10);return n.length?gt({hint:" ... "+n.join("")})(e):$({message:"Issue has not tags",completionWordList:[]})},[f.ASSIGN]:e=>{let t=E.getExistingAssignees().map(n=>` ${ot.bgHex(Y(n))(" "+n+" ")} `).slice(0,10);return gt({hint:"assign to... "+t.join("")})(e)},[f.UNASSIGN]:e=>{let t=Ht();if(l(t))return $({message:"Invalid unassign target",completionWordList:[]});let n=t.value.map(({name:r})=>r).map(r=>` ${ot.bgHex(Y(r))(" "+r+" ")} `).slice(0,10);return n.length?gt({hint:"remove assignee... "+n.join("")})(e):$({message:"Issue has no assignees",completionWordList:[]})},[f.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=j(f.SET_EDITOR);return e.modifier?H(Z):$({message:Ue({wordList:t,inputString:e.inputString})})},[f.SET_USERNAME]:e=>e.inputString?H():$({message:`Enter a username. Saved in ${ot.bgBlack("~/.epiq-global/")}`}),[f.SET_VIEW]:e=>la({list:j(f.SET_VIEW),hint:Ue({wordList:j(f.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[f.SYNC]:()=>H(Z)},uo=Object.fromEntries(Object.entries(ua).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var mo=["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={Exit:"exit",Init:"init",None:"none",ViewHelp:"view-help",Rename:"rename",Edit:"edit",Delete:"delete",Filter:"filter",Move:"move",Peek:"peek",SetView:"set-view",SetEditor:"set-editor",SetUserName:"set-user-name",SetAutoSync:"set-auto-sync",NewItem:"add-new-item",TagTicket:"ticket-tag",UntagTicket:"ticket-untag",AssignUserToTicket:"ticket-assign-user",UnassignUserFromTicket:"ticket-unassign-user",CloseIssue:"close-issue",ReopenIssue:"re-open-issue",Sync:"sync",Export:"export"};var po=e=>Object.values(f).includes(e),go=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:a,validity:d,completionWordList:u}=uo[n].validate(n,r,i),m=o==="command"?Object.values(f):n&&e.target==="modifier"?j(n):mo;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:a??"",autoCompletion:t?Xr(e,[...u,...m]):{hint:"",hints:[],remainder:"",overlap:0}}};var fo=e=>{let t=e.trimStart(),n=pa(t),r=n[0]??"",o=n[1]??"",i=/\s$/.test(e),a=ga(e),d=po(r)?r:null,u=d!==null,m=r!=="",g=d?j(d)??[]:[],h=d&&g.includes(o)?o:"",C="word";n.length===0||n.length===1&&!i?C="command":(n.length===1&&i||n.length===2&&!i)&&(C="modifier");let I=i?"":a,b=ma(t,d,h);return{raw:e,trimmedStart:t,words:n,firstWord:r,lastWord:a,hasCommand:m,command:d,isCommandKeyword:u,isLastWordCompleted:i,modifier:h,target:C,inputToMatch:I,inputString:b}},ma=(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},pa=e=>e.trim()?e.trim().split(/\s+/):[],ga=e=>e.trimEnd().split(/\s+/).at(-1)??"";var vo=" ",X={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:be.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},qn=new Set,xo=()=>{for(let e of qn)e()},yo=e=>(qn.add(e),()=>qn.delete(e)),Se=e=>{let n=e(X),r=fo(n.value),o=n.cursorPosition===n.value.length;X={...n,commandMeta:go(r,o)},xo()},vt=({message:e,status:t})=>{let n=structuredClone(X);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,X=n,xo(),c(e,null)},Yn=e=>{Se(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},Xn=e=>{Se(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}})},ho=()=>{Se(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}})},No=()=>{Se(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}})},V=e=>{Se(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}})},Eo=()=>{Se(e=>({...e,commandIsPending:!0}))},Co=({addToHistory:e=!0})=>{Se(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),fa()},Io=()=>{Se(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}})},bo=()=>{Se(e=>{let t=Math.max(e.commandHistoryIndex-1,-1),n=t===-1?"":e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},fa=()=>V(()=>""),ne=()=>X,zt=()=>{let[e,...t]=X.value.split(vo);return t.join(vo).trim()};var va=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",xa=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",ya=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",So=(e,t)=>{if(xa(e,e.sequence))return x.MoveCursorLeftOfWord;if(ya(e,e.sequence))return x.MoveCursorRightOfWord;if(va(e,e.sequence))return x.EraseInputWord;switch(e.name){case"tab":return x.AutoCompleteCommand;case"up":return x.GetLastCommandFromHistory;case"down":return x.GetNextCommandFromHistory;case"left":return x.MoveCursorLeft;case"right":return x.MoveCursorRight;case"return":return x.Confirm;case"backspace":return t?x.EraseInput:x.ExitCommandLine;case"escape":return x.ExitCommandLine;default:return x.CaptureInput}};var x={Sync:"sync",NavPreviousItem:"navPreviousItem",NavNextItem:"navNextItem",NavToPreviousContainer:"navToPreviousContainer",NavToNextContainer:"navToNextContainer",MovePreviousItem:"movePreviousItem",MoveNextItem:"moveNextItem",MoveToPreviousContainer:"moveToPreviousContainer",MoveToNextContainer:"moveToNextContainer",Confirm:"confirm",Exit:"exit",ViewHelp:"viewHelp",HideHelp:"hideHelp",InitMove:"initMove",ConfirmMove:"confirmMove",Delete:"Delete",InitCommandLine:"initCommandLine",ExitCommandLine:"exitCommandLine",CaptureInput:"captureInput",EraseInput:"eraseInput",AddItem:"addItem",GetLastCommandFromHistory:"getLastCommandFromHistory",GetNextCommandFromHistory:"getNextCommandFromHistory",AutoCompleteCommand:"autoCompleteCommand",MoveCursorLeft:"MoveCursorLeft",MoveCursorRight:"MoveCursorRight",MoveCursorLeftOfWord:"MoveCursorLeftOfWord",MoveCursorRightOfWord:"MoveCursorRightOfWord",EraseInputWord:"EraseInputWord",None:"None",Edit:"edit",SetViewDense:"SetViewDense",SetViewWide:"SetViewWide"};function ha(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 Na(e,t,n){let r=v().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 To(e,t){let n=ne();if(e.sequence===":"&&n.value==="")return x.InitCommandLine;if(t===p.MOVE)switch(e.name){case"m":case"return":return x.ConfirmMove}if(t===p.COMMAND_LINE)return So(e,n.value);let r=ha(e);if(r){let o=t===p.MOVE?{prevItem:x.MovePreviousItem,nextItem:x.MoveNextItem,prevContainer:x.MoveToPreviousContainer,nextContainer:x.MoveToNextContainer}:{prevItem:x.NavPreviousItem,nextItem:x.NavNextItem,prevContainer:x.NavToPreviousContainer,nextContainer:x.NavToNextContainer};return Na(v().currentNode.childRenderAxis,r,o)}if(e.ctrl&&e.name==="c")return x.Exit;switch(e.name){case"e":return x.Edit;case"n":return x.AddItem;case"m":return x.InitMove;case"d":return x.Delete;case"return":return x.Confirm;case"space":return x.Confirm;case"v":return v().viewMode==="wide"?x.SetViewDense:x.SetViewWide;case"q":case"escape":return x.Exit;case"s":return x.Sync;default:return null}}var Ao=e=>{let{context:t}=v()?.currentNode;if(!t)return M.None;switch(e){case f.EXIT:return M.Exit;case f.EXPORT:return M.Export;case f.INIT:return M.Init;case f.DELETE:return M.Delete;case f.SET_DESCRIPTION:return M.Edit;case f.HELP:return M.ViewHelp;case f.RE_OPEN_ISSUE:return M.ReopenIssue;case f.CLOSE_ISSUE:return M.CloseIssue;case f.TAG:return M.TagTicket;case f.UNTAG:return M.UntagTicket;case f.ASSIGN:return M.AssignUserToTicket;case f.UNASSIGN:return M.UnassignUserFromTicket;case f.RENAME:return M.Rename;case f.NEW:return M.NewItem;case f.FILTER:return M.Filter;case f.MOVE:return M.Move;case f.PEEK:return M.Peek;case f.SET_USERNAME:return M.SetUserName;case f.SET_EDITOR:return M.SetEditor;case f.SET_VIEW:return M.SetView;case f.SYNC:return M.Sync;default:return M.None}};import{ulid as W}from"ulid";import{spawnSync as wa}from"node:child_process";import Ra from"node:os";import Po from"node:path";import{ulid as Ma}from"ulid";import{accessSync as Ea,copyFileSync as Ca,existsSync as qt,mkdirSync as wo,readdirSync as Ro,readFileSync as Ia,renameSync as ba,rmSync as Sa,statSync as Mo,unlinkSync as Ta,writeFileSync as Aa}from"node:fs";import it from"node:path";var de={writeToFile:(e,t)=>{try{let n=it.dirname(e);qt(n)||wo(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);Aa(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return Ia(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=de.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 qt(e)&&Mo(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Ea(e),!0}catch{return!1}},mkDir:e=>wo(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=it.parse(t);for(;;){let r=it.join(t,e);try{if(qt(r)&&Mo(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=it.dirname(t)}return null},readFirstJSON(e){try{if(!de.dirExists(e))return null;let t=Ro(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=it.join(e,t);return de.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return de.dirExists(e)?Ro(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{Ta(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{Sa(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(it.dirname(t)),!n?.overwrite&&qt(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{ba(e,t)}catch(r){if(r?.code==="EXDEV"){Ca(e,t),this.rmFile(e);return}throw r}}};function Pa(){let{preferredEditor:e}=fe(),t=[e,process.env.VISUAL,process.env.EDITOR].filter(n=>!!n?.trim());return[...new Set(t)]}function ka(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function ko(e){let t=Po.join(Ra.tmpdir(),"epiq");de.mkDir(t);let n=Po.join(t,Ma());de.writeToFile(n,e??"");let r=Pa();for(let o of r){let i=ka(o,n),a=wa(i,{stdio:"inherit",shell:!0});if(!a.error&&a.status===0){let d=de.readFile(n);if(d==null)return s("Unable to read edited file");let u=d.replace(/\r?\n$/,"");return c("Successfully edited",u)}}return s("Unable to open editor")}import{monotonicFactory as La,ulid as Yt}from"ulid";var Xt=La(),Lo=({name:e,parent:t,rank:n,user:{userId:r,userName:o}})=>{let i=Xt(),a=Xt(),d=Xt(),u=Xt(),m=se(),g=z(m,void 0),h=z(g,void 0);return[{id:Yt(),userId:r,userName:o,action:"add.issue",payload:{id:i,parent:t,name:e,rank:n}},{id:Yt(),userId:r,userName:o,action:"add.field",payload:{id:a,parent:i,name:"Description",val:"",rank:m}},{id:Yt(),userId:r,userName:o,action:"add.field",payload:{id:d,parent:i,name:"Assignees",rank:g}},{id:Yt(),userId:r,userName:o,action:"add.field",payload:{id:u,parent:i,name:"Tags",rank:h}}]};import en from"node:fs";import nr from"node:path";import{decodeTime as ja}from"ulid";import{z as tr}from"zod";import Ba from"node:fs";import Ua from"node:path";import{decodeTime as $a,monotonicFactory as _a}from"ulid";import{z as yt}from"zod";import Jn from"node:fs";import st from"node:path";var Zn=process.env.IS_LOCAL==="true",$e=".epiq",ue=".epiq-global",Jt="events",Da="epiq",Do=e=>st.join(e,Da),Fa=e=>st.join(e,$e),xt=e=>st.join(Fa(e),Jt),Oa=e=>{let t=st.join(e,$e);return Jn.existsSync(t)&&Jn.statSync(t).isDirectory()},ve=e=>{let t=st.resolve(e);for(;;){if(Oa(t))return c("Resolved closest .epiq root",t);let n=st.dirname(t);if(n===t)return s("No .epiq directory found in any parent");t=n}},Fo=e=>{let t=xt(e);try{return Jn.mkdirSync(t,{recursive:!0}),c("Resolved events dir",t)}catch(n){return s(n instanceof Error?`Failed to ensure events dir: ${n.message}`:"Failed to ensure events dir")}};var Oo=e=>({action:e.action,payload:e.payload});var Uo=1,Bo=_a(),Wa=yt.tuple([yt.string().min(1),yt.string().min(1).nullable()]),Ha=yt.looseObject({v:yt.literal(Uo),id:Wa}),Qn=e=>{let t=Ha.safeParse(e);return t.success?c("Parsed persisted event",t.data):s(`Invalid persisted event: ${t.error.issues.map(n=>n.path.join(".")||n.message).join(", ")}`)},Zt=e=>e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown",Q=()=>{let{userName:e,userId:t}=fe();return e?t?e.trim()?c("Successfully resolved actor ID",{userId:Zt(t),userName:Zt(e)}):s("Unable to resolve actor ID from settings or OS user info"):s("User ID not configured"):s("User name not configured")},er=({userId:e,userName:t})=>`${Zt(e)}.${Zt(t)}.jsonl`,Ka=(e,{userId:t,userName:n})=>{let r=er({userId:t,userName:n});if(!/^(?!.*\.jsonl.*\.jsonl).*\.jsonl$/.test(r))return s(`Invalid event log file name: ${r}`);let i=Ua.join(xt(e),r);return c("Successfully resolved event log path",i)},Va=(e,t)=>{let n={[e.action]:e.payload,v:Uo,id:t};return Qn(n)};function Qt({event:e,rootDir:t=process.cwd()}){try{let n=ve(t);if(l(n))return n;let r=Fo(n.value);if(l(r))return r;let o=Ka(n.value,{userId:e.userId,userName:e.userName});if(l(o))return o;let i=$o(n.value);if(l(i))return s(i.message);let a=i.value?Bo(Math.max(Date.now(),$a(i.value)+1)):Bo(),d=Va(Oo(e),[a,i.value]);return l(d)?s(d.message):(Ba.appendFileSync(o.value,`${JSON.stringify(d.value)}
3
- `,"utf8"),c("Event persisted",{path:o.value,entry:d.value}))}catch(n){let r=n instanceof Error?n.message:"Unknown persist error";return s(`Failed to persist event: ${r}`)}}var Ga=tr.object({userId:tr.string().min(1).default("unknown"),userName:tr.string().min(1).default("unknown")}),za=e=>{let[t,n]=nr.basename(e,".jsonl").split("."),r=Ga.safeParse({userId:t,userName:n});return r.success?c("Parsed event file actor",r.data):s(`Invalid event file name ${nr.basename(e)}: ${r.error.issues.map(o=>o.path.join(".")||o.message).join(", ")}`)},qa=e=>{let t=Object.keys(e).filter(n=>n!=="id"&&n!=="v");return t.length!==1?s(`Invalid persisted event: expected exactly 1 action key, 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])},Ya=(e,t)=>t in e,Xa=({id:e,action:t,payload:n,userId:r,userName:o})=>({id:e,action:t,payload:n,userId:r,userName:o}),Ja=e=>{let{userId:t,userName:n,...r}=e,o=qa(r);if(l(o))return s(o.message);let i=o.value,a=e.id?.[0];return a?Ya(r,i)?c("Decoded persisted event",Xa({id:a,action:i,payload:r[i],userId:t,userName:n})):s(`Persisted event is missing payload for action: ${i}`):s("Persisted event is missing id")},tn=e=>{if(!en.existsSync(e))return c("Event file missing",[]);let t=za(e);if(l(t))return s(t.message);let n=en.readFileSync(e,"utf8"),r=[];for(let o of n.split(`
4
- `)){let i=o.trim();if(!i)continue;let a;try{a=JSON.parse(i)}catch{return s(`Failed to parse event JSON from ${e}: ${i}`)}let d=Qn(a);if(l(d))return s(`${d.message} in ${e}: ${i}`);r.push({...d.value,userId:t.value.userId,userName:t.value.userName})}return c("Parsed persisted events file",r)};function _o(e){let t=xt(e);if(!en.existsSync(t))return s("No events found");let n=en.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>nr.join(t,o)),r=[];for(let o of n){let i=tn(o);if(l(i))return s(i.message);r.push(...i.value)}return c("All events loaded",Za(r))}function ht(e){let t=_o(e);if(l(t))return s(t.message);let n=[];for(let r of t.value){let o=Ja(r);if(l(o))return s(`Failed to decode event ${r.id?.[0]??"<unknown>"}: ${o.message}`);n.push(o.value)}return c("Loaded merged events",n)}function $o(e=process.cwd()){let t=_o(e);return l(t)?s(t.message):c("Loaded edge reference",t.value.at(-1)?.id?.[0]??null)}var Za=e=>{let t=new Map;for(let d of e){let u=d.id[1]??null,m=t.get(u)??[];m.push(d),t.set(u,m)}for(let d of t.values())d.sort((u,m)=>u.id[0].localeCompare(m.id[0]));let n=[],r=new Set;a(t.get(null)??[]);let o=!0;for(;o;){o=!1;for(let d=0;d<n.length;d++){let u=n[d];if(!u)continue;let m=(t.get(u.id[0])??[]).filter(g=>!r.has(g.id[0]));if(m.length!==0){n.splice(d+1,0,...m);for(let g of m)r.add(g.id[0]);o=!0,d+=m.length}}}let i=e.filter(d=>!r.has(d.id[0])).sort((d,u)=>d.id[0].localeCompare(u.id[0]));return n.push(...i),n;function a(d){for(let u of d)r.has(u.id[0])||(n.push(u),r.add(u.id[0]))}},Wo=(e,t)=>{let n=e.findIndex(r=>{try{return ja(r.id)>t}catch{return!0}});return n===-1?{appliedEvents:e,unappliedEvents:[]}:{appliedEvents:e.slice(0,n),unappliedEvents:e.slice(n)}};var Qa=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[Te,nn]=Qa;var k=(e,t)=>s(`${t.action.split(".").join(" ")+" failed, "+e.toLowerCase()}. Evt id: ${t.id}`),ed={"init.workspace":e=>{let{id:t,name:n,rank:r}=e.payload,o={...te.workspace(t,n),rank:r};rr(o);let i=E.createNode(o);return l(i)?k(i.message??"Failed to initialize workspace",e):Dn(i.value)?c("Workspace initialized",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.workspace":e=>{let{id:t,name:n,rank:r}=e.payload,o={...te.workspace(t,n),rank:r},i=E.createNode(o);return l(i)?k(i.message??"Failed to add workspace",e):Dn(i.value)?c("Added workspace",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.board":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=E.createNode({...te.board(t,n,r),rank:o});return l(i)?k(i.message??"Unable to create board",e):jr(i.value)?c("Added board",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.swimlane":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=E.createNode({...te.swimlane(t,n,r),rank:o});return l(i)?k(i.message??"Unable to create swimlane",e):Qe(i.value)?c("Added swimlane",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.issue":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=E.createNode({...te.ticket(t,n,r),rank:o});return l(i)?k(i.message??"Unable to create issue",e):ce(i.value)?c("Added issue",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.field":e=>{let{id:t,name:n,parent:r,val:o,rank:i}=e.payload,a=E.createNode({...te.field(t,n,r,{value:o},n.includes("Description")?"vertical":"horizontal"),rank:i});return l(a)?k(a.message??`Unable to create field: ${n}`,e):Vr(a.value)?c("Added field",{action:e.action,result:a.value}):s("Unexpected create node return value")},"edit.title":e=>{let{id:t,name:n}=e.payload;if(!E.getNode(t))return k(`Unable to locate node with id ${t}`,e);let o=E.renameNode(t,n);return l(o)?k(o.message??"Unable to edit title",e):c("Edited title",{action:e.action,result:o.value})},"delete.node":e=>{let{id:t}=e.payload,n=E.tombstoneNode(t);return l(n)?k(n.message??"Unable to delete node",e):c("Deleted node",{action:e.action,result:n.value})},"create.tag":e=>{let{id:t,name:n}=e.payload,r=E.createTag({id:t,name:n});return l(r)?k(r.message??"Unable to create tag",e):c("Tag added",{action:e.action,result:r.value})},"create.contributor":e=>{let{id:t,name:n}=e.payload,r=E.createContributor({id:t,name:n});return l(r)?k(r.message??"Unable to create contributor",e):c("Contributor created",{action:e.action,result:r.value})},"tag.issue":e=>{let{id:t,target:n,tagId:r}=e.payload,o=E.tag(n,r,t);return l(o)?k(o.message??"Unable to tag issue",e):c("Issue tagged",{action:e.action,result:o.value})},"untag.issue":e=>{let{target:t,tagId:n}=e.payload,r=E.untag(t,n);return l(r)?k(r.message??"Unable to untag ",e):c("Issue untagged",{action:e.action,result:r.value})},"assign.issue":e=>{let{id:t,contributor:n,target:r}=e.payload,o=E.assign(r,n,t);return l(o)?k(o.message??"Unable to assign issue",e):c("Assigned successfully",{action:e.action,result:o.value})},"unassign.issue":e=>{let{target:t,contributor:n}=e.payload,r=E.unassign(t,n);return l(r)?k(r.message??"Unable to unassign issue",e):c("Issue unassigned",{action:e.action,result:r.value})},"move.node":e=>{let{id:t,parent:n,rank:r}=e.payload,o=E.moveNodeToRank({id:t,parentId:n,rank:r});return l(o)?k(o.message??"Failed to move node",e):c("Moved node",{action:e.action,result:o.value})},"edit.description":e=>{let{id:t,md:n}=e.payload,r=E.editValue(t,n);return l(r)?k(r.message??"Unable to edit description",e):c("Set node value",{action:e.action,result:r.value})},"close.issue":e=>{let{id:t,parent:n,rank:r}=e.payload,o=E.getNode(t);if(!o)return k("Unable to locate issue",e);if(!ce(o))return k("Can only close issues",e);let i=E.getNode(Te);if(!i)return k("Unable to locate target swimlane",e);if(n!==i.id)return k("Close target must be closed swimlane",e);let a=E.moveNodeToRank({id:t,parentId:n,rank:r});return l(a)?k(a.message??"Unable to close issue",e):c("Issue closed",{action:e.action,result:{id:t}})},"reopen.issue":e=>{let{id:t,parent:n,rank:r}=e.payload,o=E.getNode(t);if(!o)return k("Unable to locate issue",e);if(!ce(o))return k("Can only reopen issues",e);let i=E.getNode(Te);if(!i)return k("Unable to locate closed swimlane",e);if(n===i.id)return k("Cannot reopen issue into closed swimlane",e);if(!E.getNode(n))return k("Reopen parent no longer exists",e);let d=E.moveNodeToRank({id:t,parentId:n,rank:r});return l(d)?k(d.message??"Unable to reopen issue",e):c("Issue reopened",{action:e.action,result:{id:t}})},"lock.node":e=>{let{id:t}=e.payload,n=E.lockNode(t);return l(n)?k(n.message??"Unable to lock node",e):c("Node locked",{action:e.action,result:n.value})}},td=(e,t)=>{let n=E.getNode(e);n&&E.updateNode({...n,log:[...n.log??[],t]})},nd=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=v().nodes[e.payload.id]?.parentNodeId;return n&&t.push(n),t;case"tag.issue":case"untag.issue":case"assign.issue":case"unassign.issue":return[e.payload.id,e.payload.target];case"create.tag":case"create.contributor":default:return[]}};function Nt(e,t=!1){let n=ed[e.action](e);if(l(n))return n;t||([...new Set(nd(e))].forEach(a=>td(a,e)),ae(a=>({...a,eventLog:[...a.eventLog,e]})));let r=e.userId,o=e.userName;return!r?.length||!o?.length?k("Invalid user ID format",e):(E.createContributor({name:o,id:r}),n)}var qe=e=>e.map(t=>Nt(t));function J(e){let t=Nt(e);if(t.status!==Ee.Success)return t;let n=Qt({event:e});return l(n)?n:t}function Ho(e){return e.map(t=>J(t))}import Cd from"node:fs";import{createHash as ad}from"node:crypto";import Ct from"node:fs";import dd from"node:os";import pe from"node:path";var or=(e,t)=>{let n=new Map,r=t??((...i)=>JSON.stringify(i)),o=((...i)=>{let a=r(...i);if(!n.has(a)){let d=e(...i).then(u=>(l(u)&&n.delete(a),u));n.set(a,d)}return n.get(a)});return o.clear=()=>n.clear(),o};import Et from"fs";import Vo from"path";import rd from"util";var Ko=1e3,jo=()=>{let e=process.cwd(),t=ve(e);if(!l(t))return Vo.join(t.value,$e,"log","epiq.log")};function od(){if(!Zn)return;let e=jo();if(e===void 0||!Et.existsSync(e))return;let n=Et.readFileSync(e,"utf8").split(`
5
- `);if(n[n.length-1]===""&&n.pop(),n.length<=Ko)return;let r=n.slice(-Ko).join(`
2
+ import Wr from"chalk";import{render as sc}from"ink";import ac from"meow";import dc from"react";import ec from"chalk";import{Box as ve,Text as Ve}from"ink";import D from"react";import ut from"chalk";import{monotonicFactory as Sl,ulid as Me}from"ulid";import{useSyncExternalStore as Cl}from"react";var k={WORKSPACE:"WORKSPACE",BOARD:"BOARD",SWIMLANE:"SWIMLANE",TICKET:"TICKET",FIELD:"FIELD",FIELD_LIST:"FIELD_LIST",TEXT:"TEXT"};function Ln(e){return e.context==="WORKSPACE"}function le(e){return e.context==="TICKET"}function Vr(e){return e.context==="FIELD"}var Qe=e=>e.context==="SWIMLANE",jr=e=>e.context==="BOARD";var Ee={None:"none",Success:"success",Fail:"fail"},s=e=>({status:Ee.Fail,message:e,value:null}),c=(e,t)=>({status:Ee.Success,message:e,value:t}),l=e=>e.status==="fail",Ne=e=>e.status==="success";var g={DEFAULT:"default",MOVE:"move",HELP:"help",COMMAND_LINE:"command-line"};function Ot(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;return r}var Bt=(e,t)=>t<=0?"":e.length<=t?e:t<=3?"...".slice(0,t):e.slice(0,t-3)+"...",Dn=e=>typeof e!="string"?"":e.replace(/[\x00-\x08\x0B-\x1F\x7F]/g,"").replace(/[\r\n\t]/g," ").replace(/\s+/g," ").trim();var Gr=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},zr=(e,t)=>t?e.get(t)??[]:[];var qr=new WeakMap,js=e=>{let t=qr.get(e);return t||(t=Gr(e),qr.set(e,t)),t};var Yr=({wordList:e,inputToMatch:t,overlapThreshold:n=1})=>{let r=t.toLowerCase();return zr(js(e),r).filter(i=>Ot(r,i)>=n)};var Gs={hint:"",hints:[],overlap:0,remainder:""},Xr=({inputToMatch:e,lastWord:t,isLastWordCompleted:n},r)=>{if(n||e==="")return Gs;let o=Yr({wordList:r,inputToMatch:e,overlapThreshold:1});return zs(t,o)},zs=(e,t)=>{let n=t[0]??"",r=Ot(e.toLowerCase(),n.toLowerCase()),[o,i]=n.split(":"),a=r<(o??"").length,d=!!i,p=(d&&a?o:n)+(d&&a?":":" "),y=p.slice(r);return{hint:p,hints:t,overlap:r,remainder:y}};var Jr=["vim","nvim","nano","micro","emacs","hx","code","code-insiders","subl","notepad","notepad++","idea","webstorm","default","system","$EDITOR","$VISUAL"];var te={workspace:(e,t,n)=>({id:e,title:t,rank:n,isDeleted:!1,props:{},context:k.WORKSPACE,childRenderAxis:"vertical",parentNodeId:null,readonly:!0,log:[]}),board:(e,t,n,r,o=!1)=>({id:e,title:t,rank:r,isDeleted:!1,props:{},context:k.BOARD,childRenderAxis:"horizontal",parentNodeId:n,readonly:o,log:[]}),swimlane:(e,t,n,r)=>({id:e,title:t,rank:r,isDeleted:!1,props:{},context:k.SWIMLANE,childRenderAxis:"vertical",childNavigationAcrossParents:!0,parentNodeId:n,readonly:!1,log:[]}),field:(e,t,n,r,o={},i="horizontal")=>({id:e,title:t,rank:r,isDeleted:!1,props:o,context:k.FIELD,childRenderAxis:i,parentNodeId:n,readonly:!1,log:[]}),ticket:(e,t,n,r)=>({id:e,title:t,rank:r,isDeleted:!1,props:{},context:k.TICKET,childRenderAxis:"vertical",parentNodeId:n,readonly:!1,log:[]}),text:({id:e,name:t,parentNodeId:n,rank:r,props:o={},readonly:i=!0})=>({id:e,title:t,rank:r,isDeleted:!1,props:o,context:k.TEXT,childRenderAxis:"vertical",parentNodeId:n,readonly:i,log:[]})};import{ulid as Xs}from"ulid";var je=24n,qs=je*4n,gt=(1n<<qs)-1n,Ys=/^[0-9a-f]+$/;function Zr(e){return!e||!Ys.test(e)?s(`Invalid hex rank: ${e}`):c("Converted rank to bigint",BigInt("0x"+e))}function Ce(e,t=je){if(e<0n)return s("Negative rank not allowed");let n=e.toString(16);return c("Converted bigint to hex rank",n.padStart(Number(t),"0"))}function G(e,t){if(!e&&!t)return Ce(gt/2n,je);let n=e?Zr(e):c("Resolved lower bound",0n);if(l(n))return n;let r=t?Zr(t):c("Resolved upper bound",gt);if(l(r))return r;let o=n.value,i=r.value;if(i<=o)return Ce(gt/2n,je);let a=(o+i)/2n;return a===o||a===i?s("No rank space available between neighbors"):Ce(a,je)}function Qr(){return Ce(gt/2n,je)}function eo(e){if(e<=0)return c("Resolved empty rank list",[]);let t=BigInt(e),n=[];for(let r=0;r<e;r++){let o=gt*BigInt(r+1)/(t+1n),i=Ce(o,je);if(l(i))return i;n.push(i.value)}return c("Resolved evenly spaced ranks",n)}var Fn=(e,t)=>{let n=O(e),r=eo(n.length);if(l(r))return r;let o={};for(let i=0;i<n.length;i++){let a=n[i],d=r.value[i];if(!a||!d)return s("Unable to assign rebalance rank");o[a.id]=d}return c("Created rebalance event",{id:Xs(),action:"rebalance.children",payload:{parent:e,ranks:o},...t})};var Js=["00KM6CZ900T7180RM46K0JAYNF","00JR3R8E00A1Z4X9FGP9DV0SM5"],[be,Ut]=Js;var P=(e,t)=>s(`${t.action.split(".").join(" ")+" failed, "+e.toLowerCase()}. Evt id: ${t.id}`),Zs={"init.workspace":e=>{let{id:t,name:n,rank:r}=e.payload,o=te.workspace(t,n,r);On(o);let i=b.createNode(o);return l(i)?P(i.message??"Failed to initialize workspace",e):Ln(i.value)?c("Workspace initialized",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.workspace":e=>{let{id:t,name:n,rank:r}=e.payload,o=te.workspace(t,n,r),i=b.createNode(o);return l(i)?P(i.message??"Failed to add workspace",e):Ln(i.value)?c("Added workspace",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.board":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=b.createNode(te.board(t,n,r,o));return l(i)?P(i.message??"Unable to create board",e):jr(i.value)?c("Added board",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.swimlane":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=b.createNode(te.swimlane(t,n,r,o));return l(i)?P(i.message??"Unable to create swimlane",e):Qe(i.value)?c("Added swimlane",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.issue":e=>{let{id:t,name:n,parent:r,rank:o}=e.payload,i=b.createNode(te.ticket(t,n,r,o));return l(i)?P(i.message??"Unable to create issue",e):le(i.value)?c("Added issue",{action:e.action,result:i.value}):s("Unexpected create node return value")},"add.field":e=>{let{id:t,name:n,parent:r,val:o,rank:i}=e.payload,a=b.createNode(te.field(t,n,r,i,{value:o},n.includes("Description")?"vertical":"horizontal"));return l(a)?P(a.message??`Unable to create field: ${n}`,e):Vr(a.value)?c("Added field",{action:e.action,result:a.value}):s("Unexpected create node return value")},"edit.title":e=>{let{id:t,name:n}=e.payload;if(!b.getNode(t))return P(`Unable to locate node with id ${t}`,e);let o=b.renameNode(t,n);return l(o)?P(o.message??"Unable to edit title",e):c("Edited title",{action:e.action,result:o.value})},"delete.node":e=>{let{id:t}=e.payload,n=b.tombstoneNode(t);return l(n)?P(n.message??"Unable to delete node",e):c("Deleted node",{action:e.action,result:n.value})},"create.tag":e=>{let{id:t,name:n}=e.payload,r=b.createTag({id:t,name:n});return l(r)?P(r.message??"Unable to create tag",e):c("Tag added",{action:e.action,result:r.value})},"create.contributor":e=>{let{id:t,name:n}=e.payload,r=b.createContributor({id:t,name:n});return l(r)?P(r.message??"Unable to create contributor",e):c("Contributor created",{action:e.action,result:r.value})},"tag.issue":e=>{let{id:t,target:n,tagId:r,rank:o}=e.payload,i=b.tag(n,r,t,o);return l(i)?P(i.message??"Unable to tag issue",e):c("Issue tagged",{action:e.action,result:i.value})},"untag.issue":e=>{let{target:t,tagId:n}=e.payload,r=b.untag(t,n);return l(r)?P(r.message??"Unable to untag ",e):c("Issue untagged",{action:e.action,result:r.value})},"assign.issue":e=>{let{id:t,contributor:n,target:r,rank:o}=e.payload,i=b.assign(r,n,t,o);return l(i)?P(i.message??"Unable to assign issue",e):c("Assigned successfully",{action:e.action,result:i.value})},"unassign.issue":e=>{let{target:t,contributor:n}=e.payload,r=b.unassign(t,n);return l(r)?P(r.message??"Unable to unassign issue",e):c("Issue unassigned",{action:e.action,result:r.value})},"move.node":e=>{let{id:t,parent:n,rank:r}=e.payload,o=b.moveNodeToRank({id:t,parentId:n,rank:r});return l(o)?P(o.message??"Failed to move node",e):c("Moved node",{action:e.action,result:o.value})},"edit.description":e=>{let{id:t,md:n}=e.payload,r=b.editValue(t,n);return l(r)?P(r.message??"Unable to edit description",e):c("Set node value",{action:e.action,result:r.value})},"close.issue":e=>{let{id:t,parent:n,rank:r}=e.payload,o=b.getNode(t);if(!o)return P("Unable to locate issue",e);if(!le(o))return P("Can only close issues",e);let i=b.getNode(be);if(!i)return P("Unable to locate target swimlane",e);if(n!==i.id)return P("Close target must be closed swimlane",e);let a=b.moveNodeToRank({id:t,parentId:n,rank:r});return l(a)?P(a.message??"Unable to close issue",e):c("Issue closed",{action:e.action,result:{id:t}})},"reopen.issue":e=>{let{id:t,parent:n,rank:r}=e.payload,o=b.getNode(t);if(!o)return P("Unable to locate issue",e);if(!le(o))return P("Can only reopen issues",e);let i=b.getNode(be);if(!i)return P("Unable to locate closed swimlane",e);if(n===i.id)return P("Cannot reopen issue into closed swimlane",e);if(!b.getNode(n))return P("Reopen parent no longer exists",e);let d=b.moveNodeToRank({id:t,parentId:n,rank:r});return l(d)?P(d.message??"Unable to reopen issue",e):c("Issue reopened",{action:e.action,result:{id:t}})},"lock.node":e=>{let{id:t}=e.payload,n=b.lockNode(t);return l(n)?P(n.message??"Unable to lock node",e):c("Node locked",{action:e.action,result:n.value})},"rebalance.children":e=>{let{parent:t,ranks:n}=e.payload;for(let[r,o]of Object.entries(n)){let i=b.getNode(r);if(!i)return P(`Unable to locate node ${r}`,e);if(i.parentNodeId!==t)return P(`Node ${r} is not child of ${t}`,e);let a=b.updateNode({...i,rank:o});if(l(a))return P(a.message??"Unable to rebalance child",e)}return c("Rebalanced children",{action:e.action,result:{parent:t}})}},Qs=(e,t)=>{let n=b.getNode(e);n&&b.updateNode({...n,log:[...n.log??[],t]})},ea=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=v().nodes[e.payload.id]?.parentNodeId;return n&&t.push(n),t;case"tag.issue":case"untag.issue":case"assign.issue":case"unassign.issue":return[e.payload.id,e.payload.target];case"create.tag":case"create.contributor":default:return[]}};function ft(e,t=!1){let n=Zs[e.action](e);if(l(n))return n;t||([...new Set(ea(e))].forEach(a=>Qs(a,e)),se(a=>({...a,eventLog:[...a.eventLog,e]})));let r=e.userId,o=e.userName;return!r?.length||!o?.length?P("Invalid user ID format",e):(b.createContributor({name:o,id:r}),n)}var Ge=e=>e.map(t=>ft(t));import ma from"node:fs";import pa from"node:path";import{decodeTime as ga,monotonicFactory as fa}from"ulid";import{z as yt}from"zod";var $t={autoSync:!1,preferredEditor:null,userName:null,userId:null},ge=()=>$t,et=e=>($t={...$t,...e},$t);import Bn from"node:fs";import tt from"node:path";var Un=process.env.IS_LOCAL==="true",Oe=".epiq",ce=".epiq-global",_t="events",ta="epiq",to=e=>tt.join(e,ta),na=e=>tt.join(e,Oe),vt=e=>tt.join(na(e),_t),ra=e=>{let t=tt.join(e,Oe);return Bn.existsSync(t)&&Bn.statSync(t).isDirectory()},fe=e=>{let t=tt.resolve(e);for(;;){if(ra(t))return c("Resolved closest .epiq root",t);let n=tt.dirname(t);if(n===t)return s("No .epiq directory found in any parent");t=n}},no=e=>{let t=vt(e);try{return Bn.mkdirSync(t,{recursive:!0}),c("Resolved events dir",t)}catch(n){return s(n instanceof Error?`Failed to ensure events dir: ${n.message}`:"Failed to ensure events dir")}};import Wt from"node:fs";import _n from"node:path";import{decodeTime as oa}from"ulid";import{z as $n}from"zod";var ia=$n.object({userId:$n.string().min(1).default("unknown"),userName:$n.string().min(1).default("unknown")}),sa=e=>{let[t,n]=_n.basename(e,".jsonl").split("."),r=ia.safeParse({userId:t,userName:n});return r.success?c("Parsed event file actor",r.data):s(`Invalid event file name ${_n.basename(e)}: ${r.error.issues.map(o=>o.path.join(".")||o.message).join(", ")}`)},aa=e=>{let t=Object.keys(e).filter(n=>n!=="id"&&n!=="v");return t.length!==1?s(`Invalid persisted event: expected exactly 1 action key, 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])},da=(e,t)=>t in e,la=({id:e,action:t,payload:n,userId:r,userName:o})=>({id:e,action:t,payload:n,userId:r,userName:o}),ca=e=>{let{userId:t,userName:n,...r}=e,o=aa(r);if(l(o))return s(o.message);let i=o.value,a=e.id?.[0];return a?da(r,i)?c("Decoded persisted event",la({id:a,action:i,payload:r[i],userId:t,userName:n})):s(`Persisted event is missing payload for action: ${i}`):s("Persisted event is missing id")},Ht=e=>{if(!Wt.existsSync(e))return c("Event file missing",[]);let t=sa(e);if(l(t))return s(t.message);let n=Wt.readFileSync(e,"utf8"),r=[];for(let o of n.split(`
3
+ `)){let i=o.trim();if(!i)continue;let a;try{a=JSON.parse(i)}catch{return s(`Failed to parse event JSON from ${e}: ${i}`)}let d=Wn(a);if(l(d))return s(`${d.message} in ${e}: ${i}`);r.push({...d.value,userId:t.value.userId,userName:t.value.userName})}return c("Parsed persisted events file",r)};function ro(e){let t=vt(e);if(!Wt.existsSync(t))return s("No events found");let n=Wt.readdirSync(t).filter(o=>o.endsWith(".jsonl")).map(o=>_n.join(t,o)),r=[];for(let o of n){let i=Ht(o);if(l(i))return s(i.message);r.push(...i.value)}return c("All events loaded",ua(r))}function xt(e){let t=ro(e);if(l(t))return s(t.message);let n=[];for(let r of t.value){let o=ca(r);if(l(o))return s(`Failed to decode event ${r.id?.[0]??"<unknown>"}: ${o.message}`);n.push(o.value)}return c("Loaded merged events",n)}function oo(e=process.cwd()){let t=ro(e);return l(t)?s(t.message):c("Loaded edge reference",t.value.at(-1)?.id?.[0]??null)}var ua=e=>{let t=new Map;for(let d of e){let u=d.id[1]??null,m=t.get(u)??[];m.push(d),t.set(u,m)}for(let d of t.values())d.sort((u,m)=>u.id[0].localeCompare(m.id[0]));let n=[],r=new Set;a(t.get(null)??[]);let o=!0;for(;o;){o=!1;for(let d=0;d<n.length;d++){let u=n[d];if(!u)continue;let m=(t.get(u.id[0])??[]).filter(p=>!r.has(p.id[0]));if(m.length!==0){n.splice(d+1,0,...m);for(let p of m)r.add(p.id[0]);o=!0,d+=m.length}}}let i=e.filter(d=>!r.has(d.id[0])).sort((d,u)=>d.id[0].localeCompare(u.id[0]));return n.push(...i),n;function a(d){for(let u of d)r.has(u.id[0])||(n.push(u),r.add(u.id[0]))}},io=(e,t)=>{let n=e.findIndex(r=>{try{return oa(r.id)>t}catch{return!0}});return n===-1?{appliedEvents:e,unappliedEvents:[]}:{appliedEvents:e.slice(0,n),unappliedEvents:e.slice(n)}};var so=e=>({action:e.action,payload:e.payload});var lo=1,ao=fa(),va=yt.tuple([yt.string().min(1),yt.string().min(1).nullable()]),xa=yt.looseObject({v:yt.literal(lo),id:va}),Wn=e=>{let t=xa.safeParse(e);return t.success?c("Parsed persisted event",t.data):s(`Invalid persisted event: ${t.error.issues.map(n=>n.path.join(".")||n.message).join(", ")}`)},Kt=e=>e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown",Z=()=>{let{userName:e,userId:t}=ge();return e?t?e.trim()?c("Successfully resolved actor ID",{userId:Kt(t),userName:Kt(e)}):s("Unable to resolve actor ID from settings or OS user info"):s("User ID not configured"):s("User name not configured")},Hn=({userId:e,userName:t})=>`${Kt(e)}.${Kt(t)}.jsonl`,ya=(e,{userId:t,userName:n})=>{let r=Hn({userId:t,userName:n});if(!/^(?!.*\.jsonl.*\.jsonl).*\.jsonl$/.test(r))return s(`Invalid event log file name: ${r}`);let i=pa.join(vt(e),r);return c("Successfully resolved event log path",i)},ha=(e,t)=>{let n={[e.action]:e.payload,v:lo,id:t};return Wn(n)};function Vt({event:e,rootDir:t=process.cwd()}){try{let n=fe(t);if(l(n))return n;let r=no(n.value);if(l(r))return r;let o=ya(n.value,{userId:e.userId,userName:e.userName});if(l(o))return o;let i=oo(n.value);if(l(i))return s(i.message);let a=i.value?ao(Math.max(Date.now(),ga(i.value)+1)):ao(),d=ha(so(e),[a,i.value]);return l(d)?s(d.message):(ma.appendFileSync(o.value,`${JSON.stringify(d.value)}
4
+ `,"utf8"),c("Event persisted",{path:o.value,entry:d.value}))}catch(n){let r=n instanceof Error?n.message:"Unknown persist error";return s(`Failed to persist event: ${r}`)}}function j(e){let t=ft(e);if(t.status!==Ee.Success)return t;let n=Vt({event:e});return l(n)?n:t}function co(e){return e.map(t=>j(t))}var uo=e=>Kn(O(e),{at:"end"}),Kn=(e,t={at:"end"})=>{let n=r=>l(r)?c("Rank space exhausted",{rank:"",needsRebalance:!0}):c("Resolved rank",{rank:r.value,needsRebalance:!1});if(e.length===0)return n(G(void 0,void 0));switch(t.at){case"start":{let r=e[0];return r?n(G(void 0,r.rank)):s("Unable to resolve first sibling")}case"end":{let r=e[e.length-1];return r?n(G(r.rank,void 0)):s("Unable to resolve last sibling")}case"before":{let r=mo(e,t.sibling);if(r<0)return s("Sibling not found");let o=r>0?e[r-1]:void 0,i=e[r];return i?n(G(o?.rank,i.rank)):s("Sibling not found")}case"after":{let r=mo(e,t.sibling);if(r<0)return s("Sibling not found");let o=e[r],i=r<e.length-1?e[r+1]:void 0;return o?n(G(o.rank,i?.rank)):s("Sibling not found")}}},O=e=>Object.values(v().nodes).filter(t=>!!t&&!t.isDeleted&&t.parentNodeId===e).sort((t,n)=>t.rank.localeCompare(n.rank)),mo=(e,t)=>e.findIndex(n=>n.id===t),po=(e,t,n={at:"end"})=>Kn(O(t).filter(r=>r.id!==e),n),nt=(e,t,n,r)=>{let o=po(t,e,n);if(l(o))return o;if(!o.value.needsRebalance)return c("Resolved rank",o.value.rank);let i=Fn(e,r);if(l(i))return i;let a=j(i.value);if(l(a))return a;let d=po(t,e,n);return l(d)?d:d.value.needsRebalance?s("Rank rebalance failed to create space"):c("Resolved rank after rebalance",d.value.rank)},rt=(e,t)=>{let n=uo(e);if(l(n))return n;if(!n.value.needsRebalance)return c("Resolved rank",n.value.rank);let r=Fn(e,t);if(l(r))return r;let o=j(r.value);if(l(o))return o;let i=uo(e);return l(i)?i:i.value.needsRebalance?s("Rank rebalance failed to create space"):c("Resolved rank after rebalance",i.value.rank)};var Be=(e,t)=>{let{nodes:n}=v(),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}`)},jn=(e,t)=>{let{nodes:n}=v(),r=n[e];for(;r?.parentNodeId;){if(r.parentNodeId===t)return!0;r=n[r.parentNodeId]}return!1},Vn=(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"),b={deleteNode(e){se(t=>{let n={...t.nodes};return delete n[e],{...t,nodes:n}})},editValue(e,t){let{nodes:n}=v(),r=n[e];if(!r)return s("Edit target node not found");let o=Vn(r,"edit");if(o)return o;let i={...r,props:{...r.props,value:t}};return this.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=Vn(n,"rename");if(r)return r;let o={...n,title:t};return this.updateNode(o),c("Renamed node",o)},getExistingTags(){let{tags:e}=v();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getExistingAssignees(){let{contributors:e}=v();return[...new Set(Object.values(e).map(t=>t.name).filter(Boolean))]},getFieldByTitle(e,t){return O(e).find(n=>n.title===t)},moveNodeToRank({id:e,parentId:t,rank:n}){let{rootNodeId:r}=v(),o=this.getNode(e),i=this.getNode(t);if(!o)return s("Node not found");if(!i)return s("Target parent not found");if(r===e)return s("Cannot move root node");if(e===t)return s("Cannot move node into itself");let a=Vn(o,"move");if(a)return a;if(jn(t,e))return s("Cannot move node into its own descendant");let d={...o,parentNodeId:t,rank:n};return this.updateNode(d),c("Moved node successfully",d)},tombstoneNode(e){let{nodes:t,currentNodeId:n,rootNodeId:r}=v(),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 m=t[u];if(!(!m||i.has(u))){i.add(u);for(let p of O(m.id))a(p.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}}return n?(T({nodes:d}),c("Successfully tomb stoned",o)):s("Unable to delete undefined")},createContributor(e){let t=se(n=>({...n,contributors:{...n.contributors,[e.id]:e}}));return l(t)?s("Unable to create contributor"):c("Created contributor",e)},assign(e,t,n,r){let o=this.getContributor(t),i=this.getNode(e);if(!i||!o)return s("Unable assign contributor to issue");let a=this.getFieldByTitle(i.id,"Assignees");if(!a)return s("Unable to locate assignees field");if(O(a.id).some(p=>p.props?.value===t))return s("Contributor already assigned");let u=te.field(n,o.name,a.id,r,{value:t}),m=this.createNode(u);return l(m)?m:c("Assigned contributor",u)},createTag(e){let t=se(n=>({...n,tags:{...n.tags,[e.id]:e}}));return l(t)?s("Could not create tag"):c("Tag created",e)},tag(e,t,n,r){let o=this.getTag(t),i=this.getNode(e);if(!o)return s("Unable to add tag, missing tag");if(!i)return s("Unable to add tag, missing target");let a=this.getFieldByTitle(i.id,"Tags");if(!a)return s("Unable to locate tags field");if(O(a.id).some(p=>p.props?.value===t))return s("Tag already assigned");let u=te.field(n,o.name,a.id,r,{value:t}),m=this.createNode(u);return l(m)?m:c("Tag added",u)},untag(e,t){let n=this.getTag(t),r=this.getNode(e);if(!n)return s("Unable to remove tag, missing tag");if(!r)return s("Unable to remove tag, missing target");let o=this.getFieldByTitle(r.id,"Tags");if(!o)return s("Unable to locate tags field");let i=O(o.id).find(d=>d.props?.value===t);if(!i)return c("Issue is not tagged with that tag",null);let a={...i,isDeleted:!0};return this.updateNode(a),c("Tag removed",a)},unassign(e,t){let n=this.getContributor(t),r=this.getNode(e);if(!n)return s("Unable to unassign, missing contributor");if(!r)return s("Unable to unassign, missing target");let o=this.getFieldByTitle(r.id,"Assignees");if(!o)return s("Unable to locate assignees field");let i=O(o.id).find(d=>d.props?.value===t);if(!i)return c("Issue is not assigned to that contributor",null);let a={...i,isDeleted:!0};return this.updateNode(a),c("Assignee removed",a)},createNode(e){let t=se(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?s("Unable to create node"):c("Node created",e)},lockNode(e){let t=this.getNode(e);if(!t)return s("Failed to locate node");let n={...t,readonly:!0},r=se(o=>({...o,nodes:{...o.nodes,[e]:n}}));return l(r)?s(r.message):c("Locked node",n)},updateNode(e){let t=se(n=>({...n,nodes:{...n.nodes,[e.id]:e}}));return l(t)?t:c("Updated node",e)},getContributor(e){return v().contributors[e]},getTag(e){return v().tags[e]},getNode(e){return v().nodes[e]},getSiblings(e){return O(e)}};var jt=()=>{let e=ge(),t=!!e.userName?.trim(),n=!!e.preferredEditor?.trim();return{isSetup:n&&t,hasPreferredEditor:n,hasUserName:t,userName:e.userName,preferredEditor:e.preferredEditor}},go=()=>!ze();var Y={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"},E={accent:Y.cyan,accent2:Y.magenta,primary:Y.white,secondary:Y.grayDark,secondary2:Y.grayLight,gray:Y.gray,green:Y.green,yellow:Y.yellow,red:Y.red};var h={red:Y.red,yellow:Y.yellow,green:Y.green,blue:Y.blue,magenta:Y.magenta,cyan:Y.cyan},ot={urgent:h.red,critical:h.red,important:h.red,blocker:h.red,asap:h.red,immediate:h.red,fail:h.red,failure:h.red,broken:h.red,bug:h.red,error:h.red,incident:h.red,outage:h.red,production:h.red,crash:h.red,security:h.red,warning:h.yellow,warn:h.yellow,risky:h.yellow,risk:h.yellow,attention:h.yellow,pending:h.yellow,review:h.yellow,"needs-review":h.yellow,qa:h.yellow,testing:h.yellow,test:h.yellow,validate:h.yellow,verification:h.yellow,staging:h.yellow,check:h.yellow,"follow-up":h.yellow,followup:h.yellow,waiting:h.yellow,blocked:h.yellow,hold:h.yellow,done:h.green,complete:h.green,completed:h.green,success:h.green,ok:h.green,stable:h.green,resolved:h.green,fixed:h.green,closed:h.green,merged:h.green,released:h.green,deployed:h.green,approved:h.green,verified:h.green,working:h.green,healthy:h.green,pass:h.green,passing:h.green,info:h.blue,information:h.blue,note:h.blue,docs:h.blue,documentation:h.blue,doc:h.blue,guide:h.blue,help:h.blue,explanation:h.blue,detail:h.blue,details:h.blue,context:h.blue,design:h.blue,discussion:h.blue,proposal:h.blue,idea:h.blue,feature:h.magenta,enhancement:h.magenta,improvement:h.magenta,refactor:h.magenta,refactoring:h.magenta,cleanup:h.magenta,optimize:h.magenta,optimization:h.magenta,perf:h.magenta,performance:h.magenta,upgrade:h.magenta,migration:h.magenta,modernize:h.magenta,debt:h.magenta,todo:h.cyan,next:h.cyan,planned:h.cyan,plan:h.cyan,future:h.cyan,backlog:h.cyan,investigate:h.cyan,explore:h.cyan,prototype:h.cyan};var fo=(e,t)=>{let r=R(e.id).find(o=>o.title===t);return r?R(r.id).map(o=>typeof o.props?.value=="string"?o.props.value:"").filter(o=>!!o):[]},Gn=e=>fo(e,"Tags").map(t=>b.getTag(t)).filter(t=>!!t),Gt=()=>{let{breadCrumb:e,selectedNode:t}=v(),n=[...e,t].find(r=>r?.context==="TICKET");return!n||!le(n)?s("Invalid untag target"):c("Retrieved tags from ticket in breadcrumb",Gn(n)??[])},zt=()=>{let{breadCrumb:e,selectedNode:t}=v(),n=[...e,t].find(r=>r?.context==="TICKET");return!n||!le(n)?s("Invalid untag target"):c("Retrieved tags from ticket in breadcrumb",zn(n)??[])},zn=e=>fo(e,"Assignees").map(t=>b.getContributor(t)).filter(t=>!!t);var f={EXIT:"exit",INIT:"init",HELP:"help",NEW:"new",TAG:"tag",UNTAG:"untag",MOVE:"move",PEEK:"peek",FILTER:"filter",ASSIGN:"assign",UNASSIGN:"unassign",DELETE:"delete",RENAME:"rename",CLOSE_ISSUE:"close",RE_OPEN_ISSUE:"reopen",SET_DESCRIPTION:"edit",SET_EDITOR:"config:editor",SET_VIEW:"config:view",SET_USERNAME:"config:username",SYNC:"sync",EXPORT:"export",NONE:""};var Ea=/^(\d+)(h|d|w|mo|y)$/,Na=/^(\d{4})-(\d{2})-(\d{2})(?:(?::|\s)(\d{2}):(\d{2}))?$/,Ca=({year:e,month:t,day:n,hour:r=0,minute:o=0})=>{let i=new Date(e,t-1,n,r,o);return i.getFullYear()===e&&i.getMonth()===t-1&&i.getDate()===n&&i.getHours()===r&&i.getMinutes()===o},ba=(e,t=new Date)=>{let n=e.match(Ea);if(!n)return null;let[,r,o]=n,i=Number(r);if(!Number.isInteger(i)||i<=0)return null;let a=new Date(t);switch(o){case"h":return a.setHours(a.getHours()-i),a;case"d":return a.setDate(a.getDate()-i),a;case"w":return a.setDate(a.getDate()-i*7),a;case"mo":return a.setMonth(a.getMonth()-i),a;case"y":return a.setFullYear(a.getFullYear()-i),a;default:return null}},Ia=e=>{let t=e.match(Na);if(!t)return null;let[,n,r,o,i,a]=t,d=Number(n),u=Number(r),m=Number(o),p=i?Number(i):0,y=a?Number(a):0;return Ca({year:d,month:u,day:m,hour:p,minute:y})?new Date(d,u-1,m,p,y):null},qt=e=>{let t=e.trim().toLowerCase();return ba(t)??Ia(t)},vo=({date:e,horizonDate:t})=>t?e.getTime()>=t.getTime():!0,Sa=[{unit:"h",from:1,to:24},{unit:"d",from:1,to:7},{unit:"w",from:1,to:52},{unit:"mo",from:1,to:12},{unit:"y",from:1,to:5}],xo=(e=Sa)=>{let t=[];for(let{unit:n,from:r,to:o}of e)for(let i=r;i<=o;i++)t.push(`${i}${n}`);return t};var Aa=["BOARD","TICKET","SWIMLANE"],qe=[f.SYNC,f.HELP,f.EXPORT,f.SET_VIEW,f.SET_EDITOR,f.SET_USERNAME],Yt=[f.NEW,f.RENAME,f.DELETE,f.MOVE],qn=[f.TAG,f.UNTAG,f.ASSIGN,f.UNASSIGN,f.CLOSE_ISSUE,f.RE_OPEN_ISSUE,f.SET_DESCRIPTION],yo=[f.FILTER,f.PEEK],Ta={WORKSPACE:[...qe,...Yt],BOARD:[...yo,...qe,...Yt],SWIMLANE:[...yo,...qe,...Yt],TICKET:[...qe,...Yt,...qn],FIELD:[...qe,...qn],FIELD_LIST:[...qe,...qn],TEXT:[...qe]},wa=e=>e==="WORKSPACE"?["board"]:["issue","swimlane","board"],Ra=()=>{let{currentNode:e,selectedNode:t,readOnly:n}=v();if(!jt().isSetup)return[f.HELP,f.SET_EDITOR,f.SET_USERNAME];if(!go())return[f.HELP,f.INIT];if(n)return[f.HELP,f.PEEK,f.EXPORT,f.SET_VIEW];let o=e.context??"WORKSPACE",i=t?.context,a=i&&Aa.includes(i);return Ta[o].filter(d=>d===f.RENAME||d===f.DELETE||d===f.MOVE?a:!0)},z=e=>{let{currentNode:t}=v(),n=t.context??"WORKSPACE";return{[f.NONE]:Ra(),[f.EXIT]:["confirm"],[f.EXPORT]:[],[f.SYNC]:[],[f.INIT]:[],[f.HELP]:[],[f.PEEK]:[...xo(),"now","prev","next"],[f.SET_USERNAME]:[],[f.SET_DESCRIPTION]:["confirm"],[f.DELETE]:["confirm"],[f.RE_OPEN_ISSUE]:["confirm"],[f.CLOSE_ISSUE]:["confirm"],[f.MOVE]:["start","confirm","next","previous","to-next","to-previous","cancel"],[f.FILTER]:["tag","assignee","description","title","clear"],[f.SET_VIEW]:["dense","wide"],[f.SET_EDITOR]:[...Jr],[f.TAG]:[...new Set([...Object.keys(ot),...b.getExistingTags()])],[f.UNTAG]:[...Gt()?.value?.map(({name:o})=>o)??[]],[f.UNASSIGN]:[...zt()?.value?.map(({name:o})=>o)??[]],[f.ASSIGN]:b.getExistingAssignees(),[f.RENAME]:[],[f.NEW]:wa(n)}[e]??[]};import st from"chalk";import{decodeTime as ho}from"ulid";var Eo=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"},No=e=>{let t=n=>String(n).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())} ${t(e.getHours())}:${t(e.getMinutes())}`},Xt=e=>{try{return c("Decoded date",new Date(ho(e)))}catch(t){return s("Decoding failed + "+t.message)}},Yn=e=>{if(!e?.id)return null;try{return ho(e.id)}catch{return null}};var Ie=(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 it from"chalk";var Jn={stringColor:{saturation:50,lightness:60},gradient:{stops:[[174,150,240],[92,138,232],[102,204,226]]}},Ma=(e,t,n)=>Math.max(t,Math.min(n,e)),Xn=(e,t,n)=>e+(t-e)*n,Co=e=>{let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t},ka=(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)),u=0,m=0,p=0;a>=0&&a<1?(u=i,m=d):a>=1&&a<2?(u=d,m=i):a>=2&&a<3?(m=i,p=d):a>=3&&a<4?(m=d,p=i):a>=4&&a<5?(u=d,p=i):(u=i,p=d);let y=o-i/2;return[Math.round((u+y)*255),Math.round((m+y)*255),Math.round((p+y)*255)]},Pa=([e,t,n])=>`#${e.toString(16).padStart(2,"0")}${t.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`,La=(e,t,n)=>[Math.round(Xn(e[0],t[0],n)),Math.round(Xn(e[1],t[1],n)),Math.round(Xn(e[2],t[2],n))],ht=e=>{let n=Co(e)%360,r=ka(n,Jn.stringColor.saturation,Jn.stringColor.lightness);return Pa(r)},Da=e=>{let t=Jn.gradient.stops,n=Ma(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 La(t[i],t[i+1],a)},Jt=e=>Co(e.toLowerCase().trim())/4294967295,bo=e=>{let t=Jt(e);return Da(t)},Fa=e=>{let[t,n,r]=bo(e);return{normal:o=>it.bgRgb(t,n,r).black(o),cursor:o=>it.bgRgb(t,n,r).white.bold(o)}},Zn=e=>{let[t,n,r]=bo(e);return{fg:o=>it.rgb(t,n,r)(o),fgCursor:o=>it.rgb(t,n,r).inverse(o),bg:o=>it.bgRgb(t,n,r).black(o),bgCursor:o=>it.bgRgb(t,n,r).white.bold(o)}},Qn=e=>Fa(e).normal(` ${e} `),X=(e,t=ot)=>{let r=(o=>o.toLowerCase().trim())(e);return r&&t[r]?t[r]:ht(r)};var Se={None:"none",Invalid:"invalid",Valid:"valid"};var Oa=["BOARD","TICKET","SWIMLANE"],er=()=>{let e=v().selectedNode;return e?.context?Oa.includes(e?.context)?H():$({message:"Command not available in this context"}):$({message:"Missing target context"})},Q="<ENTER> to confirm",H=(e="",t=[])=>({message:e,validity:Se.Valid,completionWordList:t}),$=({message:e,completionWordList:t=[]})=>({validity:Se.Invalid,message:e,completionWordList:t}),Nt=e=>e.length===0,Ue=({prefix:e="",wordList:t,postfix:n="",noOfHints:r=100,inputString:o,minLengthForHints:i=1})=>{let u=[...t.filter(Boolean).filter(p=>p.startsWith(o.trim()))].sort((p,y)=>Jt(p)-Jt(y)).slice(0,r).map(Qn),m=u.length>i?u.join(" "):"";return m?`${e}${m}${n}`:""},tr=({modifier:e})=>{let t="confirm";return e===t?H(Q):$({message:Nt(e)?`if you are certain, enter ${Qn(t)}`:"",completionWordList:[t]})},Ba=({list:e,hint:t})=>({modifier:n})=>e.includes(n)?H(Q):$({message:Nt(n)?t:""}),Ua=({list:e,hint:t,onValue:n})=>({modifier:r,inputString:o})=>e.includes(r)?o.trim().length<1?$({message:n}):H():$({message:Nt(r)?t:""}),Et=({hint:e})=>({modifier:t,inputString:n})=>Nt(t)&&Nt(n)?$({message:e,completionWordList:[]}):H(Q),$a={[f.EXPORT]:()=>H(Q+", and create export markdown file"),[f.PEEK]:e=>{let t=e.modifier;if(t==="now")return H(Q);let n={message:"historical state from: '1h', '2d', '23h', '1mo', '2y', 'previous', 'next' or full date as YYYY-MM-DD"};if(t==="prev"||t==="next")return H(Q);let r=qt(t);if(!t||!r)return $(n);let o=Ie(v().breadCrumb,"BOARD");if(l(o))return $({message:"Command is not applicable in this context"});let i=Xt(o.value.id);return l(i)?$({message:"Unable to peek: board id is not a valid ULID"}):vo({date:r,horizonDate:i.value})?H(Q):$({message:st.red(`nothing to peek before ${i.value.toISOString().slice(0,16).replace("T"," ")}`)})},[f.EXIT]:()=>H(Q+" and exit the application"),[f.INIT]:()=>H(Q),[f.FILTER]:e=>{if(e.modifier==="clear")return H();let t=a=>z(f.FILTER).includes(a);if(!e.modifier||!t(e.modifier??""))return $({message:Ue({wordList:z(f.FILTER),inputString:e.inputString}),completionWordList:z(f.FILTER)});let r=Object.values(v().tags).map(a=>a.name),o=Object.values(v().contributors).map(a=>a.name),i=e.modifier==="tag"?r:e.modifier==="assignee"?o:[];return e.inputString?i.length&&!i.includes(e.inputString.trim()??"")?$({message:Ue({prefix:`existing ${e.modifier}s... `,wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i}):H():$({message:Ue({prefix:"one of... ",wordList:i,noOfHints:10,inputString:e.inputString}),completionWordList:i})},[f.NONE]:e=>{let t=z(f.NONE),n=/^[A-Za-z_]+:/g,r=e.inputString.match(n);return r&&r.length?t=[...t.filter(o=>o.trim().match(n))]:t=[...new Set(t.flatMap(o=>o.match(n)?.join("").replace(":","")??o))],e.command?H():$({message:Ue({prefix:"... ",wordList:t,inputString:e.inputString,minLengthForHints:0})})},[f.NEW]:e=>Ua({list:z(f.NEW),hint:Ue({wordList:z(f.NEW),noOfHints:3,inputString:e.inputString,minLengthForHints:0}),onValue:"provide a name..."})(e),[f.SET_DESCRIPTION]:()=>H(Q),[f.HELP]:()=>H(Q),[f.RENAME]:()=>{let e=er();return e.validity==="invalid"?e:H(Q)},[f.DELETE]:e=>{let t=er();return t.validity==="invalid"?t:tr(e)},[f.CLOSE_ISSUE]:e=>tr(e),[f.RE_OPEN_ISSUE]:e=>tr(e),[f.MOVE]:e=>{let t=er();return t.validity==="invalid"?t:Et({hint:Ue({prefix:"hey hacker! These commands are blocked for you... ",wordList:z(f.MOVE),noOfHints:10,inputString:e.inputString})})(e)},[f.TAG]:e=>{let t=b.getExistingTags().map(n=>` ${st.bgHex(X(n))(" "+n+" ")} `).slice(0,10);return Et({hint:"tag name like... "+t.join("")})(e)},[f.UNTAG]:e=>{let t=Gt();if(l(t))return $({message:"Invalid untag target",completionWordList:[]});let n=t.value.map(({name:r})=>r).map(r=>` ${st.bgHex(X(r))(" "+r+" ")} `).slice(0,10);return n.length?Et({hint:" ... "+n.join("")})(e):$({message:"Issue has not tags",completionWordList:[]})},[f.ASSIGN]:e=>{let t=b.getExistingAssignees().map(n=>` ${st.bgHex(X(n))(" "+n+" ")} `).slice(0,10);return Et({hint:"assign to... "+t.join("")})(e)},[f.UNASSIGN]:e=>{let t=zt();if(l(t))return $({message:"Invalid unassign target",completionWordList:[]});let n=t.value.map(({name:r})=>r).map(r=>` ${st.bgHex(X(r))(" "+r+" ")} `).slice(0,10);return n.length?Et({hint:"remove assignee... "+n.join("")})(e):$({message:"Issue has no assignees",completionWordList:[]})},[f.SET_EDITOR]:e=>{logger.debug(`Validating command: ${e.command} ${e.modifier} ${e.inputString}`);let t=z(f.SET_EDITOR);return e.modifier?H(Q):$({message:Ue({wordList:t,inputString:e.inputString})})},[f.SET_USERNAME]:e=>e.inputString?H():$({message:`Enter a username. Saved in ${st.bgBlack("~/.epiq-global/")}`}),[f.SET_VIEW]:e=>Ba({list:z(f.SET_VIEW),hint:Ue({wordList:z(f.SET_VIEW),noOfHints:3,inputString:e.inputString})})(e),[f.SYNC]:()=>H(Q)},Io=Object.fromEntries(Object.entries($a).map(([e,t])=>[e,{validate:(n,r,o)=>t({modifier:r,command:n,inputString:o})}]));var So=["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={Exit:"exit",Init:"init",None:"none",ViewHelp:"view-help",Rename:"rename",Edit:"edit",Delete:"delete",Filter:"filter",Move:"move",Peek:"peek",SetView:"set-view",SetEditor:"set-editor",SetUserName:"set-user-name",SetAutoSync:"set-auto-sync",NewItem:"add-new-item",TagTicket:"ticket-tag",UntagTicket:"ticket-untag",AssignUserToTicket:"ticket-assign-user",UnassignUserFromTicket:"ticket-unassign-user",CloseIssue:"close-issue",ReopenIssue:"re-open-issue",Sync:"sync",Export:"export"};var Ao=e=>Object.values(f).includes(e),To=(e,t)=>{let n=e.command??"",{modifier:r,target:o,inputString:i}=e,{message:a,validity:d,completionWordList:u}=Io[n].validate(n,r,i),m=o==="command"?Object.values(f):n&&e.target==="modifier"?z(n):So;return{validity:d,command:e.command,modifier:e.modifier,inputString:e.inputString,infoMessage:a??"",autoCompletion:t?Xr(e,[...u,...m]):{hint:"",hints:[],remainder:"",overlap:0}}};var wo=e=>{let t=e.trimStart(),n=Wa(t),r=n[0]??"",o=n[1]??"",i=/\s$/.test(e),a=Ha(e),d=Ao(r)?r:null,u=d!==null,m=r!=="",p=d?z(d)??[]:[],y=d&&p.includes(o)?o:"",N="word";n.length===0||n.length===1&&!i?N="command":(n.length===1&&i||n.length===2&&!i)&&(N="modifier");let S=i?"":a,A=_a(t,d,y);return{raw:e,trimmedStart:t,words:n,firstWord:r,lastWord:a,hasCommand:m,command:d,isCommandKeyword:u,isLastWordCompleted:i,modifier:y,target:N,inputToMatch:S,inputString:A}},_a=(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},Wa=e=>e.trim()?e.trim().split(/\s+/):[],Ha=e=>e.trimEnd().split(/\s+/).at(-1)??"";var Ro=" ",J={commandHistory:[],value:"",commandHistoryIndex:-1,cursorPosition:0,commandIsPending:!1,commandMeta:{command:null,modifier:"",infoMessage:"",inputString:"",validity:Se.None,autoCompletion:{hint:"",hints:[],remainder:"",overlap:0}}},nr=new Set,Mo=()=>{for(let e of nr)e()},ko=e=>(nr.add(e),()=>nr.delete(e)),Ae=e=>{let n=e(J),r=wo(n.value),o=n.cursorPosition===n.value.length;J={...n,commandMeta:To(r,o)},Mo()},Ct=({message:e,status:t})=>{let n=structuredClone(J);return n.commandMeta={...n.commandMeta,infoMessage:e??"",validity:t==="fail"?"invalid":"valid"},n.commandIsPending=!0,J=n,Mo(),c(e,null)},rr=e=>{Ae(t=>({...t,cursorPosition:Math.max(0,Math.min(t.value.length,t.cursorPosition+e))}))},or=e=>{Ae(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}})},Po=()=>{Ae(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}})},Lo=()=>{Ae(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}})},V=e=>{Ae(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}})},Do=()=>{Ae(e=>({...e,commandIsPending:!0}))},Fo=({addToHistory:e=!0})=>{Ae(n=>({...n,commandHistory:e?[n.value,...n.commandHistory].slice(0,40):n.commandHistory,commandHistoryIndex:-1,commandIsPending:!1})),Ka()},Oo=()=>{Ae(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}})},Bo=()=>{Ae(e=>{let t=Math.max(e.commandHistoryIndex-1,-1),n=t===-1?"":e.commandHistory[t]??"";return{...e,commandHistoryIndex:t,value:n,cursorPosition:n.length}})},Ka=()=>V(()=>""),ne=()=>J,Zt=()=>{let[e,...t]=J.value.split(Ro);return t.join(Ro).trim()};var Va=(e,t)=>e.ctrl&&e.name==="w"||e.meta&&e.name==="backspace"||t==="",ja=(e,t)=>e.meta&&e.name==="b"||t==="\x1Bb",Ga=(e,t)=>e.meta&&e.name==="f"||t==="\x1Bf",Uo=(e,t)=>{if(ja(e,e.sequence))return x.MoveCursorLeftOfWord;if(Ga(e,e.sequence))return x.MoveCursorRightOfWord;if(Va(e,e.sequence))return x.EraseInputWord;switch(e.name){case"tab":return x.AutoCompleteCommand;case"up":return x.GetLastCommandFromHistory;case"down":return x.GetNextCommandFromHistory;case"left":return x.MoveCursorLeft;case"right":return x.MoveCursorRight;case"return":return x.Confirm;case"backspace":return t?x.EraseInput:x.ExitCommandLine;case"escape":return x.ExitCommandLine;default:return x.CaptureInput}};var x={Sync:"sync",NavPreviousItem:"navPreviousItem",NavNextItem:"navNextItem",NavToPreviousContainer:"navToPreviousContainer",NavToNextContainer:"navToNextContainer",MovePreviousItem:"movePreviousItem",MoveNextItem:"moveNextItem",MoveToPreviousContainer:"moveToPreviousContainer",MoveToNextContainer:"moveToNextContainer",Confirm:"confirm",Exit:"exit",ViewHelp:"viewHelp",HideHelp:"hideHelp",InitMove:"initMove",ConfirmMove:"confirmMove",Delete:"Delete",InitCommandLine:"initCommandLine",ExitCommandLine:"exitCommandLine",CaptureInput:"captureInput",EraseInput:"eraseInput",AddItem:"addItem",GetLastCommandFromHistory:"getLastCommandFromHistory",GetNextCommandFromHistory:"getNextCommandFromHistory",AutoCompleteCommand:"autoCompleteCommand",MoveCursorLeft:"MoveCursorLeft",MoveCursorRight:"MoveCursorRight",MoveCursorLeftOfWord:"MoveCursorLeftOfWord",MoveCursorRightOfWord:"MoveCursorRightOfWord",EraseInputWord:"EraseInputWord",None:"None",Edit:"edit",SetViewDense:"SetViewDense",SetViewWide:"SetViewWide"};function za(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 qa(e,t,n){let r=v().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 $o(e,t){let n=ne();if(e.sequence===":"&&n.value==="")return x.InitCommandLine;if(t===g.MOVE)switch(e.name){case"m":case"return":return x.ConfirmMove}if(t===g.COMMAND_LINE)return Uo(e,n.value);let r=za(e);if(r){let o=t===g.MOVE?{prevItem:x.MovePreviousItem,nextItem:x.MoveNextItem,prevContainer:x.MoveToPreviousContainer,nextContainer:x.MoveToNextContainer}:{prevItem:x.NavPreviousItem,nextItem:x.NavNextItem,prevContainer:x.NavToPreviousContainer,nextContainer:x.NavToNextContainer};return qa(v().currentNode.childRenderAxis,r,o)}if(e.ctrl&&e.name==="c")return x.Exit;switch(e.name){case"e":return x.Edit;case"n":return x.AddItem;case"m":return x.InitMove;case"d":return x.Delete;case"return":return x.Confirm;case"space":return x.Confirm;case"v":return v().viewMode==="wide"?x.SetViewDense:x.SetViewWide;case"q":case"escape":return x.Exit;case"s":return x.Sync;default:return null}}var _o=e=>{let{context:t}=v()?.currentNode;if(!t)return M.None;switch(e){case f.EXIT:return M.Exit;case f.EXPORT:return M.Export;case f.INIT:return M.Init;case f.DELETE:return M.Delete;case f.SET_DESCRIPTION:return M.Edit;case f.HELP:return M.ViewHelp;case f.RE_OPEN_ISSUE:return M.ReopenIssue;case f.CLOSE_ISSUE:return M.CloseIssue;case f.TAG:return M.TagTicket;case f.UNTAG:return M.UntagTicket;case f.ASSIGN:return M.AssignUserToTicket;case f.UNASSIGN:return M.UnassignUserFromTicket;case f.RENAME:return M.Rename;case f.NEW:return M.NewItem;case f.FILTER:return M.Filter;case f.MOVE:return M.Move;case f.PEEK:return M.Peek;case f.SET_USERNAME:return M.SetUserName;case f.SET_EDITOR:return M.SetEditor;case f.SET_VIEW:return M.SetView;case f.SYNC:return M.Sync;default:return M.None}};import{ulid as W}from"ulid";import ei from"node:fs";import Cd from"node:path";import bd from"react";import{Box as Ed}from"ink";import on from"react";import{Box as ar,Text as sd}from"ink";import xe from"react";import{Text as Wo}from"ink";import Ho,{useEffect as Ko,useState as Ya}from"react";var Vo={help:["\u276F "],default:["\u276F "],move:["\u25C6 ","\u25C6 "],"command-line":["\u276F "]},re=({isSelected:e,placeholder:t=" "})=>{let{mode:n}=_(),r=Vo[n]??Vo.default,[o,i]=Ya(0);if(Ko(()=>{i(0)},[r]),Ko(()=>{if(!e)return;let d=setInterval(()=>{i(u=>(u+1)%r.length)},500);return()=>clearInterval(d)},[e,r]),!e)return Ho.createElement(Wo,null,t);let a=r[o]??r[0]??t;return Ho.createElement(Wo,{color:E.accent,dimColor:o===1},a)};import{Box as ir,Text as Xa}from"ink";import Qt from"react";var en=({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)),u=Math.max(0,Math.min(n,e.length-1)),m=Math.max(0,e.length-d),p=o?Math.min(m,Math.max(0,u-d+1)):Math.min(m,Math.floor(u/d)*d),y=p+d,N=e.slice(p,y),S=e.length>d,A=i,I=S?Math.max(1,Math.floor(d/e.length*A)):A,C=Math.max(0,A-I),w=Math.max(1,e.length-d),U=S?Math.floor(p/w*C):0;return Qt.createElement(ir,{flexDirection:"row",height:i,width:"100%"},Qt.createElement(ir,{flexDirection:"column",flexGrow:1,height:i},N),Qt.createElement(ir,{flexDirection:"column",width:1,height:A},Array.from({length:A}).map((De,Fe)=>Qt.createElement(Xa,{key:Fe,color:S&&Fe>=U&&Fe<U+I?E.accent:E.secondary},S?"\u2502":" "))))};import{Box as tn,Text as rd}from"ink";import Ye from"react";import{Text as Ja}from"ink";import Za from"react";var Qa=e=>e.toLowerCase().trim(),ed=(e,t=ot)=>{let n=Qa(e);return t[n]?t[n]:ht(n)},at=({id:e,isSelected:t})=>{let n=b.getContributor(e);if(n)return Za.createElement(Ja,{underline:t,color:ed(n.name)},"@"+n.name)};import{Text as td}from"ink";import nd from"react";var dt=({id:e,isSelected:t})=>{let n=b.getTag(e);if(n)return nd.createElement(td,{underline:t,backgroundColor:X(n.name),color:E.primary}," "+n.name+" ")};var jo=({width:e,ticket:t,isSelected:n})=>{let r=e-14,o=Bt(Dn(t.title),r),i=Gn(t),a=zn(t);return Ye.createElement(tn,{borderStyle:"round",width:e-7,height:4,flexDirection:"column",borderColor:n?E.accent:E.secondary,justifyContent:"space-between"},Ye.createElement(tn,{borderBottom:!0},Ye.createElement(tn,{paddingLeft:1,flexDirection:"column"},Ye.createElement(rd,{color:E.primary},o))),Ye.createElement(tn,{flexDirection:"row",paddingLeft:1},i.map(d=>Ye.createElement(dt,{key:d.id,id:d.id})),a.map(d=>Ye.createElement(at,{key:d.id,id:d.id}))))};import od from"chalk";import{Box as bt,Text as sr}from"ink";import Te from"react";var id=(e,t)=>e.length>=t?e.slice(0,t)+"...":e,Go=({width:e,ticket:t,isSelected:n,index:r,mode:o})=>{let i=R(t.id),a=I=>{let C=i.find(w=>w.title===I);return C?R(C.id).map(w=>typeof w.props?.value=="string"?w.props.value:"").filter(w=>!!w):[]},d=a("Tags").map(I=>b.getTag(I)).filter(I=>!!I),u=a("Assignees").map(I=>b.getContributor(I)).filter(I=>!!I),m=1,p=d.length*(1+m),y=u.length*(2+m),N=d.map(I=>Te.createElement(bt,{key:I.id,paddingRight:m},Te.createElement(sr,{color:X(I.name)},"\u25A0"))),S=u.map(I=>Te.createElement(bt,{key:I.id,paddingRight:m},Te.createElement(sr,{color:ht(I.name)},"@"+I.name.at(0)))),A=n?E.accent:o===g.MOVE?E.secondary:E.primary;return Te.createElement(bt,{borderBottom:!0,justifyContent:"space-between"},Te.createElement(bt,null,Te.createElement(re,{isSelected:n,placeholder:od.dim.gray(r+1+" ")}),Te.createElement(sr,{wrap:"truncate",color:A},id(t.title,e-p-y-14))),Te.createElement(bt,null,N,S))};var ad=({swimlane:e,isSelected:t,width:n,height:r,isDense:o,isFocused:i,listSelectedIndex:a,mode:d})=>{let{renderedChildrenIndex:u}=_(),m=u[e.id]??[],p=`${e.title} (${m.length})`,y=3,N=o?1:4,S=r-y-(o?2:1),A=xe.createElement(ar,{borderStyle:"round",borderColor:E.secondary,justifyContent:"flex-start",borderLeft:!1,borderTop:!1,borderRight:!1},xe.createElement(re,{isSelected:t}),xe.createElement(sd,{bold:!0,color:t?E.accent:E.primary},p," ",e.readonly?"\u{1F512}":"")),I=(C,w)=>{let U=i&&a===w;return o?xe.createElement(Go,{key:C.id,index:w,width:n,ticket:C,isSelected:U,mode:d}):xe.createElement(jo,{key:C.id,width:n,ticket:C,isSelected:U})};return xe.createElement(ar,{flexDirection:"column",width:n,borderStyle:"round",borderColor:t?E.accent:E.secondary,paddingRight:1,paddingLeft:1,height:r},A,xe.createElement(ar,{padding:o?1:0},m.length>0&&xe.createElement(en,{selectedIndex:a,height:S,itemHeight:N},m.map(I)),xe.createElement(re,{isSelected:i&&a===-1})))},zo=xe.memo(ad);import{Box as cr,Text as yd}from"ink";import $e,{useEffect as ur,useMemo as Jo}from"react";import Xe from"chalk";import qo from"string-width";import{decodeTime as dd}from"ulid";var ld=(e,t)=>e+" ".repeat(Math.max(0,t-qo(e))),cd=(e,t)=>" ".repeat(Math.max(0,t-qo(e)))+e,ud=e=>(()=>{let n={"add.issue":"Created with title","assign.issue":"Assigned to","unassign.issue":"Unassigned from","close.issue":"Closed","delete.node":"Deleted","edit.title":"Changed title to","edit.description":"Changed description","reopen.issue":"Reopened","tag.issue":"Tagged with","untag.issue":"Removed tag","lock.node":"Locked node","move.node":"Moved issue"};return(o=>n[o]??(o.endsWith("e")?`${o}d`:`${o}ed`))(e)})(),md=e=>{switch(e.action){case"move.node":{let t=b.getNode(e.payload.parent);return`to ${t?Xe.dim.bgBlack(` ${t.title} `):"unknown"} with rank ${e.payload.rank}`}case"tag.issue":{let t=v().tags[e.payload.tagId];return t?Xe.bgHex(X(t.name))(` ${t.name} `):"unknown tag"}case"untag.issue":{let t=v().tags[e.payload.tagId];return t?Xe.bgHex(X(t.name))(` ${t.name} `):"unknown tag"}case"assign.issue":{let t=v().contributors[e.payload.contributor];return t?Xe.hex(X(t.name))(` ${t.name} `):"unknown user"}case"unassign.issue":{let t=v().contributors[e.payload.contributor];return t?Xe.hex(X(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""}},pd=e=>{let t=Eo(dd(e));return Xe.gray(cd(t,8))},gd=12,fd=e=>ld(`${e}`,gd),Yo=e=>{let t=pd(e.id),n=fd(e.userName),r=ud(e.action),o=md(e),i=Xe.dim("\u203A"),a=[r,o].filter(Boolean).join(" ");return`${n} ${t} ${i} ${a}`};import{Box as nn,Text as vd}from"ink";import we from"react";var Xo=({selectedIndex:e,parent:t,selected:n})=>{let{currentNode:r}=_(),{title:o}=t,i=R(t.id).map(a=>{let d=typeof a.props?.value=="string"?a.props.value:"";if(o==="Assignees")return b.getContributor(d)?.id;if(o==="Tags")return b.getTag(d)?.id}).filter(a=>!!a);return we.createElement(nn,{alignItems:"center",paddingTop:1},we.createElement(nn,{minWidth:12},we.createElement(re,{isSelected:n}),we.createElement(vd,{color:n?E.accent:E.secondary2},o,":")),we.createElement(nn,{flexDirection:"row",marginLeft:1,paddingRight:1},i.map((a,d)=>{let u=r.id===t.id&&d===e;return we.createElement(nn,{key:`${o}-${a}`,paddingRight:2,minHeight:1},we.createElement(re,{isSelected:u}),o==="Assignees"?we.createElement(at,{isSelected:u,id:a}):o==="Tags"?we.createElement(dt,{isSelected:u,id:a}):null)})))};import{Box as rn,Text as dr}from"ink";import Re,{useEffect as xd}from"react";var lr=({id:e,label:t,text:n,height:r,selected:o,maxWidth:i})=>{let{selectedIndex:a,currentNode:d}=_(),u=N=>String(N).replace(/\r?\n/g,""),m=typeof n=="string"?n.split(/\r?\n|\u2028|\u2029/):[];xd(()=>{let N=[];return m.forEach((S,A)=>{let I=Ce(BigInt(A+1));if(!Ne(I))return;let C=te.text({id:`${e}-${A}`,name:`Line ${A+1}`,parentNodeId:e,rank:I.value,props:{value:S},readonly:!0}),w=b.createNode(C);Ne(w)&&N.push(w.value.id)}),()=>N.forEach(b.deleteNode)},[e,n]);let p="\u2029",y=m.map((N,S)=>{let A=d.id===e&&a===S;return Re.createElement(rn,{key:`${e}-${S}`},Re.createElement(dr,{color:A?E.primary:E.secondary2,dimColor:!A},`${S+1} `.padStart(5,"\xA0")),Re.createElement(dr,{backgroundColor:A?"gray":""},u(N.length?Bt(N,i-10):p)))});return Re.createElement(rn,{flexDirection:"column",paddingTop:1},Re.createElement(rn,null,Re.createElement(re,{isSelected:o}),Re.createElement(dr,{color:o?E.accent:E.secondary2},t)),Re.createElement(rn,{flexDirection:"row",borderStyle:"round",borderColor:E.secondary,paddingLeft:1,paddingRight:1,marginLeft:1},Re.createElement(en,{scrollByOne:!0,children:y,height:r-2,selectedIndex:a,itemHeight:1})))};var hd=e=>`${e}::log`,Zo=e=>e==="Assignees"||e==="Tags",Qo=({ticket:e,height:t})=>{let{selectedIndex:n,currentNode:r}=_(),o=process.stdout.columns||120,i=Jo(()=>hd(e.id),[e.id]),a=Jo(()=>[...e.log].reverse().map(Yo).join(`
5
+ `),[e.log]);ur(()=>{if(b.getNode(i))return;let w=Ce(1n);if(l(w))return;let U={...te.field(i,"Log",e.id,w.value,{value:a}),readonly:!0,childRenderAxis:"vertical"};return b.createNode(U),()=>{b.deleteNode(i)}},[i,e.id,a]),ur(()=>{let C=b.getNode(i);C&&C.props.value!==a&&b.updateNode({...C,props:{...C.props,value:a},childRenderAxis:"vertical",readonly:!0})},[i,a]);let d=r.id===e.id,u=r.id===i||r.parentNodeId===i;ur(()=>{u&&(n>=0||L.navigate({selectedIndex:0}))},[u,n]);let m=R(e.id);if(u){let C=b.getNode(i),U=t-3;return $e.createElement(cr,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},C?$e.createElement(lr,{id:C.id,label:"Event log",text:C.props.value??"",selected:!1,maxWidth:o,height:U}):null)}let p=m.reduce((C,w)=>Zo(w.title)||w.id===i?C+1:C,0),y=2,N=p*1,A=t-3-N-y,I=(C,w)=>Zo(C.title)?$e.createElement(Xo,{key:C.id,parent:C,selected:w,selectedIndex:n}):C.id===i?$e.createElement(cr,{key:C.id,paddingTop:1},$e.createElement(re,{isSelected:w}),$e.createElement(yd,{backgroundColor:E.secondary,color:w?E.accent:E.primary}," History \u203A\u203A ")):C.title==="Description"?$e.createElement(lr,{label:"Description (press e to edit)",key:C.id,id:C.id,text:C.props.value??"",selected:w,maxWidth:o,height:A}):null;return $e.createElement(cr,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},m.map((C,w)=>I(C,d&&n===w)))};var Nd=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:a,width:d})=>{let u=t.context,m=u===k.TICKET||u===k.FIELD_LIST||u===k.FIELD,p=u===k.BOARD||u===k.SWIMLANE,y=u===k.TICKET?t:r.find(C=>C.context===k.TICKET),N=Math.floor(d/3),S=Math.floor(d/Math.max(e.length,1)),A=Math.min(S,N),I=i==="dense";return on.createElement(Ed,{flexDirection:"row",height:a},p&&e.map((C,w)=>{let U=t.id===C.id,De=U?n:-1,Fe=t.context===k.BOARD&&n===w;return on.createElement(zo,{key:C.id,height:a,width:A,swimlane:C,isSelected:Fe,isDense:I,isFocused:U,listSelectedIndex:De,mode:o})}),m&&y&&on.createElement(Qo,{height:a,ticket:y}))},sn=on.memo(Nd);import{render as Id}from"ink";import{Writable as Sd}from"node:stream";var It=e=>String(e).padStart(2,"0"),Ad=e=>{let t=e.getUTCFullYear(),n=It(e.getUTCMonth()+1),r=It(e.getUTCDate()),o=It(e.getUTCHours()),i=It(e.getUTCMinutes()),a=It(e.getUTCSeconds());return`${t}-${n}-${r}_${o}-${i}-${a}`},Td=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^[-.]+|[-.]+$/g,"").toLowerCase()||"board",wd=async(e,{width:t,height:n})=>{let r="",o=new Sd({write(a,d,u){let m=Rd(a.toString()).trimEnd();m.trim().length>0&&m.includes("\u256D")&&(r=m),u()}});o.columns=t,o.rows=n,o.isTTY=!0;let i=Id(e,{stdout:o,debug:!1,exitOnCtrlC:!1,patchConsole:!1,incrementalRendering:!1});return await new Promise(a=>setTimeout(a,0)),i.unmount(),r},Rd=e=>e.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,""),ti=async()=>{let{currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:r,mode:o,renderedChildrenIndex:i}=v(),a=n.find(w=>w.context==="BOARD");if(!a)return s("No board found to export");let d=120,u=40,m=await wd(bd.createElement(sn,{height:u,width:d,swimlanes:(i[a.id]??[]).filter(w=>w!==void 0&&Qe(w)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:r,mode:o}),{width:d,height:u});if(!m)return s("Failed to render board export");let p=fe(process.cwd());if(l(p))return s("Unable to export, epiq root not found");let y=new Date,N=Ad(y),S=`board_${Td(a.title)}_${N}.md`,A=to(p.value);ei.mkdirSync(A,{recursive:!0});let I=Cd.join(A,S),C=`# Board - ${a.title}
6
+ Date: ${y.toISOString()}
7
+
8
+ \`\`\`text
9
+ ${m}
10
+ \`\`\`
11
+ `;return ei.writeFileSync(I,C,"utf8"),c("Exported board layout",I)};import Yd from"node:fs";import{createHash as Dd}from"node:crypto";import At from"node:fs";import Fd from"node:os";import me from"node:path";var mr=(e,t)=>{let n=new Map,r=t??((...i)=>JSON.stringify(i)),o=((...i)=>{let a=r(...i);if(!n.has(a)){let d=e(...i).then(u=>(l(u)&&n.delete(a),u));n.set(a,d)}return n.get(a)});return o.clear=()=>n.clear(),o};import St from"fs";import ri from"path";import Md from"util";var ni=1e3,oi=()=>{let e=process.cwd(),t=fe(e);if(!l(t))return ri.join(t.value,Oe,"log","epiq.log")};function kd(){if(!Un)return;let e=oi();if(e===void 0||!St.existsSync(e))return;let n=St.readFileSync(e,"utf8").split(`
12
+ `);if(n[n.length-1]===""&&n.pop(),n.length<=ni)return;let r=n.slice(-ni).join(`
6
13
  `)+`
7
- `;Et.writeFileSync(e,r,"utf8")}function ir(e,t,n=!1){if(!Zn)return;let r=jo();if(!r)return;let o=rd.format(...t),i=new Date,d=`[${n?i.toISOString().slice(11,19):i.toISOString()}] ${e} ${o}
8
- `;Et.mkdirSync(Vo.dirname(r),{recursive:!0}),Et.appendFileSync(r,d,"utf8"),od()}var le={info(...e){ir("[Info]",e,!1)},debug(...e){ir("->",e,!0)},error(...e){ir("[Error]",[...e,new Error().stack],!1)}};globalThis.logger=le;import{spawn as id}from"node:child_process";import sr from"node:fs";import qo from"node:path";var B="epiq/eventlog",me="origin";var G={stage:({cwd:e,pathspec:t})=>O({args:["add",t],cwd:e}),commit:({cwd:e,message:t,allowEmpty:n=!1})=>O({args:["commit",...n?["--allow-empty"]:[],"-m",t],cwd:e}),fetch:({cwd:e,remote:t,branch:n})=>O({args:["fetch",t,n],cwd:e}),pullRebase:({cwd:e,remote:t,branch:n})=>O({args:["pull","--rebase",t,n],cwd:e}),checkout:({cwd:e,branch:t})=>O({args:["checkout",t],cwd:e}),push:({cwd:e,remote:t,branch:n,setUpstream:r=!1})=>{let o=t&&n?["push",...r?["-u"]:[],t,n]:["push"];return O({args:o,cwd:e})},setUpstream:({cwd:e,branch:t,upstream:n})=>O({args:["branch","--set-upstream-to",n,t],cwd:e}),worktreeAdd:({cwd:e,worktreeRoot:t,branch:n})=>O({args:["worktree","add",t,n],cwd:e}),worktreeRemove:({cwd:e,worktreeRoot:t})=>O({args:["worktree","remove","--force",t],cwd:e}),worktreePrune:({cwd:e})=>O({args:["worktree","prune"],cwd:e})};var Go=15e3,sd={...process.env,GIT_TERMINAL_PROMPT:"0",GIT_ASKPASS:"echo"},Yo=({args:e,cwd:t,allowFail:n})=>new Promise(r=>{if(!sr.existsSync(t)){let g=`Git cwd does not exist: ${t}`;if(n){r({stdout:"",stderr:g,exitCode:1});return}r(s(g));return}let o=id("git",e,{cwd:t,stdio:["ignore","pipe","pipe"],env:sd}),i=!1,a="",d="",u=g=>{i||(i=!0,clearTimeout(m),r(g))},m=setTimeout(()=>{o.kill("SIGTERM");let g=[`git ${e.join(" ")}`,`cwd=${t}`,`Git command timed out after ${Go}ms`].join(`
9
- `);u(n?{stdout:a,stderr:g,exitCode:124}:s(g))},Go);o.stdout.setEncoding("utf8"),o.stderr.setEncoding("utf8"),o.stdout.on("data",g=>{a+=g}),o.stderr.on("data",g=>{d+=g}),o.on("error",g=>{if(n){u({stdout:a,stderr:g.message,exitCode:1});return}u(s([`git ${e.join(" ")}`,`cwd=${t}`,g.message].join(`
10
- `)))}),o.on("close",g=>{let h=g??1;if(n){u({stdout:a,stderr:d,exitCode:h});return}if(h!==0){u(s([`git ${e.join(" ")}`,d.trim()||a.trim()||"Git command failed"].filter(Boolean).join(`
11
- `)));return}u(c("Git command succeeded",{stdout:a,stderr:d,exitCode:h}))})}),O=({args:e,cwd:t})=>Yo({args:e,cwd:t,allowFail:!1}),at=({args:e,cwd:t})=>Yo({args:e,cwd:t,allowFail:!0}),rn=async({cwd:e,message:t})=>{let n=await G.commit({cwd:e,message:t});if(l(n))return s(`Failed to create commit
12
- ${n.message}`);let r=await O({args:["rev-parse","HEAD"],cwd:e});return l(r)?s(`Commit created, but failed to read HEAD SHA
13
- ${r.message}`):c("Created commit and resolved SHA",r.value.stdout.trim())},ar=async e=>{let t=await ni(e);if(l(t))return s(t.message);let n=t.value,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD","rebase-merge","rebase-apply"].filter(i=>sr.existsSync(qo.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},dr=async({repoRoot:e})=>{let n=(await at({args:["remote","get-url",me],cwd:e})).exitCode===0;return c(`Checked remote ${n}`,n)},on=async({repoRoot:e,branch:t})=>{let n=await at({args:["ls-remote","--heads",me,t],cwd:e});return n.exitCode!==0?s(n.stderr.trim()||`Unable to inspect remote branch ${me}/${t}`):c("Checked remote branch",n.stdout.trim().length>0)},Xo=async({repoRoot:e,branch:t})=>{let n=await at({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}`)},zo=e=>{try{return sr.realpathSync.native(e)}catch{return qo.resolve(e)}},Jo=async({repoRoot:e,worktreeRoot:t})=>{let n=await O({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);let r=zo(t),o=n.value.stdout.split(`
14
- `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(zo).includes(r);return c("Checked worktree registration",o)},lr=async e=>{let t=await at({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e});return c("Checked upstream",t.exitCode===0&&t.stdout.trim().length>0)},sn=async e=>{let t=await O({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved current branch",t.value.stdout.trim())},Zo=async e=>{let t=await O({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved short HEAD sha",t.value.stdout.trim())},Qo=e=>e.includes("fetch first")||e.includes("non-fast-forward")||e.includes("failed to push some refs"),an=async({cwd:e,branch:t})=>{let n=await on({repoRoot:e,branch:t});if(l(n))return s(n.message);if(!n.value)return c("Remote branch missing, skipped pull",!1);let r=await G.fetch({cwd:e,remote:me,branch:t});if(l(r))return s(`Failed to fetch ${t}
15
- ${r.message}`);let o=await G.pullRebase({cwd:e,remote:me,branch:t});return l(o)?s(`Failed during pull --rebase
16
- ${o.message}`):c("Pulled with rebase",!0)},ei=async e=>{let t=await O({args:["status","--porcelain"],cwd:e});return l(t)?s(t.message):c("Checked state branch changes",t.value.stdout.trim().length>0)},ti=async e=>{let t=await sn(e);return l(t)?s(t.message):c("Checked detached HEAD state",t.value==="HEAD")};var ri="4b825dc642cb6eb9a060e54bf8d69288fbee4904",oi=e=>pe.join($e,Jt,e),ld=e=>ad("sha1").update(pe.resolve(e)).digest("hex").slice(0,12),ii=()=>pe.join(dd.homedir(),ue),si=()=>pe.join(ii(),"worktrees"),ai=e=>pe.join(si(),ld(e)),cd=e=>pe.join(e,$e),Ye=e=>pe.join(cd(e),Jt),cr=({root:e,fileName:t})=>pe.join(Ye(e),t),It=e=>{try{return Ct.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)}catch(t){return s(t instanceof Error?t.message:String(t))}},di=()=>{let e=It(ii());if(l(e))return s(`Ensure epiq home failed.
17
- `+e.message);let t=It(si());return l(t)?s(`Ensure worktrees dir failed.
18
- `+t.message):c("Ensured epiq storage",!0)},li=e=>{Ct.existsSync(e)&&(le.debug("[sync] remove path",e),Ct.rmSync(e,{recursive:!0,force:!0}))},ci=e=>{let t=Ye(e);if(!Ct.existsSync(t))return c("Events dir missing",[]);let n=Ct.readdirSync(t,{withFileTypes:!0}).filter(r=>r.isFile()).map(r=>r.name).filter(r=>r.endsWith(".jsonl")).sort();return c("Listed event files",n)},ui=(e,t)=>{for(let n of[Ye(e),Ye(t)]){let r=It(n);if(l(r))return s(r.message)}return c("Ensured state branch",void 0)},mi=async e=>{let t=await O({args:["ls-tree","--name-only","HEAD"],cwd:e});if(l(t))return s(`ensure state branch is storage only failed
14
+ `;St.writeFileSync(e,r,"utf8")}function pr(e,t,n=!1){if(!Un)return;let r=oi();if(!r)return;let o=Md.format(...t),i=new Date,d=`[${n?i.toISOString().slice(11,19):i.toISOString()}] ${e} ${o}
15
+ `;St.mkdirSync(ri.dirname(r),{recursive:!0}),St.appendFileSync(r,d,"utf8"),kd()}var ae={info(...e){pr("[Info]",e,!1)},debug(...e){pr("->",e,!0)},error(...e){pr("[Error]",[...e,new Error().stack],!1)}};globalThis.logger=ae;import{spawn as Pd}from"node:child_process";import gr from"node:fs";import ai from"node:path";var B="epiq/eventlog",ue="origin";var q={stage:({cwd:e,pathspec:t})=>F({args:["add",t],cwd:e}),commit:({cwd:e,message:t,allowEmpty:n=!1})=>F({args:["commit",...n?["--allow-empty"]:[],"-m",t],cwd:e}),fetch:({cwd:e,remote:t,branch:n})=>F({args:["fetch",t,n],cwd:e}),pullRebase:({cwd:e,remote:t,branch:n})=>F({args:["pull","--rebase",t,n],cwd:e}),checkout:({cwd:e,branch:t})=>F({args:["checkout",t],cwd:e}),push:({cwd:e,remote:t,branch:n,setUpstream:r=!1})=>{let o=t&&n?["push",...r?["-u"]:[],t,n]:["push"];return F({args:o,cwd:e})},setUpstream:({cwd:e,branch:t,upstream:n})=>F({args:["branch","--set-upstream-to",n,t],cwd:e}),worktreeAdd:({cwd:e,worktreeRoot:t,branch:n})=>F({args:["worktree","add",t,n],cwd:e}),worktreeRemove:({cwd:e,worktreeRoot:t})=>F({args:["worktree","remove","--force",t],cwd:e}),worktreePrune:({cwd:e})=>F({args:["worktree","prune"],cwd:e})};var ii=15e3,Ld={...process.env,GIT_TERMINAL_PROMPT:"0",GIT_ASKPASS:"echo"},di=({args:e,cwd:t,allowFail:n})=>new Promise(r=>{if(!gr.existsSync(t)){let p=`Git cwd does not exist: ${t}`;if(n){r({stdout:"",stderr:p,exitCode:1});return}r(s(p));return}let o=Pd("git",e,{cwd:t,stdio:["ignore","pipe","pipe"],env:Ld}),i=!1,a="",d="",u=p=>{i||(i=!0,clearTimeout(m),r(p))},m=setTimeout(()=>{o.kill("SIGTERM");let p=[`git ${e.join(" ")}`,`cwd=${t}`,`Git command timed out after ${ii}ms`].join(`
16
+ `);u(n?{stdout:a,stderr:p,exitCode:124}:s(p))},ii);o.stdout.setEncoding("utf8"),o.stderr.setEncoding("utf8"),o.stdout.on("data",p=>{a+=p}),o.stderr.on("data",p=>{d+=p}),o.on("error",p=>{if(n){u({stdout:a,stderr:p.message,exitCode:1});return}u(s([`git ${e.join(" ")}`,`cwd=${t}`,p.message].join(`
17
+ `)))}),o.on("close",p=>{let y=p??1;if(n){u({stdout:a,stderr:d,exitCode:y});return}if(y!==0){u(s([`git ${e.join(" ")}`,d.trim()||a.trim()||"Git command failed"].filter(Boolean).join(`
18
+ `)));return}u(c("Git command succeeded",{stdout:a,stderr:d,exitCode:y}))})}),F=({args:e,cwd:t})=>di({args:e,cwd:t,allowFail:!1}),lt=({args:e,cwd:t})=>di({args:e,cwd:t,allowFail:!0}),an=async({cwd:e,message:t})=>{let n=await q.commit({cwd:e,message:t});if(l(n))return s(`Failed to create commit
19
+ ${n.message}`);let r=await F({args:["rev-parse","HEAD"],cwd:e});return l(r)?s(`Commit created, but failed to read HEAD SHA
20
+ ${r.message}`):c("Created commit and resolved SHA",r.value.stdout.trim())},fr=async e=>{let t=await fi(e);if(l(t))return s(t.message);let n=t.value,o=["MERGE_HEAD","CHERRY_PICK_HEAD","REVERT_HEAD","REBASE_HEAD","rebase-merge","rebase-apply"].filter(i=>gr.existsSync(ai.join(n,i)));return c("Checked for in-progress Git operation",o.length>0)},vr=async({repoRoot:e})=>{let n=(await lt({args:["remote","get-url",ue],cwd:e})).exitCode===0;return c(`Checked remote ${n}`,n)},dn=async({repoRoot:e,branch:t})=>{let n=await lt({args:["ls-remote","--heads",ue,t],cwd:e});return n.exitCode!==0?s(n.stderr.trim()||`Unable to inspect remote branch ${ue}/${t}`):c("Checked remote branch",n.stdout.trim().length>0)},li=async({repoRoot:e,branch:t})=>{let n=await lt({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}`)},si=e=>{try{return gr.realpathSync.native(e)}catch{return ai.resolve(e)}},ci=async({repoRoot:e,worktreeRoot:t})=>{let n=await F({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);let r=si(t),o=n.value.stdout.split(`
21
+ `).filter(i=>i.startsWith("worktree ")).map(i=>i.slice(9)).map(si).includes(r);return c("Checked worktree registration",o)},xr=async e=>{let t=await lt({args:["rev-parse","--abbrev-ref","--symbolic-full-name","@{u}"],cwd:e});return c("Checked upstream",t.exitCode===0&&t.stdout.trim().length>0)},ln=async e=>{let t=await F({args:["rev-parse","--abbrev-ref","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved current branch",t.value.stdout.trim())},ui=async e=>{let t=await F({args:["rev-parse","--short","HEAD"],cwd:e});return l(t)?s(t.message):c("Resolved short HEAD sha",t.value.stdout.trim())},mi=e=>e.includes("fetch first")||e.includes("non-fast-forward")||e.includes("failed to push some refs"),cn=async({cwd:e,branch:t})=>{let n=await dn({repoRoot:e,branch:t});if(l(n))return s(n.message);if(!n.value)return c("Remote branch missing, skipped pull",!1);let r=await q.fetch({cwd:e,remote:ue,branch:t});if(l(r))return s(`Failed to fetch ${t}
22
+ ${r.message}`);let o=await q.pullRebase({cwd:e,remote:ue,branch:t});return l(o)?s(`Failed during pull --rebase
23
+ ${o.message}`):c("Pulled with rebase",!0)},pi=async e=>{let t=await F({args:["status","--porcelain"],cwd:e});return l(t)?s(t.message):c("Checked state branch changes",t.value.stdout.trim().length>0)},gi=async e=>{let t=await ln(e);return l(t)?s(t.message):c("Checked detached HEAD state",t.value==="HEAD")};var vi="4b825dc642cb6eb9a060e54bf8d69288fbee4904",xi=e=>me.join(Oe,_t,e),Od=e=>Dd("sha1").update(me.resolve(e)).digest("hex").slice(0,12),yi=()=>me.join(Fd.homedir(),ce),hi=()=>me.join(yi(),"worktrees"),Ei=e=>me.join(hi(),Od(e)),Bd=e=>me.join(e,Oe),Je=e=>me.join(Bd(e),_t),yr=({root:e,fileName:t})=>me.join(Je(e),t),Tt=e=>{try{return At.mkdirSync(e,{recursive:!0}),c("Ensured directory",void 0)}catch(t){return s(t instanceof Error?t.message:String(t))}},Ni=()=>{let e=Tt(yi());if(l(e))return s(`Ensure epiq home failed.
24
+ `+e.message);let t=Tt(hi());return l(t)?s(`Ensure worktrees dir failed.
25
+ `+t.message):c("Ensured epiq storage",!0)},Ci=e=>{At.existsSync(e)&&(ae.debug("[sync] remove path",e),At.rmSync(e,{recursive:!0,force:!0}))},bi=e=>{let t=Je(e);if(!At.existsSync(t))return c("Events dir missing",[]);let n=At.readdirSync(t,{withFileTypes:!0}).filter(r=>r.isFile()).map(r=>r.name).filter(r=>r.endsWith(".jsonl")).sort();return c("Listed event files",n)},Ii=(e,t)=>{for(let n of[Je(e),Je(t)]){let r=Tt(n);if(l(r))return s(r.message)}return c("Ensured state branch",void 0)},Si=async e=>{let t=await F({args:["ls-tree","--name-only","HEAD"],cwd:e});if(l(t))return s(`ensure state branch is storage only failed
19
26
  `+t.message);let r=t.value.stdout.trim().split(`
20
- `).filter(Boolean).filter(a=>a!==$e);if(r.length===0)return c("State branch is storage-only",!1);let o=await O({args:["rm","-r","--ignore-unmatch","--",...r],cwd:e});if(l(o))return s(`Failed to clean storage branch
21
- ${o.message}`);let i=await rn({cwd:e,message:"[epiq:repair-storage-branch]"});return l(i)?s(i.message):c("Cleaned storage branch",!0)},pi=or(async(e=process.cwd())=>{let t=await O({args:["rev-parse","--show-toplevel"],cwd:e});return l(t)?s("Not inside a Git repository"):c("Resolved repo root",t.value.stdout.trim())},e=>pe.resolve(e)),ni=or(async e=>{let t=await O({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return s(t.message);let n=t.value.stdout.trim(),r=pe.isAbsolute(n)?n:pe.join(e,n);return c("Resolved git dir",r)},e=>pe.resolve(e));import _e from"node:fs";import bt from"node:path";var vi=async e=>{let t=bt.join(e,".gitignore"),n=_e.existsSync(t)?_e.readFileSync(t,"utf8"):"",r=".epiq";return n.split(`
27
+ `).filter(Boolean).filter(a=>a!==Oe);if(r.length===0)return c("State branch is storage-only",!1);let o=await F({args:["rm","-r","--ignore-unmatch","--",...r],cwd:e});if(l(o))return s(`Failed to clean storage branch
28
+ ${o.message}`);let i=await an({cwd:e,message:"[epiq:repair-storage-branch]"});return l(i)?s(i.message):c("Cleaned storage branch",!0)},Ai=mr(async(e=process.cwd())=>{let t=await F({args:["rev-parse","--show-toplevel"],cwd:e});return l(t)?s("Not inside a Git repository"):c("Resolved repo root",t.value.stdout.trim())},e=>me.resolve(e)),fi=mr(async e=>{let t=await F({args:["rev-parse","--git-dir"],cwd:e});if(l(t))return s(t.message);let n=t.value.stdout.trim(),r=me.isAbsolute(n)?n:me.join(e,n);return c("Resolved git dir",r)},e=>me.resolve(e));import _e from"node:fs";import wt from"node:path";var Ri=async e=>{let t=wt.join(e,".gitignore"),n=_e.existsSync(t)?_e.readFileSync(t,"utf8"):"",r=".epiq";return n.split(`
22
29
  `).some(d=>{let u=d.trim();return u===r||u===r+"/"})?c(`${r} already ignored`,!1):(n=n.trimEnd()+`
23
30
 
24
31
  # [epiq]: hydrated state is never to be committed
25
32
  ${r}
26
33
  `,_e.writeFileSync(t,n+`
27
- `,"utf8"),le.info(`Added ${r} to .gitignore (epiq local cache)`),c(`${r} ignored`,!0))},xi=async e=>{if((await at({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Initial commit already exists",!1);le.info("Creating initial commit");let n=await G.commit({cwd:e,message:"Initial commit",allowEmpty:!0});return l(n)?s(n.message):c("Created initial commit",!0)},gi=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",ud=async e=>{let t=await sn(e);if(l(t))return s(t.message);let n=await Zo(e);if(l(n))return s(n.message);let r=`[epiq:sync:${gi(t.value)}:${gi(n.value)}]`;return c("Built sync commit message",r)},fi=async e=>{le.info(`Creating ${B}`);let t=await O({args:["commit-tree",ri,"-m","[epiq:init-state-branch]"],cwd:e});if(l(t))return s(`Failed to create state branch commit
28
- ${t.message}`);let n=t.value.stdout.trim(),r=await O({args:["update-ref",`refs/heads/${B}`,n],cwd:e});return l(r)?s(`Failed to create ${B}
29
- ${r.message}`):c("Created state branch",!0)},md=async({repoRoot:e})=>{let t=await Xo({repoRoot:e,branch:B});if(l(t))return s(`Ensure local state branch failed
30
- `+t.message);if(t.value)return c("Local state branch already exists",!1);let n=await dr({repoRoot:e});if(l(n))return s(`Ensure local state branch failed
31
- `+n.message);if(!n.value)return fi(e);let r=await on({repoRoot:e,branch:B});if(l(r))return s(`Ensure local state branch failed
32
- `+r.message);if(!r.value)return fi(e);let o=await G.fetch({cwd:e,remote:me,branch:B});if(l(o))return s(`Failed to fetch ${B} from remote
33
- ${o.message}`);let i=await O({args:["branch","--track",B,`${me}/${B}`],cwd:e});return l(i)?s(`Failed to create local ${B} from remote
34
- ${i.message}`):c("Created local state branch from remote",!0)},pd=async({repoRoot:e,branch:t})=>{let n=await O({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);let r=n.value.stdout.split(`
35
- `),o=null;for(let i of r){if(i.startsWith("worktree ")){o=i.slice(9);continue}if(i===`branch refs/heads/${t}`&&o)return c("Found worktree for branch",o)}return c("No worktree found for branch",null)},gd=async({repoRoot:e,stateBranchRoot:t})=>{let n=It(bt.dirname(t));if(l(n))return s(`Failed to create state branch worktree
36
- `+n.message);_e.existsSync(t)&&!_e.existsSync(bt.join(t,".git"))&&(le.info("Removing broken state branch worktree path"),li(t)),le.info("Creating state branch worktree");let r=await G.worktreeAdd({cwd:e,worktreeRoot:t,branch:B});return l(r)?s(`Failed to create state branch worktree
37
- ${r.message}`):c("Created state branch worktree",!0)},fd=async({repoRoot:e,stateBranchRoot:t})=>{let n=await pd({repoRoot:e,branch:B});if(l(n))return s(n.message);let r=bt.resolve(t),o=n.value?bt.resolve(n.value):null;if(o&&o===r&&_e.existsSync(o))return c("State branch already checked out in expected worktree",!1);if(o&&o!==r){le.info("Moving state branch worktree to expected location");let d=await G.worktreeRemove({cwd:e,worktreeRoot:o});if(l(d))return s(`Failed to remove existing state branch worktree
38
- ${d.message}`)}if(o&&!_e.existsSync(o)){le.info("Pruning stale state branch worktree");let d=await G.worktreePrune({cwd:e});if(l(d))return s(`Failed to prune stale worktrees
39
- ${d.message}`)}let i=await Jo({repoRoot:e,worktreeRoot:t});if(l(i))return s(i.message);let a=_e.existsSync(t);if(i.value&&a)return c("State branch worktree already exists",!1);if(i.value&&!a){le.info("Pruning missing registered state branch worktree");let d=await G.worktreePrune({cwd:e});if(l(d))return s(`Failed to prune stale worktrees
40
- ${d.message}`)}return gd({repoRoot:e,stateBranchRoot:t})},vd=async e=>{let t=await sn(e);if(l(t))return s(t.message);if(t.value===B)return c("State branch already checked out",!1);let n=await G.checkout({cwd:e,branch:B});return l(n)?s(`Failed to checkout ${B}
41
- ${n.message}`):c("Checked out state branch",!0)},xd=async e=>{let t=await lr(e);if(l(t))return s(t.message);if(t.value)return c("State branch upstream already configured",!1);let n=await dr({repoRoot:e});if(l(n))return s(n.message);if(!n.value)return c("No remote available for state branch upstream",!1);let r=await on({repoRoot:e,branch:B});if(l(r))return s(r.message);if(!r.value)return c("Remote state branch missing; upstream will be configured on first push",!1);le.info(`Configuring ${B} upstream`);let o=await G.fetch({cwd:e,remote:me,branch:B});if(l(o))return s(`Failed to fetch ${B}
42
- ${o.message}`);let i=await G.setUpstream({cwd:e,branch:B,upstream:`${me}/${B}`});return l(i)?s(`Failed to set state branch upstream
43
- ${i.message}`):c("Configured state branch upstream",!0)},yi=async({stateBranchRoot:e,ownEventFileName:t})=>{let n=await G.stage({cwd:e,pathspec:oi(t)});return l(n)?s(`Failed to stage state branch own event file
44
- ${n.message}`):c("Staged state branch own event file",void 0)},hi=async({repoRoot:e,stateBranchRoot:t})=>{let n=await ud(e);return l(n)?s(`Create state branch sync commit failed
45
- `+n.message):rn({cwd:t,message:n.value})},ur=async e=>{let t=await lr(e);if(l(t))return s(t.message);let n=t.value?await G.push({cwd:e}):await G.push({cwd:e,remote:me,branch:B,setUpstream:!0});return l(n)?s(`Failed during state branch push
46
- ${n.message}`):c("Pushed state branch",!0)},Ni=async({repoRoot:e,stateBranchRoot:t,ensureUpstream:n})=>{let r=!1,o=[di(),await md({repoRoot:e}),await fd({repoRoot:e,stateBranchRoot:t}),await vd(t),await mi(t),n?await xd(t):c("Skipped state branch upstream bootstrap",!1)];for(let i of o){if(l(i))return s(i.message);r=r||!!i.value}return c(n?"Bootstrapped state storage":"Bootstrapped state storage (readonly)",r)};import dn from"node:fs";import pr from"node:path";import{decodeTime as yd}from"ulid";var mr=e=>{let[t,n]=e.id;return`${t}:${n??""}`},Ei=e=>{let[t]=e.id;return yd(t)},hd=e=>{let{userId:t,userName:n,...r}=e;return r},Nd=e=>e.length===0?"":e.map(t=>JSON.stringify(hd(t))).join(`
34
+ `,"utf8"),ae.info(`Added ${r} to .gitignore (epiq local cache)`),c(`${r} ignored`,!0))},Mi=async e=>{if((await lt({args:["rev-parse","--verify","HEAD"],cwd:e})).exitCode===0)return c("Initial commit already exists",!1);ae.info("Creating initial commit");let n=await q.commit({cwd:e,message:"Initial commit",allowEmpty:!0});return l(n)?s(n.message):c("Created initial commit",!0)},Ti=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._/-]/g,"-").replace(/-+/g,"-").replace(/^[-/.]+|[-/.]+$/g,"")||"unknown",Ud=async e=>{let t=await ln(e);if(l(t))return s(t.message);let n=await ui(e);if(l(n))return s(n.message);let r=`[epiq:sync:${Ti(t.value)}:${Ti(n.value)}]`;return c("Built sync commit message",r)},wi=async e=>{ae.info(`Creating ${B}`);let t=await F({args:["commit-tree",vi,"-m","[epiq:init-state-branch]"],cwd:e});if(l(t))return s(`Failed to create state branch commit
35
+ ${t.message}`);let n=t.value.stdout.trim(),r=await F({args:["update-ref",`refs/heads/${B}`,n],cwd:e});return l(r)?s(`Failed to create ${B}
36
+ ${r.message}`):c("Created state branch",!0)},$d=async({repoRoot:e})=>{let t=await li({repoRoot:e,branch:B});if(l(t))return s(`Ensure local state branch failed
37
+ `+t.message);if(t.value)return c("Local state branch already exists",!1);let n=await vr({repoRoot:e});if(l(n))return s(`Ensure local state branch failed
38
+ `+n.message);if(!n.value)return wi(e);let r=await dn({repoRoot:e,branch:B});if(l(r))return s(`Ensure local state branch failed
39
+ `+r.message);if(!r.value)return wi(e);let o=await q.fetch({cwd:e,remote:ue,branch:B});if(l(o))return s(`Failed to fetch ${B} from remote
40
+ ${o.message}`);let i=await F({args:["branch","--track",B,`${ue}/${B}`],cwd:e});return l(i)?s(`Failed to create local ${B} from remote
41
+ ${i.message}`):c("Created local state branch from remote",!0)},_d=async({repoRoot:e,branch:t})=>{let n=await F({args:["worktree","list","--porcelain"],cwd:e});if(l(n))return s(n.message);let r=n.value.stdout.split(`
42
+ `),o=null;for(let i of r){if(i.startsWith("worktree ")){o=i.slice(9);continue}if(i===`branch refs/heads/${t}`&&o)return c("Found worktree for branch",o)}return c("No worktree found for branch",null)},Wd=async({repoRoot:e,stateBranchRoot:t})=>{let n=Tt(wt.dirname(t));if(l(n))return s(`Failed to create state branch worktree
43
+ `+n.message);_e.existsSync(t)&&!_e.existsSync(wt.join(t,".git"))&&(ae.info("Removing broken state branch worktree path"),Ci(t)),ae.info("Creating state branch worktree");let r=await q.worktreeAdd({cwd:e,worktreeRoot:t,branch:B});return l(r)?s(`Failed to create state branch worktree
44
+ ${r.message}`):c("Created state branch worktree",!0)},Hd=async({repoRoot:e,stateBranchRoot:t})=>{let n=await _d({repoRoot:e,branch:B});if(l(n))return s(n.message);let r=wt.resolve(t),o=n.value?wt.resolve(n.value):null;if(o&&o===r&&_e.existsSync(o))return c("State branch already checked out in expected worktree",!1);if(o&&o!==r){ae.info("Moving state branch worktree to expected location");let d=await q.worktreeRemove({cwd:e,worktreeRoot:o});if(l(d))return s(`Failed to remove existing state branch worktree
45
+ ${d.message}`)}if(o&&!_e.existsSync(o)){ae.info("Pruning stale state branch worktree");let d=await q.worktreePrune({cwd:e});if(l(d))return s(`Failed to prune stale worktrees
46
+ ${d.message}`)}let i=await ci({repoRoot:e,worktreeRoot:t});if(l(i))return s(i.message);let a=_e.existsSync(t);if(i.value&&a)return c("State branch worktree already exists",!1);if(i.value&&!a){ae.info("Pruning missing registered state branch worktree");let d=await q.worktreePrune({cwd:e});if(l(d))return s(`Failed to prune stale worktrees
47
+ ${d.message}`)}return Wd({repoRoot:e,stateBranchRoot:t})},Kd=async e=>{let t=await ln(e);if(l(t))return s(t.message);if(t.value===B)return c("State branch already checked out",!1);let n=await q.checkout({cwd:e,branch:B});return l(n)?s(`Failed to checkout ${B}
48
+ ${n.message}`):c("Checked out state branch",!0)},Vd=async e=>{let t=await xr(e);if(l(t))return s(t.message);if(t.value)return c("State branch upstream already configured",!1);let n=await vr({repoRoot:e});if(l(n))return s(n.message);if(!n.value)return c("No remote available for state branch upstream",!1);let r=await dn({repoRoot:e,branch:B});if(l(r))return s(r.message);if(!r.value)return c("Remote state branch missing; upstream will be configured on first push",!1);ae.info(`Configuring ${B} upstream`);let o=await q.fetch({cwd:e,remote:ue,branch:B});if(l(o))return s(`Failed to fetch ${B}
49
+ ${o.message}`);let i=await q.setUpstream({cwd:e,branch:B,upstream:`${ue}/${B}`});return l(i)?s(`Failed to set state branch upstream
50
+ ${i.message}`):c("Configured state branch upstream",!0)},ki=async({stateBranchRoot:e,ownEventFileName:t})=>{let n=await q.stage({cwd:e,pathspec:xi(t)});return l(n)?s(`Failed to stage state branch own event file
51
+ ${n.message}`):c("Staged state branch own event file",void 0)},Pi=async({repoRoot:e,stateBranchRoot:t})=>{let n=await Ud(e);return l(n)?s(`Create state branch sync commit failed
52
+ `+n.message):an({cwd:t,message:n.value})},hr=async e=>{let t=await xr(e);if(l(t))return s(t.message);let n=t.value?await q.push({cwd:e}):await q.push({cwd:e,remote:ue,branch:B,setUpstream:!0});return l(n)?s(`Failed during state branch push
53
+ ${n.message}`):c("Pushed state branch",!0)},Li=async({repoRoot:e,stateBranchRoot:t,ensureUpstream:n})=>{let r=!1,o=[Ni(),await $d({repoRoot:e}),await Hd({repoRoot:e,stateBranchRoot:t}),await Kd(t),await Si(t),n?await Vd(t):c("Skipped state branch upstream bootstrap",!1)];for(let i of o){if(l(i))return s(i.message);r=r||!!i.value}return c(n?"Bootstrapped state storage":"Bootstrapped state storage (readonly)",r)};import un from"node:fs";import Nr from"node:path";import{decodeTime as jd}from"ulid";var Er=e=>{let[t,n]=e.id;return`${t}:${n??""}`},Di=e=>{let[t]=e.id;return jd(t)},Gd=e=>{let{userId:t,userName:n,...r}=e;return r},zd=e=>e.length===0?"":e.map(t=>JSON.stringify(Gd(t))).join(`
47
54
  `)+`
48
- `,Ed=(e,t)=>{let n=new Map;for(let r of[...t,...e])n.set(mr(r),r);return[...n.values()].sort((r,o)=>{let i=Ei(r)-Ei(o);return i!==0?i:mr(r).localeCompare(mr(o))})},gr=({sourceFile:e,targetFile:t})=>{let n=tn(e);if(l(n))return s(n.message);let r=tn(t);if(l(r))return s(r.message);let o=Ed(r.value,n.value),i=Nd(o);return(dn.existsSync(t)?dn.readFileSync(t,"utf8"):"")===i?c("Event file already merged",!1):(dn.mkdirSync(pr.dirname(t),{recursive:!0}),dn.writeFileSync(t,i,"utf8"),c("Merged event file",!0))},fr=({repoRoot:e,stateBranchRoot:t})=>{let n=ci(t);if(l(n))return s(n.message);let r=Ye(t),o=Ye(e),i=!1;for(let a of n.value){let d=pr.join(r,a),u=pr.join(o,a),m=gr({sourceFile:d,targetFile:u});if(l(m))return s(m.message);i=i||m.value}return c("Hydrated event files from state branch",i)};var Ii=async(e=process.cwd())=>{let t=await bi({cwd:e,ensureUpstream:!1});if(l(t))return t;let{repoRoot:n,stateBranchRoot:r}=t.value,o=await an({cwd:r,branch:B});if(l(o))return s(o.message);let i=fr({repoRoot:n,stateBranchRoot:r});return l(i)?s(i.message):c("Synced state branch",{repoRoot:n,stateBranchRoot:r})},Id=({repoRoot:e,stateBranchRoot:t,ownEventFileName:n})=>{let r=cr({root:e,fileName:n}),o=cr({root:t,fileName:n});return Cd.existsSync(r)?gr({sourceFile:r,targetFile:o}):c("Local own event file missing, nothing to merge",!1)},bi=async({cwd:e,ensureUpstream:t})=>{let n=await pi(e);if(l(n))return s(n.message);let r=n.value,o=ai(r),i=await vi(r);if(l(i))return s("Sync aborted. Unable to gitignore hydrated events");let a=await ar(r);if(l(a))return s(a.message);if(a.value)return s("Cannot sync while a git operation is in progress in the current repo");let d=await xi(r);if(l(d))return s(d.message);let u=await Ni({repoRoot:r,stateBranchRoot:o,ensureUpstream:t});if(l(u))return s(u.message);let m=await ar(o);if(l(m))return s(m.message);if(m.value)return s("Cannot sync while a git operation is in progress in the state branch");let g=ui(r,o);return l(g)?s(g.message):c("Sync preconditions satisfied",{repoRoot:r,stateBranchRoot:o,bootstrapped:u.value})},Ci=async({repoRoot:e,stateBranchRoot:t,ownEventFileName:n})=>{let r=Id({repoRoot:e,stateBranchRoot:t,ownEventFileName:n});if(l(r))return s(r.message);let o=await ei(t);if(l(o))return s(o.message);if(!r.value&&!o.value)return c("Own event file already up to date in state branch",{createdCommit:!1});let i=await yi({stateBranchRoot:t,ownEventFileName:n});if(l(i))return s(i.message);let a=await hi({repoRoot:e,stateBranchRoot:t});return l(a)?s(a.message):c("Merged, staged, and committed own event file",{createdCommit:!0,commitSha:a.value})},Si=async({cwd:e=process.cwd(),ownEventFileName:t})=>{if(t.includes("/")||t.includes("\\"))return s("Own event file must be a file name, not a path");if(!t.endsWith(".jsonl"))return s("Own event file must end with .jsonl");let n=await bi({cwd:e,ensureUpstream:!0});if(l(n))return n;let{repoRoot:r,stateBranchRoot:o,bootstrapped:i}=n.value,a=await ti(r);if(l(a))return s(a.message);if(a.value)return s("Cannot run :sync while the repository is in detached HEAD state");let d=!1,u,m=!1,g=!1,h=!1,C=await an({cwd:o,branch:B});if(l(C))return s(C.message);m=C.value;let I=fr({repoRoot:r,stateBranchRoot:o});if(l(I))return s(I.message);h=I.value;let b=await Ci({repoRoot:r,stateBranchRoot:o,ownEventFileName:t});if(l(b))return s(b.message);if(d=b.value.createdCommit,u=b.value.commitSha,d||i){let T=await ur(o),S=T;if(l(T)&&Qo(T.message)){let R=await an({cwd:o,branch:B});if(l(R))return s(R.message);let U=await Ci({repoRoot:r,stateBranchRoot:o,ownEventFileName:t});if(l(U))return s(U.message);U.value.createdCommit&&(d=!0,u=U.value.commitSha),S=await ur(o)}if(l(S))return s(S.message);g=S.value,logger.debug("[sync] pushed to state branch",g)}else logger.debug("[sync] no commit created, skipped push");if(d){let T=await O({args:["rev-parse","HEAD"],cwd:o});if(l(T))return s(T.message);u=T.value.stdout.trim()}return c("Synced event logs with state branch",{repoRoot:r,stateBranchRoot:o,createdCommit:d,commitSha:u,pulled:m,pushed:g,hydrated:h,bootstrapped:i})};import{ulid as bd}from"ulid";var Ti=null,We=()=>structuredClone(Ti),St=e=>Ti=e,Ai=()=>{let{currentNode:e,selectedIndex:t}=v(),r=w(e.id)[t];return r?c("Resolved selected child",r):s("Target node not found")},vr=({id:e,parentId:t,position:n={at:"end"}})=>{let r=F(t).filter(o=>o.id!==e);return Ce(r,n)},wi=({id:e,parentId:t,position:n})=>{let r=Q();if(l(r))return s("Unable to resolve user ID");let o=vr({id:e,parentId:t,position:n});return l(o)?o:c("Created pending move state",{id:bd(),...r.value,action:"move.node",payload:{id:e,parent:t,rank:o.value}})},Ri=e=>{St(e);let t=Nt(e,!0);return l(t)?t:c("Node moved successfully",t.value)};function xr(e){let t=Ai();if(l(t))return t;let{currentNode:n,nodes:r}=v();if(!n.parentNodeId)return s("Missing parent node id");let o=r[n.parentNodeId];if(!o)return s("Missing parent node");let i=F(o.id),a=i.findIndex(({id:m})=>m===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 u=wi({id:t.value.id,parentId:d.id,position:{at:"end"}});return l(u)?u:Ri(u.value)}function yr(e){let t=Ai();if(l(t))return t;let{currentNode:n,selectedIndex:r}=v(),i=F(n.id)[r+e];if(!i)return s("Missing sibling node");let a=wi({id:t.value.id,parentId:n.id,position:{at:e===1?"after":"before",sibling:i.id}});return l(a)?a:Ri(a.value)}import Sd from"node:os";import Mi from"node:path";import{z as Tt}from"zod";var Td={userId:"",userName:"",preferredEditor:"",autoSync:!1},Pi=Tt.object({preferredEditor:Tt.string().optional(),userName:Tt.string().optional(),userId:Tt.string().optional(),autoSync:Tt.boolean().optional()}).strict(),Ad="config.json",ki=()=>Mi.join(Sd.homedir(),ue),hr=()=>Mi.join(ki(),Ad),Nr=()=>{try{return de.mkDir(ki()),c(`Ensured ~/${ue} exists`,null)}catch{return s(`Unable to create ~/${ue}`)}},wd=e=>{let t;try{t=JSON.parse(e)}catch{return s(`Invalid ~/${ue}/config.json JSON`)}let n=Pi.safeParse(t??{});return n.success?c("Parsed config",n.data):s(`Invalid ~/${ue}/config.json shape: ${n.error.issues.map(r=>r.path.join(".")||r.message).join(", ")}`)},Li=()=>{let e=Nr();if(l(e))return s(e.message);let t=hr(),n=de.readFile(t);return n==null||n.trim()===""?c("No config found, using empty config",{autoSync:!1,preferredEditor:"",userId:"",userName:""}):wd(n)},Di=e=>{let t=Nr();if(l(t))return s(t.message);let n=Pi.safeParse(e);if(!n.success)return s(`Invalid config: ${n.error.issues.map(o=>o.path.join(".")||o.message).join(", ")}`);let r=hr();try{return de.writeToFile(r,JSON.stringify(n.data,null,2)+`
49
- `),c("Config written",null)}catch{return s(`Unable to write ~/${ue}/config.json`)}},ln=e=>{let t=Li();if(l(t))return s("Failed to read existing config");let n={...t.value,...e};return Di(n)},Fi=()=>{let e=hr(),t=Nr();if(l(t))return s(`Unable to create ~/${ue}`);if(!(de.readFile(e)!==null)){let u=Di(Td);if(l(u))throw new Error(`Unable to create ~/${ue}/config.json`)}let r=Li();if(l(r))throw new Error(r.message||"Unable to load settings");let{preferredEditor:o,userName:i,userId:a,autoSync:d}=r.value;return!i||!a?s(`User name or ID not configured in ~/${ue}/config.json`):c("successfully loaded settings",{preferredEditor:o??"",userName:i,userId:a,autoSync:d??!1})};var Bi=()=>{let{currentNode:e,selectedIndex:t}=v(),n=w(e.id)[t];return{currentNodeId:e.id,selectedNodeId:n?.id??null,parentNodeId:n?.parentNodeId??null,selectedIndex:t}},Oi=(e,t)=>Math.max(0,Math.min(e,Math.max(0,t-1))),Ui=e=>{let{nodes:t}=v(),n=t[e.currentNodeId];if(n&&!n.isDeleted&&e.selectedNodeId){let i=w(n.id).findIndex(a=>a.id===e.selectedNodeId);if(i>=0)return L.navigate({currentNode:n,selectedIndex:i}),c("Restored navigation",null)}if(e.selectedNodeId){let o=t[e.selectedNodeId];if(o&&!o.isDeleted&&o.parentNodeId){let i=t[o.parentNodeId];if(i&&!i.isDeleted){let a=w(i.id).findIndex(d=>d.id===o.id);if(a>=0)return L.navigate({currentNode:i,selectedIndex:a}),c("Restored navigation to moved node",null)}}}if(n&&!n.isDeleted){let o=w(n.id);return L.navigate({currentNode:n,selectedIndex:Oi(e.selectedIndex,o.length)}),c("Restored navigation to previous container",null)}if(e.parentNodeId){let o=t[e.parentNodeId];if(o&&!o.isDeleted){let i=w(o.id);return L.navigate({currentNode:o,selectedIndex:Oi(e.selectedIndex,i.length)}),c("Restored navigation to parent",null)}}let r=t[v().rootNodeId];return!r||r.isDeleted?s("Unable to restore navigation"):(L.navigate({currentNode:r,selectedIndex:0}),c("Restored navigation to root",null))};import Zi from"node:fs";import nl from"node:path";import rl from"react";import{Box as el}from"ink";import fn from"react";import{Box as Ir,Text as _d}from"ink";import ye from"react";import{Text as $i}from"ink";import _i,{useEffect as Wi,useState as Rd}from"react";var Hi={help:["\u276F "],default:["\u276F "],move:["\u25C6 ","\u25C6 "],"command-line":["\u276F "]},re=({isSelected:e,placeholder:t=" "})=>{let{mode:n}=_(),r=Hi[n]??Hi.default,[o,i]=Rd(0);if(Wi(()=>{i(0)},[r]),Wi(()=>{if(!e)return;let d=setInterval(()=>{i(u=>(u+1)%r.length)},500);return()=>clearInterval(d)},[e,r]),!e)return _i.createElement($i,null,t);let a=r[o]??r[0]??t;return _i.createElement($i,{color:N.accent,dimColor:o===1},a)};import{Box as Er,Text as Md}from"ink";import cn from"react";var un=({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)),u=Math.max(0,Math.min(n,e.length-1)),m=Math.max(0,e.length-d),g=o?Math.min(m,Math.max(0,u-d+1)):Math.min(m,Math.floor(u/d)*d),h=g+d,C=e.slice(g,h),I=e.length>d,b=i,T=I?Math.max(1,Math.floor(d/e.length*b)):b,S=Math.max(0,b-T),R=Math.max(1,e.length-d),U=I?Math.floor(g/R*S):0;return cn.createElement(Er,{flexDirection:"row",height:i,width:"100%"},cn.createElement(Er,{flexDirection:"column",flexGrow:1,height:i},C),cn.createElement(Er,{flexDirection:"column",width:1,height:b},Array.from({length:b}).map((De,Fe)=>cn.createElement(Md,{key:Fe,color:I&&Fe>=U&&Fe<U+T?N.accent:N.secondary},I?"\u2502":" "))))};import{Box as mn,Text as Bd}from"ink";import Xe from"react";import{Text as Pd}from"ink";import kd from"react";var Ld=e=>e.toLowerCase().trim(),Dd=(e,t=nt)=>{let n=Ld(e);return t[n]?t[n]:pt(n)},dt=({id:e,isSelected:t})=>{let n=E.getContributor(e);if(n)return kd.createElement(Pd,{underline:t,color:Dd(n.name)},"@"+n.name)};import{Text as Fd}from"ink";import Od from"react";var lt=({id:e,isSelected:t})=>{let n=E.getTag(e);if(n)return Od.createElement(Fd,{underline:t,backgroundColor:Y(n.name),color:N.primary}," "+n.name+" ")};var Ki=({width:e,ticket:t,isSelected:n})=>{let r=e-14,o=Ft(Fn(t.title),r),i=Un(t),a=$n(t);return Xe.createElement(mn,{borderStyle:"round",width:e-7,height:4,flexDirection:"column",borderColor:n?N.accent:N.secondary,justifyContent:"space-between"},Xe.createElement(mn,{borderBottom:!0},Xe.createElement(mn,{paddingLeft:1,flexDirection:"column"},Xe.createElement(Bd,{color:N.primary},o))),Xe.createElement(mn,{flexDirection:"row",paddingLeft:1},i.map(d=>Xe.createElement(lt,{key:d.id,id:d.id})),a.map(d=>Xe.createElement(dt,{key:d.id,id:d.id}))))};import Ud from"chalk";import{Box as At,Text as Cr}from"ink";import Ae from"react";var $d=(e,t)=>e.length>=t?e.slice(0,t)+"...":e,Vi=({width:e,ticket:t,isSelected:n,index:r,mode:o})=>{let i=w(t.id),a=T=>{let S=i.find(R=>R.title===T);return S?w(S.id).map(R=>typeof R.props?.value=="string"?R.props.value:"").filter(R=>!!R):[]},d=a("Tags").map(T=>E.getTag(T)).filter(T=>!!T),u=a("Assignees").map(T=>E.getContributor(T)).filter(T=>!!T),m=1,g=d.length*(1+m),h=u.length*(2+m),C=d.map(T=>Ae.createElement(At,{key:T.id,paddingRight:m},Ae.createElement(Cr,{color:Y(T.name)},"\u25A0"))),I=u.map(T=>Ae.createElement(At,{key:T.id,paddingRight:m},Ae.createElement(Cr,{color:pt(T.name)},"@"+T.name.at(0)))),b=n?N.accent:o===p.MOVE?N.secondary:N.primary;return Ae.createElement(At,{borderBottom:!0,justifyContent:"space-between"},Ae.createElement(At,null,Ae.createElement(re,{isSelected:n,placeholder:Ud.dim.gray(r+1+" ")}),Ae.createElement(Cr,{wrap:"truncate",color:b},$d(t.title,e-g-h-14))),Ae.createElement(At,null,C,I))};var Wd=({swimlane:e,isSelected:t,width:n,height:r,isDense:o,isFocused:i,listSelectedIndex:a,mode:d})=>{let{renderedChildrenIndex:u}=_(),m=u[e.id]??[],g=`${e.title} (${m.length})`,h=3,C=o?1:4,I=r-h-(o?2:1),b=ye.createElement(Ir,{borderStyle:"round",borderColor:N.secondary,justifyContent:"flex-start",borderLeft:!1,borderTop:!1,borderRight:!1},ye.createElement(re,{isSelected:t}),ye.createElement(_d,{bold:!0,color:t?N.accent:N.primary},g," ",e.readonly?"\u{1F512}":"")),T=(S,R)=>{let U=i&&a===R;return o?ye.createElement(Vi,{key:S.id,index:R,width:n,ticket:S,isSelected:U,mode:d}):ye.createElement(Ki,{key:S.id,width:n,ticket:S,isSelected:U})};return ye.createElement(Ir,{flexDirection:"column",width:n,borderStyle:"round",borderColor:t?N.accent:N.secondary,paddingRight:1,paddingLeft:1,height:r},b,ye.createElement(Ir,{padding:o?1:0},m.length>0&&ye.createElement(un,{selectedIndex:a,height:I,itemHeight:C},m.map(T)),ye.createElement(re,{isSelected:i&&a===-1})))},ji=ye.memo(Wd);import{Box as Tr,Text as Zd}from"ink";import He,{useEffect as Ar,useMemo as Yi}from"react";import Je from"chalk";import Gi from"string-width";import{decodeTime as Hd}from"ulid";var Kd=(e,t)=>e+" ".repeat(Math.max(0,t-Gi(e))),Vd=(e,t)=>" ".repeat(Math.max(0,t-Gi(e)))+e,jd=e=>(()=>{let n={"add.issue":"Created with title","assign.issue":"Assigned to","unassign.issue":"Unassigned from","close.issue":"Closed","delete.node":"Deleted","edit.title":"Changed title to","edit.description":"Changed description","reopen.issue":"Reopened","tag.issue":"Tagged with","untag.issue":"Removed tag","lock.node":"Locked node","move.node":"Moved issue"};return(o=>n[o]??(o.endsWith("e")?`${o}d`:`${o}ed`))(e)})(),Gd=e=>{switch(e.action){case"move.node":{let t=E.getNode(e.payload.parent);return`to ${t?Je.dim.bgBlack(` ${t.title} `):"unknown"} with rank ${e.payload.rank}`}case"tag.issue":{let t=v().tags[e.payload.tagId];return t?Je.bgHex(Y(t.name))(` ${t.name} `):"unknown tag"}case"untag.issue":{let t=v().tags[e.payload.tagId];return t?Je.bgHex(Y(t.name))(` ${t.name} `):"unknown tag"}case"assign.issue":{let t=v().contributors[e.payload.contributor];return t?Je.hex(Y(t.name))(` ${t.name} `):"unknown user"}case"unassign.issue":{let t=v().contributors[e.payload.contributor];return t?Je.hex(Y(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""}},zd=e=>{let t=so(Hd(e));return Je.gray(Vd(t,8))},qd=12,Yd=e=>Kd(`${e}`,qd),zi=e=>{let t=zd(e.id),n=Yd(e.userName),r=jd(e.action),o=Gd(e),i=Je.dim("\u203A"),a=[r,o].filter(Boolean).join(" ");return`${n} ${t} ${i} ${a}`};import{Box as pn,Text as Xd}from"ink";import we from"react";var qi=({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 E.getContributor(d)?.id;if(o==="Tags")return E.getTag(d)?.id}).filter(a=>!!a);return we.createElement(pn,{alignItems:"center",paddingTop:1},we.createElement(pn,{minWidth:12},we.createElement(re,{isSelected:n}),we.createElement(Xd,{color:n?N.accent:N.secondary2},o,":")),we.createElement(pn,{flexDirection:"row",marginLeft:1,paddingRight:1},i.map((a,d)=>{let u=r.id===t.id&&d===e;return we.createElement(pn,{key:`${o}-${a}`,paddingRight:2,minHeight:1},we.createElement(re,{isSelected:u}),o==="Assignees"?we.createElement(dt,{isSelected:u,id:a}):o==="Tags"?we.createElement(lt,{isSelected:u,id:a}):null)})))};import{Box as gn,Text as br}from"ink";import Re,{useEffect as Jd}from"react";var Sr=({id:e,label:t,text:n,height:r,selected:o,maxWidth:i})=>{let{selectedIndex:a,currentNode:d}=_(),u=C=>String(C).replace(/\r?\n/g,""),m=typeof n=="string"?n.split(/\r?\n|\u2028|\u2029/):[];Jd(()=>{let C=[];return m.forEach((I,b)=>{let T=te.text({id:`${b}`,name:`Line ${b+1}`,parentNodeId:e,props:{value:I},readonly:!0}),S=E.createNodeAtPosition(T);Oe(S)&&C.push(S.value.id)}),()=>C.forEach(E.deleteNode)},[e,n]);let g="\u2029",h=m.map((C,I)=>{let b=d.id===e&&a===I;return Re.createElement(gn,{key:`${e}-${I}`},Re.createElement(br,{color:b?N.primary:N.secondary2,dimColor:!b},`${I+1} `.padStart(5,"\xA0")),Re.createElement(br,{backgroundColor:b?"gray":""},u(C.length?Ft(C,i-10):g)))});return Re.createElement(gn,{flexDirection:"column",paddingTop:1},Re.createElement(gn,null,Re.createElement(re,{isSelected:o}),Re.createElement(br,{color:o?N.accent:N.secondary2},t)),Re.createElement(gn,{flexDirection:"row",borderStyle:"round",borderColor:N.secondary,paddingLeft:1,paddingRight:1,marginLeft:1},Re.createElement(un,{scrollByOne:!0,children:h,height:r-2,selectedIndex:a,itemHeight:1})))};var Qd=e=>`${e}::log`,Xi=e=>e==="Assignees"||e==="Tags",Ji=({ticket:e,height:t})=>{let{selectedIndex:n,currentNode:r}=_(),o=process.stdout.columns||120,i=Yi(()=>Qd(e.id),[e.id]),a=Yi(()=>[...e.log].reverse().map(zi).join(`
50
- `),[e.log]);Ar(()=>{if(E.getNode(i))return;let R={...te.field(i,"Log",e.id,{value:a}),readonly:!0,childRenderAxis:"vertical"};return E.createNodeAtPosition(R),()=>{E.deleteNode(i)}},[i,e.id,a]),Ar(()=>{let S=E.getNode(i);S&&S.props.value!==a&&E.updateNode({...S,props:{...S.props,value:a},childRenderAxis:"vertical",readonly:!0})},[i,a]);let d=r.id===e.id,u=r.id===i||r.parentNodeId===i;Ar(()=>{u&&(n>=0||L.navigate({selectedIndex:0}))},[u,n]);let m=w(e.id);if(u){let S=E.getNode(i),U=t-3;return He.createElement(Tr,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},S?He.createElement(Sr,{id:S.id,label:"Event log",text:S.props.value??"",selected:!1,maxWidth:o,height:U}):null)}let g=m.reduce((S,R)=>Xi(R.title)||R.id===i?S+1:S,0),h=2,C=g*1,b=t-3-C-h,T=(S,R)=>Xi(S.title)?He.createElement(qi,{key:S.id,parent:S,selected:R,selectedIndex:n}):S.id===i?He.createElement(Tr,{key:S.id,paddingTop:1},He.createElement(re,{isSelected:R}),He.createElement(Zd,{backgroundColor:N.secondary,color:R?N.accent:N.primary}," History \u203A\u203A ")):S.title==="Description"?He.createElement(Sr,{label:"Description (press e to edit)",key:S.id,id:S.id,text:S.props.value??"",selected:R,maxWidth:o,height:b}):null;return He.createElement(Tr,{width:o,flexDirection:"column",paddingRight:1,paddingBottom:1,minHeight:t},m.map((S,R)=>T(S,d&&n===R)))};var tl=({swimlanes:e,currentNode:t,selectedIndex:n,breadCrumb:r,mode:o,viewMode:i,height:a,width:d})=>{let u=t.context,m=u===P.TICKET||u===P.FIELD_LIST||u===P.FIELD,g=u===P.BOARD||u===P.SWIMLANE,h=u===P.TICKET?t:r.find(S=>S.context===P.TICKET),C=Math.floor(d/3),I=Math.floor(d/Math.max(e.length,1)),b=Math.min(I,C),T=i==="dense";return fn.createElement(el,{flexDirection:"row",height:a},g&&e.map((S,R)=>{let U=t.id===S.id,De=U?n:-1,Fe=t.context===P.BOARD&&n===R;return fn.createElement(ji,{key:S.id,height:a,width:b,swimlane:S,isSelected:Fe,isDense:T,isFocused:U,listSelectedIndex:De,mode:o})}),m&&h&&fn.createElement(Ji,{height:a,ticket:h}))},vn=fn.memo(tl);import{render as ol}from"ink";import{Writable as il}from"node:stream";var wt=e=>String(e).padStart(2,"0"),sl=e=>{let t=e.getUTCFullYear(),n=wt(e.getUTCMonth()+1),r=wt(e.getUTCDate()),o=wt(e.getUTCHours()),i=wt(e.getUTCMinutes()),a=wt(e.getUTCSeconds());return`${t}-${n}-${r}_${o}-${i}-${a}`},al=e=>e.trim().replace(/\s+/g,"-").replace(/[^A-Za-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^[-.]+|[-.]+$/g,"").toLowerCase()||"board",dl=async(e,{width:t,height:n})=>{let r="",o=new il({write(a,d,u){let m=ll(a.toString()).trimEnd();m.trim().length>0&&m.includes("\u256D")&&(r=m),u()}});o.columns=t,o.rows=n,o.isTTY=!0;let i=ol(e,{stdout:o,debug:!1,exitOnCtrlC:!1,patchConsole:!1,incrementalRendering:!1});return await new Promise(a=>setTimeout(a,0)),i.unmount(),r},ll=e=>e.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,""),Qi=async()=>{let{currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:r,mode:o,renderedChildrenIndex:i}=v(),a=n.find(R=>R.context==="BOARD");if(!a)return s("No board found to export");let d=120,u=40,m=await dl(rl.createElement(vn,{height:u,width:d,swimlanes:(i[a.id]??[]).filter(R=>R!==void 0&&Qe(R)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:r,mode:o}),{width:d,height:u});if(!m)return s("Failed to render board export");let g=ve(process.cwd());if(l(g))return s("Unable to export, epiq root not found");let h=new Date,C=sl(h),I=`board_${al(a.title)}_${C}.md`,b=Do(g.value);Zi.mkdirSync(b,{recursive:!0});let T=nl.join(b,I),S=`# Board - ${a.title}
51
- Date: ${h.toISOString()}
52
-
53
- \`\`\`text
54
- ${m}
55
- \`\`\`
56
- `;return Zi.writeFileSync(T,S,"utf8"),c("Exported board layout",T)};var es=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 ts=e=>Object.values(v().tags).find(t=>t.name===e),ns=e=>Object.values(v().contributors).find(t=>t.name===e),rs=[{systemOnly:!0,intent:M.Move,mode:p.COMMAND_LINE,action:()=>{let e=Q();if(l(e))return s("Unable to resolve user ID");let{modifier:t}=ne().commandMeta,n=()=>{let d=We();if(!d)return s("No pending move state");let u=d.payload.id;if(!v().nodes[u])return s("Moved node not found");let g=d.payload.parent,h=v().nodes[g];if(!h)return s("Move parent not found");let C=w(g).findIndex(I=>I.id===u);return C===-1?s("Moved node not found among rendered children"):(L.navigate({currentNode:h,selectedIndex:C}),c("Synchronized navigation to moved node",null))},r=d=>{if(l(d))return s(d.message);let u=n();return l(u)?s(u.message):c("Updated move preview",null)},{currentNode:o,selectedIndex:i}=v(),a=w(o.id)[i];if(!a)return A({mode:p.DEFAULT}),s("No move target");if(t==="start"){if(a.readonly)return s("Target node is read-only");if(i===-1)return s("No item selected");if(!a.parentNodeId)return s("Target has no parent");let d=F(a.parentNodeId),u=d.findIndex(({id:b})=>b===a.id);if(u===-1)return s("Target not found among siblings");let m=d[u-1],g=d[u+1],h=g!=null?{at:"before",sibling:g.id}:m!=null?{at:"after",sibling:m.id}:{at:"start"},C=vr({id:a.id,parentId:a.parentNodeId,position:h});if(l(C))return C;St({id:W(),action:"move.node",payload:{id:a.id,parent:a.parentNodeId,rank:C.value},...e.value}),A({mode:p.MOVE});let I=n();return l(I)?s(I.message):c("Move initialized",null)}if(t==="next")return A({mode:p.MOVE}),r(yr(1));if(t==="previous")return A({mode:p.MOVE}),r(yr(-1));if(t==="to-next")return A({mode:p.MOVE}),r(xr(1));if(t==="to-previous")return A({mode:p.MOVE}),r(xr(-1));if(t==="confirm"){A({mode:p.DEFAULT});let d=We();if(!d)return s("No pending move to confirm");let u=J(d);if(l(u))return u;let m=n();return l(m)?s(m.message):(St(null),c("Moved item",null))}return t==="cancel"?(St(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{currentNode:t,selectedIndex:n}=v(),r=w(t.id)[n];return r?J({id:W(),action:"delete.node",payload:{id:r.id},...e.value}):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=Ie(v().breadCrumb,"TICKET");if(l(t))return s("Edit target must be an issue");let n=t.value;if(n.readonly)return s("Cannot edit readonly field");let{currentNode:r,selectedIndex:o}=v();if(!w(n.id)[o])return s("No selected field");let a=w(r.id)[o];if(!a)return s("No selected field");if(a.readonly)return s("Cannot edit readonly field");let d=a.props.value;if(typeof d!="string")return s("Selected field is not editable text");let u=ko(d);if(l(u))return s("Failed to edit field");let m=u.value;return m===d?c("No changes made",null):a.title==="Description"?J({id:W(),action:"edit.description",payload:{id:a.id,md:m},...e.value}):a.title==="Title"?J({id:W(),action:"edit.title",payload:{id:a.id,name:m},...e.value}):s(`Editing not supported for "${a.title}"`)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Filter,mode:p.COMMAND_LINE,action:()=>{let{modifier:e,inputString:t}=ne().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>j(f.FILTER).map(u=>u.split(n)[0]).includes(d))(r))return s("Invalid filter modifier");let a={target:r,operator:"=",value:t.trim()};return ae(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{currentNode:t,selectedIndex:n}=v(),r=w(t.id)[n];if(!r)return s("Unable to close issue, no target found");if(!ce(r))return s("Cannot close in this context");let o=v().nodes[Te];if(!o)return s("Unable to locate closed swimlane");if(r.parentNodeId===o.id)return s("Issue is already closed");let i=Ce(F(o.id).filter(d=>d.id!==r.id),{at:"end"});if(l(i))return i;let a=J({id:W(),action:"close.issue",payload:{id:r.id,parent:o.id,rank:i.value},...e.value});return l(a)?a:c("Issue closed",null)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.ReopenIssue,mode:p.COMMAND_LINE,action:()=>{let e=Q();if(l(e))return s("Unable to resolve user ID");let{currentNode:t,selectedIndex:n}=v(),r=w(t.id)[n];if(!r)return s("Unable to reopen issue, no target found");let o=r.context==="TICKET"?c("Resolved ticket",r):Be(r.id,"TICKET");if(l(o))return s("Cannot reopen in this context");let i=o.value,a=v().nodes[Te];if(!a)return s("Unable to locate closed swimlane");if(i.parentNodeId!==a.id)return s("Issue is not closed");if(!ce(i))return s("Target node is not issue");let d=es(i);if(!d)return s("Unable to resolve previous parent from issue history");if(d===a.id)return s("Previous parent resolves to closed swimlane");let u=v().nodes[d];if(!u)return s("Previous parent no longer exists");let m=Ce(F(u.id).filter(h=>h.id!==i.id),{at:"end"});if(l(m))return m;let g=J({id:W(),action:"reopen.issue",payload:{id:i.id,parent:u.id,rank:m.value},...e.value});return l(g)?g:c("Issue reopened",null)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetUserName,mode:p.COMMAND_LINE,action:()=>{let{userId:e,preferredEditor:t,userName:n}=fe(),r=zt()?.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=ln({userName:o,userId:i,preferredEditor:t??""});return l(a)?a:(tt({userName:o,userId:i}),A({mode:p.DEFAULT}),c(`Username set to "${r}"`,null))}},{intent:M.Init,mode:p.COMMAND_LINE,action:()=>{let e=Rr();if(l(e))return e;let{rootNodeId:t,nodes:n}=v();return L.navigate({currentNode:n[t],selectedIndex:0}),A({mode:p.DEFAULT}),c("Project initialized",null)}},{intent:M.SetEditor,mode:p.COMMAND_LINE,action:()=>{let e=zt()?.trim();if(!e)return s("No editor provided");let t=ln({preferredEditor:e});return l(t)?t:(tt({preferredEditor:e}),A({mode:p.DEFAULT}),c(`Editor configuration set to "${e}"`,null))}},{intent:M.SetAutoSync,mode:p.COMMAND_LINE,action:()=>{let e=ne().commandMeta.modifier;if(e!=="true"&&e!=="false")return s("Invalid response");let t=e.toLowerCase()==="true",n=ln({autoSync:t});return l(n)?n:(tt({autoSync:t}),A({mode:p.DEFAULT}),c(`Auto synchronization set to "${t}"`,null))}},{intent:M.NewItem,mode:p.COMMAND_LINE,action:(e,t)=>{let n=Q();if(l(n))return s("Unable to resolve user ID");if(!t.inputString)return s(`provide a name for your ${t.modifier}`);let{breadCrumb:r,currentNode:o,selectedIndex:i}=v(),a=d=>{let u=J(d);if(l(u))return u;let m=E.getNode(u.value.result.id);if(!m)return s("Created node not found");if(!m.parentNodeId)return u;let g=E.getNode(m.parentNodeId);return g?(L.navigate({currentNode:g,selectedIndex:E.getSiblings(m.parentNodeId).findIndex(({id:h})=>h===m.id)}),u):s("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:d}=v(),u=E.getNode(d);if(!u)return s("Workspace not found");let m=Ut(u.id);return l(m)?m:a({id:W(),action:"add.board",payload:{id:W(),name:t.inputString,parent:u.id,rank:m.value},...n.value})}if(t.modifier==="swimlane"){let d=Ie(r,"BOARD");if(l(d))return s("Unable to add swimlane in this context");let u=Ut(d.value.id);return l(u)?u:a({id:W(),action:"add.swimlane",payload:{id:W(),name:t.inputString,parent:d.value.id,rank:u.value},...n.value})}if(t.modifier==="issue"){let d=w(o.id)[i],u=o.context==="SWIMLANE"?o:o.context==="BOARD"&&d?.context==="SWIMLANE"?d:(()=>{let b=Ie(r,"SWIMLANE");return l(b)?null:b.value})();if(!u)return s("Unable to add issue in this context");let m=Ut(u.id);if(l(m))return m;let g=Lo({name:t.inputString,parent:u.id,rank:m.value,user:n.value}),h=Ho(g);if(h.some(b=>l(b)))return s("Issue create failed: "+h.filter(l).map(b=>b.message).filter(Boolean).join(", "));let C=h[0];if(!C||l(C))return s("Issue creation failed");let I=g[0]?.payload.id;return I?(L.navigate({currentNode:u,selectedIndex:E.getSiblings(u.id).findIndex(({id:b})=>b===I)}),c("Issue created",null)):s("Unable to determine ticket id")}return c("Success",null)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.SetView,mode:p.COMMAND_LINE,action:()=>{let{commandMeta:e}=ne();return e.validity===be.Invalid?s("Invalid command "+Ee):(ae(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{currentNode:t,selectedIndex:n}=v(),r=w(t.id)[n];if(!r)return s("Missing node");if(r.readonly)return s("Cannot rename readonly node");let o=zt();return o?J({id:W(),action:"edit.title",payload:{id:r.id,name:o},...e.value}):s("Provide a new name")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.UntagTicket,mode:p.COMMAND_LINE,action:()=>{let e=Q();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide a tag");let o=ts(r);if(!o)return s(`Tag "${r}" does not exist`);let{selectedNode:i}=v();if(!i)return s("Invalid untag target");let a=Be(i.id,"TICKET");if(l(a))return s("Unable to untag issue in this context");let d=a.value,u=E.getFieldByTitle(d.id,"Tags");if(!u)return s("Unable to locate tags field");let m=w(u.id).find(g=>g.props?.value===o.id);return m?J({id:W(),action:"untag.issue",payload:{id:m.id,target:d.id,tagId:o.id},...e.value}):s("Issue is not tagged with that tag")},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{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide a tag");let{selectedIndex:o,currentNode:i}=v(),a=w(i.id)[o];if(!a)return s("Invalid tag target");let d=Be(a.id,"TICKET");if(l(d))return s("Unable to tag issue in this context");let u=d.value,m=ts(r),g;if(m)g=m.id;else{let I=W(),b=J({id:W(),action:"create.tag",payload:{id:I,name:r},userId:e.value.userId,userName:e.value.userName});if(l(b))return b;g=b.value.result.id}let h=E.getFieldByTitle(u.id,"Tags");return h?w(h.id).some(I=>I.props?.value===g)?s("Already tagged with that tag"):J({id:W(),action:"tag.issue",payload:{id:W(),target:u.id,tagId:g},...e.value}):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{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide an assignee");let{selectedIndex:o,currentNode:i}=v(),a=w(i.id)[o];if(!a)return s("Invalid assign target");let d=Be(a.id,"TICKET");if(l(d))return s("Unable to assign issue in this context");let u=d.value,m=ns(r),g;if(m)g=m.id;else{let I=W(),b=J({id:W(),action:"create.contributor",payload:{id:I,name:r},userId:e.value.userId,userName:e.value.userName});if(l(b))return b;g=b.value.result.id}let h=E.getFieldByTitle(u.id,"Assignees");return h?w(h.id).some(I=>I.props?.value===g)?s("Assignee already assigned"):J({id:W(),action:"assign.issue",payload:{id:W(),target:u.id,contributor:g},...e.value}):s("Unable to locate assignees field")},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.UnassignUserFromTicket,mode:p.COMMAND_LINE,action:()=>{let e=Q();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide an assignee to remove");let o=ns(r);if(!o)return s(`Assignee "${r}" does not exist`);let{selectedNode:i}=v();if(!i)return s("Invalid unassign target");let a=Be(i.id,"TICKET");if(l(a))return s("Unable to unassign in this context");let d=a.value,u=E.getFieldByTitle(d.id,"Assignees");if(!u)return s("Unable to locate assignees field");let m=w(u.id).find(g=>g.props?.value===o.id);return m?J({id:W(),action:"unassign.issue",payload:{id:m.id,target:d.id,contributor:o.id},...e.value}):s(`Issue is not assigned to "${r}"`)},onSuccess:()=>A({mode:p.DEFAULT})},{intent:M.Sync,mode:p.COMMAND_LINE,action:async()=>{let e=Bi();V(()=>""),A({syncStatus:{msg:"Syncing",status:"syncing"}});let{userId:t,userName:n}=fe();if(!t)return s("Unable to resolve userId");if(!n)return s("Unable to resolve userName");let r=Ge()?Rr():c("No pending default events",null);if(l(r))return s(`Unable to persist default events. ${r.message}`);let o=Q();if(l(o)||!o.value)return s("Unable to resolve event log path");let i=er(o.value);logger.debug("[sync-command] pending defaults",Ge());let a=await Si({ownEventFileName:i});if(l(a))return A({syncStatus:{msg:a.message,status:"outOfSync"}}),s(`Unable to sync state. ${a.message}`);A({syncStatus:{msg:"Synced",status:"synced"},mode:p.DEFAULT});let d=ve(process.cwd());if(l(d))throw new Error(d.message);let u=ht(d.value);if(l(u))return s("Unable to load events");qe(u.value);let m=Ui(e);return l(m)?m:c("Synced",!0)}},{intent:M.Peek,mode:p.COMMAND_LINE,action:async()=>{let e=Ie(v().breadCrumb,"BOARD");if(l(e))return e;let t=ve(process.cwd());if(l(t))throw new Error(t.message);let n=ht(t.value);if(l(n))return s(n.message);let r=n.value,{modifier:o}=ne().commandMeta,i;if(o==="now"){let C=wr();if(l(C))return C;let I=qe(r);return I.some(l)?s(I.map(b=>b.message).join(", ")):(A({mode:p.DEFAULT,readOnly:!1,timeMode:"live",unappliedEvents:[]}),c("Peeking now",!0))}if(o==="prev"){let C=v().eventLog.at(-2),I=Wn(C);if(I===null)return s("No previous event to peek");i=I}else if(o==="next"){let C=v().unappliedEvents.at(0),I=Wn(C);if(I===null)return s("No next event to peek");i=I}else{let C=Kt(o);if(!C)return s("Invalid peek date");i=C.getTime()}let a=e.value.id,{appliedEvents:d,unappliedEvents:u}=Wo(r,i),m=wr();if(l(m))return m;let g=qe(d);if(g.some(l))return s(g.map(C=>C.message).join(", "));let h=v().nodes[a];return h?(L.navigate({currentNode:h,selectedIndex:0}),A({mode:p.DEFAULT,readOnly:!0,timeMode:"peek",unappliedEvents:u}),c("Peeking ",!0)):s("Board did not exist at peek date")}},{intent:M.Export,mode:p.COMMAND_LINE,action:async()=>{let e=await Qi();return l(e)?e:(A({mode:p.DEFAULT}),c("Export successful",!0))}},{intent:M.Exit,mode:p.COMMAND_LINE,action:async()=>(L.exit(),c("Exit successful",!0))}];var cl=new Set(["peek","filter","view-help"]),ge=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=ne();if(!t)return s("No command to confirm");if(!e&&n===be.Invalid)return s("Invalid command");let i=Ao(t);if(Eo(),v().readOnly&&!cl.has(i))return vt({status:Ee.Fail,message:"Command not available in readonly state",value:null});let a=rs.filter(u=>e||u.systemOnly!==!0).find(u=>u.intent===i);if(!a)return vt({status:Ee.Fail,message:"Command not found",value:null});let d=await a.action(a,{command:t,inputString:o,modifier:r});return l(d)?vt(d):(Co({addToHistory:!e}),a.onSuccess?.(),vt(d))};var xn=[{intent:x.Exit,mode:p.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(A({mode:p.COMMAND_LINE}),V(()=>"move cancel"),ge({isForceExecutedBySystem:!0}))},{intent:x.InitMove,mode:p.DEFAULT,description:"[m] move init/confirm",action:()=>(A({mode:p.COMMAND_LINE}),V(()=>"move start"),ge({isForceExecutedBySystem:!0}))},{intent:x.ConfirmMove,mode:p.MOVE,action:()=>(A({mode:p.COMMAND_LINE}),V(()=>"move confirm"),ge({isForceExecutedBySystem:!0}))}],yn=[{intent:x.MovePreviousItem,mode:p.MOVE,action:()=>We()?(A({mode:p.COMMAND_LINE}),V(()=>"move previous"),ge({isForceExecutedBySystem:!0})):s("No pending move")},{intent:x.MoveNextItem,mode:p.MOVE,action:()=>We()?(A({mode:p.COMMAND_LINE}),V(()=>"move next"),ge({isForceExecutedBySystem:!0})):s("No pending move")}],os=[{intent:x.MoveToNextContainer,mode:p.MOVE,action:()=>We()?(A({mode:p.COMMAND_LINE}),V(()=>"move to-next"),ge({isForceExecutedBySystem:!0})):s("No pending move")},{intent:x.MoveToPreviousContainer,mode:p.MOVE,action:()=>We()?(A({mode:p.COMMAND_LINE}),V(()=>"move to-previous"),ge({isForceExecutedBySystem:!0})):s("No pending move")}];var is={[P.WORKSPACE]:[...xn,...yn],[P.BOARD]:[...xn,...yn],[P.SWIMLANE]:[...xn,...yn,...os],[P.TICKET]:[],[P.FIELD]:[],[P.FIELD_LIST]:[],[P.TEXT]:[]};var ss=[{intent:x.AddItem,mode:p.DEFAULT,description:"[n] new...",action:()=>(A({mode:p.COMMAND_LINE}),V(()=>`${f.NEW} `),c("Adding new item",null))},{intent:x.Delete,mode:p.DEFAULT,description:"[d] delete",action:()=>(A({mode:p.COMMAND_LINE}),V(()=>`${f.DELETE} `),c("Deleting item",null))},{intent:x.InitCommandLine,mode:p.DEFAULT,description:"[:] focus command line",action:()=>(A({mode:p.COMMAND_LINE}),V(()=>""),c("Entering command line mode",null))},{intent:x.Confirm,mode:p.DEFAULT,description:"[<Enter>] confirm/enter",action:()=>(L.enterChildNode(),c("Entering context",null))},{intent:x.Exit,mode:p.DEFAULT,description:"[q] exit context",action:()=>(L.enterParentNode(),c("Exiting context",null))},{intent:x.NavPreviousItem,mode:p.DEFAULT,description:"[arrows/hjkl] navigate",action:()=>(L.navigateToPreviousItem(),c("Navigating to previous item",null))},{intent:x.NavNextItem,mode:p.DEFAULT,action:()=>(L.navigateToNextItem(),c("Navigating to next item",null))},{intent:x.NavToPreviousContainer,mode:p.DEFAULT,action:()=>(L.navigateToPreviousContainer(),c("Navigating to previous container",null))},{intent:x.NavToNextContainer,mode:p.DEFAULT,action:()=>(L.navigateToNextContainer(),c("Navigating to next container",null))},{intent:x.Edit,mode:p.DEFAULT,action:()=>(A({mode:p.COMMAND_LINE}),V(()=>"edit"),ge(),c("Fired command",!0))},{intent:x.SetViewDense,mode:p.DEFAULT,description:"[v] view change (wide/dense)",action:()=>(A({viewMode:"dense"}),c("View set",null))},{intent:x.SetViewWide,mode:p.DEFAULT,action:()=>(A({viewMode:"wide"}),c("View set",null))}];var ul=500,ml=e=>e.replace(/[\r\n]/g,"").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,""),as=e=>{let t=ml(e);t&&V(n=>(n+t).slice(0,ul))};var ds=[{intent:x.ViewHelp,mode:p.DEFAULT,action:()=>(A({mode:p.HELP}),c("Viewing help",null))},{intent:x.Exit,mode:p.HELP,action:()=>(A({mode:p.DEFAULT}),c("Exiting help",null))},{intent:x.Confirm,mode:p.COMMAND_LINE,action:()=>(ge(),c("Executing command",null))},{intent:x.MoveCursorLeft,mode:p.COMMAND_LINE,action:()=>(Yn(-1),c("Moving cursor left",null))},{intent:x.MoveCursorRight,mode:p.COMMAND_LINE,action:()=>(Yn(1),c("Moving cursor right",null))},{intent:x.MoveCursorLeftOfWord,mode:p.COMMAND_LINE,action:()=>(Xn("left"),c("Moving cursor left of word",null))},{intent:x.MoveCursorRightOfWord,mode:p.COMMAND_LINE,action:()=>(Xn("right"),c("Moving cursor right of word",null))},{intent:x.ExitCommandLine,mode:p.COMMAND_LINE,action:()=>(A({mode:p.DEFAULT}),c("Exiting command line",null))},{intent:x.AutoCompleteCommand,mode:p.COMMAND_LINE,action:()=>(V((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:x.CaptureInput,mode:p.COMMAND_LINE,action:(e,{sequence:t})=>(as(t??""),c("Capturing input",null))},{intent:x.EraseInput,mode:p.COMMAND_LINE,action:()=>(ho(),c("Erasing input",null))},{intent:x.EraseInputWord,mode:p.COMMAND_LINE,action:()=>(No(),c("Erasing input word",null))},{intent:x.GetLastCommandFromHistory,mode:p.COMMAND_LINE,action:()=>(Io(),c("Getting last command from history",null))},{intent:x.GetNextCommandFromHistory,mode:p.COMMAND_LINE,action:()=>(bo(),c("Getting next command from history",null))}];import pl from"chalk";var hn=": for command line",ls="q to exit",cs=`${pl.hex(N.accent)("m")} to confirm`,Mr={[P.WORKSPACE]:[hn],[P.BOARD]:[hn],[P.BOARD+p.COMMAND_LINE]:[hn],[P.SWIMLANE]:[hn],[P.TICKET+p.HELP]:[ls],[P.SWIMLANE+p.HELP]:[ls],[P.TICKET]:[],[P.FIELD]:[],[P.SWIMLANE+p.MOVE]:[cs],[P.TICKET+p.MOVE]:[cs]};var Nn=e=>e.trim().toLocaleLowerCase(),gl=(e,t)=>{let n=E.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},fl=e=>{let{tags:t}=v(),n=E.getFieldByTitle(e,"Tags");return n?F(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},vl=e=>{let{contributors:t}=v(),n=E.getFieldByTitle(e,"Assignees");return n?F(n.id).map(r=>{let o=r.props?.value;return typeof o=="string"?t[o]?.name:void 0}).filter(r=>!!r):[]},us=(e,t)=>{let n=t.value;if(!n)return!0;switch(t.target){case"title":return Nn(e.title??"").includes(n);case"description":return Nn(gl(e.id,"Description")).includes(n);case"tag":return fl(e.id).map(Nn).some(d=>d.includes(n));case"assignee":return vl(e.id).map(Nn).some(d=>d.includes(n));default:return!0}};function ms(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 ps=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 En,Pr,kr=new Set,gs=()=>{for(let e of kr)e()},yl=e=>(kr.add(e),()=>kr.delete(e));function fs(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 s("Unable to derive state, currentNode not found");let u=ms(t,o,r);if(l(u))return logger.error(u.message),u;let m=u.value,{context:g}=d,h=Mr[g+n]??Mr[g]??[],C=[...ss,...is[g]??[],...ds],I=ps(C),b=hl(o,i),T=b[t]?.[e.selectedIndex]??null;return c("Derived successfully",{...e,currentNode:d,breadCrumb:m,availableHints:h,availableActions:C,actionIndex:I,selectedNode:T,renderedChildrenIndex:b})}var v=()=>(En||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),En);function rr(e){Pr=e;let t={readOnly:!1,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:""},eventLog:[],unappliedEvents:[],timeMode:"live"},n=fs(t);return l(n)?n:(En=n.value,gs(),c("State initialized",null))}function ae(e){let t=v(),n=e(t),r=fs(n);return l(r)?s(r.message??"Unable to update state"):(En=r.value,gs(),c("State updated",null))}var A=e=>ae(t=>({...t,...e}));var _=()=>xl(yl,v,v),hl=(e,t)=>{let n={};for(let r of Object.values(e))ce(r)&&t.length>0&&!t.every(o=>us(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=>v()?.renderedChildrenIndex[e]??[],wr=()=>Pr?rr(Pr):s("Cannot reset state: no initial workspace found");var L={exit(){process.exit(0)},enterChildNode(){let e=v(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=w(t.id)[n];!r||t.context==="FIELD"||L.navigate({currentNode:r,selectedIndex:w(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=v();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;L.navigate({currentNode:n,selectedIndex:i})},navigateToNextItem:()=>vs(1),navigateToPreviousItem:()=>vs(-1),navigateToNextContainer:()=>xs(1),navigateToPreviousContainer:()=>xs(-1),navigate:({currentNode:e=v().currentNode,selectedIndex:t})=>{A({currentNodeId:e.id,selectedIndex:t})}},vs=e=>{let t=v(),n=w(t.currentNode.id).length;if(n===0)return;let o=(Math.max(0,t.selectedIndex)+e+n)%n;L.navigate({selectedIndex:o})},xs=e=>{let{currentNode:t,nodes:n,selectedIndex:r}=v();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(C=>C.id===t.id);if(a<0)return;let d=i.at(a+e)??i.at(0);if(!d)return;let u=w(d.id),m=Math.max(0,u.length-1),g=Math.min(Math.max(0,r),m),h=u.length?g:-1;L.navigate({currentNode:d,selectedIndex:h})};var Pe="system",ke="ACTOR",Rt=Nl(),Le=null;function El(){let e=Object.values(v().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=v().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:v().nodes[v().rootNodeId],selectedIndex:0}}function Cl(){let e=El();L.navigate(e)}function Il(){let e=Rt(),t=Rt(),n=Rt(),r=Rt(),o=Rt(),i=z(void 0,void 0),a=z(void 0,void 0),d=z(a,void 0),u=z(void 0,void 0),m=z(u,void 0),g=z(m,void 0),h=z(void 0,void 0);return[{id:Me(),userId:Pe,userName:ke,action:"init.workspace",payload:{id:e,name:"Workspace",rank:i}},{id:Me(),userId:Pe,userName:ke,action:"add.board",payload:{id:t,name:"Default",parent:e,rank:a}},{id:Me(),userId:Pe,userName:ke,action:"add.swimlane",payload:{id:n,name:"Todo",parent:t,rank:u}},{id:Me(),userId:Pe,userName:ke,action:"add.swimlane",payload:{id:r,name:"In progress",parent:t,rank:m}},{id:Me(),userId:Pe,userName:ke,action:"add.swimlane",payload:{id:o,name:"Done",parent:t,rank:g}},{id:Me(),userId:Pe,userName:ke,action:"add.board",payload:{id:nn,name:"Closed",parent:e,rank:d}},{id:Me(),userId:Pe,userName:ke,action:"add.swimlane",payload:{id:Te,name:"Closed",parent:nn,rank:h}},{id:Me(),userId:Pe,userName:ke,action:"lock.node",payload:{id:nn}},{id:Me(),userId:Pe,userName:ke,action:"lock.node",payload:{id:Te}}]}function Ge(){return Le!==null}function Rr(){if(!Le||Le.length===0)return Le=null,c("No pending default events to persist",null);let e=Le.map(t=>Qt({event:t})).filter(l);return e.length>0?s([ct.bold.red("Persisting default events failed"),"",...e.map((t,n)=>`${ct.dim.gray(`${n+1}.`)} ${ct.dim(t.message)}`),`
55
+ `,qd=(e,t)=>{let n=new Map;for(let r of[...t,...e])n.set(Er(r),r);return[...n.values()].sort((r,o)=>{let i=Di(r)-Di(o);return i!==0?i:Er(r).localeCompare(Er(o))})},Cr=({sourceFile:e,targetFile:t})=>{let n=Ht(e);if(l(n))return s(n.message);let r=Ht(t);if(l(r))return s(r.message);let o=qd(r.value,n.value),i=zd(o);return(un.existsSync(t)?un.readFileSync(t,"utf8"):"")===i?c("Event file already merged",!1):(un.mkdirSync(Nr.dirname(t),{recursive:!0}),un.writeFileSync(t,i,"utf8"),c("Merged event file",!0))},br=({repoRoot:e,stateBranchRoot:t})=>{let n=bi(t);if(l(n))return s(n.message);let r=Je(t),o=Je(e),i=!1;for(let a of n.value){let d=Nr.join(r,a),u=Nr.join(o,a),m=Cr({sourceFile:d,targetFile:u});if(l(m))return s(m.message);i=i||m.value}return c("Hydrated event files from state branch",i)};var Oi=async(e=process.cwd())=>{let t=await Bi({cwd:e,ensureUpstream:!1});if(l(t))return t;let{repoRoot:n,stateBranchRoot:r}=t.value,o=await cn({cwd:r,branch:B});if(l(o))return s(o.message);let i=br({repoRoot:n,stateBranchRoot:r});return l(i)?s(i.message):c("Synced state branch",{repoRoot:n,stateBranchRoot:r})},Xd=({repoRoot:e,stateBranchRoot:t,ownEventFileName:n})=>{let r=yr({root:e,fileName:n}),o=yr({root:t,fileName:n});return Yd.existsSync(r)?Cr({sourceFile:r,targetFile:o}):c("Local own event file missing, nothing to merge",!1)},Bi=async({cwd:e,ensureUpstream:t})=>{let n=await Ai(e);if(l(n))return s(n.message);let r=n.value,o=Ei(r),i=await Ri(r);if(l(i))return s("Sync aborted. Unable to gitignore hydrated events");let a=await fr(r);if(l(a))return s(a.message);if(a.value)return s("Cannot sync while a git operation is in progress in the current repo");let d=await Mi(r);if(l(d))return s(d.message);let u=await Li({repoRoot:r,stateBranchRoot:o,ensureUpstream:t});if(l(u))return s(u.message);let m=await fr(o);if(l(m))return s(m.message);if(m.value)return s("Cannot sync while a git operation is in progress in the state branch");let p=Ii(r,o);return l(p)?s(p.message):c("Sync preconditions satisfied",{repoRoot:r,stateBranchRoot:o,bootstrapped:u.value})},Fi=async({repoRoot:e,stateBranchRoot:t,ownEventFileName:n})=>{let r=Xd({repoRoot:e,stateBranchRoot:t,ownEventFileName:n});if(l(r))return s(r.message);let o=await pi(t);if(l(o))return s(o.message);if(!r.value&&!o.value)return c("Own event file already up to date in state branch",{createdCommit:!1});let i=await ki({stateBranchRoot:t,ownEventFileName:n});if(l(i))return s(i.message);let a=await Pi({repoRoot:e,stateBranchRoot:t});return l(a)?s(a.message):c("Merged, staged, and committed own event file",{createdCommit:!0,commitSha:a.value})},Ui=async({cwd:e=process.cwd(),ownEventFileName:t})=>{if(t.includes("/")||t.includes("\\"))return s("Own event file must be a file name, not a path");if(!t.endsWith(".jsonl"))return s("Own event file must end with .jsonl");let n=await Bi({cwd:e,ensureUpstream:!0});if(l(n))return n;let{repoRoot:r,stateBranchRoot:o,bootstrapped:i}=n.value,a=await gi(r);if(l(a))return s(a.message);if(a.value)return s("Cannot run :sync while the repository is in detached HEAD state");let d=!1,u,m=!1,p=!1,y=!1,N=await cn({cwd:o,branch:B});if(l(N))return s(N.message);m=N.value;let S=br({repoRoot:r,stateBranchRoot:o});if(l(S))return s(S.message);y=S.value;let A=await Fi({repoRoot:r,stateBranchRoot:o,ownEventFileName:t});if(l(A))return s(A.message);if(d=A.value.createdCommit,u=A.value.commitSha,d||i){let I=await hr(o),C=I;if(l(I)&&mi(I.message)){let w=await cn({cwd:o,branch:B});if(l(w))return s(w.message);let U=await Fi({repoRoot:r,stateBranchRoot:o,ownEventFileName:t});if(l(U))return s(U.message);U.value.createdCommit&&(d=!0,u=U.value.commitSha),C=await hr(o)}if(l(C))return s(C.message);p=C.value,logger.debug("[sync] pushed to state branch",p)}else logger.debug("[sync] no commit created, skipped push");if(d){let I=await F({args:["rev-parse","HEAD"],cwd:o});if(l(I))return s(I.message);u=I.value.stdout.trim()}return c("Synced event logs with state branch",{repoRoot:r,stateBranchRoot:o,createdCommit:d,commitSha:u,pulled:m,pushed:p,hydrated:y,bootstrapped:i})};var _i=()=>{let{currentNode:e,selectedIndex:t}=v(),n=R(e.id)[t];return{currentNodeId:e.id,selectedNodeId:n?.id??null,parentNodeId:n?.parentNodeId??null,selectedIndex:t}},$i=(e,t)=>Math.max(0,Math.min(e,Math.max(0,t-1))),Wi=e=>{let{nodes:t}=v(),n=t[e.currentNodeId];if(n&&!n.isDeleted&&e.selectedNodeId){let i=R(n.id).findIndex(a=>a.id===e.selectedNodeId);if(i>=0)return L.navigate({currentNode:n,selectedIndex:i}),c("Restored navigation",null)}if(e.selectedNodeId){let o=t[e.selectedNodeId];if(o&&!o.isDeleted&&o.parentNodeId){let i=t[o.parentNodeId];if(i&&!i.isDeleted){let a=R(i.id).findIndex(d=>d.id===o.id);if(a>=0)return L.navigate({currentNode:i,selectedIndex:a}),c("Restored navigation to moved node",null)}}}if(n&&!n.isDeleted){let o=R(n.id);return L.navigate({currentNode:n,selectedIndex:$i(e.selectedIndex,o.length)}),c("Restored navigation to previous container",null)}if(e.parentNodeId){let o=t[e.parentNodeId];if(o&&!o.isDeleted){let i=R(o.id);return L.navigate({currentNode:o,selectedIndex:$i(e.selectedIndex,i.length)}),c("Restored navigation to parent",null)}}let r=t[v().rootNodeId];return!r||r.isDeleted?s("Unable to restore navigation"):(L.navigate({currentNode:r,selectedIndex:0}),c("Restored navigation to root",null))};import{ulid as Jd}from"ulid";var Hi=null,We=()=>structuredClone(Hi),Rt=e=>Hi=e,Ki=()=>{let{currentNode:e,selectedIndex:t}=v(),r=R(e.id)[t];return r?c("Resolved selected child",r):s("Target node not found")};var Vi=({id:e,parentId:t,position:n={at:"end"}})=>{let r=Z();if(l(r))return s("Unable to resolve user ID");let o=nt(t,e,n,r.value);return l(o)?o:c("Created pending move state",{id:Jd(),...r.value,action:"move.node",payload:{id:e,parent:t,rank:o.value}})},ji=e=>{Rt(e);let t=ft(e,!0);return l(t)?t:c("Node moved successfully",t.value)};function Ir(e){let t=Ki();if(l(t))return t;let{currentNode:n,nodes:r}=v();if(!n.parentNodeId)return s("Missing parent node id");let o=r[n.parentNodeId];if(!o)return s("Missing parent node");let i=O(o.id),a=i.findIndex(({id:m})=>m===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 u=Vi({id:t.value.id,parentId:d.id,position:{at:"end"}});return l(u)?u:ji(u.value)}function Sr(e){let t=Ki();if(l(t))return t;let{currentNode:n,selectedIndex:r}=v(),i=O(n.id)[r+e];if(!i)return s("Missing sibling node");let a=Vi({id:t.value.id,parentId:n.id,position:{at:e===1?"after":"before",sibling:i.id}});return l(a)?a:ji(a.value)}import il from"node:os";import Yi from"node:path";import{z as Mt}from"zod";import{accessSync as Zd,copyFileSync as Qd,existsSync as mn,mkdirSync as Gi,readdirSync as zi,readFileSync as el,renameSync as tl,rmSync as nl,statSync as qi,unlinkSync as rl,writeFileSync as ol}from"node:fs";import ct from"node:path";var de={writeToFile:(e,t)=>{try{let n=ct.dirname(e);mn(n)||Gi(n,{recursive:!0});let r=typeof t=="string"?t:JSON.stringify(t,null,2);ol(e,r,"utf-8")}catch(n){logger.error(`Failed to write file at ${e}:`,n)}},readFile:e=>{try{return el(e,"utf-8")}catch(t){return logger.error(`Failed to read file at ${e}:`,t),null}},readFileJSON(e){try{let t=de.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 mn(e)&&qi(e).isDirectory()}catch{return!1}},async fileExists(e){try{return await Zd(e),!0}catch{return!1}},mkDir:e=>Gi(e,{recursive:!0}),locateFolder:e=>{let t=process.cwd(),{root:n}=ct.parse(t);for(;;){let r=ct.join(t,e);try{if(mn(r)&&qi(r).isDirectory())return r}catch{logger.error(`Unable to locate folder ${e}`)}if(t===n)break;t=ct.dirname(t)}return null},readFirstJSON(e){try{if(!de.dirExists(e))return null;let t=zi(e).filter(r=>r.endsWith(".json")).sort()[0];if(!t)return null;let n=ct.join(e,t);return de.readFileJSON(n)}catch(t){return logger.error(`Could not read first JSON in folder ${e}`,t),null}},listDir:e=>{try{return de.dirExists(e)?zi(e):[]}catch(t){return logger.error(`Failed to list dir ${e}`,t),[]}},rmFile(e){try{rl(e)}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove file ${e}`)}},rmDir(e){try{nl(e,{recursive:!0,force:!0})}catch(t){t?.code!=="ENOENT"&&logger.error(`Unable to remove dir ${e}`)}},moveFile(e,t,n){if(this.mkDir(ct.dirname(t)),!n?.overwrite&&mn(t))throw new Error(`moveFile: destination exists: ${t}`);n?.overwrite&&this.rmFile(t);try{tl(e,t)}catch(r){if(r?.code==="EXDEV"){Qd(e,t),this.rmFile(e);return}throw r}}};var sl={userId:"",userName:"",preferredEditor:"",autoSync:!1},Xi=Mt.object({preferredEditor:Mt.string().optional(),userName:Mt.string().optional(),userId:Mt.string().optional(),autoSync:Mt.boolean().optional()}).strict(),al="config.json",Ji=()=>Yi.join(il.homedir(),ce),Ar=()=>Yi.join(Ji(),al),Tr=()=>{try{return de.mkDir(Ji()),c(`Ensured ~/${ce} exists`,null)}catch{return s(`Unable to create ~/${ce}`)}},dl=e=>{let t;try{t=JSON.parse(e)}catch{return s(`Invalid ~/${ce}/config.json JSON`)}let n=Xi.safeParse(t??{});return n.success?c("Parsed config",n.data):s(`Invalid ~/${ce}/config.json shape: ${n.error.issues.map(r=>r.path.join(".")||r.message).join(", ")}`)},Zi=()=>{let e=Tr();if(l(e))return s(e.message);let t=Ar(),n=de.readFile(t);return n==null||n.trim()===""?c("No config found, using empty config",{autoSync:!1,preferredEditor:"",userId:"",userName:""}):dl(n)},Qi=e=>{let t=Tr();if(l(t))return s(t.message);let n=Xi.safeParse(e);if(!n.success)return s(`Invalid config: ${n.error.issues.map(o=>o.path.join(".")||o.message).join(", ")}`);let r=Ar();try{return de.writeToFile(r,JSON.stringify(n.data,null,2)+`
56
+ `),c("Config written",null)}catch{return s(`Unable to write ~/${ce}/config.json`)}},pn=e=>{let t=Zi();if(l(t))return s("Failed to read existing config");let n={...t.value,...e};return Qi(n)},es=()=>{let e=Ar(),t=Tr();if(l(t))return s(`Unable to create ~/${ce}`);if(!(de.readFile(e)!==null)){let u=Qi(sl);if(l(u))throw new Error(`Unable to create ~/${ce}/config.json`)}let r=Zi();if(l(r))throw new Error(r.message||"Unable to load settings");let{preferredEditor:o,userName:i,userId:a,autoSync:d}=r.value;return!i||!a?s(`User name or ID not configured in ~/${ce}/config.json`):c("successfully loaded settings",{preferredEditor:o??"",userName:i,userId:a,autoSync:d??!1})};import{spawnSync as ll}from"node:child_process";import cl from"node:os";import ts from"node:path";import{ulid as ul}from"ulid";function ml(){let{preferredEditor:e}=ge(),t=[e,process.env.VISUAL,process.env.EDITOR].filter(n=>!!n?.trim());return[...new Set(t)]}function pl(e,t){return/(^|\/)code(-insiders)?$/.test(e.trim())?`${e} --wait "${t}"`:`${e} "${t}"`}function ns(e){let t=ts.join(cl.tmpdir(),"epiq");de.mkDir(t);let n=ts.join(t,ul());de.writeToFile(n,e??"");let r=ml();for(let o of r){let i=pl(o,n),a=ll(i,{stdio:"inherit",shell:!0});if(!a.error&&a.status===0){let d=de.readFile(n);if(d==null)return s("Unable to read edited file");let u=d.replace(/\r?\n$/,"");return c("Successfully edited",u)}}return s("Unable to open editor")}import{monotonicFactory as gl,ulid as gn}from"ulid";var fn=gl(),rs=({name:e,parent:t,rank:n,user:{userId:r,userName:o}})=>{let i=fn(),a=fn(),d=fn(),u=fn(),m=Qr();if(l(m))return m;let p=G(m.value,void 0);if(l(p))return p;let y=G(p.value,void 0);return l(y)?y:c("Created issue events",[{id:gn(),userId:r,userName:o,action:"add.issue",payload:{id:i,parent:t,name:e,rank:n}},{id:gn(),userId:r,userName:o,action:"add.field",payload:{id:a,parent:i,name:"Description",val:"",rank:m.value}},{id:gn(),userId:r,userName:o,action:"add.field",payload:{id:d,parent:i,name:"Assignees",rank:p.value}},{id:gn(),userId:r,userName:o,action:"add.field",payload:{id:u,parent:i,name:"Tags",rank:y.value}}])};var os=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 is=e=>Object.values(v().tags).find(t=>t.name===e),ss=e=>Object.values(v().contributors).find(t=>t.name===e),as=[{systemOnly:!0,intent:M.Move,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{modifier:t}=ne().commandMeta,n=()=>{let d=We();if(!d)return s("No pending move state");let u=d.payload.id;if(!v().nodes[u])return s("Moved node not found");let p=d.payload.parent,y=v().nodes[p];if(!y)return s("Move parent not found");let N=R(p).findIndex(S=>S.id===u);return N===-1?s("Moved node not found among rendered children"):(L.navigate({currentNode:y,selectedIndex:N}),c("Synchronized navigation to moved node",null))},r=d=>{if(l(d))return s(d.message);let u=n();return l(u)?s(u.message):c("Updated move preview",null)},{currentNode:o,selectedIndex:i}=v(),a=R(o.id)[i];if(!a)return T({mode:g.DEFAULT}),s("No move target");if(t==="start"){if(a.readonly)return s("Target node is read-only");if(i===-1)return s("No item selected");if(!a.parentNodeId)return s("Target has no parent");let d=O(a.parentNodeId),u=d.findIndex(({id:A})=>A===a.id);if(u===-1)return s("Target not found among siblings");let m=d[u-1],p=d[u+1],y=p!=null?{at:"before",sibling:p.id}:m!=null?{at:"after",sibling:m.id}:{at:"start"},N=nt(a.parentNodeId,a.id,y,e.value);if(l(N))return N;Rt({id:W(),action:"move.node",payload:{id:a.id,parent:a.parentNodeId,rank:N.value},...e.value}),T({mode:g.MOVE});let S=n();return l(S)?s(S.message):c("Move initialized",null)}if(t==="next")return T({mode:g.MOVE}),r(Sr(1));if(t==="previous")return T({mode:g.MOVE}),r(Sr(-1));if(t==="to-next")return T({mode:g.MOVE}),r(Ir(1));if(t==="to-previous")return T({mode:g.MOVE}),r(Ir(-1));if(t==="confirm"){T({mode:g.DEFAULT});let d=We();if(!d)return s("No pending move to confirm");let u=j(d);if(l(u))return u;let m=n();return l(m)?s(m.message):(Rt(null),c("Moved item",null))}return t==="cancel"?(Rt(null),T({mode:g.DEFAULT}),c("Cancelling move",null)):s("Invalid move modifier")}},{intent:M.Delete,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{currentNode:t,selectedIndex:n}=v(),r=R(t.id)[n];return r?j({id:W(),action:"delete.node",payload:{id:r.id},...e.value}):s("Unable to resolve child to delete")},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.Edit,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let t=Ie(v().breadCrumb,"TICKET");if(l(t))return s("Edit target must be an issue");let n=t.value;if(n.readonly)return s("Cannot edit readonly field");let{currentNode:r,selectedIndex:o}=v();if(!R(n.id)[o])return s("No selected field");let a=R(r.id)[o];if(!a)return s("No selected field");if(a.readonly)return s("Cannot edit readonly field");let d=a.props.value;if(typeof d!="string")return s("Selected field is not editable text");let u=ns(d);if(l(u))return s("Failed to edit field");let m=u.value;return m===d?c("No changes made",null):a.title==="Description"?j({id:W(),action:"edit.description",payload:{id:a.id,md:m},...e.value}):a.title==="Title"?j({id:W(),action:"edit.title",payload:{id:a.id,name:m},...e.value}):s(`Editing not supported for "${a.title}"`)},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.Filter,mode:g.COMMAND_LINE,action:()=>{let{modifier:e,inputString:t}=ne().commandMeta,n=/(!=|=)/,[r,o]=e.split(n);if(!r||!(d=>z(f.FILTER).map(u=>u.split(n)[0]).includes(d))(r))return s("Invalid filter modifier");let a={target:r,operator:"=",value:t.trim()};return se(d=>({...d,filters:e==="clear"?[]:[...d.filters,a],mode:g.DEFAULT})),c("Viewing help",null)}},{intent:M.ViewHelp,mode:g.COMMAND_LINE,action:()=>(T({mode:g.HELP}),c("Viewing help",null))},{intent:M.CloseIssue,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{currentNode:t,selectedIndex:n}=v(),r=R(t.id)[n];if(!r)return s("Unable to close issue, no target found");if(!le(r))return s("Cannot close in this context");let o=v().nodes[be];if(!o)return s("Unable to locate closed swimlane");if(r.parentNodeId===o.id)return s("Issue is already closed");let i=nt(o.id,r.id,{at:"end"},e.value);if(l(i))return i;let a=j({id:W(),action:"close.issue",payload:{id:r.id,parent:o.id,rank:i.value},...e.value});return l(a)?a:c("Issue closed",null)},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.ReopenIssue,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{currentNode:t,selectedIndex:n}=v(),r=R(t.id)[n];if(!r)return s("Unable to reopen issue, no target found");let o=r.context==="TICKET"?c("Resolved ticket",r):Be(r.id,"TICKET");if(l(o))return s("Cannot reopen in this context");let i=o.value,a=v().nodes[be];if(!a)return s("Unable to locate closed swimlane");if(i.parentNodeId!==a.id)return s("Issue is not closed");if(!le(i))return s("Target node is not issue");let d=os(i);if(!d)return s("Unable to resolve previous parent from issue history");if(d===a.id)return s("Previous parent resolves to closed swimlane");let u=v().nodes[d];if(!u)return s("Previous parent no longer exists");let m=nt(u.id,i.id,{at:"end"},e.value);if(l(m))return m;let p=j({id:W(),action:"reopen.issue",payload:{id:i.id,parent:u.id,rank:m.value},...e.value});return l(p)?p:c("Issue reopened",null)},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.SetUserName,mode:g.COMMAND_LINE,action:()=>{let{userId:e,preferredEditor:t,userName:n}=ge(),r=Zt()?.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=pn({userName:o,userId:i,preferredEditor:t??""});return l(a)?a:(et({userName:o,userId:i}),T({mode:g.DEFAULT}),c(`Username set to "${r}"`,null))}},{intent:M.Init,mode:g.COMMAND_LINE,action:()=>{let e=Rr();if(l(e))return e;let{rootNodeId:t,nodes:n}=v();return L.navigate({currentNode:n[t],selectedIndex:0}),T({mode:g.DEFAULT}),c("Project initialized",null)}},{intent:M.SetEditor,mode:g.COMMAND_LINE,action:()=>{let e=Zt()?.trim();if(!e)return s("No editor provided");let t=pn({preferredEditor:e});return l(t)?t:(et({preferredEditor:e}),T({mode:g.DEFAULT}),c(`Editor configuration set to "${e}"`,null))}},{intent:M.SetAutoSync,mode:g.COMMAND_LINE,action:()=>{let e=ne().commandMeta.modifier;if(e!=="true"&&e!=="false")return s("Invalid response");let t=e.toLowerCase()==="true",n=pn({autoSync:t});return l(n)?n:(et({autoSync:t}),T({mode:g.DEFAULT}),c(`Auto synchronization set to "${t}"`,null))}},{intent:M.NewItem,mode:g.COMMAND_LINE,action:(e,t)=>{let n=Z();if(l(n))return s("Unable to resolve user ID");if(!t.inputString)return s(`provide a name for your ${t.modifier}`);let{breadCrumb:r,currentNode:o,selectedIndex:i}=v(),a=d=>{let u=j(d);if(l(u))return u;let m=b.getNode(u.value.result.id);if(!m)return s("Created node not found");if(!m.parentNodeId)return u;let p=b.getNode(m.parentNodeId);return p?(L.navigate({currentNode:p,selectedIndex:b.getSiblings(m.parentNodeId).findIndex(({id:y})=>y===m.id)}),u):s("Parent node not found")};if(t.modifier==="board"){let{rootNodeId:d}=v(),u=b.getNode(d);if(!u)return s("Workspace not found");let m=rt(u.id,n.value);return l(m)?m:a({id:W(),action:"add.board",payload:{id:W(),name:t.inputString,parent:u.id,rank:m.value},...n.value})}if(t.modifier==="swimlane"){let d=Ie(r,"BOARD");if(l(d))return s("Unable to add swimlane in this context");let u=rt(d.value.id,n.value);return l(u)?u:a({id:W(),action:"add.swimlane",payload:{id:W(),name:t.inputString,parent:d.value.id,rank:u.value},...n.value})}if(t.modifier==="issue"){let d=R(o.id)[i],u=o.context==="SWIMLANE"?o:o.context==="BOARD"&&d?.context==="SWIMLANE"?d:(()=>{let C=Ie(r,"SWIMLANE");return l(C)?null:C.value})();if(!u)return s("Unable to add issue in this context");let m=rt(u.id,n.value);if(l(m))return m;let p=rs({name:t.inputString,parent:u.id,rank:m.value,user:n.value});if(l(p))return p;let y=p.value,N=co(y);if(N.some(C=>l(C)))return s("Issue create failed: "+N.filter(l).map(C=>C.message).filter(Boolean).join(", "));let S=N[0];if(!S||l(S))return s("Issue creation failed");let I=y.find(C=>C.action==="add.issue")?.payload.id;return I?(L.navigate({currentNode:u,selectedIndex:b.getSiblings(u.id).findIndex(({id:C})=>C===I)}),c("Issue created",null)):s("Unable to determine ticket id")}return c("Success",null)},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.SetView,mode:g.COMMAND_LINE,action:()=>{let{commandMeta:e}=ne();return e.validity===Se.Invalid?s("Invalid command "+Ee):(se(t=>({...t,viewMode:e.modifier==="wide"?"wide":e.modifier==="dense"?"dense":t.viewMode})),c("View set",null))},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.Rename,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{currentNode:t,selectedIndex:n}=v(),r=R(t.id)[n];if(!r)return s("Missing node");if(r.readonly)return s("Cannot rename readonly node");let o=Zt();return o?j({id:W(),action:"edit.title",payload:{id:r.id,name:o},...e.value}):s("Provide a new name")},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.UntagTicket,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide a tag");let o=is(r);if(!o)return s(`Tag "${r}" does not exist`);let{selectedNode:i}=v();if(!i)return s("Invalid untag target");let a=Be(i.id,"TICKET");if(l(a))return s("Unable to untag issue in this context");let d=a.value,u=b.getFieldByTitle(d.id,"Tags");if(!u)return s("Unable to locate tags field");let m=R(u.id).find(p=>p.props?.value===o.id);return m?j({id:W(),action:"untag.issue",payload:{id:m.id,target:d.id,tagId:o.id},...e.value}):s("Issue is not tagged with that tag")},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.TagTicket,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide a tag");let{selectedIndex:o,currentNode:i}=v(),a=R(i.id)[o];if(!a)return s("Invalid tag target");let d=Be(a.id,"TICKET");if(l(d))return s("Unable to tag issue in this context");let u=d.value,m=is(r),p;if(m)p=m.id;else{let A=W(),I=j({id:W(),action:"create.tag",payload:{id:A,name:r},userId:e.value.userId,userName:e.value.userName});if(l(I))return I;p=I.value.result.id}let y=b.getFieldByTitle(u.id,"Tags");if(!y)return s("Unable to locate tags field");if(R(y.id).some(A=>A.props?.value===p))return s("Already tagged with that tag");let S=rt(y.id,e.value);return l(S)?S:j({id:W(),action:"tag.issue",payload:{id:W(),target:u.id,tagId:p,rank:S.value},...e.value})},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.AssignUserToTicket,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide an assignee");let{selectedIndex:o,currentNode:i}=v(),a=R(i.id)[o];if(!a)return s("Invalid assign target");let d=Be(a.id,"TICKET");if(l(d))return s("Unable to assign issue in this context");let u=d.value,m=ss(r),p;if(m)p=m.id;else{let A=W(),I=j({id:W(),action:"create.contributor",payload:{id:A,name:r},userId:e.value.userId,userName:e.value.userName});if(l(I))return I;p=I.value.result.id}let y=b.getFieldByTitle(u.id,"Assignees");if(!y)return s("Unable to locate assignees field");if(R(y.id).some(A=>A.props?.value===p))return s("Assignee already assigned");let S=rt(y.id,e.value);return l(S)?S:j({id:W(),action:"assign.issue",payload:{id:W(),target:u.id,contributor:p,rank:S.value},...e.value})},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.UnassignUserFromTicket,mode:g.COMMAND_LINE,action:()=>{let e=Z();if(l(e))return s("Unable to resolve user ID");let{modifier:t,inputString:n}=ne().commandMeta,r=(t||n).trim();if(!r)return s("Provide an assignee to remove");let o=ss(r);if(!o)return s(`Assignee "${r}" does not exist`);let{selectedNode:i}=v();if(!i)return s("Invalid unassign target");let a=Be(i.id,"TICKET");if(l(a))return s("Unable to unassign in this context");let d=a.value,u=b.getFieldByTitle(d.id,"Assignees");if(!u)return s("Unable to locate assignees field");let m=R(u.id).find(p=>p.props?.value===o.id);return m?j({id:W(),action:"unassign.issue",payload:{id:m.id,target:d.id,contributor:o.id},...e.value}):s(`Issue is not assigned to "${r}"`)},onSuccess:()=>T({mode:g.DEFAULT})},{intent:M.Sync,mode:g.COMMAND_LINE,action:async()=>{let e=_i();V(()=>""),T({syncStatus:{msg:"Syncing",status:"syncing"}});let{userId:t,userName:n}=ge();if(!t)return s("Unable to resolve userId");if(!n)return s("Unable to resolve userName");let r=ze()?Rr():c("No pending default events",null);if(l(r))return s(`Unable to persist default events. ${r.message}`);let o=Z();if(l(o)||!o.value)return s("Unable to resolve event log path");let i=Hn(o.value);logger.debug("[sync-command] pending defaults",ze());let a=await Ui({ownEventFileName:i});if(l(a))return T({syncStatus:{msg:a.message,status:"outOfSync"}}),s(`Unable to sync state. ${a.message}`);T({syncStatus:{msg:"Synced",status:"synced"},mode:g.DEFAULT});let d=fe(process.cwd());if(l(d))throw new Error(d.message);let u=xt(d.value);if(l(u))return s("Unable to load events");Ge(u.value);let m=Wi(e);return l(m)?m:c("Synced",!0)}},{intent:M.Peek,mode:g.COMMAND_LINE,action:async()=>{let e=Ie(v().breadCrumb,"BOARD");if(l(e))return e;let t=fe(process.cwd());if(l(t))throw new Error(t.message);let n=xt(t.value);if(l(n))return s(n.message);let r=n.value,{modifier:o}=ne().commandMeta,i;if(o==="now"){let N=wr();if(l(N))return N;let S=Ge(r);return S.some(l)?s(S.map(A=>A.message).join(", ")):(T({mode:g.DEFAULT,readOnly:!1,timeMode:"live",unappliedEvents:[]}),c("Peeking now",!0))}if(o==="prev"){let N=v().eventLog.at(-2),S=Yn(N);if(S===null)return s("No previous event to peek");i=S}else if(o==="next"){let N=v().unappliedEvents.at(0),S=Yn(N);if(S===null)return s("No next event to peek");i=S}else{let N=qt(o);if(!N)return s("Invalid peek date");i=N.getTime()}let a=e.value.id,{appliedEvents:d,unappliedEvents:u}=io(r,i),m=wr();if(l(m))return m;let p=Ge(d);if(p.some(l))return s(p.map(N=>N.message).join(", "));let y=v().nodes[a];return y?(L.navigate({currentNode:y,selectedIndex:0}),T({mode:g.DEFAULT,readOnly:!0,timeMode:"peek",unappliedEvents:u}),c("Peeking ",!0)):s("Board did not exist at peek date")}},{intent:M.Export,mode:g.COMMAND_LINE,action:async()=>{let e=await ti();return l(e)?e:(T({mode:g.DEFAULT}),c("Export successful",!0))}},{intent:M.Exit,mode:g.COMMAND_LINE,action:async()=>(L.exit(),c("Exit successful",!0))}];var fl=new Set(["peek","filter","view-help"]),pe=async({isForceExecutedBySystem:e=!1}={})=>{let{commandMeta:{command:t,validity:n,modifier:r,inputString:o}}=ne();if(!t)return s("No command to confirm");if(!e&&n===Se.Invalid)return s("Invalid command");let i=_o(t);if(Do(),v().readOnly&&!fl.has(i))return Ct({status:Ee.Fail,message:"Command not available in readonly state",value:null});let a=as.filter(u=>e||u.systemOnly!==!0).find(u=>u.intent===i);if(!a)return Ct({status:Ee.Fail,message:"Command not found",value:null});let d=await a.action(a,{command:t,inputString:o,modifier:r});return l(d)?Ct(d):(Fo({addToHistory:!e}),a.onSuccess?.(),Ct(d))};var vn=[{intent:x.Exit,mode:g.MOVE,description:"[<Esc>] exit context / cancel",action:()=>(T({mode:g.COMMAND_LINE}),V(()=>"move cancel"),pe({isForceExecutedBySystem:!0}))},{intent:x.InitMove,mode:g.DEFAULT,description:"[m] move init/confirm",action:()=>(T({mode:g.COMMAND_LINE}),V(()=>"move start"),pe({isForceExecutedBySystem:!0}))},{intent:x.ConfirmMove,mode:g.MOVE,action:()=>(T({mode:g.COMMAND_LINE}),V(()=>"move confirm"),pe({isForceExecutedBySystem:!0}))}],xn=[{intent:x.MovePreviousItem,mode:g.MOVE,action:()=>We()?(T({mode:g.COMMAND_LINE}),V(()=>"move previous"),pe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:x.MoveNextItem,mode:g.MOVE,action:()=>We()?(T({mode:g.COMMAND_LINE}),V(()=>"move next"),pe({isForceExecutedBySystem:!0})):s("No pending move")}],ds=[{intent:x.MoveToNextContainer,mode:g.MOVE,action:()=>We()?(T({mode:g.COMMAND_LINE}),V(()=>"move to-next"),pe({isForceExecutedBySystem:!0})):s("No pending move")},{intent:x.MoveToPreviousContainer,mode:g.MOVE,action:()=>We()?(T({mode:g.COMMAND_LINE}),V(()=>"move to-previous"),pe({isForceExecutedBySystem:!0})):s("No pending move")}];var ls={[k.WORKSPACE]:[...vn,...xn],[k.BOARD]:[...vn,...xn],[k.SWIMLANE]:[...vn,...xn,...ds],[k.TICKET]:[],[k.FIELD]:[],[k.FIELD_LIST]:[],[k.TEXT]:[]};var cs=[{intent:x.AddItem,mode:g.DEFAULT,description:"[n] new...",action:()=>(T({mode:g.COMMAND_LINE}),V(()=>`${f.NEW} `),c("Adding new item",null))},{intent:x.Delete,mode:g.DEFAULT,description:"[d] delete",action:()=>(T({mode:g.COMMAND_LINE}),V(()=>`${f.DELETE} `),c("Deleting item",null))},{intent:x.InitCommandLine,mode:g.DEFAULT,description:"[:] focus command line",action:()=>(T({mode:g.COMMAND_LINE}),V(()=>""),c("Entering command line mode",null))},{intent:x.Confirm,mode:g.DEFAULT,description:"[<Enter>] confirm/enter",action:()=>(L.enterChildNode(),c("Entering context",null))},{intent:x.Exit,mode:g.DEFAULT,description:"[q] exit context",action:()=>(L.enterParentNode(),c("Exiting context",null))},{intent:x.NavPreviousItem,mode:g.DEFAULT,description:"[arrows/hjkl] navigate",action:()=>(L.navigateToPreviousItem(),c("Navigating to previous item",null))},{intent:x.NavNextItem,mode:g.DEFAULT,action:()=>(L.navigateToNextItem(),c("Navigating to next item",null))},{intent:x.NavToPreviousContainer,mode:g.DEFAULT,action:()=>(L.navigateToPreviousContainer(),c("Navigating to previous container",null))},{intent:x.NavToNextContainer,mode:g.DEFAULT,action:()=>(L.navigateToNextContainer(),c("Navigating to next container",null))},{intent:x.Edit,mode:g.DEFAULT,action:()=>(T({mode:g.COMMAND_LINE}),V(()=>"edit"),pe(),c("Fired command",!0))},{intent:x.SetViewDense,mode:g.DEFAULT,description:"[v] view change (wide/dense)",action:()=>(T({viewMode:"dense"}),c("View set",null))},{intent:x.SetViewWide,mode:g.DEFAULT,action:()=>(T({viewMode:"wide"}),c("View set",null))}];var vl=500,xl=e=>e.replace(/[\r\n]/g,"").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,""),us=e=>{let t=xl(e);t&&V(n=>(n+t).slice(0,vl))};var ms=[{intent:x.ViewHelp,mode:g.DEFAULT,action:()=>(T({mode:g.HELP}),c("Viewing help",null))},{intent:x.Exit,mode:g.HELP,action:()=>(T({mode:g.DEFAULT}),c("Exiting help",null))},{intent:x.Confirm,mode:g.COMMAND_LINE,action:()=>(pe(),c("Executing command",null))},{intent:x.MoveCursorLeft,mode:g.COMMAND_LINE,action:()=>(rr(-1),c("Moving cursor left",null))},{intent:x.MoveCursorRight,mode:g.COMMAND_LINE,action:()=>(rr(1),c("Moving cursor right",null))},{intent:x.MoveCursorLeftOfWord,mode:g.COMMAND_LINE,action:()=>(or("left"),c("Moving cursor left of word",null))},{intent:x.MoveCursorRightOfWord,mode:g.COMMAND_LINE,action:()=>(or("right"),c("Moving cursor right of word",null))},{intent:x.ExitCommandLine,mode:g.COMMAND_LINE,action:()=>(T({mode:g.DEFAULT}),c("Exiting command line",null))},{intent:x.AutoCompleteCommand,mode:g.COMMAND_LINE,action:()=>(V((e,{remainder:t})=>t?e+t:e),c("Auto-completing command",null))},{intent:x.CaptureInput,mode:g.COMMAND_LINE,action:(e,{sequence:t})=>(us(t??""),c("Capturing input",null))},{intent:x.EraseInput,mode:g.COMMAND_LINE,action:()=>(Po(),c("Erasing input",null))},{intent:x.EraseInputWord,mode:g.COMMAND_LINE,action:()=>(Lo(),c("Erasing input word",null))},{intent:x.GetLastCommandFromHistory,mode:g.COMMAND_LINE,action:()=>(Oo(),c("Getting last command from history",null))},{intent:x.GetNextCommandFromHistory,mode:g.COMMAND_LINE,action:()=>(Bo(),c("Getting next command from history",null))}];import yl from"chalk";var yn=": for command line",ps="q to exit",gs=`${yl.hex(E.accent)("m")} to confirm`,Mr={[k.WORKSPACE]:[yn],[k.BOARD]:[yn],[k.BOARD+g.COMMAND_LINE]:[yn],[k.SWIMLANE]:[yn],[k.TICKET+g.HELP]:[ps],[k.SWIMLANE+g.HELP]:[ps],[k.TICKET]:[],[k.FIELD]:[],[k.SWIMLANE+g.MOVE]:[gs],[k.TICKET+g.MOVE]:[gs]};var hn=e=>e.trim().toLocaleLowerCase(),hl=(e,t)=>{let n=b.getFieldByTitle(e,t);if(!n)return"";let r=n.props?.value;return typeof r=="string"?r:""},El=e=>{let{tags:t}=v(),n=b.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):[]},Nl=e=>{let{contributors:t}=v(),n=b.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):[]},fs=(e,t)=>{let n=t.value;if(!n)return!0;switch(t.target){case"title":return hn(e.title??"").includes(n);case"description":return hn(hl(e.id,"Description")).includes(n);case"tag":return El(e.id).map(hn).some(d=>d.includes(n));case"assignee":return Nl(e.id).map(hn).some(d=>d.includes(n));default:return!0}};function vs(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 xs=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 En,kr,Pr=new Set,ys=()=>{for(let e of Pr)e()},bl=e=>(Pr.add(e),()=>Pr.delete(e));function hs(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 s("Unable to derive state, currentNode not found");let u=vs(t,o,r);if(l(u))return logger.error(u.message),u;let m=u.value,{context:p}=d,y=Mr[p+n]??Mr[p]??[],N=[...cs,...ls[p]??[],...ms],S=xs(N),A=Il(o,i),I=A[t]?.[e.selectedIndex]??null;return c("Derived successfully",{...e,currentNode:d,breadCrumb:m,availableHints:y,availableActions:N,actionIndex:S,selectedNode:I,renderedChildrenIndex:A})}var v=()=>(En||logger.error("State not initialized. Call initWorkspaceState() first.",new Error().stack),En);function On(e){kr=e;let t={readOnly:!1,filters:[],tags:{},contributors:{},viewMode:"dense",mode:g.DEFAULT,nodes:{[e.id]:e},rootNodeId:e.id,currentNodeId:e.id,renderedChildrenIndex:{},selectedIndex:-1,syncStatus:{status:"synced",msg:""},eventLog:[],unappliedEvents:[],timeMode:"live"},n=hs(t);return l(n)?n:(En=n.value,ys(),c("State initialized",null))}function se(e){let t=v(),n=e(t),r=hs(n);return l(r)?s(r.message??"Unable to update state"):(En=r.value,ys(),c("State updated",null))}var T=e=>se(t=>({...t,...e}));var _=()=>Cl(bl,v,v),Il=(e,t)=>{let n={};for(let r of Object.values(e))le(r)&&t.length>0&&!t.every(o=>fs(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},R=e=>v()?.renderedChildrenIndex[e]??[],wr=()=>kr?On(kr):s("Cannot reset state: no initial workspace found");var L={exit(){process.exit(0)},enterChildNode(){let e=v(),t=e.currentNode,n=Math.max(0,e.selectedIndex),r=R(t.id)[n];!r||t.context==="FIELD"||L.navigate({currentNode:r,selectedIndex:R(r.id).length?0:-1})},enterParentNode(){let{currentNode:e,nodes:t}=v();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=R(n.id),o=r.findIndex(({id:a})=>a===e.id),i=r.length===0?-1:o>=0?o:0;L.navigate({currentNode:n,selectedIndex:i})},navigateToNextItem:()=>Es(1),navigateToPreviousItem:()=>Es(-1),navigateToNextContainer:()=>Ns(1),navigateToPreviousContainer:()=>Ns(-1),navigate:({currentNode:e=v().currentNode,selectedIndex:t})=>{T({currentNodeId:e.id,selectedIndex:t})}},Es=e=>{let t=v(),n=R(t.currentNode.id).length;if(n===0)return;let o=(Math.max(0,t.selectedIndex)+e+n)%n;L.navigate({selectedIndex:o})},Ns=e=>{let{currentNode:t,nodes:n,selectedIndex:r}=v();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=R(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 u=R(d.id),m=Math.max(0,u.length-1),p=Math.min(Math.max(0,r),m),y=u.length?p:-1;L.navigate({currentNode:d,selectedIndex:y})};var ke="system",Pe="ACTOR",kt=Sl(),Le=null;function Al(){let e=Object.values(v().nodes).find(r=>r.context==="WORKSPACE");if(!e)throw new Error("No workspace found in event log");let[t]=R(e.id),[n]=t?R(t.id):[];if(logger.debug("Boot navigation target:",{workspace:e?.id,firstBoard:t?.id,firstSwimlane:n?.id}),n){let r=v().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:v().nodes[v().rootNodeId],selectedIndex:0}}function Tl(){let e=Al();L.navigate(e)}function wl(){let e=kt(),t=kt(),n=kt(),r=kt(),o=kt(),i=G(void 0,void 0);if(l(i))return i;let a=G(void 0,void 0);if(l(a))return a;let d=G(a.value,void 0);if(l(d))return d;let u=G(void 0,void 0);if(l(u))return u;let m=G(u.value,void 0);if(l(m))return m;let p=G(m.value,void 0);if(l(p))return p;let y=G(void 0,void 0);return l(y)?y:c("Created default events",[{id:Me(),userId:ke,userName:Pe,action:"init.workspace",payload:{id:e,name:"Workspace",rank:i.value}},{id:Me(),userId:ke,userName:Pe,action:"add.board",payload:{id:t,name:"Default",parent:e,rank:a.value}},{id:Me(),userId:ke,userName:Pe,action:"add.swimlane",payload:{id:n,name:"Todo",parent:t,rank:u.value}},{id:Me(),userId:ke,userName:Pe,action:"add.swimlane",payload:{id:r,name:"In progress",parent:t,rank:m.value}},{id:Me(),userId:ke,userName:Pe,action:"add.swimlane",payload:{id:o,name:"Done",parent:t,rank:p.value}},{id:Me(),userId:ke,userName:Pe,action:"add.board",payload:{id:Ut,name:"Closed",parent:e,rank:d.value}},{id:Me(),userId:ke,userName:Pe,action:"add.swimlane",payload:{id:be,name:"Closed",parent:Ut,rank:y.value}},{id:Me(),userId:ke,userName:Pe,action:"lock.node",payload:{id:Ut}},{id:Me(),userId:ke,userName:Pe,action:"lock.node",payload:{id:be}}])}function ze(){return Le!==null}function Rr(){if(!Le||Le.length===0)return Le=null,c("No pending default events to persist",null);let e=Le.map(t=>Vt({event:t})).filter(l);return e.length>0?s([ut.bold.red("Persisting default events failed"),"",...e.map((t,n)=>`${ut.dim.gray(`${n+1}.`)} ${ut.dim(t.message)}`),`
57
57
  `].join(`
58
- `)):(Le=null,c("Persisted pending default events",null))}function ys(e){let t;e.some(r=>r.action==="init.workspace")?(Le=null,t=qe(e)):(Le=Il(),t=qe([...Le]));let n=t.filter(l);return n.length>0?s([ct.bold.red("Materializing failed"),"",...n.map((r,o)=>`${ct.dim.gray(`${o+1}.`)} ${ct.dim(r.message)}`),`
58
+ `)):(Le=null,c("Persisted pending default events",null))}function Cs(e){let t;if(e.some(r=>r.action==="init.workspace"))Le=null,t=Ge(e);else{let r=wl();if(l(r))return r;Le=r.value,t=Ge([...Le])}let n=t.filter(l);return n.length>0?s([ut.bold.red("Materializing failed"),"",...n.map((r,o)=>`${ut.dim.gray(`${o+1}.`)} ${ut.dim(r.message)}`),`
59
59
  `].join(`
60
60
 
61
61
  See complete log:
62
62
 
63
63
  `)+e.map(r=>JSON.stringify(r)).join(`
64
- `)):(Cl(),c("State booted successfully",null))}import{Box as Wl}from"ink";import Fr from"react";import Pt from"chalk";import{Box as Lr,Text as hs}from"ink";import Mt,{useEffect as bl,useMemo as Sl,useState as Tl}from"react";var Ns=Pt.gray,Al=Pt.inverse,wl=Pt.inverse.gray,Rl={hint:"",hints:[],overlap:0,remainder:""},Cs=({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}},Ml=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let n=Y(t);return{bg:r=>Pt.bgHex(n).black(r),bgCursor:r=>Pt.bgHex(n).inverse.black(r)}}return Vn(t)},Pl=({value:e,command:t,modifier:n})=>{if(!t||!n)return null;let r=Cs({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}},Es=()=>({value:X.value,cursorPosition:X.cursorPosition,commandIsPending:X.commandIsPending,autoCompletion:X.commandMeta.autoCompletion??Rl,infoMessage:X.commandMeta.infoMessage,validationStatus:X.commandMeta.validity,command:X.commandMeta.command,inputString:X.commandMeta.inputString,modifier:X.commandMeta.modifier}),kl=(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,Is=({width:e})=>{let[t,n]=Tl(Es());bl(()=>{let h=()=>{let I=Es();n(b=>kl(b,I)?b:I)},C=yo(h);return h(),()=>{C()}},[]);let{value:r,cursorPosition:o,infoMessage:i,commandIsPending:a,autoCompletion:d,command:u,modifier:m}=t,g=Sl(()=>{let h=Math.max(0,Math.min(o,r.length)),C=Cs({value:r,command:u}),I=Pl({value:r,command:u,modifier:m}),b=u?Vn(u):null,T=Ml({command:u,modifier:m}),S=(oe,ie)=>{let kn=C&&ie>=C.start&&ie<C.end,Ln=I&&ie>=I.start&&ie<I.end;return kn&&b?b.fg(oe):Ln&&T?T.bg(oe):oe},R=(oe,ie)=>{let kn=C&&ie>=C.start&&ie<C.end,Ln=I&&ie>=I.start&&ie<I.end;return kn&&b?b.fgCursor(oe):Ln&&T?T.bgCursor(oe):Al(oe)},U=r.slice(0,h),De=r[h]??" ",Fe=h<r.length?r.slice(h+1):"",_s=Array.from(U).map((oe,ie)=>S(oe,ie)).join(""),Hr=R(De,h),Kr=Array.from(Fe).map((oe,ie)=>S(oe,h+1+ie)).join("");if(d.hint){let oe=d.hint[d.overlap]??De;Hr=wl(oe),Kr=Ns(d.remainder.slice(1)+Fe)}return Ns(":")+_s+Hr+Kr},[r,o,d,u,m]);return Mt.createElement(Lr,{flexDirection:"column",justifyContent:"flex-start"},Mt.createElement(Lr,{flexDirection:"column",paddingX:1,borderColor:N.secondary,borderStyle:"round",width:e},Mt.createElement(Lr,null,Mt.createElement(hs,null,g),i&&Mt.createElement(hs,{wrap:"truncate",color:a?N.red:N.secondary2},` ${i} `))))};import bs from"chalk";import{Box as Ll,Text as Dr}from"ink";import Cn,{useEffect as Dl,useState as Fl}from"react";var Ol=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],Ss=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)}},Bl=({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)}`},Ul=(e,t,n)=>{let r=Ss(e),o=Ss(t);return Bl({r:r.r+(o.r-r.r)*n,g:r.g+(o.g-r.g)*n,b:r.b+(o.b-r.b)*n})},$l=(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 Ul(i,a,o)},_l=(e,t)=>e.length===t?e:e.length>t?e.slice(0,t):e.padEnd(t," "),Ts=({width:e,availableHints:t})=>{let{syncStatus:{status:n,msg:r}}=_(),[o,i]=Fl(0);Dl(()=>{if(n!=="syncing"){i(0);return}let S=setInterval(()=>{i(R=>R+1)},50);return()=>clearInterval(S)},[n]);let a=[],d=0;for(let S of t){let U=(a.length>0?" | ":"").length+S.length;if(d+U>e-4)break;a.push(S),d+=U}let u=n!="synced"?r??a.join(" | "):a.join(" | "),m=Math.max(0,e-2),g=n==="syncing"?$l(Ol,(Math.sin(o*.12)+1)/2):N.secondary,h=bs.hex(g??"fff"),C=bs.hex(N.secondary2),I=h(`\u256D${"\u2500".repeat(m)}\u256E`),b=h(`\u2570${"\u2500".repeat(m)}\u256F`),T=`${h("\u2502")}${C(_l(` ${u} `,m))}${h("\u2502")}`;return Cn.createElement(Ll,{flexDirection:"column",width:e},Cn.createElement(Dr,null,I),Cn.createElement(Dr,null,T),Cn.createElement(Dr,null,b))};var In=({width:e,mode:t,availableHints:n})=>{let r=_(),o=[],i=0;for(let a of n){let u=(o.length>0?" | ":"").length+a.length;if(i+u>e+2)break;o.push(a),i+=u}return Fr.createElement(Wl,null,t===p.COMMAND_LINE&&r.syncStatus.status!=="syncing"?Fr.createElement(Is,{width:e}):Fr.createElement(Ts,{width:e,mode:t,availableHints:n}))};import{Box as ut,Text as As}from"ink";import Ke from"react";var ws=({width:e})=>{let t=[...v().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"]),Ke.createElement(ut,{flexDirection:"column",marginTop:3,borderColor:N.secondary,borderStyle:"round",width:e,minHeight:19},Ke.createElement(ut,{flexDirection:"column",width:e},v().mode===p.HELP?t.map(([n,r],o)=>Ke.createElement(ut,{paddingLeft:1,key:o,flexDirection:"row"},Ke.createElement(ut,{key:o,flexDirection:"row",paddingBottom:o?0:1},Ke.createElement(ut,{width:20,justifyContent:"flex-end"},Ke.createElement(As,{color:o?N.accent:N.secondary},n)),Ke.createElement(ut,{flexGrow:1,width:40,paddingLeft:2},Ke.createElement(As,{color:o?N.primary:N.secondary},r))))):null))};import ks from"chalk";import{Box as Sn,Text as Ze}from"ink";import ee from"react";import{Box as Or,Text as Hl}from"ink";import mt from"react";var Kl=(e,t)=>e.length<=t?e:t<=1?"\u2026":e.slice(0,t-1)+"\u2026",Rs=({width:e})=>{let{breadCrumb:t,currentNode:n,selectedIndex:r,viewMode:o}=v(),i=F(n.id)[r],a=Be(i?.id??n.id,"TICKET"),d=Oe(a)?a.value:void 0,u=d?.id?F(d.id):[],m=T=>{let S=u.find(R=>R.title===T);return S?F(S.id).map(R=>typeof R.props?.value=="string"?R.props.value:"").filter(R=>!!R):[]},g=m("Tags"),h=m("Assignees"),C=d?.parentNodeId?!Bn(n.id,d?.parentNodeId)&&o==="dense":!1,I=t.map((T,S)=>{let R=S===t.length-1,U=F(T.id),De=R?U?.[r]?.title:void 0;return`${S?" / ":""}${T.title??""}${De?` \u25B8 ${De}`:""}`}).join(""),b=Kl(I,e);return mt.createElement(Or,null,mt.createElement(Hl,{color:N.secondary2},b),C?g.map(T=>mt.createElement(Or,{key:T,paddingLeft:2},mt.createElement(lt,{id:T}))):null,C?h.map(T=>mt.createElement(Or,{key:T,paddingLeft:2},mt.createElement(dt,{id:T}))):null)};import{Box as Vl,Text as Ms}from"ink";import bn from"react";var jl=({filters:e})=>bn.createElement(Vl,{columnGap:1},bn.createElement(Ms,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:n,operator:r})=>bn.createElement(Ms,{backgroundColor:"black",color:"white"},` ${n}${r}"${t}" `))),Ps=bn.memo(jl);function Tn({filters:e,hideBreadCrumb:t=!1}){let{timeMode:n,eventLog:r,unappliedEvents:o}=_(),{userName:i,preferredEditor:a}=fe(),d=40,u=process.stdout.columns-d-8,m=r.at(-1)?.id,g=jt(m??""),h=Oe(g)?ao(g.value):"INVALID DATE";return ee.createElement(Sn,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},t?ee.createElement(Ze,null," "):ee.createElement(Sn,{paddingLeft:1},e.length>0?ee.createElement(Ps,{filters:e}):ee.createElement(Rs,{width:u})),n==="live"?ee.createElement(Sn,{columnGap:1,paddingRight:2,"max-width":d,overflow:"hidden",justifyContent:"flex-end"},ee.createElement(Ls,{icon:"@",value:i}),ee.createElement(Ls,{icon:"\u276F",value:a})):"",n==="peek"?ee.createElement(Sn,{paddingLeft:1},ee.createElement(Ze,{backgroundColor:N.yellow}," Readonly "),ee.createElement(Ze,{color:N.yellow}," "+o.length+" edits ago at "),ee.createElement(Ze,{backgroundColor:N.yellow,color:N.accent}," "+h+" "),ee.createElement(Ze,{color:N.yellow},". Resume with "),ee.createElement(Ze,{backgroundColor:N.yellow}," :peek now ")):"")}function Ls({icon:e,value:t}){return ee.createElement(Ze,null,ks.dim(e)+ks.hex(N.accent)(` ${t??"-"} `))}import{Box as Gl,Text as zl}from"ink";import kt from"react";import{Box as An,Text as Br}from"ink";import Ve from"react";function Ur(){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 Ve.createElement(An,{flexDirection:"column",height:o,padding:1,borderStyle:"round",borderColor:N.secondary,width:i},Ve.createElement(An,{padding:1,paddingTop:0,paddingBottom:0},Ve.createElement(Br,null,"Select a board:")),Ve.createElement(An,{padding:1,flexDirection:"column"},a.map((d,u)=>{let m=e.currentNode.context==="WORKSPACE"&&e.selectedIndex===u,h=w(d.id).flatMap(({id:C})=>F(C)).length;return Ve.createElement(An,{key:d.id??u},Ve.createElement(Br,{color:m?N.accent:N.secondary2},Ve.createElement(re,{isSelected:m})),Ve.createElement(Br,{color:m?N.accent:N.secondary2},d.title," (",h," issues)",d.readonly?" \u{1F512}":""))})))}var ql=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:a})=>{let{renderedChildrenIndex:d}=_(),u=n.find(({context:C})=>C==="BOARD"),h=i-1-3;return kt.createElement(Gl,{flexDirection:"row"},e.context==="WORKSPACE"?kt.createElement(Ur,null):u?kt.createElement(vn,{height:h,width:a,swimlanes:(d[u.id]??[]).filter(C=>C!==void 0&&Qe(C)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):kt.createElement(zl,null))},Ds=kt.memo(ql);import{Box as Lt,Text as he}from"ink";import K from"react";var wn=({isDone:e,command:t,value:n})=>K.createElement(Lt,null,K.createElement(he,{color:N.accent,dimColor:e},e?" \u2714 ":" "),K.createElement(he,{dimColor:e},"Type "),K.createElement(he,{backgroundColor:N.secondary,dimColor:e}," "+t+" "),n&&K.createElement(K.Fragment,null,K.createElement(he,{dimColor:e}," "),K.createElement(he,{color:N.secondary,dimColor:e},"<"+n+">")));function $r({width:e,height:t,hasUserName:n,hasPreferredEditor:r,userName:o,preferredEditor:i}){let a=n&&r,d=n?r?null:":config:editor":":config:username";return K.createElement(Lt,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:N.secondary,rowGap:1},K.createElement(he,{color:N.accent,bold:!0},"Welcome! \u{1F539}"),K.createElement(he,null,"Lets get you started - its a breeze."),K.createElement(he,{color:N.secondary2},"And remember, you can always get help with"," ",K.createElement(he,{color:N.accent},":help"),"."),!a&&K.createElement(he,{color:N.secondary2},d===":config:username"?"First, choose your username.":"Nice. One more step."),K.createElement(Lt,{flexDirection:"column"},n&&K.createElement(Lt,{marginBottom:1},K.createElement(wn,{isDone:!0,command:":config:username",value:o})),!n&&K.createElement(wn,{isDone:!1,command:":config:username"}),n&&!r&&K.createElement(wn,{isDone:!1,command:":config:editor"}),a&&K.createElement(Lt,null,K.createElement(wn,{isDone:!0,command:":config:editor",value:i}))))}var Xl=({width:e,height:t})=>D.createElement(xe,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:N.secondary,rowGap:1},D.createElement(je,{color:N.accent,bold:!0},"Initialize project"),D.createElement(je,null,`This folder is not an ${Yl.hex(N.accent)("epiq")} project yet.`),D.createElement(je,{color:N.primary},"To start tracking issues here, we need to initialize a new"," ",D.createElement(je,{color:N.primary,backgroundColor:N.secondary}," .epiq/ ")," ","directory in this repository."),D.createElement(xe,{marginTop:1,flexDirection:"column"},D.createElement(xe,null,D.createElement(je,{color:N.accent}," "),D.createElement(je,{color:N.primary},"Type "),D.createElement(je,{backgroundColor:N.secondary}," :init "))),D.createElement(xe,{marginTop:1},D.createElement(je,{color:N.secondary2},"(This will create the local epiq project files)")));function _r({width:e,height:t}){let n=_(),r=n.filters;if(n.mode===p.HELP)return D.createElement(xe,{flexDirection:"column"},D.createElement(ws,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:a,userName:d,preferredEditor:u}=_t(),m=!o,g=o&&Ge();if(m)return D.createElement(xe,{flexDirection:"column"},D.createElement(xe,{flexDirection:"column"},D.createElement(Tn,{hideBreadCrumb:!0,filters:r}),D.createElement($r,{height:t,width:e,hasUserName:a,hasPreferredEditor:i,userName:d??"",preferredEditor:u??""})),D.createElement(In,{width:e,mode:n.mode,availableHints:n.availableHints}));if(g)return D.createElement(xe,{flexDirection:"column"},D.createElement(xe,{flexDirection:"column"},D.createElement(Tn,{hideBreadCrumb:!0,filters:r}),D.createElement(Xl,{height:t,width:e})),D.createElement(In,{width:e,mode:n.mode,availableHints:n.availableHints}));let h=Ie(v().breadCrumb??[],"BOARD");if(Oe(h)){let C=h.value.id,I=w(C).length,b=3,T=Math.floor(e/b),S=Math.floor(e/Math.max(I,1));e=Math.min(S,T)*Math.max(I,b)}return D.createElement(xe,{flexDirection:"column"},D.createElement(xe,{flexDirection:"column"},D.createElement(Tn,{filters:r}),D.createElement(Ds,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),D.createElement(In,{width:e,mode:n.mode,availableHints:n.availableHints}))}import Jl from"readline";var Rn,Mn,Ne,Zl=new Set([x.MoveCursorLeft,x.EraseInputWord,x.MoveCursorLeftOfWord,x.MoveCursorRight,x.MoveCursorRightOfWord,x.NavToPreviousContainer,x.NavToNextContainer,x.NavPreviousItem,x.NavNextItem,x.SetViewDense,x.SetViewWide,x.Confirm,x.Exit,x.InitCommandLine,x.ExitCommandLine,x.CaptureInput,x.EraseInput,x.EraseInputWord,x.HideHelp,x.ViewHelp,x.SetViewDense,x.SetViewWide,x.GetLastCommandFromHistory,x.GetNextCommandFromHistory,x.AutoCompleteCommand]),Fs=async e=>{if(e.ctrl&&e.name==="c")return L.exit();let{actionIndex:t,mode:n,readOnly:r}=v(),o=To(e,n);if(!o||r&&!Zl.has(o))return;let i=t[n]?.[o];if(i?.action)try{await i.action(i,e)}catch(a){logger.error(a)}},Ql=()=>async function(t,n){n.name!=="escape"&&(Ne&&(clearTimeout(Ne),Ne=void 0),await Fs(n))},ec=()=>async function(t){if(t.length===1&&t[0]===27){Ne&&clearTimeout(Ne),Ne=setTimeout(()=>{Fs({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),Ne=void 0},25);return}Ne&&(clearTimeout(Ne),Ne=void 0)};function Os(){Rn&&process.stdin.removeListener("keypress",Rn),Mn&&process.stdin.removeListener("data",Mn),Rn=Ql(),Mn=ec(),Jl.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",Mn),process.stdin.on("keypress",Rn)}nc(`${Wr.bold("Epiq CLI")}
64
+ `)):(Tl(),c("State booted successfully",null))}import{Box as Gl}from"ink";import Fr from"react";import Lt from"chalk";import{Box as Lr,Text as bs}from"ink";import Pt,{useEffect as Rl,useMemo as Ml,useState as kl}from"react";var Is=Lt.gray,Pl=Lt.inverse,Ll=Lt.inverse.gray,Dl={hint:"",hints:[],overlap:0,remainder:""},As=({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}},Fl=({command:e,modifier:t})=>{if(!t)return null;if(e==="tag"||e==="assign"){let n=X(t);return{bg:r=>Lt.bgHex(n).black(r),bgCursor:r=>Lt.bgHex(n).inverse.black(r)}}return Zn(t)},Ol=({value:e,command:t,modifier:n})=>{if(!t||!n)return null;let r=As({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}},Ss=()=>({value:J.value,cursorPosition:J.cursorPosition,commandIsPending:J.commandIsPending,autoCompletion:J.commandMeta.autoCompletion??Dl,infoMessage:J.commandMeta.infoMessage,validationStatus:J.commandMeta.validity,command:J.commandMeta.command,inputString:J.commandMeta.inputString,modifier:J.commandMeta.modifier}),Bl=(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,Ts=({width:e})=>{let[t,n]=kl(Ss());Rl(()=>{let y=()=>{let S=Ss();n(A=>Bl(A,S)?A:S)},N=ko(y);return y(),()=>{N()}},[]);let{value:r,cursorPosition:o,infoMessage:i,commandIsPending:a,autoCompletion:d,command:u,modifier:m}=t,p=Ml(()=>{let y=Math.max(0,Math.min(o,r.length)),N=As({value:r,command:u}),S=Ol({value:r,command:u,modifier:m}),A=u?Zn(u):null,I=Fl({command:u,modifier:m}),C=(oe,ie)=>{let kn=N&&ie>=N.start&&ie<N.end,Pn=S&&ie>=S.start&&ie<S.end;return kn&&A?A.fg(oe):Pn&&I?I.bg(oe):oe},w=(oe,ie)=>{let kn=N&&ie>=N.start&&ie<N.end,Pn=S&&ie>=S.start&&ie<S.end;return kn&&A?A.fgCursor(oe):Pn&&I?I.bgCursor(oe):Pl(oe)},U=r.slice(0,y),De=r[y]??" ",Fe=y<r.length?r.slice(y+1):"",Vs=Array.from(U).map((oe,ie)=>C(oe,ie)).join(""),Hr=w(De,y),Kr=Array.from(Fe).map((oe,ie)=>C(oe,y+1+ie)).join("");if(d.hint){let oe=d.hint[d.overlap]??De;Hr=Ll(oe),Kr=Is(d.remainder.slice(1)+Fe)}return Is(":")+Vs+Hr+Kr},[r,o,d,u,m]);return Pt.createElement(Lr,{flexDirection:"column",justifyContent:"flex-start"},Pt.createElement(Lr,{flexDirection:"column",paddingX:1,borderColor:E.secondary,borderStyle:"round",width:e},Pt.createElement(Lr,null,Pt.createElement(bs,null,p),i&&Pt.createElement(bs,{wrap:"truncate",color:a?E.red:E.secondary2},` ${i} `))))};import ws from"chalk";import{Box as Ul,Text as Dr}from"ink";import Nn,{useEffect as $l,useState as _l}from"react";var Wl=["#4c567a","#9d7cd8","#7aa2f7","#7dcfff","#9d7cd8"],Rs=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)}},Hl=({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)}`},Kl=(e,t,n)=>{let r=Rs(e),o=Rs(t);return Hl({r:r.r+(o.r-r.r)*n,g:r.g+(o.g-r.g)*n,b:r.b+(o.b-r.b)*n})},Vl=(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 Kl(i,a,o)},jl=(e,t)=>e.length===t?e:e.length>t?e.slice(0,t):e.padEnd(t," "),Ms=({width:e,availableHints:t})=>{let{syncStatus:{status:n,msg:r}}=_(),[o,i]=_l(0);$l(()=>{if(n!=="syncing"){i(0);return}let C=setInterval(()=>{i(w=>w+1)},50);return()=>clearInterval(C)},[n]);let a=[],d=0;for(let C of t){let U=(a.length>0?" | ":"").length+C.length;if(d+U>e-4)break;a.push(C),d+=U}let u=n!="synced"?r??a.join(" | "):a.join(" | "),m=Math.max(0,e-2),p=n==="syncing"?Vl(Wl,(Math.sin(o*.12)+1)/2):E.secondary,y=ws.hex(p??"fff"),N=ws.hex(E.secondary2),S=y(`\u256D${"\u2500".repeat(m)}\u256E`),A=y(`\u2570${"\u2500".repeat(m)}\u256F`),I=`${y("\u2502")}${N(jl(` ${u} `,m))}${y("\u2502")}`;return Nn.createElement(Ul,{flexDirection:"column",width:e},Nn.createElement(Dr,null,S),Nn.createElement(Dr,null,I),Nn.createElement(Dr,null,A))};var Cn=({width:e,mode:t,availableHints:n})=>{let r=_(),o=[],i=0;for(let a of n){let u=(o.length>0?" | ":"").length+a.length;if(i+u>e+2)break;o.push(a),i+=u}return Fr.createElement(Gl,null,t===g.COMMAND_LINE&&r.syncStatus.status!=="syncing"?Fr.createElement(Ts,{width:e}):Fr.createElement(Ms,{width:e,mode:t,availableHints:n}))};import{Box as mt,Text as ks}from"ink";import He from"react";var Ps=({width:e})=>{let t=[...v().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"]),He.createElement(mt,{flexDirection:"column",marginTop:3,borderColor:E.secondary,borderStyle:"round",width:e,minHeight:19},He.createElement(mt,{flexDirection:"column",width:e},v().mode===g.HELP?t.map(([n,r],o)=>He.createElement(mt,{paddingLeft:1,key:o,flexDirection:"row"},He.createElement(mt,{key:o,flexDirection:"row",paddingBottom:o?0:1},He.createElement(mt,{width:20,justifyContent:"flex-end"},He.createElement(ks,{color:o?E.accent:E.secondary},n)),He.createElement(mt,{flexGrow:1,width:40,paddingLeft:2},He.createElement(ks,{color:o?E.primary:E.secondary},r))))):null))};import Os from"chalk";import{Box as In,Text as Ze}from"ink";import ee from"react";import{Box as Or,Text as zl}from"ink";import pt from"react";var ql=(e,t)=>e.length<=t?e:t<=1?"\u2026":e.slice(0,t-1)+"\u2026",Ls=({width:e})=>{let{breadCrumb:t,currentNode:n,selectedIndex:r,viewMode:o}=v(),i=O(n.id)[r],a=Be(i?.id??n.id,"TICKET"),d=Ne(a)?a.value:void 0,u=d?.id?O(d.id):[],m=I=>{let C=u.find(w=>w.title===I);return C?O(C.id).map(w=>typeof w.props?.value=="string"?w.props.value:"").filter(w=>!!w):[]},p=m("Tags"),y=m("Assignees"),N=d?.parentNodeId?!jn(n.id,d?.parentNodeId)&&o==="dense":!1,S=t.map((I,C)=>{let w=C===t.length-1,U=O(I.id),De=w?U?.[r]?.title:void 0;return`${C?" / ":""}${I.title??""}${De?` \u25B8 ${De}`:""}`}).join(""),A=ql(S,e);return pt.createElement(Or,null,pt.createElement(zl,{color:E.secondary2},A),N?p.map(I=>pt.createElement(Or,{key:I,paddingLeft:2},pt.createElement(dt,{id:I}))):null,N?y.map(I=>pt.createElement(Or,{key:I,paddingLeft:2},pt.createElement(at,{id:I}))):null)};import{Box as Yl,Text as Ds}from"ink";import bn from"react";var Xl=({filters:e})=>bn.createElement(Yl,{columnGap:1},bn.createElement(Ds,{color:"red"},"APPLIED FILTERS:"),e.map(({value:t,target:n,operator:r})=>bn.createElement(Ds,{backgroundColor:"black",color:"white"},` ${n}${r}"${t}" `))),Fs=bn.memo(Xl);function Sn({filters:e,hideBreadCrumb:t=!1}){let{timeMode:n,eventLog:r,unappliedEvents:o}=_(),{userName:i,preferredEditor:a}=ge(),d=40,u=process.stdout.columns-d-8,m=r.at(-1)?.id,p=Xt(m??""),y=Ne(p)?No(p.value):"INVALID DATE";return ee.createElement(In,{justifyContent:"space-between",flexDirection:"row","max-width":process.stdout.columns-40,overflow:"hidden"},t?ee.createElement(Ze,null," "):ee.createElement(In,{paddingLeft:1},e.length>0?ee.createElement(Fs,{filters:e}):ee.createElement(Ls,{width:u})),n==="live"?ee.createElement(In,{columnGap:1,paddingRight:2,"max-width":d,overflow:"hidden",justifyContent:"flex-end"},ee.createElement(Bs,{icon:"@",value:i}),ee.createElement(Bs,{icon:"\u276F",value:a})):"",n==="peek"?ee.createElement(In,{paddingLeft:1},ee.createElement(Ze,{backgroundColor:E.yellow}," Readonly "),ee.createElement(Ze,{color:E.yellow}," "+o.length+" edits ago at "),ee.createElement(Ze,{backgroundColor:E.yellow,color:E.accent}," "+y+" "),ee.createElement(Ze,{color:E.yellow},". Resume with "),ee.createElement(Ze,{backgroundColor:E.yellow}," :peek now ")):"")}function Bs({icon:e,value:t}){return ee.createElement(Ze,null,Os.dim(e)+Os.hex(E.accent)(` ${t??"-"} `))}import{Box as Jl,Text as Zl}from"ink";import Dt from"react";import{Box as An,Text as Br}from"ink";import Ke from"react";function Ur(){let e=_(),t=e.nodes[e.rootNodeId],o=process.stdout.rows-1-3,i=process.stdout.columns||120,a=t?.id?R(t?.id):[];return Ke.createElement(An,{flexDirection:"column",height:o,padding:1,borderStyle:"round",borderColor:E.secondary,width:i},Ke.createElement(An,{padding:1,paddingTop:0,paddingBottom:0},Ke.createElement(Br,null,"Select a board:")),Ke.createElement(An,{padding:1,flexDirection:"column"},a.map((d,u)=>{let m=e.currentNode.context==="WORKSPACE"&&e.selectedIndex===u,y=R(d.id).flatMap(({id:N})=>O(N)).length;return Ke.createElement(An,{key:d.id??u},Ke.createElement(Br,{color:m?E.accent:E.secondary2},Ke.createElement(re,{isSelected:m})),Ke.createElement(Br,{color:m?E.accent:E.secondary2},d.title," (",y," issues)",d.readonly?" \u{1F512}":""))})))}var Ql=({currentNode:e,selectedIndex:t,breadCrumb:n,mode:r,viewMode:o,height:i,width:a})=>{let{renderedChildrenIndex:d}=_(),u=n.find(({context:N})=>N==="BOARD"),y=i-1-3;return Dt.createElement(Jl,{flexDirection:"row"},e.context==="WORKSPACE"?Dt.createElement(Ur,null):u?Dt.createElement(sn,{height:y,width:a,swimlanes:(d[u.id]??[]).filter(N=>N!==void 0&&Qe(N)),currentNode:e,selectedIndex:t,breadCrumb:n,viewMode:o,mode:r}):Dt.createElement(Zl,null))},Us=Dt.memo(Ql);import{Box as Ft,Text as ye}from"ink";import K from"react";var Tn=({isDone:e,command:t,value:n})=>K.createElement(Ft,null,K.createElement(ye,{color:E.accent,dimColor:e},e?" \u2714 ":" "),K.createElement(ye,{dimColor:e},"Type "),K.createElement(ye,{backgroundColor:E.secondary,dimColor:e}," "+t+" "),n&&K.createElement(K.Fragment,null,K.createElement(ye,{dimColor:e}," "),K.createElement(ye,{color:E.secondary,dimColor:e},"<"+n+">")));function $r({width:e,height:t,hasUserName:n,hasPreferredEditor:r,userName:o,preferredEditor:i}){let a=n&&r,d=n?r?null:":config:editor":":config:username";return K.createElement(Ft,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:E.secondary,rowGap:1},K.createElement(ye,{color:E.accent,bold:!0},"Welcome! \u{1F539}"),K.createElement(ye,null,"Lets get you started - its a breeze."),K.createElement(ye,{color:E.secondary2},"And remember, you can always get help with"," ",K.createElement(ye,{color:E.accent},":help"),"."),!a&&K.createElement(ye,{color:E.secondary2},d===":config:username"?"First, choose your username.":"Nice. One more step."),K.createElement(Ft,{flexDirection:"column"},n&&K.createElement(Ft,{marginBottom:1},K.createElement(Tn,{isDone:!0,command:":config:username",value:o})),!n&&K.createElement(Tn,{isDone:!1,command:":config:username"}),n&&!r&&K.createElement(Tn,{isDone:!1,command:":config:editor"}),a&&K.createElement(Ft,null,K.createElement(Tn,{isDone:!0,command:":config:editor",value:i}))))}var tc=({width:e,height:t})=>D.createElement(ve,{height:t-4,flexDirection:"column",width:e,paddingTop:1,paddingLeft:2,borderStyle:"round",borderColor:E.secondary,rowGap:1},D.createElement(Ve,{color:E.accent,bold:!0},"Initialize project"),D.createElement(Ve,null,`This folder is not an ${ec.hex(E.accent)("epiq")} project yet.`),D.createElement(Ve,{color:E.primary},"To start tracking issues here, we need to initialize a new"," ",D.createElement(Ve,{color:E.primary,backgroundColor:E.secondary}," .epiq/ ")," ","directory in this repository."),D.createElement(ve,{marginTop:1,flexDirection:"column"},D.createElement(ve,null,D.createElement(Ve,{color:E.accent}," "),D.createElement(Ve,{color:E.primary},"Type "),D.createElement(Ve,{backgroundColor:E.secondary}," :init "))),D.createElement(ve,{marginTop:1},D.createElement(Ve,{color:E.secondary2},"(This will create the local epiq project files)")));function _r({width:e,height:t}){let n=_(),r=n.filters;if(n.mode===g.HELP)return D.createElement(ve,{flexDirection:"column"},D.createElement(Ps,{width:e}));let{isSetup:o,hasPreferredEditor:i,hasUserName:a,userName:d,preferredEditor:u}=jt(),m=!o,p=o&&ze();if(m)return D.createElement(ve,{flexDirection:"column"},D.createElement(ve,{flexDirection:"column"},D.createElement(Sn,{hideBreadCrumb:!0,filters:r}),D.createElement($r,{height:t,width:e,hasUserName:a,hasPreferredEditor:i,userName:d??"",preferredEditor:u??""})),D.createElement(Cn,{width:e,mode:n.mode,availableHints:n.availableHints}));if(p)return D.createElement(ve,{flexDirection:"column"},D.createElement(ve,{flexDirection:"column"},D.createElement(Sn,{hideBreadCrumb:!0,filters:r}),D.createElement(tc,{height:t,width:e})),D.createElement(Cn,{width:e,mode:n.mode,availableHints:n.availableHints}));let y=Ie(v().breadCrumb??[],"BOARD");if(Ne(y)){let N=y.value.id,S=R(N).length,A=3,I=Math.floor(e/A),C=Math.floor(e/Math.max(S,1));e=Math.min(C,I)*Math.max(S,A)}return D.createElement(ve,{flexDirection:"column"},D.createElement(ve,{flexDirection:"column"},D.createElement(Sn,{filters:r}),D.createElement(Us,{width:e,height:t,currentNode:n.currentNode,selectedIndex:n.selectedIndex,breadCrumb:n.breadCrumb,viewMode:n.viewMode,mode:n.mode})),D.createElement(Cn,{width:e,mode:n.mode,availableHints:n.availableHints}))}import nc from"readline";var wn,Rn,he,rc=new Set([x.MoveCursorLeft,x.EraseInputWord,x.MoveCursorLeftOfWord,x.MoveCursorRight,x.MoveCursorRightOfWord,x.NavToPreviousContainer,x.NavToNextContainer,x.NavPreviousItem,x.NavNextItem,x.SetViewDense,x.SetViewWide,x.Confirm,x.Exit,x.InitCommandLine,x.ExitCommandLine,x.CaptureInput,x.EraseInput,x.EraseInputWord,x.HideHelp,x.ViewHelp,x.SetViewDense,x.SetViewWide,x.GetLastCommandFromHistory,x.GetNextCommandFromHistory,x.AutoCompleteCommand]),$s=async e=>{if(e.ctrl&&e.name==="c")return L.exit();let{actionIndex:t,mode:n,readOnly:r}=v(),o=$o(e,n);if(!o||r&&!rc.has(o))return;let i=t[n]?.[o];if(i?.action)try{await i.action(i,e)}catch(a){logger.error(a)}},oc=()=>async function(t,n){n.name!=="escape"&&(he&&(clearTimeout(he),he=void 0),await $s(n))},ic=()=>async function(t){if(t.length===1&&t[0]===27){he&&clearTimeout(he),he=setTimeout(()=>{$s({name:"escape",ctrl:!1,meta:!1,shift:!1,sequence:"\x1B"}),he=void 0},25);return}he&&(clearTimeout(he),he=void 0)};function _s(){wn&&process.stdin.removeListener("keypress",wn),Rn&&process.stdin.removeListener("data",Rn),wn=oc(),Rn=ic(),nc.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("data",Rn),process.stdin.on("keypress",wn)}ac(`${Wr.bold("Epiq CLI")}
65
65
 
66
66
  ${Wr.dim("Boot in directory:")}
67
67
  ${Wr.cyan("$ epiq")}
68
68
 
69
- `,{importMeta:import.meta,flags:{init:{type:"string"}}});var Bs=process.stdout.columns||120,Us=process.stdout.rows||20,Pn=null,oc=e=>{if(!Pn){Pn=tc(e);return}Pn.rerender(e)},$s=()=>{oc(rc.createElement(_r,{width:Bs,height:Us}))},ic=()=>{let e=ve(process.cwd());if(l(e))throw Error(e.message);let t=ht(e.value);if(l(t)){if(t.message.includes("No events found"))return logger.info("No events found, starting with empty state"),[];throw new Error(t.message)}return t.value},sc=e=>{let t=ys(e);if(l(t))throw new Error(`Failed to boot state: ${t.message}`)};async function ac(){let e=Fi();l(e)||tt(e.value),await Ii();let t=ic();sc(t),$s(),Os()}process.stdout.on("resize",()=>{Bs=process.stdout.columns||120,Us=process.stdout.rows||20,Pn&&$s()});(async()=>(console.clear(),await ac()))();
69
+ `,{importMeta:import.meta,flags:{init:{type:"string"}}});var Ws=process.stdout.columns||120,Hs=process.stdout.rows||20,Mn=null,lc=e=>{if(!Mn){Mn=sc(e);return}Mn.rerender(e)},Ks=()=>{lc(dc.createElement(_r,{width:Ws,height:Hs}))},cc=()=>{let e=fe(process.cwd());if(l(e))throw Error(e.message);let t=xt(e.value);if(l(t)){if(t.message.includes("No events found"))return logger.info("No events found, starting with empty state"),[];throw new Error(t.message)}return t.value},uc=e=>{let t=Cs(e);if(l(t))throw new Error(`Failed to boot state: ${t.message}`)};async function mc(){let e=es();l(e)||et(e.value),await Oi();let t=cc();uc(t),Ks(),_s()}process.stdout.on("resize",()=>{Ws=process.stdout.columns||120,Hs=process.stdout.rows||20,Mn&&Ks()});(async()=>(console.clear(),await mc()))();