@sleep2agi/agent-network-dashboard 0.4.6-preview.0 → 0.4.6-preview.10
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/chunks/{node_modules_13sb.px._.js → 00jm_02mlcew._.js} +167 -167
- package/.next/build/chunks/00jm_02mlcew._.js.map +47 -0
- package/.next/build/chunks/{[root-of-the-server]__0ubbtyl._.js → [root-of-the-server]__0tgc-8p._.js} +3 -3
- package/.next/build/chunks/{[root-of-the-server]__0d-m0h0._.js → [root-of-the-server]__13z64y.._.js} +7 -7
- package/.next/build/chunks/{[root-of-the-server]__0d-m0h0._.js.map → [root-of-the-server]__13z64y.._.js.map} +2 -2
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0r4x5ys._.js +13 -0
- package/.next/build/chunks/[turbopack]_runtime.js +1 -1
- package/.next/build/postcss.js +4 -4
- package/.next/build-manifest.json +8 -8
- package/.next/diagnostics/route-bundle-stats.json +143 -143
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +4 -4
- package/.next/required-server-files.json +4 -4
- package/.next/server/app/_global-error/page/build-manifest.json +5 -5
- package/.next/server/app/_global-error/page.js +9 -9
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/.next/server/app/_not-found/page/next-font-manifest.json +1 -1
- package/.next/server/app/_not-found/page.js +12 -12
- package/.next/server/app/_not-found/page.js.nft.json +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 +12 -12
- package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +7 -7
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page/build-manifest.json +5 -5
- package/.next/server/app/admin/page/next-font-manifest.json +1 -1
- package/.next/server/app/admin/page.js +13 -13
- package/.next/server/app/admin/page.js.nft.json +1 -1
- 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 +14 -14
- package/.next/server/app/admin.segments/_full.segment.rsc +14 -14
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +7 -7
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
- package/.next/server/app/api/anet/config/route.js +6 -6
- package/.next/server/app/api/anet/config/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route.js +7 -7
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route.js +7 -7
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/v3/route.js +7 -7
- package/.next/server/app/api/auth/v3/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/audit-log/route.js +6 -6
- package/.next/server/app/api/hub/audit-log/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/auth/route.js +7 -7
- package/.next/server/app/api/hub/auth/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/broadcast/route.js +6 -6
- package/.next/server/app/api/hub/broadcast/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/events/route.js +6 -6
- package/.next/server/app/api/hub/events/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/health/route.js +6 -6
- package/.next/server/app/api/hub/health/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/inbox/route.js +6 -6
- package/.next/server/app/api/hub/inbox/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/license/route.js +6 -6
- package/.next/server/app/api/hub/license/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/messages/route.js +6 -6
- package/.next/server/app/api/hub/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/networks/route.js +6 -6
- package/.next/server/app/api/hub/networks/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/nodes/route.js +6 -6
- package/.next/server/app/api/hub/nodes/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/register/route.js +6 -6
- package/.next/server/app/api/hub/register/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/send/route.js +6 -6
- package/.next/server/app/api/hub/send/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/server-logs/route.js +6 -6
- package/.next/server/app/api/hub/server-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/session/route.js +6 -6
- package/.next/server/app/api/hub/session/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/stats/route.js +6 -6
- package/.next/server/app/api/hub/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/status/route.js +6 -6
- package/.next/server/app/api/hub/status/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/task-events/route.js +6 -6
- package/.next/server/app/api/hub/task-events/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tasks/route.js +6 -6
- package/.next/server/app/api/hub/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tmux/route.js +6 -6
- package/.next/server/app/api/hub/tmux/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tokens/route.js +6 -6
- package/.next/server/app/api/hub/tokens/route.js.nft.json +1 -1
- package/.next/server/app/favicon.ico/route.js +6 -6
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +14 -14
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +7 -7
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page/build-manifest.json +5 -5
- package/.next/server/app/login/page/next-font-manifest.json +1 -1
- package/.next/server/app/login/page.js +13 -13
- package/.next/server/app/login/page.js.nft.json +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 +14 -14
- package/.next/server/app/login.segments/_full.segment.rsc +14 -14
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +7 -7
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/login.segments/login.segment.rsc +3 -3
- package/.next/server/app/logs/page/build-manifest.json +5 -5
- package/.next/server/app/logs/page/next-font-manifest.json +1 -1
- package/.next/server/app/logs/page.js +13 -13
- package/.next/server/app/logs/page.js.nft.json +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 +14 -14
- package/.next/server/app/logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
- package/.next/server/app/messages/page/build-manifest.json +5 -5
- package/.next/server/app/messages/page/next-font-manifest.json +1 -1
- package/.next/server/app/messages/page.js +13 -13
- 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 +14 -14
- package/.next/server/app/messages.segments/_full.segment.rsc +14 -14
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +7 -7
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
- package/.next/server/app/node/page/build-manifest.json +5 -5
- package/.next/server/app/node/page/next-font-manifest.json +1 -1
- package/.next/server/app/node/page.js +13 -13
- 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 +14 -14
- package/.next/server/app/node.segments/_full.segment.rsc +14 -14
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +7 -7
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/node.segments/node.segment.rsc +3 -3
- package/.next/server/app/nodes/page/build-manifest.json +5 -5
- package/.next/server/app/nodes/page/next-font-manifest.json +1 -1
- package/.next/server/app/nodes/page.js +13 -13
- 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 +14 -14
- package/.next/server/app/nodes.segments/_full.segment.rsc +14 -14
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +7 -7
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
- package/.next/server/app/page/build-manifest.json +5 -5
- package/.next/server/app/page/next-font-manifest.json +1 -1
- package/.next/server/app/page.js +13 -13
- 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/server-logs/page/build-manifest.json +5 -5
- package/.next/server/app/server-logs/page/next-font-manifest.json +1 -1
- package/.next/server/app/server-logs/page.js +13 -13
- package/.next/server/app/server-logs/page.js.nft.json +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 +14 -14
- package/.next/server/app/server-logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
- package/.next/server/app/settings/networks/page/build-manifest.json +5 -5
- package/.next/server/app/settings/networks/page/next-font-manifest.json +1 -1
- package/.next/server/app/settings/networks/page.js +13 -13
- package/.next/server/app/settings/networks/page.js.nft.json +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 +14 -14
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings/page/build-manifest.json +5 -5
- package/.next/server/app/settings/page/next-font-manifest.json +1 -1
- package/.next/server/app/settings/page.js +13 -13
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page/build-manifest.json +5 -5
- package/.next/server/app/settings/tokens/page/next-font-manifest.json +1 -1
- package/.next/server/app/settings/tokens/page.js +13 -13
- package/.next/server/app/settings/tokens/page.js.nft.json +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 +14 -14
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +14 -14
- package/.next/server/app/settings.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/tasks/[id]/page/build-manifest.json +5 -5
- package/.next/server/app/tasks/[id]/page/next-font-manifest.json +1 -1
- package/.next/server/app/tasks/[id]/page.js +13 -13
- package/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page/build-manifest.json +5 -5
- package/.next/server/app/tasks/page/next-font-manifest.json +1 -1
- package/.next/server/app/tasks/page.js +13 -13
- package/.next/server/app/tasks/page.js.nft.json +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 +14 -14
- package/.next/server/app/tasks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
- package/.next/server/chunks/00jm_next_04f3gac._.js +10 -0
- package/.next/server/chunks/00jm_next_04f3gac._.js.map +1 -0
- package/.next/server/chunks/00jm_next_dist_esm_build_templates_app-route_02f430o.js +3 -0
- package/.next/server/chunks/00jm_next_dist_esm_build_templates_app-route_02f430o.js.map +1 -0
- package/.next/server/chunks/0ci9_nt-network-dashboard__next-internal_server_app_api_auth_v3_route_actions_0f5nbzr.js +3 -0
- package/.next/server/chunks/0ci9_nt-network-dashboard__next-internal_server_app_favicon_ico_route_actions_0t0eu9r.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_anet_config_route_actions_0a~v55_.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_auth_login_route_actions_0xnxfs4.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_auth_logout_route_actions_0p8p0rn.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_audit-log_route_actions_06uquwi.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_auth_route_actions_0f_y1ey.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_broadcast_route_actions_0ao3j43.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_events_route_actions_0_5ndld.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_health_route_actions_0mpzl74.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_inbox_route_actions_0stoyto.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_messages_route_actions_059rw1o.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_networks_route_actions_03sehpn.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_nodes_route_actions_11fbp28.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_register_route_actions_0l.d7~n.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_send_route_actions_0.p82vy.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_server-logs_route_actions_05~c5lb.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_session_route_actions_0b9ef2i.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_stats_route_actions_03u65u0.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_status_route_actions_0_71ear.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_task-events_route_actions_07md_ee.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_tasks_route_actions_0er3uvk.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_tmux_route_actions_0o_1-8u.js +3 -0
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_tokens_route_actions_09doluz.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-2le8-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-2le8-._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0-g~15e._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-g~15e._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__00194.t._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__03ueci3._.js.map → [root-of-the-server]__00194.t._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__02p2n3n._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02p2n3n._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__02y-i-p._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__02y-i-p._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__043tnx2._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0o4qfn9._.js.map → [root-of-the-server]__043tnx2._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__04z62zk._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04z62zk._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__06p6kkp._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__06p6kkp._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__07ztet2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07ztet2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__08uyvdq._.js +20 -0
- package/.next/server/chunks/[root-of-the-server]__08uyvdq._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0b7v51y._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0b7v51y._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0e3ucl1._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0rg9ifx._.js.map → [root-of-the-server]__0e3ucl1._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0e6yail._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0e6yail._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0gx2_6a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gx2_6a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0hcnyp.._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0o29v8c._.js.map → [root-of-the-server]__0hcnyp.._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hg3_8r._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0hg3_8r._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0mxw4vb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0mxw4vb._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0mzopco._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0mzopco._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0o45a4q._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0p6tutt._.js.map → [root-of-the-server]__0o45a4q._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0q-teo6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0q-teo6._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0qcxxzf._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0qcxxzf._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0xtp-et._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0xtp-et._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__10pvabe._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10pvabe._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__10t11zq._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10t11zq._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__12r~omy._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__12r~omy._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1389~cs._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1389~cs._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__13n8t..._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__13n8t..._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +1 -1
- package/.next/server/chunks/ssr/{node_modules_0r_.s40._.js → 00jm_03rn9vn._.js} +2 -2
- package/.next/server/chunks/ssr/00jm_03rn9vn._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_09w7yel._.js → 00jm_059ns68._.js} +3 -3
- package/.next/server/chunks/ssr/00jm_059ns68._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_09ae-q0._.js +3 -0
- package/.next/server/chunks/ssr/00jm_09ae-q0._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_0j7__z.._.js +3 -0
- package/.next/server/chunks/ssr/00jm_0j7__z.._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_01-0urn._.js +6 -0
- package/.next/server/chunks/ssr/00jm_next_01-0urn._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_05rlh5d._.js +6 -0
- package/.next/server/chunks/ssr/00jm_next_dist_05rlh5d._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_0gkudcq._.js +3 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_0gkudcq._.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_forbidden_0ecus3e.js +3 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_forbidden_0ecus3e.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_global-error_07n8pg2.js +3 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_global-error_07n8pg2.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_unauthorized_0r0uq4j.js +3 -0
- package/.next/server/chunks/ssr/00jm_next_dist_client_components_builtin_unauthorized_0r0uq4j.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_002l7yi.js → 00jm_next_dist_esm_build_templates_app-page_0..ddwm.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0..ddwm.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0qm1-a1.js → 00jm_next_dist_esm_build_templates_app-page_02bxi6j.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_02bxi6j.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_02suzhc.js → 00jm_next_dist_esm_build_templates_app-page_05oassd.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_05oassd.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0dm~kj8.js → 00jm_next_dist_esm_build_templates_app-page_05vxtby.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_05vxtby.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0uccf9z.js → 00jm_next_dist_esm_build_templates_app-page_05~eml4.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_05~eml4.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0l-fh0i.js → 00jm_next_dist_esm_build_templates_app-page_0_-g_q2.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0_-g_q2.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0uv6jyc.js → 00jm_next_dist_esm_build_templates_app-page_0_ec0xu.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0_ec0xu.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0czb6wz.js +4 -0
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0czb6wz.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_13s07li.js → 00jm_next_dist_esm_build_templates_app-page_0e-cn.p.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0e-cn.p.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0o9vt1n.js → 00jm_next_dist_esm_build_templates_app-page_0k8_sr8.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0k8_sr8.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0nsg22r.js → 00jm_next_dist_esm_build_templates_app-page_0lt_3bw.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0lt_3bw.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0d2yq5t.js → 00jm_next_dist_esm_build_templates_app-page_0uyh3yt.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0uyh3yt.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0foejvu.js → 00jm_next_dist_esm_build_templates_app-page_0v-a2ps.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_0v-a2ps.js.map +1 -0
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_12.4r9~.js +4 -0
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_12.4r9~.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_07uu-xq.js → 00jm_next_dist_esm_build_templates_app-page_13mqkay.js} +3 -3
- package/.next/server/chunks/ssr/00jm_next_dist_esm_build_templates_app-page_13mqkay.js.map +1 -0
- package/.next/server/chunks/ssr/0dwh_ent-network-dashboard__next-internal_server_app_server-logs_page_actions_0hkk815.js +3 -0
- package/.next/server/chunks/ssr/0yas_gent-network-dashboard__next-internal_server_app__not-found_page_actions_0u.f-rz.js +3 -0
- package/.next/server/chunks/ssr/0yas_gent-network-dashboard__next-internal_server_app_tasks_[id]_page_actions_0r3~lho.js +3 -0
- package/.next/server/chunks/ssr/0ykm__next-internal_server_app__global-error_page_actions_100fxls.js +3 -0
- package/.next/server/chunks/ssr/0ykm__next-internal_server_app_settings_networks_page_actions_0jgy57m.js +3 -0
- package/.next/server/chunks/ssr/0ykm__next-internal_server_app_settings_tokens_page_actions_0l5h.k~.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__03b.f76._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__03b.f76._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__063~dul._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__063~dul._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07io.d8._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07io.d8._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__08d6lp4._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__08d6lp4._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09f1wn6._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09f1wn6._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c4xtkg._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c4xtkg._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0erfzjn._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0erfzjn._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ezjwje._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ezjwje._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__08qr2ji._.js → [root-of-the-server]__0gc.4uk._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0gc.4uk._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0h_p~-4._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0h_p~-4._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jdr1e5._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jdr1e5._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0lw16mu._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0lw16mu._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0mjly~-._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0mjly~-._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p-95r_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p-95r_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0u5aqkk._.js +8 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0u5aqkk._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ue5.fy._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ue5.fy._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0uggxvx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0uggxvx._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zjk5ro._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zjk5ro._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zz3v7a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zz3v7a._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y12ef._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y12ef._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__129sc_9._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__129sc_9._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_admin_page_actions_0i~.x~j.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_login_page_actions_0frwl15.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_logs_page_actions_0xa2ox_.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_messages_page_actions_10j3tg4.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_node_page_actions_0sl4ntd.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_nodes_page_actions_0cpgkfs.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_page_actions_08nuo36.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_settings_page_actions_0iv.lmk.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard__next-internal_server_app_tasks_page_actions_08c7qlx.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_0izi28j._.js → agent-network-dashboard_app_0xgney8._.js} +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_0_agk0r._.js → agent-network-dashboard_app_10hjgv4._.js} +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_0.zbtn5._.js → agent-network-dashboard_app_1153xeb._.js} +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_04n78pr._.js → agent-network-dashboard_app_12l4oto._.js} +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_components_08ys5y3._.js → agent-network-dashboard_app_components_0mvyi-4._.js} +3 -3
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0mvyi-4._.js.map +1 -0
- package/.next/server/chunks/ssr/{app_server-logs_page_tsx_0_kpp1p._.js → agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js} +2 -2
- package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +8 -8
- package/.next/server/middleware.js +3 -3
- package/.next/server/middleware.js.nft.json +1 -1
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +14 -14
- 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-7iowzu4.798.js +1 -0
- package/.next/static/chunks/{0gtbwcilfu6b7.js → 0.66f3.rtcybb.js} +1 -1
- package/.next/static/chunks/0016gkow7hgob.js +1 -0
- package/.next/static/chunks/02t5jr4shh.hy.js +1 -0
- package/.next/static/chunks/039-b.v_9-_rm.js +1 -0
- package/.next/static/chunks/05oi25hh7b81r.js +31 -0
- package/.next/static/chunks/07~8sx3_5uiox.js +1 -0
- package/.next/static/chunks/{0pqt~8bl3ukh4.js → 0_pxg.4pebw__.js} +2 -2
- package/.next/static/chunks/0_qfg5s5uzs7..js +7 -0
- package/.next/static/chunks/0b8wnt4put-5n.js +2 -0
- package/.next/static/chunks/{0-hlcuoemhe7w.js → 0cj5qr_a8dzky.js} +2 -2
- package/.next/static/chunks/0elalb9n_.~di.js +1 -0
- package/.next/static/chunks/{01xlw8hd842-c.js → 0eov~nkwaf-qa.js} +1 -1
- package/.next/static/chunks/0j_q__o8p6g83.js +1 -0
- package/.next/static/chunks/0jl6_w50zh4l5.js +1 -0
- package/.next/static/chunks/{0w1zwt8kq_7nb.js → 0ku0fjqlm9mca.js} +1 -1
- package/.next/static/chunks/0nbw9c8k8ecwn.js +1 -0
- package/.next/static/chunks/0r4q73.-1bkyl.js +1 -0
- package/.next/static/chunks/0r_c8eccg3z2o.js +1 -0
- package/.next/static/chunks/0u3b93reo9xci.js +1 -0
- package/.next/static/chunks/0y0_~78h5zp1g.js +1 -0
- package/.next/static/chunks/0~5-jv77qynyc.css +2 -0
- package/.next/static/chunks/10oi7l-tycgl9.js +1 -0
- package/.next/static/chunks/11uk1izuv3~0t.js +1 -0
- package/.next/static/chunks/{turbopack-01f1xs~cq_~si.js → turbopack-0.7dvsf9rllt0.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/ChatPopover.tsx +58 -6
- package/app/components/TaskChatPanel.tsx +39 -39
- package/app/components/TopoGraph.tsx +423 -78
- package/app/components/types.ts +7 -0
- package/app/lib/vendorIdentity.ts +145 -0
- package/app/page.tsx +18 -1
- package/package.json +1 -1
- package/scripts/chat-popover-test.mjs +109 -1
- package/scripts/chat-theme-test.mjs +98 -0
- package/scripts/topo-groupbox-test.mjs +118 -0
- package/scripts/topo-layout-test.mjs +113 -0
- package/scripts/topo-overlap-test.mjs +137 -0
- package/scripts/topo-p0round-test.mjs +166 -0
- package/scripts/topo-rename-test.mjs +107 -0
- package/scripts/topo-vendor-test.mjs +97 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js +0 -13
- package/.next/build/chunks/node_modules_13sb.px._.js.map +0 -47
- package/.next/server/chunks/[root-of-the-server]__0-mykaf._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0-mykaf._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0.d_kqy._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0.d_kqy._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__02pocyg._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__02pocyg._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__03ueci3._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__04aud7x._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__04aud7x._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__05fnt3n._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__05fnt3n._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__077tsd.._.js +0 -20
- package/.next/server/chunks/[root-of-the-server]__077tsd.._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__08wy1jr._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__08wy1jr._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0adhu1m._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0adhu1m._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0aqv02v._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0aqv02v._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0cawhfq._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0cawhfq._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0d_-_k.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0d_-_k.._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0f6bxfl._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0f6bxfl._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0h15edq._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0h15edq._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0k.vegl._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0k.vegl._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0kltbce._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0kltbce._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0mn04fw._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0mn04fw._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0o29v8c._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0o4qfn9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0o7ya7r._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0o7ya7r._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0p3fo6l._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__0p3fo6l._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0p6tutt._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0pn3wsx._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0pn3wsx._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0rg9ifx._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0x.-194._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0x.-194._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0x.a_yh._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0x.a_yh._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0~h2uqi._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0~h2uqi._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__139~d6a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__139~d6a._.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_anet_config_route_actions_0xzy73j.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_auth_login_route_actions_0zukc38.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_auth_logout_route_actions_0fm~3ij.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_auth_v3_route_actions_0ndzs5l.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_audit-log_route_actions_11k8fqt.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_auth_route_actions_0gs7ttk.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_broadcast_route_actions_0ads-kd.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_events_route_actions_0opktby.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_health_route_actions_0tzzt~x.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_inbox_route_actions_0xvslrg.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_license_route_actions_0i3tlr3.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_messages_route_actions_08-gi-s.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_networks_route_actions_02vejq2.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_nodes_route_actions_0nx8ryn.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_register_route_actions_086wi_3.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_send_route_actions_0-ga_ug.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_server-logs_route_actions_00euexv.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_session_route_actions_041wa62.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_stats_route_actions_1242~od.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_status_route_actions_0aml09a.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_task-events_route_actions_02v1tmm.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_tasks_route_actions_0nl77v4.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_tmux_route_actions_0u~aaza.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_hub_tokens_route_actions_09hzf_1.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +0 -3
- package/.next/server/chunks/node_modules_next_11synfn._.js +0 -10
- package/.next/server/chunks/node_modules_next_11synfn._.js.map +0 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0yubv2d.js +0 -3
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0yubv2d.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__014uja_._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__014uja_._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__02hi65f._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02hi65f._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__02xqa5z._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02xqa5z._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__04ph1de._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__04ph1de._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__05wc5-z._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__05wc5-z._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__06-2p1a._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__06-2p1a._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__08qr2ji._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__09l8xaa._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__09l8xaa._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__09z7o2x._.js +0 -19
- package/.next/server/chunks/ssr/[root-of-the-server]__09z7o2x._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0a0ffmv._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0a0ffmv._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0b7uu-_._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0b7uu-_._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0bl_wqk._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0bl_wqk._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ft0rpu._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ft0rpu._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0i~g-2t._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0i~g-2t._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0jl4ukn._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0jl4ukn._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0mook08._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0mook08._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0n46s~k._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0n46s~k._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0qchqb~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0qchqb~._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0rrm~-q._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0rrm~-q._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0w2ay2h._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0w2ay2h._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xjish~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xjish~._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ywihy_._.js +0 -8
- package/.next/server/chunks/ssr/[root-of-the-server]__0ywihy_._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__12ad1n.._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__12ad1n.._.js.map +0 -1
- package/.next/server/chunks/ssr/_0nne7mz._.js +0 -3
- package/.next/server/chunks/ssr/_0nne7mz._.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_admin_page_actions_0ycnu8f.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_login_page_actions_02kefem.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_logs_page_actions_0rvsl~d.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_messages_page_actions_0gsqep_.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_node_page_actions_0wd8cgl.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_nodes_page_actions_0-.rv67.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_server-logs_page_actions_0g1gb5c.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_networks_page_actions_09uw.sw.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_tokens_page_actions_0yi54x8.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_tasks_[id]_page_actions_0k_hm9g.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_tasks_page_actions_0_2o_cr.js +0 -3
- package/.next/server/chunks/ssr/app_0.zbtn5._.js.map +0 -1
- package/.next/server/chunks/ssr/app_01y-~mp._.js +0 -3
- package/.next/server/chunks/ssr/app_01y-~mp._.js.map +0 -1
- package/.next/server/chunks/ssr/app_04n78pr._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0_agk0r._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0aenxef._.js +0 -3
- package/.next/server/chunks/ssr/app_0aenxef._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0aum_g5._.js +0 -3
- package/.next/server/chunks/ssr/app_0aum_g5._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0emvkn2._.js +0 -3
- package/.next/server/chunks/ssr/app_0emvkn2._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0esuljp._.js +0 -3
- package/.next/server/chunks/ssr/app_0esuljp._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0izi28j._.js.map +0 -1
- package/.next/server/chunks/ssr/app_components_08ys5y3._.js.map +0 -1
- package/.next/server/chunks/ssr/app_server-logs_page_tsx_0_kpp1p._.js.map +0 -1
- package/.next/server/chunks/ssr/app_tasks_page_tsx_0z-d6mp._.js +0 -3
- package/.next/server/chunks/ssr/app_tasks_page_tsx_0z-d6mp._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_0ck2~9g._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_0ck2~9g._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_0r_.s40._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_0vtdjw7._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_0vtdjw7._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_0w2y7fz._.js +0 -6
- package/.next/server/chunks/ssr/node_modules_next_0w2y7fz._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_0e1izl_._.js +0 -6
- package/.next/server/chunks/ssr/node_modules_next_dist_0e1izl_._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_002l7yi.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02suzhc.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07uu-xq.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d2yq5t.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dm~kj8.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0foejvu.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0l-fh0i.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nsg22r.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0o9vt1n.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qm1-a1.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uccf9z.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uv6jyc.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10~~o-h.js +0 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10~~o-h.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13leyhk.js +0 -4
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13leyhk.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13s07li.js.map +0 -1
- package/.next/static/chunks/0-61e1mf6z8j3.js +0 -1
- package/.next/static/chunks/0257pdz1-imal.js +0 -2
- package/.next/static/chunks/02_zpo7taex9o.js +0 -7
- package/.next/static/chunks/06n3d~fbbtagk.js +0 -1
- package/.next/static/chunks/07eba1lz2u3p4.js +0 -1
- package/.next/static/chunks/07ubhin31ta-p.css +0 -2
- package/.next/static/chunks/0av2~0.96~d~g.js +0 -1
- package/.next/static/chunks/0c1bp~g7.8ru..js +0 -1
- package/.next/static/chunks/0cilnj5cm350a.js +0 -1
- package/.next/static/chunks/0e-.zgw81gela.js +0 -31
- package/.next/static/chunks/0g9aof0ob_fcj.js +0 -1
- package/.next/static/chunks/0s8jo6jypzkx5.js +0 -1
- package/.next/static/chunks/0u359llqm1_01.js +0 -1
- package/.next/static/chunks/0ubqqhhpsaez4.js +0 -1
- package/.next/static/chunks/0~qw9kxksr1v2.js +0 -1
- package/.next/static/chunks/12gprw3l0kvvf.js +0 -1
- package/.next/static/chunks/12u.9lyq1y7bc.js +0 -1
- package/.next/static/chunks/12yuo353giomx.js +0 -1
- package/.next/static/chunks/14bsg3_-taiw4.js +0 -1
- /package/.next/build/chunks/{[root-of-the-server]__0ubbtyl._.js.map → [root-of-the-server]__0tgc-8p._.js.map} +0 -0
- /package/.next/build/chunks/{[turbopack-node]_transforms_postcss_ts_06e.r3r._.js.map → [turbopack-node]_transforms_postcss_ts_0r4x5ys._.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_anet_config_route_actions_0xzy73j.js.map → 0ci9_nt-network-dashboard__next-internal_server_app_api_auth_v3_route_actions_0f5nbzr.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_auth_login_route_actions_0zukc38.js.map → 0ci9_nt-network-dashboard__next-internal_server_app_favicon_ico_route_actions_0t0eu9r.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_auth_logout_route_actions_0fm~3ij.js.map → 0ykm__next-internal_server_app_api_anet_config_route_actions_0a~v55_.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_auth_v3_route_actions_0ndzs5l.js.map → 0ykm__next-internal_server_app_api_auth_login_route_actions_0xnxfs4.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_audit-log_route_actions_11k8fqt.js.map → 0ykm__next-internal_server_app_api_auth_logout_route_actions_0p8p0rn.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_auth_route_actions_0gs7ttk.js.map → 0ykm__next-internal_server_app_api_hub_audit-log_route_actions_06uquwi.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_broadcast_route_actions_0ads-kd.js.map → 0ykm__next-internal_server_app_api_hub_auth_route_actions_0f_y1ey.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_events_route_actions_0opktby.js.map → 0ykm__next-internal_server_app_api_hub_broadcast_route_actions_0ao3j43.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_health_route_actions_0tzzt~x.js.map → 0ykm__next-internal_server_app_api_hub_events_route_actions_0_5ndld.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_inbox_route_actions_0xvslrg.js.map → 0ykm__next-internal_server_app_api_hub_health_route_actions_0mpzl74.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_license_route_actions_0i3tlr3.js.map → 0ykm__next-internal_server_app_api_hub_inbox_route_actions_0stoyto.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_messages_route_actions_08-gi-s.js.map → 0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_networks_route_actions_02vejq2.js.map → 0ykm__next-internal_server_app_api_hub_messages_route_actions_059rw1o.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_nodes_route_actions_0nx8ryn.js.map → 0ykm__next-internal_server_app_api_hub_networks_route_actions_03sehpn.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_register_route_actions_086wi_3.js.map → 0ykm__next-internal_server_app_api_hub_nodes_route_actions_11fbp28.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_send_route_actions_0-ga_ug.js.map → 0ykm__next-internal_server_app_api_hub_register_route_actions_0l.d7~n.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_server-logs_route_actions_00euexv.js.map → 0ykm__next-internal_server_app_api_hub_send_route_actions_0.p82vy.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_session_route_actions_041wa62.js.map → 0ykm__next-internal_server_app_api_hub_server-logs_route_actions_05~c5lb.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_stats_route_actions_1242~od.js.map → 0ykm__next-internal_server_app_api_hub_session_route_actions_0b9ef2i.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_status_route_actions_0aml09a.js.map → 0ykm__next-internal_server_app_api_hub_stats_route_actions_03u65u0.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_task-events_route_actions_02v1tmm.js.map → 0ykm__next-internal_server_app_api_hub_status_route_actions_0_71ear.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_tasks_route_actions_0nl77v4.js.map → 0ykm__next-internal_server_app_api_hub_task-events_route_actions_07md_ee.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_tmux_route_actions_0u~aaza.js.map → 0ykm__next-internal_server_app_api_hub_tasks_route_actions_0er3uvk.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_hub_tokens_route_actions_09hzf_1.js.map → 0ykm__next-internal_server_app_api_hub_tmux_route_actions_0o_1-8u.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map → 0ykm__next-internal_server_app_api_hub_tokens_route_actions_09doluz.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app__global-error_page_actions_0k77kol.js.map → 0dwh_ent-network-dashboard__next-internal_server_app_server-logs_page_actions_0hkk815.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app__not-found_page_actions_0eq97pa.js.map → 0yas_gent-network-dashboard__next-internal_server_app__not-found_page_actions_0u.f-rz.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_admin_page_actions_0ycnu8f.js.map → 0yas_gent-network-dashboard__next-internal_server_app_tasks_[id]_page_actions_0r3~lho.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_login_page_actions_02kefem.js.map → 0ykm__next-internal_server_app__global-error_page_actions_100fxls.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_logs_page_actions_0rvsl~d.js.map → 0ykm__next-internal_server_app_settings_networks_page_actions_0jgy57m.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_messages_page_actions_0gsqep_.js.map → 0ykm__next-internal_server_app_settings_tokens_page_actions_0l5h.k~.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_node_page_actions_0wd8cgl.js.map → agent-network-dashboard__next-internal_server_app_admin_page_actions_0i~.x~j.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_nodes_page_actions_0-.rv67.js.map → agent-network-dashboard__next-internal_server_app_login_page_actions_0frwl15.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_page_actions_09-gtaw.js.map → agent-network-dashboard__next-internal_server_app_logs_page_actions_0xa2ox_.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_server-logs_page_actions_0g1gb5c.js.map → agent-network-dashboard__next-internal_server_app_messages_page_actions_10j3tg4.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_settings_networks_page_actions_09uw.sw.js.map → agent-network-dashboard__next-internal_server_app_node_page_actions_0sl4ntd.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_settings_page_actions_0mr68ai.js.map → agent-network-dashboard__next-internal_server_app_nodes_page_actions_0cpgkfs.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_settings_tokens_page_actions_0yi54x8.js.map → agent-network-dashboard__next-internal_server_app_page_actions_08nuo36.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_tasks_[id]_page_actions_0k_hm9g.js.map → agent-network-dashboard__next-internal_server_app_settings_page_actions_0iv.lmk.js.map} +0 -0
- /package/.next/server/chunks/ssr/{_next-internal_server_app_tasks_page_actions_0_2o_cr.js.map → agent-network-dashboard__next-internal_server_app_tasks_page_actions_08c7qlx.js.map} +0 -0
- /package/.next/static/{D9NuRFRTCsFjZXzYICGqG → mD5mWtAz2L5GuQ3XkS7ys}/_buildManifest.js +0 -0
- /package/.next/static/{D9NuRFRTCsFjZXzYICGqG → mD5mWtAz2L5GuQ3XkS7ys}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{D9NuRFRTCsFjZXzYICGqG → mD5mWtAz2L5GuQ3XkS7ys}/_ssgManifest.js +0 -0
|
@@ -4,6 +4,7 @@ import { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
4
4
|
import { Session } from './types';
|
|
5
5
|
import { aliasAvatarColors, aliasInitial } from './AliasAvatar';
|
|
6
6
|
import { ChatPopover } from './ChatPopover';
|
|
7
|
+
import { vendorForModel, runtimeIdentity, identityLine } from '../lib/vendorIdentity';
|
|
7
8
|
|
|
8
9
|
interface MessageFlow {
|
|
9
10
|
from_alias: string;
|
|
@@ -15,6 +16,9 @@ interface MessageFlow {
|
|
|
15
16
|
interface TopoGraphProps {
|
|
16
17
|
sessions: Session[];
|
|
17
18
|
sseSessions: Record<string, number>;
|
|
19
|
+
// #84: a node.renamed event from the Overview's SSE listener. When the
|
|
20
|
+
// currently open chat popover targets `from`, it follows the rename to `to`.
|
|
21
|
+
renameSignal?: { from: string; to: string; ts: number } | null;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
interface Point {
|
|
@@ -236,22 +240,59 @@ function commonPrefix(a: string, b: string): string {
|
|
|
236
240
|
return a.slice(0, i);
|
|
237
241
|
}
|
|
238
242
|
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
/** #83 + #111: group nodes that share a ≥2-char alias prefix OR a project_dir
|
|
244
|
+
* ("either criterion → same group", Vincent 4724). Union-find over the
|
|
245
|
+
* sessions; the component label prefers the shared project_dir's basename,
|
|
246
|
+
* else the common alias prefix. Returns alias → groupKey. */
|
|
247
|
+
function computeGroups(sessions: { alias: string; project_dir?: string | null }[]): Record<string, string> {
|
|
248
|
+
const n = sessions.length;
|
|
249
|
+
const parent = sessions.map((_, i) => i);
|
|
250
|
+
const find = (i: number): number => {
|
|
251
|
+
while (parent[i] !== i) { parent[i] = parent[parent[i]]; i = parent[i]; }
|
|
252
|
+
return i;
|
|
253
|
+
};
|
|
254
|
+
const union = (a: number, b: number) => {
|
|
255
|
+
const ra = find(a), rb = find(b);
|
|
256
|
+
if (ra !== rb) parent[ra] = rb;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
// union by shared project_dir
|
|
260
|
+
const byDir: Record<string, number[]> = {};
|
|
261
|
+
sessions.forEach((s, i) => {
|
|
262
|
+
const d = s.project_dir?.trim();
|
|
263
|
+
if (d) (byDir[d] ||= []).push(i);
|
|
264
|
+
});
|
|
265
|
+
for (const idxs of Object.values(byDir)) {
|
|
266
|
+
for (let k = 1; k < idxs.length; k++) union(idxs[0], idxs[k]);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// union by shared ≥2-char alias prefix — sort, link adjacent pairs
|
|
270
|
+
const order = sessions.map((_, i) => i).sort((a, b) => sessions[a].alias.localeCompare(sessions[b].alias));
|
|
271
|
+
for (let k = 0; k + 1 < order.length; k++) {
|
|
272
|
+
if (commonPrefix(sessions[order[k]].alias, sessions[order[k + 1]].alias).length >= 2) {
|
|
273
|
+
union(order[k], order[k + 1]);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// label each connected component
|
|
278
|
+
const comps: Record<number, number[]> = {};
|
|
279
|
+
for (let i = 0; i < n; i++) (comps[find(i)] ||= []).push(i);
|
|
241
280
|
const keys: Record<string, string> = {};
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
const
|
|
248
|
-
if (
|
|
249
|
-
|
|
250
|
-
|
|
281
|
+
for (const members of Object.values(comps)) {
|
|
282
|
+
let label: string;
|
|
283
|
+
if (members.length === 1) {
|
|
284
|
+
label = sessions[members[0]].alias;
|
|
285
|
+
} else {
|
|
286
|
+
const dirs = new Set(members.map(i => sessions[i].project_dir?.trim()).filter(Boolean) as string[]);
|
|
287
|
+
if (dirs.size === 1) {
|
|
288
|
+
const d = [...dirs][0];
|
|
289
|
+
label = d.split('/').filter(Boolean).pop() || d;
|
|
290
|
+
} else {
|
|
291
|
+
label = members.map(i => sessions[i].alias).reduce((a, b) => commonPrefix(a, b));
|
|
292
|
+
if (label.length < 2) label = sessions[members[0]].alias;
|
|
293
|
+
}
|
|
251
294
|
}
|
|
252
|
-
const
|
|
253
|
-
for (let k = i; k <= j; k++) keys[sorted[k]] = key;
|
|
254
|
-
i = j + 1;
|
|
295
|
+
for (const i of members) keys[sessions[i].alias] = label;
|
|
255
296
|
}
|
|
256
297
|
return keys;
|
|
257
298
|
}
|
|
@@ -283,13 +324,43 @@ function buildFlowLinks(messages: MessageFlow[], positions: Record<string, Point
|
|
|
283
324
|
return [...links.values()].slice(0, 18);
|
|
284
325
|
}
|
|
285
326
|
|
|
286
|
-
export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
327
|
+
export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProps) {
|
|
287
328
|
const theme = useTheme();
|
|
288
329
|
const isLight = theme === 'light';
|
|
289
330
|
const pal = isLight ? LIGHT_PALETTE : DARK_PALETTE;
|
|
290
331
|
const brand = useBrand();
|
|
291
332
|
const isIntern = brand === 'intern';
|
|
292
333
|
const [messages, setMessages] = useState<MessageFlow[]>([]);
|
|
334
|
+
// Issue #87: ring | grid layout toggle. Ring is the tiered-radial default;
|
|
335
|
+
// grid arranges nodes in an N×M grid (better for 30+ nodes). Persisted to
|
|
336
|
+
// localStorage like the zoom/pan view state. Declared above nodePositions
|
|
337
|
+
// since that useMemo branches on it.
|
|
338
|
+
const [layout, setLayout] = useState<'ring' | 'grid'>('ring');
|
|
339
|
+
useEffect(() => {
|
|
340
|
+
try {
|
|
341
|
+
const saved = localStorage.getItem('anet-topo-layout');
|
|
342
|
+
if (saved === 'grid' || saved === 'ring') setLayout(saved);
|
|
343
|
+
} catch {}
|
|
344
|
+
}, []);
|
|
345
|
+
const toggleLayout = () => setLayout(prev => {
|
|
346
|
+
const next = prev === 'ring' ? 'grid' : 'ring';
|
|
347
|
+
try { localStorage.setItem('anet-topo-layout', next); } catch {}
|
|
348
|
+
return next;
|
|
349
|
+
});
|
|
350
|
+
// Issue #113: node size scale (Vincent 4727 — nodes too big / crowded at
|
|
351
|
+
// ~22 nodes). S/M/L → 0.7/0.84/1.0; default M (one notch down from the old
|
|
352
|
+
// fixed size). Persisted like the layout toggle.
|
|
353
|
+
const [nodeScale, setNodeScale] = useState(0.84);
|
|
354
|
+
useEffect(() => {
|
|
355
|
+
try {
|
|
356
|
+
const saved = parseFloat(localStorage.getItem('anet-topo-nodescale') || '');
|
|
357
|
+
if (saved === 0.7 || saved === 0.84 || saved === 1) setNodeScale(saved);
|
|
358
|
+
} catch {}
|
|
359
|
+
}, []);
|
|
360
|
+
const pickNodeScale = (v: number) => {
|
|
361
|
+
setNodeScale(v);
|
|
362
|
+
try { localStorage.setItem('anet-topo-nodescale', String(v)); } catch {}
|
|
363
|
+
};
|
|
293
364
|
|
|
294
365
|
useEffect(() => {
|
|
295
366
|
const fetchMessages = async () => {
|
|
@@ -316,6 +387,7 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
316
387
|
flowLinks,
|
|
317
388
|
activeAliases,
|
|
318
389
|
groupKeys,
|
|
390
|
+
groupBoxes,
|
|
319
391
|
} = useMemo(() => {
|
|
320
392
|
const sseCount = (s: { alias: string; network_id?: string }) =>
|
|
321
393
|
(s.network_id ? sseSessions[`${s.network_id}:${s.alias}`] : undefined) ?? sseSessions[s.alias];
|
|
@@ -325,10 +397,133 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
325
397
|
// index, so contiguous-in-array becomes contiguous-in-ring, i.e.
|
|
326
398
|
// each team visually clusters. localeCompare keeps CJK ordering sane.
|
|
327
399
|
const byAlias = (a: Session, b: Session) => a.alias.localeCompare(b.alias);
|
|
400
|
+
// #112 umbrella: ghost age-out — an offline node not seen for over a day
|
|
401
|
+
// is almost certainly a deleted node the server `/api/status` still
|
|
402
|
+
// returns (#74 root cause is server-side; this is the dashboard-side
|
|
403
|
+
// fallback so stale ghosts stop cluttering the topology). A missing
|
|
404
|
+
// last_seen_at is kept (conservative — could be a legitimately new node).
|
|
405
|
+
const GHOST_MS = 24 * 60 * 60 * 1000;
|
|
406
|
+
const now = Date.now();
|
|
407
|
+
const isGhost = (s: Session) => {
|
|
408
|
+
if (s.status !== 'offline' || sseCount(s) || !s.last_seen_at) return false;
|
|
409
|
+
const t = Date.parse(s.last_seen_at);
|
|
410
|
+
return !Number.isNaN(t) && now - t > GHOST_MS;
|
|
411
|
+
};
|
|
328
412
|
const online = sessions.filter(s => s.status !== 'offline' || sseCount(s)).sort(byAlias);
|
|
329
|
-
const offline = sessions.filter(s => s.status === 'offline' && !sseCount(s)).sort(byAlias);
|
|
413
|
+
const offline = sessions.filter(s => s.status === 'offline' && !sseCount(s) && !isGhost(s)).sort(byAlias);
|
|
330
414
|
const positions: Record<string, Point> = {};
|
|
331
415
|
|
|
416
|
+
if (layout === 'grid') {
|
|
417
|
+
// Issue #87 + #111: group-banded grid. Nodes are sorted by alias so
|
|
418
|
+
// same-prefix aliases are adjacent; each multi-member prefix group then
|
|
419
|
+
// gets its OWN row(s) starting at column 0, while singletons pack into
|
|
420
|
+
// shared rows. Group-banded placement keeps every group's bounding box
|
|
421
|
+
// (#111) a clean rectangle — no box ever overlaps another group's.
|
|
422
|
+
const all = [...online, ...offline];
|
|
423
|
+
const groupKeys = computeGroups(all);
|
|
424
|
+
const cols = Math.max(1, Math.ceil(Math.sqrt(all.length)));
|
|
425
|
+
// #112: gy0 starts below the (now compact) recent-signal / legend
|
|
426
|
+
// overlay panels — their max bottom edge is y≈112 — so grid row 0 is
|
|
427
|
+
// never occluded; gy1 extends near the canvas bottom for breathing room.
|
|
428
|
+
const gx0 = 150, gx1 = 850, gy0 = 126, gy1 = 652;
|
|
429
|
+
const cellW = (gx1 - gx0) / cols;
|
|
430
|
+
// largest node radius at the current size scale — drives the group
|
|
431
|
+
// label band + the row-height floor so nothing ever overlaps.
|
|
432
|
+
const nodeR = Math.round(26 * nodeScale);
|
|
433
|
+
|
|
434
|
+
// ordered runs of consecutive same-group-key nodes (≥2 = real group)
|
|
435
|
+
const runs: { key: string; members: Session[] }[] = [];
|
|
436
|
+
for (const s of all) {
|
|
437
|
+
const gk = groupKeys[s.alias];
|
|
438
|
+
const last = runs[runs.length - 1];
|
|
439
|
+
if (last && last.key === gk) last.members.push(s);
|
|
440
|
+
else runs.push({ key: gk, members: [s] });
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Pass 1 — assign each run to a band: a multi-member group owns its
|
|
444
|
+
// rows (left-aligned, so its bounding box is a tidy rect); contiguous
|
|
445
|
+
// singletons pack into shared rows (centred). Collect total row count.
|
|
446
|
+
type Band = { members: Session[]; startRow: number; centred: boolean; isGroup: boolean };
|
|
447
|
+
const bands: Band[] = [];
|
|
448
|
+
let row = 0;
|
|
449
|
+
let i = 0;
|
|
450
|
+
while (i < runs.length) {
|
|
451
|
+
if (runs[i].members.length >= 2) {
|
|
452
|
+
bands.push({ members: runs[i].members, startRow: row, centred: false, isGroup: true });
|
|
453
|
+
row += Math.ceil(runs[i].members.length / cols);
|
|
454
|
+
i++;
|
|
455
|
+
} else {
|
|
456
|
+
const singles: Session[] = [];
|
|
457
|
+
while (i < runs.length && runs[i].members.length < 2) {
|
|
458
|
+
singles.push(runs[i].members[0]);
|
|
459
|
+
i++;
|
|
460
|
+
}
|
|
461
|
+
bands.push({ members: singles, startRow: row, centred: true, isGroup: false });
|
|
462
|
+
row += Math.ceil(singles.length / cols);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
const totalRows = Math.max(1, row);
|
|
466
|
+
// #112: the group label sits in a band ABOVE the topmost node, so the
|
|
467
|
+
// band must clear the node radius — GROUP_TOP is node-relative, never
|
|
468
|
+
// cellH-derived (cellH-derived was the label↔node overlap bug Vincent
|
|
469
|
+
// hit). cellH then floors at GROUP_TOP + 30 so the label band + bottom
|
|
470
|
+
// padding always fit and stacked group boxes never touch; past the
|
|
471
|
+
// floor the grid overflows and zoom/pan handles it.
|
|
472
|
+
const GROUP_TOP = nodeR + 20;
|
|
473
|
+
// Row-height floor = the tightest of: a node + its label below it
|
|
474
|
+
// (2·nodeR + ~22), and the label band + min box padding (GROUP_TOP + 12).
|
|
475
|
+
// Below this, rows would overlap; past it the grid overflows and
|
|
476
|
+
// zoom/pan covers the rest.
|
|
477
|
+
const cellH = Math.max(2 * nodeR + 22, GROUP_TOP + 12, Math.min(100, (gy1 - gy0) / totalRows));
|
|
478
|
+
|
|
479
|
+
// Pass 2 — place each band's members.
|
|
480
|
+
for (const band of bands) {
|
|
481
|
+
band.members.forEach((s, idx) => {
|
|
482
|
+
const rowInBand = Math.floor(idx / cols);
|
|
483
|
+
const c = idx % cols;
|
|
484
|
+
const inRow = Math.min(cols, band.members.length - rowInBand * cols);
|
|
485
|
+
const inset = band.centred ? ((cols - inRow) * cellW) / 2 : 0;
|
|
486
|
+
positions[s.alias] = {
|
|
487
|
+
x: gx0 + inset + (c + 0.5) * cellW,
|
|
488
|
+
y: gy0 + (band.startRow + rowInBand + 0.5) * cellH,
|
|
489
|
+
};
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
const links = buildFlowLinks(messages, positions);
|
|
494
|
+
const active = new Set<string>();
|
|
495
|
+
links.forEach(link => { active.add(link.from); active.add(link.to); });
|
|
496
|
+
// #111: one bounding box per multi-member group (Vincent 4722). Each
|
|
497
|
+
// group owns its rows; GROUP_PAD fills the row space left below the
|
|
498
|
+
// nodes after the label band, so stacked group boxes always have a
|
|
499
|
+
// gap between them (GROUP_TOP is defined above, with cellH).
|
|
500
|
+
const GROUP_PAD = Math.max(8, Math.min(26, cellH - GROUP_TOP - 8)); // side/bottom
|
|
501
|
+
const groupBoxes = bands
|
|
502
|
+
.filter(b => b.isGroup)
|
|
503
|
+
.map(band => {
|
|
504
|
+
const pts = band.members.map(s => positions[s.alias]).filter(Boolean);
|
|
505
|
+
const xs = pts.map(p => p.x);
|
|
506
|
+
const ys = pts.map(p => p.y);
|
|
507
|
+
const minX = Math.min(...xs), minY = Math.min(...ys);
|
|
508
|
+
return {
|
|
509
|
+
key: band.members.length ? groupKeys[band.members[0].alias] : '',
|
|
510
|
+
x: minX - GROUP_PAD,
|
|
511
|
+
y: minY - GROUP_TOP,
|
|
512
|
+
w: Math.max(...xs) - minX + GROUP_PAD * 2,
|
|
513
|
+
h: Math.max(...ys) - minY + GROUP_TOP + GROUP_PAD,
|
|
514
|
+
};
|
|
515
|
+
});
|
|
516
|
+
return {
|
|
517
|
+
onlineNodes: online,
|
|
518
|
+
offlineNodes: offline,
|
|
519
|
+
nodePositions: positions,
|
|
520
|
+
flowLinks: links,
|
|
521
|
+
activeAliases: active,
|
|
522
|
+
groupKeys,
|
|
523
|
+
groupBoxes,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
|
|
332
527
|
// Round 97 (issue #50) + 98 (issue #61): three layout modes by N.
|
|
333
528
|
// N ≤ 8 → single ring (r=220)
|
|
334
529
|
// 8 < N ≤ 14 → two rings (inner r=175, outer r=260, half-step rot)
|
|
@@ -396,7 +591,7 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
396
591
|
});
|
|
397
592
|
|
|
398
593
|
// Round 106 (issue #83): group key per alias → shared hue per team.
|
|
399
|
-
const groupKeys =
|
|
594
|
+
const groupKeys = computeGroups([...online, ...offline]);
|
|
400
595
|
|
|
401
596
|
return {
|
|
402
597
|
onlineNodes: online,
|
|
@@ -405,8 +600,11 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
405
600
|
flowLinks: links,
|
|
406
601
|
activeAliases: active,
|
|
407
602
|
groupKeys,
|
|
603
|
+
// #111: group boxes are a grid-layout feature only — radially scattered
|
|
604
|
+
// ring nodes can't be cleanly boxed. Ring keeps the #83 prefix hue.
|
|
605
|
+
groupBoxes: [] as { key: string; x: number; y: number; w: number; h: number }[],
|
|
408
606
|
};
|
|
409
|
-
}, [messages, sessions, sseSessions]);
|
|
607
|
+
}, [messages, sessions, sseSessions, layout, nodeScale]);
|
|
410
608
|
|
|
411
609
|
const workingCount = onlineNodes.filter(s => s.status === 'working').length;
|
|
412
610
|
// Round 109 (Vincent 4582 P0): hover-gated labels above this node count
|
|
@@ -433,6 +631,16 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
433
631
|
// Issue #100: singleton chat popover. One alias at a time — clicking
|
|
434
632
|
// another node swaps the target and the conversation switches in place.
|
|
435
633
|
const [chatAlias, setChatAlias] = useState<string | null>(null);
|
|
634
|
+
// #84: when a node is renamed while its chat popover is open, follow the
|
|
635
|
+
// rename so the conversation keeps targeting a live alias.
|
|
636
|
+
useEffect(() => {
|
|
637
|
+
if (renameSignal && renameSignal.from === chatAlias) {
|
|
638
|
+
setChatAlias(renameSignal.to);
|
|
639
|
+
}
|
|
640
|
+
// chatAlias intentionally omitted — only react to a new rename signal,
|
|
641
|
+
// not to the user opening/closing the popover.
|
|
642
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
643
|
+
}, [renameSignal]);
|
|
436
644
|
|
|
437
645
|
useEffect(() => { viewRef.current = view; }, [view]);
|
|
438
646
|
|
|
@@ -555,7 +763,25 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
555
763
|
<div className="text-xs uppercase text-gray-600 tracking-wider">Network Topology</div>
|
|
556
764
|
<h2 className="text-lg text-white font-semibold">Command mesh</h2>
|
|
557
765
|
</div>
|
|
558
|
-
<div className="flex flex-wrap gap-2 text-xs">
|
|
766
|
+
<div className="flex flex-wrap items-center gap-2 text-xs">
|
|
767
|
+
{/* Issue #87: ring | grid layout toggle — segmented control,
|
|
768
|
+
persisted to localStorage anet-topo-layout. */}
|
|
769
|
+
<div className="inline-flex rounded-md border border-gray-500/25 overflow-hidden" role="group" aria-label="Topology layout">
|
|
770
|
+
<button
|
|
771
|
+
onClick={() => { if (layout !== 'ring') toggleLayout(); }}
|
|
772
|
+
aria-pressed={layout === 'ring'}
|
|
773
|
+
className={`px-2.5 py-1 transition-colors ${layout === 'ring' ? 'bg-cyan-500/15 text-cyan-300' : 'text-gray-500 hover:text-gray-400'}`}
|
|
774
|
+
>
|
|
775
|
+
Ring
|
|
776
|
+
</button>
|
|
777
|
+
<button
|
|
778
|
+
onClick={() => { if (layout !== 'grid') toggleLayout(); }}
|
|
779
|
+
aria-pressed={layout === 'grid'}
|
|
780
|
+
className={`px-2.5 py-1 border-l border-gray-500/25 transition-colors ${layout === 'grid' ? 'bg-cyan-500/15 text-cyan-300' : 'text-gray-500 hover:text-gray-400'}`}
|
|
781
|
+
>
|
|
782
|
+
Grid
|
|
783
|
+
</button>
|
|
784
|
+
</div>
|
|
559
785
|
<span className="px-2.5 py-1 rounded-md bg-green-500/10 text-green-300 border border-green-500/20">
|
|
560
786
|
{workingCount} working
|
|
561
787
|
</span>
|
|
@@ -624,6 +850,10 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
624
850
|
{/* Round 103 (issue #81): everything inside this <g> zooms + pans
|
|
625
851
|
together. transform order = translate then scale. */}
|
|
626
852
|
<g transform={`translate(${view.x} ${view.y}) scale(${view.zoom})`}>
|
|
853
|
+
{/* Issue #87: radar/ring ambiance renders only in ring layout —
|
|
854
|
+
grid mode drops it so the concentric rings don't sit behind a
|
|
855
|
+
rectangular grid. */}
|
|
856
|
+
{layout === 'ring' && (<>
|
|
627
857
|
<circle cx={cx} cy={cy} r="330" fill="url(#topo-radar)" />
|
|
628
858
|
|
|
629
859
|
{/* Round 45: subtle star field — 24 deterministic dots scattered
|
|
@@ -705,12 +935,13 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
705
935
|
opacity={isLight ? 0.35 : 0.18}
|
|
706
936
|
/>
|
|
707
937
|
))}
|
|
938
|
+
</>)}
|
|
708
939
|
|
|
709
940
|
{/* hub links — round 46: idle spokes now have animated
|
|
710
941
|
stroke-dashoffset so dashes flow outward from the hub
|
|
711
942
|
("command relay" feel). Active spokes carrying live message
|
|
712
943
|
flow stay as solid bright strokes. */}
|
|
713
|
-
{onlineNodes.map((session, idx) => {
|
|
944
|
+
{layout === 'ring' && onlineNodes.map((session, idx) => {
|
|
714
945
|
const pos = nodePositions[session.alias];
|
|
715
946
|
if (!pos) return null;
|
|
716
947
|
const path = curvePath({ x: cx, y: cy }, pos, 0);
|
|
@@ -731,6 +962,37 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
731
962
|
);
|
|
732
963
|
})}
|
|
733
964
|
|
|
965
|
+
{/* #111: prefix-group boundary boxes (Vincent 4722). Grid layout
|
|
966
|
+
only — groupBoxes is empty in ring mode. Rendered behind the
|
|
967
|
+
flow links + nodes; pointer-events off so they never intercept
|
|
968
|
+
a node click. Restrained dashed container + group-name label. */}
|
|
969
|
+
{groupBoxes.map(box => (
|
|
970
|
+
<g key={`grp-${box.key}`} data-group={box.key} style={{ pointerEvents: 'none' }}>
|
|
971
|
+
<rect
|
|
972
|
+
x={box.x}
|
|
973
|
+
y={box.y}
|
|
974
|
+
width={box.w}
|
|
975
|
+
height={box.h}
|
|
976
|
+
rx="14"
|
|
977
|
+
fill={isLight ? '#0f172a' : '#a5b4fc'}
|
|
978
|
+
fillOpacity={isLight ? 0.025 : 0.045}
|
|
979
|
+
stroke={pal.ringStroke}
|
|
980
|
+
strokeWidth="1.5"
|
|
981
|
+
strokeDasharray="6 6"
|
|
982
|
+
/>
|
|
983
|
+
<text
|
|
984
|
+
x={box.x + 12}
|
|
985
|
+
y={box.y + 14}
|
|
986
|
+
fill={pal.legendText}
|
|
987
|
+
fontSize="13"
|
|
988
|
+
fontFamily="monospace"
|
|
989
|
+
fontWeight="700"
|
|
990
|
+
>
|
|
991
|
+
{box.key}
|
|
992
|
+
</text>
|
|
993
|
+
</g>
|
|
994
|
+
))}
|
|
995
|
+
|
|
734
996
|
{/* directed message flows */}
|
|
735
997
|
{flowLinks.map((link, index) => {
|
|
736
998
|
const from = nodePositions[link.from];
|
|
@@ -775,7 +1037,7 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
775
1037
|
visually; two outward pulses keep the "signal source" idea
|
|
776
1038
|
from r17. Light theme gets a paler core to avoid hot-spotting
|
|
777
1039
|
the bg. */}
|
|
778
|
-
<g>
|
|
1040
|
+
{layout === 'ring' && (<g>
|
|
779
1041
|
{/* static grounding halo — sits underneath, low opacity */}
|
|
780
1042
|
<circle
|
|
781
1043
|
cx={cx} cy={cy} r="18"
|
|
@@ -795,7 +1057,7 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
795
1057
|
{/* core — 20px diameter, larger inner highlight reads as a "lit lamp" */}
|
|
796
1058
|
<circle cx={cx} cy={cy} r="10" fill={isLight ? '#059669' : '#10b981'} />
|
|
797
1059
|
<circle cx={cx} cy={cy} r="5" fill="#d1fae5" opacity="0.9" />
|
|
798
|
-
</g>
|
|
1060
|
+
</g>)}
|
|
799
1061
|
|
|
800
1062
|
{/* agent nodes */}
|
|
801
1063
|
{[...onlineNodes, ...offlineNodes].map(session => {
|
|
@@ -806,7 +1068,9 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
806
1068
|
const isOnline = session.status !== 'offline' || !!sseCountFor;
|
|
807
1069
|
const status = nodeStatus(session, isOnline, isLight);
|
|
808
1070
|
const isActive = activeAliases.has(session.alias);
|
|
809
|
-
|
|
1071
|
+
// #113: node size scales with the S/M/L control; halos, labels,
|
|
1072
|
+
// badge and avatar all derive from `radius` so they follow.
|
|
1073
|
+
const radius = Math.round((isOnline ? 26 : 18) * nodeScale);
|
|
810
1074
|
// Round 109/110 (Vincent 4582 + 4583 P0): at high node counts
|
|
811
1075
|
// the 100px opaque label cards overlapped each other and
|
|
812
1076
|
// covered neighbouring avatars. But hiding text entirely went
|
|
@@ -820,7 +1084,8 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
820
1084
|
return (
|
|
821
1085
|
<g
|
|
822
1086
|
key={session.alias}
|
|
823
|
-
|
|
1087
|
+
data-node={session.alias}
|
|
1088
|
+
className="group transition-opacity"
|
|
824
1089
|
style={{ cursor: 'pointer' }}
|
|
825
1090
|
// Stop the pointerdown from reaching the SVG pan handler: the
|
|
826
1091
|
// SVG calls setPointerCapture, and a captured pointer makes
|
|
@@ -833,6 +1098,29 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
833
1098
|
onPointerLeave={() => denseLayout && setHoveredAlias(prev => (prev === session.alias ? null : prev))}
|
|
834
1099
|
onClick={() => setChatAlias(session.alias)}
|
|
835
1100
|
>
|
|
1101
|
+
{/* Issue #96: native hover tooltip — "Vendor · model · Runtime".
|
|
1102
|
+
Falls back to just the alias when the node reports no
|
|
1103
|
+
model/runtime. */}
|
|
1104
|
+
<title>{identityLine(session.model, session.runtime) || session.alias}</title>
|
|
1105
|
+
{/* Round 2 / Loop: hover ring — a thin outer stroke that fades
|
|
1106
|
+
in when the cursor enters the node, signalling clickability
|
|
1107
|
+
(real-user feedback for the chat-popover open). Pure CSS via
|
|
1108
|
+
Tailwind group-hover, so it costs nothing per frame and
|
|
1109
|
+
respects prefers-reduced-motion via the global media query. */}
|
|
1110
|
+
<circle
|
|
1111
|
+
cx={pos.x}
|
|
1112
|
+
cy={pos.y}
|
|
1113
|
+
r={radius + 12}
|
|
1114
|
+
fill="none"
|
|
1115
|
+
stroke={status.primary}
|
|
1116
|
+
// strokeWidth must NOT be 1.5 (offline status ring) or 3
|
|
1117
|
+
// (online status ring) — the overlap test selects by those
|
|
1118
|
+
// exact widths and would mis-count this invisible hover
|
|
1119
|
+
// ring as a node footprint.
|
|
1120
|
+
strokeWidth="2"
|
|
1121
|
+
className="opacity-0 group-hover:opacity-70 transition-opacity duration-150"
|
|
1122
|
+
style={{ pointerEvents: 'none' }}
|
|
1123
|
+
/>
|
|
836
1124
|
{isActive && (
|
|
837
1125
|
<circle cx={pos.x} cy={pos.y} r={radius + 14} fill={status.primary} opacity={isLight ? 0.08 : 0.12}>
|
|
838
1126
|
<animate attributeName="r" values={`${radius + 8};${radius + 22};${radius + 8}`} dur="2.4s" repeatCount="indefinite" />
|
|
@@ -850,33 +1138,26 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
850
1138
|
strokeDasharray={isOnline ? 'none' : '5 5'}
|
|
851
1139
|
filter={isOnline && !isLight ? 'url(#topo-glow)' : undefined}
|
|
852
1140
|
/>
|
|
853
|
-
{/*
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
1141
|
+
{/* Issue #96: node "avatar" is now driven by the model
|
|
1142
|
+
vendor. Decision order:
|
|
1143
|
+
1. ?brand=intern flag, or an intern-aliased node with
|
|
1144
|
+
no model field → 书生 coin (preserves #79).
|
|
1145
|
+
2. vendor has a packaged logo asset → that logo image
|
|
1146
|
+
(intern-s1-* models land here via vendorForModel).
|
|
1147
|
+
3. known vendor, logo asset not shipped yet → a
|
|
1148
|
+
vendor-tinted monogram (spec-mandated fallback).
|
|
1149
|
+
4. unknown vendor / null model → the prefix-group
|
|
1150
|
+
hue-hashed initial (#83/#99 behaviour, unchanged). */}
|
|
860
1151
|
{(() => {
|
|
861
|
-
const ar = isOnline ? 14 : 10;
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
// forces the coin on every node (full brand showcase).
|
|
868
|
-
const isInternNode = isIntern || /书生|书小生|intern/i.test(session.alias);
|
|
869
|
-
if (isInternNode) {
|
|
870
|
-
// Round 102: self-contained "avatar coin" — 书小生 figure
|
|
871
|
-
// keyed off its white background and composited onto a
|
|
872
|
-
// cream circular backplate. The cream coin gives the
|
|
873
|
-
// dark-haired figure consistent contrast on BOTH the
|
|
874
|
-
// dark cyber theme and light theme. Render at the node
|
|
875
|
-
// diameter so the coin fills inside the status ring.
|
|
876
|
-
const size = radius * 2;
|
|
1152
|
+
const ar = Math.round((isOnline ? 14 : 10) * nodeScale);
|
|
1153
|
+
const size = radius * 2;
|
|
1154
|
+
const vendor = vendorForModel(session.model);
|
|
1155
|
+
const internByAlias = /书生|书小生|intern/i.test(session.alias);
|
|
1156
|
+
|
|
1157
|
+
if (isIntern || internByAlias || vendor.logo) {
|
|
877
1158
|
return (
|
|
878
1159
|
<image
|
|
879
|
-
href=
|
|
1160
|
+
href={vendor.logo ?? '/intern_avatar.png'}
|
|
880
1161
|
x={pos.x - size / 2}
|
|
881
1162
|
y={pos.y - size / 2}
|
|
882
1163
|
width={size}
|
|
@@ -885,12 +1166,25 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
885
1166
|
/>
|
|
886
1167
|
);
|
|
887
1168
|
}
|
|
1169
|
+
if (vendor.id !== 'unknown') {
|
|
1170
|
+
// Known model house, logo asset not in public/vendors/
|
|
1171
|
+
// yet — vendor-tinted monogram stands in.
|
|
1172
|
+
return (
|
|
1173
|
+
<>
|
|
1174
|
+
<circle cx={pos.x} cy={pos.y} r={ar} fill={vendor.mono.bg} stroke={vendor.mono.ring} strokeWidth="1" />
|
|
1175
|
+
<text
|
|
1176
|
+
x={pos.x} y={pos.y} dy="0.34em" textAnchor="middle"
|
|
1177
|
+
fill={vendor.mono.text} fontSize={ar}
|
|
1178
|
+
fontFamily="monospace" fontWeight="700"
|
|
1179
|
+
>
|
|
1180
|
+
{vendor.initial}
|
|
1181
|
+
</text>
|
|
1182
|
+
</>
|
|
1183
|
+
);
|
|
1184
|
+
}
|
|
888
1185
|
// Round 106 (issue #83): hue keyed to the prefix group,
|
|
889
|
-
// not the full alias — every 通信* node shares one color
|
|
890
|
-
// every 研究员* another, so teams cluster visually even
|
|
891
|
-
// when the tier layout spreads them across rings.
|
|
1186
|
+
// not the full alias — every 通信* node shares one color.
|
|
892
1187
|
const c = aliasAvatarColors(groupKeys[session.alias] || session.alias);
|
|
893
|
-
const fs = isOnline ? 14 : 10;
|
|
894
1188
|
return (
|
|
895
1189
|
<>
|
|
896
1190
|
<circle cx={pos.x} cy={pos.y} r={ar} fill={c.bg} stroke={c.ring} strokeWidth="1" />
|
|
@@ -900,7 +1194,7 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
900
1194
|
dy="0.34em"
|
|
901
1195
|
textAnchor="middle"
|
|
902
1196
|
fill={c.text}
|
|
903
|
-
fontSize={
|
|
1197
|
+
fontSize={ar}
|
|
904
1198
|
fontFamily="monospace"
|
|
905
1199
|
fontWeight="700"
|
|
906
1200
|
>
|
|
@@ -909,12 +1203,32 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
909
1203
|
</>
|
|
910
1204
|
);
|
|
911
1205
|
})()}
|
|
1206
|
+
{/* Issue #96: runtime badge — small corner glyph marking the
|
|
1207
|
+
execution shell (CLI / SDK / HTTP API). Sits bottom-right
|
|
1208
|
+
of the avatar; colours kept off the working/idle/offline
|
|
1209
|
+
status hues. Absent when the node reports no runtime. */}
|
|
1210
|
+
{(() => {
|
|
1211
|
+
const rt = runtimeIdentity(session.runtime);
|
|
1212
|
+
if (!rt) return null;
|
|
1213
|
+
const br = isOnline ? 7 : 5.5;
|
|
1214
|
+
const bx = pos.x + radius * 0.72;
|
|
1215
|
+
const by = pos.y + radius * 0.72;
|
|
1216
|
+
const icon = br * 2 * 0.62;
|
|
1217
|
+
return (
|
|
1218
|
+
<g style={{ pointerEvents: 'none' }}>
|
|
1219
|
+
<circle cx={bx} cy={by} r={br} fill={pal.containerBg} stroke={rt.color} strokeWidth="1.5" />
|
|
1220
|
+
<g transform={`translate(${bx - icon / 2} ${by - icon / 2}) scale(${icon / 24})`}>
|
|
1221
|
+
<path d={rt.iconPath} fill="none" stroke={rt.color} strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round" />
|
|
1222
|
+
</g>
|
|
1223
|
+
</g>
|
|
1224
|
+
);
|
|
1225
|
+
})()}
|
|
912
1226
|
{session.status === 'working' && (
|
|
913
1227
|
// working pulse — small dot just inside the status ring,
|
|
914
1228
|
// above the avatar text. Was a 18px horizontal bar at
|
|
915
1229
|
// y+11 which now collides with the avatar; the dot reads
|
|
916
1230
|
// as the same "active" cue without occluding the initial.
|
|
917
|
-
<circle cx={pos.x} cy={pos.y - (
|
|
1231
|
+
<circle cx={pos.x} cy={pos.y - (radius - 6)} r="2.5" fill={pal.flowParticle}>
|
|
918
1232
|
<animate attributeName="opacity" values="1;0.25;1" dur="1.1s" repeatCount="indefinite" />
|
|
919
1233
|
</circle>
|
|
920
1234
|
)}
|
|
@@ -955,29 +1269,37 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
955
1269
|
);
|
|
956
1270
|
})}
|
|
957
1271
|
|
|
1272
|
+
</g>
|
|
1273
|
+
|
|
1274
|
+
{/* #112: overlay panels (recent-signal + legend) render OUTSIDE the
|
|
1275
|
+
zoom/pan <g> so they stay fixed while the topology pans/zooms.
|
|
1276
|
+
They're sized + tucked into the top corners so every corner of
|
|
1277
|
+
each panel is >325px from the canvas centre — i.e. fully outside
|
|
1278
|
+
the outermost (offline) ring. No node on any ring can reach the
|
|
1279
|
+
corner triangles, so the panels never overlap a node, in ring
|
|
1280
|
+
OR grid layout (Vincent 4727 zero-overlap criterion). */}
|
|
958
1281
|
{/* latest flow labels */}
|
|
959
|
-
<g transform="translate(
|
|
960
|
-
<rect x="0" y="0" width="
|
|
961
|
-
<text x="
|
|
962
|
-
<text x="
|
|
963
|
-
{flowLinks.slice(0,
|
|
964
|
-
<text key={link.key} x="
|
|
965
|
-
{truncate(link.from,
|
|
1282
|
+
<g transform="translate(16, 16)">
|
|
1283
|
+
<rect x="0" y="0" width="230" height="84" rx="10" fill={pal.legendBox.fill} stroke={pal.legendBox.stroke} opacity={isLight ? 0.97 : 0.92} />
|
|
1284
|
+
<text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700">recent signal</text>
|
|
1285
|
+
<text x="150" y="21" fill={pal.legendAccent} fontSize="10" fontFamily="monospace">{messages.length} msgs</text>
|
|
1286
|
+
{flowLinks.slice(0, 3).map((link, index) => (
|
|
1287
|
+
<text key={link.key} x="13" y={38 + index * 16} fill={pal.legendText} fontSize="9" fontFamily="monospace">
|
|
1288
|
+
{truncate(link.from, 6)} {'->'} {truncate(link.to, 6)} / {link.count} / {truncate(link.content, 12)}
|
|
966
1289
|
</text>
|
|
967
1290
|
))}
|
|
968
1291
|
</g>
|
|
969
1292
|
|
|
970
1293
|
{/* legend */}
|
|
971
|
-
<g transform="translate(
|
|
972
|
-
<rect x="0" y="0" width="
|
|
973
|
-
<circle cx="
|
|
974
|
-
<text x="
|
|
975
|
-
<circle cx="
|
|
976
|
-
<text x="
|
|
977
|
-
<circle cx="
|
|
978
|
-
<text x="
|
|
979
|
-
<path d="
|
|
980
|
-
</g>
|
|
1294
|
+
<g transform="translate(760, 16)">
|
|
1295
|
+
<rect x="0" y="0" width="224" height="96" rx="10" fill={pal.legendBox.fill} stroke={pal.legendBox.stroke} opacity={isLight ? 0.97 : 0.92} />
|
|
1296
|
+
<circle cx="16" cy="24" r="5.5" fill={isLight ? '#059669' : '#22c55e'} />
|
|
1297
|
+
<text x="30" y="28" fill={pal.legendText} fontSize="11" fontFamily="monospace">working node</text>
|
|
1298
|
+
<circle cx="16" cy="48" r="5.5" fill={isLight ? '#0d9488' : '#2dd4bf'} />
|
|
1299
|
+
<text x="30" y="52" fill={pal.legendText} fontSize="11" fontFamily="monospace">online idle</text>
|
|
1300
|
+
<circle cx="16" cy="72" r="5.5" fill={isLight ? '#94a3b8' : '#6b7280'} />
|
|
1301
|
+
<text x="30" y="76" fill={pal.legendText} fontSize="11" fontFamily="monospace">offline / no SSE</text>
|
|
1302
|
+
<path d="M140,72 Q164,48 196,72" fill="none" stroke={pal.flowEdge} strokeWidth="3" markerEnd="url(#topo-arrow)" />
|
|
981
1303
|
</g>
|
|
982
1304
|
</svg>
|
|
983
1305
|
|
|
@@ -988,6 +1310,26 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
988
1310
|
Split into a plain % readout + an explicit reset button with
|
|
989
1311
|
its own icon + tooltip. */}
|
|
990
1312
|
<div className="absolute bottom-3 right-3 flex items-center gap-1.5 text-xs select-none">
|
|
1313
|
+
{/* #113: node size — S / M / L segmented control (Vincent 4727). */}
|
|
1314
|
+
<div
|
|
1315
|
+
className="flex items-center rounded-md border overflow-hidden"
|
|
1316
|
+
style={{ background: pal.legendBox.fill, borderColor: pal.containerBorder }}
|
|
1317
|
+
role="group"
|
|
1318
|
+
aria-label="Node size"
|
|
1319
|
+
>
|
|
1320
|
+
{([['S', 0.7], ['M', 0.84], ['L', 1]] as const).map(([lbl, v], idx) => (
|
|
1321
|
+
<button
|
|
1322
|
+
key={lbl}
|
|
1323
|
+
onClick={() => pickNodeScale(v)}
|
|
1324
|
+
aria-pressed={nodeScale === v}
|
|
1325
|
+
title={`Node size: ${lbl === 'S' ? 'small' : lbl === 'M' ? 'medium' : 'large'}`}
|
|
1326
|
+
className={`px-2 py-1 transition-colors ${idx > 0 ? 'border-l' : ''} ${nodeScale === v ? 'bg-cyan-500/15 text-cyan-300' : 'hover:bg-white/5'}`}
|
|
1327
|
+
style={{ color: nodeScale === v ? undefined : pal.legendText, borderColor: pal.containerBorder }}
|
|
1328
|
+
>
|
|
1329
|
+
{lbl}
|
|
1330
|
+
</button>
|
|
1331
|
+
))}
|
|
1332
|
+
</div>
|
|
991
1333
|
<div
|
|
992
1334
|
className="flex items-center rounded-md border overflow-hidden"
|
|
993
1335
|
style={{ background: pal.legendBox.fill, borderColor: pal.containerBorder }}
|
|
@@ -1046,14 +1388,17 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
|
|
|
1046
1388
|
)}
|
|
1047
1389
|
</button>
|
|
1048
1390
|
</div>
|
|
1049
|
-
</div>
|
|
1050
1391
|
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1392
|
+
{/* Issue #100/#106: draggable, resizable singleton chat popover.
|
|
1393
|
+
position:fixed so it floats above the page (overflow-hidden here
|
|
1394
|
+
doesn't clip fixed children). Rendered *inside* the container so
|
|
1395
|
+
that when the graph goes fullscreen (#81) the popover joins the
|
|
1396
|
+
fullscreen subtree and stays visible — a sibling render would be
|
|
1397
|
+
outside the fullscreened element and disappear. */}
|
|
1398
|
+
{chatAlias && (
|
|
1399
|
+
<ChatPopover alias={chatAlias} onClose={() => setChatAlias(null)} />
|
|
1400
|
+
)}
|
|
1401
|
+
</div>
|
|
1057
1402
|
</section>
|
|
1058
1403
|
);
|
|
1059
1404
|
}
|