@oxgeneral/orch 1.0.26 → 1.0.27

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.
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import {a as a$5}from'./chunk-HYQXUJYV.js';import {a}from'./chunk-N4OXN2HW.js';import {c,a as a$1}from'./chunk-HXOMNULD.js';import {b,a as a$2}from'./chunk-3YGXRXS7.js';import {a as a$4}from'./chunk-SLMXPTXV.js';import {a as a$3,b as b$1}from'./chunk-DZK72HOZ.js';import {f,h,g}from'./chunk-64WUDYEM.js';import {n}from'./chunk-LRYVT4D4.js';import mo,{useState,useMemo,useEffect,useRef,useCallback}from'react';import {Box,Text,useInput,useApp,useStdout}from'ink';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var e={amber:"#ffaf00",amberDim:"#af8700",green:"#5faf87",red:"#d75f5f",blue:"#5fafd7",yellow:"#d7af00",cyan:"#5fd7d7",purple:"#af87ff",white:"#eeeeee",silver:"#bcbcbc",gray:"#808080",dim:"#585858",ghost:"#3a3a3a",void:"#262626",errorBg:"#3d1515",warnBg:"#3d2e0a",successBg:"#0f2d1f",infoBg:"#1a1a22",toolBg:"#0f1f2d"},Po="\u2501",He="\u2500",ge="\xB7",Qt="\u25C8",Lr="\u2605",bn="\u27F3",Ut="\u25C6",No={in_progress:e.green,retrying:e.yellow,review:e.blue,todo:e.dim,done:e.green,failed:e.red,cancelled:e.dim},Ds=new Map,Fs=new Map;function Ue(t){if(t<=0)return "";let n=Ds.get(t);return n||(n=Po.repeat(t),Ds.set(t,n)),n}function be(t){if(t<=0)return "";let n=Fs.get(t);return n||(n=He.repeat(t),Fs.set(t,n)),n}function it(t,n){return t.length>n?t.slice(0,n-1)+"\u2026":t}var bl=1e4;function Pr(t,n=bl){if(t)return t.length>n?t.slice(0,n)+`
3
+ \u2026[truncated]`:t}var Ws={active:e.green,paused:e.dim,achieved:e.amber,abandoned:e.ghost};var wl=120,Do=0,lo=null,Fo=new Set;function Sl(){lo||(lo=setInterval(()=>{Do++;for(let t of Fo)t(Do);},wl));}function kl(){lo&&Fo.size===0&&(clearInterval(lo),lo=null);}function Nn(t=true){let[n,o]=useState(Do);return useEffect(()=>{if(!t)return;o(Do);let r=s=>o(s);return Fo.add(r),Sl(),()=>{Fo.delete(r),kl();}},[t]),n}var Gs=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Xt({color:t}){let n=Nn();return jsx(Text,{color:t,children:Gs[n%Gs.length]})}var co={in_progress:0,retrying:1,review:2,todo:3,done:4,failed:5,cancelled:6};var Ml="\u25CB",Vs="\u2713",js="\u2715",_l="\u21BB",Rl="\u2500",Al="\u25B6",Dt={green:"#0f2d1f",blue:"#0f1f2d",yellow:"#2d2a0f",red:"#2d0f0f",neutral:"#1a1a22",amber:"#2d1f0a"},$l={in_progress:{icon:Al,label:"RUN",fg:e.green,bg:Dt.green,bold:true,spinner:true},retrying:{icon:_l,label:"RETRY",fg:e.yellow,bg:Dt.yellow,spinner:true},review:{icon:Qt,label:"REVIEW",fg:e.blue,bg:Dt.blue},todo:{icon:Ml,label:"TODO",fg:e.dim,bg:Dt.neutral},done:{icon:Vs,label:"DONE",fg:e.green,bg:Dt.green},failed:{icon:js,label:"FAIL",fg:e.red,bg:Dt.red,bold:true},cancelled:{icon:Rl,label:"OFF",fg:e.dim,bg:Dt.neutral}},Bl={1:{color:e.red,label:"!!!"},2:{color:e.yellow,label:"!!"},3:{color:e.dim,label:"!"},4:{color:e.ghost,label:ge}};var Ol=18,Ll="#2d1f0a",Wo=mo.memo(function({task:n,selected:o,width:r,agentNameMap:s,goalMap:f$1}){let h=$l[n.status],y=n.status==="in_progress"||n.status==="retrying",g=Bl[n.priority]??{color:e.ghost,label:ge},T,S;if(n.status==="done")T=Vs,S=e.green;else if(n.status==="failed")T=js,S=e.red;else if(y){let G=Date.now()-new Date(n.updated_at).getTime();T=f(G),S=e.cyan;}else T="\u2014",S=void 0;let I=o?"\u25B8":" ",_=n.goalId?f$1?.get(n.goalId):void 0,v=!!_,L=10,M=4,R=14,C=v?Ol:0,z=7,P=2+L+M+R+C+z,B=r?Math.max(10,r-P):40,H=n.assignee?s?.get(n.assignee)??n.assignee:void 0;return jsxs(Box,{children:[jsxs(Text,{color:o?e.amber:void 0,children:[I," "]}),jsx(Box,{width:L,children:jsx(Text,{backgroundColor:h.bg,color:h.fg,bold:h.bold,children:h.spinner?jsxs(Fragment,{children:[" ",jsx(Xt,{color:h.fg})," ",h.label," "]}):jsxs(Fragment,{children:[" ",h.icon," ",h.label," "]})})}),jsx(Box,{width:M,children:jsx(Text,{color:g.color,bold:n.priority<=2,children:g.label})}),jsxs(Box,{width:B,children:[jsx(Text,{wrap:"truncate",bold:o||y,color:o?e.white:y?e.silver:void 0,children:n.title.length>B?n.title.slice(0,B-1)+"\u2026":n.title}),(n.attachments?.length??0)>0&&jsxs(Text,{color:e.dim,children:[" ","\u{1F4CE}",n.attachments.length]})]}),v&&jsx(Box,{width:C,children:jsxs(Text,{backgroundColor:Ll,color:e.amberDim,wrap:"truncate",children:[" \u2295 ",it(_.title,13)," "]})}),jsx(Box,{width:R,children:H?jsxs(Text,{backgroundColor:Dt.green,color:e.green,wrap:"truncate",children:[" ",H.length>R-2?H.slice(0,R-3)+"\u2026":H," "]}):jsx(Text,{color:e.ghost,children:"\u2014"})}),jsx(Box,{width:z,justifyContent:"flex-end",children:jsx(Text,{color:S,dimColor:!S,children:T})})]})});var Hs="\u2295";function Us({goalTitle:t,taskCount:n,doneCount:o,width:r}){let s=n>0?Math.round(o/n*100):0,f=` ${Hs} ${t.toUpperCase()} ${ge} ${n} task${n!==1?"s":""} ${ge} ${s}% done `,h=3,y=Math.max(0,r-h-f.length-4);return jsxs(Box,{paddingX:2,children:[jsx(Text,{color:e.ghost,children:be(h)}),jsx(Text,{backgroundColor:Dt.amber,color:e.amber,bold:true,children:f}),jsx(Text,{color:e.ghost,children:be(y)})]})}function Xs({taskCount:t,width:n}){let o=` ${Hs} UNGROUPED ${ge} ${t} task${t!==1?"s":""} `,r=3,s=Math.max(0,n-r-o.length-4);return jsxs(Box,{paddingX:2,children:[jsx(Text,{color:e.ghost,children:be(r)}),jsx(Text,{backgroundColor:Dt.neutral,color:e.dim,children:o}),jsx(Text,{color:e.ghost,children:be(s)})]})}var Nl="\u2715",qs="\u25CB",Dl="\u25B6",Fl="\u2713",Dn={green:"#0f2d1f",red:"#2d0f0f",neutral:"#1a1a22",amber:"#2d1f0a"},Wl={running:{icon:Dl,label:"ACTIVE",fg:e.green,bg:Dn.green,bold:true,spinner:true},idle:{icon:qs,label:"IDLE",fg:e.dim,bg:Dn.neutral},error:{icon:Nl,label:"ERROR",fg:e.red,bg:Dn.red,bold:true},disabled:{icon:qs,label:"OFF",fg:e.ghost,bg:Dn.neutral}},Nr={running:0,idle:1,error:2,disabled:3},Ys=mo.memo(function({agent:n$1,selected:o,width:r,runningEntry:s,currentTaskTitle:f$1,teamName:h,isLead:y}){let g=Wl[n$1.status],T=n$1.status==="running",S,I;if(T&&s){let H=Date.now()-new Date(s.started_at).getTime();S=f(H),I=e.cyan;}else n$1.stats.total_runs>0?(S=`${n$1.stats.tasks_completed}/${n$1.stats.total_runs}`,I=n$1.stats.tasks_completed>0?e.green:e.dim):(S="\u2014",I=void 0);let _=o?"\u25B8":" ",v=11,L=8,M=h?Math.min(h.length+2,12):0,R=10,C=2+v+L+M+R,z=r?Math.max(8,r-C):20,P=n$1.stats.total_runs>0,B=P?Math.round(n$1.stats.tasks_completed/n$1.stats.total_runs*100):0;return jsxs(Box,{children:[jsxs(Text,{color:o?e.amber:void 0,children:[_," "]}),jsx(Box,{width:v,children:jsx(Text,{backgroundColor:g.bg,color:g.fg,bold:g.bold,children:g.spinner?jsxs(Fragment,{children:[" ",jsx(Xt,{color:g.fg})," ",g.label," "]}):jsxs(Fragment,{children:[" ",g.icon," ",g.label," "]})})}),jsx(Box,{width:z,children:jsxs(Text,{wrap:"truncate",bold:o||T,color:o?e.white:T?e.green:e.silver,children:[n$1.autonomous&&jsxs(Text,{color:e.cyan,children:[bn," "]}),y&&jsxs(Text,{color:e.amber,children:[Lr," "]}),n$1.name,T&&f$1&&jsxs(Text,{color:e.dim,children:[" ",ge," ",f$1]}),n$1.status==="error"&&n$1.last_error&&jsxs(Text,{color:e.red,children:[" ",ge," ",it(n[n$1.last_error.kind]?.message??n$1.last_error.message,30)]})]})}),jsx(Box,{width:L,children:jsx(Text,{color:e.dim,children:n$1.adapter})}),h&&jsx(Box,{width:M,children:jsx(Text,{color:e.amber,wrap:"truncate",children:h})}),jsx(Box,{width:R,justifyContent:"flex-end",children:P&&!T?jsxs(Text,{color:B>=80?e.green:B>=50?e.yellow:e.red,children:[S," ",Fl]}):jsx(Text,{color:I,dimColor:!I,children:S})})]})});function Zs({teamName:t,memberCount:n,leadName:o,width:r}){let s=`${n} agent${n!==1?"s":""}`,f=o?` ${ge} ${Lr} ${o}`:"",h=` ${Qt} ${t.toUpperCase()} ${ge} ${s}${f} `,y=3,g=Math.max(0,r-y-h.length-4);return jsxs(Box,{paddingX:2,children:[jsx(Text,{color:e.ghost,children:be(y)}),jsx(Text,{backgroundColor:Dn.amber,color:e.amber,bold:true,children:h}),jsx(Text,{color:e.ghost,children:be(g)})]})}var Gl="\u25C7";function Js({memberCount:t,width:n}){let o=`${t} agent${t!==1?"s":""}`,r=` ${Gl} UNASSIGNED ${ge} ${o} `,s=3,f=Math.max(0,n-s-r.length-4);return jsxs(Box,{paddingX:2,children:[jsx(Text,{color:e.ghost,children:be(s)}),jsx(Text,{backgroundColor:Dn.neutral,color:e.dim,children:r}),jsx(Text,{color:e.ghost,children:be(f)})]})}var Qs="\u2713",ei="\u2715",Vl="\u2016",jl="\u25C9",go={green:"#0f2d1f",amber:"#2d1f0a",neutral:"#1a1a22"},Hl={active:{icon:jl,label:"ACTIVE",fg:e.green,bg:go.green,bold:true},paused:{icon:Vl,label:"PAUSED",fg:e.dim,bg:go.neutral},achieved:{icon:Qs,label:"DONE",fg:e.amber,bg:go.amber,bold:true},abandoned:{icon:ei,label:"DROP",fg:e.ghost,bg:go.neutral}},Ul="\u2588",Xl="\u2591",ql=14,ti=mo.memo(function({goal:n,selected:o,width:r,agentNameMap:s,tasksByGoal:f}){let h=Hl[n.status],y=o?"\u25B8":" ",g=f?.length??0,T=f?.filter(B=>B.status==="done").length??0,S=g>0,I=11,_=S?ql:0,v=14,L=7,M=2+I+_+v+L,R=r?Math.max(10,r-M):40,C=n.assignee?s?.get(n.assignee)??n.assignee:void 0,z,P;if(n.status==="achieved")z=Qs,P=e.amber;else if(n.status==="abandoned")z=ei,P=e.ghost;else {let B=Date.now()-new Date(n.created_at).getTime(),H=Math.floor(B/864e5);z=H>0?`${H}d`:"<1d",P=e.dim;}return jsxs(Box,{children:[jsxs(Text,{color:o?e.amber:void 0,children:[y," "]}),jsx(Box,{width:I,children:jsxs(Text,{backgroundColor:h.bg,color:h.fg,bold:h.bold,children:[" ",h.icon," ",h.label," "]})}),jsx(Box,{width:R,children:jsx(Text,{wrap:"truncate",bold:o||n.status==="active",color:o?e.white:n.status==="active"?e.silver:void 0,children:n.title.length>R?n.title.slice(0,R-1)+"\u2026":n.title})}),S&&(()=>{let H=g>0?Math.round(T/g*6):0,G=6-H;return jsxs(Box,{width:_,children:[jsx(Text,{color:e.green,children:Ul.repeat(H)}),jsx(Text,{color:e.ghost,children:Xl.repeat(G)}),jsx(Text,{color:e.dim,children:` ${T}/${g}`})]})})(),jsx(Box,{width:v,children:C?jsxs(Text,{backgroundColor:go.green,color:e.green,wrap:"truncate",children:[" ",C.length>v-2?C.slice(0,v-3)+"\u2026":C," "]}):jsx(Text,{color:e.ghost,children:"\u2014"})}),jsx(Box,{width:L,justifyContent:"flex-end",children:jsx(Text,{color:P,dimColor:!P,children:z})})]})});var Kl={system:"\u2666",lifecycle:"\u25B6",output:"\u2502",tool:"\u2699",result:"\u2190",error:"\u2715",file:"\u270E",info:"\u2502"};function Gn({label:t,width:n,color:o}){let r=n-4,s=` ${t} `,f=3,h=Math.max(0,r-f-s.length);return jsxs(Text,{color:o??e.ghost,children:[" ",be(f),s,be(h)]})}function ni({task:t,height:n,width:o,taskLogs:r,agentNameMap:s,taskTitleMap:f}){let h=No[t.status]??e.dim,y=t.priority<=2?t.priority===1?e.red:e.yellow:void 0,g=24,T=!!t.description?.trim(),S=!!t.proof?.agent_summary,I=(t.proof?.files_changed?.length??0)>0,_=(r?.length??0)>0,v=(t.attachments?.length??0)>0,L=T?t.description.split(`
4
+ `):[],M=S?t.proof.agent_summary.split(`
5
+ `):[],R=3;v&&(R+=2+t.attachments.length),T?(R+=1,R+=Math.min(L.length,Math.max(1,Math.ceil((n-10)*.3)))):S||(R+=2),S&&(R+=2),I&&(R+=1),_&&(R+=2);let C=Math.max(0,n-R),z=0,P=0;S&&_?(z=Math.max(1,Math.floor(C*.4)),P=Math.max(1,C-z)):S?z=C:_&&(P=C);let B=T?L.slice(0,Math.max(1,Math.ceil((n-10)*.3))):[],H=M.slice(0,z);return jsxs(Box,{flexDirection:"column",paddingX:2,children:[jsxs(Box,{children:[jsxs(Box,{width:g,children:[jsx(Text,{color:e.dim,children:" status "}),jsx(Text,{color:h,children:t.status})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" assignee "}),jsx(Text,{color:t.assignee?e.green:e.dim,children:t.assignee?s?.get(t.assignee)??t.assignee:"\u2014"})]})]}),jsxs(Box,{children:[jsxs(Box,{width:g,children:[jsx(Text,{color:e.dim,children:" priority "}),jsxs(Text,{color:y,bold:t.priority<=2,children:["P",t.priority]})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" attempts "}),jsxs(Text,{children:[t.attempts,"/",t.max_attempts]})]})]}),jsxs(Box,{children:[jsxs(Box,{width:g,children:[jsx(Text,{color:e.dim,children:" labels "}),jsx(Text,{color:e.purple,children:t.labels.length>0?t.labels.join(", "):"\u2014"})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" depends "}),jsx(Text,{dimColor:true,children:t.depends_on.length>0?t.depends_on.map(G=>f?.get(G)??G).join(", "):"\u2014"})]})]}),v&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Gn,{label:`attachments (${t.attachments.length})`,width:o,color:e.dim}),t.attachments.map((G,W)=>jsxs(Text,{color:e.cyan,wrap:"truncate",children:[" ",G]},`a${W}`))]}),T&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),B.map((G,W)=>jsxs(Text,{color:e.silver,wrap:"truncate",children:[" ",it(G,o-8)]},`d${W}`))]}),!T&&!S&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Text,{color:e.dim,children:" No description."})]}),S&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Gn,{label:"result",width:o,color:e.dim}),H.map((G,W)=>jsxs(Text,{color:e.white,wrap:"truncate",children:[" ",it(G,o-8)]},`r${W}`))]}),I&&jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" files "}),jsx(Text,{color:e.cyan,children:t.proof.files_changed.length}),jsx(Text,{color:e.dim,children:" changed"}),t.proof.branch&&jsxs(Fragment,{children:[jsxs(Text,{color:e.dim,children:[" ","\xB7"," "]}),jsx(Text,{color:e.cyan,children:t.proof.branch})]})]}),_&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Gn,{label:"activity",width:o,color:e.dim}),r.slice(-P).map((G,W)=>{let w=G.msgType??"info",U=Kl[w]??"\u2502",ie=G.color;w==="tool"?ie=e.cyan:w==="file"?ie=e.purple:w==="error"?ie=e.red:w==="lifecycle"?ie=e.green:w==="system"&&(ie=e.dim);let oe=Math.max(10,o-12),ye=it(G.text,oe);return jsxs(Box,{children:[jsxs(Text,{color:e.ghost,children:[" ",G.time," "]}),jsxs(Text,{color:w==="error"?e.red:e.dim,children:[U," "]}),jsx(Text,{color:ie,bold:w==="lifecycle",children:ye})]},W)})]})]})}var Go=[{key:"G",id:"goals",label:"GOALS"},{key:"T",id:"tasks",label:"TASKS"},{key:"A",id:"agents",label:"AGENTS"},{key:"L",id:"logs",label:"ACTIONS"}];var oi="\u25CF",ri="\u25CB",Yl="\u2713",Zl="\u2715",Jl="\u2191",Ql="\u2193",ec="\u03A3",tc="\u25B6",nc="\u21BB",oc="\u{1F9E0}",Dr=[" ","\u2581","\u2582","\u2583","\u2584","\u2585","\u2586","\u2587","\u2588"],tt={green:"#0f2d1f",blue:"#0f1f2d",yellow:"#2d2a0f",red:"#2d0f0f",neutral:"#1a1a22",amber:"#2d1f0a"};function rc({active:t}){let n=Nn(t),o=!t||Math.floor(n/10)%2===0;return jsx(Text,{color:o?e.amber:e.amberDim,bold:true,children:Ut})}function sc({width:t,active:n}){let o=Math.max(4,Math.floor(t*.08)),r=2,s=Nn(n),f=Math.ceil((t+o)/r),h=n?s%(f*2):0;if(!n)return jsx(Box,{paddingX:1,children:jsx(Text,{color:e.ghost,children:Ue(t)})});let y=h<f?h*r:(f*2-h)*r,g=Math.max(0,y-o),T=Math.min(t,y),S=g,I=Math.max(0,T-g),_=Math.max(0,t-T);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(S)}),jsx(Text,{color:e.amber,children:Ue(I)}),jsx(Text,{color:e.ghost,children:Ue(_)})]})}function ic({data:t,width:n,color:o}){if(t.length===0)return null;let r=t.slice(-n),s=Math.max(...r,1),f=r.map(h=>{let y=Math.round(h/s*(Dr.length-1));return Dr[y]??Dr[0]}).join("");return jsx(Text,{color:o,children:f})}function ac({tab:t,flashColor:n,onComplete:o,badge:r}){let s=Nn(),f=mo.useRef(s),h=mo.useRef(false),y=s-f.current,g=2,T=6*g;return mo.useEffect(()=>{y>=T&&!h.current&&(h.current=true,o());},[y,o]),Math.floor(y/g)%2===0&&y<T?jsxs(Text,{backgroundColor:n,color:"#0a0a0c",bold:true,children:[" ",t.key," ",t.label,r," "]}):jsxs(Box,{gap:0,children:[jsx(Text,{color:e.ghost,children:t.key}),jsxs(Text,{color:e.dim,children:[" ",t.label.toLowerCase(),r]})]})}function lc({projectName:t,activeView:n,mode:o,stats:r,uptime:s,width:f,version:h,latestVersion:y,updateInstalled:g,taskBadge:T,flashTab:S,flashColor:I,onFlashComplete:_}){return jsxs(Box,{paddingX:1,justifyContent:"space-between",width:f,children:[jsxs(Box,{gap:0,children:[jsx(rc,{active:r.running>0}),jsx(Text,{color:e.amber,bold:true,children:" ORCH"}),h&&jsxs(Text,{color:e.ghost,children:[" ",h]}),y&&y!==h&&(g?jsxs(Text,{backgroundColor:tt.green,color:e.green,bold:true,children:[" v",y," INSTALLED \u2014 RESTART TO APPLY "]}):jsxs(Text,{backgroundColor:tt.green,color:e.green,bold:true,children:[" UPDATE ",y," "]})),jsxs(Text,{color:e.ghost,children:[" ",ge," "]}),jsx(Text,{color:e.silver,children:t})]}),jsx(Box,{gap:0,children:Go.map((v,L)=>{let M=n===v.id,R=v.id==="tasks"&&T!=null&&T>0?` (${T})`:"",C=!M&&S===v.id&&I&&_;return jsxs(mo.Fragment,{children:[L>0&&jsx(Text,{children:" "}),M?jsxs(Text,{backgroundColor:e.amber,color:"#0a0a0c",bold:true,children:[" ",v.key," ",v.label,R," "]}):C?jsx(ac,{tab:v,flashColor:I,onComplete:_,badge:R}):jsxs(Box,{gap:0,children:[jsx(Text,{color:e.ghost,children:v.key}),jsxs(Text,{color:e.dim,children:[" ",v.label.toLowerCase(),R]})]})]},v.id)})}),jsxs(Box,{gap:0,children:[o==="watching"?jsxs(Text,{backgroundColor:tt.green,color:e.green,bold:true,children:[" ",oi," WATCHING"," "]}):o==="observing"?jsxs(Text,{backgroundColor:tt.amber,color:e.amber,bold:true,children:[" ",oi," OBSERVING"," "]}):jsxs(Text,{backgroundColor:tt.neutral,color:e.dim,children:[" ",ri," IDLE"," "]}),r.running>0&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Text,{backgroundColor:tt.green,color:e.green,children:[" ",jsx(Xt,{color:e.green})," ",r.running," active"," "]})]}),s&&jsxs(Text,{color:e.ghost,children:[" ",s]})]})]})}function cc({stats:t,tokens:n,width:o,sparklineData:r}){let f=[{icon:tc,label:"RUN",count:t.running,fg:e.green,bg:tt.green,bold:true,spinner:true,show:t.running>0},{icon:nc,label:"RETRY",count:t.retrying,fg:e.yellow,bg:tt.yellow,show:t.retrying>0},{icon:Qt,label:"REVIEW",count:t.review,fg:e.blue,bg:tt.blue,show:t.review>0},{icon:ri,label:"TODO",count:t.todo,fg:e.dim,bg:tt.neutral,show:t.todo>0},{icon:Yl,label:"DONE",count:t.done,fg:e.green,bg:tt.green,show:t.done>0},{icon:Zl,label:"FAIL",count:t.failed,fg:e.red,bg:tt.red,bold:true,show:t.failed>0},{icon:Ut,label:"TEAMS",count:t.teams,fg:e.amber,bg:tt.amber,show:t.teams>0}].filter(g=>g.show),h$1=n.total>0,y=r&&r.length>0?Math.min(16,r.length):0;return jsxs(Box,{paddingX:1,justifyContent:"space-between",width:o,children:[jsxs(Box,{gap:1,children:[f.map(g=>jsx(Text,{backgroundColor:g.bg,color:g.fg,bold:g.bold,children:g.spinner?jsxs(Fragment,{children:[" ",jsx(Xt,{color:g.fg})," ",g.count," ",g.label," "]}):jsxs(Fragment,{children:[" ",g.icon," ",g.count," ",g.label," "]})},g.label)),f.length===0&&jsxs(Text,{backgroundColor:tt.neutral,color:e.dim,children:[" ","NO TASKS"," "]})]}),jsxs(Box,{gap:0,children:[y>0&&r&&jsxs(Fragment,{children:[jsx(ic,{data:r,width:y,color:e.amberDim}),jsx(Text,{children:" "})]}),h$1&&jsxs(Text,{backgroundColor:tt.amber,color:e.cyan,children:[" ",Jl,h(n.input)," ",Ql,h(n.output),n.reasoning>0?` ${oc}${h(n.reasoning)}`:""," ",ge," ",ec,h(n.total)," "]})]})]})}var si=mo.memo(function(n){let o=Math.max(10,n.width-2),r=n.stats.running>0;return jsxs(Box,{flexDirection:"column",children:[jsx(Box,{height:1}),jsx(lc,{projectName:n.projectName,activeView:n.activeView,mode:n.mode,stats:n.stats,uptime:n.uptime,width:n.width,version:n.version,latestVersion:n.latestVersion,updateInstalled:n.updateInstalled,taskBadge:n.taskBadge,flashTab:n.flashTab,flashColor:n.flashColor,onFlashComplete:n.onFlashComplete}),jsx(Box,{height:1}),jsx(cc,{stats:n.stats,tokens:n.tokens,width:n.width,sparklineData:n.sparklineData}),jsx(sc,{width:o,active:r})]})});var fo="\u0423\u041F\u0420\u0410\u0412\u041B\u0415\u041D\u0418\u0415",zn="\u041C\u041E\u041D\u0418\u0422\u041E\u0420\u0418\u041D\u0413",Vo="\u041D\u0410\u0421\u0422\u0420\u041E\u0419\u041A\u0418",Tn={task:{sub:["add","list","show","cancel","retry","assign","approve","reject","delete"],help:"Manage tasks",category:fo},agent:{sub:["add","list","disable","enable","delete","autonomous","shop"],help:"Manage agents",category:fo},team:{sub:["create","list","join","leave","disband","set-lead"],help:"Manage teams",category:fo},goal:{sub:["add","list","show","status","delete"],help:"Manage goals",category:fo},run:{args:"[id]",help:"Run task (or selected)",category:zn},"run-all":{help:"Run all todo tasks",category:zn},watch:{help:"Start watch mode (auto-dispatch)",category:zn},pause:{help:"Pause watch mode",category:zn},status:{help:"Show orchestrator status",category:zn},config:{sub:["activity-filter","max-concurrent"],help:"TUI settings",category:Vo},help:{help:"List all commands",category:Vo},quit:{help:"Exit the TUI",category:Vo}};function Fr(t){if(!t.startsWith("/"))return null;let n=t.slice(1),o=n.indexOf(" ");if(o===-1){let y=n;if(!y)return null;let g=Object.keys(Tn).find(T=>T.startsWith(y)&&T!==y);return g?g.slice(y.length):null}let r=n.slice(0,o),s=Tn[r];if(!s?.sub)return null;let f=n.slice(o+1);if(!f)return null;let h=s.sub.find(y=>y.startsWith(f)&&y!==f);return h?h.slice(f.length):null}function ii(t){if(!t.startsWith("/"))return [];let n=t.slice(1),o=n.indexOf(" ");if(o===-1){let y=n.toLowerCase(),g=[];if(!y){let T=[fo,zn,Vo];for(let S of T){g.push({cmd:"",desc:`\u2500\u2500 ${S} \u2500\u2500`});for(let[I,_]of Object.entries(Tn))if(_.category===S){let v=_.args?` ${_.args}`:"";g.push({cmd:`/${I}${v}`,desc:_.help,subs:_.sub?.join(" \xB7 ")});}}return g}for(let[T,S]of Object.entries(Tn))if(T.startsWith(y)){let I=S.args?` ${S.args}`:"";if(g.push({cmd:`/${T}${I}`,desc:S.help,subs:S.sub?.join(" \xB7 ")}),T===y&&S.sub)for(let _ of S.sub)g.push({cmd:`/${T} ${_}`,desc:`${S.help}: ${_}`});}return g}let r=n.slice(0,o),s=Tn[r];if(!s?.sub)return [];let f=n.slice(o+1).toLowerCase(),h=[];for(let y of s.sub)(!f||y.startsWith(f))&&h.push({cmd:`/${r} ${y}`,desc:`${s.help}: ${y}`});return h}var jo=class{entries=[];cursor=0;push(n){n&&(this.entries[this.entries.length-1]!==n&&(this.entries.push(n),this.entries.length>100&&this.entries.shift()),this.cursor=this.entries.length);}prev(){return this.entries.length===0?null:(this.cursor>0&&this.cursor--,this.entries[this.cursor]??null)}next(){return this.cursor<this.entries.length-1?(this.cursor++,this.entries[this.cursor]??null):(this.cursor=this.entries.length,null)}reset(){this.cursor=this.entries.length;}};var uc="\u2588",ai=mo.memo(function({mode:n,value:o,completion:r,activeView:s,canRun:f,canNew:h,canApprove:y,canReject:g,canCancel:T,canDelete:S,canUndo:I,canEdit:_,canForceStop:v,canToggleAuto:L,autoActive:M,canPause:R,isPaused:C,canToggleShowAll:z,showAllActive:P,hasDetail:B,itemCount:H,itemLabel:G,width:W,hasSuggestions:w,onboardingCompleted:U}){if(n==="command"){let ie=w?" \u2191\u2193 select Tab fill Esc \u2715":" Enter exec \u2191\u2193 history Tab complete Esc \u2715",oe=Math.max(4,W-6-ie.length-(r?.length??0)-1),ye=o.length>oe?"\u2026"+o.slice(-(oe-1)):o;return jsx(Box,{paddingX:2,justifyContent:"space-between",width:W,children:jsxs(Box,{children:[jsx(Text,{color:e.amber,children:"/ "}),jsx(Text,{color:e.white,children:ye}),r&&jsx(Text,{color:e.ghost,children:r}),jsx(Text,{color:e.amber,children:uc}),jsx(Text,{color:e.dim,children:ie})]})})}return jsxs(Box,{paddingX:2,justifyContent:"space-between",width:W,children:[jsxs(Text,{color:e.dim,children:[jsx(Text,{bold:true,color:e.gray,children:"\u2191\u2193"})," ",jsx(Text,{bold:true,color:e.gray,children:"Tab"}),"/",jsx(Text,{bold:true,color:e.gray,children:"\u2190\u2192"})," ",jsx(Text,{bold:true,color:e.gray,children:"/"})," cmd",h&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"N"})," new"]}),f&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"R"})," run"]}),T&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.amber,children:"C"})," cancel"]}),y&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.green,children:"A"})," approve"]}),g&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.red,children:"X"})," reject"]}),_&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.cyan,children:"E"})," edit"]}),v&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.red,children:"S"})," stop"]}),R&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.amber,children:"P"}),C?" resume":" pause"]}),L&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.cyan,children:"U"}),M?" auto off":" auto on"]}),z&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"S"}),P?" collapse":" show all"]}),S&&!y&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"D"})," delete"]}),I&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.yellow,children:"Z"})," undo"]}),B&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"Esc"})," close"]}),!B&&(s==="tasks"||s==="agents"||s==="goals")&&jsxs(Fragment,{children:[" ",jsx(Text,{bold:true,color:e.gray,children:"Enter"})," detail"]})," ",jsx(Text,{bold:true,color:e.gray,children:"Q"})," quit"," ",jsx(Text,{bold:true,color:U===false?e.amber:e.gray,children:"?"}),jsx(Text,{color:U===false?e.amber:void 0,children:" help"})]}),H>0&&jsxs(Text,{color:e.dim,children:[H," ",G]})]})});var di=new Intl.Segmenter(void 0,{granularity:"grapheme"});function li(t){return [...di.segment(t)].map(n=>n.segment)}function Ho(t){let n=t.codePointAt(0)??0;return n>=11904&&n<=40959||n>=4352&&n<=4447||n>=43360&&n<=43391||n>=44032&&n<=55215||n>=63744&&n<=64255||n>=65040&&n<=65135||n>=65281&&n<=65376||n>=65504&&n<=65510||n>=131072&&n<=195103||n>=127744&&n<=129791?2:1}function ui(t){let n=0;for(let o of di.segment(t))n+=Ho(o.segment);return n}function ci(t,n){if(n<=0)return 0;let o=n-1;for(;o>0&&t[o-1]===" ";)o--;for(;o>0&&t[o-1]!==" ";)o--;return o}function gc(t,n){let o=t.length;if(n>=o)return o;let r=n;for(;r<o&&t[r]!==" ";)r++;for(;r<o&&t[r]===" ";)r++;return r}var Vn=class t{text;pos;_segs;constructor(n,o){this.text=n.normalize("NFC"),this._segs=li(this.text),this.pos=o!==void 0?Math.max(0,Math.min(o,this._segs.length)):this._segs.length;}static _withPos(n,o,r){let s=Object.create(t.prototype);return Object.defineProperty(s,"text",{value:n,writable:false}),Object.defineProperty(s,"_segs",{value:o,writable:false}),Object.defineProperty(s,"pos",{value:Math.max(0,Math.min(r,o.length)),writable:false}),s}get length(){return this._segs.length}get beforeSegs(){return this._segs.slice(0,this.pos)}get afterSegs(){return this._segs.slice(this.pos)}get before(){return this.beforeSegs.join("")}get after(){return this.afterSegs.join("")}get isEmpty(){return this.text.length===0}moveLeft(n=1){return t._withPos(this.text,this._segs,this.pos-n)}moveRight(n=1){return t._withPos(this.text,this._segs,this.pos+n)}moveToStart(){return t._withPos(this.text,this._segs,0)}moveToEnd(){return t._withPos(this.text,this._segs,this._segs.length)}moveToWordBack(){return t._withPos(this.text,this._segs,ci(this._segs,this.pos))}moveToWordForward(){return t._withPos(this.text,this._segs,gc(this._segs,this.pos))}insert(n){let o=n.normalize("NFC"),r=li(o),s=this._segs.slice(0,this.pos).join("")+o+this._segs.slice(this.pos).join("");return new t(s,this.pos+r.length)}deleteBack(){if(this.pos<=0)return this;let n=this._segs,o=n.slice(0,this.pos-1).join("")+n.slice(this.pos).join("");return new t(o,this.pos-1)}deleteForward(){let n=this._segs;if(this.pos>=n.length)return this;let o=n.slice(0,this.pos).join("")+n.slice(this.pos+1).join("");return new t(o,this.pos)}killToEnd(){let n=this._segs,o=n.slice(this.pos).join(""),r=n.slice(0,this.pos).join("");return [new t(r,this.pos),o]}killToStart(){let n=this._segs,o=n.slice(0,this.pos).join(""),r=n.slice(this.pos).join("");return [new t(r,0),o]}killWordBack(){let n=this._segs,o=ci(n,this.pos),r=n.slice(o,this.pos).join(""),s=n.slice(0,o).join("")+n.slice(this.pos).join("");return [new t(s,o),r]}replaceAll(n){return new t(n)}clear(){return new t("")}};var pc=500;function Xo(t={}){let n=t.maxUndoDepth??50,[o,r]=useState(()=>new Vn(t.initialValue??"")),s=useRef([]),f=useRef(null),h=useRef(""),y=useRef(o);y.current=o;let g=useCallback(L=>{y.current=L,r(L);},[]),T=useCallback(()=>{f.current&&(clearTimeout(f.current),f.current=null);let L=s.current,M=y.current;L.length>0&&L[L.length-1].text===M.text||(L.push(M),L.length>n&&L.shift());},[n]),S=useCallback(()=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{f.current=null,T();},pc);},[T]);useEffect(()=>()=>{f.current&&clearTimeout(f.current);},[]);let I=useCallback((L,M)=>{if(!L&&!M.backspace&&!M.delete&&!M.leftArrow&&!M.rightArrow&&!M.home&&!M.end)return false;let R=y.current;if(M.ctrl)switch(L){case "a":return g(R.moveToStart()),true;case "e":return g(R.moveToEnd()),true;case "k":{T();let[C,z]=R.killToEnd();return h.current=z,g(C),true}case "u":{T();let[C,z]=R.killToStart();return h.current=z,g(C),true}case "w":{T();let[C,z]=R.killWordBack();return h.current=z,g(C),true}case "y":return h.current&&(T(),g(R.insert(h.current))),true;case "z":{let C=s.current;return C.length>0&&C[C.length-1].text===R.text&&C.pop(),C.length>0&&g(C.pop()),true}case "b":return g(R.moveLeft()),true;case "f":return g(R.moveRight()),true;case "d":return R.isEmpty||(S(),g(R.deleteForward())),true;case "h":return R.pos>0&&(S(),g(R.deleteBack())),true;default:return false}if(M.meta){if(L==="z"){let C=s.current;for(;C.length>0&&C[C.length-1].text===R.text;)C.pop();return C.length>0&&g(C.pop()),true}if(L==="a")return g(R.moveToStart()),true;if(M.backspace||M.delete){T();let[C,z]=R.killToStart();return h.current=z,g(C),true}return M.leftArrow||L==="b"?(g(R.moveToWordBack()),true):M.rightArrow||L==="f"?(g(R.moveToWordForward()),true):false}return M.home?(g(R.moveToStart()),true):M.end?(g(R.moveToEnd()),true):M.leftArrow?(g(R.moveLeft()),true):M.rightArrow?(g(R.moveRight()),true):M.backspace||M.delete?(R.pos>0&&(S(),g(R.deleteBack())),true):L&&!M.escape?(S(),g(R.insert(L)),true):false},[g,T,S]),_=useCallback(L=>{let M=new Vn(L??"");g(M),s.current=[],f.current&&(clearTimeout(f.current),f.current=null);},[g]),v=useCallback(L=>{g(new Vn(L)),s.current=[];},[g]);return {cursor:o,value:o.text,handleInput:I,reset:_,setValue:v,setCursor:g}}var mi="\u2588";function hc(t,n,o){let r=0,s=t.length;for(;s>0;){let S=t[s-1],I=Ho(S);if(r+I>o-1)break;r+=I,s--;}let f=t.slice(s).join(""),h=Math.max(0,o-r-1),y=0,g=0;for(;g<n.length;){let S=n[g],I=Ho(S);if(y+I>h)break;y+=I,g++;}let T=n.slice(0,g).join("");return {visibleBefore:f,visibleAfter:T}}function qo({cursor:t,width:n,prefix:o,prefixColor:r=e.amber,placeholder:s,ghost:f,ghostColor:h=e.ghost,showCursor:y=true,cursorColor:g=e.amber,textColor:T=e.white,placeholderColor:S=e.ghost,hasError:I=false}){let _=o??"",v=ui(_),L=Math.max(4,n-v),M=t.isEmpty,{visibleBefore:R,visibleAfter:C}=hc(t.beforeSegs,t.afterSegs,L),z=I?"round":void 0,P=I?e.red:void 0;return M?jsxs(Box,{borderStyle:z,borderColor:P,children:[_&&jsx(Text,{color:r,children:_}),s&&jsx(Text,{color:S,children:s}),y&&jsx(Text,{color:g,children:mi})]}):jsxs(Box,{borderStyle:z,borderColor:P,children:[_&&jsx(Text,{color:r,children:_}),jsx(Text,{color:T,children:R}),y&&jsx(Text,{color:g,children:mi}),jsx(Text,{color:T,children:C}),f&&jsx(Text,{color:h,children:f})]})}var Tc="\u2588",Gr=process.platform==="darwin"?"\u2318":"Ctrl";function yc(t,n){if(n<=0||t.length<=n)return [t];let o=[];for(let r=0;r<t.length;r+=n)o.push(t.slice(r,r+n));return o}function xi(t,n){if(n<=0)return 0;let o=n-1;for(;o>0&&t[o-1]===" ";)o--;for(;o>0&&t[o-1]!==" ";)o--;return o}function wc(t,n){if(n>=t.length)return t.length;let o=n;for(;o<t.length&&t[o]!==" ";)o++;for(;o<t.length&&t[o]===" ";)o++;return o}function bi({title:t,steps:n,onComplete:o,onCancel:r,width:s,height:f,onPasteImage:h,footerExtra:y,onSuggestionSelected:g}){let [T,S]=useState(0),[I,_]=useState({}),v=Xo({initialValue:(()=>{let N=n.find(O=>!O.skip?.({}));return N?.type==="text"&&N.defaultValue?N.defaultValue:""})()}),L=v.value,[M,R]=useState(()=>{let N=n.find(O=>!O.skip?.({}));return N?.type==="textarea"&&N.defaultValue?N.defaultValue.split(`
6
+ `):[""]}),[C,z]=useState(0),[P,B]=useState(0),[H,G]=useState(()=>{let N=n.find(O=>!O.skip?.({}));if(N?.type==="select"&&N.defaultValue){let D=(N.getOptions?.({})??N.options??[]).findIndex(A=>A.value===N.defaultValue);return D>=0?D:0}return 0}),W=useMemo(()=>n.filter(N=>!N.skip?.(I)),[n,I]),w=W[T],U=W.length,{taLineNumWidth:oe,taContentWidth:ye}=useMemo(()=>{let N=String(M.length).length;return {taLineNumWidth:N,taContentWidth:Math.max(1,s-N-4)}},[M.length,s]),Ge=useMemo(()=>{if(!w||w.type!=="textarea")return [];let N=[];for(let O=0;O<M.length;O++){let D=yc(M[O]??"",ye);for(let A=0;A<D.length;A++)N.push({logicalRow:O,startCol:A*ye,text:D[A],isFirst:A===0});}return N},[w?.id,w?.type,M,ye]),ze=useMemo(()=>{for(let N=0;N<Ge.length;N++){let O=Ge[N];if(O.logicalRow===C&&(P>=O.startCol&&P<O.startCol+ye||P>=O.startCol&&(N+1>=Ge.length||Ge[N+1].logicalRow!==C)))return N}return 0},[Ge,C,P,ye]),[ut,Ct]=useState(new Set),[gt,mt]=useState(false),[Ze,Je]=useState(0),[ft,ke]=useState(false),[Gt,It]=useState(null),[ht,Qe]=useState(false),rt=useRef(null),qe=useRef(null),xo=useMemo(()=>w?w.type==="text"?L:w.type==="textarea"?M.join(`
7
+ `):"":"",[w,L,M]),an=useCallback((N,O)=>{if(rt.current&&clearTimeout(rt.current),!O){It(null);return}rt.current=setTimeout(()=>{It(O(N));},300);},[]);useEffect(()=>(w&&w.validate&&(w.type==="text"||w.type==="textarea")&&an(xo,w.validate),()=>{rt.current&&clearTimeout(rt.current);}),[xo,w,an]),useEffect(()=>()=>{qe.current&&clearTimeout(qe.current);},[]);let Bt=useMemo(()=>!w||w.type!=="select"&&w.type!=="multiselect"?[]:w.getOptions?.(I)??w.options??[],[w,I]),zt=Math.min(H,Math.max(0,Bt.length-1)),Vt=useMemo(()=>{if(!w?.suggestions)return [];if(!L.trim())return w.suggestions;let N=L.toLowerCase();return w.suggestions.filter(O=>O.label.toLowerCase().includes(N)||(O.hint??"").toLowerCase().includes(N))},[w?.suggestions,L]),Yt=Math.min(Ze,Math.max(0,Vt.length-1)),ln=N=>{let O={...I,[w.id]:N};_(O),v.reset(""),R([""]),z(0),B(0),G(0),Ct(new Set),mt(false),Je(0),ke(false),It(null),Qe(false),rt.current&&clearTimeout(rt.current);let D=w.id,q=n.findIndex(ne=>ne.id===D)+1;for(;q<n.length;){let ne=n[q];if(ne&&!ne.skip?.(O))break;q++;}if(q>=n.length)o(O);else {let ne=n[q].id,pe=n.filter(Ae=>!Ae.skip?.(O)).findIndex(Ae=>Ae.id===ne);S(pe>=0?pe:0);let ae=n[q];if(ae.type==="text")v.reset(ae.defaultValue??"");else if(ae.type==="textarea"){let Ae=ae.defaultValue?ae.defaultValue.split(`
8
+ `):[""];R(Ae),z(Ae.length-1),B(Ae[Ae.length-1].length);}else if(ae.type==="select"){let Ae=ae.getOptions?.(O)??ae.options??[];if(ae.defaultValue){let Ce=Ae.findIndex(qn=>qn.value===ae.defaultValue);G(Ce>=0?Ce:0);}else G(0);}else ae.type==="multiselect"&&(G(0),ae.defaultValue?Ct(new Set(ae.defaultValue.split(","))):Ct(new Set));}},cn=()=>{if(T===0){r();return}let N=w.id,D=n.findIndex(pe=>pe.id===N)-1;for(;D>=0;){let pe=n[D];if(pe&&!pe.skip?.(I))break;D--;}if(D<0){r();return}let A=n[D].id,q=W.findIndex(pe=>pe.id===A);S(q>=0?q:0),mt(false),Je(0),ke(false),It(null),Qe(false),rt.current&&clearTimeout(rt.current);let ne=n[D];if(I[ne.id]&&ke(true),ne.type==="text")v.reset(I[ne.id]??ne.defaultValue??"");else if(ne.type==="textarea"){let pe=I[ne.id]??ne.defaultValue??"",ae=pe?pe.split(`
9
+ `):[""];R(ae),z(ae.length-1),B(ae[ae.length-1].length);}else if(ne.type==="multiselect"){G(0);let pe=I[ne.id];Ct(pe?new Set(pe.split(",")):new Set);}else {let pe=ne.getOptions?.(I)??ne.options??[],ae=I[ne.id],Ae=pe.findIndex(Ce=>Ce.value===ae);G(Ae>=0?Ae:0);}};if(useInput((N,O)=>{if(w){if(O.escape){T===0?r():cn();return}if((O.ctrl||O.meta)&&(N==="v"||N==="i")&&h&&(w.type==="text"||w.type==="textarea")){h();return}if(w.type==="text"){if(gt&&Vt.length>0){if(O.upArrow){Yt<=0?mt(false):Je(A=>A-1);return}if(O.downArrow){Je(A=>Math.min(Vt.length-1,A+1));return}if(O.return){let A=Vt[Yt];A&&g&&g(A.value);return}mt(false);}if(O.return||O.tab){let A=L.trim();if(w.required&&!A){ke(true);return}if(Gt!==null){ke(true),Qe(true),qe.current&&clearTimeout(qe.current),qe.current=setTimeout(()=>Qe(false),2e3);return}ln(A);return}if(O.downArrow&&w.suggestions&&Vt.length>0){mt(true),Je(0);return}if((O.backspace||O.delete)&&v.cursor.isEmpty&&T>0){cn();return}v.handleInput(N,O)&&(ke(true),mt(false),Je(0));return}if(w.type==="textarea"){if(O.return&&(O.ctrl||O.meta)||O.tab){let D=M.join(`
10
+ `).trim();if(w.required&&!D){ke(true);return}if(Gt!==null){ke(true),Qe(true),qe.current&&clearTimeout(qe.current),qe.current=setTimeout(()=>Qe(false),2e3);return}ln(D);return}if(O.return){ke(true),R(D=>{let A=D[C]??"",q=A.slice(0,P),ne=A.slice(P),Ie=[...D];return Ie.splice(C,1,q,ne),Ie}),z(D=>D+1),B(0);return}if(O.ctrl&&N==="a"){B(0);return}if(O.ctrl&&N==="e"){B((M[C]??"").length);return}if(O.ctrl&&N==="k"){ke(true),R(D=>{let A=[...D];return A[C]=(A[C]??"").slice(0,P),A});return}if(O.ctrl&&N==="u"){ke(true),R(D=>{let A=[...D];return A[C]=(A[C]??"").slice(P),A}),B(0);return}if(O.ctrl&&N==="w"){ke(true);let D=C,A=P,q=M[D]??"",ne=xi(q,A);R(Ie=>{let pe=[...Ie];return pe[D]=q.slice(0,ne)+q.slice(A),pe}),B(ne);return}if(O.meta&&(O.leftArrow||N==="b")){B(xi(M[C]??"",P));return}if(O.meta&&(O.rightArrow||N==="f")){B(wc(M[C]??"",P));return}if(O.upArrow){if(ze>0){let D=Ge[ze],A=Ge[ze-1],q=P-(D?.startCol??0),ne=Math.min(A.startCol+q,A.startCol+A.text.length);z(A.logicalRow),B(ne);}return}if(O.downArrow){if(ze<Ge.length-1){let D=Ge[ze],A=Ge[ze+1],q=P-(D?.startCol??0),ne=Math.min(A.startCol+q,A.startCol+A.text.length);z(A.logicalRow),B(ne);}return}if(O.leftArrow){P>0?B(D=>D-1):C>0&&(z(D=>D-1),B((M[C-1]??"").length));return}if(O.rightArrow){let D=(M[C]??"").length;P<D?B(A=>A+1):C<M.length-1&&(z(A=>A+1),B(0));return}if(O.backspace||O.delete){if(P===0&&C===0)return;if(P>0)R(D=>{let A=[...D],q=A[C]??"";return A[C]=q.slice(0,P-1)+q.slice(P),A}),B(D=>D-1);else {let D=(M[C-1]??"").length;R(A=>{let q=[...A],ne=q[C-1]??"",Ie=q[C]??"";return q.splice(C-1,2,ne+Ie),q}),B(D),z(A=>A-1);}return}if(N&&!O.ctrl&&!O.meta&&!O.escape){ke(true);let D=N.split(/\r?\n/);if(D.length===1)R(A=>{let q=[...A],ne=q[C]??"";return q[C]=ne.slice(0,P)+N+ne.slice(P),q}),B(A=>A+N.length);else {let A=C,q=P;R(ne=>{let Ie=[...ne],pe=Ie[A]??"",ae=pe.slice(0,q),Ae=pe.slice(q),Ce=D[0]??"",qn=D[D.length-1]??"",le=[ae+Ce,...D.slice(1,-1),qn+Ae];return Ie.splice(A,1,...le),Ie}),z(A+D.length-1),B((D[D.length-1]??"").length);}}return}if(w.type==="select"||w.type==="multiselect"){if(O.upArrow||N==="k"){G(D=>Math.max(0,D-1));return}if(O.downArrow||N==="j"){G(D=>Math.min(Bt.length-1,D+1));return}if(O.backspace||O.delete){cn();return}if(w.type==="select"){if(O.return||O.tab){let D=Bt[zt];if(D){if(w.validate){let A=w.validate(D.value);if(A!==null){ke(true),It(A),Qe(true),qe.current&&clearTimeout(qe.current),qe.current=setTimeout(()=>Qe(false),2e3);return}}ln(D.value);}return}if(N>="1"&&N<="9"){let D=parseInt(N,10)-1;if(D<Bt.length){let A=Bt[D];A&&ln(A.value);}return}}else {if(N===" "){let D=Bt[zt];D&&Ct(A=>{let q=new Set(A);return q.has(D.value)?q.delete(D.value):q.add(D.value),q});return}if(O.return||O.tab){let D=Array.from(ut).join(",");ln(D);return}}}}}),!w)return null;let vt=ft?Gt:null,Sn=Math.max(20,s-6),dn=`${T+1}/${U}`,kn=Math.max(2,f-4),jt=0;zt>=kn&&(jt=zt-kn+1);let Mt=Bt.slice(jt,jt+kn);return jsxs(Box,{flexDirection:"column",paddingX:2,children:[jsxs(Box,{children:[jsx(Text,{color:e.amber,bold:true,children:t}),jsxs(Text,{color:e.ghost,children:[" ",He,He," "]}),jsxs(Text,{color:e.dim,children:["step ",dn]})]}),jsxs(Box,{children:[jsx(Text,{children:" "}),W.map((N,O)=>jsxs(Text,{color:O===T?e.amber:O<T?e.green:e.ghost,children:[O===T?"\u25CF":O<T?"\u2713":"\u25CB"," "]},N.id))]}),jsxs(Box,{marginTop:0,children:[jsxs(Text,{color:e.white,bold:true,children:[" ",w.label]}),w.required&&jsx(Text,{color:e.red,children:" *"}),!w.required&&jsxs(Text,{color:e.dim,children:[" (optional, ",w.type==="textarea"?`${Gr}+Enter/Tab`:"Enter/Tab"," to skip)"]})]}),w.description&&jsx(Box,{children:jsxs(Text,{color:e.dim,children:[" ",w.description]})}),w.type==="text"&&jsxs(Box,{flexDirection:"column",paddingLeft:2,children:[jsx(qo,{cursor:v.cursor,width:Sn-4,prefix:"> ",placeholder:w.placeholder,hasError:!!vt}),vt&&jsxs(Text,{color:e.red,dimColor:true,children:[" ",vt]}),ht&&jsx(Text,{color:e.red,children:" Fix the error above"})]}),w.type==="text"&&w.suggestions&&Vt.length>0&&(()=>{let N=Math.max(2,f-6),O=0;gt&&Yt>=N&&(O=Yt-N+1);let D=Vt.slice(O,O+N);return jsxs(Box,{flexDirection:"column",children:[jsxs(Text,{color:e.ghost,children:[" ",He,He,He," or browse templates ",He.repeat(Math.max(0,Sn-28))]}),D.map((A,q)=>{let ne=q+O,Ie=gt&&ne===Yt;return jsxs(Box,{children:[jsx(Text,{color:Ie?e.amber:e.ghost,children:Ie?" \u25B8 ":" "}),jsx(Text,{color:Ie?e.white:e.silver,bold:Ie,children:A.label}),A.hint&&jsxs(Text,{color:e.dim,wrap:"truncate",children:[" ",He," ",A.hint.replace(/\n/g," ")]})]},A.value)})]})})(),w.type==="textarea"&&(()=>{let N=Math.max(3,f-6),O=0;ze>=N&&(O=ze-N+1);let D=Ge.slice(O,O+N);return jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{flexDirection:"column",borderStyle:vt?"round":void 0,borderColor:vt?e.red:void 0,children:[D.map((A,q)=>{let ne=q+O,Ie=A.isFirst?String(A.logicalRow+1).padStart(oe," "):"".padStart(oe," "),pe=ne===ze,ae=P-A.startCol;return jsxs(Box,{children:[jsxs(Text,{color:e.dim,children:[" ",Ie," "]}),jsxs(Text,{color:e.ghost,children:["\u2502"," "]}),pe?jsxs(Fragment,{children:[jsx(Text,{color:e.white,children:A.text.slice(0,ae)}),jsx(Text,{color:e.amber,children:Tc}),jsx(Text,{color:e.white,children:A.text.slice(ae)})]}):jsx(Text,{color:e.silver,children:A.text||(A.isFirst?" ":"")})]},`${A.logicalRow}-${A.startCol}`)}),M.length===1&&M[0]===""&&w.placeholder&&jsx(Box,{children:jsxs(Text,{color:e.dim,children:[" ","".padStart(oe," ")," ",w.placeholder]})})]}),vt&&jsxs(Text,{color:e.red,dimColor:true,children:[" ",vt]}),ht&&jsx(Text,{color:e.red,children:" Fix the error above"})]})})(),w.type==="select"&&jsxs(Box,{flexDirection:"column",children:[Mt.map((N,O)=>{let D=O+jt,A=D===zt,q=String(D+1).padStart(Bt.length>=10?2:1);return jsxs(Box,{children:[jsx(Text,{color:A?e.amber:e.ghost,children:A?" \u25B8 ":` ${q} `}),jsx(Text,{color:A?e.white:e.silver,bold:A,children:N.label}),N.hint&&jsxs(Text,{color:e.dim,wrap:"truncate",children:[" ",He," ",N.hint.replace(/\n/g," ")]})]},N.value)}),vt&&jsxs(Text,{color:e.red,dimColor:true,children:[" ",vt]}),ht&&jsx(Text,{color:e.red,children:" Fix the error above"})]}),w.type==="multiselect"&&jsxs(Box,{flexDirection:"column",children:[Mt.map((N,O)=>{let A=O+jt===zt,q=ut.has(N.value);return jsxs(Box,{children:[jsx(Text,{color:A?e.amber:e.ghost,children:A?" \u25B8 ":" "}),jsx(Text,{color:q?e.green:e.dim,children:q?"[\u2713]":"[ ]"}),jsxs(Text,{color:A?e.white:e.silver,bold:A,children:[" ",N.label]}),N.hint&&jsxs(Text,{color:e.dim,wrap:"truncate",children:[" ",He," ",N.hint.replace(/\n/g," ")]})]},N.value)}),ut.size>0&&jsx(Box,{children:jsxs(Text,{color:e.dim,children:[" ","\u2514"," ",ut.size," selected"]})})]}),jsxs(Box,{marginTop:0,children:[jsxs(Text,{color:e.ghost,children:[" ",w.type==="select"?"\u2191\u2193 select Enter/Tab confirm":w.type==="multiselect"?"\u2191\u2193 move Space toggle Enter/Tab confirm":w.type==="textarea"?`Enter newline ${Gr}+Enter/Tab confirm \u2190\u2191\u2192\u2193 navigate`:gt?"\u2191\u2193 browse Enter select Tab confirm \u2191 back to input":w.suggestions?"\u2190\u2192 move Enter/Tab confirm \u2193 browse templates":"\u2190\u2192 move Enter/Tab confirm",h&&(w.type==="text"||w.type==="textarea")?` ${Gr}+V paste image`:""," Esc ",T>0?"back":"cancel"]}),y&&jsxs(Text,{color:e.amber,children:[" ",y]})]})]})}var wi=mo.memo(function({agents:n,selected:o,msgCounts:r,colorMap:s,maxHeight:f,onConfirm:h,onCancel:y}){let [g,T]=useState(0),[S,I]=useState(()=>new Set(o));useMemo(()=>S.size===0||S.size===n.length,[S.size,n.length]);let v=Math.max(3,f-5),L=useMemo(()=>{if(n.length<=v)return 0;let C=Math.floor(v/2),z=n.length-v;return Math.min(z,Math.max(0,g-C))},[g,n.length,v]),M=n.slice(L,L+v);useInput((C,z)=>{if(z.upArrow){T(P=>P>0?P-1:n.length-1);return}if(z.downArrow){T(P=>P<n.length-1?P+1:0);return}if(C===" "){let P=n[g];if(!P)return;I(B=>{let H=new Set(B);return H.has(P.id)?H.delete(P.id):H.add(P.id),H});return}if(C==="a"||C==="A"){I(P=>new Set);return}if(z.return){h(new Set(S));return}if(z.escape){y();return}});let R=S.size===0?n.length:S.size;return jsxs(Box,{flexDirection:"column",borderStyle:"round",borderColor:e.amber,paddingX:1,children:[jsxs(Box,{gap:1,children:[jsx(Text,{color:e.amber,bold:true,children:" \u25C8 Agent Filter"}),jsxs(Text,{color:e.dim,children:[ge," ",R,"/",n.length," selected"]})]}),jsx(Text,{color:e.ghost,children:He.repeat(36)}),M.map((C,z)=>{let B=z+L===g,H=S.size===0||S.has(C.id),G=s.get(C.id)??e.silver,W=r.get(C.id)??0;return jsxs(Box,{gap:0,children:[jsx(Text,{color:B?e.amber:e.ghost,children:B?" \u25B8 ":" "}),jsx(Text,{color:H?e.green:e.ghost,children:H?"[\u2713]":"[ ]"}),jsxs(Text,{color:B?G:H?e.silver:e.dim,bold:B,children:[" ",C.name]}),W>0&&jsxs(Text,{color:e.dim,children:[" ",ge,W]})]},C.id)}),n.length>v&&jsxs(Text,{color:e.ghost,children:[" ",L>0?"\u2191":" "," ",L+v<n.length?"\u2193":" "," ",g+1,"/",n.length]}),jsx(Text,{color:e.ghost,children:He.repeat(36)}),jsxs(Text,{color:e.dim,children:[" Space toggle"," ",ge," ","a all"," ",ge," ","Enter confirm"," ",ge," ","Esc cancel"]})]})});var Mc={system:"\u2666",lifecycle:"\u25B6",output:"\u2502",tool:"\u2699",result:"\u2190",error:"\u2715",file:"\u270E",info:"\u2502"},_c={system:"System",lifecycle:"Lifecycle",output:"Output",tool:"Tool calls",result:"Results",error:"Errors",file:"Files",info:"Info"},Rc={system:e.purple,lifecycle:e.cyan,output:e.white,tool:e.blue,result:e.green,error:e.red,file:e.purple,info:e.silver},St=["system","lifecycle","output","tool","result","error","file","info"],Ci=[{key:"1",label:"all",types:St},{key:"2",label:"text",types:["output"]},{key:"3",label:"tools",types:["tool","result","file"]},{key:"4",label:"errors",types:["error"]},{key:"5",label:"events",types:["lifecycle","system"]}],Ii=mo.memo(function({selected:n,typeCounts:o,onConfirm:r,onCancel:s}){let[f,h]=useState(0),[y,g]=useState(()=>new Set(n)),T=useMemo(()=>y.size===St.length||St.every(I=>y.has(I)),[y]);useInput((I,_)=>{if(_.upArrow){h(v=>v>0?v-1:St.length-1);return}if(_.downArrow){h(v=>v<St.length-1?v+1:0);return}if(I===" "){let v=St[f];if(!v)return;g(L=>{let M=new Set(L);return M.has(v)?M.delete(v):M.add(v),M});return}if(I==="a"||I==="A"){g(v=>v.size===St.length?new Set:new Set(St));return}for(let v of Ci)if(I===v.key){g(new Set(v.types));return}if(_.return){let v=y.size===0?new Set(St):new Set(y);r(v);return}if(_.escape){s();return}});let S=T?St.length:y.size;return jsxs(Box,{flexDirection:"column",borderStyle:"round",borderColor:e.amber,paddingX:1,children:[jsxs(Box,{gap:1,children:[jsx(Text,{color:e.amber,bold:true,children:" \u25C8 Type Filter"}),jsxs(Text,{color:e.dim,children:[ge," ",S,"/",St.length," selected"]})]}),jsx(Text,{color:e.ghost,children:He.repeat(36)}),St.map((I,_)=>{let v=_===f,L=y.has(I),M=o[I]??0,R=Rc[I];return jsxs(Box,{gap:0,children:[jsx(Text,{color:v?e.amber:e.ghost,children:v?" \u25B8 ":" "}),jsx(Text,{color:L?e.green:e.ghost,children:L?"[\u2713]":"[ ]"}),jsxs(Text,{color:v?R:e.dim,children:[" ",Mc[I]," "]}),jsx(Text,{color:v?R:L?e.silver:e.dim,bold:v,children:_c[I]}),M>0&&jsxs(Text,{color:e.dim,children:[" ",ge,M]})]},I)}),jsx(Text,{color:e.ghost,children:He.repeat(36)}),jsxs(Box,{gap:0,children:[jsx(Text,{color:e.dim,children:" "}),Ci.map((I,_)=>jsxs(mo.Fragment,{children:[_>0&&jsxs(Text,{color:e.ghost,children:[" ",ge," "]}),jsx(Text,{color:e.amberDim,children:I.key}),jsxs(Text,{color:e.dim,children:["=",I.label]})]},I.key))]}),jsxs(Text,{color:e.dim,children:[" Space toggle"," ",ge," ","a all"," ",ge," ","Enter confirm"," ",ge," ","Esc cancel"]})]})});var Zo="\u256D",Jo="\u256E",Qo="\u2570",er="\u256F",ve="\u2502";function sn({children:t,cw:n}){return jsxs(Text,{children:[jsx(Text,{color:e.ghost,children:ve}),jsxs(Text,{children:[" ",t.padEnd(n)," "]}),jsx(Text,{color:e.ghost,children:ve})]})}function Yo({cw:t}){return jsx(sn,{cw:t,children:""})}function vi({width:t,height:n}){let o=Math.min(t-4,50),r=o-6,s=be(o-2);return jsxs(Box,{flexDirection:"column",paddingX:2,marginTop:1,children:[jsxs(Text,{color:e.ghost,children:[Zo,s,Jo]}),jsx(sn,{cw:r,children:""}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.amber,children:Ut}),jsx(Text,{color:e.white,bold:true,children:" Welcome to Orch"}),jsx(Text,{children:" ".repeat(Math.max(0,r-15-2))}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(sn,{cw:r,children:""}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.silver,children:"Press N to create your first task".padEnd(r)}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(sn,{cw:r,children:""}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.amber,children:"N"}),jsx(Text,{color:e.gray,children:" new task"}),jsx(Text,{children:" ".repeat(Math.max(0,r-1-1-8))}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(sn,{cw:r,children:""}),jsxs(Text,{color:e.ghost,children:[Qo,s,er]})]})}function Mi({step:t,width:n}){let o=Math.min(n-4,50),r=o-6,s=be(o-2),f,h=null;if(t==="task_created")f="Press R to run task",h={key:"R",label:"run task"};else if(t==="run_started")f="Agent is running your task...";else return null;return jsxs(Box,{flexDirection:"column",paddingX:2,marginTop:1,children:[jsxs(Text,{color:e.ghost,children:[Zo,s,Jo]}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.amber,children:Ut}),jsxs(Text,{color:e.silver,children:[" ",f.padEnd(h?r-2-h.key.length-1-h.label.length-2:r-2)]}),h&&jsxs(Fragment,{children:[jsxs(Text,{color:e.amber,children:[" ",h.key]}),jsxs(Text,{color:e.gray,children:[" ",h.label]})]}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsxs(Text,{color:e.ghost,children:[Qo,s,er]})]})}function _i({width:t}){let n=Math.min(t-4,50),o=n-6,r=be(n-2);return jsxs(Box,{flexDirection:"column",paddingX:2,marginTop:1,children:[jsxs(Text,{color:e.ghost,children:[Zo,r,Jo]}),jsx(sn,{cw:o,children:""}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.green,bold:true,children:"First task completed!"}),jsx(Text,{children:" ".repeat(Math.max(0,o-21))}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(sn,{cw:o,children:""}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.silver,children:"Type / to see all commands".padEnd(o)}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(sn,{cw:o,children:""}),jsxs(Text,{color:e.ghost,children:[Qo,r,er]})]})}function tr({count:t,config:n,width:o}){if(t>=3)return null;let r=Math.min((o??44)-4,50),s=r-6,f=be(r-2),h=jsxs(Text,{color:e.ghost,children:[Zo,f,Jo]}),y=jsxs(Text,{color:e.ghost,children:[Qo,f,er]});if(t>0){let T=n.hints[0],S=T?` ${T.key} ${T.label}`:"";return jsxs(Box,{flexDirection:"column",paddingX:2,marginTop:1,children:[h,jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.amber,children:Ut}),jsxs(Text,{color:e.silver,children:[" ",n.nudge.padEnd(s-2-S.length)]}),T&&jsxs(Fragment,{children:[jsxs(Text,{color:e.amber,children:[" ",T.key]}),jsxs(Text,{color:e.gray,children:[" ",T.label]})]}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),y]})}let g=n.hints.reduce((T,S,I)=>T+S.key.length+1+S.label.length+(I>0?3:0),0);return jsxs(Box,{flexDirection:"column",paddingX:2,marginTop:1,children:[h,jsx(Yo,{cw:s}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.amber,children:Ut}),jsxs(Text,{color:e.white,bold:true,children:[" ",n.title]}),jsx(Text,{children:" ".repeat(Math.max(0,s-n.title.length-2))}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(Yo,{cw:s}),n.description.map((T,S)=>jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),jsx(Text,{color:e.silver,children:T.padEnd(s)}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]},S)),jsx(Yo,{cw:s}),jsxs(Text,{children:[jsxs(Text,{color:e.ghost,children:[ve," "]}),n.hints.map((T,S)=>jsxs(mo.Fragment,{children:[S>0&&jsx(Text,{color:e.ghost,children:" "}),jsx(Text,{color:e.amber,children:T.key}),jsxs(Text,{color:e.gray,children:[" ",T.label]})]},S)),jsx(Text,{children:" ".repeat(Math.max(0,s-g))}),jsx(Text,{children:" "}),jsx(Text,{color:e.ghost,children:ve})]}),jsx(Yo,{cw:s}),y]})}var Ai={title:"Goals",description:["Define what your team should achieve.","The orchestrator breaks goals into tasks","and assigns them to agents automatically."],hints:[{key:"N",label:"new goal"},{key:"/",label:"commands"}],nudge:"Add more goals to keep your team focused."},$i={title:"Tasks",description:["Units of work dispatched to agents.","Create them manually or let goals","generate them automatically."],hints:[{key:"N",label:"new task"},{key:"W",label:"start orchestrator"}],nudge:"Add more tasks to keep agents busy."},Bi={title:"Agents",description:["AI workers that execute your tasks.","Adapters: claude, opencode, codex, cursor,","pi, grok, antigravity, shell."],hints:[{key:"N",label:"new agent"},{key:"W",label:"start orchestrator"}],nudge:"Add more agents to increase parallelism."};var $c=2,Li=360,Bc={done:4e3,failed:8e3,review:6e3},Ec={done:"\u2713",failed:"\u2715",review:Qt},Oc={done:e.green,failed:e.red,review:e.blue},Lc={done:e.successBg,failed:e.errorBg,review:e.infoBg};function Pc(t){let n=t.agentName??"Agent";switch(t.type){case "done":return `Task completed by ${n}`;case "failed":return "Task failed \u2014 press Enter for details";case "review":return "Task ready for review \u2014 press A to approve"}}var Nc=mo.memo(function({toast:n,onDismiss:o}){let[r,s]=useState(true),[f,h]=useState(false);useEffect(()=>{let v=setTimeout(()=>s(false),Li);return ()=>clearTimeout(v)},[]),useEffect(()=>{let v=Bc[n.type],L=setTimeout(()=>h(true),v),M=setTimeout(()=>o(n.id),v+Li);return ()=>{clearTimeout(L),clearTimeout(M);}},[n.id,n.type,o]);let y=r||f,g=Ec[n.type],T=Oc[n.type],S=Lc[n.type],I=Pc(n),_=n.title.length>40?n.title.slice(0,39)+"\u2026":n.title;return jsx(Box,{children:jsxs(Text,{backgroundColor:S,children:[jsxs(Text,{color:y?e.dim:T,children:[" ",g," "]}),jsx(Text,{color:y?e.dim:e.white,bold:!y,children:_}),jsxs(Text,{color:y?e.dim:e.silver,children:[" ",I," "]})]})})}),Di=mo.memo(function({toasts:n,onDismiss:o}){let r=n.slice(0,$c);return r.length===0?null:jsx(Box,{flexDirection:"column",children:r.map(s=>jsx(Nc,{toast:s,onDismiss:o},s.id))})});var Wc="\u256D",Gc="\u256E",zc="\u2570",Vc="\u256F",dt="\u2502",jr=[{key:"\u2191\u2193/j/k",label:"Navigate"},{key:"Tab/\u2190\u2192",label:"Switch tabs"},{key:"Enter",label:"Detail view"},{key:"G",label:"Goals tab"},{key:"T",label:"Tasks tab"},{key:"A",label:"Agents tab"},{key:"L",label:"Logs tab"}],Hr=[{key:"N",label:"New item"},{key:"E",label:"Edit"},{key:"D",label:"Delete"},{key:"R",label:"Run task"},{key:"S",label:"Show / Stop"},{key:"C",label:"Cancel"},{key:"A",label:"Approve"},{key:"X",label:"Reject"},{key:"U",label:"Autonomous"},{key:"Z",label:"Undo delete"}],Ur=[{key:"/",label:"Command mode"},{key:"/task add",label:"Create task"},{key:"/run",label:"Execute"},{key:"/watch",label:"Auto-dispatch"},{key:"/config",label:"Settings"},{key:"/help",label:"Help"},{key:"/quit",label:"Exit"}],Hn=10,Kt=22;function Xr(t){let n=Math.max(0,Math.floor((Kt-t.length-2)/2)),o=Math.max(0,Kt-n-t.length-2);return be(n)+" "+t+" "+be(o)}var Fi=mo.memo(function({width:n,height:o}){let r=Kt*3+3+3+2,s=r+2,f=be(s-2),h="KEYBOARD SHORTCUTS",y=Math.max(0,Math.floor((r-h.length)/2)),g=Math.max(0,r-y-h.length),T="Press any key to dismiss",S=Math.max(0,Math.floor((r-T.length)/2)),I=Math.max(0,r-S-T.length),_=Math.max(jr.length,Hr.length,Ur.length),v=_+10,L=Math.max(0,Math.floor((o-v)/2)),M=[];for(let B=0;B<_;B++){let H=B<jr.length?jr[B]:null,G=B<Hr.length?Hr[B]:null,W=B<Ur.length?Ur[B]:null;M.push(jsxs(Text,{children:[jsx(Text,{color:e.amber,children:dt}),jsx(Text,{children:" "}),H?jsxs(Fragment,{children:[jsx(Text,{color:e.amber,bold:true,children:H.key.padEnd(Hn)}),jsx(Text,{color:e.silver,children:H.label.padEnd(Kt-Hn)})]}):jsx(Text,{children:" ".repeat(Kt)}),jsxs(Text,{color:e.dim,children:[" ",dt," "]}),G?jsxs(Fragment,{children:[jsx(Text,{color:e.amber,bold:true,children:G.key.padEnd(Hn)}),jsx(Text,{color:e.silver,children:G.label.padEnd(Kt-Hn)})]}):jsx(Text,{children:" ".repeat(Kt)}),jsxs(Text,{color:e.dim,children:[" ",dt," "]}),W?jsxs(Fragment,{children:[jsx(Text,{color:e.amber,bold:true,children:W.key.padEnd(Hn)}),jsx(Text,{color:e.silver,children:W.label.padEnd(Kt-Hn)})]}):jsx(Text,{children:" ".repeat(Kt)}),jsx(Text,{children:" "}),jsx(Text,{color:e.amber,children:dt})]},`r${B}`));}let R=B=>jsxs(Text,{children:[jsx(Text,{color:e.amber,children:dt}),jsx(Text,{children:" ".repeat(r)}),jsx(Text,{color:e.amber,children:dt})]},B),C=Xr("NAVIGATION"),z=Xr("ACTIONS"),P=Xr("COMMANDS");return jsxs(Box,{flexDirection:"column",paddingX:Math.max(0,Math.floor((n-s)/2)),marginTop:L,children:[jsxs(Text,{color:e.amber,children:[Wc,f,Gc]}),R("e1"),jsxs(Text,{children:[jsx(Text,{color:e.amber,children:dt}),jsx(Text,{children:" ".repeat(y)}),jsx(Text,{color:e.amber,bold:true,children:h}),jsx(Text,{children:" ".repeat(g)}),jsx(Text,{color:e.amber,children:dt})]}),R("e2"),jsxs(Text,{children:[jsx(Text,{color:e.amber,children:dt}),jsx(Text,{children:" "}),jsx(Text,{color:e.dim,children:C}),jsxs(Text,{color:e.dim,children:[" ",dt," "]}),jsx(Text,{color:e.dim,children:z}),jsxs(Text,{color:e.dim,children:[" ",dt," "]}),jsx(Text,{color:e.dim,children:P}),jsx(Text,{children:" "}),jsx(Text,{color:e.amber,children:dt})]}),R("e3"),M,R("e4"),jsxs(Text,{children:[jsx(Text,{color:e.amber,children:dt}),jsx(Text,{children:" ".repeat(S)}),jsx(Text,{color:e.dim,children:T}),jsx(Text,{children:" ".repeat(I)}),jsx(Text,{color:e.amber,children:dt})]}),R("e5"),jsxs(Text,{color:e.amber,children:[zc,f,Vc]})]})});function zi(t,n){if(!t){let r=n?.claude;return r?.length?r:a$5("claude")}if(!b$1(t))return a$5(t);let o=n?.[t];return o?.length?o:a$5(t)}var Vi=[{value:"",label:"Default",hint:"no override \u2014 use model default"},{value:"high",label:"High",hint:"deepest reasoning, best quality, slowest"},{value:"medium",label:"Medium",hint:"balanced speed and quality"},{value:"low",label:"Low",hint:"fastest responses, minimal reasoning"}],ji=new Set(["claude","pi","grok"]),Hi=[{value:"claude",label:"Claude",hint:"Claude Code CLI"},{value:"opencode",label:"OpenCode",hint:"OpenCode \u2014 multi-provider"},{value:"codex",label:"Codex",hint:"OpenAI Codex CLI"},{value:"cursor",label:"Cursor",hint:"Cursor Agent CLI"},{value:"pi",label:"Pi",hint:"Pi coding agent RPC"},{value:"grok",label:"Grok",hint:"Grok CLI"},{value:"antigravity",label:"Antigravity",hint:"Google Antigravity CLI (agy)"},{value:"shell",label:"Shell",hint:"custom shell command"}],Ui=[{value:"1",label:"P1 Critical",hint:"urgent, do first"},{value:"2",label:"P2 High",hint:"important"},{value:"3",label:"P3 Medium",hint:"default priority"},{value:"4",label:"P4 Low",hint:"nice to have"}],Wi=60;function Xi(t){return t.filter(n=>n.status!=="disabled").map(n=>{let o=(n.role??"").split(`
11
+ `)[0].trim(),r=o.length>Wi?o.slice(0,Wi-1)+"\u2026":o,s=r?`[${n.adapter}] ${r}`:n.adapter;return {value:n.id,label:n.name,hint:s}})}function rr(t,n="Auto-assign",o="orchestrator picks the best agent"){return [{value:"",label:n,hint:o},...Xi(t)]}var Kr=[{value:"",label:"Skip",hint:"no role description"},{value:"Full-stack developer",label:"Full-stack developer",hint:"general purpose"},{value:"Frontend developer",label:"Frontend developer",hint:"React, CSS, UI"},{value:"Backend developer",label:"Backend developer",hint:"APIs, databases, services"},{value:"DevOps engineer",label:"DevOps engineer",hint:"CI/CD, infra, deploys"},{value:"QA / Test engineer",label:"QA / Test engineer",hint:"testing, quality"},{value:"Code reviewer",label:"Code reviewer",hint:"review PRs, find bugs"},{value:"Technical writer",label:"Technical writer",hint:"docs, READMEs"},{value:"__custom__",label:"Custom...",hint:"type your own"}];function qi(t){return [{value:"",label:"None",hint:"no team"},...(t??[]).filter(n=>n.status==="active").map(n=>({value:n.id,label:n.name,hint:`${n.members.length} members`}))]}function Ki(){return [{id:"shop_template",label:"Agent Shop \u2014 choose a template",type:"select",options:a$2.map(t=>({value:t.key,label:t.name,hint:t.description}))}]}function Yr(t,n,o){let r=a$3(o,n.tier);return t.map(s=>{switch(s.id){case "name":return {...s,defaultValue:n.name};case "adapter":return {...s,defaultValue:o};case "model":return {...s,defaultValue:r};case "role":return {...s,defaultValue:"__custom__"};case "role_custom":return {...s,defaultValue:n.role,skip:void 0};case "skills":{let f=o==="claude"?n.skills:n.skills.filter(h=>!a$4(h));return {...s,defaultValue:f.join(", ")}}case "approval_policy":return {...s,defaultValue:n.approval_policy};default:return s}})}function sr(t,n,o){let r=qi(n);return [{id:"name",label:"Agent name",type:"text",placeholder:"e.g. alpha, frontend-bot, reviewer",required:true,validate:s=>s.trim()?t?.some(f=>f.name===s.trim())?"Agent with this name already exists":null:"Name is required",suggestions:a$2.map(s=>({value:s.key,label:s.name,hint:s.description}))},{id:"adapter",label:"Provider",type:"select",options:Hi},{id:"model",label:"Model",type:"select",getOptions:s=>zi(s.adapter,o)},{id:"effort",label:"Reasoning effort",type:"select",options:Vi,skip:s=>!ji.has(s.adapter??"")},{id:"role",label:"Role / specialization",type:"select",options:Kr},{id:"role_custom",label:"Describe the role",type:"textarea",placeholder:"e.g. Specialist in React and TypeScript",skip:s=>s.role!=="__custom__"},{id:"skills",label:"Skills (comma-separated)",type:"text",placeholder:"e.g. feature-dev:feature-dev, testing-suite:generate-tests"},{id:"approval_policy",label:"Approval policy",type:"text",skip:()=>true},{id:"team",label:"Join team",type:"select",options:r,skip:()=>r.length<=1}]}function Yi(t,n="claude"){let o=t.role==="__custom__"?t.role_custom||void 0:t.role||void 0,r=t.skills?t.skills.split(",").map(h=>h.trim()).filter(Boolean):void 0,s=t.approval_policy||"auto",f=t.effort||void 0;return {name:t.name,adapter:t.adapter||n,role:o,model:t.model||void 0,effort:f,approval_policy:s,skills:r,team_id:t.team||void 0}}function Zi(t,n){let o=Xi(t);return [{id:"name",label:"Team name",type:"text",placeholder:"e.g. frontend, backend, qa",required:true,validate:r=>r.trim()?n?.some(s=>s.name===r.trim())?"Team with this name already exists":null:"Name is required"},{id:"lead",label:"Team lead",type:"select",options:o},{id:"members",label:"Team members",type:"multiselect",getOptions:r=>o.filter(s=>s.value!==r.lead),skip:r=>!o.some(s=>s.value!==r.lead)},{id:"description",label:"Description",type:"textarea",placeholder:"Optional team purpose..."}]}function Ji(t){let n=t.members?t.members.split(",").filter(Boolean):[];return {name:t.name,lead_agent_id:t.lead,member_agent_ids:n.length>0?n:void 0,description:t.description||void 0}}function Qi(t){let n=rr(t);return [{id:"title",label:"Task title",type:"text",placeholder:"What needs to be done?",required:true,validate:o=>o.trim()?null:"Title is required"},{id:"priority",label:"Priority",type:"select",options:Ui,defaultValue:"3",validate:o=>{let r=Number(o);return !Number.isInteger(r)||r<1||r>4?"Priority must be 1-4":null}},{id:"assignee",label:"Assignee",type:"select",options:n,skip:()=>n.length<=1},{id:"description",label:"Description",type:"textarea",placeholder:"Optional details, context, acceptance criteria..."}]}function ea(t){return {title:t.title,priority:t.priority?parseInt(t.priority,10):void 0,assignee:t.assignee||void 0,description:t.description||void 0}}function ta(t,n){let o=rr(n,"None / Auto","remove assignee");return [{id:"title",label:"Task title",type:"text",defaultValue:t.title,required:true,validate:r=>r.trim()?null:"Title is required"},{id:"priority",label:"Priority",type:"select",options:Ui,defaultValue:String(t.priority),validate:r=>{let s=Number(r);return !Number.isInteger(s)||s<1||s>4?"Priority must be 1-4":null}},{id:"assignee",label:"Assignee",type:"select",options:o,defaultValue:t.assignee??"",skip:()=>o.length<=1},{id:"description",label:"Description",type:"textarea",defaultValue:t.description||"",placeholder:"Optional details..."}]}function na(t){return {title:t.title,priority:t.priority?parseInt(t.priority,10):void 0,assignee:t.assignee||void 0,description:t.description??""}}function oa(t,n,o,r){let s=Kr.find(g=>g.value===t.role),f=s?t.role:t.role?"__custom__":"",h=qi(o),y=o?.find(g=>g.members.some(T=>T.agent_id===t.id))?.id;return [{id:"name",label:"Agent name",type:"text",defaultValue:t.name,required:true,validate:g=>g.trim()?n?.some(T=>T.id!==t.id&&T.name===g.trim())?"Agent with this name already exists":null:"Name is required"},{id:"adapter",label:"Provider",type:"select",options:Hi,defaultValue:t.adapter},{id:"model",label:"Model",type:"select",getOptions:g=>zi(g.adapter||t.adapter,r),defaultValue:t.config.model??""},{id:"effort",label:"Reasoning effort",type:"select",options:Vi,defaultValue:t.config.effort??"",skip:g=>!ji.has(g.adapter||t.adapter)},{id:"role",label:"Role / specialization",type:"select",options:Kr,defaultValue:f},{id:"role_custom",label:"Describe the role",type:"textarea",defaultValue:t.role&&!s?t.role:"",placeholder:"e.g. Specialist in React and TypeScript",skip:g=>g.role!=="__custom__"},{id:"team",label:"Team",type:"select",options:h,defaultValue:y??"",skip:()=>h.length<=1}]}var jc=[{value:"1",label:"1 agent",hint:"~0.5 GB RAM, 1 subprocess"},{value:"2",label:"2 agents",hint:"~1 GB RAM, 2 subprocesses"},{value:"3",label:"3 agents",hint:"~1.5 GB RAM, 3 subprocesses"},{value:"4",label:"4 agents",hint:"~2 GB RAM, 4 subprocesses"},{value:"6",label:"6 agents",hint:"~3 GB RAM, 6 subprocesses"},{value:"8",label:"8 agents",hint:"~4 GB RAM, 8 subprocesses"},{value:"10",label:"10 agents",hint:"~5 GB RAM, 10 subprocesses"}],Hc=[{value:"all",label:"All",hint:"show everything"},{value:"text",label:"Text",hint:"agent output only"},{value:"tools",label:"Tools",hint:"tool calls, results, files"},{value:"errors",label:"Errors",hint:"errors only"},{value:"events",label:"Events",hint:"lifecycle, system events"}],Gi=[{value:"true",label:"On"},{value:"false",label:"Off"}];function ra(t,n,o){let r=o??{toast:true,bell:false};return [{id:"activity_filter",label:"Activity filter preset",type:"select",options:Hc,defaultValue:t},{id:"max_concurrent",label:"Max concurrent agents",type:"select",options:jc,defaultValue:String(n)},{id:"notifications_toast",label:"Toast notifications",type:"select",options:Gi,defaultValue:String(r.toast)},{id:"notifications_bell",label:"Bell on completion",type:"select",options:Gi,defaultValue:String(r.bell)}]}function sa(t){let n=t.role==="__custom__"?t.role_custom||void 0:t.role||void 0,o=t.effort!==void 0?t.effort:void 0;return {name:t.name,adapter:t.adapter,role:n,model:t.model,effort:o,team_id:t.team||void 0}}function ir(t){let n=rr(t,"Any agent","auto-assign to autonomous agents");return [{id:"title",label:"Goal title",type:"text",placeholder:'e.g. "Implement OAuth2 login with Google and GitHub"',description:"Be specific \u2014 agents work better with clear, measurable objectives",required:true,validate:o=>o.trim()?null:"Title is required"},{id:"assignee",label:"Assignee",type:"select",description:"Assigned agent gets autonomous mode \u2014 it will plan and execute without prompts",options:n,skip:()=>n.length<=1},{id:"description",label:"Description",type:"textarea",placeholder:"Success criteria, constraints, technical context...",description:'Context matters \u2014 include tech stack, constraints, and what "done" looks like'}]}function ia(t){return {title:t.title,assignee:t.assignee||void 0,description:t.description||void 0}}function aa(t,n){let o=rr(n,"Any agent","auto-assign");return [{id:"title",label:"Goal title",type:"text",defaultValue:t.title,description:"Be specific \u2014 agents work better with clear, measurable objectives",required:true,validate:r=>r.trim()?null:"Title is required"},{id:"assignee",label:"Assignee",type:"select",description:"Assigned agent gets autonomous mode \u2014 it will plan and execute without prompts",options:o,defaultValue:t.assignee??"",skip:()=>o.length<=1},{id:"description",label:"Description",type:"textarea",defaultValue:t.description||"",placeholder:"Success criteria, constraints, technical context...",description:'Context matters \u2014 include tech stack, constraints, and what "done" looks like'}]}function la(t){return {title:t.title,assignee:t.assignee||void 0,description:t.description??""}}var ca=10,da=500,gr=2048,wn=500,ua=5,Zr=new Set(["todo","failed","cancelled"]),ga=5e3,fa=0;function Hg(){fa=0;}var pa=/^\[[\w_]+\]$/;function ha(t){return pa.test(t)?{msgType:"lifecycle",color:e.dim}:t.startsWith("\u2699")?{msgType:"tool",color:e.dim}:t.startsWith("\u2190")?{msgType:"result",color:e.dim}:t.startsWith("\u2713")?{msgType:"lifecycle",color:e.dim}:t.startsWith("\u23F3")?{msgType:"info",color:e.silver}:{msgType:"output",color:e.silver}}var es=["#5faf87","#5fafd7","#af87ff","#d7af00","#5fd7d7","#d787af","#afaf5f","#d7875f"],Kc=" ".repeat(9),Xn={system:"\u2666",lifecycle:"\u25B6",output:"\u2502",tool:"\u2699",result:"\u2190",error:"\u2715",file:"\u270E",info:"\u2502"},dr=["system","lifecycle","output","tool","result","error","file","info"],Un=[{label:"all",types:dr},{label:"text",types:["output"]},{label:"tools",types:["tool","result","file"]},{label:"errors",types:["error"]},{label:"events",types:["lifecycle","system"]}];function Jr(t){let o=(Un.findIndex(r=>r.types.length===t.size&&r.types.every(s=>t.has(s)))+1)%Un.length;return Un[o]}function Qr(t,n){if(t.length!==n.length)return true;for(let o=0;o<t.length;o++)if(t[o].id!==n[o].id||t[o].updated_at!==n[o].updated_at)return true;return false}function Ug({projectName:t,tasks:n,agents:o=[],state:r,onRunTask:s,onCreateTask:f,onCancelTask:h,onRetryTask:y,onAssignTask:g$1,onRunAll:T,onDisableAgent:S,onEnableAgent:I,onSubscribeEvents:_,onRefreshTasks:v,onRefreshAgents:L,onRefreshState:M,onLoadHistory:R,onAddAgent:C,onDeleteAgent:z,onApproveTask:P,onRejectTask:B,onDeleteTask:H,onUpdateTask:G,onUpdateAgent:W,onForceStopAgent:w,onCreateTeam:U,onListTeams:ie,onJoinTeam:oe,onLeaveTeam:ye,onDisbandTeam:Ge,onSetTeamLead:ze,onStartWatch:ut,onStopWatch:Ct,onToggleAutonomous:gt,onRefreshGoals:mt,onCreateGoal:Ze,onUpdateGoal:Je,onUpdateGoalStatus:ft,onDeleteGoal:ke,onGetGoalProgress:Gt,onCompleteOnboarding:It,initialWatchActive:ht,observerMode:Qe,watchError:rt,messageBatchMs:qe=process.env.VITEST?0:80,initialActivityFilter:xo="all",onSaveActivityFilter:an,initialMaxConcurrent:Bt=a.scheduling.max_concurrent_agents,onSaveMaxConcurrent:zt,initialNotifications:Vt,onSaveNotifications:Yt,version:ln,latestVersion:cn,onCheckUpdate:vt,onBackgroundInstall:Sn,defaultAdapter:dn="claude",onLoadModelCatalog:kn}){let{exit:jt}=useApp(),{stdout:Mt}=useStdout(),[N,O]=useState(cn),D=useRef(vt);useEffect(()=>{if(cn||!D.current)return;let i=setTimeout(()=>{D.current?.().then(x=>{x&&O(x);}).catch(()=>{});},5e3);return ()=>clearTimeout(i)},[cn]);let[A,q]=useState(false),ne=useRef(false);useEffect(()=>{!N||!Sn||ne.current||A||(ne.current=true,Sn(N).then(i=>{i&&q(true);}).catch(()=>{}));},[N,Sn,A]);let[Ie,pe]=useState({w:Mt?.columns??80,h:Mt?.rows??24});useEffect(()=>{if(!Mt)return;let i=()=>pe({w:Mt.columns,h:Mt.rows});return Mt.on("resize",i),()=>{Mt.off("resize",i);}},[Mt]);let ae=Ie.w,Ae=Ie.h,[Ce,qn]=useState(n),[le,Sa]=useState(o),[Ve,ka]=useState(r),[bo,mr]=useState(ht??!!r.pid),[Zt,Ca]=useState({}),[Kn,ts]=useState([]),[Ia,ns]=useState(void 0),[Jt,To]=useState(()=>r.onboardingCompleted||(r.stats?.total_tasks_completed??0)>0?"dismissed":Object.keys(r.running??{}).length>0?"run_started":n.length>0?"task_created":"welcome");useEffect(()=>{if(Jt!=="completed")return;let i=setTimeout(()=>{To("dismissed"),It?.().catch(()=>{});},5e3);return ()=>clearTimeout(i)},[Jt,It]);let[E,Cn]=useState("tasks"),[yo,Yn]=useState(0),[fr,os]=useState(0),[pr,rs]=useState(0),[$e,Zn]=useState(false),[je,ss]=useState([]),[Ne,Le]=useState("none"),xt=Xo(),un=xt.value,[bt,et]=useState(null),[gn,Jn]=useState([]),[Et,hr]=useState(false),[is,va]=useState(()=>new Set),[In,xr]=useState(false),[Qn,br]=useState(false),[as,ls]=useState(()=>new Set(dr)),[eo,Tr]=useState(-1),[Ma,to]=useState(0),[vn,yr]=useState(()=>{let i=Un.find(x=>x.label===xo);return new Set(i?.types??dr)}),wo=useMemo(()=>Un.find(x=>x.types.length===vn.size&&x.types.every(l=>vn.has(l)))?.label??"all",[vn]),wr=useMemo(()=>vn.size>=dr.length?je:je.filter(i=>vn.has(i.msgType??"info")),[je,vn]),[cs,_a]=useState(Bt),[So,Ra]=useState(Vt??{toast:true,bell:false}),[Aa,ds]=useState([]),$a=useRef(0),[Sr,us]=useState(),gs=useRef(E);gs.current=E;let ms=useRef(Ce);ms.current=Ce;let fs=useRef(le);fs.current=le;let ko=useRef(So);ko.current=So;let Co=useCallback((i,x)=>{if(!ko.current.toast)return;let l=ms.current.find(b=>b.id===x),c=l?.title??x,u=l?.assignee?fs.current.find(b=>b.id===l.assignee):void 0;ds(b=>{let m=[...b,{id:`toast_${$a.current++}`,type:i,title:c,agentName:u?.name,ts:Date.now()}];return m.length>ua?m.slice(m.length-ua):m}),ko.current.bell&&(i==="failed"||i==="review")&&process.stdout.write("\x07");},[]),Ba=useCallback(i=>{ds(x=>x.filter(l=>l.id!==i));},[]),Io=mo.useRef(new jo).current,[Ea,Mn]=useState(0),[ps,hs]=useState(false),[no,Oa]=useState(false),[La,kr]=useState(0),[Pa,Cr]=useState(0),[Ir,_n]=useState(0),[vo,vr]=useState(false),[Na,oo]=useState(0),[Mo,mn]=useState(0),[Ht,xs]=useState([]),[Rn,Mr]=useState([]),An=useRef(Ht);An.current=Ht;let bs=useRef(0),K=useCallback(async i=>{bs.current=Date.now();let[x,l,c,u,b]=await Promise.all([v?.()??Promise.resolve(Ce),L?.()??Promise.resolve(le),M?.()??Promise.resolve(Ve),i?.includeTeams?ie?.()??Promise.resolve(An.current):Promise.resolve(null),mt?.()??Promise.resolve(Kn)]);qn(m=>Qr(m,x)?x:m),Sa(m=>Qr(m,l)?l:m),ka(c),u!==null&&xs(u),ts(m=>Qr(m,b)?b:m),ht&&mr(!!c.pid);},[v,L,M,ie,mt,ht]),$n=useMemo(()=>{let i=new Map;for(let x of Kn)i.set(x.id,x);return i},[Kn]),Pe=useMemo(()=>{let i=[...Ce].sort((b,m)=>(co[b.status]??9)-(co[m.status]??9));if(!no)return i;let x=[],l=[],c=[],u=new Map;for(let b of i)b.goalId&&$n.has(b.goalId)?(u.has(b.goalId)||(c.push(b.goalId),u.set(b.goalId,[])),u.get(b.goalId).push(b)):l.push(b);for(let b of c)x.push(...u.get(b));return [...x,...l]},[Ce,no,$n]),Ot=ps?Pe:Pe.slice(0,ca),Bn=Pe.length-Ot.length,j=Pe[yo],ro=useMemo(()=>{let i=new Map;for(let x of Ce)i.set(x.id,x.title);return i},[Ce]),fn=useMemo(()=>{let i=new Map;for(let x of le)i.set(x.id,x.name);return i},[le]),Da=useMemo(()=>{let i=new Map;for(let x of Ce)if(x.goalId){let l=i.get(x.goalId);l||(l=[],i.set(x.goalId,l)),l.push(x);}return i},[Ce]),_o=useMemo(()=>{let i=new Map;for(let x=0;x<le.length;x++)i.set(le[x].id,es[x%es.length]);return i},[le]),Ts=useMemo(()=>{let i=new Map;for(let x of je)x.agentId&&i.set(x.agentId,(i.get(x.agentId)??0)+1);return i},[je]),Fa=useMemo(()=>{let i={};for(let x of je){let l=x.msgType??"info";i[l]=(i[l]??0)+1;}return i},[je]),{agentTeamMap:En,activeTeamCount:so,teamLeadSet:Wa}=useMemo(()=>{let i=new Map,x=new Set,l=0;for(let c of Ht)if(c.status==="active"){l++,x.add(c.lead_agent_id);for(let u of c.members)i.set(u.agent_id,c.name);}return {agentTeamMap:i,activeTeamCount:l,teamLeadSet:x}},[Ht]),De=useMemo(()=>{let i=[...le];return i.sort((x,l)=>{let c=En.get(x.id),u=En.get(l.id);return c&&!u?-1:!c&&u?1:c&&u&&c!==u?c.localeCompare(u):(Nr[x.status]??9)-(Nr[l.status]??9)}),i},[le,En]),Z=De[fr],pt=useMemo(()=>[...Kn].sort((i,x)=>(c[i.status]??9)-(c[x.status]??9)),[Kn]),ee=pt[pr],Ga=useMemo(()=>ee?Ce.filter(i=>i.goalId===ee.id):[],[ee,Ce]),_r=useRef(Gt);_r.current=Gt,useEffect(()=>{if(!ee||!_r.current){ns(void 0);return}let i=false;return _r.current(ee.id).then(x=>{i||ns(x);}).catch(()=>{}),()=>{i=true;}},[ee?.id]);let pn=useRef(new Map),Ro=useRef(new Map);useEffect(()=>{for(let[i,x]of Object.entries(Ve.running))pn.current.set(x.run_id,x.agent_id),Ro.current.set(x.run_id,i);if(pn.current.size>da){let i=pn.current.size-da,x=0;for(let l of pn.current.keys()){if(x++>=i)break;pn.current.delete(l),Ro.current.delete(l);}}},[Ve.running]);let hn=useRef([]),io=useRef(null),Rr=useCallback(()=>{if(io.current=null,hn.current.length===0)return;let i=hn.current;hn.current=[],ss(x=>{if(i.length>=wn)return i.slice(-wn);let l=wn-i.length;return (x.length>l?x.slice(-l):x).concat(i)});},[]);useEffect(()=>()=>{io.current&&clearTimeout(io.current);},[]);let a=useCallback((i,x,l)=>{let c=new Date,u=c.toLocaleTimeString("en-US",{hour12:false,hour:"2-digit",minute:"2-digit",second:"2-digit"}),b=l?.detail&&l.detail.length>gr?l.detail.slice(0,gr)+"\u2026[truncated]":l?.detail;hn.current.push({text:i,color:x,time:u,ts:c.getTime(),...l,detail:b}),hn.current.length>wn&&(hn.current=hn.current.slice(-wn)),qe===0?Rr():io.current||(io.current=setTimeout(Rr,qe));},[Rr]);useEffect(()=>{Qe?a("Observer mode: watching external orchestrator via disk polling.",e.amber):rt&&a(`Watch mode failed: ${rt}. Tasks will not auto-dispatch.`,e.red);},[]),useEffect(()=>{let i=Qe?3e3:5e3,x=setInterval(()=>{Date.now()-bs.current>=i&&K().catch(()=>{});},i);return ()=>clearInterval(x)},[Qe,K]);let On=useCallback((i,x,l,c)=>{let u={key:++fa,entityType:i,entityId:x,entityName:l,expiresAt:Date.now()+ga,needsForceStop:c?.needsForceStop};Mr(b=>[...b,u]),a(`\u2717 "${l}" will be deleted in ${Math.round(ga/1e3)}s \u2014 press Z to undo`,e.yellow);},[a]),za=useCallback(()=>{Mr(i=>{if(i.length===0)return i;let x=i[i.length-1];return a(`\u21B6 Undo: "${x.entityName}" restored`,e.green),i.slice(0,-1)});},[a]),ys=useCallback(async i=>{try{i.entityType==="task"&&H?await H(i.entityId):i.entityType==="agent"?(i.needsForceStop&&w&&await w(i.entityId),z&&await z(i.entityId)):i.entityType==="goal"&&ke&&await ke(i.entityId),a(`\u2713 Deleted "${i.entityName}"`,e.green),K();}catch(x){a(`Failed to delete "${i.entityName}": ${x instanceof Error?x.message:String(x)}`,e.red);}},[H,z,ke,w,a,K]),ws=useRef(ys);ws.current=ys,useEffect(()=>{if(Rn.length===0)return;let i=setInterval(()=>{let x=Date.now(),l=[];Mr(c=>{let u=c.filter(b=>b.expiresAt<=x?(l.push(b),false):true);return l.length>0?u:c});for(let c of l)ws.current(c);},1e3);return ()=>clearInterval(i)},[Rn.length>0]),useEffect(()=>{if(!R)return;let i=x=>{let l=new Date(x.timestamp).toLocaleTimeString("en-US",{hour12:false,hour:"2-digit",minute:"2-digit",second:"2-digit"}),c=typeof x.data=="string"?x.data:JSON.stringify(x.data),u,b=e.silver,m="output";if(x.type==="error")u=typeof x.data=="string"?x.data:JSON.stringify(x.data),u=u.slice(0,200),b=e.red,m="error";else if(x.type==="file_changed")u=String(x.data),b=e.purple,m="file";else if(x.type==="done")u="Completed",b=e.green,m="lifecycle";else if(x.type==="tool_call")u=`\u2699 ${x.data?.name??"tool"}()`,b=e.cyan,m="tool";else {let{summary:k}=wa(c);if(!k)return null;u=k;let Y=ha(u);m=Y.msgType,b=Y.color;}return {text:u,color:b,time:l,ts:new Date(x.timestamp).getTime(),agentId:x.agentId,taskId:x.taskId,msgType:m}};R(x=>{if(x.length===0)return;let l=x.map(i).filter(c=>c!==null);ss(c=>{let u=[...l,...c];return u.length>wn?u.slice(-wn):u});}).catch(x=>{process.stderr.write(`[TUI] onLoadHistory error: ${x instanceof Error?x.stack??x.message:String(x)}
12
+ `);});},[]),useEffect(()=>{ie?.().then(xs).catch(()=>{}),mt?.().then(ts).catch(()=>{});},[]),useEffect(()=>{let i=false;return kn?.().then(x=>{i||Ca(x);}).catch(()=>{}),()=>{i=true;}},[kn]);let Ao=useCallback(()=>{et({title:"NEW AGENT",steps:sr(le,An.current,Zt),kind:"agent"}),Le("wizard");},[le,Zt]),Ss=useCallback(()=>{et({title:"AGENT SHOP",steps:Ki(),kind:"agent_shop"}),Le("wizard");},[]),$o=useCallback(()=>{Jn([]),et({title:"NEW TASK",steps:Qi(le),kind:"task"}),Le("wizard");},[le]),Va=useCallback(async()=>{try{let{detectClipboardType:i,getClipboardImage:x}=await import('./clipboard-service-AJTJG2DJ.js'),l=await i();if(l!=="image")return a(l==="text"?"Clipboard has text, not image":"Clipboard is empty",e.dim),l;let c=await x();if(!c)return a("Failed to read clipboard image",e.red),"empty";let{mkdtemp:u,writeFile:b}=await import('fs/promises'),{tmpdir:m}=await import('os'),{join:k}=await import('path'),Y=await u(k(m(),"orch-paste-")),Pt=k(Y,`clipboard-${Date.now()}.${c.ext}`);return await b(Pt,c.data),Jn(xn=>[...xn,Pt]),a(`\u{1F4CE} Image attached (${Math.round(c.data.length/1024)}KB)`,e.green),"image"}catch{return a("Clipboard paste failed",e.red),"empty"}},[a]),ja=useCallback(i=>{et({title:"EDIT TASK",steps:ta(i,le),kind:"edit_task",targetId:i.id}),Le("wizard");},[le]),ks=useCallback(()=>{et({title:"NEW TEAM",steps:Zi(le,Ht),kind:"team"}),Le("wizard");},[le]),Ha=useCallback(i=>{et({title:"EDIT AGENT",steps:oa(i,le,Ht,Zt),kind:"edit_agent",targetId:i.id}),Le("wizard");},[le,Ht,Zt]),Cs=useCallback(()=>{et({title:"SETTINGS",steps:ra(wo,cs,So),kind:"config"}),Le("wizard");},[wo,cs]),Ua=useCallback(i=>{Le("none");let x=bt?.kind,l=bt?.targetId;if(et(null),x==="agent_shop"){let c=i.shop_template,u=c?b(c):void 0;if(u){let b=sr(le,An.current,Zt),m=Yr(b,u,dn);et({title:`NEW AGENT \u2014 ${u.name}`,steps:m,kind:"agent_from_shop"}),Le("wizard");}else a("No template selected",e.yellow);return}if((x==="agent"||x==="agent_from_shop")&&C){let c=Yi(i,dn);a(`Creating agent "${c.name}"...`,e.amber),C(c.name,c.adapter,{model:c.model,effort:c.effort,role:c.role,approval_policy:c.approval_policy,skills:c.skills}).then(u=>{a(`\u2713 Created agent "${u.name}" (${u.id}, ${u.adapter})`,e.green),c.team_id&&oe?oe(c.team_id,u.id).then(b=>{a(`\u2713 Joined team "${b.name}"`,e.green),K({includeTeams:true});},b=>a(`Failed to join team: ${b instanceof Error?b.message:String(b)}`,e.red)):K();},u=>a(`Failed: ${u instanceof Error?u.message:String(u)}`,e.red));}else if(x==="team"&&U){let c=Ji(i);a(`Creating team "${c.name}"...`,e.amber),U(c).then(u=>{a(`\u2713 Created team "${u.name}" (${u.id}, ${u.members.length} members)`,e.green),K({includeTeams:true});},u=>a(`Failed: ${u instanceof Error?u.message:String(u)}`,e.red));}else if(x==="task"&&f){let c=ea(i),u=gn.length>0?[...gn]:void 0;Jn([]),a(`Creating "${c.title}"...`,e.amber),f(c.title,{priority:c.priority,description:c.description,attachments:u}).then(b=>{a(`\u2713 Created "${b.title}" (${b.id})${u?` \u{1F4CE}${u.length}`:""}`,e.green),c.assignee&&g$1&&g$1(b.id,c.assignee).catch(()=>{}),K();},b=>a(`Failed: ${b instanceof Error?b.message:String(b)}`,e.red));}else if(x==="edit_task"&&l&&G){let c=na(i),u=gn.length>0?[...gn]:void 0;Jn([]),a("Updating task...",e.amber),G(l,{...c,attachments:u}).then(b=>{a(`\u2713 Updated "${b.title}"${u?` \u{1F4CE}${u.length}`:""}`,e.green),c.assignee&&g$1&&g$1(l,c.assignee).catch(()=>{}),K();},b=>a(`Failed: ${b instanceof Error?b.message:String(b)}`,e.red));}else if(x==="edit_agent"&&l&&W){let c=sa(i),u=c.team_id??"",b=Ht.find(m=>m.members.some(k=>k.agent_id===l))?.id??"";a("Updating agent...",e.amber),W(l,{name:c.name,adapter:c.adapter,role:c.role,model:c.model,effort:c.effort}).then(m=>{a(`\u2713 Updated agent "${m.name}"`,e.green);let k=[];b&&b!==u&&ye&&k.push(ye(b,l).then(Y=>a(`\u2713 Left team "${Y.name}"`,e.green),Y=>a(`Failed to leave team: ${Y instanceof Error?Y.message:String(Y)}`,e.red))),u&&u!==b&&oe&&k.push(oe(u,l).then(Y=>a(`\u2713 Joined team "${Y.name}"`,e.green),Y=>a(`Failed to join team: ${Y instanceof Error?Y.message:String(Y)}`,e.red))),Promise.all(k).then(()=>K({includeTeams:k.length>0}));},m=>a(`Failed: ${m instanceof Error?m.message:String(m)}`,e.red));}else if(x==="config"){if(i.activity_filter){let m=Un.find(k=>k.label===i.activity_filter);m&&(yr(new Set(m.types)),an?.(m.label));}if(i.max_concurrent){let m=parseInt(i.max_concurrent,10);m>0&&(_a(m),zt?.(m));}let c=i.notifications_toast==="true",u=i.notifications_bell==="true",b={toast:c,bell:u};Ra(b),Yt?.(b),a("Settings saved",e.green);}else if(x==="goal"&&Ze){let c=ia(i);a(`Creating goal "${c.title}"...`,e.amber),Ze(c).then(u=>{a(`\u2713 Created goal "${u.title}" (${u.id})`,e.green),K();},u=>a(`Failed: ${u instanceof Error?u.message:String(u)}`,e.red));}else if(x==="edit_goal"&&l&&Je){let c=la(i);a("Updating goal...",e.amber),Je(l,c).then(u=>{a(`\u2713 Updated goal "${u.title}"`,e.green),K();},u=>a(`Failed: ${u instanceof Error?u.message:String(u)}`,e.red));}},[bt,C,f,U,oe,ye,g$1,G,W,gt,Ze,Je,a,K,an,zt,So,Yt,le,Ht,gn,Zt,dn]),Xa=useCallback(()=>{Le("none"),et(null),Jn([]);},[]),qa=useCallback(i=>{let x=b(i);if(!x)return;let l=sr(le,An.current,Zt),c=Yr(l,x,dn);et({title:`NEW AGENT \u2014 ${x.name}`,steps:c,kind:"agent_from_shop"}),Le("wizard");},[le,Zt,dn]);useEffect(()=>{if(!_)return;let i=null,x=()=>{i||(i=setTimeout(()=>{i=null,K().catch(()=>{});},150));},l=_(c=>{if(c.type==="agent:started"&&(pn.current.set(c.runId,c.agentId),Ro.current.set(c.runId,c.taskId)),md(c,a,pn.current,Ro.current),c.type==="task:created"?To(u=>u==="welcome"?"task_created":u):c.type==="agent:started"?To(u=>u==="task_created"?"run_started":u):c.type==="task:status_changed"&&c.to==="done"&&To(u=>u==="run_started"?"completed":u),c.type==="task:status_changed"&&(c.to==="done"?Co("done",c.taskId):c.to==="failed"?Co("failed",c.taskId):c.to==="review"&&Co("review",c.taskId),ko.current.toast&&gs.current!=="tasks")){let u=c.to==="done"?e.green:c.to==="failed"?e.red:c.to==="review"?e.blue:void 0;u&&us({tab:"tasks",color:u});}(c.type==="task:status_changed"||c.type==="task:created"||c.type==="task:assigned"||c.type==="agent:started"||c.type==="agent:completed"||c.type==="run:retry"||c.type==="goal:created"||c.type==="goal:status_changed"||c.type==="goal:updated"||c.type==="goal:deleted")&&x();});return ()=>{l(),i&&clearTimeout(i);}},[_,a,K,Co]);let Ar=Qe?"observing":bo?"watching":"idle",Ka=Ve.started_at?g(Ve.started_at):void 0,Is=Ve.stats.total_tokens.total,vs=useMemo(()=>{let i={running:0,retrying:0,review:0,todo:0,done:0,failed:0,cancelled:0};for(let x of Ce)x.status==="in_progress"?i.running++:x.status==="retrying"?i.retrying++:x.status==="review"?i.review++:x.status==="todo"?i.todo++:x.status==="done"?i.done++:x.status==="failed"?i.failed++:x.status==="cancelled"&&i.cancelled++;return {...i,teams:so}},[Ce,so]);vs.running;let Ya=useMemo(()=>({input:Ve.stats.total_tokens.input??0,output:Ve.stats.total_tokens.output??0,reasoning:Ve.stats.total_tokens.reasoning??0,total:Is,cache_read:Ve.stats.total_tokens.cache_read??0,cache_write:Ve.stats.total_tokens.cache_write??0}),[Ve.stats.total_tokens,Is]),_t=Math.max(4,Ae-9),Za=En.size,Ja=le.length>Za,Qa=so>0?so+(Ja?1:0):0,el=useMemo(()=>{if(!no||$n.size===0)return 0;let i=0,x=new Set,l=false;for(let c of Ot)c.goalId&&$n.has(c.goalId)?x.has(c.goalId)||(x.add(c.goalId),i++):l=true;return l&&i++,i},[no,$n,Ot]),tl=E==="goals"?pt.length+1:E==="tasks"?Ot.length+1+(Bn>0?1:0)+el:E==="agents"?le.length+1+Qa:0,nl=Math.min(tl+1,Math.ceil(_t*.5)),ol=E==="logs"?_t:Math.max(2,Math.min(nl,_t-4)),we,Lt;if(E==="logs")we=_t,Lt=0;else if(vo)we=0,Lt=Math.max(1,_t);else {let i=Math.max(3,Math.min(ol+Ir,_t-4));we=i,Lt=Math.max(1,_t-i);}let _e=Math.max(10,ae-2),Rt=useMemo(()=>Ne==="command"?ii(un):[],[Ne,un]),Ln=_t-4-3;useEffect(()=>{Ir>Ln&&_n(Ln),Ir<-Ln&&_n(-Ln);},[_t]),useEffect(()=>{Mn(i=>Math.min(i,Math.max(0,Ot.length-we)));},[Ot.length,we]),useEffect(()=>{kr(i=>Math.min(i,Math.max(0,De.length-we)));},[De.length,we]),useEffect(()=>{Cr(i=>Math.min(i,Math.max(0,pt.length-we)));},[pt.length,we]);let rl=useCallback(i=>{let l=i.trim().replace(/^\//,"").split(/\s+/),c=l[0]?.toLowerCase();if(!c)return;let u=b=>b instanceof Error?b.message:String(b);switch(c){case "cancel":{if(!j){a("No task selected",e.yellow);return}if(!h)return;a(`Cancelling "${j.title}"...`,e.amber),h(j.id).then(()=>{a(`\u2713 Cancelled "${j.title}"`,e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}case "retry":{if(!j){a("No task selected",e.yellow);return}if(!y)return;a(`Retrying "${j.title}"...`,e.amber),y(j.id).then(()=>{a(`\u2713 Retried "${j.title}"`,e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}case "assign":{if(!j){a("No task selected",e.yellow);return}if(!g$1||!l[1]){a("Usage: assign <agent>",e.yellow);return}a(`Assigning "${j.title}" to ${l[1]}...`,e.amber),g$1(j.id,l[1]).then(()=>{a(`\u2713 Assigned "${j.title}" to ${l[1]}`,e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}case "task":{let b=l[1]?.toLowerCase();if(b==="add"){let m=l.slice(2).join(" ");if(!m){$o();return}if(!f){a("Create not available",e.yellow);return}a(`Creating "${m}"...`,e.amber),f(m).then(k=>{a(`\u2713 Created "${k.title}" (${k.id})`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="list"){let m=Pe.map(k=>` ${k.id} ${k.status.padEnd(11)} ${k.title}`);if(m.length===0)a("No tasks",e.dim);else for(let k of m)a(k,e.cyan);}else if(b==="show"){let m=l[2]?Pe.find(k=>k.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}a(`${m.id} ${m.status} P${m.priority} "${m.title}"`,e.cyan),m.assignee&&a(` agent: ${m.assignee}`,e.dim),m.description&&a(` ${m.description.slice(0,100)}`,e.dim);}else if(b==="cancel"){let m=l[2]?Pe.find(k=>k.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}if(!h)return;a(`Cancelling "${m.title}"...`,e.amber),h(m.id).then(()=>{a(`\u2713 Cancelled "${m.title}"`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="retry"){let m=l[2]?Pe.find(k=>k.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}if(!y)return;a(`Retrying "${m.title}"...`,e.amber),y(m.id).then(()=>{a(`\u2713 Retried "${m.title}"`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="assign"){let m=l[2]?Pe.find(Pt=>Pt.id===l[2]):void 0,k=m??j,Y=m?l[3]:l[2];if(!k){a("No task selected or id given",e.yellow);return}if(!Y){a("Usage: /task assign [id] <agent>",e.yellow);return}if(!g$1)return;a(`Assigning "${k.title}" to ${Y}...`,e.amber),g$1(k.id,Y).then(()=>{a(`\u2713 Assigned "${k.title}" to ${Y}`,e.green),K();},Pt=>a(`Failed: ${u(Pt)}`,e.red));}else if(b==="approve"){let m=l[2]?Pe.find(k=>k.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}if(m.status!=="review"){a(`Cannot approve \u2014 status is ${m.status}`,e.yellow);return}if(!P)return;a(`Approving "${m.title}"...`,e.amber),P(m.id).then(()=>{a(`\u2713 Approved "${m.title}"`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="reject"){let m=l[2]?Pe.find(Y=>Y.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}if(m.status!=="review"){a(`Cannot reject \u2014 status is ${m.status}`,e.yellow);return}if(!B)return;let k=l.slice(l[2]&&Pe.find(Y=>Y.id===l[2])?3:2).join(" ").trim()||void 0;a(`Rejecting "${m.title}"${k?" with feedback":""}...`,e.amber),B(m.id,k).then(()=>{a(`\u2713 Rejected "${m.title}" \u2192 todo`,e.green),K();},Y=>a(`Failed: ${u(Y)}`,e.red));}else if(b==="delete"){let m=l[2]?Pe.find(k=>k.id===l[2]):j;if(!m){a("No task selected or id given",e.yellow);return}if(m.status==="in_progress"){a("Cannot delete \u2014 task is running",e.yellow);return}if(!H)return;On("task",m.id,m.title);}else a("Usage: /task add|list|show|cancel|retry|assign|approve|reject|delete",e.yellow);return}case "agent":{let b=l[1]?.toLowerCase();if(b==="add"){let m=l[2];if(!m){Ao();return}if(!C){a("Agent creation not available",e.yellow);return}let k=l[3];a(`Creating agent "${m}"...`,e.amber),C(m,k).then(Y=>{a(`\u2713 Created agent "${Y.name}" (${Y.id}, ${Y.adapter})`,e.green),K();},Y=>a(`Failed: ${u(Y)}`,e.red));}else if(b==="list"){let m=De.map(k=>` ${k.id} ${k.status.padEnd(8)} ${k.name} (${k.adapter})`);if(m.length===0)a("No agents",e.dim);else for(let k of m)a(k,e.cyan);}else if(b==="disable"){let m=l[2]?De.find(k=>k.id===l[2]||k.name===l[2]):Z;if(!m){a("No agent selected or id given",e.yellow);return}if(!S)return;a(`Disabling ${m.name}...`,e.amber),S(m.id).then(()=>{a(`\u2713 Disabled ${m.name}`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="enable"){let m=l[2]?De.find(k=>k.id===l[2]||k.name===l[2]):Z;if(!m){a("No agent selected or id given",e.yellow);return}if(!I)return;a(`Enabling ${m.name}...`,e.amber),I(m.id).then(()=>{a(`\u2713 Enabled ${m.name}`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="delete"||b==="remove"){let m=l[2]?De.find(k=>k.id===l[2]||k.name===l[2]):Z;if(!m){a("No agent selected or id given",e.yellow);return}if(m.status==="running"){a("Cannot delete \u2014 agent is running",e.yellow);return}if(!z){a("Agent deletion not available",e.yellow);return}On("agent",m.id,m.name);}else if(b==="autonomous"||b==="auto"){let m=l[2]?De.find(k=>k.id===l[2]||k.name===l[2]):Z;if(!m){a("No agent selected or id given",e.yellow);return}if(!gt){a("Autonomous toggle not available",e.yellow);return}m.autonomous?(a(`Disabling autonomous mode for "${m.name}"...`,e.amber),gt(m.id,false).then(()=>{a(`${bn} ${m.name} autonomous OFF`,e.cyan),K();},k=>a(`Failed: ${u(k)}`,e.red))):(a(`Enabling autonomous mode for "${m.name}"...`,e.amber),gt(m.id,true).then(()=>{a(`${bn} ${m.name} autonomous ON`,e.cyan),K();},k=>a(`Failed: ${u(k)}`,e.red)));}else b==="shop"?Ss():a("Usage: /agent add|list|disable|enable|delete|autonomous|shop",e.yellow);return}case "team":{let b=l[1]?.toLowerCase();if(b==="create"||b==="add")ks();else if(b==="list"){let m=An.current;if(m.length===0)a("No teams",e.dim);else for(let k of m)a(` ${k.id} ${k.status.padEnd(8)} ${k.name} (${k.members.length} members)`,e.cyan);}else if(b==="join"){if(!oe){a("Join not available",e.yellow);return}let m=l[2],k=l[3]??Z?.id;if(!m||!k){a("Usage: /team join <teamId> [agentId]",e.yellow);return}a(`Joining team ${m}...`,e.amber),oe(m,k).then(Y=>{a(`\u2713 Agent joined team "${Y.name}"`,e.green),K({includeTeams:true});},Y=>a(`Failed: ${u(Y)}`,e.red));}else if(b==="leave"){if(!ye){a("Leave not available",e.yellow);return}let m=l[2],k=l[3]??Z?.id;if(!m||!k){a("Usage: /team leave <teamId> [agentId]",e.yellow);return}a(`Leaving team ${m}...`,e.amber),ye(m,k).then(Y=>{a(`\u2713 Agent left team "${Y.name}"`,e.green),K({includeTeams:true});},Y=>a(`Failed: ${u(Y)}`,e.red));}else if(b==="disband"){if(!Ge){a("Disband not available",e.yellow);return}let m=l[2];if(!m){a("Usage: /team disband <teamId>",e.yellow);return}a(`Disbanding team ${m}...`,e.amber),Ge(m).then(()=>{a("\u2713 Team disbanded",e.green),K({includeTeams:true});},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="set-lead"){if(!ze){a("Set-lead not available",e.yellow);return}let m=l[2],k=l[3];if(!m||!k){a("Usage: /team set-lead <teamId> <agentId>",e.yellow);return}a(`Setting lead for team ${m}...`,e.amber),ze(m,k).then(Y=>{a(`\u2713 New lead for team "${Y.name}"`,e.green),K({includeTeams:true});},Y=>a(`Failed: ${u(Y)}`,e.red));}else a("Usage: /team create|list|join|leave|disband|set-lead",e.yellow);return}case "goal":{let b=l[1]?.toLowerCase();if(b==="add"||b==="create"){let m=l.slice(2).join(" ").trim();if(!m){let k=ir(le);et({title:"New Goal",steps:k,kind:"goal"}),Le("wizard");return}if(!Ze){a("Goal creation not available",e.yellow);return}a(`Creating goal "${m}"...`,e.amber),Ze({title:m}).then(k=>{a(`\u2713 Created goal "${k.title}" (${k.id})`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));}else if(b==="list"){let m=pt.map(k=>` ${k.id} ${k.status.padEnd(8)} ${k.title}`);if(m.length===0)a("No goals",e.dim);else for(let k of m)a(k,e.cyan);}else if(b==="show"){let m=l[2]?pt.find(k=>k.id===l[2]):ee;if(!m){a("No goal selected or id given",e.yellow);return}a(`${m.id} ${m.status} "${m.title}"`,e.cyan),m.description&&a(` ${m.description.slice(0,100)}`,e.dim);}else if(b==="status"){let m=l[2]?pt.find(xn=>xn.id===l[2]):void 0,k=m??ee;if(!k){a("No goal selected or id given",e.yellow);return}let Y=l[m?3:2];if(!Y||!a$1.includes(Y)){a("Usage: /goal status [id] <active|paused|achieved|abandoned>",e.yellow);return}let Pt=Y;if(!ft){a("Status update not available",e.yellow);return}a(`Updating goal status to ${Pt}...`,e.amber),ft(k.id,Pt).then(xn=>{a(`\u2713 Goal "${xn.title}" \u2192 ${Pt}`,e.green),K();},xn=>a(`Failed: ${u(xn)}`,e.red));}else if(b==="delete"){let m=l[2]?pt.find(k=>k.id===l[2]):ee;if(!m){a("No goal selected or id given",e.yellow);return}if(!ke){a("Goal deletion not available",e.yellow);return}On("goal",m.id,m.title);}else a("Usage: /goal add|list|show|status|delete",e.yellow);return}case "run":{let b=l[1]??j?.id;if(!b){a("No task selected or id given",e.yellow);return}if(!s){a("Run not available",e.yellow);return}let m=Pe.find(k=>k.id===b);if(m&&!Zr.has(m.status)){a(`Cannot run \u2014 status is ${m.status}`,e.yellow);return}a(`Running ${b}...`,e.amber),s(b).then(()=>{a(`\u2713 Dispatched ${b}`,e.green),K();},k=>a(`Failed: ${u(k)}`,e.red));return}case "run-all":{if(!T){a("Run-all not available",e.yellow);return}a("Running all todo tasks...",e.amber),T().then(()=>{a("\u2713 Dispatched all todo tasks",e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}case "watch":{if(bo){a("Watch mode already active",e.yellow);return}if(!ut){a("Watch not available",e.yellow);return}a("Starting watch mode...",e.amber),ut().then(()=>{mr(true),a("\u2713 Watch mode started",e.green);},b=>a(`Failed: ${u(b)}`,e.red));return}case "pause":{if(!bo){a("Watch mode not active",e.yellow);return}if(!Ct){a("Pause not available",e.yellow);return}a("Pausing watch mode...",e.amber),Ct().then(()=>{mr(false),a("\u2713 Watch mode paused",e.green);},b=>a(`Failed: ${u(b)}`,e.red));return}case "config":{l[1]?.toLowerCase()==="activity-filter"?yr(m=>{let k=Jr(m);return an?.(k.label),a(`Activity filter: ${k.label}`,e.amber),new Set(k.types)}):Cs();return}case "status":{let b=Ce.filter(m=>m.status==="in_progress").length;a(`${Ar} ${b} running ${Ce.length} tasks ${De.length} agents`,e.cyan);return}case "help":{for(let[b,m]of Object.entries(Tn)){let k=m.sub?" "+m.sub.join("|"):m.args?" "+m.args:"";a(` /${b}${k} \u2014 ${m.help}`,e.silver);}return}case "quit":{jt();return}case "disable":{if(!Z){a("No agent selected",e.yellow);return}if(!S)return;a(`Disabling ${Z.name}...`,e.amber),S(Z.id).then(()=>{a(`\u2713 Disabled ${Z.name}`,e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}case "enable":{if(!Z){a("No agent selected",e.yellow);return}if(!I)return;a(`Enabling ${Z.name}...`,e.amber),I(Z.id).then(()=>{a(`\u2713 Enabled ${Z.name}`,e.green),K();},b=>a(`Failed: ${u(b)}`,e.red));return}default:a(`Unknown: ${c}. Type /help for commands`,e.yellow);}},[j,Z,Pe,De,Ce,Ar,bo,h,y,g$1,T,s,f,S,I,C,P,B,H,oe,ye,Ge,ze,ut,Ct,a,jt,K,$o,Ao,ks,Cs]);useInput((i,x)=>{if(!(Et&&(hr(false),i==="?"||x.escape||i==="\x1BOP"))&&!In){if((x.ctrl||x.meta)&&i==="s"&&Ne==="wizard"&&bt?.kind==="agent"){Ss();return}if(Ne!=="none"){if(x.escape){Le("none"),xt.reset(""),Io.reset();return}if(x.return){let c=un.trim();if(!c)return;if(Ne==="new_task"){if(!f)return;Le("none"),xt.reset(""),a(`Creating "${c}"...`,e.amber),f(c).then(u=>{a(`\u2713 Created "${u.title}" (${u.id})`,e.green),K();},u=>a(`Failed to create: ${u instanceof Error?u.message:String(u)}`,e.red));}else if(Ne==="command"){let u=c;if(Rt.length>0&&Rt[Mo]){let b=Rt[Mo],m=b.cmd.replace(/\s+\[.*\]$/,"");if((m.startsWith(c)||c==="/")&&(u=m),b.subs&&!m.includes(" ")){xt.setValue(m+" "),mn(0);return}}Le("none"),xt.reset(""),mn(0),Io.push(u),rl(u);}return}if(x.tab&&Ne==="command"){if(Rt.length>0){let c=Rt[Mo];if(c){let u=c.cmd.replace(/\s+\[.*\]$/,"");xt.setValue(u+(c.subs?" ":"")),mn(0);}}else {let c=Fr(un);c&&xt.setValue(un+c);}return}if(x.upArrow&&Ne==="command"){if(Rt.length>0)mn(c=>Math.max(0,c-1));else {let c=Io.prev();c!==null&&xt.setValue(c);}return}if(x.downArrow&&Ne==="command"){if(Rt.length>0)mn(c=>Math.min(Rt.length-1,c+1));else {let c=Io.next();xt.setValue(c??"");}return}xt.handleInput(i,x)&&mn(0);return}if(i.toLowerCase()==="q"){jt();return}if(x.escape){if($e){Zn(false),oo(0);return}if(E==="logs"&&eo>=0){Tr(-1),to(0);return}return}if((i==="+"||i==="=")&&E!=="logs"){vo?(vr(false),_n(-Math.floor(_t/2))):_n(l=>Math.max(-Ln,l-3));return}if(i==="-"&&E!=="logs"){vo?(vr(false),_n(Math.floor(_t/2))):_n(l=>Math.min(Ln,l+3));return}if(i==="M"&&E!=="logs"){vr(l=>!l);return}if(i==="?"){hr(true);return}if(i==="\x1BOP"){hr(true);return}if(i==="/"&&!$e){Le("command"),xt.setValue("/"),mn(0);return}if((i==="a"||i==="A")&&E==="logs"&&!$e&&!In&&!Qn){xr(true);return}if(i==="f"&&E==="logs"&&!$e&&!In&&!Qn){br(true);return}if(i==="F"&&E==="logs"&&!$e&&!In&&!Qn){ls(l=>new Set(Jr(l).types));return}if((i==="z"||i==="Z")&&Rn.length>0){za();return}if((i==="f"||i==="F")&&(E==="tasks"||E==="agents"||E==="goals")&&!$e){yr(l=>{let c=Jr(l);return an?.(c.label),new Set(c.types)});return}if((i==="n"||i==="N")&&E==="tasks"&&!$e&&f){$o();return}if((i==="n"||i==="N")&&E==="agents"&&!$e&&C){Ao();return}if((i==="n"||i==="N")&&E==="goals"&&!$e&&Ze){let l=ir(le);et({title:"New Goal",steps:l,kind:"goal"}),Le("wizard");return}if((i==="e"||i==="E")&&E==="goals"&&ee&&Je){let l=aa(ee,le);et({title:`Edit Goal: ${ee.title}`,steps:l,kind:"edit_goal",targetId:ee.id}),Le("wizard");return}if((i==="d"||i==="D")&&E==="goals"&&ee&&ke){On("goal",ee.id,ee.title);return}if((i==="c"||i==="C")&&E==="goals"&&ee&&ft){(ee.status==="active"||ee.status==="paused")&&(a(`Marking goal "${ee.title}" as achieved (pending tasks will be cancelled)...`,e.amber),ft(ee.id,"achieved",{force:true}).then(()=>{a(`\u2713 Goal "${ee.title}" achieved`,e.green),K();},l=>a(`Failed: ${l instanceof Error?l.message:String(l)}`,e.red)));return}if((i==="x"||i==="X")&&E==="goals"&&ee&&ft){(ee.status==="active"||ee.status==="paused")&&(a(`Abandoning goal "${ee.title}"...`,e.amber),ft(ee.id,"abandoned").then(()=>{a(`\u2713 Goal "${ee.title}" abandoned`,e.dim),K();},l=>a(`Failed: ${l instanceof Error?l.message:String(l)}`,e.red)));return}if((i==="p"||i==="P")&&E==="goals"&&ee&&ft){let l=ee.status==="paused"?"active":"paused";(ee.status==="active"||ee.status==="paused")&&ft(ee.id,l).then(()=>{a(`Goal "${ee.title}" ${l}`,e.cyan),K();},c=>a(`Failed: ${c instanceof Error?c.message:String(c)}`,e.red));return}if((i==="a"||i==="A")&&E==="tasks"&&j?.status==="review"&&P){a(`Approving "${j.title}"...`,e.amber),P(j.id).then(()=>{a(`\u2713 Approved "${j.title}"`,e.green),K();},l=>a(`Failed: ${l instanceof Error?l.message:String(l)}`,e.red));return}if((i==="x"||i==="X")&&E==="tasks"&&j?.status==="review"&&B){a(`Rejecting "${j.title}"...`,e.amber),B(j.id).then(()=>{a(`\u2713 Rejected "${j.title}" \u2192 todo`,e.green),K();},l=>a(`Failed: ${l instanceof Error?l.message:String(l)}`,e.red));return}if((i==="c"||i==="C")&&E==="tasks"&&j&&h){if(j.status==="done"||j.status==="failed"||j.status==="cancelled"){a(`Cannot cancel \u2014 status is ${j.status}`,e.yellow);return}a(`Cancelling "${j.title}"...`,e.amber),h(j.id).then(()=>{a(`\u2713 Cancelled "${j.title}"`,e.green),K();},l=>a(`Failed: ${l instanceof Error?l.message:String(l)}`,e.red));return}if((i==="e"||i==="E")&&E==="tasks"&&j&&G){ja(j);return}if((i==="e"||i==="E")&&E==="agents"&&Z&&W){Ha(Z);return}if((i==="s"||i==="S")&&E==="tasks"){hs(l=>!l),Yn(0),Mn(0);return}if((i==="g"||i==="G")&&E==="tasks"&&!$e){Oa(l=>!l),Yn(0),Mn(0);return}if((i==="s"||i==="S")&&E==="agents"&&Z&&w){if(!Object.values(Ve.running).some(c=>c.agent_id===Z.id)&&Z.status!=="running"){a(`Agent "${Z.name}" is not running`,e.yellow);return}a(`Force-stopping agent "${Z.name}"...`,e.amber),w(Z.id).then(()=>{a(`\u2713 Stopped agent "${Z.name}"`,e.green),K();},c=>a(`Failed: ${c instanceof Error?c.message:String(c)}`,e.red));return}if((i==="d"||i==="D")&&E==="tasks"&&j&&j.status!=="in_progress"&&H){On("task",j.id,j.title);return}if((i==="d"||i==="D")&&E==="agents"&&Z&&z){let l=Object.values(Ve.running).some(c=>c.agent_id===Z.id);if(l&&!w){a(`Cannot delete \u2014 agent "${Z.name}" is running. Press S to stop first.`,e.yellow);return}On("agent",Z.id,Z.name,{needsForceStop:l});return}if((i==="u"||i==="U")&&E==="agents"&&Z&&gt){let l=!Z.autonomous;a(`${l?"Enabling":"Disabling"} autonomous mode for "${Z.name}"...`,e.amber),gt(Z.id,l).then(()=>{a(`${bn} ${Z.name} autonomous ${l?"ON":"OFF"}`,e.cyan),K();},c=>a(`Failed: ${c instanceof Error?c.message:String(c)}`,e.red));return}if(!$e){if(i==="g"||i==="G"){Cn("goals");return}if(i==="t"||i==="T"){Cn("tasks");return}if(i==="a"||i==="A"){Cn("agents");return}if(i==="l"||i==="L"){Cn("logs");return}}if(!$e){let l=Go.map(u=>u.id),c=l.indexOf(E);if(x.tab||x.rightArrow){Cn(l[(c+1)%l.length]);return}if(x.leftArrow){Cn(l[(c+l.length-1)%l.length]);return}}if(x.return){let l=Bn>0?Ot.length:-1;if(E==="tasks"&&yo===l){hs(u=>!u),Yn(0),Mn(0);return}let c=Ot.length+(Bn>0?1:0);if(E==="tasks"&&yo===c&&f){$o();return}if(E==="goals"&&pr===pt.length&&Ze){let u=ir(le);et({title:"New Goal",steps:u,kind:"goal"}),Le("wizard");return}if(E==="agents"&&fr===De.length&&C){Ao();return}if(E==="goals"&&ee){Zn(u=>!u),oo(0);return}if(E==="tasks"&&j){Zn(u=>!u);return}if(E==="agents"&&Z){Zn(u=>!u);return}if(E==="logs"&&eo>=0){Zn(u=>!u);return}}if((i==="r"||i==="R")&&E==="tasks"&&j&&s){if(!Zr.has(j.status)){a(`Cannot run "${j.title}" \u2014 status is ${j.status}`,e.yellow);return}a(`Running "${j.title}"...`,e.green),s(j.id).then(()=>{a(`Dispatched "${j.title}"`,e.green),K();},l=>a(`Failed to run: ${l instanceof Error?l.message:String(l)}`,e.red));return}if(x.upArrow||i==="k"){if(E==="goals"&&$e){oo(l=>Math.max(0,l-1));return}E==="goals"?rs(l=>{let c=Math.max(0,l-1);return Cr(u=>c<u?c:u),c}):E==="tasks"?Yn(l=>{let c=Math.max(0,l-1);return Mn(u=>c<u?c:u),c}):E==="agents"?os(l=>{let c=Math.max(0,l-1);return kr(u=>c<u?c:u),c}):E==="logs"&&Tr(l=>{if(l===-1){let u=je.length-1;return to(Math.max(0,u-we+2)),Math.max(0,u)}let c=Math.max(0,l-1);return to(u=>c<u?c:u),c});}if(x.downArrow||i==="j"){if(E==="goals"&&$e){oo(l=>l+1);return}if(E==="goals"){let l=pt.length+(Ze?1:0)-1;rs(c=>{let u=Math.min(Math.max(0,l),c+1);return Cr(b=>u>=b+we?u-we+1:b),u});}else if(E==="tasks"){let l=Ot.length+(f?1:0)+(Bn>0?1:0)-1;Yn(c=>{let u=Math.min(Math.max(0,l),c+1);return Mn(b=>u>=b+we?u-we+1:b),u});}else if(E==="agents"){let l=De.length+(C?1:0)-1;os(c=>{let u=Math.min(Math.max(0,l),c+1);return kr(b=>u>=b+we?u-we+1:b),u});}else E==="logs"&&Tr(l=>{if(l===-1)return -1;let c=je.length-1;if(l>=c)return to(0),-1;let u=l+1;return to(b=>u>=b+we-1?u-we+2:b),u});}}});let st=Ne!=="none",Ms=eo>=0?je[eo]:void 0,Bo=vo?"+/- exit max":"+/- resize \u2502 M max",_s=!st&&$e&&E==="tasks"&&j,Rs=!st&&$e&&E==="agents"&&Z,As=!st&&$e&&E==="goals"&&ee,sl=!st&&$e&&E==="logs"&&Ms,$r=j?.id,il=useMemo(()=>$r?je.filter(i=>i.taskId===$r):[],[je,$r]),al=!st&&E==="tasks"&&j&&Zr.has(j.status)&&!!s,ll=!st&&!$e&&(E==="goals"&&!!Ze||E==="tasks"&&!!f||E==="agents"&&!!C),cl=!st&&E==="tasks"&&j?.status==="review"&&!!P,dl=!st&&E==="tasks"&&j?.status==="review"&&!!B,ul=Z?Object.values(Ve.running).some(i=>i.agent_id===Z.id):false,gl=!st&&(E==="goals"&&ee&&!!ke||E==="tasks"&&j&&j.status!=="in_progress"&&!!H||E==="agents"&&Z&&!!z),ml=!st&&!$e&&(E==="goals"&&!!ee&&!!Je||E==="tasks"&&!!j&&!!G||E==="agents"&&!!Z&&!!W),fl=!st&&E==="agents"&&Z&&(ul||Z.status==="running")&&!!w,pl=!st&&E==="agents"&&!!Z&&!!gt,hl=!st&&E==="goals"&&!!ee&&(ee.status==="active"||ee.status==="paused")&&!!ft,xl=!st&&Rn.length>0,$s=Ne==="command"&&Rt.length>0,Bs=bt?.kind==="task"||bt?.kind==="edit_task";return jsxs(Box,{flexDirection:"column",width:ae,height:Ae,children:[jsx(si,{projectName:t,activeView:E,mode:Ar,stats:vs,tokens:Ya,uptime:Ka,width:ae,version:ln,latestVersion:N,updateInstalled:A,taskBadge:Bn>0?Pe.length:void 0,flashTab:Sr?.tab,flashColor:Sr?.color,onFlashComplete:Sr?()=>us(void 0):void 0}),jsx(Box,{height:1}),Et&&jsx(Fi,{width:ae,height:Ae-7}),!Et&&Jt==="welcome"&&E==="tasks"&&jsx(vi,{width:ae,height:Ae}),!Et&&E==="goals"&&jsx(Jc,{goals:pt,selectedIndex:pr,scrollOffset:Pa,height:we,width:_e,showAddRow:!!Ze,agentNameMap:fn,tasksByGoalMap:Da}),!Et&&Jt!=="welcome"&&E==="tasks"&&jsx(ed,{tasks:Ot,selectedIndex:yo,scrollOffset:Ea,height:we,width:_e,showAddRow:!!f,agentNameMap:fn,hiddenCount:Bn,goalMap:$n,groupByGoal:no}),!Et&&E==="tasks"&&(Jt==="task_created"||Jt==="run_started")&&jsx(Mi,{step:Jt,width:ae}),!Et&&E==="tasks"&&Jt==="completed"&&jsx(_i,{width:ae}),!Et&&E==="agents"&&jsx(td,{agents:De,selectedIndex:fr,scrollOffset:La,height:we,width:_e,state:Ve,taskTitleMap:ro,showAddRow:!!C,agentTeamMap:En,teamLeadSet:Wa,activeTeamCount:so}),!Et&&E==="logs"&&jsxs(Fragment,{children:[jsx(od,{messages:je,height:In||Qn?Math.max(3,we-16):we,agents:De,logAgentFilter:is,logTypeFilter:as,selectedIndex:eo,scrollOffset:Ma,agentNameMap:fn,agentColorMap:_o,agentMsgCounts:Ts,taskTitleMap:ro,width:_e}),In&&jsx(Box,{paddingX:2,children:jsx(wi,{agents:De,selected:is,msgCounts:Ts,colorMap:_o,maxHeight:Math.min(we-4,18),onConfirm:i=>{va(i),xr(false);},onCancel:()=>xr(false)})}),Qn&&jsx(Box,{paddingX:2,children:jsx(Ii,{selected:as,typeCounts:Fa,onConfirm:i=>{ls(i),br(false);},onCancel:()=>br(false)})})]}),jsx(Box,{height:1}),Et?null:Ne==="wizard"&&bt?jsx(bi,{title:bt.title,steps:bt.steps,onComplete:Ua,onCancel:Xa,width:_e,height:Lt,onPasteImage:Bs?Va:void 0,onSuggestionSelected:bt.kind==="agent"?qa:void 0,footerExtra:gn.length>0&&Bs?`\u{1F4CE}${gn.length}`:void 0},`${bt.kind}-${bt.title}`):$s?jsxs(Fragment,{children:[jsx(ar,{label:"COMMANDS",width:_e}),jsx(Zc,{suggestions:Rt,selectedIndex:Mo,height:Math.min(Rt.length,Lt),width:_e})]}):Ne==="new_task"?jsxs(Fragment,{children:[jsx(dd,{mode:Ne,width:_e}),jsx(ud,{mode:Ne,cursor:xt.cursor,width:_e})]}):_s?jsxs(Fragment,{children:[jsx(id,{task:j,width:_e,resizeHint:Bo}),jsx(ni,{task:j,height:Lt,width:_e,taskLogs:il,agentNameMap:fn,taskTitleMap:ro})]}):As?jsxs(Fragment,{children:[jsx(ar,{label:`GOAL: ${ee.title}`,width:_e,suffixLen:Bo.length+2,suffix:jsxs(Text,{color:e.dim,children:[" ",Bo," "]})}),jsx(Qc,{goal:ee,height:Lt,width:_e,agentNameMap:fn,tasks:Ga,progressReport:Ia,scrollOffset:Na,onClampScroll:oo})]}):Rs?jsxs(Fragment,{children:[jsx(ad,{agent:Z,width:_e,resizeHint:Bo}),jsx(ld,{agent:Z,height:Lt,state:Ve,taskTitleMap:ro,teamName:En.get(Z.id)})]}):sl?jsxs(Fragment,{children:[jsx(ar,{label:"LOG",width:_e}),jsx(sd,{message:Ms,height:Lt,width:_e,agents:De,agentNameMap:fn,agentColorMap:_o,taskTitleMap:ro})]}):je.length>0&&E!=="logs"?jsxs(Fragment,{children:[(()=>{let i=` F:${wo.toUpperCase()} \u2502 ${wr.length}/${je.length}`;return jsx(ar,{label:"ACTIVITY",width:_e,suffixLen:i.length,suffix:jsxs(Fragment,{children:[jsx(Text,{color:e.dim,children:" F:"}),jsx(Text,{color:e.amber,children:wo.toUpperCase()}),jsxs(Text,{color:e.ghost,children:[" ","\u2502"," ",wr.length,"/",je.length]})]})})})(),jsx(rd,{messages:wr,height:Math.max(1,Lt-1),width:_e,agents:De,agentNameMap:fn,agentColorMap:_o})]}):E==="goals"?jsx(tr,{count:pt.length,config:Ai,width:_e}):E==="tasks"?jsx(tr,{count:Pe.length,config:$i,width:_e}):E==="agents"?jsx(tr,{count:De.length,config:Bi,width:_e}):null,jsx(Box,{flexGrow:1}),jsx(Di,{toasts:Aa,onDismiss:Ba}),Rn.length>0&&jsx(Yc,{deletions:Rn,width:ae}),jsx(ai,{mode:Ne==="command"?"command":"navigate",value:Ne==="command"?un:"",completion:Ne==="command"?Fr(un):null,activeView:E,canRun:!!al,canNew:!!ll,canApprove:!!cl,canReject:!!dl,canCancel:E==="tasks"&&!!j&&j.status==="in_progress"&&!!h,canDelete:!!gl,canUndo:!!xl,canEdit:!!ml,canForceStop:!!fl,canToggleAuto:!!pl,autoActive:Z?.autonomous,canPause:!!hl,isPaused:ee?.status==="paused",canToggleShowAll:E==="tasks"&&Pe.length>ca,showAllActive:ps,hasDetail:!!(_s||Rs||As),itemCount:E==="goals"?pt.length:E==="tasks"?Pe.length:E==="agents"?le.length:je.length,itemLabel:E==="goals"?"goals":E==="tasks"?"tasks":E==="agents"?"agents":"events",width:ae,hasSuggestions:$s,onboardingCompleted:r.onboardingCompleted})]})}var Yc=mo.memo(function({deletions:n,width:o}){let[,r]=useState(0);useEffect(()=>{let f=setInterval(()=>r(h=>h+1),1e3);return ()=>clearInterval(f)},[]);let s=Date.now();return jsx(Box,{flexDirection:"column",width:o,children:n.map(f=>{let h=Math.max(0,Math.ceil((f.expiresAt-s)/1e3)),y=Math.max(0,o-4),g=f.entityType==="task"?"Task":f.entityType==="agent"?"Agent":"Goal",T=Math.max(10,y-g.length-30),S=f.entityName.length>T?f.entityName.slice(0,T-1)+"\u2026":f.entityName;return jsx(Box,{paddingX:2,children:jsxs(Text,{color:e.yellow,children:["\u2717 ",jsx(Text,{bold:true,children:g}),` "${S}" \u2014 `,jsxs(Text,{color:e.amber,bold:true,children:[h,"s"]}),jsx(Text,{color:e.dim,children:" \u2502 "}),jsx(Text,{color:e.gray,bold:true,children:"Z"}),jsx(Text,{color:e.dim,children:" undo"})]})},f.key)})})});function Zc({suggestions:t,selectedIndex:n,height:o,width:r}){let s=o,f=0;n>=s&&(f=n-s+1);let h=t.slice(f,f+s);return jsx(Box,{flexDirection:"column",paddingX:2,children:h.map((y,g)=>{let T=g+f,S=T===n,I=S?"\u25B6":" ",_=Math.min(20,Math.max(14,...t.map(C=>C.cmd.length+1))),v=y.cmd.padEnd(_),L=y.subs?` ${y.subs}`:"",M=Math.max(4,r-_-L.length-8),R=y.desc.length>M?y.desc.slice(0,M-1)+"\u2026":y.desc;return jsxs(Text,{wrap:"truncate",children:[jsx(Text,{color:S?e.amber:e.ghost,children:` ${I} `}),jsx(Text,{color:S?e.white:e.silver,bold:S,children:v}),jsx(Text,{color:e.dim,children:R}),L&&jsx(Text,{color:e.ghost,children:L})]},T)})})}function Jc({goals:t,selectedIndex:n,scrollOffset:o=0,height:r,width:s,showAddRow:f,agentNameMap:h,tasksByGoalMap:y}){let g=t.length,T=t.slice(o,o+r),S=f&&g>=o&&g<o+r;return jsxs(Box,{flexDirection:"column",height:r,children:[T.map((I,_)=>jsx(Box,{paddingX:2,children:jsx(ti,{goal:I,selected:_+o===n,width:s-2,agentNameMap:h,tasksByGoal:y?.get(I.id)})},I.id)),S&&jsx(Box,{paddingX:2,children:jsxs(Text,{color:n===g?e.amber:e.ghost,children:[n===g?" \u25B8 ":" ",jsx(Text,{color:n===g?e.amber:e.dim,children:"+ add goal..."})]})},"__add__")]})}function Qc({goal:t,height:n,width:o,agentNameMap:r,tasks:s,progressReport:f,scrollOffset:h=0,onClampScroll:y}){let T=mo.useMemo(()=>{let M=s??[],R=t.assignee?r?.get(t.assignee)??t.assignee:"\u2014",C=Math.max(20,o-6),z=(w,U)=>{if(w.length<=U)return [w];let ie=[];for(let oe=0;oe<w.length;oe+=U)ie.push(w.slice(oe,oe+U));return ie},P=Pr(f)?.split(`
13
+ `).flatMap(w=>z(w,C))??[],B=Pr(t.description)?.split(`
14
+ `).flatMap(w=>z(w,C))??[],H=Ws[t.status]??e.dim,G=new Map;for(let w of M)G.set(w.status,(G.get(w.status)??0)+1);let W=[];if(W.push({key:"row-status",node:jsxs(Box,{children:[jsxs(Box,{width:24,children:[jsx(Text,{color:e.dim,children:" status "}),jsx(Text,{color:H,bold:true,children:t.status})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" assignee "}),jsx(Text,{color:t.assignee?e.green:e.dim,children:R})]})]})}),W.push({key:"row-id",node:jsxs(Box,{children:[jsxs(Box,{width:24,children:[jsx(Text,{color:e.dim,children:" id "}),jsx(Text,{color:e.dim,children:t.id})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" created "}),jsx(Text,{children:t.created_at.slice(0,10)})]})]})}),t.updated_at&&t.updated_at!==t.created_at&&W.push({key:"row-updated",node:jsxs(Box,{children:[jsx(Box,{width:24,children:jsxs(Text,{color:e.dim,children:[" "," "]})}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" Updated "}),jsx(Text,{children:t.updated_at.slice(0,10)})]})]})}),M.length>0){let w=[];for(let[U,ie]of G)w.push(`${ie} ${U}`);W.push({key:"row-tasks-summary",node:jsxs(Box,{children:[jsxs(Box,{width:24,children:[jsx(Text,{color:e.dim,children:" tasks "}),jsx(Text,{color:e.cyan,children:M.length})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" "}),jsx(Text,{color:e.dim,children:w.join(" \xB7 ")})]})]})});}if(B.length>0){W.push({key:"desc-gap",node:jsx(Text,{children:" "})});for(let w=0;w<B.length;w++)W.push({key:`desc-${w}`,node:jsxs(Text,{color:e.silver,wrap:"truncate",children:[" ",B[w]]})});}else W.push({key:"desc-gap",node:jsx(Text,{children:" "})}),W.push({key:"desc-empty",node:jsx(Text,{color:e.dim,children:" No description."})});if(P.length>0){W.push({key:"prog-gap",node:jsx(Text,{children:" "})}),W.push({key:"prog-div",node:jsx(Gn,{label:"progress",width:o})});for(let w=0;w<P.length;w++)W.push({key:`prog-${w}`,node:jsxs(Text,{color:e.white,wrap:"truncate",children:[" ",P[w]]})});}if(M.length>0){W.push({key:"tasks-gap",node:jsx(Text,{children:" "})}),W.push({key:"tasks-div",node:jsx(Gn,{label:`tasks (${M.length})`,width:o})});for(let w of M){let U=No[w.status]??e.dim;W.push({key:`task-${w.id}`,node:jsxs(Text,{color:e.silver,wrap:"truncate",children:[" ",jsx(Text,{color:U,children:w.status.padEnd(12)}),w.title.slice(0,Math.max(10,o-22))]})});}}return W},[t,s,f,o,r]),S=Math.max(0,T.length-n),I=Math.min(h,S);mo.useEffect(()=>{y&&I!==h&&y(I);},[I,h,y]);let _=T.length>n&&I<S,v=_?n-1:n,L=T.slice(I,I+v);return jsxs(Box,{flexDirection:"column",height:n,paddingX:2,children:[L.map(M=>jsx(Box,{children:M.node},M.key)),_&&jsxs(Text,{color:e.ghost,children:[" ","\u2193"," ",T.length-I-v," more ","\u2014"," ","\u2191","\u2193"," to scroll"]})]})}function ed({tasks:t,selectedIndex:n,scrollOffset:o=0,height:r,width:s,showAddRow:f,agentNameMap:h,hiddenCount:y=0,goalMap:g,groupByGoal:T=false}){let S=y>0,I=S?t.length:-1,_=t.length+(S?1:0),v=t.slice(o,o+r),L=S&&I>=o&&I<o+r,M=f&&_>=o&&_<o+r,R=useMemo(()=>{if(!T||!g||g.size===0)return null;let H=new Map;for(let G of t)if(G.goalId&&g.has(G.goalId)){let W=H.get(G.goalId)??{total:0,done:0};W.total++,G.status==="done"&&W.done++,H.set(G.goalId,W);}return H},[t,T,g]),C=T&&g?t.filter(H=>!H.goalId||!g.has(H.goalId)).length:0,z=T&&g&&g.size>0&&R&&R.size>0,P=[],B=o>0?t[o-1]?.goalId??null:void 0;for(let H=0;H<v.length&&P.length<r;H++){let G=v[H],W=G.goalId&&g?.has(G.goalId)?G.goalId:null;if(z){if(W&&W!==B){let w=g.get(W),U=R.get(W)??{total:0,done:0};if(P.push(jsx(Us,{goalTitle:w.title,taskCount:U.total,doneCount:U.done,width:s},`gh_${W}`)),P.length>=r)break}if(!W&&B!==null&&B!==void 0&&(P.push(jsx(Xs,{taskCount:C,width:s},"__ungrouped__")),P.length>=r))break}B=W,P.push(jsx(Box,{paddingX:2,children:jsx(Wo,{task:G,selected:H+o===n,width:s-2,agentNameMap:h,goalMap:g})},G.id));}return L&&P.length<r&&P.push(jsx(Box,{paddingX:2,children:jsxs(Text,{color:n===I?e.amber:e.ghost,children:[n===I?" \u25B8 ":" ",jsxs(Text,{color:n===I?e.amber:e.dim,children:["\u25BC"," Show all (",y," more) \u2014 press ",jsx(Text,{bold:true,color:e.gray,children:"S"})]})]})},"__show_all__")),M&&P.length<r&&P.push(jsx(Box,{paddingX:2,children:jsxs(Text,{color:n===_?e.amber:e.ghost,children:[n===_?" \u25B8 ":" ",jsx(Text,{color:n===_?e.amber:e.dim,children:"+ add task..."})]})},"__add__")),jsx(Box,{flexDirection:"column",height:r,children:P})}function td({agents:t,selectedIndex:n,scrollOffset:o=0,height:r,width:s,state:f,taskTitleMap:h,showAddRow:y,agentTeamMap:g,teamLeadSet:T,activeTeamCount:S}){let I=new Map;for(let G of Object.values(f.running))I.set(G.agent_id,G);let _=new Map;if(S&&S>0)for(let G of t){let W=g?.get(G.id);W&&_.set(W,(_.get(W)??0)+1);}let v=t.length,L=t.slice(o,o+r),M=y&&v>=o&&v<o+r,R=S!=null&&S>0,C=new Map;if(R&&T&&g){for(let G of t)if(T.has(G.id)){let W=g.get(G.id);W&&C.set(W,G.name);}}let z=0;for(let G of _.values())z+=G;let P=t.length-z,B=[],H=o>0?g?.get(t[o-1]?.id??""):void 0;for(let G=0;G<L.length&&B.length<r;G++){let W=L[G],w=g?.get(W.id);if(R&&w&&w!==H&&(B.push(jsx(Zs,{teamName:w,memberCount:_.get(w)??0,leadName:C.get(w),width:s},`ts-${w}`)),B.length>=r)||R&&!w&&H&&(B.push(jsx(Js,{memberCount:P,width:s},"ts-unassigned")),B.length>=r))break;H=w,B.push(jsx(Box,{paddingX:2,children:jsx(Ys,{agent:W,selected:G+o===n,width:s-2,runningEntry:I.get(W.id),currentTaskTitle:W.current_task?h.get(W.current_task):void 0,teamName:w,isLead:T?.has(W.id)})},W.id));}return M&&B.length<r&&B.push(jsx(Box,{paddingX:2,children:jsxs(Text,{color:n===v?e.amber:e.ghost,children:[n===v?" \u25B8 ":" ",jsx(Text,{color:n===v?e.amber:e.dim,children:"+ add agent..."})]})},"__add__")),jsx(Box,{flexDirection:"column",height:r,children:B})}function xa(t=5e3){let[n,o]=useState(Date.now());return useEffect(()=>{let r=setInterval(()=>o(Date.now()),t);return ()=>clearInterval(r)},[t]),n}function ba(t,n){let o=Math.max(0,n-t);return o<3e3?"now":o<6e4?`${Math.floor(o/1e3)}s`:o<36e5?`${Math.floor(o/6e4)}m`:`${Math.floor(o/36e5)}h`}function nd(t){if(t==="error")return e.errorBg}function Ta(t,n){switch(t){case "output":return e.white;case "tool":return e.dim;case "result":return e.dim;case "file":return e.gray;case "error":return e.red;case "lifecycle":return e.dim;case "system":return e.dim;default:return n}}function od({messages:t,height:n,agents:o,logAgentFilter:r,logTypeFilter:s,selectedIndex:f,scrollOffset:h,agentNameMap:y,agentColorMap:g,agentMsgCounts:T,taskTitleMap:S,width:I}){let _=xa(),v=useMemo(()=>t.filter(U=>{if(r.size>0&&U.agentId&&!r.has(U.agentId))return false;let ie=U.msgType??"info";return s.has(ie)}),[t,r,s]);useMemo(()=>{let U={};for(let ie of t){let oe=ie.msgType??"info";U[oe]=(U[oe]??0)+1;}return U},[t]);let M=s.size>=8?"all":s.size===1&&s.has("output")?"text":s.size===1&&s.has("error")?"errors":s.has("tool")&&!s.has("output")?"tools":s.has("lifecycle")&&!s.has("output")?"events":`${s.size} types`,R=r.size>0,C=n-2,z=f===-1?v.slice(-C):v.slice(h,h+C),P=f===-1?-1:f-h,B=Math.min(10,Math.max(6,...o.map(U=>U.name.length))),H=11+B,G=U=>{if(U===0)return true;let ie=z[U],oe=z[U-1];return ie.agentId!==oe.agentId?true:ie.agentId?ie.ts-oe.ts>3e4:false},W=Math.max(4,Math.floor((I-20)/Math.max(1,o.length))-1),w=Math.min(W,10);return jsxs(Box,{flexDirection:"column",paddingX:1,children:[jsxs(Box,{gap:0,justifyContent:"space-between",width:I,children:[jsxs(Box,{gap:0,children:[f===-1?jsxs(Box,{gap:0,children:[jsx(Text,{backgroundColor:e.successBg,color:e.green,children:" "}),jsx(Text,{backgroundColor:e.successBg,color:e.green,children:jsx(Xt,{color:e.green})}),jsx(Text,{backgroundColor:e.successBg,color:e.green,children:" LIVE "})]}):jsxs(Text,{backgroundColor:e.warnBg,color:e.amber,children:[" \u2191\u2193 ",f+1,"/",v.length," "]}),jsxs(Text,{color:e.dim,children:[" ",v.length," events"]}),M!=="all"&&jsxs(Text,{color:e.amber,children:[" f:",M]}),R&&jsxs(Text,{color:e.cyan,children:[" ",r.size,"/",o.length," agents"]})]}),jsxs(Box,{gap:0,children:[jsx(Text,{color:e.amber,bold:true,children:"a"}),jsx(Text,{color:e.dim,children:" filter "}),jsx(Text,{color:e.amber,bold:true,children:"f"}),jsx(Text,{color:e.dim,children:" type "}),jsx(Text,{color:e.amber,bold:true,children:"F"}),jsx(Text,{color:e.dim,children:" cycle"})]})]}),jsx(Box,{gap:0,children:o.map(U=>{let ie=g.get(U.id)??es[0],oe=r.size===0||r.has(U.id),ye=U.name.length>w?U.name.slice(0,w-1)+"\u2026":U.name;return jsxs(Text,{color:oe?ie:e.ghost,bold:oe,children:[" ",ye]},U.id)})}),z.length===0?jsxs(Box,{flexDirection:"column",paddingX:2,paddingTop:1,children:[jsx(Text,{color:e.dim,children:t.length===0?" \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E":"No events for current filter."}),t.length===0&&jsxs(Fragment,{children:[jsx(Text,{color:e.dim,children:" \u2502 \u2502"}),jsxs(Text,{color:e.dim,children:[" \u2502 ",jsx(Text,{color:e.ghost,children:"\u25C7"}),jsx(Text,{color:e.gray,children:" Waiting for activity "}),"\u2502"]}),jsxs(Text,{color:e.dim,children:[" \u2502 ",jsx(Text,{color:e.ghost,children:"\u2502"}),jsx(Text,{color:e.dim,children:" Run tasks or start "}),"\u2502"]}),jsxs(Text,{color:e.dim,children:[" \u2502 ",jsx(Text,{color:e.ghost,children:"\u2502"}),jsx(Text,{color:e.dim,children:" the orchestrator "}),"\u2502"]}),jsxs(Text,{color:e.dim,children:[" \u2502 ",jsx(Text,{color:e.ghost,children:"\u25C7"}),jsx(Text,{color:e.dim,children:" "}),"\u2502"]}),jsx(Text,{color:e.dim,children:" \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"})]})]}):z.map((U,ie)=>{let oe=ie===P,ye=U.msgType??"info",Ge=Xn[ye]??"\u2502",ze=U.agentId?y.get(U.agentId)??U.agentId.slice(0,8):void 0,ut=U.agentId?g.get(U.agentId):void 0,Ct=G(ie),mt=(ie>0?z[ie-1]:void 0)?.agentId===U.agentId&&!!U.agentId,Ze=!mt&&!!ze,Je=mt&&!!ze,ft=Ta(ye,U.color),ke=oe?e.infoBg:ye==="error"?e.errorBg:void 0,Gt=U.taskId?S.get(U.taskId):void 0,It=ba(U.ts,_),ht=Gt&&I>80?`#${Gt.slice(0,20)}`:"",Qe=ht?ht.length+3:0,rt=Math.max(10,I-2-H-Qe),qe=it(U.text,rt);return jsxs(Box,{backgroundColor:ke,children:[jsx(Text,{color:ut??e.ghost,children:Ct&&Ze?"\u250C":Je?"\u2502":" "}),jsx(Text,{color:oe?e.amber:void 0,children:oe?"\u25B8":" "}),jsx(Box,{width:5,children:jsx(Text,{color:It==="now"?e.green:oe?e.silver:e.ghost,children:It.padStart(4)})}),jsx(Box,{width:B+1,children:Ze?jsxs(Text,{color:ut,bold:true,children:[" ",ze.slice(0,B).padEnd(B)]}):Je?jsxs(Text,{color:ut??e.ghost,children:[" ","\xB7".padEnd(B)]}):jsxs(Text,{color:e.ghost,children:[" "," ".padEnd(B)]})}),jsxs(Text,{color:ye==="error"?e.red:ut??e.dim,children:[" ",Ge," "]}),jsx(Text,{color:oe?e.white:ft,bold:oe||ye==="lifecycle",children:qe}),ht&&jsxs(Text,{color:e.ghost,children:[" ",jsx(Text,{color:e.dim,backgroundColor:e.void,children:` ${ht} `})]})]},ie)})]})}function rd({messages:t,height:n,width:o,agents:r,agentNameMap:s,agentColorMap:f}){let h=xa(),y=t.slice(-n),g=Math.max(10,o-2-17),T=Math.max(0,n-y.length),S=0,I=[];for(let _=0;_<y.length;_++)_>0&&y[_].agentId!==y[_-1].agentId&&S++,I.push(S);return jsxs(Box,{flexDirection:"column",paddingX:1,children:[T>0&&jsx(Box,{height:T}),y.map((_,v)=>{let L=_.agentId?s.get(_.agentId)??_.agentId.slice(0,8):void 0,M=_.agentId?f.get(_.agentId):void 0,R=_.msgType??"info",C=Xn[R]??"\u2502",z=Ta(R,_.color),B=(v>0?y[v-1]:void 0)?.agentId===_.agentId&&!!_.agentId,H=(I[v]&1)===1,G=nd(R)??(H?"#1a1a1a":void 0),W=ba(_.ts,h),w=it(_.text,g);return jsxs(Box,{backgroundColor:G,children:[jsx(Text,{color:M??e.ghost,children:!B&&L?"\u258D":B?"\u258F":" "}),jsx(Box,{width:5,children:jsx(Text,{color:B?e.ghost:W==="now"?e.green:e.dim,children:B?" ":W.padStart(4)})}),jsx(Box,{width:9,children:L&&!B?jsxs(Text,{color:M,bold:true,children:[" ",L.slice(0,8)]}):jsx(Text,{color:e.ghost,children:Kc})}),jsxs(Text,{color:R==="error"?e.red:B?e.ghost:M??e.dim,children:[C," "]}),jsx(Text,{color:z,children:w})]},v)})]})}function sd({message:t,height:n,width:o,agents:r,agentNameMap:s,agentColorMap:f,taskTitleMap:h}){let y=t.detail??t.text,g=t.msgType??"info",T=t.agentId?s.get(t.agentId)??t.agentId.slice(0,8):void 0,S=t.agentId?f.get(t.agentId):e.dim,I=t.taskId?h.get(t.taskId):void 0,_,v=false;try{let C=JSON.parse(y);_=JSON.stringify(C,null,2),v=!0;}catch{_=y;}let L=Math.max(4,o-6),M=Math.max(1,n-4),R=_.split(`
15
+ `).slice(0,M);return jsxs(Box,{flexDirection:"column",paddingX:1,children:[jsx(Box,{children:jsxs(Text,{color:e.ghost,children:["\u256D",be(L+2),"\u256E"]})}),jsxs(Box,{children:[jsx(Text,{color:e.ghost,children:"\u2502 "}),jsx(Text,{color:e.dim,children:t.time}),jsx(Text,{color:e.ghost,children:" \u2502 "}),T&&jsx(Text,{color:S,bold:true,children:T}),T&&jsx(Text,{color:e.ghost,children:" \u2502 "}),jsxs(Text,{color:Xn[g]?g==="error"?e.red:e.dim:e.dim,children:[Xn[g]??"\u2502"," ",g]}),I&&jsxs(Fragment,{children:[jsx(Text,{color:e.ghost,children:" \u2502 "}),jsxs(Text,{color:e.dim,children:["#",I.slice(0,30)]})]})]}),jsxs(Box,{children:[jsx(Text,{color:e.ghost,children:"\u2502 "}),jsx(Text,{color:t.color,bold:true,wrap:"truncate",children:t.text.slice(0,L)})]}),jsx(Box,{children:jsxs(Text,{color:e.ghost,children:["\u251C",be(L+2),"\u2524"]})}),R.map((C,z)=>jsxs(Box,{children:[jsx(Text,{color:e.ghost,children:"\u2502 "}),v&&jsxs(Text,{color:e.ghost,children:[String(z+1).padStart(3)," "]}),jsx(Text,{wrap:"truncate",color:v&&C.includes('"')?e.cyan:v&&/^\s*[}\]]/.test(C)?e.ghost:C.startsWith("error")||C.startsWith("Error")?e.red:e.silver,children:C.slice(0,v?L-4:L)})]},z)),jsx(Box,{children:jsxs(Text,{color:e.ghost,children:["\u2570",be(L+2),"\u256F"]})})]})}function ar({label:t,width:n,suffix:o,suffixLen:r=0}){let s=` ${t} `,f=3,h=f+s.length+2;if(!o){let T=Math.max(0,n-h);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(f)}),jsx(Text,{backgroundColor:"#1a1a22",color:e.dim,bold:true,children:s}),jsx(Text,{color:e.ghost,children:Ue(T)})]})}let y=2,g=Math.max(0,n-h-y-r);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(f)}),jsx(Text,{backgroundColor:"#1a1a22",color:e.dim,bold:true,children:s}),jsx(Text,{color:e.ghost,children:Ue(y)}),o,jsx(Text,{color:e.ghost,children:Ue(g)})]})}function id({task:t,width:n,resizeHint:o}){let r=" DETAIL ",s=o?` ${o} `:"",f=n-r.length-s.length-10,h=t.title.length>f?t.title.slice(0,f-3)+"...":t.title,y=Math.max(0,n-3-r.length-h.length-s.length-4);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(3)}),jsx(Text,{backgroundColor:"#2d1f0a",color:e.amber,bold:true,children:r}),jsxs(Text,{color:e.ghost,children:[Po," "]}),jsx(Text,{color:e.white,bold:true,children:h}),jsxs(Text,{color:e.ghost,children:[" ",Ue(Math.max(0,y))]}),s?jsx(Text,{color:e.dim,children:s}):null]})}function ad({agent:t,width:n,resizeHint:o}){let r=" AGENT ",s=o?` ${o} `:"",f=n-r.length-s.length-10,h=t.name.length>f?t.name.slice(0,f-3)+"...":t.name,y=Math.max(0,n-3-r.length-h.length-s.length-4);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(3)}),jsx(Text,{backgroundColor:"#0f2d1f",color:e.green,bold:true,children:r}),jsxs(Text,{color:e.ghost,children:[Po," "]}),jsx(Text,{color:e.green,bold:true,children:h}),jsxs(Text,{color:e.ghost,children:[" ",Ue(Math.max(0,y))]}),s?jsx(Text,{color:e.dim,children:s}):null]})}function ld({agent:t,height:n$1,state:o,taskTitleMap:r,teamName:s}){let f=cd[t.status]??e.dim;Object.values(o.running).find(T=>T.agent_id===t.id);let y=t.current_task?r.get(t.current_task):void 0,g$1=24;return jsxs(Box,{flexDirection:"column",paddingX:2,children:[jsxs(Box,{children:[jsxs(Box,{width:g$1,children:[jsx(Text,{color:e.dim,children:" status "}),jsx(Text,{color:f,children:t.status})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" adapter "}),jsx(Text,{color:e.cyan,children:t.adapter})]})]}),jsxs(Box,{children:[jsxs(Box,{width:g$1,children:[jsx(Text,{color:e.dim,children:" model "}),jsx(Text,{children:t.config.model??"\u2014"})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" task "}),jsx(Text,{color:y?e.white:e.dim,children:y??"\u2014"})]})]}),jsxs(Box,{children:[jsxs(Box,{width:g$1,children:[jsx(Text,{color:e.dim,children:" runs "}),jsx(Text,{children:t.stats.total_runs}),jsx(Text,{color:e.dim,children:" ("}),jsx(Text,{color:e.green,children:t.stats.tasks_completed}),jsx(Text,{color:e.dim,children:"/"}),jsx(Text,{color:t.stats.tasks_failed>0?e.red:e.dim,children:t.stats.tasks_failed}),jsx(Text,{color:e.dim,children:")"})]}),jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" team "}),jsx(Text,{color:s?e.amber:e.dim,children:s??"\u2014"})]})]}),t.autonomous&&jsx(Box,{children:jsxs(Box,{width:g$1,children:[jsx(Text,{color:e.dim,children:" auto "}),jsxs(Text,{color:e.cyan,children:[bn," ON"]})]})}),t.config.skills&&t.config.skills.length>0&&jsxs(Box,{children:[jsx(Text,{color:e.dim,children:" skills "}),jsx(Text,{color:e.cyan,wrap:"truncate",children:it(t.config.skills.join(", "),500)})]}),t.last_error&&(()=>{let T=t.last_error.kind,S=n[T],I=!S||T==="unknown",_=t.last_error.timestamp,v=_?g(_)+" ago":"";return jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Box,{flexDirection:"column",borderStyle:"single",borderColor:e.red,paddingX:1,children:[jsxs(Text,{color:e.red,bold:true,children:["\u26A0"," \u041E\u0448\u0438\u0431\u043A\u0430"]}),S&&jsx(Text,{color:e.white,children:S.message}),S&&jsx(Text,{color:e.cyan,children:S.fix}),S?.doctorHint&&jsx(Text,{color:e.yellow,children:"\u0414\u0438\u0430\u0433\u043D\u043E\u0441\u0442\u0438\u043A\u0430: orch doctor"}),I&&t.last_error.message&&jsx(Text,{color:e.dim,children:it(t.last_error.message,120)}),v&&jsx(Text,{color:e.dim,children:v})]})]})})(),jsx(Text,{children:" "}),t.role?t.role.split(`
16
+ `).slice(0,Math.max(1,n$1-(t.last_error?10:4))).map((T,S)=>jsxs(Text,{color:e.silver,wrap:"truncate",children:[" ",it(T,500)]},S)):jsx(Text,{color:e.dim,children:" No role description."})]})}var cd={idle:e.dim,running:e.green,error:e.red,disabled:e.ghost};function dd({mode:t,width:n}){let r=` ${t==="command"?"COMMAND":"NEW TASK"} `,s=Math.max(0,n-3-r.length-2);return jsxs(Box,{paddingX:1,children:[jsx(Text,{color:e.ghost,children:Ue(3)}),jsx(Text,{backgroundColor:"#2d1f0a",color:e.amber,bold:true,children:r}),jsx(Text,{color:e.ghost,children:Ue(s)})]})}function ud({mode:t,cursor:n,width:o}){let r=t==="command"?"/ ":"\u25B8 ";return jsx(Box,{paddingX:2,children:jsx(qo,{cursor:n,width:Math.max(10,o-4),prefix:r})})}function ya(t,n){if(!n||typeof n!="object")return "";let o=n;if(o.file_path&&typeof o.file_path=="string")return o.file_path.split("/").slice(-2).join("/");if(o.command&&typeof o.command=="string")return o.command.slice(0,60);if(o.pattern&&typeof o.pattern=="string")return `"${o.pattern.slice(0,40)}"`;if(o.glob&&typeof o.glob=="string")return o.glob.slice(0,40);let r=JSON.stringify(o);return r.length>80?r.slice(0,77)+"...":r}function lr(t,n=200){if(typeof t=="string")return t.slice(0,n);if(!Array.isArray(t))return null;let o=[],r=0;for(let s of t){if(r>=n)break;if(s?.type==="text"&&typeof s.text=="string"){let f=s.text.split(`
17
+ `).find(h=>h.trim().length>0)??"";o.push(f.slice(0,n-r)),r+=f.length;}else if(s?.type==="tool_use"){let f=ya(s.name??"tool",s.input),h=`\u2699 ${s.name??"tool"}(${f})`;o.push(h),r+=h.length;}else if(s?.type==="tool_result")o.push("\u2190 (result)"),r+=10;else if(s?.type==="thinking"&&typeof s.thinking=="string"){let f=s.thinking.slice(0,60).split(`
18
+ `)[0]??"";o.push(`\u{1F4AD} ${f}`),r+=f.length+3;}}return o.length>0?o.join(" "):null}function ma(t){if(typeof t=="string"){let o=t.split(`
19
+ `),r=o.find(s=>/\S/.test(s))??"";return o.length>3?`${r.slice(0,80)}... (${o.length} lines)`:r.slice(0,120)}if(!Array.isArray(t))return "(result)";let n=[];for(let o of t)if(o?.type==="tool_result"){o.tool_use_id?o.tool_use_id.slice(0,8):"";let s=o.is_error,f=typeof o.content=="string"?o.content:"",h=f.split(`
20
+ `).length;s?n.push(`\u2715 error: ${f.slice(0,60)}`):h>3?n.push(`\u2713 ${h} lines`):n.push(`\u2713 ${f.slice(0,80)}`);}else o?.type==="text"&&typeof o.text=="string"&&n.push(o.text.split(`
21
+ `)[0]?.slice(0,80)??"");return n.join(" ")||"(result)"}function cr(t,n){return t.indexOf(`
22
+ `)===-1?t.slice(0,n):(t.split(`
23
+ `).find(o=>/\S/.test(o))??t).slice(0,n)}function wa(t){let n=()=>t.length>gr?t.slice(0,gr)+"\u2026":t;if(pa.test(t.trim()))return {summary:t.trim(),detail:n()};try{let o=JSON.parse(t);if(typeof o.text=="string"&&o.text.length>0&&!o.type&&!o.role)return {summary:cr(o.text,200),detail:n()};if(typeof o.command=="string"&&!o.type){let r=typeof o.result=="string"&&o.result?` \u2192 ${cr(o.result,80)}`:"";return {summary:`$ ${o.command.slice(0,120)}${r}`,detail:n()}}if(Array.isArray(o.paths)&&o.paths.length>0&&!o.type)return {summary:`${Xn.file} ${o.paths.join(", ").slice(0,180)}`,detail:n()};if(typeof o.message=="string"&&!o.role&&!o.content&&!o.subtype)return {summary:`${Xn.error} ${cr(o.message,200)}`,detail:n()};if(typeof o.result=="string"&&!o.type)return {summary:`\u2713 ${cr(o.result,200)}`,detail:n()};if(o.type==="message"&&o.role==="assistant"){let r=lr(o.content);return r?{summary:r.slice(0,200),detail:n()}:{summary:null,detail:""}}if(o.type==="assistant"||o.role==="assistant"){let r=o.message?.content??o.content,s=lr(r);return s?{summary:s.slice(0,200),detail:n()}:{summary:null,detail:""}}if(o.type==="user"||o.role==="user"){let r=o.message?.content??o.content;return {summary:`\u2190 ${ma(r).slice(0,180)}`,detail:n()}}if(o.type==="tool_use"||typeof o.name=="string"&&"input"in o){let r=o.name??"tool",s=ya(r,o.input);return {summary:`\u2699 ${r}(${s})`,detail:n()}}if(o.type==="tool_result")return {summary:`\u2190 ${ma(o.content).slice(0,180)}`,detail:n()};if(o.type==="result"){let r=typeof o.result=="string"?o.result:null;return {summary:r?`\u2713 ${r.slice(0,180)}`:"\u2713 Agent finished",detail:n()}}if(o.type==="rate_limit_event")return {summary:`\u23F3 Rate limited (${o.rate_limit_info?.rateLimitType??"unknown"})`,detail:n()};if(o.subtype){if(o.message){let r=o.message.content??o.message,s=lr(r);if(s)return {summary:s.slice(0,200),detail:n()}}return {summary:`[${o.subtype}]`,detail:n()}}if(o.content){let r=lr(o.content);if(r)return {summary:r.slice(0,200),detail:n()}}return o.type?{summary:`[${o.type}]`,detail:n()}:{summary:t.slice(0,150),detail:n()}}catch{return {summary:gd(t),detail:n()}}}function gd(t){let n=t.match(/"subtype"\s*:\s*"([^"]+)"/);if(n)return `[${n[1]}]`;let o=t.match(/"type"\s*:\s*"([^"]+)"/),r=t.match(/"role"\s*:\s*"([^"]+)"/),s=o?.[1],f=r?.[1];if(!s&&!f)return t.slice(0,200);if(s==="assistant"||s==="message"||f==="assistant"){let h=t.match(/"text"\s*:\s*"((?:[^"\\]|\\.)*)"/);if(h)try{return JSON.parse(`"${h[1]}"`).slice(0,200)}catch{}return "\u{1F4AC} (assistant)"}if(s==="user"||s==="tool_result"||f==="user")return "\u2190 (tool result)";if(s==="tool_use")return `\u2699 ${t.match(/"name"\s*:\s*"([^"]+)"/)?.[1]??"tool"}()`;if(s==="result"){let h=t.match(/"result"\s*:\s*"((?:[^"\\]|\\.)*)"/);if(h)try{return `\u2713 ${JSON.parse(`"${h[1]}"`).slice(0,180)}`}catch{}return "\u2713 Agent finished"}return s==="rate_limit_event"?"\u23F3 Rate limited":`[${s??f}]`}function md(t,n,o,r){let s=f=>r?.get(f);switch(t.type){case "agent:started":n("Started task",e.green,{agentId:t.agentId,taskId:t.taskId,msgType:"lifecycle"});break;case "agent:output":{let{summary:f,detail:h}=wa(t.data);if(f){let y=ha(f);n(f,y.color,{agentId:t.agentId,taskId:s(t.runId),detail:h,msgType:y.msgType});}break}case "agent:file_changed":n(`${t.path}`,e.purple,{agentId:t.agentId,taskId:s(t.runId),msgType:"file"});break;case "agent:completed":n(t.success?"Completed successfully":"Failed",t.success?e.green:e.red,{agentId:t.agentId,taskId:s(t.runId),msgType:"lifecycle"});break;case "agent:error":n(`${t.error.slice(0,150)}`,e.red,{agentId:t.agentId,taskId:s(t.runId),detail:t.error,msgType:"error"});break;case "task:status_changed":n(`${t.from} \u2192 ${t.to}`,e.cyan,{taskId:t.taskId,msgType:"system"});break;case "task:assigned":n(`Assigned \u2192 ${t.agentId}`,e.cyan,{taskId:t.taskId,msgType:"system"});break;case "task:created":n(`Created: ${t.task.title}`,e.amber,{taskId:t.task.id,msgType:"system"});break;case "run:retry":n(`Retry #${t.attempt} (${Math.round(t.delay_ms/1e3)}s delay)`,e.yellow,{agentId:o?.get(t.runId),taskId:s(t.runId),msgType:"lifecycle"});break;case "orchestrator:tick":(t.running>0||t.queued>0)&&n(`${t.running} running \xB7 ${t.queued} queued`,e.ghost,{msgType:"system"});break;case "orchestrator:stall_detected":n("Stall detected",e.yellow,{agentId:o?.get(t.runId),taskId:s(t.runId),msgType:"error"});break;case "task:cascade_failed":n(`Cascade failed (dep: ${t.failedDependencyId})`,e.red,{taskId:t.taskId,detail:t.reason,msgType:"error"});break}}export{Ug as App,Hg as _resetPendingDeletionSeq};
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import {a as a$1,b,i}from'./chunk-64WUDYEM.js';import {a as a$3,e}from'./chunk-6E6DC7OE.js';import {k as k$1}from'./chunk-ZMLF5HI5.js';import {a as a$2,b as b$1}from'./chunk-LRYVT4D4.js';import R from'path';import {Command}from'commander';function l(o){let t=o.noColor||"NO_COLOR"in process.env||false,i=o.ascii||process.env.TERM==="dumb"||false;return {projectRoot:e(),json:o.json??false,quiet:o.quiet??false,noColor:t,ascii:i}}var d={task:async(o,t)=>{(await import('./task-V72DFC6L.js')).registerTaskCommand(o,t);},agent:async(o,t)=>{(await import('./agent-6ADS3VE2.js')).registerAgentCommand(o,t);},status:async(o,t)=>{(await import('./status-NYHZ7Q5G.js')).registerStatusCommand(o,t);},logs:async(o,t)=>{(await import('./logs-EUOQ2UZL.js')).registerLogsCommand(o,t);},config:async(o,t)=>{(await import('./config-OOB7QEKM.js')).registerConfigCommand(o,t);},context:async(o,t)=>{(await import('./context-FXRERFSP.js')).registerContextCommand(o,t);},msg:async(o,t)=>{(await import('./msg-4ELI7Q52.js')).registerMsgCommand(o,t);},goal:async(o,t)=>{(await import('./goal-KQ4XOSRH.js')).registerGoalCommand(o,t);},team:async(o,t)=>{(await import('./team-VCJSUDWX.js')).registerTeamCommand(o,t);},org:async(o,t)=>{(await import('./org-T5DCYQI6.js')).registerOrgCommand(o,t);}},m={run:async(o,t)=>{(await import('./run-PX7O3ILN.js')).registerRunCommand(o,t);},doctor:async(o,t)=>{(await import('./doctor-X2D67Q6Q.js')).registerDoctorCommand(o,t);},tui:async(o,t)=>{(await import('./tui-GFT7LF67.js')).registerTuiCommand(o,t);},serve:async(o,t)=>{(await import('./serve-DE7ES7Q5.js')).registerServeCommand(o,t);}},a=new Command;a.name("orchestry").description("Agents Organizations \u2014 CLI orchestrator for AI agents").version("1.0.26").option("--json","Output as JSON").option("--quiet","Minimal output (IDs only)").option("--no-color","Disable colors").option("--ascii","ASCII-only output (no Unicode)").hook("preAction",async o=>{let t=o.opts();t.ascii&&a$1(true),t.color===false&&b(true);});var x=[["task","Manage tasks"],["agent","Manage agents"],["status","Show orchestrator status"],["logs","View run logs"],["config","Manage configuration"],["context","Shared context store for inter-agent data exchange"],["msg","Inter-agent messaging"],["goal","Manage goals"],["team","Manage teams"],["org","Pre-built AI companies"],["run","Run tasks"],["doctor","Check adapters and dependencies"],["tui","Launch TUI dashboard"],["serve","Headless daemon mode with structured logs"],["init","Initialize project"],["update","Check for updates"]],L=new Set(x.map(([o])=>o));async function k(){a.parseOptions(process.argv);let o=a.opts(),t=process.argv.slice(2).find(e=>!e.startsWith("-")),i$1=t!==void 0&&L.has(t);if((process.argv.includes("--help")||process.argv.includes("-h")||process.argv.includes("--version")||process.argv.includes("-V"))&&!i$1){for(let[e,n]of x)a.command(e).description(n);await a.parseAsync(process.argv);return}if(t==="init"){let{registerInitCommand:e}=await import('./init-CPL6DJ7W.js');e(a);}else if(t==="update"){let{registerUpdateCommand:e}=await import('./update-W54LAATS.js');e(a);}let g=process.argv.length<=2;if(g&&!await k$1(R.join(process.cwd(),a$3))){let{runInit:e}=await import('./init-CPL6DJ7W.js');await e();let n=l({json:o.json,quiet:o.quiet,noColor:o.color===false,ascii:o.ascii}),{buildFullContainer:s}=await import('./container-WJJQSUHB.js'),p=await s(n);await m.tui(a,p),await a.parseAsync([...process.argv,"tui"]);return}let u=l({json:o.json,quiet:o.quiet,noColor:o.color===false,ascii:o.ascii}),j=!t||t in m,{buildFullContainer:A,buildLightContainer:M}=await import('./container-WJJQSUHB.js');try{if(j){let e=await A(u),n=t?m[t]:void 0;n?await n(a,e):await Promise.all(Object.values(m).map(p=>p(a,e)));let s=t?d[t]:void 0;s&&await s(a,e);}else {let e=await M(u),n=d[t];n?await n(a,e):await Promise.all(Object.values(d).map(s=>s(a,e)));}}catch(e){if(e instanceof b$1){if(t==="doctor"){let{registerDoctorCommand:n}=await import('./doctor-X2D67Q6Q.js');n(a);}if(t==="init"||t==="doctor"||t==="update"){await a.parseAsync(process.argv);return}i(e.message,e.hint),process.exit(e.exitCode);}throw e}g&&process.argv.push("tui");let r,f=t==="tui"||t==="update"||t==="serve",S=f?Promise.resolve(null):import('./update-check-R5ABF6HE.js').then(e=>(r=e,e.checkForUpdateSWR(a.version()??"0.0.0")));if(await a.parseAsync(process.argv),!f){let e=await S;e&&r&&(r.printUpdateNotification(e),e.updateAvailable&&r.backgroundInstall(e.latest).catch(()=>{}));}}k().catch(o=>{o instanceof a$2&&(i(o.message,o.hint),process.exit(o.exitCode)),i(o instanceof Error?o.message:String(o)),process.env.ORCHESTRY_DEBUG&&console.error(o),process.exit(1);});
2
+ import {a as a$1,b,i}from'./chunk-64WUDYEM.js';import {a as a$3,e}from'./chunk-6E6DC7OE.js';import {k as k$1}from'./chunk-ZMLF5HI5.js';import {a as a$2,b as b$1}from'./chunk-LRYVT4D4.js';import R from'path';import {Command}from'commander';function l(o){let t=o.noColor||"NO_COLOR"in process.env||false,i=o.ascii||process.env.TERM==="dumb"||false;return {projectRoot:e(),json:o.json??false,quiet:o.quiet??false,noColor:t,ascii:i}}var d={task:async(o,t)=>{(await import('./task-XTZZZBBJ.js')).registerTaskCommand(o,t);},agent:async(o,t)=>{(await import('./agent-6ADS3VE2.js')).registerAgentCommand(o,t);},status:async(o,t)=>{(await import('./status-NYHZ7Q5G.js')).registerStatusCommand(o,t);},logs:async(o,t)=>{(await import('./logs-EUOQ2UZL.js')).registerLogsCommand(o,t);},config:async(o,t)=>{(await import('./config-OOB7QEKM.js')).registerConfigCommand(o,t);},context:async(o,t)=>{(await import('./context-FXRERFSP.js')).registerContextCommand(o,t);},msg:async(o,t)=>{(await import('./msg-4ELI7Q52.js')).registerMsgCommand(o,t);},goal:async(o,t)=>{(await import('./goal-KQ4XOSRH.js')).registerGoalCommand(o,t);},team:async(o,t)=>{(await import('./team-VCJSUDWX.js')).registerTeamCommand(o,t);},org:async(o,t)=>{(await import('./org-T5DCYQI6.js')).registerOrgCommand(o,t);}},m={run:async(o,t)=>{(await import('./run-PX7O3ILN.js')).registerRunCommand(o,t);},doctor:async(o,t)=>{(await import('./doctor-X2D67Q6Q.js')).registerDoctorCommand(o,t);},tui:async(o,t)=>{(await import('./tui-25JIN7MP.js')).registerTuiCommand(o,t);},serve:async(o,t)=>{(await import('./serve-DE7ES7Q5.js')).registerServeCommand(o,t);}},a=new Command;a.name("orchestry").description("Agents Organizations \u2014 CLI orchestrator for AI agents").version("1.0.27").option("--json","Output as JSON").option("--quiet","Minimal output (IDs only)").option("--no-color","Disable colors").option("--ascii","ASCII-only output (no Unicode)").hook("preAction",async o=>{let t=o.opts();t.ascii&&a$1(true),t.color===false&&b(true);});var x=[["task","Manage tasks"],["agent","Manage agents"],["status","Show orchestrator status"],["logs","View run logs"],["config","Manage configuration"],["context","Shared context store for inter-agent data exchange"],["msg","Inter-agent messaging"],["goal","Manage goals"],["team","Manage teams"],["org","Pre-built AI companies"],["run","Run tasks"],["doctor","Check adapters and dependencies"],["tui","Launch TUI dashboard"],["serve","Headless daemon mode with structured logs"],["init","Initialize project"],["update","Check for updates"]],L=new Set(x.map(([o])=>o));async function k(){a.parseOptions(process.argv);let o=a.opts(),t=process.argv.slice(2).find(e=>!e.startsWith("-")),i$1=t!==void 0&&L.has(t);if((process.argv.includes("--help")||process.argv.includes("-h")||process.argv.includes("--version")||process.argv.includes("-V"))&&!i$1){for(let[e,n]of x)a.command(e).description(n);await a.parseAsync(process.argv);return}if(t==="init"){let{registerInitCommand:e}=await import('./init-CPL6DJ7W.js');e(a);}else if(t==="update"){let{registerUpdateCommand:e}=await import('./update-W54LAATS.js');e(a);}let g=process.argv.length<=2;if(g&&!await k$1(R.join(process.cwd(),a$3))){let{runInit:e}=await import('./init-CPL6DJ7W.js');await e();let n=l({json:o.json,quiet:o.quiet,noColor:o.color===false,ascii:o.ascii}),{buildFullContainer:s}=await import('./container-TQGRDHAU.js'),p=await s(n);await m.tui(a,p),await a.parseAsync([...process.argv,"tui"]);return}let u=l({json:o.json,quiet:o.quiet,noColor:o.color===false,ascii:o.ascii}),j=!t||t in m,{buildFullContainer:A,buildLightContainer:M}=await import('./container-TQGRDHAU.js');try{if(j){let e=await A(u),n=t?m[t]:void 0;n?await n(a,e):await Promise.all(Object.values(m).map(p=>p(a,e)));let s=t?d[t]:void 0;s&&await s(a,e);}else {let e=await M(u),n=d[t];n?await n(a,e):await Promise.all(Object.values(d).map(s=>s(a,e)));}}catch(e){if(e instanceof b$1){if(t==="doctor"){let{registerDoctorCommand:n}=await import('./doctor-X2D67Q6Q.js');n(a);}if(t==="init"||t==="doctor"||t==="update"){await a.parseAsync(process.argv);return}i(e.message,e.hint),process.exit(e.exitCode);}throw e}g&&process.argv.push("tui");let r,f=t==="tui"||t==="update"||t==="serve",S=f?Promise.resolve(null):import('./update-check-R5ABF6HE.js').then(e=>(r=e,e.checkForUpdateSWR(a.version()??"0.0.0")));if(await a.parseAsync(process.argv),!f){let e=await S;e&&r&&(r.printUpdateNotification(e),e.updateAvailable&&r.backgroundInstall(e.latest).catch(()=>{}));}}k().catch(o=>{o instanceof a$2&&(i(o.message,o.hint),process.exit(o.exitCode)),i(o instanceof Error?o.message:String(o)),process.env.ORCHESTRY_DEBUG&&console.error(o),process.exit(1);});
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  import {a as a$2}from'./chunk-N4OXN2HW.js';import {c as c$1,b as b$3}from'./chunk-HXOMNULD.js';import {b as b$2,a as a$1}from'./chunk-KR7VDF23.js';import {a}from'./chunk-CHRW4CLD.js';import {b}from'./chunk-6E6DC7OE.js';import {b as b$1,c,j as j$1,d,e,l as l$1,f as f$1,h,i as i$1,g as g$1,k as k$1}from'./chunk-ZMLF5HI5.js';import {c as c$2,l,j as j$2,k,g,f,i}from'./chunk-LRYVT4D4.js';import tt from'path';import Z,{mkdir}from'fs/promises';import {createReadStream}from'fs';import {homedir}from'os';import {nanoid}from'nanoid';var P={tui:{activity_filter:"all",notifications:{toast:true,bell:false}}};var w=class{indexPath;dir;ext;itemPath;fileFilter;readItemFn;mutex=Promise.resolve();insideMutex=false;constructor(t){this.dir=t.dir,this.ext=t.ext,this.itemPath=t.itemPath,this.indexPath=tt.join(t.dir,"_index.json"),this.fileFilter=t.fileFilter??(()=>true),t.readItem?this.readItemFn=t.readItem:t.ext===".yml"?this.readItemFn=e=>b$1(e):this.readItemFn=e=>d(e);}async readIndex(){try{let t=await d(this.indexPath);if(Array.isArray(t))return t}catch{}return this.rebuildIndex()}async rebuildIndex(){await j$1(this.dir);let t=await l$1(this.dir,this.ext),e=await Promise.all(t.filter(this.fileFilter).map(s=>{let a=s.replace(this.ext,"");return this.readItemFn(this.itemPath(a))})),r=[];for(let s of e)s!=null&&r.push(s);return this.insideMutex?await this.writeIndexUnsafe(r):await this.withMutex(()=>this.writeIndexUnsafe(r)),r}async writeIndex(t){return this.withMutex(()=>this.writeIndexUnsafe(t))}async updateIndex(t){return this.withMutex(async()=>{let e=await this.readIndex(),r=t(e);await this.writeIndexUnsafe(r);})}async writeIndexUnsafe(t){await j$1(this.dir),await e(this.indexPath,t);}withMutex(t){let e,r=new Promise(a=>{e=a;}),s=this.mutex;return this.mutex=r,s.then(async()=>{this.insideMutex=true;try{return await t()}finally{this.insideMutex=false,e();}})}};var C=class{constructor(t){this.paths=t;this.index=new w({dir:t.tasksDir,ext:".yml",itemPath:e=>t.taskPath(e)});}index;async list(t){return (await this.index.readIndex()).filter(s=>s!==null&&(!t?.status||s.status===t.status)&&(!t?.goalId||s.goalId===t.goalId)).sort((s,a)=>{let n=wt(s.status)-wt(a.status);if(n!==0)return n;let i=a.updated_at??"",o=s.updated_at??"";return i<o?-1:i>o?1:0})}async get(t){return b$1(this.paths.taskPath(t))}async save(t){await j$1(this.paths.tasksDir),await c(this.paths.taskPath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async delete(t){try{await Z.unlink(this.paths.taskPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}};function wt(m){return {in_progress:0,retrying:1,review:2,todo:3,done:4,failed:5,cancelled:6}[m]}var j=class{constructor(t){this.paths=t;this.index=new w({dir:t.agentsDir,ext:".yml",itemPath:e=>t.agentPath(e)});}index;async list(){return this.index.readIndex()}async get(t){return b$1(this.paths.agentPath(t))}async getByName(t){return (await this.list()).find(r=>r.name===t)??null}async save(t){await j$1(this.paths.agentsDir),await c(this.paths.agentPath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async delete(t){try{await Z.unlink(this.paths.agentPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}};var M=class{constructor(t){this.paths=t;}async save(t){await j$1(this.paths.runsDir),await e(this.paths.runPath(t.id),t);}async get(t){return d(this.paths.runPath(t))}async listAll(){return this.listFiltered(()=>true)}async listForTask(t){return this.listFiltered(e=>e.task_id===t)}async listForAgent(t){return this.listFiltered(e=>e.agent_id===t)}async appendEvent(t,e){await j$1(this.paths.runsDir),await f$1(this.paths.runEventsPath(t),e);}async readEvents(t){return h(this.paths.runEventsPath(t))}async readEventsTail(t,e){return i$1(this.paths.runEventsPath(t),e)}closeRunEvents(t){g$1(this.paths.runEventsPath(t));}async*streamEvents(t,e){let r=this.paths.runEventsPath(t),s=Date.now()+3e4;for(;!e?.aborted&&Date.now()<s&&!await k$1(r);)await new Promise(i=>setTimeout(i,100));if(e?.aborted||Date.now()>=s)return;let a=createReadStream(r),{readLines:n}=await import('./process-manager-33H27MQF.js');try{for await(let i of n(a)){if(e?.aborted)break;if(i.trim())try{yield JSON.parse(i);}catch{process.stderr.write(`[RunStore] skipping corrupt JSONL line: ${i.slice(0,200)}
3
- `);}}}finally{a.destroy();}}async listFiltered(t){await j$1(this.paths.runsDir);let e=await l$1(this.paths.runsDir,".json"),r=64,s=[];for(let a=0;a<e.length;a+=r){let n=e.slice(a,a+r),i=await Promise.all(n.map(o=>{let c=o.endsWith(".json")?o.slice(0,-5):o;return d(this.paths.runPath(c))}));for(let o of i)o!==null&&t(o)&&s.push(o);}return s.sort((a,n)=>new Date(n.started_at).getTime()-new Date(a.started_at).getTime())}};var Q={version:1,onboardingCompleted:false,running:{},claimed:new Set,retry_queue:[],stats:{total_runs:0,total_tasks_completed:0,total_tasks_failed:0,total_tokens:{input:0,output:0,reasoning:0,total:0,cache_read:0,cache_write:0},total_runtime_ms:0}};var D=class{constructor(t){this.paths=t;}async read(){let t=await d(this.paths.statePath);if(!t)return structuredClone(Q);let e=structuredClone(Q);return {version:t.version??e.version,pid:t.pid,started_at:t.started_at,onboardingCompleted:typeof t.onboardingCompleted=="boolean"?t.onboardingCompleted:false,running:t.running&&typeof t.running=="object"?t.running:e.running,claimed:Array.isArray(t.claimed)?new Set(t.claimed):new Set(e.claimed),retry_queue:Array.isArray(t.retry_queue)?t.retry_queue:e.retry_queue,stats:{total_runs:t.stats?.total_runs??e.stats.total_runs,total_tasks_completed:t.stats?.total_tasks_completed??e.stats.total_tasks_completed,total_tasks_failed:t.stats?.total_tasks_failed??e.stats.total_tasks_failed,total_tokens:{...e.stats.total_tokens,...t.stats?.total_tokens??{}},total_runtime_ms:t.stats?.total_runtime_ms??e.stats.total_runtime_ms}}}async write(t){let e$1={...t,claimed:Array.from(t.claimed)};await e(this.paths.statePath,e$1);}};var R=class{constructor(t){this.paths=t;}async read(){let t=await b$1(this.paths.configPath);return yt(a$2,t??{})}async write(t){await c(this.paths.configPath,t);}async get(t){let e=await this.read();return Dt(e,t)}async set(t,e){let r=await this.read();Rt(r,t,e),await this.write(r);}};function Dt(m,t){let e=t.split("."),r=m;for(let s of e){if(r==null||typeof r!="object")return;r=r[s];}return r}function Rt(m,t,e){let r=t.split("."),s=m;for(let n=0;n<r.length-1;n++){let i=r[n];(typeof s[i]!="object"||s[i]===null)&&(s[i]={}),s=s[i];}let a=r[r.length-1];s[a]=e;}function yt(m,t){let e={...m};for(let r of Object.keys(t)){let s=t[r],a=e[r];s!=null&&typeof s=="object"&&!Array.isArray(s)&&typeof a=="object"&&a!==null&&!Array.isArray(a)?e[r]=yt(a,s):e[r]=s;}return e}var _t=tt.join(homedir(),".orchestry"),St=tt.join(_t,"global.yml"),O=class{async read(){let t=await b$1(St);if(!t)return {...P,tui:{...P.tui,notifications:{...P.tui.notifications}}};let e=t.tui,r=e?.notifications;return {tui:{activity_filter:e?.activity_filter??P.tui.activity_filter,notifications:{toast:typeof r?.toast=="boolean"?r.toast:P.tui.notifications.toast,bell:typeof r?.bell=="boolean"?r.bell:P.tui.notifications.bell}}}}async write(t){await mkdir(_t,{recursive:true}),await c(St,t);}async set(t,e){let r=await this.read();r.tui[t]=e,await this.write(r);}};var G=class m{constructor(t){this.paths=t;this.index=new w({dir:t.contextDir,ext:".json",itemPath:e=>t.contextPath(e),fileFilter:e=>e!=="_index.json"});}index;async get(t){let e=await d(this.paths.contextPath(t));return e?kt(e)?(await this.delete(t),null):e:null}static MAX_TTL_MS=720*60*60*1e3;async set(t,e$1,r){if(r!==void 0&&(!Number.isFinite(r)||r<=0||r>m.MAX_TTL_MS))throw new Error(`TTL must be a positive number up to ${m.MAX_TTL_MS}ms (30 days)`);await j$1(this.paths.contextDir);let s=new Date().toISOString(),a=await d(this.paths.contextPath(t)),n={key:t,value:e$1,created_at:a?.created_at??s,updated_at:s,ttl_ms:r,expires_at:r?new Date(Date.now()+r).toISOString():void 0};await e(this.paths.contextPath(t),n),await this.index.updateIndex(i=>{let o=i.filter(c=>c.key!==t);return o.push(n),o});}async delete(t){try{await Z.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.key!==t));}async list(){let t=await this.index.readIndex(),e=[],r=[];for(let s of t)kt(s)?e.push(s):r.push(s);return e.length>0&&(await Promise.all(e.map(s=>this.deleteFile(s.key))),await this.index.writeIndex(r)),r.sort((s,a)=>s.key.localeCompare(a.key))}async getAll(){let t=await this.list(),e={};for(let r of t)e[r.key]=r.value;return e}async deleteFile(t){try{await Z.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};function kt(m){return m.expires_at?new Date(m.expires_at).getTime()<Date.now():false}var L=class{constructor(t){this.paths=t;this.index=new w({dir:t.messagesDir,ext:".json",itemPath:e=>t.messagePath(e),fileFilter:e=>e!=="_index.json"});}index;async save(t){await j$1(this.paths.messagesDir),await e(this.paths.messagePath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async get(t){return d(this.paths.messagePath(t))}async list(){return (await this.index.readIndex()).filter(e=>e!==null).sort((e,r)=>e.created_at.localeCompare(r.created_at))}async listPending(t){let e=await this.list(),r=Date.now();return e.filter(s=>s.status!=="pending"||s.expires_at&&new Date(s.expires_at).getTime()<r?false:s.to_agent_id===t)}async markDelivered(t){let e$1=await this.get(t);e$1&&(e$1.status="delivered",e$1.delivered_at=new Date().toISOString(),await e(this.paths.messagePath(t),e$1),await this.index.updateIndex(r=>{let s=r.filter(a=>a.id!==t);return s.push(e$1),s}));}async delete(t){try{await Z.unlink(this.paths.messagePath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}async purgeExpired(){let t=await this.list(),e=Date.now(),r=t.filter(a=>{let n=a.expires_at&&new Date(a.expires_at).getTime()<e,i=a.delivered_at&&e-new Date(a.delivered_at).getTime()>36e5;return n||i}),s=new Set(r.map(a=>a.id));return await Promise.all(r.map(async a=>{try{await Z.unlink(this.paths.messagePath(a.id));}catch(n){if(n.code!=="ENOENT")throw n}})),await this.index.updateIndex(a=>a.filter(n=>!s.has(n.id))),r.length}};var B=class{constructor(t){this.paths=t;this.index=new w({dir:t.goalsDir,ext:".yml",itemPath:e=>t.goalPath(e)});}index;async list(t){return (await this.index.readIndex()).filter(s=>s!==null&&(!t?.status||s.status===t.status)).sort((s,a)=>{let n=c$1[s.status]-c$1[a.status];if(n!==0)return n;let i=a.updated_at??"",o=s.updated_at??"";return i<o?-1:i>o?1:0})}async get(t){return b$1(this.paths.goalPath(t))}async save(t){await j$1(this.paths.goalsDir),await c(this.paths.goalPath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async delete(t){try{await Z.unlink(this.paths.goalPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}};var F=class{constructor(t){this.paths=t;}async save(t){await j$1(this.paths.teamsDir),await c(this.paths.teamPath(t.id),t);}async get(t){return b$1(this.paths.teamPath(t))}async getByName(t){return (await this.list()).find(r=>r.name===t)??null}async list(){await j$1(this.paths.teamsDir);let t=await l$1(this.paths.teamsDir,".yml");return (await Promise.all(t.map(r=>b$1(this.paths.teamPath(r.replace(".yml","")))))).filter(r=>r!==null)}async delete(t){try{await Z.unlink(this.paths.teamPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var N=class{handlers=new Map;wildcardHandlers=new Set;maxListeners=10;warnedTypes=new Set;setMaxListeners(t){this.maxListeners=t;}getMaxListeners(){return this.maxListeners}listenerCount(t){return this.handlers.get(t)?.size??0}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set);let r=this.handlers.get(t);return r.add(e),this.maxListeners>0&&r.size>this.maxListeners&&!this.warnedTypes.has(t)&&(this.warnedTypes.add(t),console.warn(`EventBus: possible memory leak detected. ${r.size} listeners added for "${t}". Use setMaxListeners() to increase limit if this is intentional.`)),()=>this.off(t,e)}once(t,e){let r=s=>{this.off(t,r),e(s);};return this.on(t,r)}off(t,e){this.handlers.get(t)?.delete(e);}emit(t){let e=this.handlers.get(t.type);e&&this.dispatchToSet(e,t,"handler"),this.dispatchToSet(this.wildcardHandlers,t,"wildcard handler");}dispatchToSet(t,e,r){for(let s of t)try{s(e);}catch(a){console.error(`EventBus ${r} error for "${e.type}":`,a);}}onAny(t){return this.wildcardHandlers.add(t),this.maxListeners>0&&this.wildcardHandlers.size>this.maxListeners&&!this.warnedTypes.has("*")&&(this.warnedTypes.add("*"),console.warn(`EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. Use setMaxListeners() to increase limit if this is intentional.`)),()=>{this.wildcardHandlers.delete(t);}}clear(){this.handlers.clear(),this.wildcardHandlers.clear(),this.warnedTypes.clear();}};var $=class{constructor(t,e,r,s,a){this.taskStore=t;this.eventBus=e;this.config=r;this.paths=s;this.agentStore=a;}async create(t){if(!t.title.trim())throw new c$2("Task title is required");let e=t.priority??this.config.defaults.task.priority;if(!Number.isInteger(e)||e<1||e>4)throw new c$2("Priority must be an integer between 1 and 4");if(t.depends_on?.length){let i=(await Promise.all(t.depends_on.map(async o=>({depId:o,exists:!!await this.taskStore.get(o)})))).filter(o=>!o.exists).map(o=>o.depId);if(i.length>0)throw new c$2(`Unknown depends_on task ID(s): ${i.join(", ")}`)}let r=await this.resolveAssignee(t.assignee),s=new Date().toISOString(),a={id:`tsk_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"todo",priority:e,assignee:r,labels:t.labels??[],depends_on:t.depends_on??[],created_at:s,updated_at:s,attempts:0,max_attempts:t.max_attempts??this.config.defaults.task.max_attempts,workspace_mode:t.workspace_mode,review_criteria:t.review_criteria,scope:t.scope,goalId:t.goalId};if(t.attachments?.length&&this.paths){let n=await this.copyAttachments(a.id,t.attachments);a.attachments=n;}return await this.taskStore.save(a),this.eventBus.emit({type:"task:created",task:a}),a}async list(t){return this.taskStore.list(t)}async get(t){let e=await this.taskStore.get(t);if(!e)throw new f(t);return e}async updateStatus(t,e){let r=await this.get(t),s=r.status;if(!a$1(s,e))throw new i(t,s,e);return r.status=e,r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:e}),r}async assign(t,e){let r=await this.get(t);return r.assignee=await this.resolveAssignee(e),r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:assigned",taskId:t,agentId:e}),r}async cancel(t){let e=await this.get(t);if(b$2(e.status))throw new i(t,e.status,"cancelled");return this.updateStatus(t,"cancelled")}async retry(t){let e=await this.get(t);if(e.status!=="failed"&&e.status!=="cancelled")throw new i(t,e.status,"todo");let r=e.status;return e.status="todo",e.attempts=0,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:"todo"}),e}async reject(t,e){let r=await this.get(t);if(r.status!=="review")throw new i(t,r.status,"todo");let s=r.status;return r.status="todo",r.attempts=0,r.feedback=e,r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:"todo"}),r}async update(t,e){let r=await this.get(t);if(e.title!==void 0){if(!e.title.trim())throw new c$2("Task title cannot be empty");r.title=e.title.trim();}if(e.description!==void 0&&(r.description=e.description.trim()),e.priority!==void 0){if(!Number.isInteger(e.priority)||e.priority<1||e.priority>4)throw new c$2("Priority must be an integer between 1 and 4");r.priority=e.priority;}if(e.labels!==void 0&&(r.labels=e.labels),e.attachments?.length&&this.paths){let s=await this.copyAttachments(t,e.attachments);r.attachments=[...r.attachments??[],...s];}return r.updated_at=new Date().toISOString(),await this.taskStore.save(r),r}async delete(t){if((await this.get(t)).status==="in_progress")throw new c$2("Cannot delete a running task. Cancel it first.");if(await this.taskStore.delete(t),this.paths){let r=this.paths.taskAttachmentsDir(t);await Z.rm(r,{recursive:true,force:true});}}getAttachmentPath(t,e){if(!this.paths)throw new c$2("Paths not configured");return tt.join(this.paths.taskAttachmentsDir(t),e)}async copyAttachments(t,e){if(!this.paths)return [];let r=this.paths.taskAttachmentsDir(t);return await j$1(r),await Promise.all(e.map(async a=>{try{await Z.access(a);}catch{throw new c$2(`Attachment file not found: ${a}`)}})),await Promise.all(e.map(async a=>{let n=tt.basename(a);return await Z.copyFile(a,tt.join(r,n)),n}))}async incrementAttempts(t){let e=await this.get(t);return e.attempts+=1,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),e}async resolveAssignee(t){if(!t)return;if(!this.agentStore)return t;if(t.startsWith("agt_")){let r=await this.agentStore.get(t);if(r)return r.id;throw new c$2(`Unknown agent ID: "${t}". No agent with this ID exists.`)}let e=await this.agentStore.getByName(t);if(e)return e.id;throw new c$2(`Unknown agent: "${t}". Use an agent ID (agt_xxx) or an exact agent name.`)}};var U=class{constructor(t,e,r,s){this.agentStore=t;this.stateStore=e;this.eventBus=r;this.config=s;}async create(t){if(!t.name.trim())throw new c$2("Agent name is required");if(await this.agentStore.getByName(t.name))throw new c$2(`Agent "${t.name}" already exists`);let r={id:`agt_${nanoid(7)}`,name:t.name.trim(),adapter:t.adapter||this.config.defaults.agent.adapter,role:t.role,config:{command:t.command,model:t.model,effort:t.effort,approval_policy:t.approval_policy??this.config.defaults.agent.approval_policy,max_turns:t.max_turns??this.config.defaults.agent.max_turns,timeout_ms:t.timeout_ms??this.config.defaults.agent.timeout_ms,stall_timeout_ms:t.stall_timeout_ms??this.config.defaults.agent.stall_timeout_ms,env:t.env,system_prompt:t.system_prompt,workspace_mode:t.workspace_mode,skills:t.skills},status:"idle",stats:{tasks_completed:0,tasks_failed:0,total_runs:0,total_runtime_ms:0}};return await this.agentStore.save(r),r}async list(){return this.agentStore.list()}async get(t){let e=await this.agentStore.get(t);if(!e)throw new g(t);return e}async remove(t){let e=await this.get(t);if(e.status==="running"){let r=await this.stateStore.read();if(Object.values(r.running).some(a=>a.agent_id===t))throw new c$2("Cannot remove a running agent. Stop it first.");e.status="idle",await this.agentStore.save(e);}await this.agentStore.delete(t);}async update(t,e){let r=await this.get(t);if(e.name!==void 0){if(!e.name.trim())throw new c$2("Agent name cannot be empty");let s=await this.agentStore.getByName(e.name.trim());if(s&&s.id!==t)throw new c$2(`Agent "${e.name}" already exists`);r.name=e.name.trim();}return e.role!==void 0&&(r.role=e.role||void 0),e.model!==void 0&&(r.config.model=e.model||void 0),e.effort!==void 0&&(r.config.effort=e.effort||void 0),e.approval_policy!==void 0&&(r.config.approval_policy=e.approval_policy),await this.agentStore.save(r),r}async disable(t){return this.setStatus(t,"disabled")}async enable(t){return this.setStatus(t,"idle")}async setAutonomous(t,e){let r=await this.get(t);return r.autonomous=e,await this.agentStore.save(r),this.eventBus.emit({type:"agent:autonomous_toggled",agentId:t,autonomous:e}),r}async setStatus(t,e){let r=await this.get(t);return r.status=e,await this.agentStore.save(r),r}async updateStats(t,e){let r=await this.get(t);return Object.assign(r.stats,e),await this.agentStore.save(r),r}async findBestAgent(t){let e=await this.agentStore.list(),r=e.filter(n=>n.status==="idle");if(r.length===0)return null;if(t.assignee){let n=e.find(i=>i.id===t.assignee||i.name===t.assignee);return n&&n.status==="idle"?n:null}let s=t.labels?.length?t.labels.map(n=>n.toLowerCase()):void 0,a=r.map(n=>{let i=0;if(s&&n.config.skills?.length){let c=new Set(n.config.skills.map(d=>d.toLowerCase()));for(let d of s)c.has(d)&&(i+=50);}if(s&&n.role){let c=n.role.toLowerCase();s.some(d=>c.includes(d))&&(i+=30);}n.status==="idle"&&(i+=20);let o=n.stats.tasks_completed+n.stats.tasks_failed;return o>0&&(i+=Math.round(n.stats.tasks_completed/o*10)),{agent:n,score:i}});return a.sort((n,i)=>i.score-n.score),a[0]?.agent??null}};var J=class{constructor(t,e){this.runStore=t;this.eventBus=e;}async create(t){let e={id:`run_${nanoid(7)}`,task_id:t.taskId,agent_id:t.agentId,attempt:t.attempt,status:"preparing",started_at:new Date().toISOString(),workspace_path:t.workspacePath,prompt:t.prompt};return await this.runStore.save(e),e}async get(t){return this.runStore.get(t)}async start(t,e){let r=await this.runStore.get(t);if(!r)throw new Error(`Run not found: ${t}`);return r.status="running",r.pid=e,await this.runStore.save(r),this.eventBus.emit({type:"agent:started",agentId:r.agent_id,taskId:r.task_id,runId:t}),r}async finish(t,e,r,s){let a=await this.runStore.get(t);if(!a)throw new Error(`Run not found: ${t}`);return a.status=e,a.finished_at=new Date().toISOString(),a.tokens=r,a.error=s,await this.runStore.save(a),this.eventBus.emit({type:"agent:completed",runId:t,agentId:a.agent_id,success:e==="succeeded"}),a}async appendEvent(t,e){await this.runStore.appendEvent(t,e);}async listAll(){return this.runStore.listAll()}async listForTask(t){return this.runStore.listForTask(t)}async listForAgent(t){return this.runStore.listForAgent(t)}async readEvents(t){return this.runStore.readEvents(t)}async readEventsTail(t,e){return this.runStore.readEventsTail(t,e)}async getLastFailedRunContext(t){let r=(await this.runStore.listForTask(t)).filter(n=>n.status==="failed").sort((n,i)=>(i.finished_at??"").localeCompare(n.finished_at??""))[0];if(!r)return null;let s=r.error??"Unknown error",a="";try{a=(await this.runStore.readEventsTail(r.id,50)).filter(i=>i.type==="agent_output"||i.type==="error").map(i=>typeof i.data=="string"?i.data:JSON.stringify(i.data)).join(`
3
+ `);}}}finally{a.destroy();}}async listFiltered(t){await j$1(this.paths.runsDir);let e=await l$1(this.paths.runsDir,".json"),r=64,s=[];for(let a=0;a<e.length;a+=r){let n=e.slice(a,a+r),i=await Promise.all(n.map(o=>{let c=o.endsWith(".json")?o.slice(0,-5):o;return d(this.paths.runPath(c))}));for(let o of i)o!==null&&t(o)&&s.push(o);}return s.sort((a,n)=>new Date(n.started_at).getTime()-new Date(a.started_at).getTime())}};var Q={version:1,onboardingCompleted:false,running:{},claimed:new Set,retry_queue:[],stats:{total_runs:0,total_tasks_completed:0,total_tasks_failed:0,total_tokens:{input:0,output:0,reasoning:0,total:0,cache_read:0,cache_write:0},total_runtime_ms:0}};var D=class{constructor(t){this.paths=t;}async read(){let t=await d(this.paths.statePath);if(!t)return structuredClone(Q);let e=structuredClone(Q);return {version:t.version??e.version,pid:t.pid,started_at:t.started_at,onboardingCompleted:typeof t.onboardingCompleted=="boolean"?t.onboardingCompleted:false,running:t.running&&typeof t.running=="object"?t.running:e.running,claimed:Array.isArray(t.claimed)?new Set(t.claimed):new Set(e.claimed),retry_queue:Array.isArray(t.retry_queue)?t.retry_queue:e.retry_queue,stats:{total_runs:t.stats?.total_runs??e.stats.total_runs,total_tasks_completed:t.stats?.total_tasks_completed??e.stats.total_tasks_completed,total_tasks_failed:t.stats?.total_tasks_failed??e.stats.total_tasks_failed,total_tokens:{...e.stats.total_tokens,...t.stats?.total_tokens??{}},total_runtime_ms:t.stats?.total_runtime_ms??e.stats.total_runtime_ms}}}async write(t){let e$1={...t,claimed:Array.from(t.claimed)};await e(this.paths.statePath,e$1);}};var R=class{constructor(t){this.paths=t;}async read(){let t=await b$1(this.paths.configPath);return yt(a$2,t??{})}async write(t){await c(this.paths.configPath,t);}async get(t){let e=await this.read();return Dt(e,t)}async set(t,e){let r=await this.read();Rt(r,t,e),await this.write(r);}};function Dt(m,t){let e=t.split("."),r=m;for(let s of e){if(r==null||typeof r!="object")return;r=r[s];}return r}function Rt(m,t,e){let r=t.split("."),s=m;for(let n=0;n<r.length-1;n++){let i=r[n];(typeof s[i]!="object"||s[i]===null)&&(s[i]={}),s=s[i];}let a=r[r.length-1];s[a]=e;}function yt(m,t){let e={...m};for(let r of Object.keys(t)){let s=t[r],a=e[r];s!=null&&typeof s=="object"&&!Array.isArray(s)&&typeof a=="object"&&a!==null&&!Array.isArray(a)?e[r]=yt(a,s):e[r]=s;}return e}var _t=tt.join(homedir(),".orchestry"),St=tt.join(_t,"global.yml"),O=class{async read(){let t=await b$1(St);if(!t)return {...P,tui:{...P.tui,notifications:{...P.tui.notifications}}};let e=t.tui,r=e?.notifications;return {tui:{activity_filter:e?.activity_filter??P.tui.activity_filter,notifications:{toast:typeof r?.toast=="boolean"?r.toast:P.tui.notifications.toast,bell:typeof r?.bell=="boolean"?r.bell:P.tui.notifications.bell}}}}async write(t){await mkdir(_t,{recursive:true}),await c(St,t);}async set(t,e){let r=await this.read();r.tui[t]=e,await this.write(r);}};var G=class m{constructor(t){this.paths=t;this.index=new w({dir:t.contextDir,ext:".json",itemPath:e=>t.contextPath(e),fileFilter:e=>e!=="_index.json"});}index;async get(t){let e=await d(this.paths.contextPath(t));return e?kt(e)?(await this.delete(t),null):e:null}static MAX_TTL_MS=720*60*60*1e3;async set(t,e$1,r){if(r!==void 0&&(!Number.isFinite(r)||r<=0||r>m.MAX_TTL_MS))throw new Error(`TTL must be a positive number up to ${m.MAX_TTL_MS}ms (30 days)`);await j$1(this.paths.contextDir);let s=new Date().toISOString(),a=await d(this.paths.contextPath(t)),n={key:t,value:e$1,created_at:a?.created_at??s,updated_at:s,ttl_ms:r,expires_at:r?new Date(Date.now()+r).toISOString():void 0};await e(this.paths.contextPath(t),n),await this.index.updateIndex(i=>{let o=i.filter(c=>c.key!==t);return o.push(n),o});}async delete(t){try{await Z.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.key!==t));}async list(){let t=await this.index.readIndex(),e=[],r=[];for(let s of t)kt(s)?e.push(s):r.push(s);return e.length>0&&(await Promise.all(e.map(s=>this.deleteFile(s.key))),await this.index.writeIndex(r)),r.sort((s,a)=>s.key.localeCompare(a.key))}async getAll(){let t=await this.list(),e={};for(let r of t)e[r.key]=r.value;return e}async deleteFile(t){try{await Z.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};function kt(m){return m.expires_at?new Date(m.expires_at).getTime()<Date.now():false}var L=class{constructor(t){this.paths=t;this.index=new w({dir:t.messagesDir,ext:".json",itemPath:e=>t.messagePath(e),fileFilter:e=>e!=="_index.json"});}index;async save(t){await j$1(this.paths.messagesDir),await e(this.paths.messagePath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async get(t){return d(this.paths.messagePath(t))}async list(){return (await this.index.readIndex()).filter(e=>e!==null).sort((e,r)=>e.created_at.localeCompare(r.created_at))}async listPending(t){let e=await this.list(),r=Date.now();return e.filter(s=>s.status!=="pending"||s.expires_at&&new Date(s.expires_at).getTime()<r?false:s.to_agent_id===t)}async markDelivered(t){let e$1=await this.get(t);e$1&&(e$1.status="delivered",e$1.delivered_at=new Date().toISOString(),await e(this.paths.messagePath(t),e$1),await this.index.updateIndex(r=>{let s=r.filter(a=>a.id!==t);return s.push(e$1),s}));}async delete(t){try{await Z.unlink(this.paths.messagePath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}async purgeExpired(){let t=await this.list(),e=Date.now(),r=t.filter(a=>{let n=a.expires_at&&new Date(a.expires_at).getTime()<e,i=a.delivered_at&&e-new Date(a.delivered_at).getTime()>36e5;return n||i}),s=new Set(r.map(a=>a.id));return await Promise.all(r.map(async a=>{try{await Z.unlink(this.paths.messagePath(a.id));}catch(n){if(n.code!=="ENOENT")throw n}})),await this.index.updateIndex(a=>a.filter(n=>!s.has(n.id))),r.length}};var B=class{constructor(t){this.paths=t;this.index=new w({dir:t.goalsDir,ext:".yml",itemPath:e=>t.goalPath(e)});}index;async list(t){return (await this.index.readIndex()).filter(s=>s!==null&&(!t?.status||s.status===t.status)).sort((s,a)=>{let n=c$1[s.status]-c$1[a.status];if(n!==0)return n;let i=a.updated_at??"",o=s.updated_at??"";return i<o?-1:i>o?1:0})}async get(t){return b$1(this.paths.goalPath(t))}async save(t){await j$1(this.paths.goalsDir),await c(this.paths.goalPath(t.id),t),await this.index.updateIndex(e=>{let r=e.filter(s=>s.id!==t.id);return r.push(t),r});}async delete(t){try{await Z.unlink(this.paths.goalPath(t));}catch(e){if(e.code!=="ENOENT")throw e}await this.index.updateIndex(e=>e.filter(r=>r.id!==t));}};var F=class{constructor(t){this.paths=t;}async save(t){await j$1(this.paths.teamsDir),await c(this.paths.teamPath(t.id),t);}async get(t){return b$1(this.paths.teamPath(t))}async getByName(t){return (await this.list()).find(r=>r.name===t)??null}async list(){await j$1(this.paths.teamsDir);let t=await l$1(this.paths.teamsDir,".yml");return (await Promise.all(t.map(r=>b$1(this.paths.teamPath(r.replace(".yml","")))))).filter(r=>r!==null)}async delete(t){try{await Z.unlink(this.paths.teamPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var N=class{handlers=new Map;wildcardHandlers=new Set;maxListeners=10;warnedTypes=new Set;setMaxListeners(t){this.maxListeners=t;}getMaxListeners(){return this.maxListeners}listenerCount(t){return this.handlers.get(t)?.size??0}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set);let r=this.handlers.get(t);return r.add(e),this.maxListeners>0&&r.size>this.maxListeners&&!this.warnedTypes.has(t)&&(this.warnedTypes.add(t),console.warn(`EventBus: possible memory leak detected. ${r.size} listeners added for "${t}". Use setMaxListeners() to increase limit if this is intentional.`)),()=>this.off(t,e)}once(t,e){let r=s=>{this.off(t,r),e(s);};return this.on(t,r)}off(t,e){this.handlers.get(t)?.delete(e);}emit(t){let e=this.handlers.get(t.type);e&&this.dispatchToSet(e,t,"handler"),this.dispatchToSet(this.wildcardHandlers,t,"wildcard handler");}dispatchToSet(t,e,r){for(let s of t)try{s(e);}catch(a){console.error(`EventBus ${r} error for "${e.type}":`,a);}}onAny(t){return this.wildcardHandlers.add(t),this.maxListeners>0&&this.wildcardHandlers.size>this.maxListeners&&!this.warnedTypes.has("*")&&(this.warnedTypes.add("*"),console.warn(`EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. Use setMaxListeners() to increase limit if this is intentional.`)),()=>{this.wildcardHandlers.delete(t);}}clear(){this.handlers.clear(),this.wildcardHandlers.clear(),this.warnedTypes.clear();}};var $=class{constructor(t,e,r,s,a){this.taskStore=t;this.eventBus=e;this.config=r;this.paths=s;this.agentStore=a;}async create(t){if(!t.title.trim())throw new c$2("Task title is required");let e=t.priority??this.config.defaults.task.priority;if(!Number.isInteger(e)||e<1||e>4)throw new c$2("Priority must be an integer between 1 and 4");if(t.depends_on?.length){let i=(await Promise.all(t.depends_on.map(async o=>({depId:o,exists:!!await this.taskStore.get(o)})))).filter(o=>!o.exists).map(o=>o.depId);if(i.length>0)throw new c$2(`Unknown depends_on task ID(s): ${i.join(", ")}`)}let r=await this.resolveAssignee(t.assignee),s=new Date().toISOString(),a={id:`tsk_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"todo",priority:e,assignee:r,labels:t.labels??[],depends_on:t.depends_on??[],created_at:s,updated_at:s,attempts:0,max_attempts:t.max_attempts??this.config.defaults.task.max_attempts,workspace_mode:t.workspace_mode,review_criteria:t.review_criteria,scope:t.scope,goalId:t.goalId};if(t.attachments?.length&&this.paths){let n=await this.copyAttachments(a.id,t.attachments);a.attachments=n;}return await this.taskStore.save(a),this.eventBus.emit({type:"task:created",task:a}),a}async list(t){return this.taskStore.list(t)}async get(t){let e=await this.taskStore.get(t);if(!e)throw new f(t);return e}async updateStatus(t,e){let r=await this.get(t),s=r.status;if(!a$1(s,e))throw new i(t,s,e);return r.status=e,r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:e}),r}async assign(t,e){let r=await this.get(t);return r.assignee=await this.resolveAssignee(e),r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:assigned",taskId:t,agentId:e}),r}async cancel(t){let e=await this.get(t);if(b$2(e.status))throw new i(t,e.status,"cancelled");return this.updateStatus(t,"cancelled")}async retry(t){let e=await this.get(t);if(e.status!=="failed"&&e.status!=="cancelled")throw new i(t,e.status,"todo");let r=e.status;return e.status="todo",e.attempts=0,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:"todo"}),e}async reject(t,e){let r=await this.get(t);if(r.status!=="review")throw new i(t,r.status,"todo");let s=r.status;return r.status="todo",r.attempts=0,r.feedback=e,r.updated_at=new Date().toISOString(),await this.taskStore.save(r),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:"todo"}),r}async update(t,e){let r=await this.get(t);if(e.title!==void 0){if(!e.title.trim())throw new c$2("Task title cannot be empty");r.title=e.title.trim();}if(e.description!==void 0&&(r.description=e.description.trim()),e.priority!==void 0){if(!Number.isInteger(e.priority)||e.priority<1||e.priority>4)throw new c$2("Priority must be an integer between 1 and 4");r.priority=e.priority;}if(e.labels!==void 0&&(r.labels=e.labels),e.attachments?.length&&this.paths){let s=await this.copyAttachments(t,e.attachments);r.attachments=[...r.attachments??[],...s];}return r.updated_at=new Date().toISOString(),await this.taskStore.save(r),r}async delete(t){if((await this.get(t)).status==="in_progress")throw new c$2("Cannot delete a running task. Cancel it first.");if(await this.taskStore.delete(t),this.paths){let r=this.paths.taskAttachmentsDir(t);await Z.rm(r,{recursive:true,force:true});}}getAttachmentPath(t,e){if(!this.paths)throw new c$2("Paths not configured");return tt.join(this.paths.taskAttachmentsDir(t),e)}async copyAttachments(t,e){if(!this.paths)return [];let r=this.paths.taskAttachmentsDir(t);return await j$1(r),await Promise.all(e.map(async a=>{try{await Z.access(a);}catch{throw new c$2(`Attachment file not found: ${a}`)}})),await Promise.all(e.map(async a=>{let n=tt.basename(a);return await Z.copyFile(a,tt.join(r,n)),n}))}async incrementAttempts(t){let e=await this.get(t);return e.attempts+=1,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),e}async resolveAssignee(t){if(!t)return;if(!this.agentStore)return t;if(t.startsWith("agt_")){let r=await this.agentStore.get(t);if(r)return r.id;throw new c$2(`Unknown agent ID: "${t}". No agent with this ID exists.`)}let e=await this.agentStore.getByName(t);if(e)return e.id;throw new c$2(`Unknown agent: "${t}". Use an agent ID (agt_xxx) or an exact agent name.`)}};var U=class{constructor(t,e,r,s){this.agentStore=t;this.stateStore=e;this.eventBus=r;this.config=s;}async create(t){if(!t.name.trim())throw new c$2("Agent name is required");if(await this.agentStore.getByName(t.name))throw new c$2(`Agent "${t.name}" already exists`);let r={id:`agt_${nanoid(7)}`,name:t.name.trim(),adapter:t.adapter||this.config.defaults.agent.adapter,role:t.role,config:{command:t.command,model:t.model,effort:t.effort,approval_policy:t.approval_policy??this.config.defaults.agent.approval_policy,max_turns:t.max_turns??this.config.defaults.agent.max_turns,timeout_ms:t.timeout_ms??this.config.defaults.agent.timeout_ms,stall_timeout_ms:t.stall_timeout_ms??this.config.defaults.agent.stall_timeout_ms,env:t.env,system_prompt:t.system_prompt,workspace_mode:t.workspace_mode,skills:t.skills},status:"idle",stats:{tasks_completed:0,tasks_failed:0,total_runs:0,total_runtime_ms:0}};return await this.agentStore.save(r),r}async list(){return this.agentStore.list()}async get(t){let e=await this.agentStore.get(t);if(!e)throw new g(t);return e}async remove(t){let e=await this.get(t);if(e.status==="running"){let r=await this.stateStore.read();if(Object.values(r.running).some(a=>a.agent_id===t))throw new c$2("Cannot remove a running agent. Stop it first.");e.status="idle",await this.agentStore.save(e);}await this.agentStore.delete(t);}async update(t,e){let r=await this.get(t);if(e.name!==void 0){if(!e.name.trim())throw new c$2("Agent name cannot be empty");let s=await this.agentStore.getByName(e.name.trim());if(s&&s.id!==t)throw new c$2(`Agent "${e.name}" already exists`);r.name=e.name.trim();}if(e.adapter!==void 0){let s=e.adapter.trim();if(!s)throw new c$2("Agent adapter cannot be empty");r.adapter=s;}return e.role!==void 0&&(r.role=e.role||void 0),e.model!==void 0&&(r.config.model=e.model||void 0),e.effort!==void 0&&(r.config.effort=e.effort||void 0),e.approval_policy!==void 0&&(r.config.approval_policy=e.approval_policy),await this.agentStore.save(r),r}async disable(t){return this.setStatus(t,"disabled")}async enable(t){return this.setStatus(t,"idle")}async setAutonomous(t,e){let r=await this.get(t);return r.autonomous=e,await this.agentStore.save(r),this.eventBus.emit({type:"agent:autonomous_toggled",agentId:t,autonomous:e}),r}async setStatus(t,e){let r=await this.get(t);return r.status=e,await this.agentStore.save(r),r}async updateStats(t,e){let r=await this.get(t);return Object.assign(r.stats,e),await this.agentStore.save(r),r}async findBestAgent(t){let e=await this.agentStore.list(),r=e.filter(n=>n.status==="idle");if(r.length===0)return null;if(t.assignee){let n=e.find(i=>i.id===t.assignee||i.name===t.assignee);return n&&n.status==="idle"?n:null}let s=t.labels?.length?t.labels.map(n=>n.toLowerCase()):void 0,a=r.map(n=>{let i=0;if(s&&n.config.skills?.length){let c=new Set(n.config.skills.map(d=>d.toLowerCase()));for(let d of s)c.has(d)&&(i+=50);}if(s&&n.role){let c=n.role.toLowerCase();s.some(d=>c.includes(d))&&(i+=30);}n.status==="idle"&&(i+=20);let o=n.stats.tasks_completed+n.stats.tasks_failed;return o>0&&(i+=Math.round(n.stats.tasks_completed/o*10)),{agent:n,score:i}});return a.sort((n,i)=>i.score-n.score),a[0]?.agent??null}};var J=class{constructor(t,e){this.runStore=t;this.eventBus=e;}async create(t){let e={id:`run_${nanoid(7)}`,task_id:t.taskId,agent_id:t.agentId,attempt:t.attempt,status:"preparing",started_at:new Date().toISOString(),workspace_path:t.workspacePath,prompt:t.prompt};return await this.runStore.save(e),e}async get(t){return this.runStore.get(t)}async start(t,e){let r=await this.runStore.get(t);if(!r)throw new Error(`Run not found: ${t}`);return r.status="running",r.pid=e,await this.runStore.save(r),this.eventBus.emit({type:"agent:started",agentId:r.agent_id,taskId:r.task_id,runId:t}),r}async finish(t,e,r,s){let a=await this.runStore.get(t);if(!a)throw new Error(`Run not found: ${t}`);return a.status=e,a.finished_at=new Date().toISOString(),a.tokens=r,a.error=s,await this.runStore.save(a),this.eventBus.emit({type:"agent:completed",runId:t,agentId:a.agent_id,success:e==="succeeded"}),a}async appendEvent(t,e){await this.runStore.appendEvent(t,e);}async listAll(){return this.runStore.listAll()}async listForTask(t){return this.runStore.listForTask(t)}async listForAgent(t){return this.runStore.listForAgent(t)}async readEvents(t){return this.runStore.readEvents(t)}async readEventsTail(t,e){return this.runStore.readEventsTail(t,e)}async getLastFailedRunContext(t){let r=(await this.runStore.listForTask(t)).filter(n=>n.status==="failed").sort((n,i)=>(i.finished_at??"").localeCompare(n.finished_at??""))[0];if(!r)return null;let s=r.error??"Unknown error",a="";try{a=(await this.runStore.readEventsTail(r.id,50)).filter(i=>i.type==="agent_output"||i.type==="error").map(i=>typeof i.data=="string"?i.data:JSON.stringify(i.data)).join(`
4
4
  `);}catch{}return {error:s,output:a}}};var H=class{constructor(t,e,r,s){this.messageStore=t;this.agentStore=e;this.teamStore=r;this.eventBus=s;}async send(t){if(!t.body.trim())throw new c$2("Message body is required");let e=t.ttl_ms??864e5;if(e<=0||e>6048e5)throw new c$2(`TTL must be between 1ms and ${6048e5}ms`);if(!await this.agentStore.get(t.from_agent_id)&&t.from_agent_id!=="cli")throw new c$2(`Sender agent not found: ${t.from_agent_id}`);let s=new Date,a={channel:t.channel,from_agent_id:t.from_agent_id,subject:(t.subject||"(no subject)").slice(0,200),body:t.body.slice(0,4e3),created_at:s.toISOString(),expires_at:new Date(s.getTime()+e).toISOString(),status:"pending",team_id:t.team_id,reply_to:t.reply_to},n=[];if(t.channel==="broadcast"){let i=await this.agentStore.list();if(t.team_id){let d=await this.teamStore.get(t.team_id);if(d){let k=new Set(d.members.map(v=>v.agent_id));i=i.filter(v=>k.has(v.id));}}let c=i.filter(d=>d.id!==t.from_agent_id&&d.status!=="disabled").map(d=>({...a,id:`msg_${nanoid(7)}`,to_agent_id:d.id}));await Promise.all(c.map(d=>this.messageStore.save(d)));for(let d of c)n.push(d),this.emitSent(d);}else if(t.channel==="lead"){if(!t.team_id)throw new c$2("team_id is required for lead channel");let i=await this.teamStore.get(t.team_id);if(!i)throw new c$2(`Team not found: ${t.team_id}`);let o={...a,id:`msg_${nanoid(7)}`,to_agent_id:i.lead_agent_id};await this.messageStore.save(o),n.push(o),this.emitSent(o);}else {if(!t.to_agent_id)throw new c$2("to_agent_id is required for direct messages");if(!await this.agentStore.get(t.to_agent_id))throw new c$2(`Recipient agent not found: ${t.to_agent_id}`);let o={...a,id:`msg_${nanoid(7)}`,to_agent_id:t.to_agent_id};await this.messageStore.save(o),n.push(o),this.emitSent(o);}return n}async drainMailbox(t,e){let r=await this.messageStore.listPending(t);await Promise.all(r.map(s=>this.messageStore.markDelivered(s.id)));for(let s of r)this.eventBus.emit({type:"message:delivered",messageId:s.id,toAgentId:t,taskId:e});return r}async listAll(){return this.messageStore.list()}async listPendingForAgent(t){return this.messageStore.listPending(t)}async listForAgent(t){return (await this.messageStore.list()).filter(r=>r.to_agent_id===t||r.from_agent_id===t)}async purgeExpired(){return this.messageStore.purgeExpired()}emitSent(t){this.eventBus.emit({type:"message:sent",messageId:t.id,fromAgentId:t.from_agent_id,toAgentId:t.to_agent_id,channel:t.channel});}};var Ht={active:["paused","achieved","abandoned"],paused:["active","achieved","abandoned"],achieved:[],abandoned:[]},q=class{constructor(t,e,r,s,a){this.goalStore=t;this.eventBus=e;this.agentService=r;this.taskService=s;this.contextStore=a;}async create(t){if(!t.title.trim())throw new c$2("Goal title is required");let e=new Date().toISOString(),r={id:`goal_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"active",assignee:t.assignee,created_at:e,updated_at:e};return await this.goalStore.save(r),this.eventBus.emit({type:"goal:created",goalId:r.id,title:r.title}),r.assignee&&await this.enableAutonomous(r.assignee),r}async list(t){return this.goalStore.list(t)}async get(t){let e=await this.goalStore.get(t);if(!e)throw new j$2(t);return e}async updateStatus(t,e,r){let s=await this.get(t),a$1=s.status;if(!Ht[a$1].includes(e))throw new c$2(`Cannot transition goal from '${a$1}' to '${e}'`);if(e==="achieved"&&this.taskService){let i=(await this.taskService.list({goalId:t})).filter(o=>!b$2(o.status)&&!o.labels?.includes(a));if(i.length>0)if(r?.force){let o=i.filter(d=>d.status!=="in_progress"),c=i.filter(d=>d.status==="in_progress");if(await Promise.all(o.map(d=>this.taskService.cancel(d.id).catch(()=>{}))),c.length>0){let d=c.map(k=>`${k.id} (in_progress)`).join(", ");throw new k(t,c.length,d)}}else {let o=i.map(c=>`${c.id} (${c.status})`).join(", ");throw new k(t,i.length,o)}}return s.status=e,s.updated_at=new Date().toISOString(),await this.goalStore.save(s),this.eventBus.emit({type:"goal:status_changed",goalId:t,from:a$1,to:e}),s.assignee&&(e==="paused"?(await this.maybeDisableAutonomous(s.assignee),await this.cancelPendingAutonomousTasks(s.assignee)):e==="active"&&a$1==="paused"?await this.enableAutonomous(s.assignee):b$3(e)&&await this.maybeDisableAutonomous(s.assignee)),s}async update(t,e){let r=await this.get(t),s=r.assignee;if(e.title!==void 0){if(!e.title.trim())throw new c$2("Goal title cannot be empty");r.title=e.title.trim();}e.description!==void 0&&(r.description=e.description.trim()),e.assignee!==void 0&&(r.assignee=e.assignee||void 0),r.updated_at=new Date().toISOString(),await this.goalStore.save(r),this.eventBus.emit({type:"goal:updated",goalId:t});let a=r.assignee;if(a!==s){let n=[];a&&n.push(this.enableAutonomous(a)),s&&n.push(this.maybeDisableAutonomous(s)),await Promise.all(n);}return r}async delete(t){let e=await this.get(t),{assignee:r}=e;await this.goalStore.delete(t),this.eventBus.emit({type:"goal:deleted",goalId:t}),r&&await this.maybeDisableAutonomous(r);}async listTasksForGoal(t){return this.taskService?.list({goalId:t})??[]}async getProgressReport(t){return this.contextStore?(await this.contextStore.get(`${t}-progress`))?.value:void 0}async enableAutonomous(t){if(this.agentService)try{await this.agentService.setAutonomous(t,!0);}catch{}}async hasActiveGoalsForAgent(t){return (await this.goalStore.list({status:"active"})).some(r=>r.assignee===t)}async cancelPendingAutonomousTasks(t){if(this.taskService)try{let[e,r]=await Promise.all([this.taskService.list({status:"todo"}),this.taskService.list({status:"retrying"})]),s=[...e,...r].filter(a$1=>a$1.assignee===t&&a$1.labels?.includes(a));await Promise.all(s.map(a=>this.taskService.cancel(a.id).catch(()=>{})));}catch{}}async maybeDisableAutonomous(t){if(this.agentService)try{await this.hasActiveGoalsForAgent(t)||await this.agentService.setAutonomous(t,!1);}catch{}}};var bt={auto_claim:true,message_ttl_ms:864e5};var Y=class{constructor(t,e,r,s){this.teamStore=t;this.agentStore=e;this.taskStore=r;this.eventBus=s;}async create(t){if(!t.name.trim())throw new c$2("Team name is required");if(!await this.agentStore.get(t.lead_agent_id))throw new c$2(`Lead agent not found: ${t.lead_agent_id}`);if(await this.teamStore.getByName(t.name.trim()))throw new c$2(`Team "${t.name}" already exists`);let s=new Date().toISOString(),a={agent_id:t.lead_agent_id,role:"lead",joined_at:s},n=[];for(let o of t.member_agent_ids??[]){if(o===t.lead_agent_id)continue;if(!await this.agentStore.get(o))throw new c$2(`Member agent not found: ${o}`);n.push({agent_id:o,role:"member",joined_at:s});}let i={id:`team_${nanoid(7)}`,name:t.name.trim(),description:t.description,status:"active",members:[a,...n],task_pool:[],lead_agent_id:t.lead_agent_id,created_at:s,updated_at:s,config:{...bt,...t.config??{}}};await this.teamStore.save(i),this.eventBus.emit({type:"team:created",teamId:i.id,name:i.name,leadAgentId:i.lead_agent_id});for(let o of n)this.eventBus.emit({type:"team:member_joined",teamId:i.id,agentId:o.agent_id});return i}async get(t){let e=await this.teamStore.get(t);if(!e)throw new l(t);return e}async list(){return this.teamStore.list()}async join(t,e){let r=await this.get(t);if(r.members.some(a=>a.agent_id===e))throw new c$2(`Agent ${e} is already a member of team ${t}`);if(!await this.agentStore.get(e))throw new c$2(`Agent not found: ${e}`);return r.members.push({agent_id:e,role:"member",joined_at:new Date().toISOString()}),r.updated_at=new Date().toISOString(),await this.teamStore.save(r),this.eventBus.emit({type:"team:member_joined",teamId:t,agentId:e}),r}async leave(t,e){let r=await this.get(t);if(e===r.lead_agent_id)throw new c$2("Lead cannot leave team. Disband the team or transfer lead first.");return r.members=r.members.filter(s=>s.agent_id!==e),r.updated_at=new Date().toISOString(),await this.teamStore.save(r),this.eventBus.emit({type:"team:member_left",teamId:t,agentId:e}),r}async addTask(t,e){let r=await this.get(t);if(!await this.taskStore.get(e))throw new c$2(`Task not found: ${e}`);return r.task_pool.includes(e)||(r.task_pool.push(e),r.updated_at=new Date().toISOString(),await this.teamStore.save(r),this.eventBus.emit({type:"team:task_added",teamId:t,taskId:e})),r}async removeTask(t,e){let r=await this.get(t);return r.task_pool=r.task_pool.filter(s=>s!==e),r.updated_at=new Date().toISOString(),await this.teamStore.save(r),r}async setLead(t,e){let r=await this.get(t),s=r.members.find(n=>n.agent_id===e);if(!s)throw new c$2(`Agent ${e} is not a member of team ${t}`);let a=r.members.find(n=>n.agent_id===r.lead_agent_id);return a&&(a.role="member"),s.role="lead",r.lead_agent_id=e,r.updated_at=new Date().toISOString(),await this.teamStore.save(r),r}async disband(t){let e=await this.get(t);e.status="disbanded",e.updated_at=new Date().toISOString(),await this.teamStore.save(e),this.eventBus.emit({type:"team:disbanded",teamId:t});}async findTeamForAgent(t){return (await this.teamStore.list()).find(r=>r.status==="active"&&r.members.some(s=>s.agent_id===t))??null}};async function Yt(m){let t=new b(m.projectRoot),e=new R(t),r=new O,[,s]=await Promise.all([t.requireInit(),e.read()]),a=new C(t),n=new j(t),i=new M(t),o=new D(t),c=new G(t),d=new L(t),k=new B(t),v=new F(t),_=new N,b$1=new $(a,_,s,t,n),I=new U(n,o,_,s),z=new J(i,_),W=new H(d,n,v,_),p=new q(k,_,I,b$1,c),A=new Y(v,n,a,_);return {context:m,paths:t,config:s,taskStore:a,agentStore:n,runStore:i,stateStore:o,configStore:e,globalConfigStore:r,globalConfig:P,contextStore:c,messageStore:d,goalStore:k,teamStore:v,eventBus:_,taskService:b$1,agentService:I,runService:z,messageService:W,goalService:p,teamService:A}}async function zt(m){let t=await Yt(m),e=await t.globalConfigStore.read();t.globalConfig=e;let[{ProcessManager:r},{AdapterRegistry:s},{ClaudeAdapter:a},{CodexAdapter:n},{CursorAdapter:i},{ShellAdapter:o},{OpenCodeAdapter:c},{PiAdapter:d},{GrokAdapter:k},{AntigravityAdapter:v},{WorkspaceManager:_},{LiquidTemplateEngine:b},{SkillLoader:I},{Orchestrator:z},{DoctorService:W}]=await Promise.all([import('./process-manager-33H27MQF.js'),import('./registry-BO2PPRNG.js'),import('./claude-PH7LT3OH.js'),import('./codex-URQN4JLZ.js'),import('./cursor-EMX3ECDY.js'),import('./shell-NPNTWDMU.js'),import('./opencode-K22RCQ5C.js'),import('./pi-XEINSHUN.js'),import('./grok-YX757Y3M.js'),import('./antigravity-LGKZHZL7.js'),import('./workspace-manager-ZI5SVXJU.js'),import('./template-engine-VLIOJ3WX.js'),import('./skill-loader-IGRIELEM.js'),import('./orchestrator-TY5HYXUH.js'),import('./doctor-service-PB7YBH3F.js')]),p=new r,A=new b,rt=new I,st=new _(m.projectRoot,t.paths.root,p),y=new s;y.register(new a(p)),y.register(new n(p)),y.register(new i(p)),y.register(new o(p)),y.register(new c(p)),y.register(new d(p)),y.register(new k(p)),y.register(new v(p));let It=new W(y,p,m.projectRoot),At=new z({taskStore:t.taskStore,agentStore:t.agentStore,runStore:t.runStore,stateStore:t.stateStore,adapterRegistry:y,workspaceManager:st,templateEngine:A,processManager:p,eventBus:t.eventBus,taskService:t.taskService,agentService:t.agentService,runService:t.runService,contextStore:t.contextStore,messageService:t.messageService,goalStore:t.goalStore,skillLoader:rt,config:t.config,projectRoot:m.projectRoot,lockPath:t.paths.lockPath});return {...t,processManager:p,adapterRegistry:y,workspaceManager:st,templateEngine:A,skillLoader:rt,doctorService:It,orchestrator:At}}async function Mr(m){return zt(m)}export{Mr as buildContainer,zt as buildFullContainer,Yt as buildLightContainer};
package/dist/index.d.ts CHANGED
@@ -904,9 +904,10 @@ declare class AgentService {
904
904
  remove(id: string): Promise<void>;
905
905
  update(id: string, fields: {
906
906
  name?: string;
907
+ adapter?: string;
907
908
  role?: string;
908
909
  model?: string;
909
- effort?: Agent['config']['effort'];
910
+ effort?: Agent['config']['effort'] | '';
910
911
  approval_policy?: Agent['config']['approval_policy'];
911
912
  }): Promise<Agent>;
912
913
  disable(id: string): Promise<Agent>;
package/dist/index.js CHANGED
@@ -992,6 +992,11 @@ var AgentService = class {
992
992
  }
993
993
  agent.name = fields.name.trim();
994
994
  }
995
+ if (fields.adapter !== void 0) {
996
+ const adapter = fields.adapter.trim();
997
+ if (!adapter) throw new InvalidArgumentsError("Agent adapter cannot be empty");
998
+ agent.adapter = adapter;
999
+ }
995
1000
  if (fields.role !== void 0) agent.role = fields.role || void 0;
996
1001
  if (fields.model !== void 0) agent.config.model = fields.model || void 0;
997
1002
  if (fields.effort !== void 0) agent.config.effort = fields.effort || void 0;