@sleep2agi/agent-network-dashboard 0.4.5-preview.4 → 0.4.5-preview.6
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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +2 -2
- package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages/page.js.nft.json +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +3 -3
- package/.next/server/app/messages.segments/_full.segment.rsc +3 -3
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes/page.js.nft.json +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +3 -3
- package/.next/server/app/nodes.segments/_full.segment.rsc +3 -3
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__06pu~4t._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06pu~4t._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_0ff~kjj._.js → app_0k8xbx~._.js} +3 -3
- package/.next/server/chunks/ssr/app_0k8xbx~._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0p4_o2jw2v9n_.css +2 -0
- package/.next/static/chunks/0v~9m62eciynd.js +1 -0
- package/.next/static/chunks/{0lo_g.q1fm-hr.js → 0z.pzy8zpa~js.js} +2 -2
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/AliasAvatar.tsx +51 -0
- package/app/messages/page.tsx +79 -48
- package/app/nodes/page.tsx +21 -23
- package/package.json +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__12mpoig._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__12mpoig._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0ff~kjj._.js.map +0 -1
- package/.next/static/chunks/03sm_xa792mxv.css +0 -2
- package/.next/static/chunks/0khpyxpdrp~ty.js +0 -1
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → aliOmgYOuDD7xT9T9MLOA}/_buildManifest.js +0 -0
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → aliOmgYOuDD7xT9T9MLOA}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → aliOmgYOuDD7xT9T9MLOA}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18150,e=>{"use strict";e.s(["formatUptime",0,function(e){let t=Math.floor(e/3600),s=Math.floor(e%3600/60);return t>0?`${t}h ${s}m`:`${s}m`},"timeAgo",0,function(e){if(!e)return"--";let t=Math.floor((Date.now()-new Date(e.replace(" ","T")+"Z").getTime())/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}])},95356,e=>{"use strict";var t=e.i(18050),s=e.i(22016);let a={nodes:{title:"No agents in this network",sub:"Agent sessions will appear here once they connect to the CommHub."},tasks:{title:"No tasks yet",sub:"Tasks will appear here when agents send them via CommHub."},messages:{title:"No messages",sub:"Messages between agents will appear here."},logs:{title:"No audit logs",sub:"Events will appear here when users register, login, or perform actions."},tokens:{title:"No API tokens",sub:"Create one to authenticate CLI tools and external integrations."},networks:{title:"No networks found",sub:"Create one or sign in with V3 auth to see your networks."},generic:{title:"Nothing here yet",sub:"Data will appear here once available."}};function r({variant:e,size:s}){let a={width:s,height:s},n={fill:"none",stroke:"currentColor",strokeWidth:1.25,strokeLinecap:"round",strokeLinejoin:"round"};switch(e){case"nodes":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"14",r:"4"}),(0,t.jsx)("circle",{cx:"14",cy:"44",r:"4"}),(0,t.jsx)("circle",{cx:"50",cy:"44",r:"4"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"14",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"50",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"18",y1:"44",x2:"46",y2:"44",strokeDasharray:"3 3",opacity:"0.6"})]})});case"tasks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("rect",{x:"14",y:"14",width:"36",height:"6",rx:"1.5"}),(0,t.jsx)("rect",{x:"14",y:"26",width:"36",height:"6",rx:"1.5",opacity:"0.6"}),(0,t.jsx)("rect",{x:"14",y:"38",width:"36",height:"6",rx:"1.5",opacity:"0.35"})]})});case"messages":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("path",{d:"M14 18 h36 a3 3 0 0 1 3 3 v18 a3 3 0 0 1 -3 3 h-18 l-8 6 v-6 h-10 a3 3 0 0 1 -3 -3 v-18 a3 3 0 0 1 3 -3 z"}),(0,t.jsx)("line",{x1:"22",y1:"28",x2:"42",y2:"28",opacity:"0.5"}),(0,t.jsx)("line",{x1:"22",y1:"34",x2:"36",y2:"34",opacity:"0.5"})]})});case"logs":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("path",{d:"M18 12 h22 l8 8 v32 a2 2 0 0 1 -2 2 h-28 a2 2 0 0 1 -2 -2 v-38 a2 2 0 0 1 2 -2 z"}),(0,t.jsx)("path",{d:"M40 12 v8 h8",opacity:"0.6"}),(0,t.jsx)("line",{x1:"24",y1:"32",x2:"40",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"24",y1:"38",x2:"40",y2:"38",opacity:"0.4"}),(0,t.jsx)("line",{x1:"24",y1:"44",x2:"34",y2:"44",opacity:"0.25"})]})});case"tokens":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"22",cy:"32",r:"8"}),(0,t.jsx)("line",{x1:"30",y1:"32",x2:"54",y2:"32"}),(0,t.jsx)("line",{x1:"44",y1:"32",x2:"44",y2:"38"}),(0,t.jsx)("line",{x1:"50",y1:"32",x2:"50",y2:"40"})]})});case"networks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"18"}),(0,t.jsx)("ellipse",{cx:"32",cy:"32",rx:"18",ry:"9",opacity:"0.55"}),(0,t.jsx)("line",{x1:"14",y1:"32",x2:"50",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"32",y1:"14",x2:"32",y2:"50",opacity:"0.55"})]})});default:return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"14",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("circle",{cx:"32",cy:"32",r:"3"})]})})}}function n({variant:e="generic",title:l,sub:i,cta:o,compact:c=!1}){let x=a[e],d=l??x.title,u=i??x.sub;return(0,t.jsxs)("div",{className:`text-center ${c?"py-8":"py-16"} px-4`,role:"status",children:[(0,t.jsx)("div",{className:"anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500","aria-hidden":!0,children:(0,t.jsx)(r,{variant:e,size:c?40:56})}),(0,t.jsx)("h3",{className:`font-medium text-gray-300 ${c?"text-sm":"text-base"}`,children:d}),u&&(0,t.jsx)("p",{className:`text-gray-500 ${c?"text-xs mt-1.5":"text-sm mt-2"} max-w-md mx-auto leading-relaxed`,children:u}),o&&(0,t.jsx)("div",{className:"mt-4",children:o.href?(0,t.jsxs)(s.default,{href:o.href,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[o.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]}):(0,t.jsxs)("button",{onClick:o.onClick,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[o.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]})})]})}e.s(["EmptyState",0,n,"NodesEmptyState",0,function({hint:e}){return e?.global_count?(0,t.jsx)(n,{variant:"nodes",title:"No agents in this network",sub:`Server has ${e.global_count} nodes globally, but none are registered to the current network. Switch network or contact admin.`}):(0,t.jsx)(n,{variant:"nodes",cta:{label:"Run anet quickstart",href:"https://anet.sh"}})}])},65822,e=>{"use strict";var t=e.i(83599),s=e.i(58963);let a=async e=>{let t=await fetch(e);if(401===t.status)throw window.location.assign("/login"),Error("unauthorized");return t.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,t){if(!t)return e;let s=e.includes("?")?"&":"?";return`${e}${s}network_id=${encodeURIComponent(t)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,t.default)("/api/anet/config",a,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/health",a,r);return{health:e||null,error:s}},"useLicense",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/license",a,{refreshInterval:6e4});return{license:e?.ok?e:null,error:s}},"useMessages",0,function(e=100){let{networkId:l}=(0,s.useNetworkId)(),{data:i,error:o,isLoading:c}=(0,t.default)(n(`/api/hub/messages?limit=${e}`,l),a,r);return{messages:i?.messages||[],error:o,isLoading:c}},"useSessions",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:l,error:i,isLoading:o}=(0,t.default)(n("/api/hub/status",e),a,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:o}},"useStats",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:l,error:i}=(0,t.default)(n("/api/hub/stats",e),a,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,s.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:o,error:c,isLoading:x}=(0,t.default)(n(`/api/hub/tasks?${i}`,l),a,r);return{tasks:o?.tasks||[],count:o?.count??0,source:o?.source,error:c,isLoading:x}}])},82756,e=>{"use strict";var t=e.i(18050),s=e.i(71645),a=e.i(65822),r=e.i(18150),n=e.i(95356);let l={task:"bg-green-500/10 text-green-300 border-green-500/20",message:"bg-blue-500/10 text-blue-300 border-blue-500/20",broadcast:"bg-purple-500/10 text-purple-300 border-purple-500/20",reply:"bg-cyan-500/10 text-cyan-300 border-cyan-500/20"};function i(e){return e?new Date(e.replace(" ","T")+"Z").getTime():0}e.s(["default",0,function(){let{messages:e,isLoading:o}=(0,a.useMessages)(200),[c,x]=(0,s.useState)(""),[d,u]=(0,s.useState)(""),[h,m]=(0,s.useState)(!1),[p,g]=(0,s.useState)("timeline"),y=(0,s.useMemo)(()=>{let t=new Set;return e.forEach(e=>{let s=e.from_alias?.trim();s&&"dashboard"!==s.toLowerCase()&&t.add(s)}),[...t].slice(0,8)},[e]),b=(0,s.useMemo)(()=>{let t=d.trim().toLowerCase(),s=t.startsWith("from:")?t.slice(5).trim():"";return[...e].filter(e=>(!c||e.type===c)&&(s?(e.from_alias||"").toLowerCase().includes(s):!t||(e.from_alias||"").toLowerCase().includes(t)||(e.to_alias||"").toLowerCase().includes(t)||(e.content||"").toLowerCase().includes(t))).sort((e,t)=>i(e.created_at)-i(t.created_at))},[c,e,d]),j=(0,s.useMemo)(()=>{let e=new Map;return b.forEach(t=>{let s=t.from_alias||"?",a=t.to_alias||"?",r=[s,a].sort().join("↔"),n=e.get(r)||{participants:[s,a].sort(),messages:[],lastTime:0};n.messages.push(t),n.lastTime=Math.max(n.lastTime,i(t.created_at)),e.set(r,n)}),[...e.values()].sort((e,t)=>t.lastTime-e.lastTime)},[b]);return(0,t.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 mb-6",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-white lg:ml-0 ml-10",children:"Messages"}),(0,t.jsx)("span",{className:"text-xs bg-blue-900/30 text-blue-400 px-2 py-0.5 rounded-full border border-blue-800/30",children:e.length}),b.length>0&&(0,t.jsx)("button",{onClick:()=>{let e=b.map(e=>`**${e.from_alias||"?"}** → ${e.to_alias||"?"} (${e.type||"?"}) — ${e.created_at||""}
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18150,e=>{"use strict";e.s(["formatUptime",0,function(e){let t=Math.floor(e/3600),s=Math.floor(e%3600/60);return t>0?`${t}h ${s}m`:`${s}m`},"timeAgo",0,function(e){if(!e)return"--";let t=Math.floor((Date.now()-new Date(e.replace(" ","T")+"Z").getTime())/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}])},95356,e=>{"use strict";var t=e.i(18050),s=e.i(22016);let a={nodes:{title:"No agents in this network",sub:"Agent sessions will appear here once they connect to the CommHub."},tasks:{title:"No tasks yet",sub:"Tasks will appear here when agents send them via CommHub."},messages:{title:"No messages",sub:"Messages between agents will appear here."},logs:{title:"No audit logs",sub:"Events will appear here when users register, login, or perform actions."},tokens:{title:"No API tokens",sub:"Create one to authenticate CLI tools and external integrations."},networks:{title:"No networks found",sub:"Create one or sign in with V3 auth to see your networks."},generic:{title:"Nothing here yet",sub:"Data will appear here once available."}};function r({variant:e,size:s}){let a={width:s,height:s},n={fill:"none",stroke:"currentColor",strokeWidth:1.25,strokeLinecap:"round",strokeLinejoin:"round"};switch(e){case"nodes":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"14",r:"4"}),(0,t.jsx)("circle",{cx:"14",cy:"44",r:"4"}),(0,t.jsx)("circle",{cx:"50",cy:"44",r:"4"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"14",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"50",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"18",y1:"44",x2:"46",y2:"44",strokeDasharray:"3 3",opacity:"0.6"})]})});case"tasks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("rect",{x:"14",y:"14",width:"36",height:"6",rx:"1.5"}),(0,t.jsx)("rect",{x:"14",y:"26",width:"36",height:"6",rx:"1.5",opacity:"0.6"}),(0,t.jsx)("rect",{x:"14",y:"38",width:"36",height:"6",rx:"1.5",opacity:"0.35"})]})});case"messages":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("path",{d:"M14 18 h36 a3 3 0 0 1 3 3 v18 a3 3 0 0 1 -3 3 h-18 l-8 6 v-6 h-10 a3 3 0 0 1 -3 -3 v-18 a3 3 0 0 1 3 -3 z"}),(0,t.jsx)("line",{x1:"22",y1:"28",x2:"42",y2:"28",opacity:"0.5"}),(0,t.jsx)("line",{x1:"22",y1:"34",x2:"36",y2:"34",opacity:"0.5"})]})});case"logs":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("path",{d:"M18 12 h22 l8 8 v32 a2 2 0 0 1 -2 2 h-28 a2 2 0 0 1 -2 -2 v-38 a2 2 0 0 1 2 -2 z"}),(0,t.jsx)("path",{d:"M40 12 v8 h8",opacity:"0.6"}),(0,t.jsx)("line",{x1:"24",y1:"32",x2:"40",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"24",y1:"38",x2:"40",y2:"38",opacity:"0.4"}),(0,t.jsx)("line",{x1:"24",y1:"44",x2:"34",y2:"44",opacity:"0.25"})]})});case"tokens":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"22",cy:"32",r:"8"}),(0,t.jsx)("line",{x1:"30",y1:"32",x2:"54",y2:"32"}),(0,t.jsx)("line",{x1:"44",y1:"32",x2:"44",y2:"38"}),(0,t.jsx)("line",{x1:"50",y1:"32",x2:"50",y2:"40"})]})});case"networks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"18"}),(0,t.jsx)("ellipse",{cx:"32",cy:"32",rx:"18",ry:"9",opacity:"0.55"}),(0,t.jsx)("line",{x1:"14",y1:"32",x2:"50",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"32",y1:"14",x2:"32",y2:"50",opacity:"0.55"})]})});default:return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...n,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"14",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("circle",{cx:"32",cy:"32",r:"3"})]})})}}function n({variant:e="generic",title:l,sub:i,cta:o,compact:c=!1}){let x=a[e],d=l??x.title,h=i??x.sub;return(0,t.jsxs)("div",{className:`text-center ${c?"py-8":"py-16"} px-4`,role:"status",children:[(0,t.jsx)("div",{className:"anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500","aria-hidden":!0,children:(0,t.jsx)(r,{variant:e,size:c?40:56})}),(0,t.jsx)("h3",{className:`font-medium text-gray-300 ${c?"text-sm":"text-base"}`,children:d}),h&&(0,t.jsx)("p",{className:`text-gray-500 ${c?"text-xs mt-1.5":"text-sm mt-2"} max-w-md mx-auto leading-relaxed`,children:h}),o&&(0,t.jsx)("div",{className:"mt-4",children:o.href?(0,t.jsxs)(s.default,{href:o.href,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[o.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]}):(0,t.jsxs)("button",{onClick:o.onClick,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[o.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]})})]})}e.s(["EmptyState",0,n,"NodesEmptyState",0,function({hint:e}){return e?.global_count?(0,t.jsx)(n,{variant:"nodes",title:"No agents in this network",sub:`Server has ${e.global_count} nodes globally, but none are registered to the current network. Switch network or contact admin.`}):(0,t.jsx)(n,{variant:"nodes",cta:{label:"Run anet quickstart",href:"https://anet.sh"}})}])},65822,e=>{"use strict";var t=e.i(83599),s=e.i(58963);let a=async e=>{let t=await fetch(e);if(401===t.status)throw window.location.assign("/login"),Error("unauthorized");return t.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,t){if(!t)return e;let s=e.includes("?")?"&":"?";return`${e}${s}network_id=${encodeURIComponent(t)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,t.default)("/api/anet/config",a,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/health",a,r);return{health:e||null,error:s}},"useLicense",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/license",a,{refreshInterval:6e4});return{license:e?.ok?e:null,error:s}},"useMessages",0,function(e=100){let{networkId:l}=(0,s.useNetworkId)(),{data:i,error:o,isLoading:c}=(0,t.default)(n(`/api/hub/messages?limit=${e}`,l),a,r);return{messages:i?.messages||[],error:o,isLoading:c}},"useSessions",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:l,error:i,isLoading:o}=(0,t.default)(n("/api/hub/status",e),a,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:o}},"useStats",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:l,error:i}=(0,t.default)(n("/api/hub/stats",e),a,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,s.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:o,error:c,isLoading:x}=(0,t.default)(n(`/api/hub/tasks?${i}`,l),a,r);return{tasks:o?.tasks||[],count:o?.count??0,source:o?.source,error:c,isLoading:x}}])},69874,e=>{"use strict";var t=e.i(18050);let s=[180,200,220,270,300,330,30,90];e.s(["AliasAvatar",0,function({alias:e,size:a=28,className:r=""}){let n=function(e){let t=0;for(let s=0;s<e.length;s++)t=31*t+e.charCodeAt(s)>>>0;let a=s[t%s.length];return{bg:`hsl(${a} 55% 22%)`,ring:`hsl(${a} 60% 45%)`,text:`hsl(${a} 80% 78%)`}}(e),l=Math.max(9,Math.round(.42*a));return(0,t.jsx)("span",{className:`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${r}`,style:{width:a,height:a,fontSize:l,backgroundColor:n.bg,borderColor:n.ring,color:n.text},title:e,"aria-hidden":!0,children:e?(e.trim().match(/[\p{L}\p{N}]/u)?.[0]||e.trim()[0]||"·").toUpperCase():"·"})}])},82756,e=>{"use strict";var t=e.i(18050),s=e.i(71645),a=e.i(65822),r=e.i(18150),n=e.i(95356),l=e.i(69874);let i={task:"bg-green-500/10 text-green-300 border-green-500/20",message:"bg-blue-500/10 text-blue-300 border-blue-500/20",broadcast:"bg-purple-500/10 text-purple-300 border-purple-500/20",reply:"bg-cyan-500/10 text-cyan-300 border-cyan-500/20"};function o(e){return e?new Date(e.replace(" ","T")+"Z").getTime():0}function c(e){return"broadcast"===e.type?"broadcast":"dashboard"===(e.from_alias||"").toLowerCase()?"outgoing":"incoming"}function x(e,s){let a=e||"--",r=s.trim();if(!r||r.startsWith("from:"))return a;let n=a.toLowerCase().indexOf(r.toLowerCase());return n<0?a:(0,t.jsxs)(t.Fragment,{children:[a.slice(0,n),(0,t.jsx)("mark",{className:"bg-yellow-500/30 text-yellow-200 rounded px-0.5",children:a.slice(n,n+r.length)}),a.slice(n+r.length)]})}e.s(["default",0,function(){let{messages:e,isLoading:d}=(0,a.useMessages)(200),[h,m]=(0,s.useState)(""),[u,p]=(0,s.useState)(""),[g,y]=(0,s.useState)(!1),[b,j]=(0,s.useState)("timeline"),f=(0,s.useMemo)(()=>{let t=new Set;return e.forEach(e=>{let s=e.from_alias?.trim();s&&"dashboard"!==s.toLowerCase()&&t.add(s)}),[...t].slice(0,8)},[e]),v=(0,s.useMemo)(()=>{let t=u.trim().toLowerCase(),s=t.startsWith("from:")?t.slice(5).trim():"";return[...e].filter(e=>(!h||e.type===h)&&(s?(e.from_alias||"").toLowerCase().includes(s):!t||(e.from_alias||"").toLowerCase().includes(t)||(e.to_alias||"").toLowerCase().includes(t)||(e.content||"").toLowerCase().includes(t))).sort((e,t)=>o(e.created_at)-o(t.created_at))},[h,e,u]),w=(0,s.useMemo)(()=>{let e=new Map;return v.forEach(t=>{let s=t.from_alias||"?",a=t.to_alias||"?",r=[s,a].sort().join("↔"),n=e.get(r)||{participants:[s,a].sort(),messages:[],lastTime:0};n.messages.push(t),n.lastTime=Math.max(n.lastTime,o(t.created_at)),e.set(r,n)}),[...e.values()].sort((e,t)=>t.lastTime-e.lastTime)},[v]);return(0,t.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 mb-6",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-white lg:ml-0 ml-10",children:"Messages"}),(0,t.jsx)("span",{className:"text-xs bg-blue-900/30 text-blue-400 px-2 py-0.5 rounded-full border border-blue-800/30",children:e.length}),v.length>0&&(0,t.jsx)("button",{onClick:()=>{let e=v.map(e=>`**${e.from_alias||"?"}** → ${e.to_alias||"?"} (${e.type||"?"}) — ${e.created_at||""}
|
|
2
2
|
|
|
3
3
|
${e.content||"--"}
|
|
4
4
|
|
|
5
5
|
---`).join("\n\n"),t=new Blob([`# Messages Export
|
|
6
6
|
|
|
7
|
-
${e}`],{type:"text/markdown"}),s=URL.createObjectURL(t),a=document.createElement("a");a.href=s,a.download=`messages-${new Date().toISOString().slice(0,10)}.md`,a.click(),URL.revokeObjectURL(s)},className:"text-xs text-gray-500 hover:text-gray-300 border border-gray-700/50 px-2.5 py-1 rounded-lg transition-colors",children:"Export MD"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-3 mb-3",children:[(0,t.jsx)("input",{type:"text",value:
|
|
7
|
+
${e}`],{type:"text/markdown"}),s=URL.createObjectURL(t),a=document.createElement("a");a.href=s,a.download=`messages-${new Date().toISOString().slice(0,10)}.md`,a.click(),URL.revokeObjectURL(s)},className:"text-xs text-gray-500 hover:text-gray-300 border border-gray-700/50 px-2.5 py-1 rounded-lg transition-colors",children:"Export MD"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-3 mb-3",children:[(0,t.jsx)("input",{type:"text",value:u,onChange:e=>p(e.target.value),placeholder:"Search from/to/content or use from:alias",className:"bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-blue-500/50 focus:outline-none w-full sm:w-72"}),(0,t.jsxs)("select",{value:h,onChange:e=>m(e.target.value),className:"bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white focus:border-blue-500/50 focus:outline-none",children:[(0,t.jsx)("option",{value:"",children:"All types"}),(0,t.jsx)("option",{value:"task",children:"task"}),(0,t.jsx)("option",{value:"message",children:"message"}),(0,t.jsx)("option",{value:"broadcast",children:"broadcast"}),(0,t.jsx)("option",{value:"reply",children:"reply"})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-0.5",children:["timeline","grouped"].map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>j(e),className:`rounded-md px-2.5 py-1.5 text-xs transition-colors ${b===e?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"timeline"===e?"Timeline":"Grouped"},e))}),(0,t.jsx)("button",{onClick:()=>y(!g),className:`text-xs px-3 py-2 rounded-lg border transition-colors ${g?"bg-yellow-500/10 text-yellow-300 border-yellow-500/20":"text-gray-500 border-gray-700/50 hover:text-gray-300"}`,children:g?"Debug ON":"Debug"})]}),f.length>0&&(0,t.jsxs)("div",{className:"mb-6 flex flex-wrap gap-2",children:[f.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>p(`from:${e}`),className:`rounded-full border px-3 py-1 text-xs transition-colors ${u===`from:${e}`?"border-cyan-500/30 bg-cyan-500/10 text-cyan-300":"border-[#2a2a4a] bg-[#111128] text-gray-400 hover:text-gray-200"}`,children:["from:",e]},e)),u.startsWith("from:")&&(0,t.jsx)("button",{type:"button",onClick:()=>p(""),className:"rounded-full border border-gray-700 px-3 py-1 text-xs text-gray-500 hover:text-gray-200",children:"Clear"})]}),d?(0,t.jsx)("div",{className:"animate-pulse space-y-3",children:[1,2,3,4,5].map(e=>(0,t.jsx)("div",{className:"h-20 rounded-2xl bg-gray-800/20"},e))}):0===v.length?(0,t.jsx)(n.EmptyState,{variant:"messages"}):"grouped"===b?(0,t.jsx)("div",{className:"space-y-4",children:w.map((e,s)=>(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl overflow-hidden",children:[(0,t.jsxs)("div",{className:"px-4 py-2.5 border-b border-[#2a2a4a] flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm text-cyan-300 font-medium",children:e.participants[0]}),(0,t.jsx)("span",{className:"text-gray-600 text-xs",children:"↔"}),(0,t.jsx)("span",{className:"text-sm text-green-300 font-medium",children:e.participants[1]})]}),(0,t.jsxs)("span",{className:"text-[10px] text-gray-600",children:[e.messages.length," messages"]})]}),(0,t.jsx)("div",{className:"px-4 py-2 space-y-2 max-h-64 overflow-y-auto",children:e.messages.map(s=>(0,t.jsxs)("div",{className:"flex items-start gap-2 text-xs py-1",children:[(0,t.jsx)("span",{className:`shrink-0 font-medium ${s.from_alias===e.participants[0]?"text-cyan-400":"text-green-400"}`,children:s.from_alias}),(0,t.jsx)("span",{className:"text-gray-400 flex-1",children:s.content?.slice(0,120)||"--"}),(0,t.jsx)("span",{className:"text-[9px] text-gray-600 shrink-0",children:(0,r.timeAgo)(s.created_at||"")})]},s.id))})]},s))}):(0,t.jsx)("div",{className:"space-y-1",children:v.map((e,s)=>{var a;let n=v[s-1],d=!!n&&o(e.created_at)-o(n.created_at)>3e5,h=c(e),m=!!n&&!d&&c(n)===h&&(n.from_alias||"")===(e.from_alias||"")&&(n.to_alias||"")===(e.to_alias||""),p=e.from_alias||"?";return(0,t.jsxs)("div",{children:[d&&(0,t.jsxs)("div",{className:"my-4 flex items-center gap-3",children:[(0,t.jsx)("div",{className:"h-px flex-1 bg-[#2a2a4a]"}),(0,t.jsx)("div",{className:"text-[11px] text-gray-600",children:(a=e.created_at)?new Date(a.replace(" ","T")+"Z").toLocaleString():"Time gap"}),(0,t.jsx)("div",{className:"h-px flex-1 bg-[#2a2a4a]"})]}),"broadcast"===h?(0,t.jsx)("div",{className:m?"mt-1":"mt-3",children:(0,t.jsxs)("div",{className:"rounded-2xl border border-purple-500/20 bg-purple-500/10 px-4 py-3 shadow-sm w-full",children:[(0,t.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-md border ${i[e.type||""]||"bg-gray-500/10 text-gray-400 border-gray-500/20"}`,children:e.type||"unknown"}),(0,t.jsx)("span",{className:"text-sm font-medium text-purple-200",children:p}),e.to_alias&&(0,t.jsxs)("span",{className:"text-xs text-purple-200/80",children:["to ",e.to_alias]}),"high"===e.priority&&(0,t.jsx)("span",{className:"text-xs text-red-400",children:"HIGH"}),(0,t.jsx)("span",{className:"ml-auto text-xs text-gray-500",children:e.created_at?(0,r.timeAgo)(e.created_at):"--"})]}),(0,t.jsx)("div",{className:"whitespace-pre-wrap text-sm leading-relaxed text-gray-200",children:x(e.content,u)})]})}):(0,t.jsxs)("div",{className:`${m?"mt-1":"mt-3"} flex gap-2 ${"outgoing"===h?"flex-row-reverse":"flex-row"}`,children:[(0,t.jsx)("div",{className:"w-8 shrink-0 pt-1",children:!m&&(0,t.jsx)(l.AliasAvatar,{alias:p,size:32})}),(0,t.jsxs)("div",{className:`min-w-0 max-w-3xl rounded-2xl border px-4 py-3 shadow-sm ${"outgoing"===h?"border-green-500/20 bg-green-500/10":"border-blue-500/20 bg-blue-500/10"}`,children:[!m&&(0,t.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-md border ${i[e.type||""]||"bg-gray-500/10 text-gray-400 border-gray-500/20"}`,children:e.type||"unknown"}),(0,t.jsx)("span",{className:`text-sm font-medium ${"outgoing"===h?"text-green-300":"text-blue-300"}`,children:p}),(0,t.jsx)("span",{className:"text-xs text-gray-600",children:"→"}),(0,t.jsx)("span",{className:"text-sm text-gray-300",children:e.to_alias||"--"}),"high"===e.priority&&(0,t.jsx)("span",{className:"text-xs text-red-400",children:"HIGH"}),(0,t.jsx)("span",{className:"ml-auto text-xs text-gray-500",children:e.created_at?(0,r.timeAgo)(e.created_at):"--"})]}),(0,t.jsx)("div",{className:"whitespace-pre-wrap text-sm leading-relaxed text-gray-200",children:x(e.content,u)}),m&&(0,t.jsx)("div",{className:"mt-1 text-[10px] text-gray-600 text-right",children:e.created_at?(0,r.timeAgo)(e.created_at):""}),g&&(0,t.jsxs)("div",{className:"mt-3 border-t border-white/10 pt-3 text-xs text-gray-500 space-y-1",children:[(0,t.jsxs)("div",{children:["ID: ",e.id]}),e.task_id&&(0,t.jsxs)("div",{children:["Task ID: ",e.task_id]}),(0,t.jsxs)("div",{children:["Created: ",e.created_at]})]})]})]})]},e.id)})})]})}])}]);
|
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":298,"timestamp":187131880243,"id":4,"parentId":1,"tags":{},"startTime":1778558617705,"traceId":"17e78f818ae875ee"},{"name":"load-custom-routes","duration":515,"timestamp":187131880695,"id":5,"parentId":1,"tags":{},"startTime":1778558617705,"traceId":"17e78f818ae875ee"},{"name":"create-dist-dir","duration":416,"timestamp":187131881257,"id":6,"parentId":1,"tags":{},"startTime":1778558617706,"traceId":"17e78f818ae875ee"},{"name":"clean","duration":587,"timestamp":187131882629,"id":7,"parentId":1,"tags":{},"startTime":1778558617707,"traceId":"17e78f818ae875ee"},{"name":"discover-routes","duration":8389,"timestamp":187131981307,"id":8,"parentId":1,"tags":{},"startTime":1778558617806,"traceId":"17e78f818ae875ee"},{"name":"create-root-mapping","duration":136,"timestamp":187131989770,"id":9,"parentId":1,"tags":{},"startTime":1778558617814,"traceId":"17e78f818ae875ee"},{"name":"generate-route-types","duration":26101,"timestamp":187131992328,"id":10,"parentId":1,"tags":{},"startTime":1778558617817,"traceId":"17e78f818ae875ee"},{"name":"public-dir-conflict-check","duration":144,"timestamp":187132018593,"id":11,"parentId":1,"tags":{},"startTime":1778558617843,"traceId":"17e78f818ae875ee"},{"name":"generate-routes-manifest","duration":6108,"timestamp":187132018929,"id":12,"parentId":1,"tags":{},"startTime":1778558617844,"traceId":"17e78f818ae875ee"},{"name":"run-turbopack","duration":7019275,"timestamp":187132047712,"id":14,"parentId":1,"tags":{},"startTime":1778558617872,"traceId":"17e78f818ae875ee"},{"name":"turbopack-build-events","duration":83,"timestamp":187132329286,"id":15,"parentId":1,"tags":{},"startTime":1778558618154,"traceId":"17e78f818ae875ee"},{"name":"run-typescript","duration":7463711,"timestamp":187139074373,"id":16,"parentId":1,"tags":{},"startTime":1778558624899,"traceId":"17e78f818ae875ee"},{"name":"generate-required-server-files","duration":2243,"timestamp":187146539027,"id":18,"parentId":1,"tags":{},"startTime":1778558632364,"traceId":"17e78f818ae875ee"},{"name":"check-static-error-page","duration":16361,"timestamp":187146606893,"id":20,"parentId":19,"tags":{},"startTime":1778558632432,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":422638,"timestamp":187146626583,"id":62,"parentId":22,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":440302,"timestamp":187146609051,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":458974,"timestamp":187146626174,"id":61,"parentId":21,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":477330,"timestamp":187146607894,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778558632433,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":509605,"timestamp":187146626721,"id":63,"parentId":25,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":524967,"timestamp":187146611423,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778558632436,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":512497,"timestamp":187146626928,"id":64,"parentId":26,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":527768,"timestamp":187146611720,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778558632436,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":526368,"timestamp":187146627090,"id":66,"parentId":28,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":540315,"timestamp":187146613207,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":526644,"timestamp":187146627028,"id":65,"parentId":27,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":541881,"timestamp":187146611823,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778558632437,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":530340,"timestamp":187146627268,"id":69,"parentId":32,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":543785,"timestamp":187146613909,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":534422,"timestamp":187146627422,"id":70,"parentId":33,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":547717,"timestamp":187146614197,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":537028,"timestamp":187146627160,"id":67,"parentId":29,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":550880,"timestamp":187146613366,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":538734,"timestamp":187146627508,"id":71,"parentId":34,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":551972,"timestamp":187146614315,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":542045,"timestamp":187146627216,"id":68,"parentId":30,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":555736,"timestamp":187146613578,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":542403,"timestamp":187146627625,"id":73,"parentId":36,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":555322,"timestamp":187146614767,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":546949,"timestamp":187146627535,"id":72,"parentId":35,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":560135,"timestamp":187146614414,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":549057,"timestamp":187146627667,"id":75,"parentId":38,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":561759,"timestamp":187146615018,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":550496,"timestamp":187146627676,"id":76,"parentId":39,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":563120,"timestamp":187146615094,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":553957,"timestamp":187146627694,"id":78,"parentId":41,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":566473,"timestamp":187146615221,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":556444,"timestamp":187146627685,"id":77,"parentId":40,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":569028,"timestamp":187146615158,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":558494,"timestamp":187146627654,"id":74,"parentId":37,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":571299,"timestamp":187146614898,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":558673,"timestamp":187146627703,"id":79,"parentId":42,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":571119,"timestamp":187146615287,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":560713,"timestamp":187146627720,"id":81,"parentId":44,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":573068,"timestamp":187146615417,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":562385,"timestamp":187146627728,"id":82,"parentId":45,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":574674,"timestamp":187146615483,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":565339,"timestamp":187146627748,"id":84,"parentId":47,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":577457,"timestamp":187146615672,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":567465,"timestamp":187146627711,"id":80,"parentId":43,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":579874,"timestamp":187146615351,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":568362,"timestamp":187146627736,"id":83,"parentId":46,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":580551,"timestamp":187146615588,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":568631,"timestamp":187146627758,"id":85,"parentId":48,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":580671,"timestamp":187146615752,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":562103,"timestamp":187146637198,"id":87,"parentId":31,"tags":{},"startTime":1778558632462,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":585666,"timestamp":187146613678,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":563427,"timestamp":187146636063,"id":86,"parentId":24,"tags":{},"startTime":1778558632461,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":590099,"timestamp":187146609427,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":548996,"timestamp":187146656604,"id":90,"parentId":50,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":589400,"timestamp":187146616241,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":557425,"timestamp":187146656614,"id":91,"parentId":51,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":597766,"timestamp":187146616347,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":560243,"timestamp":187146656619,"id":92,"parentId":52,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":600416,"timestamp":187146616498,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":565908,"timestamp":187146656628,"id":93,"parentId":53,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":605935,"timestamp":187146616651,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":572511,"timestamp":187146656638,"id":94,"parentId":55,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":611670,"timestamp":187146617535,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580012,"timestamp":187146656557,"id":88,"parentId":23,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":627372,"timestamp":187146609276,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580220,"timestamp":187146656593,"id":89,"parentId":49,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":620724,"timestamp":187146616113,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580291,"timestamp":187146656643,"id":95,"parentId":56,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":619255,"timestamp":187146617698,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":586040,"timestamp":187146656652,"id":96,"parentId":58,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":624591,"timestamp":187146618167,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":586270,"timestamp":187146656667,"id":98,"parentId":60,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":620116,"timestamp":187146622852,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778558632448,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":590014,"timestamp":187146656660,"id":97,"parentId":59,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":628446,"timestamp":187146618279,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":591263,"timestamp":187146656678,"id":99,"parentId":54,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":630966,"timestamp":187146617114,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":592038,"timestamp":187146656686,"id":100,"parentId":57,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":630916,"timestamp":187146617845,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"static-check","duration":642740,"timestamp":187146606075,"id":19,"parentId":1,"tags":{},"startTime":1778558632431,"traceId":"17e78f818ae875ee"},{"name":"write-routes-manifest","duration":407,"timestamp":187147255446,"id":102,"parentId":1,"tags":{},"startTime":1778558633080,"traceId":"17e78f818ae875ee"},{"name":"load-dotenv","duration":85,"timestamp":187147267947,"id":105,"parentId":104,"tags":{},"startTime":1778558633093,"traceId":"17e78f818ae875ee"},{"name":"run-export-path-map","duration":697,"timestamp":187147270676,"id":106,"parentId":104,"tags":{},"startTime":1778558633095,"traceId":"17e78f818ae875ee"},{"name":"next-export","duration":538786,"timestamp":187147266599,"id":104,"parentId":1,"tags":{},"startTime":1778558633091,"traceId":"17e78f818ae875ee"},{"name":"move-exported-app-not-found-","duration":1333,"timestamp":187147808533,"id":107,"parentId":103,"tags":{},"startTime":1778558633633,"traceId":"17e78f818ae875ee"},{"name":"move-exported-app-global-error-","duration":439,"timestamp":187147809970,"id":108,"parentId":103,"tags":{},"startTime":1778558633635,"traceId":"17e78f818ae875ee"}]
|
|
2
|
-
[{"name":"static-generation","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":345,"timestamp":188127090306,"id":4,"parentId":1,"tags":{},"startTime":1778559612915,"traceId":"9cdb29ceaf59bed5"},{"name":"load-custom-routes","duration":695,"timestamp":188127090826,"id":5,"parentId":1,"tags":{},"startTime":1778559612916,"traceId":"9cdb29ceaf59bed5"},{"name":"create-dist-dir","duration":628,"timestamp":188127091577,"id":6,"parentId":1,"tags":{},"startTime":1778559612916,"traceId":"9cdb29ceaf59bed5"},{"name":"clean","duration":557,"timestamp":188127093876,"id":7,"parentId":1,"tags":{},"startTime":1778559612919,"traceId":"9cdb29ceaf59bed5"},{"name":"discover-routes","duration":10174,"timestamp":188127203429,"id":8,"parentId":1,"tags":{},"startTime":1778559613028,"traceId":"9cdb29ceaf59bed5"},{"name":"create-root-mapping","duration":108,"timestamp":188127213667,"id":9,"parentId":1,"tags":{},"startTime":1778559613038,"traceId":"9cdb29ceaf59bed5"},{"name":"generate-route-types","duration":34230,"timestamp":188127215972,"id":10,"parentId":1,"tags":{},"startTime":1778559613041,"traceId":"9cdb29ceaf59bed5"},{"name":"public-dir-conflict-check","duration":127,"timestamp":188127251060,"id":11,"parentId":1,"tags":{},"startTime":1778559613076,"traceId":"9cdb29ceaf59bed5"},{"name":"generate-routes-manifest","duration":5297,"timestamp":188127251317,"id":12,"parentId":1,"tags":{},"startTime":1778559613076,"traceId":"9cdb29ceaf59bed5"},{"name":"run-turbopack","duration":12047112,"timestamp":188127265848,"id":14,"parentId":1,"tags":{},"startTime":1778559613091,"traceId":"9cdb29ceaf59bed5"},{"name":"turbopack-build-events","duration":85,"timestamp":188127633852,"id":15,"parentId":1,"tags":{},"startTime":1778559613459,"traceId":"9cdb29ceaf59bed5"},{"name":"run-typescript","duration":10912916,"timestamp":188139330373,"id":16,"parentId":1,"tags":{},"startTime":1778559625155,"traceId":"9cdb29ceaf59bed5"},{"name":"generate-required-server-files","duration":3438,"timestamp":188150244413,"id":18,"parentId":1,"tags":{},"startTime":1778559636069,"traceId":"9cdb29ceaf59bed5"},{"name":"check-static-error-page","duration":31630,"timestamp":188150348626,"id":20,"parentId":19,"tags":{},"startTime":1778559636173,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":478916,"timestamp":188150384872,"id":62,"parentId":22,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":512213,"timestamp":188150351698,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778559636176,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":598506,"timestamp":188150385193,"id":64,"parentId":26,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":621717,"timestamp":188150362054,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778559636187,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":635945,"timestamp":188150385240,"id":65,"parentId":27,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":658982,"timestamp":188150362271,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778559636187,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":651789,"timestamp":188150385276,"id":66,"parentId":28,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":674746,"timestamp":188150362407,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778559636187,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":661935,"timestamp":188150385319,"id":67,"parentId":29,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":684813,"timestamp":188150362528,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778559636187,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":674879,"timestamp":188150385354,"id":68,"parentId":30,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":697481,"timestamp":188150362838,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778559636188,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":692834,"timestamp":188150385387,"id":69,"parentId":32,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":714091,"timestamp":188150364235,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778559636189,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":694645,"timestamp":188150384988,"id":63,"parentId":25,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":721023,"timestamp":188150358667,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778559636183,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":699745,"timestamp":188150385551,"id":71,"parentId":34,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":720846,"timestamp":188150364545,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778559636189,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":701551,"timestamp":188150385505,"id":70,"parentId":33,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":722708,"timestamp":188150364410,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778559636189,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":707877,"timestamp":188150387257,"id":73,"parentId":36,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":729968,"timestamp":188150365228,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778559636190,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":717383,"timestamp":188150385568,"id":72,"parentId":35,"tags":{},"startTime":1778559636210,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":738356,"timestamp":188150364668,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778559636189,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":717487,"timestamp":188150387299,"id":74,"parentId":37,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":739416,"timestamp":188150365419,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778559636190,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":720488,"timestamp":188150384543,"id":61,"parentId":21,"tags":{},"startTime":1778559636209,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":755069,"timestamp":188150349982,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778559636175,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":721722,"timestamp":188150387315,"id":76,"parentId":39,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":742656,"timestamp":188150366421,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778559636191,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":723865,"timestamp":188150387309,"id":75,"parentId":38,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":745010,"timestamp":188150366207,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778559636191,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":725466,"timestamp":188150387328,"id":78,"parentId":41,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":744261,"timestamp":188150368926,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778559636194,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":728463,"timestamp":188150387333,"id":79,"parentId":42,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":746572,"timestamp":188150369256,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778559636194,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":732780,"timestamp":188150387338,"id":80,"parentId":43,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":750771,"timestamp":188150369393,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778559636194,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":735018,"timestamp":188150387344,"id":81,"parentId":44,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":752892,"timestamp":188150369507,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778559636194,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":737209,"timestamp":188150387349,"id":82,"parentId":45,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":754987,"timestamp":188150369604,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778559636194,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":740705,"timestamp":188150387359,"id":84,"parentId":47,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":757586,"timestamp":188150370514,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778559636195,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":744059,"timestamp":188150387364,"id":85,"parentId":48,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":760837,"timestamp":188150370628,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778559636195,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":744508,"timestamp":188150390805,"id":86,"parentId":24,"tags":{},"startTime":1778559636215,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":781354,"timestamp":188150353993,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778559636179,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":747380,"timestamp":188150394779,"id":87,"parentId":31,"tags":{},"startTime":1778559636219,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":779222,"timestamp":188150362985,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778559636188,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":770382,"timestamp":188150387321,"id":77,"parentId":40,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":789764,"timestamp":188150367995,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778559636193,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":774235,"timestamp":188150387354,"id":83,"parentId":46,"tags":{},"startTime":1778559636212,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":791305,"timestamp":188150370344,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778559636195,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":731697,"timestamp":188150432948,"id":89,"parentId":49,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":793284,"timestamp":188150371407,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778559636196,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":737843,"timestamp":188150432967,"id":91,"parentId":51,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":798765,"timestamp":188150372088,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778559636197,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":744555,"timestamp":188150432976,"id":92,"parentId":52,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":805045,"timestamp":188150372535,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778559636197,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":750877,"timestamp":188150432982,"id":93,"parentId":53,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":810991,"timestamp":188150372928,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778559636198,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":782123,"timestamp":188150432992,"id":94,"parentId":55,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":837832,"timestamp":188150377354,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778559636202,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":788591,"timestamp":188150433010,"id":95,"parentId":56,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":844120,"timestamp":188150377552,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778559636202,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":794291,"timestamp":188150433016,"id":96,"parentId":58,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":848707,"timestamp":188150378657,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778559636203,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":799320,"timestamp":188150432877,"id":88,"parentId":23,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":878441,"timestamp":188150353811,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778559636179,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":805716,"timestamp":188150433025,"id":97,"parentId":59,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":859995,"timestamp":188150378808,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778559636203,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":812283,"timestamp":188150433057,"id":99,"parentId":57,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":867099,"timestamp":188150378303,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778559636203,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":812882,"timestamp":188150432960,"id":90,"parentId":50,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":874138,"timestamp":188150371757,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778559636196,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":817766,"timestamp":188150433043,"id":98,"parentId":60,"tags":{},"startTime":1778559636258,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":871916,"timestamp":188150378942,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778559636204,"traceId":"9cdb29ceaf59bed5"},{"name":"is-page-static","duration":798786,"timestamp":188150453043,"id":100,"parentId":54,"tags":{},"startTime":1778559636278,"traceId":"9cdb29ceaf59bed5"},{"name":"check-page","duration":878394,"timestamp":188150373467,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778559636198,"traceId":"9cdb29ceaf59bed5"},{"name":"static-check","duration":904400,"timestamp":188150347495,"id":19,"parentId":1,"tags":{},"startTime":1778559636172,"traceId":"9cdb29ceaf59bed5"},{"name":"write-routes-manifest","duration":419,"timestamp":188151258948,"id":102,"parentId":1,"tags":{},"startTime":1778559637084,"traceId":"9cdb29ceaf59bed5"},{"name":"load-dotenv","duration":54,"timestamp":188151274160,"id":105,"parentId":104,"tags":{},"startTime":1778559637099,"traceId":"9cdb29ceaf59bed5"},{"name":"run-export-path-map","duration":635,"timestamp":188151276733,"id":106,"parentId":104,"tags":{},"startTime":1778559637101,"traceId":"9cdb29ceaf59bed5"},{"name":"next-export","duration":716160,"timestamp":188151272864,"id":104,"parentId":1,"tags":{},"startTime":1778559637098,"traceId":"9cdb29ceaf59bed5"},{"name":"move-exported-app-not-found-","duration":627,"timestamp":188151994199,"id":107,"parentId":103,"tags":{},"startTime":1778559637819,"traceId":"9cdb29ceaf59bed5"},{"name":"move-exported-app-global-error-","duration":439,"timestamp":188151994949,"id":108,"parentId":103,"tags":{},"startTime":1778559637820,"traceId":"9cdb29ceaf59bed5"}]
|
|
2
|
+
[{"name":"static-generation","duration":738552,"timestamp":188151263436,"id":103,"parentId":1,"tags":{},"startTime":1778559637088,"traceId":"9cdb29ceaf59bed5"},{"name":"write-routes-manifest","duration":500,"timestamp":188152002222,"id":109,"parentId":1,"tags":{},"startTime":1778559637827,"traceId":"9cdb29ceaf59bed5"},{"name":"print-tree-view","duration":4171,"timestamp":188152010861,"id":110,"parentId":1,"tags":{},"startTime":1778559637836,"traceId":"9cdb29ceaf59bed5"},{"name":"write-route-bundle-stats","duration":14375,"timestamp":188152015071,"id":111,"parentId":1,"tags":{},"startTime":1778559637840,"traceId":"9cdb29ceaf59bed5"},{"name":"telemetry-flush","duration":35579,"timestamp":188152029479,"id":112,"parentId":1,"tags":{},"startTime":1778559637854,"traceId":"9cdb29ceaf59bed5"},{"name":"next-build","duration":25034982,"timestamp":188127030117,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778559612855,"traceId":"9cdb29ceaf59bed5"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":12047112,"timestamp":188127265848,"id":14,"parentId":1,"tags":{},"startTime":1778559613091,"traceId":"9cdb29ceaf59bed5"},{"name":"turbopack-build-events","duration":85,"timestamp":188127633852,"id":15,"parentId":1,"tags":{},"startTime":1778559613459,"traceId":"9cdb29ceaf59bed5"},{"name":"run-typescript","duration":10912916,"timestamp":188139330373,"id":16,"parentId":1,"tags":{},"startTime":1778559625155,"traceId":"9cdb29ceaf59bed5"},{"name":"static-check","duration":904400,"timestamp":188150347495,"id":19,"parentId":1,"tags":{},"startTime":1778559636172,"traceId":"9cdb29ceaf59bed5"},{"name":"static-generation","duration":738552,"timestamp":188151263436,"id":103,"parentId":1,"tags":{},"startTime":1778559637088,"traceId":"9cdb29ceaf59bed5"},{"name":"telemetry-flush","duration":35579,"timestamp":188152029479,"id":112,"parentId":1,"tags":{},"startTime":1778559637854,"traceId":"9cdb29ceaf59bed5"},{"name":"next-build","duration":25034982,"timestamp":188127030117,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778559612855,"traceId":"9cdb29ceaf59bed5"}]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Hue-hashed avatar pill for agent aliases. Same alias → same color across
|
|
2
|
+
* every page (Messages, Nodes, TopoGraph). Use the `size` prop for inline
|
|
3
|
+
* pills (16/20) vs card headers (28). Round 21 introduced the palette;
|
|
4
|
+
* round 22 promotes it from app/messages to a shared component. */
|
|
5
|
+
|
|
6
|
+
const AVATAR_HUES = [180, 200, 220, 270, 300, 330, 30, 90];
|
|
7
|
+
|
|
8
|
+
export function aliasAvatarColors(alias: string): { bg: string; ring: string; text: string } {
|
|
9
|
+
let h = 0;
|
|
10
|
+
for (let i = 0; i < alias.length; i++) h = (h * 31 + alias.charCodeAt(i)) >>> 0;
|
|
11
|
+
const hue = AVATAR_HUES[h % AVATAR_HUES.length];
|
|
12
|
+
return {
|
|
13
|
+
bg: `hsl(${hue} 55% 22%)`,
|
|
14
|
+
ring: `hsl(${hue} 60% 45%)`,
|
|
15
|
+
text: `hsl(${hue} 80% 78%)`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function aliasInitial(alias?: string): string {
|
|
20
|
+
if (!alias) return '·';
|
|
21
|
+
const ch = alias.trim().match(/[\p{L}\p{N}]/u)?.[0] || alias.trim()[0] || '·';
|
|
22
|
+
return ch.toUpperCase();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface AliasAvatarProps {
|
|
26
|
+
alias: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function AliasAvatar({ alias, size = 28, className = '' }: AliasAvatarProps) {
|
|
32
|
+
const c = aliasAvatarColors(alias);
|
|
33
|
+
const fs = Math.max(9, Math.round(size * 0.42));
|
|
34
|
+
return (
|
|
35
|
+
<span
|
|
36
|
+
className={`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${className}`}
|
|
37
|
+
style={{
|
|
38
|
+
width: size,
|
|
39
|
+
height: size,
|
|
40
|
+
fontSize: fs,
|
|
41
|
+
backgroundColor: c.bg,
|
|
42
|
+
borderColor: c.ring,
|
|
43
|
+
color: c.text,
|
|
44
|
+
}}
|
|
45
|
+
title={alias}
|
|
46
|
+
aria-hidden
|
|
47
|
+
>
|
|
48
|
+
{aliasInitial(alias)}
|
|
49
|
+
</span>
|
|
50
|
+
);
|
|
51
|
+
}
|
package/app/messages/page.tsx
CHANGED
|
@@ -4,6 +4,7 @@ import { useMemo, useState } from 'react';
|
|
|
4
4
|
import { useMessages } from '../lib/hooks';
|
|
5
5
|
import { timeAgo } from '../components/utils';
|
|
6
6
|
import { EmptyState } from '../components/EmptyState';
|
|
7
|
+
import { AliasAvatar } from '../components/AliasAvatar';
|
|
7
8
|
|
|
8
9
|
interface MessageItem {
|
|
9
10
|
id: string;
|
|
@@ -40,6 +41,17 @@ function bubbleVariant(message: MessageItem) {
|
|
|
40
41
|
return 'incoming';
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
/** Render message content, highlighting the search match inline (skips the
|
|
45
|
+
* `from:` filter prefix since it filters by sender, not by content). */
|
|
46
|
+
function renderHighlighted(content: string | undefined, search: string) {
|
|
47
|
+
const text = content || '--';
|
|
48
|
+
const q = search.trim();
|
|
49
|
+
if (!q || q.startsWith('from:')) return text;
|
|
50
|
+
const idx = text.toLowerCase().indexOf(q.toLowerCase());
|
|
51
|
+
if (idx < 0) return text;
|
|
52
|
+
return <>{text.slice(0, idx)}<mark className="bg-yellow-500/30 text-yellow-200 rounded px-0.5">{text.slice(idx, idx + q.length)}</mark>{text.slice(idx + q.length)}</>;
|
|
53
|
+
}
|
|
54
|
+
|
|
43
55
|
export default function MessagesPage() {
|
|
44
56
|
const { messages, isLoading } = useMessages(200);
|
|
45
57
|
const [filterType, setFilterType] = useState('');
|
|
@@ -213,13 +225,21 @@ export default function MessagesPage() {
|
|
|
213
225
|
))}
|
|
214
226
|
</div>
|
|
215
227
|
) : (
|
|
216
|
-
<div className="space-y-
|
|
228
|
+
<div className="space-y-1">
|
|
217
229
|
{filtered.map((message: MessageItem, index) => {
|
|
218
230
|
const previous = filtered[index - 1];
|
|
219
231
|
const gapExceeded = previous
|
|
220
232
|
? normalizeDate(message.created_at) - normalizeDate(previous.created_at) > 5 * 60 * 1000
|
|
221
233
|
: false;
|
|
222
234
|
const variant = bubbleVariant(message);
|
|
235
|
+
// Cluster: same sender + same direction + same to_alias and no
|
|
236
|
+
// time-gap divider → tighter spacing and hide repeated header.
|
|
237
|
+
const samePrev = !!previous
|
|
238
|
+
&& !gapExceeded
|
|
239
|
+
&& bubbleVariant(previous) === variant
|
|
240
|
+
&& (previous.from_alias || '') === (message.from_alias || '')
|
|
241
|
+
&& (previous.to_alias || '') === (message.to_alias || '');
|
|
242
|
+
const fromAlias = message.from_alias || '?';
|
|
223
243
|
|
|
224
244
|
return (
|
|
225
245
|
<div key={message.id}>
|
|
@@ -231,60 +251,71 @@ export default function MessagesPage() {
|
|
|
231
251
|
</div>
|
|
232
252
|
)}
|
|
233
253
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
254
|
+
{/* Broadcasts span full width — no avatar gutter. */}
|
|
255
|
+
{variant === 'broadcast' ? (
|
|
256
|
+
<div className={samePrev ? 'mt-1' : 'mt-3'}>
|
|
257
|
+
<div className="rounded-2xl border border-purple-500/20 bg-purple-500/10 px-4 py-3 shadow-sm w-full">
|
|
258
|
+
<div className="mb-2 flex flex-wrap items-center gap-2">
|
|
259
|
+
<span className={`text-xs px-2 py-0.5 rounded-md border ${TYPE_COLORS[message.type || ''] || 'bg-gray-500/10 text-gray-400 border-gray-500/20'}`}>
|
|
260
|
+
{message.type || 'unknown'}
|
|
261
|
+
</span>
|
|
262
|
+
<span className="text-sm font-medium text-purple-200">{fromAlias}</span>
|
|
263
|
+
{message.to_alias && <span className="text-xs text-purple-200/80">to {message.to_alias}</span>}
|
|
264
|
+
{message.priority === 'high' && <span className="text-xs text-red-400">HIGH</span>}
|
|
265
|
+
<span className="ml-auto text-xs text-gray-500">{message.created_at ? timeAgo(message.created_at) : '--'}</span>
|
|
266
|
+
</div>
|
|
267
|
+
<div className="whitespace-pre-wrap text-sm leading-relaxed text-gray-200">
|
|
268
|
+
{renderHighlighted(message.content, search)}
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
) : (
|
|
273
|
+
<div className={`${samePrev ? 'mt-1' : 'mt-3'} flex gap-2 ${variant === 'outgoing' ? 'flex-row-reverse' : 'flex-row'}`}>
|
|
274
|
+
{/* Avatar gutter — fixed width keeps bubble columns aligned even on streaks */}
|
|
275
|
+
<div className="w-8 shrink-0 pt-1">
|
|
276
|
+
{!samePrev && <AliasAvatar alias={fromAlias} size={32} />}
|
|
277
|
+
</div>
|
|
278
|
+
<div className={`min-w-0 max-w-3xl rounded-2xl border px-4 py-3 shadow-sm ${
|
|
279
|
+
variant === 'outgoing'
|
|
280
|
+
? 'border-green-500/20 bg-green-500/10'
|
|
281
|
+
: 'border-blue-500/20 bg-blue-500/10'
|
|
282
|
+
}`}>
|
|
283
|
+
{!samePrev && (
|
|
284
|
+
<div className="mb-2 flex flex-wrap items-center gap-2">
|
|
285
|
+
<span className={`text-xs px-2 py-0.5 rounded-md border ${TYPE_COLORS[message.type || ''] || 'bg-gray-500/10 text-gray-400 border-gray-500/20'}`}>
|
|
286
|
+
{message.type || 'unknown'}
|
|
287
|
+
</span>
|
|
288
|
+
<span className={`text-sm font-medium ${variant === 'outgoing' ? 'text-green-300' : 'text-blue-300'}`}>
|
|
289
|
+
{fromAlias}
|
|
290
|
+
</span>
|
|
257
291
|
<span className="text-xs text-gray-600">→</span>
|
|
258
292
|
<span className="text-sm text-gray-300">{message.to_alias || '--'}</span>
|
|
259
|
-
|
|
293
|
+
{message.priority === 'high' && <span className="text-xs text-red-400">HIGH</span>}
|
|
294
|
+
<span className="ml-auto text-xs text-gray-500">{message.created_at ? timeAgo(message.created_at) : '--'}</span>
|
|
295
|
+
</div>
|
|
260
296
|
)}
|
|
261
|
-
|
|
262
|
-
|
|
297
|
+
|
|
298
|
+
<div className="whitespace-pre-wrap text-sm leading-relaxed text-gray-200">
|
|
299
|
+
{renderHighlighted(message.content, search)}
|
|
300
|
+
</div>
|
|
301
|
+
|
|
302
|
+
{/* When in a streak, surface the timestamp inline-right so users still know cadence */}
|
|
303
|
+
{samePrev && (
|
|
304
|
+
<div className="mt-1 text-[10px] text-gray-600 text-right">
|
|
305
|
+
{message.created_at ? timeAgo(message.created_at) : ''}
|
|
306
|
+
</div>
|
|
263
307
|
)}
|
|
264
|
-
{message.priority === 'high' && <span className="text-xs text-red-400">HIGH</span>}
|
|
265
|
-
<span className="ml-auto text-xs text-gray-500">{message.created_at ? timeAgo(message.created_at) : '--'}</span>
|
|
266
|
-
</div>
|
|
267
308
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
return <>{text.slice(0, idx)}<mark className="bg-yellow-500/30 text-yellow-200 rounded px-0.5">{text.slice(idx, idx + q.length)}</mark>{text.slice(idx + q.length)}</>;
|
|
276
|
-
})()}
|
|
309
|
+
{debug && (
|
|
310
|
+
<div className="mt-3 border-t border-white/10 pt-3 text-xs text-gray-500 space-y-1">
|
|
311
|
+
<div>ID: {message.id}</div>
|
|
312
|
+
{message.task_id && <div>Task ID: {message.task_id}</div>}
|
|
313
|
+
<div>Created: {message.created_at}</div>
|
|
314
|
+
</div>
|
|
315
|
+
)}
|
|
277
316
|
</div>
|
|
278
|
-
|
|
279
|
-
{debug && (
|
|
280
|
-
<div className="mt-3 border-t border-white/10 pt-3 text-xs text-gray-500 space-y-1">
|
|
281
|
-
<div>ID: {message.id}</div>
|
|
282
|
-
{message.task_id && <div>Task ID: {message.task_id}</div>}
|
|
283
|
-
<div>Created: {message.created_at}</div>
|
|
284
|
-
</div>
|
|
285
|
-
)}
|
|
286
317
|
</div>
|
|
287
|
-
|
|
318
|
+
)}
|
|
288
319
|
</div>
|
|
289
320
|
);
|
|
290
321
|
})}
|
package/app/nodes/page.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import { timeAgo } from '../components/utils';
|
|
|
6
6
|
import { useSessions, useHealth } from '../lib/hooks';
|
|
7
7
|
import { TaskChatPanel } from '../components/TaskChatPanel';
|
|
8
8
|
import { EmptyState } from '../components/EmptyState';
|
|
9
|
+
import { AliasAvatar } from '../components/AliasAvatar';
|
|
9
10
|
import type { Session } from '../components/types';
|
|
10
11
|
|
|
11
12
|
const STATUS_COLORS: Record<string, string> = {
|
|
@@ -188,14 +189,18 @@ export default function NodesPage() {
|
|
|
188
189
|
</span>
|
|
189
190
|
</div>
|
|
190
191
|
)}
|
|
191
|
-
<div className="flex items-start
|
|
192
|
+
<div className="flex items-start gap-3">
|
|
193
|
+
<AliasAvatar alias={s.alias} size={36} />
|
|
192
194
|
<Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className="min-w-0 flex-1 hover:text-cyan-300">
|
|
193
195
|
<div className="flex items-center gap-2">
|
|
194
196
|
<span className="truncate text-base font-semibold text-white">{s.alias}</span>
|
|
195
|
-
<span className={`shrink-0 rounded-md border px-2 py-0.5 text-[
|
|
197
|
+
<span className={`shrink-0 rounded-md border px-2 py-0.5 text-[10px] uppercase tracking-wide ${STATUS_COLORS[statusKey] || STATUS_COLORS.offline}`}>
|
|
196
198
|
{statusKey}
|
|
197
199
|
</span>
|
|
198
200
|
</div>
|
|
201
|
+
<div className="mt-0.5 truncate text-xs text-gray-500">
|
|
202
|
+
{(s.agent || '—')}<span className="text-gray-700 mx-1.5">·</span>{(s.server || '—')}
|
|
203
|
+
</div>
|
|
199
204
|
</Link>
|
|
200
205
|
<div className="flex gap-1.5 shrink-0">
|
|
201
206
|
<button type="button" onClick={() => setChatAlias(s.alias)}
|
|
@@ -209,25 +214,16 @@ export default function NodesPage() {
|
|
|
209
214
|
</div>
|
|
210
215
|
</div>
|
|
211
216
|
|
|
212
|
-
<div className="mt-3
|
|
213
|
-
<div className="flex justify-between gap-3">
|
|
214
|
-
<span>
|
|
215
|
-
<span className="
|
|
216
|
-
</div>
|
|
217
|
-
<div className="flex justify-between gap-3">
|
|
218
|
-
<span>Server</span>
|
|
219
|
-
<span className="truncate text-gray-300">{s.server || '--'}</span>
|
|
217
|
+
<div className="mt-3 rounded-lg border border-[#1a1a2a] bg-[#0a0a15] px-3 py-2 text-xs">
|
|
218
|
+
<div className="flex items-center justify-between gap-3">
|
|
219
|
+
<span className="text-[10px] uppercase tracking-wide text-gray-600">Current task</span>
|
|
220
|
+
<span className="text-[10px] text-gray-600">{timeAgo(s.last_seen_at || s.updated_at)}</span>
|
|
220
221
|
</div>
|
|
221
|
-
<div className=
|
|
222
|
-
|
|
223
|
-
<span className="text-gray-300">{timeAgo(s.last_seen_at || s.updated_at)}</span>
|
|
222
|
+
<div className={`mt-1 line-clamp-2 ${s.task ? 'text-gray-300' : 'text-gray-600 italic'}`}>
|
|
223
|
+
{s.task || 'No current task'}
|
|
224
224
|
</div>
|
|
225
225
|
</div>
|
|
226
226
|
|
|
227
|
-
<div className="mt-3 rounded-lg border border-[#1a1a2a] bg-[#0a0a15] px-3 py-2 text-xs text-gray-400">
|
|
228
|
-
{s.task ? s.task : 'No current task'}
|
|
229
|
-
</div>
|
|
230
|
-
|
|
231
227
|
{progress > 0 && progress < 100 && (
|
|
232
228
|
<div className="mt-3 h-1.5 overflow-hidden rounded-full bg-gray-800">
|
|
233
229
|
<div className="h-1.5 rounded-full bg-cyan-400 transition-all" style={{ width: `${progress}%` }} />
|
|
@@ -297,8 +293,9 @@ export default function NodesPage() {
|
|
|
297
293
|
</span>
|
|
298
294
|
</div>
|
|
299
295
|
<div className="col-span-2 min-w-0">
|
|
300
|
-
<Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className="
|
|
301
|
-
{s.alias}
|
|
296
|
+
<Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className="flex items-center gap-2 min-w-0 hover:text-cyan-300">
|
|
297
|
+
<AliasAvatar alias={s.alias} size={20} />
|
|
298
|
+
<span className="truncate text-sm font-medium text-white">{s.alias}</span>
|
|
302
299
|
</Link>
|
|
303
300
|
</div>
|
|
304
301
|
<div className="col-span-2 truncate text-xs text-gray-400">{s.agent || '--'}</div>
|
|
@@ -317,15 +314,16 @@ export default function NodesPage() {
|
|
|
317
314
|
</div>
|
|
318
315
|
</div>
|
|
319
316
|
<div className="sm:hidden space-y-2">
|
|
320
|
-
<div className="flex items-center
|
|
321
|
-
<
|
|
322
|
-
|
|
317
|
+
<div className="flex items-center gap-2.5">
|
|
318
|
+
<AliasAvatar alias={s.alias} size={28} />
|
|
319
|
+
<Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className="min-w-0 flex-1 hover:text-cyan-300">
|
|
320
|
+
<div className="truncate text-sm font-medium text-white">{s.alias}</div>
|
|
321
|
+
<div className="truncate text-[10px] text-gray-500">{s.agent || '—'} · {timeAgo(s.last_seen_at || s.updated_at)}</div>
|
|
323
322
|
</Link>
|
|
324
323
|
<span className={`shrink-0 text-xs px-2 py-0.5 rounded-md border ${STATUS_COLORS[statusKey] || STATUS_COLORS.offline}`}>
|
|
325
324
|
{statusKey}
|
|
326
325
|
</span>
|
|
327
326
|
</div>
|
|
328
|
-
<div className="text-xs text-gray-500">{s.agent || '--'} · {timeAgo(s.last_seen_at || s.updated_at)}</div>
|
|
329
327
|
{s.task && <div className="truncate text-xs text-gray-500">{s.task}</div>}
|
|
330
328
|
<div className="flex gap-2">
|
|
331
329
|
<button type="button" onClick={() => setChatAlias(s.alias)}
|