@sleep2agi/agent-network-dashboard 0.4.6-preview.280 → 0.4.6-preview.282
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/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.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- 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 +1 -1
- package/.next/server/app/admin.html +1 -1
- package/.next/server/app/admin.rsc +1 -1
- package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- 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 +2 -2
- 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 +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- 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 +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs.html +1 -1
- package/.next/server/app/logs.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/messages.rsc +1 -1
- package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node.html +1 -1
- package/.next/server/app/node.rsc +1 -1
- package/.next/server/app/node.segments/_full.segment.rsc +1 -1
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +1 -1
- package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/nodes.rsc +1 -1
- package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/server-logs.rsc +1 -1
- package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/settings/networks.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/settings/tokens.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
- 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 +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks.html +1 -1
- package/.next/server/app/tasks.rsc +1 -1
- package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- 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/agent-network-dashboard_09kk21a._.js +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{0g~epaflwnl2_.js → 0.17023t0q5iy.js} +1 -1
- package/.next/static/chunks/{10am04t1.vng-.js → 0my515m3gk_js.js} +3 -3
- package/.next/static/chunks/{07-se8kincki8.js → 15v_s2m~-o.q-.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +37 -1
- package/package.json +1 -1
- package/scripts/topo-freshness-conditional-render-test.mjs +92 -0
- package/scripts/topo-legend-count-tabular-test.mjs +87 -0
- package/scripts/topo-freshness-text-color-coherence-test.mjs +0 -97
- /package/.next/static/{3p-KUaM1iXZ5ooi8BuSwP → jm9NWDYTm3hLXINnznnDk}/_buildManifest.js +0 -0
- /package/.next/static/{3p-KUaM1iXZ5ooi8BuSwP → jm9NWDYTm3hLXINnznnDk}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{3p-KUaM1iXZ5ooi8BuSwP → jm9NWDYTm3hLXINnznnDk}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.280"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.282"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
|
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":272,"timestamp":102224997651,"id":4,"parentId":1,"tags":{},"startTime":1778910197244,"traceId":"61d19d6bfc8851ca"},{"name":"load-custom-routes","duration":449,"timestamp":102224998102,"id":5,"parentId":1,"tags":{},"startTime":1778910197244,"traceId":"61d19d6bfc8851ca"},{"name":"create-dist-dir","duration":712,"timestamp":102224998591,"id":6,"parentId":1,"tags":{},"startTime":1778910197245,"traceId":"61d19d6bfc8851ca"},{"name":"clean","duration":35921,"timestamp":102224999963,"id":7,"parentId":1,"tags":{},"startTime":1778910197246,"traceId":"61d19d6bfc8851ca"},{"name":"discover-routes","duration":8640,"timestamp":102225123090,"id":8,"parentId":1,"tags":{},"startTime":1778910197369,"traceId":"61d19d6bfc8851ca"},{"name":"create-root-mapping","duration":132,"timestamp":102225131793,"id":9,"parentId":1,"tags":{},"startTime":1778910197378,"traceId":"61d19d6bfc8851ca"},{"name":"generate-route-types","duration":41300,"timestamp":102225134343,"id":10,"parentId":1,"tags":{},"startTime":1778910197381,"traceId":"61d19d6bfc8851ca"},{"name":"public-dir-conflict-check","duration":101,"timestamp":102225175739,"id":11,"parentId":1,"tags":{},"startTime":1778910197422,"traceId":"61d19d6bfc8851ca"},{"name":"generate-routes-manifest","duration":4436,"timestamp":102225175979,"id":12,"parentId":1,"tags":{},"startTime":1778910197422,"traceId":"61d19d6bfc8851ca"},{"name":"run-turbopack","duration":5758092,"timestamp":102225186894,"id":14,"parentId":1,"tags":{},"startTime":1778910197433,"traceId":"61d19d6bfc8851ca"},{"name":"turbopack-build-events","duration":74,"timestamp":102225472613,"id":15,"parentId":1,"tags":{},"startTime":1778910197719,"traceId":"61d19d6bfc8851ca"},{"name":"run-typescript","duration":9213824,"timestamp":102230953656,"id":16,"parentId":1,"tags":{},"startTime":1778910203200,"traceId":"61d19d6bfc8851ca"},{"name":"generate-required-server-files","duration":2532,"timestamp":102240168560,"id":18,"parentId":1,"tags":{},"startTime":1778910212415,"traceId":"61d19d6bfc8851ca"},{"name":"check-static-error-page","duration":11966,"timestamp":102240350495,"id":20,"parentId":19,"tags":{},"startTime":1778910212597,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":471021,"timestamp":102240366042,"id":63,"parentId":22,"tags":{},"startTime":1778910212612,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":484005,"timestamp":102240353439,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778910212600,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":557632,"timestamp":102240366554,"id":67,"parentId":28,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":568016,"timestamp":102240356273,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":564110,"timestamp":102240366198,"id":64,"parentId":25,"tags":{},"startTime":1778910212612,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":574416,"timestamp":102240355962,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778910212602,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":589473,"timestamp":102240366874,"id":70,"parentId":32,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":599686,"timestamp":102240356741,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":591025,"timestamp":102240365613,"id":62,"parentId":21,"tags":{},"startTime":1778910212612,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":604821,"timestamp":102240351870,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778910212598,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":599519,"timestamp":102240366923,"id":71,"parentId":33,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":609666,"timestamp":102240356834,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":602941,"timestamp":102240366973,"id":72,"parentId":34,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":613038,"timestamp":102240356929,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":605319,"timestamp":102240367092,"id":74,"parentId":36,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":615026,"timestamp":102240357428,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":606518,"timestamp":102240366388,"id":66,"parentId":27,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":616751,"timestamp":102240356199,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778910212602,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":607474,"timestamp":102240367119,"id":75,"parentId":37,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":617039,"timestamp":102240357593,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":610794,"timestamp":102240367140,"id":77,"parentId":39,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":620208,"timestamp":102240357762,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":612326,"timestamp":102240367150,"id":78,"parentId":40,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":621685,"timestamp":102240357834,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":617073,"timestamp":102240367166,"id":80,"parentId":42,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":626269,"timestamp":102240358013,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":620133,"timestamp":102240367129,"id":76,"parentId":38,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":629611,"timestamp":102240357691,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":622326,"timestamp":102240366304,"id":65,"parentId":26,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":632564,"timestamp":102240356110,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778910212602,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":621651,"timestamp":102240367176,"id":81,"parentId":43,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":630789,"timestamp":102240358087,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":624778,"timestamp":102240366661,"id":68,"parentId":29,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":635148,"timestamp":102240356343,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":626272,"timestamp":102240367203,"id":84,"parentId":46,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":635228,"timestamp":102240358288,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":626952,"timestamp":102240367193,"id":83,"parentId":45,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":635962,"timestamp":102240358222,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":628203,"timestamp":102240367187,"id":82,"parentId":44,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":637275,"timestamp":102240358152,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":633469,"timestamp":102240367160,"id":79,"parentId":41,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":642756,"timestamp":102240357913,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778910212604,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":633569,"timestamp":102240367225,"id":86,"parentId":48,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":642367,"timestamp":102240358452,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":637083,"timestamp":102240370979,"id":88,"parentId":24,"tags":{},"startTime":1778910212617,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":654186,"timestamp":102240353920,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778910212600,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":641045,"timestamp":102240367231,"id":87,"parentId":49,"tags":{},"startTime":1778910212614,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":649781,"timestamp":102240358525,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":641861,"timestamp":102240367213,"id":85,"parentId":47,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":650733,"timestamp":102240358379,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":643628,"timestamp":102240366753,"id":69,"parentId":30,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":653980,"timestamp":102240356439,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":662453,"timestamp":102240366992,"id":73,"parentId":35,"tags":{},"startTime":1778910212613,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":672501,"timestamp":102240357038,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":662198,"timestamp":102240372179,"id":89,"parentId":31,"tags":{},"startTime":1778910212618,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":677908,"timestamp":102240356528,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778910212603,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":660529,"timestamp":102240378924,"id":95,"parentId":54,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":679970,"timestamp":102240359532,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778910212606,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":669641,"timestamp":102240378953,"id":97,"parentId":57,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":688223,"timestamp":102240360421,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778910212607,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":679248,"timestamp":102240378969,"id":98,"parentId":59,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":697296,"timestamp":102240360979,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778910212607,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":692630,"timestamp":102240378986,"id":99,"parentId":60,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":710517,"timestamp":102240361167,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778910212607,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":692956,"timestamp":102240378891,"id":93,"parentId":52,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":712766,"timestamp":102240359147,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":695986,"timestamp":102240378845,"id":91,"parentId":50,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":716057,"timestamp":102240358845,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":696213,"timestamp":102240378808,"id":90,"parentId":23,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":721354,"timestamp":102240353700,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778910212600,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":700293,"timestamp":102240379026,"id":100,"parentId":61,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":718023,"timestamp":102240361335,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778910212608,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":682090,"timestamp":102240399413,"id":102,"parentId":55,"tags":{},"startTime":1778910212646,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":721804,"timestamp":102240359737,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778910212606,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":707901,"timestamp":102240378908,"id":94,"parentId":53,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":727498,"timestamp":102240359349,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778910212606,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":698940,"timestamp":102240388657,"id":101,"parentId":58,"tags":{},"startTime":1778910212635,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":727047,"timestamp":102240360579,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778910212607,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":714597,"timestamp":102240378937,"id":96,"parentId":56,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":733340,"timestamp":102240360229,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778910212607,"traceId":"61d19d6bfc8851ca"},{"name":"is-page-static","duration":718449,"timestamp":102240378858,"id":92,"parentId":51,"tags":{},"startTime":1778910212625,"traceId":"61d19d6bfc8851ca"},{"name":"check-page","duration":738352,"timestamp":102240358990,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778910212605,"traceId":"61d19d6bfc8851ca"},{"name":"static-check","duration":747711,"timestamp":102240349690,"id":19,"parentId":1,"tags":{},"startTime":1778910212596,"traceId":"61d19d6bfc8851ca"},{"name":"write-routes-manifest","duration":502,"timestamp":102241106293,"id":104,"parentId":1,"tags":{},"startTime":1778910213353,"traceId":"61d19d6bfc8851ca"},{"name":"load-dotenv","duration":64,"timestamp":102241126443,"id":107,"parentId":106,"tags":{},"startTime":1778910213373,"traceId":"61d19d6bfc8851ca"},{"name":"run-export-path-map","duration":715,"timestamp":102241129636,"id":108,"parentId":106,"tags":{},"startTime":1778910213376,"traceId":"61d19d6bfc8851ca"},{"name":"next-export","duration":565652,"timestamp":102241124745,"id":106,"parentId":1,"tags":{},"startTime":1778910213371,"traceId":"61d19d6bfc8851ca"}]
|
|
2
|
-
[{"name":"move-exported-app-not-found-","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":253,"timestamp":103142310524,"id":4,"parentId":1,"tags":{},"startTime":1778911114557,"traceId":"8954e1a57a6b5b6a"},{"name":"load-custom-routes","duration":588,"timestamp":103142310928,"id":5,"parentId":1,"tags":{},"startTime":1778911114557,"traceId":"8954e1a57a6b5b6a"},{"name":"create-dist-dir","duration":723,"timestamp":103142311580,"id":6,"parentId":1,"tags":{},"startTime":1778911114558,"traceId":"8954e1a57a6b5b6a"},{"name":"clean","duration":28847,"timestamp":103142313100,"id":7,"parentId":1,"tags":{},"startTime":1778911114559,"traceId":"8954e1a57a6b5b6a"},{"name":"discover-routes","duration":12419,"timestamp":103142416538,"id":8,"parentId":1,"tags":{},"startTime":1778911114663,"traceId":"8954e1a57a6b5b6a"},{"name":"create-root-mapping","duration":125,"timestamp":103142429031,"id":9,"parentId":1,"tags":{},"startTime":1778911114675,"traceId":"8954e1a57a6b5b6a"},{"name":"generate-route-types","duration":33814,"timestamp":103142431600,"id":10,"parentId":1,"tags":{},"startTime":1778911114678,"traceId":"8954e1a57a6b5b6a"},{"name":"public-dir-conflict-check","duration":103,"timestamp":103142465497,"id":11,"parentId":1,"tags":{},"startTime":1778911114712,"traceId":"8954e1a57a6b5b6a"},{"name":"generate-routes-manifest","duration":5457,"timestamp":103142465708,"id":12,"parentId":1,"tags":{},"startTime":1778911114712,"traceId":"8954e1a57a6b5b6a"},{"name":"run-turbopack","duration":5345540,"timestamp":103142476636,"id":14,"parentId":1,"tags":{},"startTime":1778911114723,"traceId":"8954e1a57a6b5b6a"},{"name":"turbopack-build-events","duration":70,"timestamp":103142751437,"id":15,"parentId":1,"tags":{},"startTime":1778911114998,"traceId":"8954e1a57a6b5b6a"},{"name":"run-typescript","duration":9105486,"timestamp":103147831862,"id":16,"parentId":1,"tags":{},"startTime":1778911120078,"traceId":"8954e1a57a6b5b6a"},{"name":"generate-required-server-files","duration":3135,"timestamp":103156938773,"id":18,"parentId":1,"tags":{},"startTime":1778911129185,"traceId":"8954e1a57a6b5b6a"},{"name":"check-static-error-page","duration":11984,"timestamp":103157141362,"id":20,"parentId":19,"tags":{},"startTime":1778911129388,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":463662,"timestamp":103157157145,"id":63,"parentId":22,"tags":{},"startTime":1778911129403,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":476802,"timestamp":103157144264,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778911129391,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":542004,"timestamp":103157157501,"id":66,"parentId":27,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":552634,"timestamp":103157146987,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778911129393,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":542821,"timestamp":103157157760,"id":67,"parentId":28,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":553533,"timestamp":103157147112,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778911129393,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":547275,"timestamp":103157156805,"id":62,"parentId":21,"tags":{},"startTime":1778911129403,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":561296,"timestamp":103157142841,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778911129389,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":568249,"timestamp":103157158359,"id":71,"parentId":33,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":579013,"timestamp":103157147671,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":587768,"timestamp":103157158289,"id":70,"parentId":32,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":598555,"timestamp":103157147582,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":593345,"timestamp":103157157265,"id":64,"parentId":25,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":603940,"timestamp":103157146749,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778911129393,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":592973,"timestamp":103157157944,"id":68,"parentId":29,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":603760,"timestamp":103157147196,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778911129393,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":596158,"timestamp":103157158564,"id":74,"parentId":36,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":606565,"timestamp":103157148225,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":598285,"timestamp":103157158591,"id":75,"parentId":37,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":608596,"timestamp":103157148353,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":599119,"timestamp":103157158464,"id":73,"parentId":35,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":609782,"timestamp":103157147846,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":600650,"timestamp":103157158108,"id":69,"parentId":30,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":611507,"timestamp":103157147301,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":601617,"timestamp":103157158625,"id":77,"parentId":39,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":611792,"timestamp":103157148505,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":604883,"timestamp":103157157388,"id":65,"parentId":26,"tags":{},"startTime":1778911129404,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":615435,"timestamp":103157146878,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778911129393,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":608591,"timestamp":103157158608,"id":76,"parentId":38,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":618796,"timestamp":103157148443,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":608843,"timestamp":103157158684,"id":82,"parentId":44,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":618753,"timestamp":103157148825,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":609174,"timestamp":103157158662,"id":80,"parentId":42,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":619206,"timestamp":103157148699,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":613088,"timestamp":103157158675,"id":81,"parentId":43,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":623051,"timestamp":103157148763,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":614039,"timestamp":103157158696,"id":83,"parentId":45,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":623874,"timestamp":103157148906,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":616349,"timestamp":103157158719,"id":85,"parentId":47,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":624855,"timestamp":103157150262,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":616623,"timestamp":103157158649,"id":79,"parentId":41,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":626673,"timestamp":103157148632,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":618009,"timestamp":103157158745,"id":87,"parentId":49,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":626341,"timestamp":103157150460,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":619774,"timestamp":103157158732,"id":86,"parentId":48,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":628187,"timestamp":103157150370,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":620976,"timestamp":103157162068,"id":88,"parentId":24,"tags":{},"startTime":1778911129408,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":638308,"timestamp":103157144783,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778911129391,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":620022,"timestamp":103157163196,"id":89,"parentId":31,"tags":{},"startTime":1778911129409,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":635873,"timestamp":103157147381,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":627669,"timestamp":103157158434,"id":72,"parentId":34,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":638398,"timestamp":103157147748,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778911129394,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":631266,"timestamp":103157158710,"id":84,"parentId":46,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":641069,"timestamp":103157148969,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":628271,"timestamp":103157165587,"id":94,"parentId":53,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":642754,"timestamp":103157151159,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":636446,"timestamp":103157158635,"id":78,"parentId":40,"tags":{},"startTime":1778911129405,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":646553,"timestamp":103157148569,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778911129395,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":636804,"timestamp":103157165610,"id":96,"parentId":56,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":650732,"timestamp":103157151865,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778911129398,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":644897,"timestamp":103157165635,"id":98,"parentId":59,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":657851,"timestamp":103157152733,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778911129399,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":663450,"timestamp":103157165651,"id":99,"parentId":60,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":676270,"timestamp":103157152907,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778911129399,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":667491,"timestamp":103157165545,"id":91,"parentId":50,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":682363,"timestamp":103157150757,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":670022,"timestamp":103157165664,"id":100,"parentId":61,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":682659,"timestamp":103157153082,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778911129399,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":663748,"timestamp":103157179436,"id":101,"parentId":58,"tags":{},"startTime":1778911129426,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":690921,"timestamp":103157152312,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778911129399,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":638913,"timestamp":103157204658,"id":102,"parentId":55,"tags":{},"startTime":1778911129451,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":692150,"timestamp":103157151458,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778911129398,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":682643,"timestamp":103157165514,"id":90,"parentId":23,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":703629,"timestamp":103157144570,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778911129391,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":682712,"timestamp":103157165571,"id":93,"parentId":52,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":697319,"timestamp":103157150994,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":684946,"timestamp":103157165561,"id":92,"parentId":51,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":699678,"timestamp":103157150868,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778911129397,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":692761,"timestamp":103157165600,"id":95,"parentId":54,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":707094,"timestamp":103157151298,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778911129398,"traceId":"8954e1a57a6b5b6a"},{"name":"is-page-static","duration":693692,"timestamp":103157165623,"id":97,"parentId":57,"tags":{},"startTime":1778911129412,"traceId":"8954e1a57a6b5b6a"},{"name":"check-page","duration":707239,"timestamp":103157152099,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778911129398,"traceId":"8954e1a57a6b5b6a"},{"name":"static-check","duration":718834,"timestamp":103157140535,"id":19,"parentId":1,"tags":{},"startTime":1778911129387,"traceId":"8954e1a57a6b5b6a"},{"name":"write-routes-manifest","duration":397,"timestamp":103157865509,"id":104,"parentId":1,"tags":{},"startTime":1778911130112,"traceId":"8954e1a57a6b5b6a"},{"name":"load-dotenv","duration":72,"timestamp":103157877523,"id":107,"parentId":106,"tags":{},"startTime":1778911130124,"traceId":"8954e1a57a6b5b6a"},{"name":"run-export-path-map","duration":764,"timestamp":103157882189,"id":108,"parentId":106,"tags":{},"startTime":1778911130128,"traceId":"8954e1a57a6b5b6a"},{"name":"next-export","duration":611048,"timestamp":103157875666,"id":106,"parentId":1,"tags":{},"startTime":1778911130122,"traceId":"8954e1a57a6b5b6a"}]
|
|
2
|
+
[{"name":"move-exported-app-not-found-","duration":2120,"timestamp":103158490473,"id":109,"parentId":105,"tags":{},"startTime":1778911130737,"traceId":"8954e1a57a6b5b6a"},{"name":"move-exported-app-global-error-","duration":542,"timestamp":103158492675,"id":110,"parentId":105,"tags":{},"startTime":1778911130739,"traceId":"8954e1a57a6b5b6a"},{"name":"static-generation","duration":625104,"timestamp":103157869916,"id":105,"parentId":1,"tags":{},"startTime":1778911130116,"traceId":"8954e1a57a6b5b6a"},{"name":"write-routes-manifest","duration":391,"timestamp":103158495176,"id":111,"parentId":1,"tags":{},"startTime":1778911130741,"traceId":"8954e1a57a6b5b6a"},{"name":"print-tree-view","duration":4072,"timestamp":103158513701,"id":112,"parentId":1,"tags":{},"startTime":1778911130760,"traceId":"8954e1a57a6b5b6a"},{"name":"write-route-bundle-stats","duration":13209,"timestamp":103158517813,"id":113,"parentId":1,"tags":{},"startTime":1778911130764,"traceId":"8954e1a57a6b5b6a"},{"name":"telemetry-flush","duration":26583,"timestamp":103158531062,"id":114,"parentId":1,"tags":{},"startTime":1778911130777,"traceId":"8954e1a57a6b5b6a"},{"name":"next-build","duration":16295565,"timestamp":103142262115,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778911114508,"traceId":"8954e1a57a6b5b6a"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":5345540,"timestamp":103142476636,"id":14,"parentId":1,"tags":{},"startTime":1778911114723,"traceId":"8954e1a57a6b5b6a"},{"name":"turbopack-build-events","duration":70,"timestamp":103142751437,"id":15,"parentId":1,"tags":{},"startTime":1778911114998,"traceId":"8954e1a57a6b5b6a"},{"name":"run-typescript","duration":9105486,"timestamp":103147831862,"id":16,"parentId":1,"tags":{},"startTime":1778911120078,"traceId":"8954e1a57a6b5b6a"},{"name":"static-check","duration":718834,"timestamp":103157140535,"id":19,"parentId":1,"tags":{},"startTime":1778911129387,"traceId":"8954e1a57a6b5b6a"},{"name":"static-generation","duration":625104,"timestamp":103157869916,"id":105,"parentId":1,"tags":{},"startTime":1778911130116,"traceId":"8954e1a57a6b5b6a"},{"name":"telemetry-flush","duration":26583,"timestamp":103158531062,"id":114,"parentId":1,"tags":{},"startTime":1778911130777,"traceId":"8954e1a57a6b5b6a"},{"name":"next-build","duration":16295565,"timestamp":103142262115,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778911114508,"traceId":"8954e1a57a6b5b6a"}]
|
|
@@ -131,6 +131,26 @@ function FreshnessChip({ sessions }: { sessions: unknown }) {
|
|
|
131
131
|
const colorClass = stale
|
|
132
132
|
? "bg-amber-500/10 text-amber-300 border-amber-500/20"
|
|
133
133
|
: "bg-gray-500/10 text-gray-400 border-gray-500/20";
|
|
134
|
+
/* Round 275 / Loop: simplification per Vincent 5214/5215-5217 visual
|
|
135
|
+
audit (clutter cleanup for Twitter screenshot). Pre-R275 the chip
|
|
136
|
+
ALWAYS rendered — "live · 5s" gray-on-gray at rest, "lag · 15s"
|
|
137
|
+
amber when stale. The fresh state is an "everything's fine"
|
|
138
|
+
affirmation that's implicit elsewhere on the canvas (counts
|
|
139
|
+
updating, flows animating). Adding a permanent chip to the chip-
|
|
140
|
+
row's right end for that affirmation is added visual chrome
|
|
141
|
+
without proportional info value.
|
|
142
|
+
|
|
143
|
+
R275 converts the chip to a CONDITIONAL warning indicator: render
|
|
144
|
+
only when stale (sec > 10). Fresh state → null (chip absent). The
|
|
145
|
+
amber stale chip still appears as a warning when SWR lags, so
|
|
146
|
+
users see the problem signal; the fresh state implicitly relies
|
|
147
|
+
on other liveness signals (recent-signal panel rows, edge
|
|
148
|
+
animations, count updates).
|
|
149
|
+
|
|
150
|
+
Net effect: chip-row at rest has 1 fewer chip (cleaner Twitter
|
|
151
|
+
screenshot, less right-edge chrome), but signals appear on
|
|
152
|
+
stale-onset to direct attention. */
|
|
153
|
+
if (!stale) return null;
|
|
134
154
|
return (
|
|
135
155
|
<span
|
|
136
156
|
className={`${baseClass} ${colorClass}`}
|
|
@@ -6523,6 +6543,22 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
6523
6543
|
stay at pal.legendText regardless — empty doesn't
|
|
6524
6544
|
get to claim tier identity. 8th surface in the
|
|
6525
6545
|
hover-deepen-own-hue family. */}
|
|
6546
|
+
{/* Round 274 / Loop: legend per-row count picks up
|
|
6547
|
+
tabular-nums (sibling treatment to R225's recent-
|
|
6548
|
+
signal panel header flow-count + R230's group-
|
|
6549
|
+
label pip strip). The text uses fontFamily=
|
|
6550
|
+
'monospace' which is typically tabular by
|
|
6551
|
+
nature, but some monospace implementations have
|
|
6552
|
+
subtle digit-pair width variance (e.g., '0' vs
|
|
6553
|
+
'1' at the visual boundary). Explicit
|
|
6554
|
+
fontVariantNumeric: 'tabular-nums' is belt-and-
|
|
6555
|
+
suspenders: locks digit widths regardless of
|
|
6556
|
+
the rendered monospace font, so the count
|
|
6557
|
+
column stays planted as offline/idle/working
|
|
6558
|
+
counters roll across 9→10 / 99→100 thresholds.
|
|
6559
|
+
Pure CSS-level addition, no layout shift.
|
|
6560
|
+
10th surface in the info-density tabular-nums
|
|
6561
|
+
sweep family. */}
|
|
6526
6562
|
<text
|
|
6527
6563
|
x="215" y={row.y1}
|
|
6528
6564
|
textAnchor="end"
|
|
@@ -6535,7 +6571,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
6535
6571
|
data-legend-count={row.key}
|
|
6536
6572
|
data-legend-count-empty={row.count === 0 ? 'true' : 'false'}
|
|
6537
6573
|
data-legend-count-fill={row.count > 0 && (hoveredStatus === row.key || isPinned) ? 'tier' : 'neutral'}
|
|
6538
|
-
style={{ pointerEvents: 'none', transition: 'opacity 150ms ease-out, fill 150ms ease-out' }}
|
|
6574
|
+
style={{ pointerEvents: 'none', transition: 'opacity 150ms ease-out, fill 150ms ease-out', fontVariantNumeric: 'tabular-nums' }}
|
|
6539
6575
|
>{row.count}</text>
|
|
6540
6576
|
</g>
|
|
6541
6577
|
);
|
package/package.json
CHANGED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* Round 275 verification: FreshnessChip converts from always-render
|
|
2
|
+
* to conditional render (only when stale) — chip-row simplification
|
|
3
|
+
* per Vincent 5214/5215-5217 visual audit ask ("乱" cleanup for
|
|
4
|
+
* Twitter screenshot).
|
|
5
|
+
*
|
|
6
|
+
* Pre-R275 the chip ALWAYS rendered:
|
|
7
|
+
* fresh: gray + "live · {sec}s" (always-present "I'm fine" chip)
|
|
8
|
+
* stale: amber + "lag · {sec}s" (R272 prefix swap)
|
|
9
|
+
*
|
|
10
|
+
* Post-R275:
|
|
11
|
+
* fresh: chip absent (null)
|
|
12
|
+
* stale: amber + "lag · {sec}s" (warning indicator only)
|
|
13
|
+
*
|
|
14
|
+
* Net effect: chip-row at rest has 1 fewer chip — cleaner Twitter
|
|
15
|
+
* screenshot, less right-edge chrome. Stale state still alerts via
|
|
16
|
+
* conditional appearance (amber "lag" warning chip).
|
|
17
|
+
*
|
|
18
|
+
* R272 prefix-swap intent (live↔lag) still in code; only the lag side
|
|
19
|
+
* is rendered now. Fresh state implicitly relies on other liveness
|
|
20
|
+
* signals (recent-signal panel rows, edge animations, count updates).
|
|
21
|
+
*
|
|
22
|
+
* Test scope:
|
|
23
|
+
* 1. At fresh state (default page load, 0s elapsed), chip element
|
|
24
|
+
* is NOT present in DOM. R275 simplification verified.
|
|
25
|
+
* 2. R273 Layout toggle Grid inactive has hover:text-cyan-300
|
|
26
|
+
* (regression).
|
|
27
|
+
* 3. R274 legend per-row count has tabular-nums (regression).
|
|
28
|
+
* 4. Source code regression: FreshnessChip body still contains the
|
|
29
|
+
* "lag" / "live" ternary — verified by reading the bundled JS
|
|
30
|
+
* isn't worth the effort; trust the source diff + this fresh-
|
|
31
|
+
* absence test as proof R275 applied.
|
|
32
|
+
*/
|
|
33
|
+
import { chromium } from 'playwright';
|
|
34
|
+
import { readFileSync } from 'node:fs';
|
|
35
|
+
|
|
36
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
37
|
+
const browser = await chromium.launch({ headless: true });
|
|
38
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
|
|
39
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
40
|
+
await ctx.addInitScript(() => {
|
|
41
|
+
try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
|
|
42
|
+
});
|
|
43
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
44
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
45
|
+
const r = await route.fetch();
|
|
46
|
+
const b = await r.json();
|
|
47
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
48
|
+
const mk = (alias) => ({
|
|
49
|
+
alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
50
|
+
network_id: nid, project_dir: null,
|
|
51
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
52
|
+
});
|
|
53
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
54
|
+
mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
|
|
55
|
+
] } });
|
|
56
|
+
});
|
|
57
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
58
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
59
|
+
|
|
60
|
+
const page = await ctx.newPage();
|
|
61
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
62
|
+
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
|
|
63
|
+
await page.waitForSelector('[data-topo-chrome-layout="grid"]', { timeout: 10000 });
|
|
64
|
+
await page.waitForSelector('[data-legend-count="working"]', { timeout: 10000 });
|
|
65
|
+
// Give the page time to settle so FreshnessChip mount cycle is stable.
|
|
66
|
+
// Note: we are NOT waiting for [data-freshness-chip] — that selector
|
|
67
|
+
// should NOT match in fresh state (chip absent). Use a short fixed
|
|
68
|
+
// wait instead.
|
|
69
|
+
await page.waitForTimeout(500);
|
|
70
|
+
|
|
71
|
+
const probe = await page.evaluate(() => {
|
|
72
|
+
const freshnessChip = document.querySelector('[data-freshness-chip]');
|
|
73
|
+
const grid = document.querySelector('[data-topo-chrome-layout="grid"]');
|
|
74
|
+
const legendCount = document.querySelector('[data-legend-count="working"]');
|
|
75
|
+
return {
|
|
76
|
+
chipPresentAtFresh: freshnessChip !== null,
|
|
77
|
+
gridClasses: grid ? grid.className.toString() : null,
|
|
78
|
+
legendCountFVN: legendCount ? window.getComputedStyle(legendCount).fontVariantNumeric : null,
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
await browser.close();
|
|
82
|
+
|
|
83
|
+
const results = {
|
|
84
|
+
chip_absent_at_fresh: probe.chipPresentAtFresh === false,
|
|
85
|
+
r273_grid_has_cyan_hover_text: (probe.gridClasses || '').includes('hover:text-cyan-300'),
|
|
86
|
+
r274_legend_count_tabular: probe.legendCountFVN != null && probe.legendCountFVN.includes('tabular-nums'),
|
|
87
|
+
};
|
|
88
|
+
const ok = Object.values(results).every(Boolean);
|
|
89
|
+
console.log(`${ok ? '✅' : '❌'} freshness conditional render:`, JSON.stringify(results),
|
|
90
|
+
'\n chip present at fresh:', probe.chipPresentAtFresh, '(expected: false)',
|
|
91
|
+
'\n legend count FVN:', probe.legendCountFVN);
|
|
92
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/* Round 274 verification: legend per-row count text gains tabular-nums.
|
|
2
|
+
*
|
|
3
|
+
* Pre-R274 the legend per-row count at x=215 used fontFamily="monospace"
|
|
4
|
+
* (typically tabular by nature) but NO explicit fontVariantNumeric:
|
|
5
|
+
* 'tabular-nums'. The recent-signal panel header flow-count (R225)
|
|
6
|
+
* AND the group-label pip strip (R230) both explicitly set tabular-
|
|
7
|
+
* nums for digit-width stability across 9→10 / 99→100 thresholds.
|
|
8
|
+
*
|
|
9
|
+
* R274 closes the consistency gap: legend per-row counts now also
|
|
10
|
+
* carry fontVariantNumeric: 'tabular-nums'. Belt-and-suspenders for
|
|
11
|
+
* monospace fonts where some implementations have subtle digit-pair
|
|
12
|
+
* variance.
|
|
13
|
+
*
|
|
14
|
+
* Test scope:
|
|
15
|
+
* 1. Working row count text has computed fontVariantNumeric ===
|
|
16
|
+
* 'tabular-nums'.
|
|
17
|
+
* 2. Idle row count text same.
|
|
18
|
+
* 3. Offline row count text same.
|
|
19
|
+
* 4. R273 Layout toggle Grid inactive has hover:text-cyan-300
|
|
20
|
+
* (regression).
|
|
21
|
+
*/
|
|
22
|
+
import { chromium } from 'playwright';
|
|
23
|
+
import { readFileSync } from 'node:fs';
|
|
24
|
+
|
|
25
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
26
|
+
const browser = await chromium.launch({ headless: true });
|
|
27
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
|
|
28
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
29
|
+
await ctx.addInitScript(() => {
|
|
30
|
+
try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
|
|
31
|
+
});
|
|
32
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
33
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
34
|
+
const r = await route.fetch();
|
|
35
|
+
const b = await r.json();
|
|
36
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
37
|
+
const mk = (alias, status = 'working') => ({
|
|
38
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
39
|
+
network_id: nid, project_dir: null,
|
|
40
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
41
|
+
});
|
|
42
|
+
// Mix of statuses so all 3 legend row counts have non-zero values
|
|
43
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
44
|
+
mk('alpha', 'working'), mk('beta', 'idle'),
|
|
45
|
+
mk('gamma', 'idle'), mk('delta', 'idle'),
|
|
46
|
+
] } });
|
|
47
|
+
});
|
|
48
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
49
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
50
|
+
|
|
51
|
+
const page = await ctx.newPage();
|
|
52
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
53
|
+
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
|
|
54
|
+
await page.waitForSelector('[data-legend-count="working"]', { timeout: 10000 });
|
|
55
|
+
await page.waitForSelector('[data-legend-count="idle"]', { timeout: 10000 });
|
|
56
|
+
await page.waitForSelector('[data-legend-count="offline"]', { timeout: 10000 });
|
|
57
|
+
await page.waitForSelector('[data-topo-chrome-layout="grid"]', { timeout: 10000 });
|
|
58
|
+
await page.waitForTimeout(300);
|
|
59
|
+
|
|
60
|
+
const probe = await page.evaluate(() => {
|
|
61
|
+
const working = document.querySelector('[data-legend-count="working"]');
|
|
62
|
+
const idle = document.querySelector('[data-legend-count="idle"]');
|
|
63
|
+
const offline = document.querySelector('[data-legend-count="offline"]');
|
|
64
|
+
const grid = document.querySelector('[data-topo-chrome-layout="grid"]');
|
|
65
|
+
return {
|
|
66
|
+
workingFVN: working ? window.getComputedStyle(working).fontVariantNumeric : null,
|
|
67
|
+
idleFVN: idle ? window.getComputedStyle(idle).fontVariantNumeric : null,
|
|
68
|
+
offlineFVN: offline ? window.getComputedStyle(offline).fontVariantNumeric : null,
|
|
69
|
+
gridClasses: grid ? grid.className.toString() : null,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
await browser.close();
|
|
73
|
+
|
|
74
|
+
const isTabular = (v) => v != null && v.includes('tabular-nums');
|
|
75
|
+
|
|
76
|
+
const results = {
|
|
77
|
+
working_count_tabular: isTabular(probe.workingFVN),
|
|
78
|
+
idle_count_tabular: isTabular(probe.idleFVN),
|
|
79
|
+
offline_count_tabular: isTabular(probe.offlineFVN),
|
|
80
|
+
r273_grid_has_cyan_hover_text: (probe.gridClasses || '').includes('hover:text-cyan-300'),
|
|
81
|
+
};
|
|
82
|
+
const ok = Object.values(results).every(Boolean);
|
|
83
|
+
console.log(`${ok ? '✅' : '❌'} legend count tabular-nums:`, JSON.stringify(results),
|
|
84
|
+
'\n working FVN:', probe.workingFVN,
|
|
85
|
+
'\n idle FVN: ', probe.idleFVN,
|
|
86
|
+
'\n offline FVN:', probe.offlineFVN);
|
|
87
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/* Round 272 verification: FreshnessChip text prefix matches color
|
|
2
|
-
* state (fresh="live", stale="lag").
|
|
3
|
-
*
|
|
4
|
-
* Pre-R272 the chip read "live · {sec}s" in both states:
|
|
5
|
-
* fresh: gray + "live · 3s" → color says fresh, text says fresh ✓
|
|
6
|
-
* stale: amber + "live · 15s" → color says stale, text says fresh ✗ (contradicts)
|
|
7
|
-
*
|
|
8
|
-
* Post-R272:
|
|
9
|
-
* fresh: gray + "live · 3s" → color and text both say fresh ✓
|
|
10
|
-
* stale: amber + "lag · 15s" → color and text both signal stale ✓
|
|
11
|
-
*
|
|
12
|
-
* The chip's `stale` flag fires when sec > 10. Hard to wait 11s in
|
|
13
|
-
* a test, so we test the fresh-state directly (default render is
|
|
14
|
-
* fresh since useRef captures Date.now() at mount and 0s has
|
|
15
|
-
* elapsed). For stale, we'd need to wait — instead, verify the
|
|
16
|
-
* code path by checking the chip exists with fresh text + correct
|
|
17
|
-
* `data-freshness-chip-stale='false'` attr.
|
|
18
|
-
*
|
|
19
|
-
* Test scope:
|
|
20
|
-
* 1. Chip exists with data-freshness-chip attribute.
|
|
21
|
-
* 2. At fresh state, data-freshness-chip-stale === 'false'.
|
|
22
|
-
* 3. At fresh state, text starts with "live · " (prefix word "live").
|
|
23
|
-
* 4. At fresh state, color is gray (computed color contains 156 or
|
|
24
|
-
* similar Tailwind gray RGB).
|
|
25
|
-
* 5. Source code regression: the new JSX uses {stale ? 'lag' : 'live'}
|
|
26
|
-
* ternary (verified by grep'ing the rendered HTML node structure
|
|
27
|
-
* — the ternary always renders ONE of the two words, so the chip
|
|
28
|
-
* text should contain a single 3-letter prefix word).
|
|
29
|
-
* 6. R271 regression: legend row hitbox y=21 (working row).
|
|
30
|
-
*/
|
|
31
|
-
import { chromium } from 'playwright';
|
|
32
|
-
import { readFileSync } from 'node:fs';
|
|
33
|
-
|
|
34
|
-
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
35
|
-
const browser = await chromium.launch({ headless: true });
|
|
36
|
-
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
|
|
37
|
-
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
38
|
-
await ctx.addInitScript(() => {
|
|
39
|
-
try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
|
|
40
|
-
});
|
|
41
|
-
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
42
|
-
await ctx.route('**/api/hub/status*', async (route) => {
|
|
43
|
-
const r = await route.fetch();
|
|
44
|
-
const b = await r.json();
|
|
45
|
-
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
46
|
-
const mk = (alias) => ({
|
|
47
|
-
alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
48
|
-
network_id: nid, project_dir: null,
|
|
49
|
-
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
50
|
-
});
|
|
51
|
-
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
52
|
-
mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
|
|
53
|
-
] } });
|
|
54
|
-
});
|
|
55
|
-
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
56
|
-
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
57
|
-
|
|
58
|
-
const page = await ctx.newPage();
|
|
59
|
-
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
60
|
-
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
|
|
61
|
-
await page.waitForSelector('[data-freshness-chip]', { timeout: 10000 });
|
|
62
|
-
await page.waitForSelector('[data-legend-status="working"] rect', { timeout: 10000 });
|
|
63
|
-
await page.waitForTimeout(300);
|
|
64
|
-
|
|
65
|
-
const probe = await page.evaluate(() => {
|
|
66
|
-
const chip = document.querySelector('[data-freshness-chip]');
|
|
67
|
-
const legendRect = document.querySelector('[data-legend-status="working"] rect');
|
|
68
|
-
return {
|
|
69
|
-
chipText: chip ? chip.textContent.trim() : null,
|
|
70
|
-
chipStale: chip ? chip.getAttribute('data-freshness-chip-stale') : null,
|
|
71
|
-
chipColor: chip ? window.getComputedStyle(chip).color : null,
|
|
72
|
-
legendRectY: legendRect ? +legendRect.getAttribute('y') : null,
|
|
73
|
-
};
|
|
74
|
-
});
|
|
75
|
-
await browser.close();
|
|
76
|
-
|
|
77
|
-
// Fresh state: text should start with "live · " and stale attr === 'false'.
|
|
78
|
-
// gray chip color: text-gray-400 in cyber theme = rgb(156, 163, 175) or oklab(...) → contains "156" or "rgb".
|
|
79
|
-
const results = {
|
|
80
|
-
chip_present: probe.chipText !== null,
|
|
81
|
-
chip_is_fresh: probe.chipStale === 'false',
|
|
82
|
-
chip_text_starts_with_live: probe.chipText != null && probe.chipText.startsWith('live · '),
|
|
83
|
-
chip_text_no_lag_when_fresh: probe.chipText != null && !probe.chipText.startsWith('lag · '),
|
|
84
|
-
// Fresh color in cyber is text-gray-400. Tailwind v4 renders modern
|
|
85
|
-
// browsers as oklab()/lab()/oklch(). Accept any computed-color
|
|
86
|
-
// function format that indicates a color was actually applied.
|
|
87
|
-
chip_color_set: probe.chipColor != null
|
|
88
|
-
&& /(rgb|oklab|lab|oklch|hsl)/.test(probe.chipColor),
|
|
89
|
-
r271_legend_rect_y_21: probe.legendRectY === 21,
|
|
90
|
-
};
|
|
91
|
-
const ok = Object.values(results).every(Boolean);
|
|
92
|
-
console.log(`${ok ? '✅' : '❌'} freshness text color coherence:`, JSON.stringify(results),
|
|
93
|
-
'\n chip text:', JSON.stringify(probe.chipText),
|
|
94
|
-
'\n chip stale attr:', probe.chipStale,
|
|
95
|
-
'\n chip color:', probe.chipColor,
|
|
96
|
-
'\n legend rect y:', probe.legendRectY);
|
|
97
|
-
process.exit(ok ? 0 : 1);
|
|
File without changes
|
/package/.next/static/{3p-KUaM1iXZ5ooi8BuSwP → jm9NWDYTm3hLXINnznnDk}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|