@routecraft/cli 0.6.0-canary.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tui/app.js CHANGED
@@ -1,7 +1,7 @@
1
- import {a as a$1}from'../chunk-R2ZD52FM.js';import {a}from'../chunk-5UHEZNN5.js';import {useState,useCallback,useEffect,Fragment as Fragment$1}from'react';import {render,useApp,useStdout,useInput,Box,Text}from'ink';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var st=[{items:[{key:"capabilities",label:"Capabilities",shortcut:"1"}]},{items:[{key:"exchanges",label:"Exchanges",shortcut:"2"},{key:"errors",label:"Errors",shortcut:"3"},{key:"events",label:"Events",shortcut:"4"}]}],Dt=st.flatMap(e=>e.items);function ge(e,t){return t<=0?"":e.length>t?e.slice(0,t-1)+"\u2026":e}function _(e){return e==null||!Number.isFinite(e)||e<0?"-":e===0?"<1ms":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function oe(e){switch(e){case "completed":case "started":return "green";case "failed":return "red";case "stopped":case "dropped":return "yellow";default:return "white"}}function B(e,t){return t===void 0?e:t<=0?"":e.length>t?e.slice(0,t-1)+"\u2026":e.padEnd(t)}function Xt(e){try{let t=JSON.parse(e),o="exchangeId"in t?`${String(t.exchangeId).slice(0,8)}`:"",s="duration"in t?_(t.duration):"";if("operation"in t&&"routeId"in t){let r="adapter"in t?`(${t.adapter})`:"adapterId"in t?`(${t.adapterId})`:"",n="";if("metadata"in t&&typeof t.metadata=="object"&&t.metadata!==null){let u=t.metadata,l=Object.keys(u).slice(0,2);l.length>0&&(n=l.map(m=>`${m}=${u[m]}`).join(" "));}return {step:String(t.operation),adapter:r,exchange:o,duration:s,meta:n}}if("routeId"in t&&"exchangeId"in t){let r="error"in t?"(err)":"reason"in t?`(${String(t.reason).slice(0,8)})`:"";return {step:String(t.routeId),adapter:r,exchange:o,duration:s,meta:""}}if("route"in t&&typeof t.route=="object"&&t.route!==null){let r=t.route;return {step:r.routeId??r.definition?.id??"?",adapter:"",exchange:"",duration:"",meta:""}}if("pluginId"in t)return {step:`plugin=${t.pluginId}`,adapter:"",exchange:"",duration:"",meta:""};if("error"in t){let r=t.error;return {step:typeof r=="object"&&r!==null&&"message"in r?String(r.message):String(r),adapter:"",exchange:"",duration:"",meta:""}}return null}catch{return null}}function It(e,t){let o=Xt(t);return o||{step:t,adapter:"",exchange:"",duration:"",meta:""}}function q(e){return e.toLocaleString("en-US")}function at(e,t,o){return o<=0?t:e<t?e:e>=t+o?e-o+1:t}function Ce(e=0){let[t,o]=useState(e),[s,r]=useState(0),n=useCallback((m,d,g)=>{let p=Math.max(0,Math.min(m,d-1));o(p),r(f=>at(p,f,g));},[]),u=useCallback((m,d,g)=>{o(p=>{let f=Math.max(0,Math.min(p+m,d-1));return r(i=>at(f,i,g)),f});},[]),l=useCallback(()=>{o(0),r(0);},[]);return {selectedIndex:t,scrollOffset:s,moveBy:u,moveTo:n,reset:l}}function S({title:e,subtitle:t,color:o="gray",width:s,flexGrow:r,paddingX:n=1,children:u}){let l=s?s-2-n*2:20;return jsxs(Box,{flexDirection:"column",borderStyle:"round",borderColor:o,paddingX:n,width:s,flexGrow:r,children:[e&&jsxs(Fragment,{children:[jsxs(Text,{bold:true,children:[e,t&&jsxs(Fragment,{children:[" ",t]})]}),jsx(Text,{dimColor:true,children:"\u2500".repeat(Math.max(l,1))})]}),u]})}var qt=[192,36,18,9],Yt=10240,De=[{max:0,color:"gray"},{max:10,color:"green"},{max:20,color:"green"},{max:30,color:"yellow"},{max:40,color:"yellow"},{max:50,color:"red"}];function He({values:e,columns:t,steps:o=De,label:s}){let r=o.length-1,n=e.length>=t?e.slice(e.length-t):[...new Array(t-e.length).fill(0),...e],u=n.map(d=>{if(d<=0)return 0;for(let g=1;g<o.length;g++)if(d<o[g].max)return g;return r}),l=Math.ceil(r/4),m=[];for(let d=l-1;d>=0;d--){let g=d*4,p=[];for(let f=0;f<n.length;f++){let i=u[f],y=0,k="";for(let X=0;X<4;X++){let E=g+X+1;if(E>r)break;(i>=E||i===0&&E===1)&&(y|=qt[X],k=i===0?o[0].color:o[E].color);}let L=String.fromCharCode(Yt+y),K=p[p.length-1];K&&K.color===k?K.text+=L:p.push({text:L,color:k});}m.push(jsx(Text,{children:p.map((f,i)=>f.color?jsx(Text,{color:f.color,children:f.text},i):jsx(Text,{children:f.text},i))},d));}return jsxs(Fragment,{children:[m,s&&jsx(Text,{dimColor:true,children:s})]})}function Bt({route:e}){return jsxs(Fragment,{children:[jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:"cyan",children:e.id})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:oe(e.status),children:e.status})," ","Exchanges: ",jsx(Text,{bold:true,children:q(e.totalExchanges)})," ","Errors:"," ",jsx(Text,{bold:true,...e.failedExchanges>0?{color:"red"}:{},children:q(e.failedExchanges)})," ","Dropped:"," ",jsx(Text,{bold:true,...e.droppedExchanges>0?{color:"yellow"}:{},children:q(e.droppedExchanges)})," ","Avg: ",jsx(Text,{bold:true,children:_(e.avgDurationMs)})]})]})}function Ee({columns:e,data:t,rowKey:o,selectedIndex:s,scrollOffset:r,visibleRows:n,gap:u=2,emptyMessage:l="No data",renderFullRow:m}){let d=" ".repeat(u),g=jsx(Box,{children:e.map((i,y)=>{let L=y===e.length-1?"":d;if(i.width==="flex")return jsxs(Fragment$1,{children:[jsx(Box,{flexGrow:1,children:jsx(Text,{bold:true,dimColor:true,children:i.header})}),L&&jsx(Text,{children:L})]},y);let K=i.align==="right"?i.header.padStart(i.width):B(i.header,i.width);return jsxs(Fragment$1,{children:[jsx(Text,{bold:true,dimColor:true,children:K}),L&&jsx(Text,{children:L})]},y)})});if(t.length===0)return jsxs(Fragment,{children:[g,jsx(Text,{dimColor:true,children:l})]});let p=t.slice(r,r+n),f=t.length-r-n;return jsxs(Fragment,{children:[g,p.map((i,y)=>{let k=r+y,L=k===s,K=m?.(i,k);return K!==void 0?jsx(Box,{children:K},o(i,k)):jsx(Box,{children:e.map((X,E)=>{let O=E===e.length-1?"":d,T=X.width==="flex"?void 0:X.width,w=X.render(i,L,T);return X.width==="flex"?jsxs(Fragment$1,{children:[jsx(Box,{flexGrow:1,children:jsx(Text,{wrap:"truncate",children:w})}),O&&jsx(Text,{children:O})]},E):jsxs(Fragment$1,{children:[w,O&&jsx(Text,{children:O})]},E)})},o(i,k))}),jsx(Text,{dimColor:true,children:f>0?"\u2193 more":" "})]})}function Je(e){let t=new WeakMap;function o(s){let r=e(s);if(!r)return;let n=t.get(r);return n||(n=It(r.eventName,r.details),t.set(r,n)),n}return [{header:"Step",width:10,render:(s,r,n)=>{let u=o(s);return u?jsx(Text,{children:B(u.step,n)}):jsx(Text,{children:B("",n)})}},{header:"Adapter",width:10,render:(s,r,n)=>{let u=o(s);return u?jsx(Text,{children:B(u.adapter,n)}):jsx(Text,{children:B("",n)})}},{header:"Exchange",width:12,render:(s,r,n)=>{let u=o(s);return u?jsx(Text,{children:B(u.exchange,n)}):jsx(Text,{children:B("",n)})}},{header:"Duration",width:8,align:"right",render:s=>{let r=o(s);return r?jsx(Text,{children:r.duration.padStart(8)}):jsx(Text,{children:""})}}]}function Te(){return {header:"",width:2,render:(e,t)=>jsx(Text,{...t?{color:"cyan"}:{},bold:t,children:t?"> ":" "})}}var tr=[Te(),{header:"ID",width:"flex",render:(e,t)=>jsx(Text,{...t?{color:"cyan"}:{},bold:t,children:e.id})},{header:"Status",width:9,render:(e,t,o)=>jsx(Text,{color:oe(e.status),children:B(e.status,o)})},{header:"Duration",width:8,align:"right",render:e=>jsx(Text,{children:_(e.durationMs).padStart(8)})},{header:"Time",width:8,render:(e,t,o)=>jsx(Text,{dimColor:true,children:B(e.startedAt.replace("T"," ").slice(11,19),o)})}];function Ve({capabilityId:e,route:t,exchanges:o,selectedIndex:s,scrollOffset:r,width:n,height:u,color:l="gray",activity:m}){let d=Math.ceil((De.length-1)/4),g=t?2+d+2:0,p=Math.max(u-6-g,3),f=t?"EXCHANGES":`EXCHANGES: ${e}`;return jsxs(Box,{flexDirection:"column",width:n,flexGrow:1,children:[t&&jsxs(S,{width:n,children:[jsx(Bt,{route:t}),jsx(Text,{children:" "}),jsx(He,{values:m?m.throughput:[],columns:n-4,label:"Exchanges per 5s bucket"})]}),jsx(S,{title:f,width:n,flexGrow:1,color:l,children:jsx(Ee,{columns:tr,data:o,rowKey:i=>i.id+i.contextId,selectedIndex:s,scrollOffset:r,visibleRows:p,emptyMessage:"No exchanges"})})]})}function rr(e){let t=[],o=/("(?:[^"\\]|\\.)*")\s*:|("(?:[^"\\]|\\.)*")|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)|(\btrue\b|\bfalse\b)|(\bnull\b)|([{}[\],:])/g,s=0,r;for(;(r=o.exec(e))!==null;)r.index>s&&t.push({text:e.slice(s,r.index),type:"brace"}),r[1]!==void 0?(t.push({text:r[1],type:"key"}),t.push({text:":",type:"brace"})):r[2]!==void 0?t.push({text:r[2],type:"string"}):r[3]!==void 0?t.push({text:r[3],type:"number"}):r[4]!==void 0?t.push({text:r[4],type:"boolean"}):r[5]!==void 0?t.push({text:r[5],type:"null"}):r[6]!==void 0&&t.push({text:r[6],type:"brace"}),s=r.index+r[0].length;return s<e.length&&t.push({text:e.slice(s),type:"brace"}),t}var nr={key:"cyan",string:"green",number:"yellow",boolean:"yellow",null:"red",brace:"gray"};function Ae(e,t){try{let o=JSON.parse(e);return JSON.stringify(o,null,2).split(`
2
- `).map(r=>{let n=Math.max(1,t);return r.length>n?r.slice(0,Math.max(0,n-1))+"\u2026":r})}catch{let o=Math.max(1,t);return e.split(`
3
- `).map(s=>s.length>o?s.slice(0,Math.max(0,o-1))+"\u2026":s)}}function Ue({line:e}){let t=rr(e);return t.length===0?jsx(Text,{children:e}):jsx(Text,{children:t.map((o,s)=>jsx(Text,{color:nr[o.type],children:o.text},s))})}function Xe(e){try{let t=JSON.parse(e);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function sr(e,t){let o=new Map,s=0;o.set(t,{exchangeId:t,label:"parent",events:[]});for(let r of e){let n=Xe(r.details),u=n?String(n.exchangeId??""):"",l=!u||u===t?t:u;o.has(l)||(s++,o.set(l,{exchangeId:l,label:`child ${s}`,events:[]})),o.get(l).events.push(r);}return Array.from(o.values())}var ar=[Te(),{header:"Time",width:8,render:(e,t,o)=>{if(!e.event)return jsx(Text,{children:B("",o)});let s=" ".repeat(e.indent);return jsxs(Text,{dimColor:true,children:[s,e.event.timestamp.replace("T"," ").slice(11,19)]})}},{header:"Event",width:"flex",render:e=>e.event?jsx(Text,{color:"cyan",children:e.event.eventName}):jsx(Text,{})},...Je(e=>e.event)];function We({exchange:e,events:t,width:o,height:s,scrollOffset:r,selectedIndex:n=-1,color:u="gray"}){let l=e.error?2:0,m=Math.max(s-9-l,3),d=sr(t,e.id),g=d.length>1,p=[];for(let i of d){g&&p.push({type:"header",text:`${i.label} (${i.exchangeId.slice(0,8)}) - ${i.events.length} events`,indent:0});for(let y of i.events)p.push({type:"event",event:y,indent:g?2:0});}let f=g?`EXCHANGE FLOW (${d.length} exchanges, ${t.length} events)`:`RELATED EVENTS (${t.length})`;return jsxs(Box,{flexDirection:"column",width:o,flexGrow:1,children:[jsxs(S,{width:o,children:[jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:"cyan",children:e.routeId})]}),jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:"cyan",children:ge(e.id,o-14)})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:oe(e.status),children:e.status}),e.durationMs!==null&&jsxs(Text,{children:[" ","Duration:"," ",jsx(Text,{bold:true,children:_(e.durationMs)})]})," ","Started: ",jsx(Text,{bold:true,children:e.startedAt}),e.completedAt&&jsxs(Text,{children:[" ","Completed: ",jsx(Text,{bold:true,children:e.completedAt})]})]}),e.error&&e.status==="failed"&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Text,{color:"red",children:["Error: ",e.error]})]}),e.error&&e.status==="dropped"&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Text,{color:"yellow",children:["Reason: ",e.error]})]})]}),jsx(S,{title:f,width:o,flexGrow:1,color:u,children:jsx(Ee,{columns:ar,data:p,rowKey:(i,y)=>i.type==="header"?`h-${y}`:`${i.event?.id??i.event?.timestamp}-${y}`,selectedIndex:n,scrollOffset:r,visibleRows:m,emptyMessage:"No related events found",renderFullRow:i=>i.type==="header"?jsx(Text,{bold:true,color:"yellow",children:i.text}):void 0})})]})}var ir=[Te(),{header:"Time",width:19,render:(e,t,o)=>jsx(Text,{...t?{color:"cyan"}:{},bold:t,children:B(e.timestamp.replace("T"," ").slice(0,19),o)})},{header:"Event",width:"flex",render:e=>jsx(Text,{color:"cyan",children:e.eventName})},...Je(e=>e)];function _t({events:e,selectedIndex:t,scrollOffset:o,width:s,height:r,color:n="gray"}){let u=Math.max(r-6,5);return jsx(S,{title:"EVENTS",subtitle:jsxs(Text,{dimColor:true,children:["(",e.length," total)"]}),width:s,flexGrow:1,color:n,children:jsx(Ee,{columns:ir,data:e,rowKey:(l,m)=>l.id!==void 0?String(l.id):`${l.timestamp}-${m}`,selectedIndex:t,scrollOffset:o,visibleRows:u,emptyMessage:"No events recorded yet."})})}function Ne({event:e,width:t,height:o,scrollOffset:s,color:r="cyan"}){let n=Xe(e.details),u=n&&typeof n.routeId=="string"?n.routeId:void 0,l=n&&typeof n.exchangeId=="string"?n.exchangeId:void 0,d=2+(1+(u?1:0)+(l?1:0)+2),g=5,p=Math.max(t-6,20),f=Ae(e.details,p),i=Math.max(o-d-g,3),y=f.slice(s,s+i);return jsxs(Box,{flexDirection:"column",width:t,flexGrow:1,children:[jsxs(S,{width:t,children:[jsxs(Text,{children:["Context:"," ",jsx(Text,{bold:true,color:"cyan",children:e.contextId})]}),u&&jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:"cyan",children:u})]}),l&&jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:"cyan",children:l})]}),jsxs(Text,{children:["Event:"," ",jsx(Text,{bold:true,color:"cyan",children:e.eventName})]}),jsxs(Text,{children:["Time: ",jsx(Text,{bold:true,children:e.timestamp.replace("T"," ")})]})]}),jsxs(S,{title:"DETAILS",subtitle:jsxs(Text,{dimColor:true,children:["(",s+1,"-",Math.min(s+i,f.length),"/",f.length," lines)"]}),width:t,flexGrow:1,color:r,children:[y.map((k,L)=>jsx(Ue,{line:k},s+L)),y.length<i&&Array.from({length:i-y.length}).map((k,L)=>jsx(Text,{children:" "},`pad-${L}`))]})]})}function ur(e,t){let o=[];return o.push("HEADERS"),o.push(...Ae(e.headers,t)),o.push(""),o.push("BODY"),e.body!==null?(o.push(...Ae(e.body,t)),e.truncated&&(o.push(""),o.push("[Body truncated to configured limit]"))):o.push("[null]"),o}function qe({exchange:e,snapshot:t,width:o,height:s,scrollOffset:r,color:n="cyan"}){let m=Math.max(o-6,20),d=Math.max(s-5-5,3),p=t!==null?ur(t,m):["[Snapshots not captured]","","Enable with:"," telemetry({ sqlite: { captureSnapshots: true } })"],f=p.slice(r,r+d);return jsxs(Box,{flexDirection:"column",width:o,flexGrow:1,children:[jsxs(S,{width:o,children:[jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:"cyan",children:e.routeId})]}),jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:"cyan",children:ge(e.id,o-14)})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:oe(e.status),children:e.status}),e.durationMs!==null&&jsxs(Text,{children:[" ","Duration:"," ",jsx(Text,{bold:true,children:_(e.durationMs)})]})]})]}),jsxs(S,{title:"EXCHANGE SNAPSHOT",subtitle:jsxs(Text,{dimColor:true,children:["(",r+1,"-",Math.min(r+d,p.length),"/",p.length," lines)"]}),width:o,flexGrow:1,color:n,children:[f.map((i,y)=>i==="HEADERS"||i==="BODY"?jsx(Text,{bold:true,color:"yellow",children:i},r+y):i.startsWith("[")?jsx(Text,{dimColor:true,children:i},r+y):jsx(Ue,{line:i},r+y)),f.length<d&&Array.from({length:d-f.length}).map((i,y)=>jsx(Text,{children:" "},`pad-${y}`))]})]})}function mr(e){return e.failedExchanges>0?"red":e.totalExchanges>0?"green":"yellow"}function Pt({routes:e,selectedIndex:t,listOffset:o,visibleRows:s,width:r}){let n=o;return jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"\u2500".repeat(r+2)}),e.length===0?jsx(Text,{dimColor:true,children:"No capabilities"}):e.slice(n,n+s).map((u,l)=>{let m=n+l;return jsxs(Text,{wrap:"truncate",children:[jsx(Text,{...m===t?{color:"cyan"}:{},bold:m===t,children:m===t?"> ":" "}),jsx(Text,{color:mr(u),children:"\u25CF "}),jsx(Text,{...m===t?{color:"cyan"}:{},bold:m===t,children:ge(u.id,r-2)})]},u.id)}),e.length>s&&jsxs(Text,{dimColor:true,children:[t+1,"/",e.length]})]})}function Er({db:e}){let{exit:t}=useApp(),{stdout:o}=useStdout(),s=o?.columns??80,r=o?.rows??24,[n,u]=useState("capabilities"),[l,m]=useState("nav"),[d,g]=useState(false),[p,f]=useState([]),[i,y]=useState({totalRoutes:0,totalExchanges:0,completedExchanges:0,failedExchanges:0,droppedExchanges:0,errorRate:0,avgDurationMs:null,p90DurationMs:null,p95DurationMs:null,p99DurationMs:null}),[k,L]=useState([]),[K,X]=useState(void 0),E=Ce(),[W,O]=useState([]),T=Ce(),[w,ht]=useState(void 0),[he,ft]=useState([]),[Be,gt]=useState([]),te=Ce(),F=Ce(),[re,bt]=useState(void 0),[G,ce]=useState(false),[Le,ne]=useState(0),[H,Ye]=useState(false),[ze,ke]=useState(0),[Qe,jt]=useState(null),fe=50,de=10,Oe=Math.max(Math.min(Math.floor(s*.18),26),16),ue=Math.max(Math.min(Math.floor(s*.22),30),20),N=Math.max(s-Oe-ue,30),R=Math.max(r-5,10),Ze=Math.max(R-10,3),et=useCallback(()=>{try{let c=e.getRouteSummary();f(c),y(e.getMetrics());let a=ue-4;L(e.getLiveTrafficBuckets(a,5));let I=N-4,b=c[E.selectedIndex];if(b&&X(e.getSingleRouteActivity(b.id,I,5)),l==="center")return;if(n==="capabilities"){let h=c[E.selectedIndex];h&&O(e.getExchangesByRoute(h.id,fe));}else n==="exchanges"?O(e.getAllExchanges(fe)):n==="errors"?O(e.getFailedExchanges(fe)):n==="events"&&gt(e.getRecentEvents({limit:200}));}catch{}},[e,n,E.selectedIndex,ue,N,l]);useEffect(()=>{et();let c=setInterval(et,2e3);return ()=>{clearInterval(c);}},[et]);let yt=useCallback(c=>{E.moveTo(c,p.length,Ze),T.reset();let a=p[c];a&&O(e.getExchangesByRoute(a.id,fe));},[e,p,E,T,Ze]),Gt=useCallback(c=>{u(c),g(false),ce(false),Ye(false),m("nav"),T.reset(),c==="exchanges"?O(e.getAllExchanges(fe)):c==="errors"?O(e.getFailedExchanges(fe)):c==="events"&&(te.reset(),gt(e.getRecentEvents({limit:200})));},[e,T,te]),tt=p[E.selectedIndex],Ft=Math.ceil((De.length-1)/4),Ht=tt?2+Ft+2:0,_e=Math.max(R-6-Ht,3),Et=Math.max(R-6,5);useInput((c,a)=>{if(c==="q"){e.close(),t();return}let I=Dt.find(b=>b.shortcut===c);if(I){Gt(I.key);return}if(n==="events"){if(G){let b=a.ctrl?de:1;c==="j"||a.downArrow?ne(h=>h+b):c==="k"||a.upArrow?ne(h=>Math.max(h-b,0)):(a.escape||a.backspace||a.delete)&&(ce(false),ne(0));return}if(l==="nav")a.return&&m("center");else {let b=a.ctrl?de:1;if(c==="j"||a.downArrow)te.moveBy(b,Be.length,Et);else if(c==="k"||a.upArrow)te.moveBy(-b,Be.length,Et);else if(a.return){let h=Be[te.selectedIndex];h&&(bt(h),ne(0),ce(true));}else (a.escape||a.backspace||a.delete)&&(m("nav"),te.reset());}return}if(H){let b=a.ctrl?de:1;c==="j"||a.downArrow?ke(h=>h+b):c==="k"||a.upArrow?ke(h=>Math.max(h-b,0)):(a.escape||a.backspace||a.delete)&&(Ye(false),ke(0));return}if(d&&!G){let b=w?.error?2:0,h=Math.max(R-9-b,3),Jt=new Set(he.map(me=>{try{let Re=JSON.parse(me.details);return String(Re.exchangeId??"")}catch{return ""}})),vt=Math.max(Jt.size,1),Vt=vt>1?vt:0,wt=he.length+Vt,Rt=a.ctrl?de:1;if(c==="j"||a.downArrow)F.moveBy(Rt,wt,h);else if(c==="k"||a.upArrow)F.moveBy(-Rt,wt,h);else if(a.return){let me=0,Re,Pe=w?.id??"",xe=new Map;xe.set(Pe,[]);for(let Se of he)try{let rt=JSON.parse(Se.details),nt=String(rt.exchangeId??""),ot=!nt||nt===Pe?Pe:nt;xe.has(ot)||xe.set(ot,[]),xe.get(ot).push(Se);}catch{xe.get(Pe).push(Se);}let Ut=xe.size>1;for(let[,Se]of xe){Ut&&me++;for(let rt of Se)me===F.selectedIndex&&(Re=rt),me++;}Re&&(bt(Re),ne(0),ce(true));}else if(c==="e"&&w){let me=e.getExchangeSnapshot(w.id);jt(me),ke(0),Ye(true);}else (a.escape||a.backspace||a.delete)&&(F.reset(),g(false));return}if(d&&G){let b=a.ctrl?de:1;c==="j"||a.downArrow?ne(h=>h+b):c==="k"||a.upArrow?ne(h=>Math.max(h-b,0)):(a.escape||a.backspace||a.delete)&&(ce(false),ne(0));return}if(n==="capabilities"&&l==="nav"){if(c==="j"||a.downArrow)yt(Math.min(E.selectedIndex+1,p.length-1));else if(c==="k"||a.upArrow)yt(Math.max(E.selectedIndex-1,0));else if(a.return){m("center");let b=p[E.selectedIndex];b&&O(e.getExchangesByRoute(b.id));}return}if(n==="capabilities"&&l==="center"){let b=a.ctrl?de:1;if(c==="j"||a.downArrow)T.moveBy(b,W.length,_e);else if(c==="k"||a.upArrow)T.moveBy(-b,W.length,_e);else if(a.return){let h=W[T.selectedIndex];h&&(ht(h),ft(e.getEventsByExchange(h.id,h.correlationId)),F.reset(),ce(false),g(true));}else (a.escape||a.backspace||a.delete)&&(m("nav"),T.reset());return}if(n==="exchanges"||n==="errors"){if(l==="nav")a.return&&(m("center"),O(n==="exchanges"?e.getAllExchanges():e.getFailedExchanges()));else {let b=a.ctrl?de:1;if(c==="j"||a.downArrow)T.moveBy(b,W.length,_e);else if(c==="k"||a.upArrow)T.moveBy(-b,W.length,_e);else if(a.return){let h=W[T.selectedIndex];h&&(ht(h),ft(e.getEventsByExchange(h.id,h.correlationId)),F.reset(),ce(false),g(true));}else (a.escape||a.backspace||a.delete)&&(m("nav"),T.reset());}return}});let Tt=n==="capabilities"&&l==="nav"&&!d,$t=!Tt,D=[];return H?(D.push({key:"j/k",action:"Scroll"}),D.push({key:"Ctrl+j/k",action:"Jump 10"}),D.push({key:"Esc",action:"Back"})):l==="center"&&(D.push({key:"j/k",action:"Navigate"}),D.push({key:"Ctrl+j/k",action:"Jump 10"})),H||(l==="nav"?n==="capabilities"?(D.push({key:"j/k",action:"Navigate"}),D.push({key:"Enter",action:"Exchanges"})):D.push({key:"Enter",action:"Browse"}):!d&&!G?(D.push({key:"Enter",action:"Detail"}),D.push({key:"Esc",action:"Back"})):d&&!G?(D.push({key:"Enter",action:"Event detail"}),D.push({key:"e",action:"Snapshot"}),D.push({key:"Esc",action:"Back"})):D.push({key:"Esc",action:"Back"})),D.push({key:"1..4",action:"Switch view"}),D.push({key:"q",action:"Quit"}),jsxs(Box,{flexDirection:"column",width:s,height:r,children:[jsxs(Box,{borderStyle:"round",borderColor:"cyan",paddingX:1,width:s,children:[jsx(Text,{bold:true,color:"cyan",children:"ROUTECRAFT TUI"}),jsx(Text,{children:" "}),jsxs(Text,{dimColor:true,children:["v",a$1]})]}),jsxs(Box,{flexDirection:"row",width:s,flexGrow:1,children:[jsx(Box,{flexDirection:"column",width:Oe,children:jsxs(S,{title:"NAVIGATION",color:Tt?"cyan":"gray",width:Oe,flexGrow:1,children:[st.map((c,a)=>jsxs(Box,{flexDirection:"column",children:[a>0&&jsx(Text,{children:" "}),c.label&&jsx(Text,{dimColor:true,bold:true,children:c.label}),c.items.map(I=>jsxs(Text,{children:[jsxs(Text,{bold:n===I.key,...n===I.key?{color:"cyan"}:{},children:[n===I.key?"> ":" ",I.label]}),jsxs(Text,{dimColor:true,children:[" (",I.shortcut,")"]})]},I.key))]},c.label??a)),n==="capabilities"&&jsx(Pt,{routes:p,selectedIndex:E.selectedIndex,listOffset:E.scrollOffset,visibleRows:Ze,width:Oe-6})]})}),n==="capabilities"&&!d&&jsx(Ve,{capabilityId:tt?.id??"",route:tt,exchanges:W,selectedIndex:l==="center"?T.selectedIndex:-1,scrollOffset:l==="center"?T.scrollOffset:0,width:N,height:R,color:$t?"cyan":"gray",activity:K}),n==="capabilities"&&H&&w&&jsx(qe,{exchange:w,snapshot:Qe,width:N,height:R,scrollOffset:ze,color:"cyan"}),n==="capabilities"&&d&&w&&!G&&!H&&jsx(We,{exchange:w,events:he,width:N,height:R,selectedIndex:F.selectedIndex,scrollOffset:F.scrollOffset,color:"cyan"}),n==="capabilities"&&d&&G&&!H&&re&&jsx(Ne,{event:re,width:N,height:R,scrollOffset:Le,color:"cyan"}),n==="exchanges"&&!d&&jsx(Ve,{capabilityId:"All Capabilities",exchanges:W,selectedIndex:l==="center"?T.selectedIndex:-1,scrollOffset:l==="center"?T.scrollOffset:0,width:N,height:R,color:l==="center"?"cyan":"gray"}),n==="exchanges"&&H&&w&&jsx(qe,{exchange:w,snapshot:Qe,width:N,height:R,scrollOffset:ze,color:"cyan"}),n==="exchanges"&&d&&w&&!G&&!H&&jsx(We,{exchange:w,events:he,width:N,height:R,selectedIndex:F.selectedIndex,scrollOffset:F.scrollOffset,color:"cyan"}),n==="exchanges"&&d&&G&&!H&&re&&jsx(Ne,{event:re,width:N,height:R,scrollOffset:Le,color:"cyan"}),n==="errors"&&!d&&jsx(Ve,{capabilityId:"Failed Exchanges",exchanges:W,selectedIndex:l==="center"?T.selectedIndex:-1,scrollOffset:l==="center"?T.scrollOffset:0,width:N,height:R,color:l==="center"?"cyan":"gray"}),n==="errors"&&H&&w&&jsx(qe,{exchange:w,snapshot:Qe,width:N,height:R,scrollOffset:ze,color:"cyan"}),n==="errors"&&d&&w&&!G&&!H&&jsx(We,{exchange:w,events:he,width:N,height:R,selectedIndex:F.selectedIndex,scrollOffset:F.scrollOffset,color:"cyan"}),n==="errors"&&d&&G&&!H&&re&&jsx(Ne,{event:re,width:N,height:R,scrollOffset:Le,color:"cyan"}),n==="events"&&!G&&jsx(_t,{events:Be,selectedIndex:l==="center"?te.selectedIndex:-1,scrollOffset:l==="center"?te.scrollOffset:0,width:N,height:R,color:l==="center"?"cyan":"gray"}),n==="events"&&G&&re&&jsx(Ne,{event:re,width:N,height:R,scrollOffset:Le,color:"cyan"}),jsxs(Box,{flexDirection:"column",width:ue,children:[jsxs(S,{title:"METRICS",width:ue,flexGrow:1,children:[jsx(He,{values:k,columns:ue-4,steps:[{max:0,color:"gray"},...Array.from({length:7},(c,a)=>({max:(a+1)*5,color:"green"})),...Array.from({length:7},(c,a)=>({max:35+(a+1)*10,color:"yellow"})),...Array.from({length:6},(c,a)=>({max:105+(a+1)*25,color:"red"}))],label:"Exchanges per 5s bucket"}),jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"THROUGHPUT"}),[["Exchanges",q(i.totalExchanges),"cyan"],["Completed",q(i.completedExchanges),"green"],["Errors",q(i.failedExchanges),i.failedExchanges>0?"red":"green"],["Dropped",q(i.droppedExchanges),i.droppedExchanges>0?"yellow":"green"],["Error Rate",`${(i.errorRate*100).toFixed(1)}%`,i.errorRate>.1?"red":"green"],["Capabilities",q(i.totalRoutes),""]].map(([c,a,I])=>jsxs(Box,{children:[jsxs(Text,{children:[c,":"]}),jsx(Box,{flexGrow:1,justifyContent:"flex-end",children:jsx(Text,{bold:true,...I?{color:I}:{},children:a})})]},c)),jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"LATENCY (5m)"}),[["Avg",_(i.avgDurationMs),""],["p90",_(i.p90DurationMs),""],["p95",_(i.p95DurationMs),""],["p99",_(i.p99DurationMs),""]].map(([c,a,I])=>jsxs(Box,{children:[jsxs(Text,{children:[c,":"]}),jsx(Box,{flexGrow:1,justifyContent:"flex-end",children:jsx(Text,{bold:true,...I?{color:I}:{},children:a})})]},c))]}),jsx(S,{title:"KEYMAP",width:ue,children:D.map(c=>jsxs(Box,{children:[jsx(Text,{children:c.action}),jsx(Box,{flexGrow:1,justifyContent:"flex-end",children:jsxs(Text,{color:"yellow",children:["[",c.key,"]"]})})]},c.key))})]})]})]})}async function to(e){let t;try{t=await a.open(e);}catch(s){let r=s instanceof Error?s.message:String(s);process.stderr.write(`Failed to open telemetry database: ${r}
1
+ import {a}from'../chunk-QJXOM5GC.js';import {a as a$1}from'../chunk-R3PVIDDT.js';import {useState,useCallback,useEffect,useMemo,Fragment as Fragment$1}from'react';import {useApp,useStdout,useInput,Box,Text,render}from'ink';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var Ut=[{items:[{key:"capabilities",label:"Capabilities",shortcut:"1"}]},{items:[{key:"agents",label:"Agents",shortcut:"2"},{key:"tools",label:"Tools",shortcut:"3"}]},{items:[{key:"exchanges",label:"Exchanges",shortcut:"4"},{key:"errors",label:"Errors",shortcut:"5"},{key:"events",label:"Events",shortcut:"6"}]}],Xt=Ut.flatMap(e=>e.items);function Re(e,t){return t<=0?"":e.length>t?e.slice(0,t-1)+"\u2026":e}function M(e){return e==null||!Number.isFinite(e)||e<0?"-":e===0?"<1ms":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function Z(e){switch(e){case "completed":case "started":case "finished":case "running":return "green";case "failed":case "error":return "red";case "stopped":case "dropped":return "yellow";default:return "white"}}function vo(e){return e<1e5?ee(e):e<1e6?`${Math.round(e/1e3)}k`:`${(e/1e6).toFixed(1)}M`}function Ye(e){switch(e){case "result":return "green";case "error":return "red";default:return "yellow"}}function R(e,t){return t===void 0?e:t<=0?"":e.length>t?e.slice(0,t-1)+"\u2026":e.padEnd(t)}function ln(e){try{let t=JSON.parse(e),o="exchangeId"in t?`${String(t.exchangeId).slice(0,8)}`:"",l="duration"in t?M(t.duration):"";if("operation"in t&&"routeId"in t){let s="adapter"in t?`(${t.adapter})`:"adapterId"in t?`(${t.adapterId})`:"",n="";if("metadata"in t&&typeof t.metadata=="object"&&t.metadata!==null){let f=t.metadata,m=Object.keys(f).slice(0,2);m.length>0&&(n=m.map(g=>`${g}=${f[g]}`).join(" "));}return {step:String(t.operation),adapter:s,exchange:o,duration:l,meta:n}}if("routeId"in t&&"exchangeId"in t){let s="error"in t?"(err)":"reason"in t?`(${String(t.reason).slice(0,8)})`:"";return {step:String(t.routeId),adapter:s,exchange:o,duration:l,meta:""}}if("route"in t&&typeof t.route=="object"&&t.route!==null){let s=t.route;return {step:s.routeId??s.definition?.id??"?",adapter:"",exchange:"",duration:"",meta:""}}if("pluginId"in t)return {step:`plugin=${t.pluginId}`,adapter:"",exchange:"",duration:"",meta:""};if("error"in t){let s=t.error;return {step:typeof s=="object"&&s!==null&&"message"in s?String(s.message):String(s),adapter:"",exchange:"",duration:"",meta:""}}return null}catch{return null}}function Io(e,t){let o=ln(t);return o||{step:t,adapter:"",exchange:"",duration:"",meta:""}}function ee(e){return e.toLocaleString("en-US")}function Wt(e,t,o){return o<=0?t:e<t?e:e>=t+o?e-o+1:t}function we(e=0){let[t,o]=useState(e),[l,s]=useState(0),n=useCallback((g,u,x)=>{let T=Math.max(0,Math.min(g,u-1));o(T),s(i=>Wt(T,i,x));},[]),f=useCallback((g,u,x)=>{o(T=>{let i=Math.max(0,Math.min(T+g,u-1));return s(h=>Wt(i,h,x)),i});},[]),m=useCallback(()=>{o(0),s(0);},[]);return {selectedIndex:t,scrollOffset:l,moveBy:f,moveTo:n,reset:m}}var c={accent:"#7482ff",accentSoft:"#9ea8fd",success:"green",error:"red",warn:"yellow",muted:"gray"};function _(e){return e?{color:c.accent,bold:true}:{}}function w({title:e,subtitle:t,color:o=c.muted,width:l,flexGrow:s,paddingX:n=1,children:f}){let m=l?l-2-n*2:20;return jsxs(Box,{flexDirection:"column",borderStyle:"single",borderColor:o,paddingX:n,width:l,flexGrow:s,children:[e&&jsxs(Fragment,{children:[jsxs(Text,{bold:true,dimColor:true,children:[e,t&&jsxs(Fragment,{children:[" ",t]})]}),jsx(Text,{dimColor:true,children:"\u2500".repeat(Math.max(m,1))})]}),f]})}var un=[192,36,18,9],dn=10240,ft=[{max:0,color:"gray"},{max:10,color:"green"},{max:20,color:"green"},{max:30,color:"yellow"},{max:40,color:"yellow"},{max:50,color:"red"}];function Dt({values:e,columns:t,steps:o=ft,label:l}){let s=o.length-1,n=e.length>=t?e.slice(e.length-t):[...new Array(t-e.length).fill(0),...e],f=n.map(u=>{if(u<=0)return 0;for(let x=1;x<o.length;x++)if(u<o[x].max)return x;return s}),m=Math.ceil(s/4),g=[];for(let u=m-1;u>=0;u--){let x=u*4,T=[];for(let i=0;i<n.length;i++){let h=f[i],p=0,y="";for(let D=0;D<4;D++){let ie=x+D+1;if(ie>s)break;(h>=ie||h===0&&ie===1)&&(p|=un[D],y=h===0?o[0].color:o[ie].color);}let H=String.fromCharCode(dn+p),F=T[T.length-1];F&&F.color===y?F.text+=H:T.push({text:H,color:y});}g.push(jsx(Text,{children:T.map((i,h)=>i.color?jsx(Text,{color:i.color,children:i.text},h):jsx(Text,{children:i.text},h))},u));}return jsxs(Fragment,{children:[g,l&&jsx(Text,{dimColor:true,wrap:"truncate",children:l})]})}function ko({route:e}){return jsxs(Fragment,{children:[jsxs(Text,{wrap:"truncate",children:["Capability:"," ",jsx(Text,{bold:true,color:c.accent,children:e.id})]}),jsxs(Text,{wrap:"truncate",children:["Status:"," ",jsx(Text,{bold:true,color:Z(e.status),children:e.status})," ","Exchanges: ",jsx(Text,{bold:true,children:ee(e.totalExchanges)})," ","Errors:"," ",jsx(Text,{bold:true,...e.failedExchanges>0?{color:"red"}:{},children:ee(e.failedExchanges)})," ","Dropped:"," ",jsx(Text,{bold:true,...e.droppedExchanges>0?{color:"yellow"}:{},children:ee(e.droppedExchanges)})," ","Avg: ",jsx(Text,{bold:true,children:M(e.avgDurationMs)})]})]})}function te({columns:e,data:t,rowKey:o,selectedIndex:l,scrollOffset:s,visibleRows:n,gap:f=2,emptyMessage:m="No data",renderFullRow:g}){let u=" ".repeat(f),x=jsx(Box,{children:e.map((h,p)=>{let H=p===e.length-1?"":u;if(h.width==="flex")return jsxs(Fragment$1,{children:[jsx(Box,{flexGrow:1,flexBasis:0,minWidth:0,children:jsx(Text,{bold:true,dimColor:true,wrap:"truncate",children:h.header})}),H&&jsx(Box,{flexShrink:0,children:jsx(Text,{children:H})})]},p);let F=h.align==="right"?h.header.padStart(h.width):R(h.header,h.width);return jsxs(Box,{flexShrink:0,children:[jsx(Text,{bold:true,dimColor:true,children:F}),H&&jsx(Text,{children:H})]},p)})});if(t.length===0)return jsxs(Fragment,{children:[x,jsx(Text,{dimColor:true,children:m})]});let T=t.slice(s,s+n),i=t.length-s-n;return jsxs(Fragment,{children:[x,T.map((h,p)=>{let y=s+p,H=y===l,F=g?.(h,y);return F!==void 0?jsx(Box,{children:F},o(h,y)):jsx(Box,{children:e.map((D,ie)=>{let v=ie===e.length-1?"":u,j=D.width==="flex"?void 0:D.width,rt=D.render(h,H,j);return D.width==="flex"?jsxs(Fragment$1,{children:[jsx(Box,{flexGrow:1,flexBasis:0,minWidth:0,children:jsx(Text,{wrap:"truncate",children:rt})}),v&&jsx(Box,{flexShrink:0,children:jsx(Text,{children:v})})]},ie):jsxs(Box,{flexShrink:0,children:[rt,v&&jsx(Text,{children:v})]},ie)})},o(h,y))}),jsx(Text,{dimColor:true,children:i>0?"\u2193 more":" "})]})}function kt(e,t={adapter:true,exchange:true}){let o=new WeakMap;function l(s){let n=e(s);if(!n)return;let f=o.get(n);return f||(f=Io(n.eventName,n.details),o.set(n,f)),f}return [{header:"Step",width:10,render:(s,n,f)=>{let m=l(s);return m?jsx(Text,{children:R(m.step,f)}):jsx(Text,{children:R("",f)})}},...t.adapter?[{header:"Adapter",width:10,render:(s,n,f)=>{let m=l(s);return m?jsx(Text,{children:R(m.adapter,f)}):jsx(Text,{children:R("",f)})}}]:[],...t.exchange?[{header:"Exchange",width:12,render:(s,n,f)=>{let m=l(s);return m?jsx(Text,{children:R(m.exchange,f)}):jsx(Text,{children:R("",f)})}}]:[],{header:"Duration",width:8,align:"right",render:s=>{let n=l(s);return n?jsx(Text,{children:n.duration.padStart(8)}):jsx(Text,{children:""})}}]}function oe(){return {header:"",width:2,render:(e,t)=>jsx(Text,{..._(t),children:t?"> ":" "})}}var pn=[oe(),{header:"ID",width:"flex",render:(e,t)=>jsx(Text,{..._(t),children:e.id})},{header:"Status",width:9,render:(e,t,o)=>jsx(Text,{color:Z(e.status),children:R(e.status,o)})},{header:"Duration",width:8,align:"right",render:e=>jsx(Text,{children:M(e.durationMs).padStart(8)})},{header:"Time",width:8,render:(e,t,o)=>jsx(Text,{dimColor:true,children:R(e.startedAt.replace("T"," ").slice(11,19),o)})}];function Lo({capabilityId:e,route:t,exchanges:o,selectedIndex:l,scrollOffset:s,width:n,height:f,color:m=c.muted,activity:g,title:u}){let x=Math.ceil((ft.length-1)/4),T=t?2+x+2:0,i=Math.max(f-6-T,3),h=u??(t?"EXCHANGES":`EXCHANGES: ${e}`);return jsxs(Box,{flexDirection:"column",width:n,flexGrow:1,children:[t&&jsxs(w,{width:n,children:[jsx(ko,{route:t}),jsx(Text,{children:" "}),jsx(Dt,{values:g?g.throughput:[],columns:n-4,label:"Exchanges per 5s bucket"})]}),jsx(w,{title:h,width:n,flexGrow:1,color:m,children:jsx(te,{columns:pn,data:o,rowKey:p=>`${p.id}:${p.contextId}`,selectedIndex:l,scrollOffset:s,visibleRows:i,emptyMessage:"No exchanges"})})]})}function gn(e){let t=[],o=/("(?:[^"\\]|\\.)*")\s*:|("(?:[^"\\]|\\.)*")|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)|(\btrue\b|\bfalse\b)|(\bnull\b)|([{}[\],:])/g,l=0,s;for(;(s=o.exec(e))!==null;)s.index>l&&t.push({text:e.slice(l,s.index),type:"brace"}),s[1]!==void 0?(t.push({text:s[1],type:"key"}),t.push({text:":",type:"brace"})):s[2]!==void 0?t.push({text:s[2],type:"string"}):s[3]!==void 0?t.push({text:s[3],type:"number"}):s[4]!==void 0?t.push({text:s[4],type:"boolean"}):s[5]!==void 0?t.push({text:s[5],type:"null"}):s[6]!==void 0&&t.push({text:s[6],type:"brace"}),l=s.index+s[0].length;return l<e.length&&t.push({text:e.slice(l),type:"brace"}),t}var Tn={key:"white",string:c.accentSoft,number:c.warn,boolean:c.warn,null:c.error,brace:c.muted};function xe(e,t){try{let o=JSON.parse(e);return JSON.stringify(o,null,2).split(`
2
+ `).map(s=>{let n=Math.max(1,t);return s.length>n?s.slice(0,Math.max(0,n-1))+"\u2026":s})}catch{let o=Math.max(1,t);return e.split(`
3
+ `).map(l=>l.length>o?l.slice(0,Math.max(0,o-1))+"\u2026":l)}}function et({line:e}){let t=gn(e);return t.length===0?jsx(Text,{children:e}):jsx(Text,{children:t.map((o,l)=>jsx(Text,{color:Tn[o.type],children:o.text},l))})}function At(e){try{let t=JSON.parse(e);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function En(e,t){let o=new Map,l=0;o.set(t,{exchangeId:t,label:"parent",events:[]});for(let s of e){let n=At(s.details),f=n?String(n.exchangeId??""):"",m=!f||f===t?t:f;o.has(m)||(l++,o.set(m,{exchangeId:m,label:`child ${l}`,events:[]})),o.get(m).events.push(s);}return Array.from(o.values())}function Rn(e){return [oe(),{header:"Time",width:10,render:(t,o,l)=>{if(!t.event)return jsx(Text,{children:R("",l)});let s=" ".repeat(t.indent);return jsx(Text,{dimColor:true,children:R(s+t.event.timestamp.replace("T"," ").slice(11,19),l)})}},{header:"Event",width:"flex",render:t=>t.event?jsx(Text,{children:t.event.eventName}):jsx(Text,{})},...kt(t=>t.event,{adapter:e>=80,exchange:e>=68})]}function _o({exchange:e,events:t,width:o,height:l,scrollOffset:s,selectedIndex:n=-1,color:f=c.muted}){let m=e.error?2:0,g=Math.max(l-9-m,3),u=useMemo(()=>Rn(o-4),[o]),x=En(t,e.id),T=x.length>1,i=[];for(let p of x){T&&i.push({type:"header",text:`${p.label} (${p.exchangeId.slice(0,8)}) - ${p.events.length} events`,indent:0});for(let y of p.events)i.push({type:"event",event:y,indent:T?2:0});}let h=T?`EXCHANGE FLOW (${x.length} exchanges, ${t.length} events)`:`RELATED EVENTS (${t.length})`;return jsxs(Box,{flexDirection:"column",width:o,flexGrow:1,children:[jsxs(w,{width:o,children:[jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:c.accent,children:e.routeId})]}),jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:c.accent,children:Re(e.id,o-14)})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:Z(e.status),children:e.status}),e.durationMs!==null&&jsxs(Text,{children:[" ","Duration:"," ",jsx(Text,{bold:true,children:M(e.durationMs)})]})," ","Started: ",jsx(Text,{bold:true,children:e.startedAt}),e.completedAt&&jsxs(Text,{children:[" ","Completed: ",jsx(Text,{bold:true,children:e.completedAt})]})]}),e.error&&e.status==="failed"&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Text,{color:"red",children:["Error: ",e.error]})]}),e.error&&e.status==="dropped"&&jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsxs(Text,{color:"yellow",children:["Reason: ",e.error]})]})]}),jsx(w,{title:h,width:o,flexGrow:1,color:f,children:jsx(te,{columns:u,data:i,rowKey:(p,y)=>p.type==="header"?`h-${y}`:`${p.event?.id??p.event?.timestamp}-${y}`,selectedIndex:n,scrollOffset:s,visibleRows:g,emptyMessage:"No related events found",renderFullRow:p=>p.type==="header"?jsx(Text,{bold:true,color:c.accent,children:p.text}):void 0})})]})}function Cn(e){return [oe(),{header:"Time",width:8,render:(t,o,l)=>jsx(Text,{..._(o),children:R(t.timestamp.replace("T"," ").slice(11,19),l)})},{header:"Event",width:"flex",render:t=>jsx(Text,{children:t.eventName})},...kt(t=>t,{adapter:e>=80,exchange:e>=68})]}function Po({events:e,selectedIndex:t,scrollOffset:o,width:l,height:s,color:n=c.muted}){let f=Math.max(s-6,5),m=useMemo(()=>Cn(l-4),[l]);return jsx(w,{title:"EVENTS",subtitle:jsxs(Text,{dimColor:true,children:["(",e.length," total)"]}),width:l,flexGrow:1,color:n,children:jsx(te,{columns:m,data:e,rowKey:(g,u)=>g.id!==void 0?String(g.id):`${g.timestamp}-${u}`,selectedIndex:t,scrollOffset:o,visibleRows:f,emptyMessage:"No events recorded yet."})})}function $o({event:e,width:t,height:o,scrollOffset:l,color:s=c.accent}){let n=At(e.details),f=n&&typeof n.routeId=="string"?n.routeId:void 0,m=n&&typeof n.exchangeId=="string"?n.exchangeId:void 0,u=2+(1+(f?1:0)+(m?1:0)+2),x=5,T=Math.max(t-6,20),i=xe(e.details,T),h=Math.max(o-u-x,3),p=Math.max(0,Math.min(l,Math.max(i.length-h,0))),y=i.slice(p,p+h);return jsxs(Box,{flexDirection:"column",width:t,flexGrow:1,children:[jsxs(w,{width:t,children:[jsxs(Text,{children:["Context:"," ",jsx(Text,{bold:true,color:c.accent,children:e.contextId})]}),f&&jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:c.accent,children:f})]}),m&&jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:c.accent,children:m})]}),jsxs(Text,{children:["Event:"," ",jsx(Text,{bold:true,color:c.accent,children:e.eventName})]}),jsxs(Text,{children:["Time: ",jsx(Text,{bold:true,children:e.timestamp.replace("T"," ")})]})]}),jsxs(w,{title:"DETAILS",subtitle:jsxs(Text,{dimColor:true,children:["(",p+1,"-",Math.min(p+h,i.length),"/",i.length," lines)"]}),width:t,flexGrow:1,color:s,children:[y.map((H,F)=>jsx(et,{line:H},p+F)),y.length<h&&Array.from({length:h-y.length}).map((H,F)=>jsx(Text,{children:" "},`pad-${F}`))]})]})}function Mn(e,t){let o=[];return o.push("HEADERS"),o.push(...xe(e.headers,t)),o.push(""),o.push("BODY"),e.body!==null?(o.push(...xe(e.body,t)),e.truncated&&(o.push(""),o.push("[Body truncated to configured limit]"))):o.push("[null]"),o}function Go({exchange:e,snapshot:t,width:o,height:l,scrollOffset:s,color:n=c.accent}){let g=Math.max(o-6,20),u=Math.max(l-5-5,3),T=t!==null?Mn(t,g):["[Snapshots not captured]","","Enable with:"," telemetry({ sqlite: { captureSnapshots: true } })"],i=Math.max(0,Math.min(s,Math.max(T.length-u,0))),h=T.slice(i,i+u);return jsxs(Box,{flexDirection:"column",width:o,flexGrow:1,children:[jsxs(w,{width:o,children:[jsxs(Text,{children:["Capability:"," ",jsx(Text,{bold:true,color:c.accent,children:e.routeId})]}),jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:c.accent,children:Re(e.id,o-14)})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:Z(e.status),children:e.status}),e.durationMs!==null&&jsxs(Text,{children:[" ","Duration:"," ",jsx(Text,{bold:true,children:M(e.durationMs)})]})]})]}),jsxs(w,{title:"EXCHANGE SNAPSHOT",subtitle:jsxs(Text,{dimColor:true,children:["(",i+1,"-",Math.min(i+u,T.length),"/",T.length," lines)"]}),width:o,flexGrow:1,color:n,children:[h.map((p,y)=>p==="HEADERS"||p==="BODY"?jsx(Text,{bold:true,color:c.accent,children:p},i+y):p.startsWith("[")?jsx(Text,{dimColor:true,children:p},i+y):jsx(et,{line:p},i+y)),h.length<u&&Array.from({length:u-h.length}).map((p,y)=>jsx(Text,{children:" "},`pad-${y}`))]})]})}function Lt({items:e,itemKey:t,label:o,dotColor:l,emptyText:s,selectedIndex:n,listOffset:f,visibleRows:m,width:g}){let u=Math.max(0,Math.min(f,Math.max(e.length-m,0)));return jsxs(Fragment,{children:[jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"\u2500".repeat(g+2)}),e.length===0?jsx(Text,{dimColor:true,children:s}):e.slice(u,u+m).map((x,T)=>{let h=u+T===n;return jsxs(Text,{wrap:"truncate",children:[jsx(Text,{..._(h),children:h?"> ":" "}),jsx(Text,{color:l(x),children:"\u25CF "}),jsx(Text,{..._(h),children:Re(o(x),g-2)})]},t(x))}),e.length>m&&jsxs(Text,{dimColor:true,children:[n+1,"/",e.length]})]})}function Ho({agentKey:e,runs:t,infos:o,selectedIndex:l,scrollOffset:s,width:n,height:f,color:m}){let g=Math.max(f-6,3),u=e?`RUNS: ${e}`:"RUNS",x=n-4>=66,T=[oe(),{header:"Run",width:"flex",render:(i,h)=>jsx(Text,{..._(h),children:i.id})},{header:"Status",width:9,render:(i,h,p)=>{let y=o.get(i.id)?.status??i.status;return jsx(Text,{color:Z(y),children:R(y,p)})}},{header:"Model",width:"flex",render:i=>jsx(Text,{dimColor:true,children:o.get(i.id)?.model??"-"})},{header:"Tokens",width:6,align:"right",render:i=>{let h=o.get(i.id)?.totalTokens;return jsx(Text,{children:(h!=null?vo(h):"-").padStart(6)})}},{header:"Duration",width:8,align:"right",render:i=>jsx(Text,{children:M(i.durationMs).padStart(8)})},...x?[{header:"Time",width:8,render:(i,h,p)=>jsx(Text,{dimColor:true,children:R(i.startedAt.replace("T"," ").slice(11,19),p)})}]:[]];return jsx(Box,{flexDirection:"column",width:n,flexGrow:1,children:jsx(w,{title:u,width:n,flexGrow:1,...m?{color:m}:{},children:jsx(te,{columns:T,data:t,rowKey:i=>`${i.id}:${i.contextId}`,selectedIndex:l,scrollOffset:s,visibleRows:g,emptyMessage:"No runs"})})})}var Nn=[oe(),{header:"Tool",width:"flex",render:(e,t)=>jsx(Text,{..._(t),children:e.toolName})},{header:"Status",width:8,render:(e,t,o)=>jsx(Text,{color:Ye(e.status),children:R(e.status,o)})},{header:"I/O",width:3,render:e=>jsx(Text,{dimColor:true,children:(e.hasInput?"i":"-")+(e.hasOutput?"o":"-")})},{header:"Duration",width:8,align:"right",render:e=>jsx(Text,{children:M(e.durationMs).padStart(8)})}];function Fo({agentKey:e,run:t,info:o,toolCalls:l,selectedIndex:s,scrollOffset:n,width:f,height:m,color:g=c.accent}){let x=Math.max(m-6-6,3),T=o&&(o.inputTokens!==null||o.outputTokens!==null)?`${o.inputTokens??"?"} in / ${o.outputTokens??"?"} out`+(o.totalTokens!==null?` (${o.totalTokens} total)`:""):o&&o.totalTokens!==null?`${o.totalTokens} total`:"-";return jsxs(Box,{flexDirection:"column",width:f,flexGrow:1,children:[jsxs(w,{width:f,children:[jsxs(Text,{children:["Agent:"," ",jsx(Text,{bold:true,color:c.accent,children:e})]}),jsxs(Text,{children:["Model: ",jsx(Text,{bold:true,children:o?.model??"-"})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:Z(o?.status??t.status),children:o?.status??t.status}),o?.finishReason&&jsxs(Text,{children:[" ","Finish: ",jsx(Text,{bold:true,children:o.finishReason})]})]}),jsxs(Text,{children:["Tokens: ",jsx(Text,{bold:true,children:T})]})]}),jsx(w,{title:"TOOL CALLS",width:f,flexGrow:1,color:g,children:jsx(te,{columns:Nn,data:l,rowKey:i=>i.toolCallId,selectedIndex:s,scrollOffset:n,visibleRows:x,emptyMessage:"No tool calls"})})]})}function Ln(e){return [oe(),{header:"Route",width:"flex",render:(t,o)=>jsx(Text,{..._(o),children:t.routeId||"-"})},...e>=68?[{header:"Agent",width:12,render:(t,o,l)=>jsx(Text,{dimColor:true,children:R(t.agentName??"-",l)})}]:[],{header:"Status",width:8,render:(t,o,l)=>jsx(Text,{color:Ye(t.status),children:R(t.status,l)})},{header:"Exchange",width:12,render:(t,o,l)=>jsx(Text,{dimColor:true,children:R(t.exchangeId.slice(0,8),l)})},{header:"Duration",width:8,align:"right",render:t=>jsx(Text,{children:M(t.durationMs).padStart(8)})},...e>=82?[{header:"Time",width:8,render:(t,o,l)=>jsx(Text,{dimColor:true,children:R(t.timestamp.slice(11,19),l)})}]:[]]}function jo({toolName:e,calls:t,selectedIndex:o,scrollOffset:l,width:s,height:n,color:f=c.muted}){let m=Math.max(n-6,3),g=e?`TOOL CALLS: ${e}`:"TOOL CALLS";return jsx(Box,{flexDirection:"column",width:s,flexGrow:1,children:jsx(w,{title:g,width:s,flexGrow:1,color:f,children:jsx(te,{columns:Ln(s-4),data:t,rowKey:u=>u.toolCallId,selectedIndex:o,scrollOffset:l,visibleRows:m,emptyMessage:"No tool calls"})})})}function _n(e,t){let o=[];return o.push("INPUT"),e.hasInput&&e.input!==null?o.push(...xe(e.input,t)):o.push("[Not captured - enable snapshots]"),o.push(""),o.push("OUTPUT"),e.status==="invoked"?o.push("[Pending - tool still running or not recorded]"):e.hasOutput&&e.output!==null?o.push(...xe(e.output,t)):e.status==="error"?o.push("[No output - call errored]"):o.push("[Not captured - enable snapshots]"),e.status==="error"?(o.push(""),o.push("ERROR"),e.error!==null?o.push(...xe(e.error,t)):o.push(`[${e.errorName??"Error"} - enable snapshots for details]`)):e.error!==null&&(o.push(""),o.push("ERROR"),o.push(...xe(e.error,t))),o}function Jo({call:e,width:t,height:o,scrollOffset:l,color:s=c.accent}){let m=Math.max(t-6,20),g=Math.max(o-5-5,3),u=_n(e,m),x=Math.max(0,Math.min(l,Math.max(u.length-g,0))),T=u.slice(x,x+g);return jsxs(Box,{flexDirection:"column",width:t,flexGrow:1,children:[jsxs(w,{width:t,children:[jsxs(Text,{children:["Tool:"," ",jsx(Text,{bold:true,color:c.accent,children:Re(e.toolName,t-10)})]}),jsxs(Text,{children:["Exchange:"," ",jsx(Text,{bold:true,color:c.accent,children:Re(e.exchangeId,t-14)})]}),jsxs(Text,{children:["Status:"," ",jsx(Text,{bold:true,color:Ye(e.status),children:e.status}),e.durationMs!==null&&jsxs(Text,{children:[" ","Duration:"," ",jsx(Text,{bold:true,children:M(e.durationMs)})]})]})]}),jsxs(w,{title:"TOOL CALL",subtitle:jsxs(Text,{dimColor:true,children:["(",x+1,"-",Math.min(x+g,u.length),"/",u.length," lines)"]}),width:t,flexGrow:1,color:s,children:[T.map((i,h)=>i==="INPUT"||i==="OUTPUT"||i==="ERROR"?jsx(Text,{bold:true,color:c.accent,children:i},x+h):i.startsWith("[")?jsx(Text,{dimColor:true,children:i},x+h):jsx(et,{line:i},x+h)),T.length<g&&Array.from({length:g-T.length}).map((i,h)=>jsx(Text,{children:" "},`pad-${h}`))]})]})}function Jn(e){return e.failedExchanges>0?c.error:e.totalExchanges>0?c.success:c.warn}function Kn(e){return e.errorCount>0?c.error:e.runCount>0?c.success:c.warn}function Vn(e){return e.errorCount>0?c.error:e.callCount>0?c.success:c.warn}var to=[...Array.from({length:7},(e,t)=>({max:(t+1)*5,color:"green"})),...Array.from({length:7},(e,t)=>({max:35+(t+1)*10,color:"yellow"})),...Array.from({length:6},(e,t)=>({max:105+(t+1)*25,color:"red"}))];function Un(e){let t=Array.from({length:e},(o,l)=>{let s=Math.min(Math.ceil((l+1)*to.length/e)-1,to.length-1);return to[s]});return [{max:0,color:"gray"},...t]}var Ko=new Set(["event","snapshot","tool-call"]);function Uo(e,t){let o=new Map;o.set(t,[]);for(let l of e)try{let s=JSON.parse(l.details),n=String(s.exchangeId??""),f=!n||n===t?t:n;o.has(f)||o.set(f,[]),o.get(f).push(l);}catch{o.get(t).push(l);}return o}function Vo(e,t){let o=Uo(e,t);return e.length+(o.size>1?o.size:0)}function Xn({db:e}){let{exit:t}=useApp(),{stdout:o}=useStdout(),l=o?.columns??80,s=o?.rows??24,[n,f]=useState("capabilities"),[m,g]=useState([]),u=m.at(-1)??"root",[x,T]=useState([]),[i,h]=useState({totalRoutes:0,totalExchanges:0,completedExchanges:0,failedExchanges:0,droppedExchanges:0,errorRate:0,avgDurationMs:null,p90DurationMs:null,p95DurationMs:null,p99DurationMs:null}),[p,y]=useState([]),[H,F]=useState(void 0),D=we(),[ie,U]=useState([]),v=we(),[j,rt]=useState(void 0),[Bt,oo]=useState([]),[no,ro]=useState([]),pe=we(),me=we(),[xt,so]=useState(void 0),[_t,st]=useState(0),[Xo,Wo]=useState(null),[ge,lo]=useState([]),J=we(),[je,io]=useState(void 0),[qo,ao]=useState(null),[zo,co]=useState(new Map),[pt,uo]=useState([]),Te=we(),[Pt,lt]=useState(""),[$t,gt]=useState(false),[Ne,z]=useState(false),[Oe,mo]=useState([]),X=we(),[fo,Tt]=useState([]),Y=we(),[Le,bt]=useState(void 0),be=50,Yo=10,W=useCallback(r=>{g(a=>[...a,r]),st(0);},[]),yt=useCallback(()=>{g(r=>r.slice(0,-1)),st(0);},[]),Xe=Math.max(Math.min(Math.floor(l*.18),26),16),We=Math.max(Math.min(Math.floor(l*.22),30),20),ae=Math.max(l-Xe-We,30),O=Math.max(s-4,10),ye=Math.max(O-10,3),Qo=Math.max(Math.min(O-19,5),1)*4,Et=Math.max(O-6-6,3),it=m.includes("exchange")?j?.id:void 0,ho=m.includes("exchange")?j?.correlationId:void 0,at=m.includes("agent-run")?je?.id:void 0,ct=u==="tool-call"?Le?.toolCallId:void 0,Gt=u==="tool-call"?Le?.toolName:void 0,Ht=ge[J.selectedIndex]?.key,Ft=ge[J.selectedIndex]?.source,xo=Oe[X.selectedIndex]?.name,Je=useCallback((r,a)=>{if(!r){U([]),co(new Map);return}let S=a!==void 0?e.getAgentRuns(r.key,r.source,a):e.getAgentRuns(r.key,r.source);U(S),co(e.getAgentRunInfos(S.map(N=>N.id)));},[e]),jt=useCallback(()=>{try{let r=e.getRouteSummary();T(r),h(e.getMetrics());let a=We-4;y(e.getLiveTrafficBuckets(a,5));let S=ae-4,N=r[D.selectedIndex];N&&F(e.getSingleRouteActivity(N.id,S,5));let L,B;m.length===0&&(n==="agents"?(L=e.getAgents(),lo(L)):n==="tools"&&(B=e.getTools(),mo(B)));let Be=m.at(-1);if(it){let d=e.getExchangeById(it);d&&rt(d);let $=e.getEventsByExchange(it,ho??"");if(oo($),Ne&&Be==="exchange"){let Ke=d?.error?2:0,ze=Math.max(O-9-Ke,3),he=Vo($,it);me.moveTo(he-1,he,ze);}}if(at){let d=e.getExchangeById(at);d&&io(d),ao(e.getAgentRunInfo(at));let $=e.getAgentRunToolCalls(at);if(uo($),Ne&&Be==="agent-run"&&Te.moveTo($.length-1,$.length,Et),ct){let Ke=$.find(ze=>ze.toolCallId===ct);Ke&&bt(Ke);}}else if(ct&&Gt){let d=e.getToolCalls(Gt).find($=>$.toolCallId===ct);d&&bt(d);}if(m.length>0&&!(Ne&&Be==="browse"))return;if(n==="capabilities"){let d=r[D.selectedIndex];d&&U(e.getExchangesByRoute(d.id,be));}else if(n==="agents"){let d=L?L[J.selectedIndex]:Ht&&Ft?{key:Ht,source:Ft}:void 0;Je(d,be);}else if(n==="tools"){let d=B?B[X.selectedIndex]?.name:xo;Tt(d?e.getToolCalls(d):[]);}else n==="exchanges"?U(e.getAllExchanges(be)):n==="errors"?U(e.getFailedExchanges(be)):n==="events"&&ro(e.getRecentEvents({limit:200}));}catch{}},[e,n,D.selectedIndex,J.selectedIndex,X.selectedIndex,We,ae,O,Et,m,Ne,Je,it,ho,at,ct,Gt,Ht,Ft,xo,me.moveTo,Te.moveTo]);useEffect(()=>{jt();let r=setInterval(jt,2e3);return ()=>{clearInterval(r);}},[jt]);let po=useCallback(r=>{D.moveTo(r,x.length,ye),v.reset();let a=x[r];a&&U(e.getExchangesByRoute(a.id,be));},[e,x,D,v,ye]),go=useCallback(r=>{J.moveTo(r,ge.length,ye),v.reset(),Je(ge[r],be);},[ge,J,v,ye,Je]),To=useCallback(r=>{X.moveTo(r,Oe.length,ye),Y.reset();let a=Oe[r];a&&Tt(e.getToolCalls(a.name));},[e,Oe,X,Y,ye]),Zo=useCallback(r=>{if(f(r),g([]),st(0),lt(""),gt(false),z(false),v.reset(),r==="agents"){J.reset();let a=e.getAgents();lo(a),Je(a[0],be);}else if(r==="tools"){X.reset(),Y.reset();let a=e.getTools();mo(a);let S=a[0];Tt(S?e.getToolCalls(S.name):[]);}else r==="exchanges"?U(e.getAllExchanges(be)):r==="errors"?U(e.getFailedExchanges(be)):r==="events"&&(pe.reset(),ro(e.getRecentEvents({limit:200})));},[e,v,pe,J,X,Y,Je]),ut=Pt.trim().toLowerCase(),Jt=(...r)=>ut===""||r.some(a=>a!==null&&a.toLowerCase().includes(ut)),Ee=ut?ie.filter(r=>Jt(r.id,r.routeId,r.status)):ie,dt=ut?fo.filter(r=>Jt(r.toolName,r.routeId,r.exchangeId,r.status)):fo,Rt=ut?no.filter(r=>Jt(r.eventName,r.details)):no,wt=useCallback(()=>{v.reset(),Y.reset(),pe.reset();},[v,Y,pe]),qe=x[D.selectedIndex],Ct=ge[J.selectedIndex],Kt=Oe[X.selectedIndex],en=Math.ceil((ft.length-1)/4),tn=qe?2+en+2:0,bo=Math.max(O-6-tn,3),yo=Math.max(O-6,5),vt=Math.max(O-6,3),mt=useCallback(r=>{rt(r),oo(e.getEventsByExchange(r.id,r.correlationId)),me.reset(),z(r.status==="started"),W("exchange");},[e,me,W]),Eo=useCallback(r=>{if(!r.exchangeId)return;let a=e.getExchangeById(r.exchangeId)??{id:r.exchangeId,routeId:r.routeId,contextId:"",correlationId:"",status:"started",startedAt:r.timestamp,completedAt:null,durationMs:null,error:null};mt(a);},[e,mt]);useInput((r,a)=>{if($t){a.return?gt(false):a.escape?(gt(false),lt(""),wt()):a.backspace||a.delete?(lt(d=>d.slice(0,-1)),wt()):r&&!a.ctrl&&!a.meta&&(lt(d=>d+r),wt());return}if(r==="q"){e.close(),t();return}let S=Xt.find(d=>d.shortcut===r);if(S){Zo(S.key);return}let N=a.ctrl?Yo:1,L=r==="j"||a.downArrow,B=r==="k"||a.upArrow,Be=a.escape||a.backspace||a.delete;if(u==="browse"){if(r==="/"){gt(true);return}if(r==="f"){z(d=>!d);return}if((L||B)&&Ne&&z(false),Be){yt(),lt(""),z(false),wt();return}}if(u!=="root"&&Ko.has(u)){if(r==="x"&&u==="tool-call"&&Le){Eo(Le);return}L?st(d=>d+N):B?st(d=>Math.max(d-N,0)):Be&&yt();return}if(u==="agent-run"){if(r==="f"){z(d=>!d);return}if(r==="x"&&je){mt(je);return}if((L||B)&&Ne&&z(false),L)Te.moveBy(N,pt.length,Et);else if(B)Te.moveBy(-N,pt.length,Et);else if(a.return){let d=pt[Te.selectedIndex];d&&(bt(d),W("tool-call"));}else Be&&(yt(),z(false),Te.reset());return}if(u==="exchange"){if(r==="f"){z(he=>!he);return}(L||B)&&Ne&&z(false);let d=j?.error?2:0,$=Math.max(O-9-d,3),Ke=j?.id??"",ze=Vo(Bt,Ke);if(L)me.moveBy(N,ze,$);else if(B)me.moveBy(-N,ze,$);else if(a.return){let he=0,Vt,Ro=Uo(Bt,Ke),nn=Ro.size>1;for(let[,rn]of Ro){nn&&he++;for(let sn of rn)he===me.selectedIndex&&(Vt=sn),he++;}Vt&&(so(Vt),W("event"));}else if(r==="e"&&j){let he=e.getExchangeSnapshot(j.id);Wo(he),W("snapshot");}else Be&&(me.reset(),z(false),yt());return}if(n==="events"){if(u==="root"){a.return&&W("browse");return}if(L)pe.moveBy(N,Rt.length,yo);else if(B)pe.moveBy(-N,Rt.length,yo);else if(a.return){let d=Rt[pe.selectedIndex];d&&(so(d),W("event"));}return}if(n==="agents"){if(u==="root"){L?go(Math.min(J.selectedIndex+1,ge.length-1)):B?go(Math.max(J.selectedIndex-1,0)):a.return&&(W("browse"),Je(ge[J.selectedIndex]));return}if(L)v.moveBy(N,Ee.length,vt);else if(B)v.moveBy(-N,Ee.length,vt);else if(a.return){let d=Ee[v.selectedIndex];if(d){io(d);let $=e.getAgentRunInfo(d.id);ao($),uo(e.getAgentRunToolCalls(d.id)),Te.reset(),z(d.status==="started"||$?.status==="running"),W("agent-run");}}else if(r==="x"){let d=Ee[v.selectedIndex];d&&mt(d);}return}if(n==="tools"){if(u==="root"){if(L)To(Math.min(X.selectedIndex+1,Oe.length-1));else if(B)To(Math.max(X.selectedIndex-1,0));else if(a.return){W("browse");let d=Oe[X.selectedIndex];d&&Tt(e.getToolCalls(d.name));}return}if(L)Y.moveBy(N,dt.length,vt);else if(B)Y.moveBy(-N,dt.length,vt);else if(a.return){let d=dt[Y.selectedIndex];d&&(bt(d),W("tool-call"));}else if(r==="x"){let d=dt[Y.selectedIndex];d&&Eo(d);}return}if(u==="root"){if(n==="capabilities"){if(L)po(Math.min(D.selectedIndex+1,x.length-1));else if(B)po(Math.max(D.selectedIndex-1,0));else if(a.return){W("browse");let d=x[D.selectedIndex];d&&U(e.getExchangesByRoute(d.id));}}else a.return&&(W("browse"),U(n==="exchanges"?e.getAllExchanges():e.getFailedExchanges()));return}if(L)v.moveBy(N,Ee.length,bo);else if(B)v.moveBy(-N,Ee.length,bo);else if(a.return){let d=Ee[v.selectedIndex];d&&mt(d);}});let on=(n==="capabilities"||n==="agents"||n==="tools")&&u==="root",q=u==="browse",E=[];u!=="root"&&Ko.has(u)?(E.push({key:"j/k",action:"Scroll"}),E.push({key:"C-j/k",action:"Jump"}),u==="tool-call"&&E.push({key:"x",action:"Exchange"}),E.push({key:"Esc",action:"Back"})):u==="agent-run"?(E.push({key:"j/k",action:"Navigate"}),E.push({key:"Enter",action:"Tool I/O"}),E.push({key:"x",action:"Exchange"}),E.push({key:"f",action:"Follow"}),E.push({key:"Esc",action:"Back"})):u==="exchange"?(E.push({key:"j/k",action:"Navigate"}),E.push({key:"Enter",action:"Event"}),E.push({key:"e",action:"Snapshot"}),E.push({key:"f",action:"Follow"}),E.push({key:"Esc",action:"Back"})):q?(E.push({key:"j/k",action:"Navigate"}),E.push({key:"C-j/k",action:"Jump"}),E.push({key:"Enter",action:"Detail"}),(n==="agents"||n==="tools")&&E.push({key:"x",action:"Exchange"}),E.push({key:"/",action:"Filter"}),E.push({key:"f",action:"Follow"}),E.push({key:"Esc",action:"Back"})):(E.push({key:"j/k",action:"Navigate"}),n==="capabilities"?E.push({key:"Enter",action:"Exchanges"}):n==="agents"?E.push({key:"Enter",action:"Runs"}):n==="tools"?E.push({key:"Enter",action:"Calls"}):E.push({key:"Enter",action:"Browse"})),E.push({key:"1-6",action:"View"}),E.push({key:"q",action:"Quit"});let Q=[];{let r=Xt.find(a=>a.key===n)?.label??n;Q.push(r),m.length>0&&(n==="capabilities"&&qe?Q.push(qe.id):n==="agents"&&Ct?Q.push(Ct.key):n==="tools"&&Kt&&Q.push(Kt.name));for(let a of m)a==="exchange"&&j?Q.push(j.id.slice(0,8)):a==="agent-run"&&je?Q.push(`run ${je.id.slice(0,8)}`):a==="tool-call"&&Le?Q.push(Le.toolName):a==="event"&&xt?Q.push(xt.eventName):a==="snapshot"&&Q.push("snapshot");}let fe;return u==="event"&&xt?fe=jsx($o,{event:xt,width:ae,height:O,scrollOffset:_t}):u==="snapshot"&&j?fe=jsx(Go,{exchange:j,snapshot:Xo,width:ae,height:O,scrollOffset:_t}):u==="tool-call"&&Le?fe=jsx(Jo,{call:Le,width:ae,height:O,scrollOffset:_t}):u==="agent-run"&&je?fe=jsx(Fo,{agentKey:Ct?.key??"",run:je,info:qo,toolCalls:pt,selectedIndex:Te.selectedIndex,scrollOffset:Te.scrollOffset,width:ae,height:O}):u==="exchange"&&j?fe=jsx(_o,{exchange:j,events:Bt,width:ae,height:O,selectedIndex:me.selectedIndex,scrollOffset:me.scrollOffset,color:c.accent}):n==="events"?fe=jsx(Po,{events:Rt,selectedIndex:q?pe.selectedIndex:-1,scrollOffset:q?pe.scrollOffset:0,width:ae,height:O,color:q?c.accent:c.muted}):n==="agents"?fe=jsx(Ho,{agentKey:Ct?.key??"",runs:Ee,infos:zo,selectedIndex:q?v.selectedIndex:-1,scrollOffset:q?v.scrollOffset:0,width:ae,height:O,color:q?c.accent:c.muted}):n==="tools"?fe=jsx(jo,{toolName:Kt?.name??"",calls:dt,selectedIndex:q?Y.selectedIndex:-1,scrollOffset:q?Y.scrollOffset:0,width:ae,height:O,color:q?c.accent:c.muted}):fe=jsx(Lo,{capabilityId:n==="capabilities"?qe?.id??"":n==="exchanges"?"All Capabilities":"Failed Exchanges",...n==="capabilities"&&qe?{route:qe}:{},activity:n==="capabilities"?H:void 0,exchanges:Ee,selectedIndex:q?v.selectedIndex:-1,scrollOffset:q?v.scrollOffset:0,width:ae,height:O,color:q?c.accent:c.muted}),jsxs(Box,{flexDirection:"column",width:l,height:s,children:[jsxs(Box,{paddingX:1,width:l,children:[jsx(Text,{bold:true,children:"Routecraft"}),jsxs(Text,{dimColor:true,children:[" ","craft tui"," ","v",a]}),jsx(Box,{flexGrow:1,justifyContent:"flex-end",children:jsx(Text,{wrap:"truncate",children:Q.map((r,a)=>jsxs(Text,{children:[a>0&&jsx(Text,{dimColor:true,children:" \u203A "}),jsx(Text,{...a===Q.length-1&&Q.length>1?{color:c.accent}:{dimColor:true},children:r})]},`${r}-${a}`))})})]}),jsxs(Box,{flexDirection:"row",width:l,flexGrow:1,children:[jsx(Box,{flexDirection:"column",width:Xe,children:jsxs(w,{title:"NAVIGATION",color:on?c.accent:c.muted,width:Xe,flexGrow:1,children:[Ut.map((r,a)=>jsxs(Box,{flexDirection:"column",children:[a>0&&jsx(Text,{children:" "}),r.label&&jsx(Text,{dimColor:true,bold:true,children:r.label}),r.items.map(S=>jsxs(Text,{wrap:"truncate",children:[jsxs(Text,{..._(n===S.key),children:[n===S.key?"> ":" ",S.label]}),jsxs(Text,{dimColor:true,children:[" (",S.shortcut,")"]}),S.key==="errors"&&i.failedExchanges>0&&jsxs(Text,{color:c.error,children:[" ",ee(i.failedExchanges)]})]},S.key))]},r.label??a)),n==="capabilities"&&jsx(Lt,{items:x,itemKey:r=>r.id,label:r=>r.id,dotColor:Jn,emptyText:"No capabilities",selectedIndex:D.selectedIndex,listOffset:D.scrollOffset,visibleRows:ye,width:Xe-6}),n==="agents"&&jsx(Lt,{items:ge,itemKey:r=>r.key,label:r=>r.key,dotColor:Kn,emptyText:"No agents",selectedIndex:J.selectedIndex,listOffset:J.scrollOffset,visibleRows:ye,width:Xe-6}),n==="tools"&&jsx(Lt,{items:Oe,itemKey:r=>r.name,label:r=>r.name,dotColor:Vn,emptyText:"No tools",selectedIndex:X.selectedIndex,listOffset:X.scrollOffset,visibleRows:ye,width:Xe-6})]})}),fe,jsx(Box,{flexDirection:"column",width:We,children:jsxs(w,{title:"METRICS",width:We,flexGrow:1,children:[jsx(Dt,{values:p,columns:We-4,steps:Un(Qo),label:"Exchanges per 5s bucket"}),jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"THROUGHPUT"}),[["Exchanges",ee(i.totalExchanges),c.accent],["Completed",ee(i.completedExchanges),"green"],["Errors",ee(i.failedExchanges),i.failedExchanges>0?"red":"green"],["Dropped",ee(i.droppedExchanges),i.droppedExchanges>0?"yellow":"green"],["Error Rate",`${(i.errorRate*100).toFixed(1)}%`,i.errorRate>.1?"red":"green"],["Capabilities",ee(i.totalRoutes),""]].map(([r,a,S])=>jsxs(Box,{children:[jsx(Box,{flexGrow:1,children:jsxs(Text,{wrap:"truncate",children:[r,":"]})}),jsx(Text,{bold:true,...S?{color:S}:{},children:a})]},r)),jsx(Text,{children:" "}),jsx(Text,{bold:true,dimColor:true,children:"LATENCY (5m)"}),[["Avg",M(i.avgDurationMs),""],["p90",M(i.p90DurationMs),""],["p95",M(i.p95DurationMs),""],["p99",M(i.p99DurationMs),""]].map(([r,a,S])=>jsxs(Box,{children:[jsx(Box,{flexGrow:1,children:jsxs(Text,{wrap:"truncate",children:[r,":"]})}),jsx(Text,{bold:true,...S?{color:S}:{},children:a})]},r))]})})]}),jsx(Box,{paddingX:1,width:l,children:jsxs(Text,{wrap:"truncate",children:[($t||Pt!=="")&&jsxs(Text,{color:c.accent,children:["/",Pt,$t?"\u258F":""," "]}),Ne&&jsxs(Text,{color:c.success,children:["\u25CF follow"," "]}),E.map((r,a)=>jsxs(Text,{children:[a>0&&jsx(Text,{children:" "}),jsx(Text,{color:c.accentSoft,children:r.key}),jsxs(Text,{dimColor:true,children:[" ",r.action]})]},r.key))]})})]})}async function vl(e){let t;try{t=await a$1.open(e);}catch(l){let s=l instanceof Error?l.message:String(l);process.stderr.write(`Failed to open telemetry database: ${s}
4
4
  `),process.stderr.write(`Path: ${e}
5
5
  `),process.stderr.write(`Make sure you have a running Routecraft context with telemetry() enabled.
6
- `),process.exit(1);}await render(jsx(Er,{db:t})).waitUntilExit();}export{to as renderTui};//# sourceMappingURL=app.js.map
6
+ `),process.exit(1);}await render(jsx(Xn,{db:t})).waitUntilExit();}export{Xn as App,vl as renderTui};//# sourceMappingURL=app.js.map
7
7
  //# sourceMappingURL=app.js.map