@sleep2agi/agent-network-dashboard 0.6.3-preview.21 → 0.6.3-preview.23
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 +26 -26
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +3 -3
- package/.next/server/app/admin.segments/_full.segment.rsc +3 -3
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +2 -2
- 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 +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +3 -3
- package/.next/server/app/logs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages/page.js.nft.json +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +3 -3
- package/.next/server/app/messages.segments/_full.segment.rsc +3 -3
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node/page.js.nft.json +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +3 -3
- package/.next/server/app/node.segments/_full.segment.rsc +3 -3
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes/page.js.nft.json +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +3 -3
- package/.next/server/app/nodes.segments/_full.segment.rsc +3 -3
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/providers.html +2 -2
- package/.next/server/app/providers.rsc +2 -2
- package/.next/server/app/providers.segments/_full.segment.rsc +2 -2
- package/.next/server/app/providers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/providers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/providers.segments/providers/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/providers.segments/providers.segment.rsc +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/servers.html +2 -2
- package/.next/server/app/servers.rsc +2 -2
- package/.next/server/app/servers.segments/_full.segment.rsc +2 -2
- package/.next/server/app/servers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/servers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/servers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/servers.segments/servers.segment.rsc +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +3 -3
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +3 -3
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +3 -3
- package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +3 -3
- package/.next/server/app/tasks.segments/_full.segment.rsc +3 -3
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__01ba829._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__01ba829._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__091su60._.js +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__091su60._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0nv_nrz._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nv_nrz._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10ftc2m._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10ftc2m._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-loop-wt_0rh8p9o._.js +3 -3
- package/.next/server/chunks/ssr/dash-loop-wt_0rh8p9o._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0-ky8pi._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0-ky8pi._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0ax3klf._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0ax3klf._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0cxknnm._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0cxknnm._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0pcz05f._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0pcz05f._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0wd4n_v._.js +9 -0
- package/.next/server/chunks/ssr/dash-loop-wt_app_0wd4n_v._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-loop-wt_app_0~.1~ew._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0~.1~ew._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_13k3-ai._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_13k3-ai._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_nodes_page_tsx_0ma3oqt._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_nodes_page_tsx_0ma3oqt._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0.324peadzie3.js +1 -0
- package/.next/static/chunks/03vplr5e8v~uy.js +1 -0
- package/.next/static/chunks/05srmv31apvro.css +1 -0
- package/.next/static/chunks/0cdo0a8-9gjs0.js +1 -0
- package/.next/static/chunks/0da-je9qrw1o6.js +1 -0
- package/.next/static/chunks/{0qjbzxfgcd6_3.js → 0dps36.3y7gza.js} +1 -1
- package/.next/static/chunks/0gb2ors2y4b9y.js +4 -0
- package/.next/static/chunks/0o10t1_.zj7i~.js +2 -0
- package/.next/static/chunks/0q5xir~9v-77t.js +1 -0
- package/.next/static/chunks/0s_xxm.p5vvcc.js +1 -0
- package/.next/static/chunks/0u-jpeh.fk9hi.js +7 -0
- package/.next/static/chunks/13ukzzga18_q8.js +1 -0
- package/.next/static/chunks/{0~kjngaphakh5.js → 16cel_wagxg29.js} +1 -1
- package/.next/static/chunks/17-dam4fv0tzs.js +4 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/AliasAvatar.tsx +31 -0
- package/app/components/NodeSettingsPanel.tsx +52 -0
- package/app/components/TaskChatPanel.tsx +12 -2
- package/app/lib/avatars.ts +79 -0
- package/app/lib/pinyin-match.ts +54 -0
- package/app/messages/page.tsx +10 -5
- package/app/nodes/page.tsx +5 -2
- package/app/page.tsx +8 -2
- package/package.json +3 -2
- package/public/avatars/manifest.json +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04nqr0~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__04nqr0~._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0rcs2vk._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0rcs2vk._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0vc.3k7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0vc.3k7._.js.map +0 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0mxr2l9._.js +0 -9
- package/.next/server/chunks/ssr/dash-loop-wt_app_0mxr2l9._.js.map +0 -1
- package/.next/static/chunks/02-g_rv~6kywl.js +0 -4
- package/.next/static/chunks/02r4vb97r~-7r.js +0 -1
- package/.next/static/chunks/08medgd.1p151.js +0 -2
- package/.next/static/chunks/09-3btfwxmjfe.js +0 -1
- package/.next/static/chunks/09ju~nqgg3wpf.js +0 -4
- package/.next/static/chunks/0_gs9wrgf86-h.js +0 -7
- package/.next/static/chunks/0dq_d9k9asnws.js +0 -1
- package/.next/static/chunks/0usafm~4wag7t.js +0 -1
- package/.next/static/chunks/0wh6q.1qr0dmx.css +0 -1
- package/.next/static/chunks/0z52qau1ofv1z.js +0 -1
- package/.next/static/chunks/12jet.4d8djw0.js +0 -1
- /package/.next/static/{eAg58ZUqc0h75GPUsWy97 → n1mt2Eo3--_wlWCJ1fY86}/_buildManifest.js +0 -0
- /package/.next/static/{eAg58ZUqc0h75GPUsWy97 → n1mt2Eo3--_wlWCJ1fY86}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{eAg58ZUqc0h75GPUsWy97 → n1mt2Eo3--_wlWCJ1fY86}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":339,"timestamp":5789591560443,"id":4,"parentId":1,"tags":{},"startTime":1784597563807,"traceId":"b251c169832d4fa7"},{"name":"load-custom-routes","duration":514,"timestamp":5789591560968,"id":5,"parentId":1,"tags":{},"startTime":1784597563807,"traceId":"b251c169832d4fa7"},{"name":"create-dist-dir","duration":959,"timestamp":5789591561549,"id":6,"parentId":1,"tags":{},"startTime":1784597563808,"traceId":"b251c169832d4fa7"},{"name":"clean","duration":43243,"timestamp":5789591563399,"id":7,"parentId":1,"tags":{},"startTime":1784597563810,"traceId":"b251c169832d4fa7"},{"name":"discover-routes","duration":11754,"timestamp":5789591710717,"id":8,"parentId":1,"tags":{},"startTime":1784597563957,"traceId":"b251c169832d4fa7"},{"name":"create-root-mapping","duration":119,"timestamp":5789591722536,"id":9,"parentId":1,"tags":{},"startTime":1784597563969,"traceId":"b251c169832d4fa7"},{"name":"generate-route-types","duration":35327,"timestamp":5789591725568,"id":10,"parentId":1,"tags":{},"startTime":1784597563972,"traceId":"b251c169832d4fa7"},{"name":"public-dir-conflict-check","duration":113,"timestamp":5789591761123,"id":11,"parentId":1,"tags":{},"startTime":1784597564007,"traceId":"b251c169832d4fa7"},{"name":"generate-routes-manifest","duration":5489,"timestamp":5789591761359,"id":12,"parentId":1,"tags":{},"startTime":1784597564008,"traceId":"b251c169832d4fa7"},{"name":"run-turbopack","duration":9852710,"timestamp":5789591773712,"id":14,"parentId":1,"tags":{},"startTime":1784597564020,"traceId":"b251c169832d4fa7"},{"name":"turbopack-build-events","duration":154,"timestamp":5789592137972,"id":15,"parentId":1,"tags":{},"startTime":1784597564384,"traceId":"b251c169832d4fa7"},{"name":"run-typescript","duration":14127474,"timestamp":5789601649359,"id":16,"parentId":1,"tags":{},"startTime":1784597573896,"traceId":"b251c169832d4fa7"},{"name":"generate-required-server-files","duration":3286,"timestamp":5789615778257,"id":18,"parentId":1,"tags":{},"startTime":1784597588025,"traceId":"b251c169832d4fa7"},{"name":"check-static-error-page","duration":19779,"timestamp":5789616025423,"id":20,"parentId":19,"tags":{},"startTime":1784597588272,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":561053,"timestamp":5789616048479,"id":75,"parentId":22,"tags":{},"startTime":1784597588295,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":581263,"timestamp":5789616028465,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1784597588275,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":671847,"timestamp":5789616048627,"id":76,"parentId":29,"tags":{},"startTime":1784597588295,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":686691,"timestamp":5789616033900,"id":29,"parentId":19,"tags":{"page":"/api/anet/providers/probe-results"},"startTime":1784597588280,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":694428,"timestamp":5789616049991,"id":82,"parentId":36,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":708959,"timestamp":5789616035551,"id":36,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1784597588282,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":739990,"timestamp":5789616050101,"id":83,"parentId":37,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":754498,"timestamp":5789616035687,"id":37,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1784597588282,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":770493,"timestamp":5789616050179,"id":84,"parentId":39,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":783226,"timestamp":5789616037541,"id":39,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":776738,"timestamp":5789616050215,"id":85,"parentId":40,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":789653,"timestamp":5789616037635,"id":40,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":783970,"timestamp":5789616050330,"id":86,"parentId":41,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":796691,"timestamp":5789616037695,"id":41,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":792376,"timestamp":5789616050362,"id":87,"parentId":42,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":805073,"timestamp":5789616037750,"id":42,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":802766,"timestamp":5789616050381,"id":88,"parentId":43,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":815445,"timestamp":5789616037801,"id":43,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":804852,"timestamp":5789616050395,"id":89,"parentId":44,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":817451,"timestamp":5789616037861,"id":44,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":810881,"timestamp":5789616050404,"id":90,"parentId":45,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":823438,"timestamp":5789616037912,"id":45,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":816292,"timestamp":5789616050416,"id":91,"parentId":46,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":828800,"timestamp":5789616037977,"id":46,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":820638,"timestamp":5789616049770,"id":81,"parentId":35,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":835287,"timestamp":5789616035184,"id":35,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1784597588281,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":828376,"timestamp":5789616050429,"id":92,"parentId":48,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":840564,"timestamp":5789616038327,"id":48,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":830139,"timestamp":5789616049425,"id":79,"parentId":33,"tags":{},"startTime":1784597588296,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":844646,"timestamp":5789616034972,"id":33,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1784597588281,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":830722,"timestamp":5789616050441,"id":93,"parentId":50,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":842396,"timestamp":5789616038829,"id":50,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":834284,"timestamp":5789616050450,"id":94,"parentId":51,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":845858,"timestamp":5789616038936,"id":51,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":844339,"timestamp":5789616050482,"id":97,"parentId":54,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":855772,"timestamp":5789616039161,"id":54,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":844729,"timestamp":5789616050462,"id":95,"parentId":52,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":856211,"timestamp":5789616039019,"id":52,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":844890,"timestamp":5789616050474,"id":96,"parentId":53,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":856286,"timestamp":5789616039105,"id":53,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":846993,"timestamp":5789616050494,"id":98,"parentId":55,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":858311,"timestamp":5789616039240,"id":55,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":851358,"timestamp":5789616050529,"id":101,"parentId":58,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":862541,"timestamp":5789616039401,"id":58,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":857453,"timestamp":5789616050542,"id":102,"parentId":61,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":868212,"timestamp":5789616039875,"id":61,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":851195,"timestamp":5789616063603,"id":103,"parentId":24,"tags":{},"startTime":1784597588310,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":885785,"timestamp":5789616029086,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1784597588275,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":853264,"timestamp":5789616067144,"id":104,"parentId":25,"tags":{},"startTime":1784597588313,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":888763,"timestamp":5789616031716,"id":25,"parentId":19,"tags":{"page":"/api/anet/host-supervisors"},"startTime":1784597588278,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":878453,"timestamp":5789616048852,"id":78,"parentId":32,"tags":{},"startTime":1784597588295,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":892522,"timestamp":5789616034848,"id":32,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1784597588281,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":895135,"timestamp":5789616050520,"id":100,"parentId":57,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":906685,"timestamp":5789616039346,"id":57,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":876485,"timestamp":5789616069776,"id":105,"parentId":26,"tags":{},"startTime":1784597588316,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":914233,"timestamp":5789616032123,"id":26,"parentId":19,"tags":{"page":"/api/anet/node-config"},"startTime":1784597588278,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":895995,"timestamp":5789616050507,"id":99,"parentId":56,"tags":{},"startTime":1784597588297,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":907242,"timestamp":5789616039297,"id":56,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":856624,"timestamp":5789616103240,"id":108,"parentId":31,"tags":{},"startTime":1784597588350,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":925512,"timestamp":5789616034439,"id":31,"parentId":19,"tags":{"page":"/api/anet/providers"},"startTime":1784597588281,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":881046,"timestamp":5789616079156,"id":107,"parentId":28,"tags":{},"startTime":1784597588325,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":926850,"timestamp":5789616033394,"id":28,"parentId":19,"tags":{"page":"/api/anet/node-lifecycle"},"startTime":1784597588280,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":864617,"timestamp":5789616105524,"id":110,"parentId":47,"tags":{},"startTime":1784597588352,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":932160,"timestamp":5789616038081,"id":47,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":870685,"timestamp":5789616104605,"id":109,"parentId":38,"tags":{},"startTime":1784597588351,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":938137,"timestamp":5789616037245,"id":38,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1784597588284,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":840918,"timestamp":5789616135530,"id":111,"parentId":49,"tags":{},"startTime":1784597588382,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":938054,"timestamp":5789616038454,"id":49,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1784597588285,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":911199,"timestamp":5789616072433,"id":106,"parentId":27,"tags":{},"startTime":1784597588319,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":951165,"timestamp":5789616032557,"id":27,"parentId":19,"tags":{"page":"/api/anet/node-create"},"startTime":1784597588279,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":943962,"timestamp":5789616047998,"id":74,"parentId":21,"tags":{},"startTime":1784597588294,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":965047,"timestamp":5789616026990,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1784597588273,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":843108,"timestamp":5789616170248,"id":116,"parentId":63,"tags":{},"startTime":1784597588417,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":973250,"timestamp":5789616040179,"id":63,"parentId":19,"tags":{"page":"/node"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":865273,"timestamp":5789616170160,"id":112,"parentId":23,"tags":{},"startTime":1784597588416,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1006738,"timestamp":5789616028782,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1784597588275,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":873390,"timestamp":5789616170211,"id":113,"parentId":59,"tags":{},"startTime":1784597588416,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1004006,"timestamp":5789616039672,"id":59,"parentId":19,"tags":{"page":"/login"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":873667,"timestamp":5789616170225,"id":114,"parentId":60,"tags":{},"startTime":1784597588416,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1004171,"timestamp":5789616039769,"id":60,"parentId":19,"tags":{"page":"/logs"},"startTime":1784597588286,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":875623,"timestamp":5789616170258,"id":117,"parentId":64,"tags":{},"startTime":1784597588417,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1005564,"timestamp":5789616040368,"id":64,"parentId":19,"tags":{"page":"/nodes"},"startTime":1784597588287,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":876364,"timestamp":5789616170268,"id":118,"parentId":66,"tags":{},"startTime":1784597588417,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1004402,"timestamp":5789616042282,"id":66,"parentId":19,"tags":{"page":"/providers"},"startTime":1784597588289,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":881499,"timestamp":5789616170280,"id":119,"parentId":67,"tags":{},"startTime":1784597588417,"traceId":"b251c169832d4fa7"},{"name":"check-page","duration":1009296,"timestamp":5789616042531,"id":67,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1784597588289,"traceId":"b251c169832d4fa7"},{"name":"is-page-static","duration":882007,"timestamp":5789616170290,"id":120,"parentId":68,"tags":{},"startTime":1784597588417,"traceId":"b251c169832d4fa7"}]
|
|
2
|
-
[{"name":"check-page","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":369,"timestamp":5793107307162,"id":4,"parentId":1,"tags":{},"startTime":1784601079553,"traceId":"466ecd0140fea933"},{"name":"load-custom-routes","duration":549,"timestamp":5793107307730,"id":5,"parentId":1,"tags":{},"startTime":1784601079554,"traceId":"466ecd0140fea933"},{"name":"create-dist-dir","duration":916,"timestamp":5793107308330,"id":6,"parentId":1,"tags":{},"startTime":1784601079555,"traceId":"466ecd0140fea933"},{"name":"clean","duration":52752,"timestamp":5793107310565,"id":7,"parentId":1,"tags":{},"startTime":1784601079557,"traceId":"466ecd0140fea933"},{"name":"discover-routes","duration":31650,"timestamp":5793107476906,"id":8,"parentId":1,"tags":{},"startTime":1784601079723,"traceId":"466ecd0140fea933"},{"name":"create-root-mapping","duration":167,"timestamp":5793107508645,"id":9,"parentId":1,"tags":{},"startTime":1784601079755,"traceId":"466ecd0140fea933"},{"name":"generate-route-types","duration":24964,"timestamp":5793107512330,"id":10,"parentId":1,"tags":{},"startTime":1784601079759,"traceId":"466ecd0140fea933"},{"name":"public-dir-conflict-check","duration":139,"timestamp":5793107537518,"id":11,"parentId":1,"tags":{},"startTime":1784601079784,"traceId":"466ecd0140fea933"},{"name":"generate-routes-manifest","duration":5701,"timestamp":5793107537823,"id":12,"parentId":1,"tags":{},"startTime":1784601079784,"traceId":"466ecd0140fea933"},{"name":"run-turbopack","duration":10583953,"timestamp":5793107552440,"id":14,"parentId":1,"tags":{},"startTime":1784601079799,"traceId":"466ecd0140fea933"},{"name":"turbopack-build-events","duration":134,"timestamp":5793107938804,"id":15,"parentId":1,"tags":{},"startTime":1784601080185,"traceId":"466ecd0140fea933"},{"name":"run-typescript","duration":14329668,"timestamp":5793118149779,"id":16,"parentId":1,"tags":{},"startTime":1784601090396,"traceId":"466ecd0140fea933"},{"name":"generate-required-server-files","duration":3260,"timestamp":5793132483608,"id":18,"parentId":1,"tags":{},"startTime":1784601104730,"traceId":"466ecd0140fea933"},{"name":"check-static-error-page","duration":21593,"timestamp":5793132762606,"id":20,"parentId":19,"tags":{},"startTime":1784601105009,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":713089,"timestamp":5793132788862,"id":74,"parentId":21,"tags":{},"startTime":1784601105035,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":737880,"timestamp":5793132764280,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1784601105011,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":801097,"timestamp":5793132790513,"id":81,"parentId":35,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":818054,"timestamp":5793132773639,"id":35,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1784601105020,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":821550,"timestamp":5793132790713,"id":82,"parentId":36,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":838170,"timestamp":5793132774169,"id":36,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1784601105020,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":828338,"timestamp":5793132789865,"id":78,"parentId":32,"tags":{},"startTime":1784601105036,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":845051,"timestamp":5793132773229,"id":32,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1784601105020,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":827691,"timestamp":5793132790783,"id":83,"parentId":37,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":844149,"timestamp":5793132774372,"id":37,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1784601105021,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":833256,"timestamp":5793132789484,"id":75,"parentId":22,"tags":{},"startTime":1784601105036,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":856858,"timestamp":5793132765979,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1784601105012,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":833358,"timestamp":5793132790910,"id":85,"parentId":40,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":847454,"timestamp":5793132776869,"id":40,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":839099,"timestamp":5793132791087,"id":87,"parentId":42,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":853158,"timestamp":5793132777082,"id":42,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":844380,"timestamp":5793132790179,"id":79,"parentId":33,"tags":{},"startTime":1784601105036,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":861225,"timestamp":5793132773396,"id":33,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1784601105020,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":844391,"timestamp":5793132791124,"id":88,"parentId":43,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":858375,"timestamp":5793132777182,"id":43,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":874782,"timestamp":5793132791152,"id":90,"parentId":45,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":888665,"timestamp":5793132777364,"id":45,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":882780,"timestamp":5793132791167,"id":91,"parentId":46,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":896562,"timestamp":5793132777480,"id":46,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":891365,"timestamp":5793132791141,"id":89,"parentId":44,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":905299,"timestamp":5793132777280,"id":44,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":895758,"timestamp":5793132791183,"id":92,"parentId":48,"tags":{},"startTime":1784601105047,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":909033,"timestamp":5793132778020,"id":48,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":901576,"timestamp":5793132790873,"id":84,"parentId":39,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":915783,"timestamp":5793132776742,"id":39,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":892039,"timestamp":5793132801223,"id":94,"parentId":51,"tags":{},"startTime":1784601105047,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":914637,"timestamp":5793132778687,"id":51,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":897845,"timestamp":5793132801259,"id":96,"parentId":53,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":920285,"timestamp":5793132778906,"id":53,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":902347,"timestamp":5793132801276,"id":97,"parentId":54,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":924717,"timestamp":5793132778968,"id":54,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":914998,"timestamp":5793132801291,"id":98,"parentId":55,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":937247,"timestamp":5793132779106,"id":55,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":921816,"timestamp":5793132801303,"id":99,"parentId":56,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":944017,"timestamp":5793132779174,"id":56,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":922181,"timestamp":5793132801208,"id":93,"parentId":50,"tags":{},"startTime":1784601105047,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":944879,"timestamp":5793132778553,"id":50,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":952514,"timestamp":5793132789750,"id":77,"parentId":30,"tags":{},"startTime":1784601105036,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":971021,"timestamp":5793132771330,"id":30,"parentId":19,"tags":{"page":"/api/anet/providers/probe"},"startTime":1784601105018,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":954334,"timestamp":5793132801246,"id":95,"parentId":52,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":976856,"timestamp":5793132778801,"id":52,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1784601105025,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":962130,"timestamp":5793132801323,"id":101,"parentId":58,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":984227,"timestamp":5793132779301,"id":58,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":962372,"timestamp":5793132801315,"id":100,"parentId":57,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":984480,"timestamp":5793132779240,"id":57,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":962508,"timestamp":5793132801335,"id":102,"parentId":61,"tags":{},"startTime":1784601105048,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":984095,"timestamp":5793132779776,"id":61,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":954170,"timestamp":5793132819588,"id":104,"parentId":25,"tags":{},"startTime":1784601105066,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1004379,"timestamp":5793132769443,"id":25,"parentId":19,"tags":{"page":"/api/anet/host-supervisors"},"startTime":1784601105016,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":955012,"timestamp":5793132822172,"id":105,"parentId":27,"tags":{},"startTime":1784601105068,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1006924,"timestamp":5793132770328,"id":27,"parentId":19,"tags":{"page":"/api/anet/node-create"},"startTime":1784601105017,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":948469,"timestamp":5793132831130,"id":107,"parentId":28,"tags":{},"startTime":1784601105077,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1009029,"timestamp":5793132770710,"id":28,"parentId":19,"tags":{"page":"/api/anet/node-lifecycle"},"startTime":1784601105017,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":965225,"timestamp":5793132814701,"id":103,"parentId":24,"tags":{},"startTime":1784601105061,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1013358,"timestamp":5793132766606,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1784601105013,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":942249,"timestamp":5793132853523,"id":109,"parentId":38,"tags":{},"startTime":1784601105100,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1019539,"timestamp":5793132776309,"id":38,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":955781,"timestamp":5793132840266,"id":108,"parentId":31,"tags":{},"startTime":1784601105087,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1024569,"timestamp":5793132771518,"id":31,"parentId":19,"tags":{"page":"/api/anet/providers"},"startTime":1784601105018,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":941581,"timestamp":5793132854647,"id":110,"parentId":47,"tags":{},"startTime":1784601105101,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1018590,"timestamp":5793132777697,"id":47,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":945111,"timestamp":5793132857577,"id":111,"parentId":49,"tags":{},"startTime":1784601105104,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1024591,"timestamp":5793132778163,"id":49,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1784601105024,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":898170,"timestamp":5793132918956,"id":112,"parentId":23,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1050896,"timestamp":5793132766328,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1784601105013,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":998437,"timestamp":5793132825693,"id":106,"parentId":26,"tags":{},"startTime":1784601105072,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1054334,"timestamp":5793132769866,"id":26,"parentId":19,"tags":{"page":"/api/anet/node-config"},"startTime":1784601105016,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":910388,"timestamp":5793132919065,"id":115,"parentId":62,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1049679,"timestamp":5793132779837,"id":62,"parentId":19,"tags":{"page":"/messages"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":925264,"timestamp":5793132919098,"id":117,"parentId":64,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1064234,"timestamp":5793132780202,"id":64,"parentId":19,"tags":{"page":"/nodes"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":935781,"timestamp":5793132919112,"id":118,"parentId":66,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1073245,"timestamp":5793132781718,"id":66,"parentId":19,"tags":{"page":"/providers"},"startTime":1784601105028,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1076640,"timestamp":5793132789627,"id":76,"parentId":29,"tags":{},"startTime":1784601105036,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1095220,"timestamp":5793132771119,"id":29,"parentId":19,"tags":{"page":"/api/anet/providers/probe-results"},"startTime":1784601105017,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":959230,"timestamp":5793132919124,"id":119,"parentId":67,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1096447,"timestamp":5793132781984,"id":67,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1784601105028,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":959552,"timestamp":5793132919035,"id":113,"parentId":59,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1099041,"timestamp":5793132779574,"id":59,"parentId":19,"tags":{"page":"/login"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":970635,"timestamp":5793132919153,"id":121,"parentId":69,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1107426,"timestamp":5793132782434,"id":69,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1784601105029,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":975593,"timestamp":5793132919164,"id":122,"parentId":71,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"}]
|
|
2
|
+
[{"name":"check-page","duration":1113817,"timestamp":5793132783224,"id":71,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1784601105029,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":997917,"timestamp":5793132919190,"id":124,"parentId":73,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1133427,"timestamp":5793132783767,"id":73,"parentId":19,"tags":{"page":"/tasks"},"startTime":1784601105030,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":998248,"timestamp":5793132919177,"id":123,"parentId":72,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1134055,"timestamp":5793132783416,"id":72,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1784601105030,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1006384,"timestamp":5793132919202,"id":125,"parentId":65,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1145276,"timestamp":5793132780376,"id":65,"parentId":19,"tags":{"page":"/"},"startTime":1784601105027,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1011491,"timestamp":5793132919214,"id":126,"parentId":70,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1148122,"timestamp":5793132782652,"id":70,"parentId":19,"tags":{"page":"/settings"},"startTime":1784601105029,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1016448,"timestamp":5793132919078,"id":116,"parentId":63,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1155582,"timestamp":5793132780025,"id":63,"parentId":19,"tags":{"page":"/node"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1173008,"timestamp":5793132791051,"id":86,"parentId":41,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1187224,"timestamp":5793132776963,"id":41,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1784601105023,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1051057,"timestamp":5793132919052,"id":114,"parentId":60,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1190515,"timestamp":5793132779671,"id":60,"parentId":19,"tags":{"page":"/logs"},"startTime":1784601105026,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1062834,"timestamp":5793132919137,"id":120,"parentId":68,"tags":{},"startTime":1784601105165,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1199791,"timestamp":5793132782286,"id":68,"parentId":19,"tags":{"page":"/servers"},"startTime":1784601105029,"traceId":"466ecd0140fea933"},{"name":"is-page-static","duration":1227931,"timestamp":5793132790367,"id":80,"parentId":34,"tags":{},"startTime":1784601105037,"traceId":"466ecd0140fea933"},{"name":"check-page","duration":1244860,"timestamp":5793132773517,"id":34,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1784601105020,"traceId":"466ecd0140fea933"},{"name":"static-check","duration":1257035,"timestamp":5793132761395,"id":19,"parentId":1,"tags":{},"startTime":1784601105008,"traceId":"466ecd0140fea933"},{"name":"write-routes-manifest","duration":608,"timestamp":5793134030297,"id":128,"parentId":1,"tags":{},"startTime":1784601106277,"traceId":"466ecd0140fea933"},{"name":"load-dotenv","duration":54,"timestamp":5793134043604,"id":131,"parentId":130,"tags":{},"startTime":1784601106290,"traceId":"466ecd0140fea933"},{"name":"run-export-path-map","duration":686,"timestamp":5793134047946,"id":132,"parentId":130,"tags":{},"startTime":1784601106294,"traceId":"466ecd0140fea933"},{"name":"next-export","duration":953419,"timestamp":5793134042367,"id":130,"parentId":1,"tags":{},"startTime":1784601106289,"traceId":"466ecd0140fea933"},{"name":"move-exported-app-not-found-","duration":1060,"timestamp":5793135001925,"id":133,"parentId":129,"tags":{},"startTime":1784601107248,"traceId":"466ecd0140fea933"},{"name":"move-exported-app-global-error-","duration":538,"timestamp":5793135003175,"id":134,"parentId":129,"tags":{},"startTime":1784601107249,"traceId":"466ecd0140fea933"},{"name":"static-generation","duration":970766,"timestamp":5793134035673,"id":129,"parentId":1,"tags":{},"startTime":1784601106282,"traceId":"466ecd0140fea933"},{"name":"write-routes-manifest","duration":568,"timestamp":5793135006687,"id":135,"parentId":1,"tags":{},"startTime":1784601107253,"traceId":"466ecd0140fea933"},{"name":"print-tree-view","duration":8301,"timestamp":5793135028972,"id":136,"parentId":1,"tags":{},"startTime":1784601107275,"traceId":"466ecd0140fea933"},{"name":"write-route-bundle-stats","duration":19035,"timestamp":5793135037334,"id":137,"parentId":1,"tags":{},"startTime":1784601107284,"traceId":"466ecd0140fea933"},{"name":"telemetry-flush","duration":8279,"timestamp":5793135056417,"id":138,"parentId":1,"tags":{},"startTime":1784601107303,"traceId":"466ecd0140fea933"},{"name":"next-build","duration":27817843,"timestamp":5793107246897,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1784601079493,"traceId":"466ecd0140fea933"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":10583953,"timestamp":5793107552440,"id":14,"parentId":1,"tags":{},"startTime":1784601079799,"traceId":"466ecd0140fea933"},{"name":"turbopack-build-events","duration":134,"timestamp":5793107938804,"id":15,"parentId":1,"tags":{},"startTime":1784601080185,"traceId":"466ecd0140fea933"},{"name":"run-typescript","duration":14329668,"timestamp":5793118149779,"id":16,"parentId":1,"tags":{},"startTime":1784601090396,"traceId":"466ecd0140fea933"},{"name":"static-check","duration":1257035,"timestamp":5793132761395,"id":19,"parentId":1,"tags":{},"startTime":1784601105008,"traceId":"466ecd0140fea933"},{"name":"static-generation","duration":970766,"timestamp":5793134035673,"id":129,"parentId":1,"tags":{},"startTime":1784601106282,"traceId":"466ecd0140fea933"},{"name":"telemetry-flush","duration":8279,"timestamp":5793135056417,"id":138,"parentId":1,"tags":{},"startTime":1784601107303,"traceId":"466ecd0140fea933"},{"name":"next-build","duration":27817843,"timestamp":5793107246897,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1784601079493,"traceId":"466ecd0140fea933"}]
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { useAvatarUrl } from '../lib/avatars';
|
|
5
|
+
|
|
1
6
|
/** Hue-hashed avatar pill for agent aliases. Same alias → same color across
|
|
2
7
|
* every page (Messages, Nodes, TopoGraph). Use the `size` prop for inline
|
|
3
8
|
* pills (16/20) vs card headers (28). Round 21 introduced the palette;
|
|
@@ -33,6 +38,32 @@ interface AliasAvatarProps {
|
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
export function AliasAvatar({ alias, size = 28, className = '' }: AliasAvatarProps) {
|
|
41
|
+
// R24 (Vincent: 头像换血): a custom image (user-set or designed default)
|
|
42
|
+
// wins over every generated style — ONE seam, all 13 avatar surfaces.
|
|
43
|
+
// Shimmer while loading, silent fallback to the pill on error.
|
|
44
|
+
const url = useAvatarUrl(alias);
|
|
45
|
+
const [imgState, setImgState] = useState<'loading' | 'ready' | 'error'>('loading');
|
|
46
|
+
useEffect(() => { setImgState('loading'); }, [url]);
|
|
47
|
+
if (url && imgState !== 'error') {
|
|
48
|
+
return (
|
|
49
|
+
<span
|
|
50
|
+
className={`anet-alias-avatar relative inline-flex shrink-0 overflow-hidden rounded-full border border-[var(--border)] ${imgState === 'loading' ? 'animate-pulse bg-[var(--bg-elevated)]' : ''} ${className}`}
|
|
51
|
+
style={{ width: size, height: size }}
|
|
52
|
+
title={alias}
|
|
53
|
+
aria-hidden
|
|
54
|
+
>
|
|
55
|
+
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
56
|
+
<img
|
|
57
|
+
src={url}
|
|
58
|
+
alt=""
|
|
59
|
+
loading="lazy"
|
|
60
|
+
onLoad={() => setImgState('ready')}
|
|
61
|
+
onError={() => setImgState('error')}
|
|
62
|
+
className={`h-full w-full rounded-full object-cover transition-opacity duration-150 ${imgState === 'ready' ? 'opacity-100' : 'opacity-0'}`}
|
|
63
|
+
/>
|
|
64
|
+
</span>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
36
67
|
if (isGrokAlias(alias)) {
|
|
37
68
|
return (
|
|
38
69
|
<span
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { Session } from './types';
|
|
5
5
|
import { AliasAvatar } from './AliasAvatar';
|
|
6
|
+
import { setAvatarUrl, useAvatarUrl } from '../lib/avatars';
|
|
6
7
|
import { useLifecycleCaps } from './NodeLifecycleMenu';
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -147,6 +148,55 @@ function SectionTitle({ children }: { children: React.ReactNode }) {
|
|
|
147
148
|
return <h3 className="text-[11px] font-medium uppercase tracking-wide text-gray-500 mb-2">{children}</h3>;
|
|
148
149
|
}
|
|
149
150
|
|
|
151
|
+
/* R24 (Vincent 亲点: 头像换血) — per-node custom avatar. Stored browser-side
|
|
152
|
+
(localStorage via app/lib/avatars) until the hub grows an RFC-024
|
|
153
|
+
whitelist entry for avatar_url; the designed default set rides
|
|
154
|
+
/avatars/manifest.json. Live preview through the SAME AliasAvatar every
|
|
155
|
+
surface renders. */
|
|
156
|
+
function AvatarSection({ alias }: { alias: string }) {
|
|
157
|
+
const current = useAvatarUrl(alias);
|
|
158
|
+
const [draft, setDraft] = useState(current);
|
|
159
|
+
useEffect(() => { setDraft(current); }, [current]);
|
|
160
|
+
const dirty = draft.trim() !== current;
|
|
161
|
+
return (
|
|
162
|
+
<section>
|
|
163
|
+
<SectionTitle>头像</SectionTitle>
|
|
164
|
+
<div className="flex items-start gap-3">
|
|
165
|
+
<AliasAvatar alias={alias} size={44} />
|
|
166
|
+
<div className="flex-1 space-y-1.5">
|
|
167
|
+
<input
|
|
168
|
+
type="url"
|
|
169
|
+
value={draft}
|
|
170
|
+
onChange={(e) => setDraft(e.target.value)}
|
|
171
|
+
placeholder="图片 URL(留空恢复默认)"
|
|
172
|
+
className="w-full rounded-md border border-[#26262b] bg-[#0e0e10] px-2.5 py-1.5 text-[12px] text-gray-200 focus:border-cyan-600 focus:outline-none"
|
|
173
|
+
/>
|
|
174
|
+
<div className="flex items-center gap-2">
|
|
175
|
+
<button
|
|
176
|
+
type="button"
|
|
177
|
+
disabled={!dirty}
|
|
178
|
+
onClick={() => setAvatarUrl(alias, draft)}
|
|
179
|
+
className="rounded-md border border-cyan-600/40 bg-cyan-600/15 px-2.5 py-1 text-[11px] text-cyan-300 hover:bg-cyan-600/25 disabled:opacity-40"
|
|
180
|
+
>
|
|
181
|
+
保存
|
|
182
|
+
</button>
|
|
183
|
+
{current && (
|
|
184
|
+
<button
|
|
185
|
+
type="button"
|
|
186
|
+
onClick={() => { setAvatarUrl(alias, ''); setDraft(''); }}
|
|
187
|
+
className="rounded-md border border-[#26262b] px-2.5 py-1 text-[11px] text-gray-400 hover:text-gray-200"
|
|
188
|
+
>
|
|
189
|
+
恢复默认
|
|
190
|
+
</button>
|
|
191
|
+
)}
|
|
192
|
+
<span className="text-[10px] text-gray-600">存本浏览器;跨设备同步待 hub 支持</span>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</section>
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
150
200
|
/** Read-only label/value row. */
|
|
151
201
|
function InfoRow({ label, value }: { label: string; value: string }) {
|
|
152
202
|
return (
|
|
@@ -587,6 +637,8 @@ export function NodeSettingsPanel({ session: s, onClose }: { session: Session; o
|
|
|
587
637
|
</div>
|
|
588
638
|
</section>
|
|
589
639
|
|
|
640
|
+
<AvatarSection alias={s.alias} />
|
|
641
|
+
|
|
590
642
|
{/* B. Runtime + 模型 (model editable) */}
|
|
591
643
|
<section>
|
|
592
644
|
<SectionTitle>Runtime · 模型</SectionTitle>
|
|
@@ -288,6 +288,7 @@ import { useSSE } from '../lib/useSSE';
|
|
|
288
288
|
import { useNetworkId } from '../lib/network-context';
|
|
289
289
|
import { markChatRead } from '../lib/chat-unread';
|
|
290
290
|
import { readDraft, writeDraft } from '../lib/chat-drafts';
|
|
291
|
+
import { pinyinMatch, usePinyinReady } from '../lib/pinyin-match';
|
|
291
292
|
import { formatWeChatTime } from '../lib/time';
|
|
292
293
|
import { t } from '../lib/ui-lang';
|
|
293
294
|
|
|
@@ -435,6 +436,10 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes, active }
|
|
|
435
436
|
const [targetAlias, setTargetAlias] = useState(alias);
|
|
436
437
|
const [showMentions, setShowMentions] = useState(false);
|
|
437
438
|
const [mentionIndex, setMentionIndex] = useState(0);
|
|
439
|
+
// R23→R25: pinyin matching moved to the shared lib (also powers /nodes
|
|
440
|
+
// and /messages search). Lazy chunk semantics unchanged.
|
|
441
|
+
const pinyinReady = usePinyinReady();
|
|
442
|
+
void pinyinReady; // render trigger when the lazy dict lands mid-typing
|
|
438
443
|
const [attachLimitHit, setAttachLimitHit] = useState(false);
|
|
439
444
|
const [mentionFilter, setMentionFilter] = useState('');
|
|
440
445
|
const [mentionNodes, setMentionNodes] = useState<string[]>([]);
|
|
@@ -757,7 +762,12 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes, active }
|
|
|
757
762
|
wasActiveRef.current = isActive;
|
|
758
763
|
return;
|
|
759
764
|
}
|
|
760
|
-
if (!wasActiveRef.current)
|
|
765
|
+
if (!wasActiveRef.current) {
|
|
766
|
+
runFetch(histLimitRef.current, 12_000);
|
|
767
|
+
// R27 (微信手感): switching back to a tab refocuses the composer —
|
|
768
|
+
// desktop only (focusing on touch pops the soft keyboard uninvited).
|
|
769
|
+
if (!coarsePointerRef.current) textareaRef.current?.focus();
|
|
770
|
+
}
|
|
761
771
|
wasActiveRef.current = true;
|
|
762
772
|
const id = setInterval(() => {
|
|
763
773
|
if (document.visibilityState === 'hidden') return;
|
|
@@ -1000,7 +1010,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes, active }
|
|
|
1000
1010
|
};
|
|
1001
1011
|
|
|
1002
1012
|
const filteredMentions = mentionNodes.filter(n =>
|
|
1003
|
-
n !== alias && n
|
|
1013
|
+
n !== alias && pinyinMatch(n, mentionFilter)
|
|
1004
1014
|
).slice(0, 8);
|
|
1005
1015
|
|
|
1006
1016
|
const autoResize = (el: HTMLTextAreaElement) => {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useSyncExternalStore } from 'react';
|
|
4
|
+
|
|
5
|
+
/* Loop R24 (Vincent 亲点: 头像换血) — custom avatar infrastructure.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order, per alias:
|
|
8
|
+
* 1. user override — localStorage map, settable in the node settings UI
|
|
9
|
+
* 2. designed default — /avatars/manifest.json (static, alias → image URL);
|
|
10
|
+
* the design-side illustration set lands there later with ZERO code
|
|
11
|
+
* change (drop files under public/avatars/ + list them in the manifest)
|
|
12
|
+
* 3. '' → caller falls back to the hue-hashed initial pill
|
|
13
|
+
*
|
|
14
|
+
* Hub-side persistence (cross-device) needs an RFC-024 whitelist extension
|
|
15
|
+
* (`avatar_url` is not an editable flag today — update would return
|
|
16
|
+
* invalid_patch); when the hub grows it, hydrate the store from the hub here
|
|
17
|
+
* without touching any consumer.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const STORE_KEY = 'anet_avatars_v1';
|
|
21
|
+
const AVATAR_EVENT = 'anet-avatars-updated';
|
|
22
|
+
|
|
23
|
+
let manifest: Record<string, string> | null = null;
|
|
24
|
+
let manifestRequested = false;
|
|
25
|
+
|
|
26
|
+
function fetchManifestOnce() {
|
|
27
|
+
if (manifestRequested || typeof window === 'undefined') return;
|
|
28
|
+
manifestRequested = true;
|
|
29
|
+
fetch('/avatars/manifest.json', { cache: 'no-cache' })
|
|
30
|
+
.then((r) => (r.ok ? r.json() : null))
|
|
31
|
+
.then((j) => {
|
|
32
|
+
if (j && typeof j === 'object') {
|
|
33
|
+
manifest = j as Record<string, string>;
|
|
34
|
+
window.dispatchEvent(new Event(AVATAR_EVENT));
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
.catch(() => {});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function readMap(): Record<string, string> {
|
|
41
|
+
if (typeof window === 'undefined') return {};
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(window.localStorage.getItem(STORE_KEY) || '{}');
|
|
44
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
45
|
+
} catch {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function getAvatarUrl(alias?: string | null): string {
|
|
51
|
+
if (!alias) return '';
|
|
52
|
+
return readMap()[alias] || manifest?.[alias] || '';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Empty/whitespace url removes the override (falls back to manifest/pill). */
|
|
56
|
+
export function setAvatarUrl(alias: string, url: string) {
|
|
57
|
+
if (typeof window === 'undefined' || !alias) return;
|
|
58
|
+
try {
|
|
59
|
+
const m = readMap();
|
|
60
|
+
if (url.trim()) m[alias] = url.trim();
|
|
61
|
+
else delete m[alias];
|
|
62
|
+
window.localStorage.setItem(STORE_KEY, JSON.stringify(m));
|
|
63
|
+
window.dispatchEvent(new Event(AVATAR_EVENT));
|
|
64
|
+
} catch {}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function subscribe(callback: () => void) {
|
|
68
|
+
fetchManifestOnce();
|
|
69
|
+
window.addEventListener(AVATAR_EVENT, callback);
|
|
70
|
+
window.addEventListener('storage', callback);
|
|
71
|
+
return () => {
|
|
72
|
+
window.removeEventListener(AVATAR_EVENT, callback);
|
|
73
|
+
window.removeEventListener('storage', callback);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function useAvatarUrl(alias?: string | null): string {
|
|
78
|
+
return useSyncExternalStore(subscribe, () => getAvatarUrl(alias), () => '');
|
|
79
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
|
|
5
|
+
/* Loop R25: one pinyin matcher for every search surface (chat @-mentions,
|
|
6
|
+
* /nodes, /messages). pinyin-pro stays a LAZY chunk — the dict loads on the
|
|
7
|
+
* first non-empty filter, never on page load. Matching = substring OR full
|
|
8
|
+
* pinyin OR initials, cached per string. Callers pair pinyinMatch() with
|
|
9
|
+
* usePinyinReady() so results upgrade in place once the dict arrives. */
|
|
10
|
+
|
|
11
|
+
type PinyinFn = (text: string) => [string, string];
|
|
12
|
+
|
|
13
|
+
let py: PinyinFn | null = null;
|
|
14
|
+
let loadStarted = false;
|
|
15
|
+
const listeners = new Set<() => void>();
|
|
16
|
+
const cache = new Map<string, [string, string]>();
|
|
17
|
+
|
|
18
|
+
function ensureLoaded() {
|
|
19
|
+
if (py || loadStarted || typeof window === 'undefined') return;
|
|
20
|
+
loadStarted = true;
|
|
21
|
+
import('pinyin-pro')
|
|
22
|
+
.then((m) => {
|
|
23
|
+
py = (text: string) => [
|
|
24
|
+
m.pinyin(text, { toneType: 'none', type: 'array' }).join('').toLowerCase(),
|
|
25
|
+
m.pinyin(text, { pattern: 'first', toneType: 'none', type: 'array' }).join('').toLowerCase(),
|
|
26
|
+
];
|
|
27
|
+
listeners.forEach((l) => l());
|
|
28
|
+
})
|
|
29
|
+
.catch(() => { loadStarted = false; });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function pinyinMatch(text: string, filter: string): boolean {
|
|
33
|
+
const f = filter.trim().toLowerCase();
|
|
34
|
+
if (!f) return true;
|
|
35
|
+
if (text.toLowerCase().includes(f)) return true;
|
|
36
|
+
ensureLoaded();
|
|
37
|
+
if (!py) return false;
|
|
38
|
+
let entry = cache.get(text);
|
|
39
|
+
if (!entry) { entry = py(text); cache.set(text, entry); }
|
|
40
|
+
return entry[0].includes(f) || entry[1].includes(f);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** True once the pinyin dict is loaded — subscribe so the component
|
|
44
|
+
* re-filters when lazy loading completes mid-typing. */
|
|
45
|
+
export function usePinyinReady(): boolean {
|
|
46
|
+
const [ready, setReady] = useState(() => Boolean(py));
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (py) { setReady(true); return; }
|
|
49
|
+
const l = () => setReady(true);
|
|
50
|
+
listeners.add(l);
|
|
51
|
+
return () => void listeners.delete(l);
|
|
52
|
+
}, []);
|
|
53
|
+
return ready;
|
|
54
|
+
}
|
package/app/messages/page.tsx
CHANGED
|
@@ -7,6 +7,8 @@ import { formatWeChatTime } from '../lib/time';
|
|
|
7
7
|
import { EmptyState } from '../components/EmptyState';
|
|
8
8
|
import { AliasAvatar } from '../components/AliasAvatar';
|
|
9
9
|
import { useCollapsibleSearch } from '../components/CollapsibleSearch';
|
|
10
|
+
import { pinyinMatch, usePinyinReady } from '../lib/pinyin-match';
|
|
11
|
+
import { t } from '../lib/ui-lang';
|
|
10
12
|
|
|
11
13
|
interface MessageItem {
|
|
12
14
|
id: string;
|
|
@@ -68,6 +70,7 @@ export default function MessagesPage() {
|
|
|
68
70
|
const loadingOlder = isLoading && messages.length > 0;
|
|
69
71
|
const [filterType, setFilterType] = useState('');
|
|
70
72
|
const [search, setSearch] = useState('');
|
|
73
|
+
const pinyinReady = usePinyinReady();
|
|
71
74
|
const [debug, setDebug] = useState(false);
|
|
72
75
|
const [viewMode, setViewMode] = useState<'timeline' | 'grouped'>('timeline');
|
|
73
76
|
// M5: the timeline runs oldest→newest top-to-bottom, so land the first
|
|
@@ -85,7 +88,7 @@ export default function MessagesPage() {
|
|
|
85
88
|
const searchCtl = useCollapsibleSearch({
|
|
86
89
|
value: search,
|
|
87
90
|
onChange: setSearch,
|
|
88
|
-
placeholder: 'Search from/to/content or
|
|
91
|
+
placeholder: t('搜 别名(支持拼音)/内容,或 from:别名…', 'Search from/to (pinyin ok)/content, or from:alias…'),
|
|
89
92
|
label: 'Search messages',
|
|
90
93
|
enabled: messages.length > 0,
|
|
91
94
|
});
|
|
@@ -107,17 +110,19 @@ export default function MessagesPage() {
|
|
|
107
110
|
.filter((m: MessageItem) => {
|
|
108
111
|
if (filterType && m.type !== filterType) return false;
|
|
109
112
|
if (fromFilter) {
|
|
110
|
-
return (m.from_alias || ''
|
|
113
|
+
return pinyinMatch(m.from_alias || '', fromFilter);
|
|
111
114
|
}
|
|
112
115
|
if (query) {
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
// R25: aliases match by pinyin too; content stays substring-only
|
|
117
|
+
// (pinyin over long message bodies is cost without benefit).
|
|
118
|
+
return pinyinMatch(m.from_alias || '', query)
|
|
119
|
+
|| pinyinMatch(m.to_alias || '', query)
|
|
115
120
|
|| (m.content || '').toLowerCase().includes(query);
|
|
116
121
|
}
|
|
117
122
|
return true;
|
|
118
123
|
})
|
|
119
124
|
.sort((a: MessageItem, b: MessageItem) => normalizeDate(a.created_at) - normalizeDate(b.created_at));
|
|
120
|
-
}, [filterType, messages, search]);
|
|
125
|
+
}, [filterType, messages, search, pinyinReady]);
|
|
121
126
|
|
|
122
127
|
// Group messages by conversation pair
|
|
123
128
|
const conversations = useMemo(() => {
|
package/app/nodes/page.tsx
CHANGED
|
@@ -10,6 +10,7 @@ import { NodeLifecycleMenu } from '../components/NodeLifecycleMenu';
|
|
|
10
10
|
import { EmptyState, NodesEmptyState } from '../components/EmptyState';
|
|
11
11
|
import { AliasAvatar } from '../components/AliasAvatar';
|
|
12
12
|
import { useHasDraft } from '../lib/chat-drafts';
|
|
13
|
+
import { pinyinMatch, usePinyinReady } from '../lib/pinyin-match';
|
|
13
14
|
import { useCollapsibleSearch } from '../components/CollapsibleSearch';
|
|
14
15
|
import type { Session } from '../components/types';
|
|
15
16
|
import { SESSION_STATUS_CHIP_CLASS as STATUS_COLORS } from '../lib/status';
|
|
@@ -54,6 +55,8 @@ export default function NodesPage() {
|
|
|
54
55
|
(s.network_id ? sseMap[`${s.network_id}:${s.alias}`] : undefined) ?? sseMap[s.alias];
|
|
55
56
|
const [filterStatus, setFilterStatus] = useState('');
|
|
56
57
|
const [search, setSearch] = useState('');
|
|
58
|
+
const pinyinReady = usePinyinReady();
|
|
59
|
+
void pinyinReady; // R25: re-filter once the lazy pinyin dict lands
|
|
57
60
|
const [viewMode, setViewMode] = useState<ViewMode>('list');
|
|
58
61
|
const [chatAlias, setChatAlias] = useState<string | null>(null);
|
|
59
62
|
const [showCreate, setShowCreate] = useState(false);
|
|
@@ -64,7 +67,7 @@ export default function NodesPage() {
|
|
|
64
67
|
const searchCtl = useCollapsibleSearch({
|
|
65
68
|
value: search,
|
|
66
69
|
onChange: setSearch,
|
|
67
|
-
placeholder: 'Search nodes…',
|
|
70
|
+
placeholder: t('搜索节点(支持拼音/首字母)…', 'Search nodes (pinyin ok)…'),
|
|
68
71
|
label: 'Search nodes',
|
|
69
72
|
enabled: sessions.length > 0,
|
|
70
73
|
});
|
|
@@ -77,7 +80,7 @@ export default function NodesPage() {
|
|
|
77
80
|
if (filterStatus && filterStatus !== s.status) return false;
|
|
78
81
|
return true;
|
|
79
82
|
})
|
|
80
|
-
.filter(s => !search || s.alias
|
|
83
|
+
.filter(s => !search || pinyinMatch(s.alias, search) || pinyinMatch(s.agent || '', search))
|
|
81
84
|
.sort((a, b) => (b.online ? 1 : 0) - (a.online ? 1 : 0) || (b.status === 'working' ? 1 : 0) - (a.status === 'working' ? 1 : 0));
|
|
82
85
|
|
|
83
86
|
const onlineCount = sessions.filter(s => sseFor(s)).length;
|
package/app/page.tsx
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { useState, memo } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { StatsBar } from './components/StatsBar';
|
|
6
6
|
import { TopoGraph } from './components/TopoGraph';
|
|
7
|
+
// Loop R23: opening a chat tab (openTab state) re-rendered the whole
|
|
8
|
+
// Overview including the 15k-line TopoGraph SVG — measured ~300ms of the
|
|
9
|
+
// 1.0s panel-open TTI. Its three props are identity-stable between data
|
|
10
|
+
// changes (SWR structural sharing / health object / rare rename state),
|
|
11
|
+
// so a memo wrapper skips the redraw entirely on unrelated state churn.
|
|
12
|
+
const MemoTopoGraph = memo(TopoGraph);
|
|
7
13
|
import { AgentCard } from './components/AgentCard';
|
|
8
14
|
import { LoadingSkeleton } from './components/LoadingSkeleton';
|
|
9
15
|
import { NodesEmptyState as EmptyState } from './components/EmptyState';
|
|
@@ -174,7 +180,7 @@ export default function Dashboard() {
|
|
|
174
180
|
// the viewport) while letting the page below stay reachable
|
|
175
181
|
// with a single ordinary scroll past the cap.
|
|
176
182
|
<div className="lg:max-h-none lg:overflow-visible max-h-[70vh] overflow-y-auto rounded-xl border border-transparent lg:border-0">
|
|
177
|
-
<
|
|
183
|
+
<MemoTopoGraph sessions={sessions} sseSessions={sseSessions} renameSignal={renameSignal} />
|
|
178
184
|
</div>
|
|
179
185
|
)}
|
|
180
186
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sleep2agi/agent-network-dashboard",
|
|
3
|
-
"version": "0.6.3-preview.
|
|
3
|
+
"version": "0.6.3-preview.23",
|
|
4
4
|
"description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
|
|
5
5
|
"main": "apps/desktop/electron/main.cjs",
|
|
6
6
|
"scripts": {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@capacitor/core": "^7.4.4",
|
|
40
40
|
"next": "16.2.3",
|
|
41
|
+
"pinyin-pro": "^3.28.1",
|
|
41
42
|
"react": "19.2.4",
|
|
42
43
|
"react-dom": "19.2.4",
|
|
43
44
|
"react-markdown": "^10.1.0",
|
|
@@ -53,9 +54,9 @@
|
|
|
53
54
|
"@types/node": "^20",
|
|
54
55
|
"@types/react": "^19",
|
|
55
56
|
"@types/react-dom": "^19",
|
|
56
|
-
"eslint": "^9",
|
|
57
57
|
"electron": "^39.2.6",
|
|
58
58
|
"electron-builder": "^26.0.12",
|
|
59
|
+
"eslint": "^9",
|
|
59
60
|
"eslint-config-next": "16.2.3",
|
|
60
61
|
"tailwindcss": "^4",
|
|
61
62
|
"typescript": "^5"
|