@sleep2agi/agent-network-dashboard 0.6.3-preview.0 → 0.6.3-preview.2
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_COMMIT +1 -0
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +3 -0
- package/.next/build/chunks/{0eys_0hzxj57._.js → 0emd_0_wlp72._.js} +167 -167
- package/.next/build/chunks/0emd_0_wlp72._.js.map +47 -0
- package/.next/build/chunks/{[root-of-the-server]__0jzknqm._.js → [root-of-the-server]__0cyvgtf._.js} +7 -7
- package/.next/build/chunks/{[root-of-the-server]__0jzknqm._.js.map → [root-of-the-server]__0cyvgtf._.js.map} +2 -2
- package/.next/build/chunks/{[root-of-the-server]__02~~60i._.js → [root-of-the-server]__0z.4hvh._.js} +3 -3
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0ji7sn2._.js +13 -0
- package/.next/build/postcss.js +4 -4
- package/.next/build-manifest.json +8 -8
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +168 -168
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +2 -2
- package/.next/required-server-files.json +2 -2
- package/.next/routes-manifest.json +18 -0
- 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 +13 -13
- package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/admin.segments/_full.segment.rsc +15 -15
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +8 -8
- 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/anet/node-config/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/anet/node-config/route/build-manifest.json +9 -0
- package/.next/server/app/api/anet/node-config/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/anet/node-config/route.js +7 -0
- package/.next/server/app/api/anet/node-config/route.js.map +5 -0
- package/.next/server/app/api/anet/node-config/route.js.nft.json +1 -0
- package/.next/server/app/api/anet/node-config/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/anet/node-create/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/anet/node-create/route/build-manifest.json +9 -0
- package/.next/server/app/api/anet/node-create/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/anet/node-create/route.js +7 -0
- package/.next/server/app/api/anet/node-create/route.js.map +5 -0
- package/.next/server/app/api/anet/node-create/route.js.nft.json +1 -0
- package/.next/server/app/api/anet/node-create/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/anet/node-lifecycle/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/anet/node-lifecycle/route/build-manifest.json +9 -0
- package/.next/server/app/api/anet/node-lifecycle/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/anet/node-lifecycle/route.js +7 -0
- package/.next/server/app/api/anet/node-lifecycle/route.js.map +5 -0
- package/.next/server/app/api/anet/node-lifecycle/route.js.nft.json +1 -0
- package/.next/server/app/api/anet/node-lifecycle/route_client-reference-manifest.js +3 -0
- 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/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/[hostname]/agents/route.js +6 -6
- package/.next/server/app/api/hub/server/[hostname]/agents/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/server/[hostname]/health/route.js +6 -6
- package/.next/server/app/api/hub/server/[hostname]/health/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/servers/route.js +6 -6
- package/.next/server/app/api/hub/servers/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/api/hub/upload/route.js +6 -6
- package/.next/server/app/api/hub/upload/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 +15 -15
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/login.segments/_full.segment.rsc +15 -15
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/logs.segments/_full.segment.rsc +15 -15
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +8 -8
- 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/manifest.webmanifest/route.js +6 -6
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- 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 +15 -15
- package/.next/server/app/messages.segments/_full.segment.rsc +15 -15
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/node.segments/_full.segment.rsc +15 -15
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/nodes.segments/_full.segment.rsc +15 -15
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/server-logs.segments/_full.segment.rsc +15 -15
- package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/_index.segment.rsc +8 -8
- 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/servers/page/build-manifest.json +5 -5
- package/.next/server/app/servers/page/next-font-manifest.json +1 -1
- package/.next/server/app/servers/page.js +13 -13
- package/.next/server/app/servers/page.js.nft.json +1 -1
- package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/servers.html +2 -2
- package/.next/server/app/servers.rsc +15 -15
- package/.next/server/app/servers.segments/_full.segment.rsc +15 -15
- package/.next/server/app/servers.segments/_head.segment.rsc +4 -4
- package/.next/server/app/servers.segments/_index.segment.rsc +8 -8
- package/.next/server/app/servers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/servers.segments/servers.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 +15 -15
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/settings.segments/_full.segment.rsc +15 -15
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
- 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 +15 -15
- package/.next/server/app/tasks.segments/_full.segment.rsc +15 -15
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +8 -8
- 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/app-paths-manifest.json +3 -0
- package/.next/server/chunks/0emd_next_0zjoz0g._.js +10 -0
- package/.next/server/chunks/0emd_next_0zjoz0g._.js.map +1 -0
- package/.next/server/chunks/0emd_next_dist_07_njzq._.js +18 -0
- package/.next/server/chunks/0emd_next_dist_07_njzq._.js.map +1 -0
- package/.next/server/chunks/0emd_next_dist_esm_build_templates_app-route_0ze.4~8.js +3 -0
- package/.next/server/chunks/0emd_next_dist_esm_build_templates_app-route_0ze.4~8.js.map +1 -0
- package/.next/server/chunks/0eys__next-internal_server_app_api_anet_node-config_route_actions_0vpbqmt.js +3 -0
- package/.next/server/chunks/0eys__next-internal_server_app_api_anet_node-create_route_actions_0ack5_x.js +3 -0
- package/.next/server/chunks/0eys__next-internal_server_app_api_anet_node-lifecycle_route_actions_13z6pk9.js +3 -0
- package/.next/server/chunks/0eys__next-internal_server_app_api_hub_server-logs_route_actions_13k0lzq.js +3 -0
- package/.next/server/chunks/0eys__next-internal_server_app_api_hub_task-events_route_actions_0eayccx.js +3 -0
- package/.next/server/chunks/0eys__next-internal_server_app_manifest_webmanifest_route_actions_03s5neg.js +3 -0
- package/.next/server/chunks/0raa_next-internal_server_app_api_hub_server_[hostname]_agents_route_actions_0q9dcjz.js +3 -0
- package/.next/server/chunks/0raa_next-internal_server_app_api_hub_server_[hostname]_health_route_actions_0s8k6m..js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-jphjp._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__0-jphjp._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0-po71t._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-po71t._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0.5kg~w._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0.5kg~w._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0._v9vf._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__01cxv~5._.js.map → [root-of-the-server]__0._v9vf._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__00gb0kv._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0fk~j-f._.js.map → [root-of-the-server]__00gb0kv._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__013ptvb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__013ptvb._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__03c6cit._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__03c6cit._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__04a200m._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0p77uu0._.js.map → [root-of-the-server]__04a200m._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__05494tj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05494tj._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__065pywy._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__065pywy._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__07kt6aj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07kt6aj._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__07x377i._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07x377i._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0anx8ak._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0anx8ak._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0dqs1t5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dqs1t5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0efa-e~._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0efa-e~._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0eonvri._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0eonvri._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0f5-nhl._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0t-zv8i._.js.map → [root-of-the-server]__0f5-nhl._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0f~mkgn._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0f~mkgn._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0go6s0b._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0r.6ku0._.js.map → [root-of-the-server]__0go6s0b._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ixnvi-._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0ncl1y5._.js.map → [root-of-the-server]__0ixnvi-._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0jlzmrm._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0jlzmrm._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0k-0~jy._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0k-0~jy._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0kalz0~._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0kalz0~._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ksm0bm._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ksm0bm._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0lcdg4r._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0lcdg4r._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0lud1_2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0lud1_2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0n__sw5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0n__sw5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ocd-7~._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ocd-7~._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0osz.5l._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__117_h7d._.js.map → [root-of-the-server]__0osz.5l._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0uc.~eb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0uc.~eb._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0z~3-vx._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0z~3-vx._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0z~50bw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0z~50bw._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__10z4o-.._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10z4o-.._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__11swhm2._.js +20 -0
- package/.next/server/chunks/[root-of-the-server]__11swhm2._.js.map +1 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_anet_config_route_actions_0eb-2a9.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_auth_login_route_actions_0_0zk8~.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_auth_logout_route_actions_0yy6u4n.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_auth_v3_route_actions_09dg3rk.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_audit-log_route_actions_03wia4o.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_auth_route_actions_0k.l0a-.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_broadcast_route_actions_02wotps.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_events_route_actions_0i1zyq~.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_health_route_actions_0fe6lsz.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_inbox_route_actions_0iup.xe.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_messages_route_actions_0syf65m.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_networks_route_actions_04dtp_m.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_nodes_route_actions_0aghuq9.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_register_route_actions_04g3.gx.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_send_route_actions_01m4__p.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_servers_route_actions_10lz59w.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_session_route_actions_03ce57x.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_stats_route_actions_0~xcq1-.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_status_route_actions_0slss8r.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_tasks_route_actions_0yvhaa_.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_tmux_route_actions_0_f8h.h.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_tokens_route_actions_0ke~8y8.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_api_hub_upload_route_actions_02jnx8r.js +3 -0
- package/.next/server/chunks/dash-main-prep__next-internal_server_app_favicon_ico_route_actions_09bgfok.js +3 -0
- package/.next/server/chunks/ssr/0emd_047jqdj._.js +33 -0
- package/.next/server/chunks/ssr/0emd_047jqdj._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_06kedq-._.js +3 -0
- package/.next/server/chunks/ssr/0emd_06kedq-._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_0_26t76._.js +3 -0
- package/.next/server/chunks/ssr/0emd_0_26t76._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_13t5_lo._.js +3 -0
- package/.next/server/chunks/ssr/0emd_13t5_lo._.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_0_~e226._.js → 0emd_next_0bnhxgq._.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_0bnhxgq._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_00jgl6k._.js +6 -0
- package/.next/server/chunks/ssr/0emd_next_dist_00jgl6k._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_00j7vwk._.js +3 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_00j7vwk._.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_forbidden_1087x.v.js +3 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_forbidden_1087x.v.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_global-error_0qrbd.p.js +3 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_global-error_0qrbd.p.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_unauthorized_0~qxw.r.js +3 -0
- package/.next/server/chunks/ssr/0emd_next_dist_client_components_builtin_unauthorized_0~qxw.r.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_038w~o4.js → 0emd_next_dist_esm_build_templates_app-page_0.3fpy_.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0.3fpy_.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0gg19s6.js → 0emd_next_dist_esm_build_templates_app-page_016_j7..js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_016_j7..js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0q4gvif.js → 0emd_next_dist_esm_build_templates_app-page_06x82hl.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_06x82hl.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0unqv4v.js → 0emd_next_dist_esm_build_templates_app-page_0c0fklb.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0c0fklb.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0j5dp2i.js +4 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0j5dp2i.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0kgge41.js +4 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0kgge41.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_097i4vb.js → 0emd_next_dist_esm_build_templates_app-page_0ospxq4.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0ospxq4.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0otan.0.js → 0emd_next_dist_esm_build_templates_app-page_0oz02hy.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0oz02hy.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0g0ea16.js → 0emd_next_dist_esm_build_templates_app-page_0r4~r~z.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0r4~r~z.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0ikgf-7.js → 0emd_next_dist_esm_build_templates_app-page_0rjp8.q.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0rjp8.q.js.map +1 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0tqydx2.js +4 -0
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0tqydx2.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0s.as54.js → 0emd_next_dist_esm_build_templates_app-page_0u.fjk1.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0u.fjk1.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_10~-.q1.js → 0emd_next_dist_esm_build_templates_app-page_0v3so27.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0v3so27.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0t88_uc.js → 0emd_next_dist_esm_build_templates_app-page_0xikgs1.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_0xikgs1.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0xry76m.js → 0emd_next_dist_esm_build_templates_app-page_10jwiid.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_10jwiid.js.map +1 -0
- package/.next/server/chunks/ssr/{0eys_next_dist_esm_build_templates_app-page_0fy2_ot.js → 0emd_next_dist_esm_build_templates_app-page_133cpo2.js} +3 -3
- package/.next/server/chunks/ssr/0emd_next_dist_esm_build_templates_app-page_133cpo2.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00c-m~h._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00c-m~h._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00t8yko._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00t8yko._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02e9x~u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02e9x~u._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0337u7~._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0337u7~._.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0.bq9qd._.js → [root-of-the-server]__0342o.i._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0342o.i._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__03mvbey._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__03mvbey._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_nj.h9._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_nj.h9._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a..bh5._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a..bh5._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bhrs1j._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bhrs1j._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c1te6d._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c1te6d._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cbfccb._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cbfccb._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dog1cm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dog1cm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ei826c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ei826c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0es3uv3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0es3uv3._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0j5c4hr._.js +8 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0j5c4hr._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0otzd58._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0otzd58._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ppvi5_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ppvi5_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~jybs._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~jybs._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0utp0~w._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0utp0~w._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0x7j2o1._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0x7j2o1._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0yacr~n._.js +6 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0xsrxaq._.js.map → [root-of-the-server]__0yacr~n._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0~jfwze._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~jfwze._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~zzavb._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~zzavb._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__12oz5~2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__12oz5~2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__13ti3mc._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__13ti3mc._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_03jozqe._.js → dash-main-prep_04jom44._.js} +3 -3
- package/.next/server/chunks/ssr/dash-main-prep_04jom44._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app__global-error_page_actions_07kk3nm.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app__not-found_page_actions_0cb6n8e.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_admin_page_actions_0whq~om.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_login_page_actions_0lfb5vh.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_logs_page_actions_0a9g2gh.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_messages_page_actions_0_0a~oj.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_node_page_actions_0nt83da.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_nodes_page_actions_001898j.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_page_actions_10t6_cb.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_server-logs_page_actions_10i2y0v.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_servers_page_actions_0yfsnrz.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_settings_networks_page_actions_0.6z6e9.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_settings_page_actions_0t_etc1.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_settings_tokens_page_actions_0g~ilh~.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_settings_tokens_page_actions_0g~ilh~.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_tasks_[id]_page_actions_0jc~43n.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_tasks_[id]_page_actions_0jc~43n.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_tasks_page_actions_0k0da_-.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep__next-internal_server_app_tasks_page_actions_0k0da_-.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0-ei3ea._.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0-ei3ea._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_01r5cp-._.js → dash-main-prep_app_00xe5ww._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_00xe5ww._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_0heiqx4._.js → dash-main-prep_app_02jbzgm._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_02jbzgm._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_0r.6wo3._.js → dash-main-prep_app_0_8.j.9._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_0_8.j.9._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0em9eg-._.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0em9eg-._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_0415ugh._.js → dash-main-prep_app_0l5pr3q._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_0l5pr3q._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0vx7mgv._.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_0vx7mgv._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_07ks..b._.js → dash-main-prep_app_0z7jy81._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_0z7jy81._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_0.xbj-j._.js → dash-main-prep_app_0~~c86p._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_0~~c86p._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_0ict6f_._.js → dash-main-prep_app_105mjhx._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_105mjhx._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_components_0l8tz~8._.js → dash-main-prep_app_components_0p9bpx_._.js} +3 -3
- package/.next/server/chunks/ssr/dash-main-prep_app_components_0p9bpx_._.js.map +1 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_nodes_page_tsx_0k20g4a._.js +3 -0
- package/.next/server/chunks/ssr/dash-main-prep_app_nodes_page_tsx_0k20g4a._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_servers_page_tsx_0gjg_-r._.js → dash-main-prep_app_servers_page_tsx_0zrm2-z._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_servers_page_tsx_0zrm2-z._.js.map +1 -0
- package/.next/server/chunks/ssr/{p248-dash-release_app_tasks_page_tsx_0qdyj8l._.js → dash-main-prep_app_tasks_page_tsx_013t47c._.js} +2 -2
- package/.next/server/chunks/ssr/dash-main-prep_app_tasks_page_tsx_013t47c._.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 +15 -15
- 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..6bvayc~2v_.js +31 -0
- package/.next/static/chunks/0.4it~9-lgmdc.js +7 -0
- package/.next/static/chunks/008f8y0vjzx6q.js +1 -0
- package/.next/static/chunks/026_lvbjd5ehm.js +1 -0
- package/.next/static/chunks/038w1~wz8c.b_.js +1 -0
- package/.next/static/chunks/04ab~m7-c0hma.js +1 -0
- package/.next/static/chunks/05n6g8whg1rnw.js +4 -0
- package/.next/static/chunks/074qn1p5esp6v.js +1 -0
- package/.next/static/chunks/{11c-24vhb~5d5.js → 0_eh6-xnv.vas.js} +1 -1
- package/.next/static/chunks/0_q1lcvifkup1.js +4 -0
- package/.next/static/chunks/0cj3regqtbzgi.js +1 -0
- package/.next/static/chunks/{0u6y82jjwp2k_.js → 0e.5fp53g~gjx.js} +1 -1
- package/.next/static/chunks/{0f1nxmo-ba2au.js → 0fval~_yhzi56.js} +1 -1
- package/.next/static/chunks/0g76.rws7jb6p.js +4 -0
- package/.next/static/chunks/0lfg~2g8_-82b.js +1 -0
- package/.next/static/chunks/{0e~mf5-e4dl_e.js → 0n5d~z6jskv75.js} +1 -1
- package/.next/static/chunks/{0655qv_ed4zqk.js → 0nvbpp15hjh1k.js} +1 -1
- package/.next/static/chunks/0p..-4gjx~ua~.css +1 -0
- package/.next/static/chunks/{0td.dx.r1h_nl.js → 0r5q0e.lci5bj.js} +2 -2
- package/.next/static/chunks/0u5kv-8r.53y_.js +1 -0
- package/.next/static/chunks/0uroeke.37_qr.js +1 -0
- package/.next/static/chunks/0w66-7icvft37.js +2 -0
- package/.next/static/chunks/0w8djdzyh1ar0.js +1 -0
- package/.next/static/chunks/0wikbewneplt6.js +1 -0
- package/.next/static/chunks/0zozgpnx9_ex_.js +1 -0
- package/.next/static/chunks/135hvx8t2m~5~.js +1 -0
- package/.next/static/chunks/turbopack-1071etkj.k-n~.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +4 -1
- package/.next/types/validator.ts +27 -0
- package/app/api/anet/node-config/route.ts +140 -0
- package/app/api/anet/node-create/route.ts +174 -0
- package/app/api/anet/node-lifecycle/route.ts +108 -0
- package/app/components/AgentCard.tsx +33 -3
- package/app/components/CreateNodeWizard.tsx +288 -0
- package/app/components/NodeSettingsPanel.tsx +695 -0
- package/app/lib/hub-mcp.ts +94 -0
- package/app/nodes/page.tsx +17 -1
- package/package.json +2 -1
- package/.next/build/chunks/0eys_0hzxj57._.js.map +0 -47
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0f_tr7e._.js +0 -13
- package/.next/server/chunks/0ctr__next-internal_server_app_api_anet_config_route_actions_0vfnpq~.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_auth_logout_route_actions_0mnkdb1.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_audit-log_route_actions_01da9km.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_broadcast_route_actions_0-mzp~m.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_messages_route_actions_0yqdey-.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_networks_route_actions_08zwxgz.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_register_route_actions_059ib7..js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_server-logs_route_actions_0.lpvmu.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_servers_route_actions_0n9er6w.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_session_route_actions_0clahzh.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_api_hub_task-events_route_actions_0eupv~7.js +0 -3
- package/.next/server/chunks/0ctr__next-internal_server_app_manifest_webmanifest_route_actions_0zwabxo.js +0 -3
- package/.next/server/chunks/0eys_next_0qdv7h5._.js +0 -10
- package/.next/server/chunks/0eys_next_0qdv7h5._.js.map +0 -1
- package/.next/server/chunks/0eys_next_dist_0k3eipb._.js +0 -18
- package/.next/server/chunks/0eys_next_dist_0k3eipb._.js.map +0 -1
- package/.next/server/chunks/0eys_next_dist_esm_build_templates_app-route_0squ2oo.js +0 -3
- package/.next/server/chunks/0eys_next_dist_esm_build_templates_app-route_0squ2oo.js.map +0 -1
- package/.next/server/chunks/0n8__next-internal_server_app_api_hub_server_[hostname]_agents_route_actions_0td~w-3.js +0 -3
- package/.next/server/chunks/0n8__next-internal_server_app_api_hub_server_[hostname]_health_route_actions_0-cx2k4.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0030c3d._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0030c3d._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__006ofg~._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__006ofg~._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__00hv4s.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__00hv4s.._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__01cxv~5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__03kos9q._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__03kos9q._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__03oze7j._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__03oze7j._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__04cd_-f._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__04cd_-f._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__04g4e2s._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__04g4e2s._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__06gsfmz._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__06gsfmz._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__06ze71n._.js +0 -6
- package/.next/server/chunks/[root-of-the-server]__06ze71n._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0afgpqa._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0afgpqa._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0c36sc~._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0c36sc~._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0ef15nv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ef15nv._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0fk~j-f._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0jd4sw5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0jd4sw5._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0kp05ch._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0kp05ch._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0ncl1y5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0p77uu0._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0q5wxvv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0q5wxvv._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0q9lm4b._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0q9lm4b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0qygdtt._.js +0 -20
- package/.next/server/chunks/[root-of-the-server]__0qygdtt._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0r.6ku0._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0r9rxeu._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0r9rxeu._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0sk08ba._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0sk08ba._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0t-zv8i._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ucvqha._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ucvqha._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0wrd5yg._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0wrd5yg._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0xyksgx._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0xyksgx._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0zy55xw._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0zy55xw._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0~7jz1t._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0~7jz1t._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__117_h7d._.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_auth_login_route_actions_0p0o8hb.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_auth_v3_route_actions_0gygcdb.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_auth_route_actions_0qldbc..js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_events_route_actions_0dif~y4.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_health_route_actions_006d2v..js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_inbox_route_actions_0hzbelp.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_nodes_route_actions_0.v335w.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_send_route_actions_0-c6c80.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_stats_route_actions_10r2dnb.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_status_route_actions_029-bam.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_tasks_route_actions_03j_ebz.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_tmux_route_actions_0w~1rqo.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_tokens_route_actions_0u1pfzb.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_api_hub_upload_route_actions_0n4mpaq.js +0 -3
- package/.next/server/chunks/p248-dash-release__next-internal_server_app_favicon_ico_route_actions_0upntbn.js +0 -3
- package/.next/server/chunks/ssr/0ctr__next-internal_server_app_settings_networks_page_actions_0722nti.js +0 -3
- package/.next/server/chunks/ssr/0eys_0.9fypy._.js +0 -3
- package/.next/server/chunks/ssr/0eys_0.9fypy._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_0cilv2n._.js +0 -3
- package/.next/server/chunks/ssr/0eys_0cilv2n._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_0o_uhv8._.js +0 -33
- package/.next/server/chunks/ssr/0eys_0o_uhv8._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_0v03z7d._.js +0 -3
- package/.next/server/chunks/ssr/0eys_0v03z7d._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_0_~e226._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_0temmfx._.js +0 -6
- package/.next/server/chunks/ssr/0eys_next_dist_0temmfx._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_0j3h5if._.js +0 -3
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_0j3h5if._.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_forbidden_0h3lxo-.js +0 -3
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_forbidden_0h3lxo-.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_global-error_05on~t..js +0 -3
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_global-error_05on~t..js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_unauthorized_0jjp4gf.js +0 -3
- package/.next/server/chunks/ssr/0eys_next_dist_client_components_builtin_unauthorized_0jjp4gf.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0-rhsex.js +0 -4
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0-rhsex.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_038w~o4.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_097i4vb.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0fy2_ot.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0g0ea16.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0gg19s6.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0ikgf-7.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0otan.0.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0q4gvif.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0s.as54.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0t88_uc.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0unqv4v.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0vrz6hg.js +0 -4
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0vrz6hg.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0xb3.u..js +0 -4
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0xb3.u..js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_0xry76m.js.map +0 -1
- package/.next/server/chunks/ssr/0eys_next_dist_esm_build_templates_app-page_10~-.q1.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0.bq9qd._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0.p4.9p._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0.p4.9p._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__02e2~_p._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02e2~_p._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__07iv~-v._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__07iv~-v._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__08c1l7e._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__08c1l7e._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__09tg-yx._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__09tg-yx._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__09wz11l._.js +0 -19
- package/.next/server/chunks/ssr/[root-of-the-server]__09wz11l._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0c0po7z._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0c0po7z._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0c~slby._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0c~slby._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0dhdbz9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0dhdbz9._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0j_fyz7._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0j_fyz7._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0jsgoje._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0jsgoje._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0k2x-ou._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0k2x-ou._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0mwy~nq._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0mwy~nq._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ni6cq0._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ni6cq0._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ny5rkb._.js +0 -8
- package/.next/server/chunks/ssr/[root-of-the-server]__0ny5rkb._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0oj.su5._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0oj.su5._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0q0h5.4._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0q0h5.4._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0se0pbf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0se0pbf._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tb8onm._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0tb8onm._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0wm_kxh._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0wm_kxh._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0wt_.5g._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0wt_.5g._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xmwsru._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xmwsru._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xsrxaq._.js +0 -6
- package/.next/server/chunks/ssr/[root-of-the-server]__0z12w52._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0z12w52._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_03jozqe._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app__global-error_page_actions_0-_psx0.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app__not-found_page_actions_0ab90fb.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_admin_page_actions_0-3dd6g.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_login_page_actions_0cxgr5r.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_logs_page_actions_13ncn5w.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_messages_page_actions_03eny7a.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_node_page_actions_01g~v8e.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_nodes_page_actions_0rp9d.z.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_page_actions_12.zc2x.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_server-logs_page_actions_12.~xmh.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_servers_page_actions_01fbube.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_settings_page_actions_049o_zl.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_settings_tokens_page_actions_0kwlo85.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_tasks_[id]_page_actions_0gaayz2.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release__next-internal_server_app_tasks_page_actions_05-6rq9.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release_app_0.xbj-j._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_01r5cp-._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0415ugh._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_07ks..b._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_08-_z~z._.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release_app_08-_z~z._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0heiqx4._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0ict6f_._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0m1nag5._.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release_app_0m1nag5._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0me0gyz._.js +0 -3
- package/.next/server/chunks/ssr/p248-dash-release_app_0me0gyz._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_0r.6wo3._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_components_0l8tz~8._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_servers_page_tsx_0gjg_-r._.js.map +0 -1
- package/.next/server/chunks/ssr/p248-dash-release_app_tasks_page_tsx_0qdyj8l._.js.map +0 -1
- package/.next/static/chunks/0-.8ljnci668r.js +0 -4
- package/.next/static/chunks/0-wn37qh25iv8.js +0 -4
- package/.next/static/chunks/01rl0zgit9fpi.js +0 -1
- package/.next/static/chunks/03hid7at2hts9.js +0 -1
- package/.next/static/chunks/04z~zcny7e-hu.js +0 -1
- package/.next/static/chunks/097dcrj-frket.js +0 -1
- package/.next/static/chunks/0_b1~xhhddi_..js +0 -2
- package/.next/static/chunks/0cip10~ax7ih8.js +0 -1
- package/.next/static/chunks/0fgpa9eurf21a.js +0 -4
- package/.next/static/chunks/0fjr78ak.7m7k.js +0 -1
- package/.next/static/chunks/0hy~u-wxdvw2u.js +0 -1
- package/.next/static/chunks/0i_zf1gx2iz9e.js +0 -1
- package/.next/static/chunks/0kgcx1x2p~.3f.js +0 -31
- package/.next/static/chunks/0my4koa~eoc3m.js +0 -1
- package/.next/static/chunks/0oa_op0qrdcyz.js +0 -1
- package/.next/static/chunks/0po5q8_1xmof_.js +0 -1
- package/.next/static/chunks/0t_ctpqz4qkkt.css +0 -1
- package/.next/static/chunks/105_kfixakoke.js +0 -7
- package/.next/static/chunks/137i49j2u~mpw.js +0 -1
- package/.next/static/chunks/1529ngs_24ts..js +0 -1
- package/.next/static/chunks/turbopack-0yv4qlj-3gvbg.js +0 -1
- package/bun.lock +0 -1663
- /package/.next/build/chunks/{[root-of-the-server]__02~~60i._.js.map → [root-of-the-server]__0z.4hvh._.js.map} +0 -0
- /package/.next/build/chunks/{[turbopack-node]_transforms_postcss_ts_0f_tr7e._.js.map → [turbopack-node]_transforms_postcss_ts_0ji7sn2._.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_anet_config_route_actions_0vfnpq~.js.map → 0eys__next-internal_server_app_api_anet_node-config_route_actions_0vpbqmt.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_auth_logout_route_actions_0mnkdb1.js.map → 0eys__next-internal_server_app_api_anet_node-create_route_actions_0ack5_x.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_audit-log_route_actions_01da9km.js.map → 0eys__next-internal_server_app_api_anet_node-lifecycle_route_actions_13z6pk9.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_broadcast_route_actions_0-mzp~m.js.map → 0eys__next-internal_server_app_api_hub_server-logs_route_actions_13k0lzq.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_messages_route_actions_0yqdey-.js.map → 0eys__next-internal_server_app_api_hub_task-events_route_actions_0eayccx.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_networks_route_actions_08zwxgz.js.map → 0eys__next-internal_server_app_manifest_webmanifest_route_actions_03s5neg.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_register_route_actions_059ib7..js.map → 0raa_next-internal_server_app_api_hub_server_[hostname]_agents_route_actions_0q9dcjz.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_server-logs_route_actions_0.lpvmu.js.map → 0raa_next-internal_server_app_api_hub_server_[hostname]_health_route_actions_0s8k6m..js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_servers_route_actions_0n9er6w.js.map → dash-main-prep__next-internal_server_app_api_anet_config_route_actions_0eb-2a9.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_session_route_actions_0clahzh.js.map → dash-main-prep__next-internal_server_app_api_auth_login_route_actions_0_0zk8~.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_api_hub_task-events_route_actions_0eupv~7.js.map → dash-main-prep__next-internal_server_app_api_auth_logout_route_actions_0yy6u4n.js.map} +0 -0
- /package/.next/server/chunks/{0ctr__next-internal_server_app_manifest_webmanifest_route_actions_0zwabxo.js.map → dash-main-prep__next-internal_server_app_api_auth_v3_route_actions_09dg3rk.js.map} +0 -0
- /package/.next/server/chunks/{0n8__next-internal_server_app_api_hub_server_[hostname]_agents_route_actions_0td~w-3.js.map → dash-main-prep__next-internal_server_app_api_hub_audit-log_route_actions_03wia4o.js.map} +0 -0
- /package/.next/server/chunks/{0n8__next-internal_server_app_api_hub_server_[hostname]_health_route_actions_0-cx2k4.js.map → dash-main-prep__next-internal_server_app_api_hub_auth_route_actions_0k.l0a-.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_auth_login_route_actions_0p0o8hb.js.map → dash-main-prep__next-internal_server_app_api_hub_broadcast_route_actions_02wotps.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_auth_v3_route_actions_0gygcdb.js.map → dash-main-prep__next-internal_server_app_api_hub_events_route_actions_0i1zyq~.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_auth_route_actions_0qldbc..js.map → dash-main-prep__next-internal_server_app_api_hub_health_route_actions_0fe6lsz.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_events_route_actions_0dif~y4.js.map → dash-main-prep__next-internal_server_app_api_hub_inbox_route_actions_0iup.xe.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_health_route_actions_006d2v..js.map → dash-main-prep__next-internal_server_app_api_hub_messages_route_actions_0syf65m.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_inbox_route_actions_0hzbelp.js.map → dash-main-prep__next-internal_server_app_api_hub_networks_route_actions_04dtp_m.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_nodes_route_actions_0.v335w.js.map → dash-main-prep__next-internal_server_app_api_hub_nodes_route_actions_0aghuq9.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_send_route_actions_0-c6c80.js.map → dash-main-prep__next-internal_server_app_api_hub_register_route_actions_04g3.gx.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_stats_route_actions_10r2dnb.js.map → dash-main-prep__next-internal_server_app_api_hub_send_route_actions_01m4__p.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_status_route_actions_029-bam.js.map → dash-main-prep__next-internal_server_app_api_hub_servers_route_actions_10lz59w.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_tasks_route_actions_03j_ebz.js.map → dash-main-prep__next-internal_server_app_api_hub_session_route_actions_03ce57x.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_tmux_route_actions_0w~1rqo.js.map → dash-main-prep__next-internal_server_app_api_hub_stats_route_actions_0~xcq1-.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_tokens_route_actions_0u1pfzb.js.map → dash-main-prep__next-internal_server_app_api_hub_status_route_actions_0slss8r.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_api_hub_upload_route_actions_0n4mpaq.js.map → dash-main-prep__next-internal_server_app_api_hub_tasks_route_actions_0yvhaa_.js.map} +0 -0
- /package/.next/server/chunks/{p248-dash-release__next-internal_server_app_favicon_ico_route_actions_0upntbn.js.map → dash-main-prep__next-internal_server_app_api_hub_tmux_route_actions_0_f8h.h.js.map} +0 -0
- /package/.next/server/chunks/{ssr/0ctr__next-internal_server_app_settings_networks_page_actions_0722nti.js.map → dash-main-prep__next-internal_server_app_api_hub_tokens_route_actions_0ke~8y8.js.map} +0 -0
- /package/.next/server/chunks/{ssr/p248-dash-release__next-internal_server_app__global-error_page_actions_0-_psx0.js.map → dash-main-prep__next-internal_server_app_api_hub_upload_route_actions_02jnx8r.js.map} +0 -0
- /package/.next/server/chunks/{ssr/p248-dash-release__next-internal_server_app__not-found_page_actions_0ab90fb.js.map → dash-main-prep__next-internal_server_app_favicon_ico_route_actions_09bgfok.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_admin_page_actions_0-3dd6g.js.map → dash-main-prep__next-internal_server_app__global-error_page_actions_07kk3nm.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_login_page_actions_0cxgr5r.js.map → dash-main-prep__next-internal_server_app__not-found_page_actions_0cb6n8e.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_logs_page_actions_13ncn5w.js.map → dash-main-prep__next-internal_server_app_admin_page_actions_0whq~om.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_messages_page_actions_03eny7a.js.map → dash-main-prep__next-internal_server_app_login_page_actions_0lfb5vh.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_node_page_actions_01g~v8e.js.map → dash-main-prep__next-internal_server_app_logs_page_actions_0a9g2gh.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_nodes_page_actions_0rp9d.z.js.map → dash-main-prep__next-internal_server_app_messages_page_actions_0_0a~oj.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_page_actions_12.zc2x.js.map → dash-main-prep__next-internal_server_app_node_page_actions_0nt83da.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_server-logs_page_actions_12.~xmh.js.map → dash-main-prep__next-internal_server_app_nodes_page_actions_001898j.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_servers_page_actions_01fbube.js.map → dash-main-prep__next-internal_server_app_page_actions_10t6_cb.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_settings_page_actions_049o_zl.js.map → dash-main-prep__next-internal_server_app_server-logs_page_actions_10i2y0v.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_settings_tokens_page_actions_0kwlo85.js.map → dash-main-prep__next-internal_server_app_servers_page_actions_0yfsnrz.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_tasks_[id]_page_actions_0gaayz2.js.map → dash-main-prep__next-internal_server_app_settings_networks_page_actions_0.6z6e9.js.map} +0 -0
- /package/.next/server/chunks/ssr/{p248-dash-release__next-internal_server_app_tasks_page_actions_05-6rq9.js.map → dash-main-prep__next-internal_server_app_settings_page_actions_0t_etc1.js.map} +0 -0
- /package/.next/static/{88n5t5Pxmw08hbmLba3jI → aIXvzZuknEQ-phwB09c_j}/_buildManifest.js +0 -0
- /package/.next/static/{88n5t5Pxmw08hbmLba3jI → aIXvzZuknEQ-phwB09c_j}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{88n5t5Pxmw08hbmLba3jI → aIXvzZuknEQ-phwB09c_j}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Session } from './types';
|
|
5
|
+
import { AliasAvatar } from './AliasAvatar';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Per-node settings panel (issue #260 → v0.11 flagship #262, Vincent tg
|
|
9
|
+
* 2026-06-24, "must actually work").
|
|
10
|
+
*
|
|
11
|
+
* STATUS (F1/F2/F3, 通信龙 review round 2):
|
|
12
|
+
* - **Wired (real)**: B Runtime·模型 model select + C 运行模式 flags
|
|
13
|
+
* (permissionMode / dangerouslySkipPermissions / teammateMode / maxTurns /
|
|
14
|
+
* budget / timeout). Controlled form state, loaded on mount from
|
|
15
|
+
* `GET /api/anet/node-config` and persisted via `POST`. The six flags +
|
|
16
|
+
* model are the editable contract 通信龙 specified.
|
|
17
|
+
* - **F3 apply lifecycle**: after Save the panel runs a take-effect state
|
|
18
|
+
* machine — saving → applying (node restarting) → applied | rejected |
|
|
19
|
+
* timeout — polling `GET ?apply_id` for real backends and showing a colored
|
|
20
|
+
* status strip ("toast") for the outcome.
|
|
21
|
+
* - **Still P2 stub (disabled)**: A 接入 Channel (display-only) and D 运维
|
|
22
|
+
* ops buttons (no-op), each with its own local "暂未接后端" note.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ The hub-side tool is not deployed yet (工程马 WIP): the route mock-falls
|
|
25
|
+
* back with `mock: true` + `status: pending`, so the lifecycle is *simulated*
|
|
26
|
+
* on local timers and the UI says so ("模拟 · 后端未接入") rather than claiming a
|
|
27
|
+
* node actually restarted. Runtime + imageCapable stay read-only (auto-derived).
|
|
28
|
+
* Field names mirror anet's real config.json.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
// B. Runtime → selectable model presets (from anet VENDORS, bin/cli.ts).
|
|
32
|
+
// Runtime itself is read-only this round; only the model is editable.
|
|
33
|
+
const RUNTIME_MODELS: Record<string, string[]> = {
|
|
34
|
+
'claude-agent-sdk': ['deepseek-v4-pro', 'MiniMax-M3', 'MiniMax-M2.7', 'claude-sonnet-4-6', 'claude-opus-4-x', 'intern', 'mimo'],
|
|
35
|
+
'claude-code-cli': ['(由 CLI 管理)'],
|
|
36
|
+
'codex-sdk': ['gpt-5.5'],
|
|
37
|
+
'grok-build-acp': ['grok-build'],
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// C. config.flags contract (per 通信龙). permissionMode is a select; two
|
|
41
|
+
// booleans; three numeric bounds. These six are the entire editable flag set.
|
|
42
|
+
const PERMISSION_MODES = ['auto', 'default', 'bypassPermissions'];
|
|
43
|
+
|
|
44
|
+
// A. Channel display (P2 — read-only this round). `roadmap` = greyed "即将支持".
|
|
45
|
+
const CHANNELS: { key: string; label: string; roadmap?: boolean; fields: { label: string; value?: string }[] }[] = [
|
|
46
|
+
{
|
|
47
|
+
key: 'telegram', label: 'Telegram',
|
|
48
|
+
fields: [
|
|
49
|
+
{ label: 'Bot Token', value: '••••••••••••' },
|
|
50
|
+
{ label: '允许的 chat id (allowFrom)', value: '—' },
|
|
51
|
+
{ label: '状态目录', value: '~/.anet/channels/telegram' },
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: 'feishu', label: '飞书 Feishu',
|
|
56
|
+
fields: [
|
|
57
|
+
{ label: 'App ID', value: 'cli_••••••' },
|
|
58
|
+
{ label: 'App Secret', value: '••••••••••••' },
|
|
59
|
+
{ label: '允许的 open_id (allowFrom)', value: '—' },
|
|
60
|
+
{ label: '允许的群 chat_id (allowChats)', value: '—' },
|
|
61
|
+
{ label: '群触发策略', value: 'mention' },
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: 'commhub', label: 'CommHub',
|
|
66
|
+
fields: [
|
|
67
|
+
{ label: 'Hub 地址', value: '<hub-address>' },
|
|
68
|
+
{ label: '节点 token(自动)', value: '••••••••' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{ key: 'wechat', label: 'WeChat', roadmap: true, fields: [] },
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
// D. Node ops — still P2 no-op stubs this round. `danger` = destructive styling.
|
|
75
|
+
|
|
76
|
+
// Editable flag form shape. Numeric fields are kept as strings for controlled
|
|
77
|
+
// inputs and coerced (or dropped when blank) at save time.
|
|
78
|
+
type FlagsForm = {
|
|
79
|
+
permissionMode: string;
|
|
80
|
+
dangerouslySkipPermissions: boolean;
|
|
81
|
+
teammateMode: boolean;
|
|
82
|
+
maxTurns: string;
|
|
83
|
+
budget: string;
|
|
84
|
+
timeout: string;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const DEFAULT_FLAGS: FlagsForm = {
|
|
88
|
+
permissionMode: 'default',
|
|
89
|
+
dangerouslySkipPermissions: false,
|
|
90
|
+
teammateMode: false,
|
|
91
|
+
maxTurns: '',
|
|
92
|
+
budget: '',
|
|
93
|
+
timeout: '',
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// F3 apply lifecycle. A save flows:
|
|
97
|
+
// idle → saving (POST in flight) → applying (config dispatched, node
|
|
98
|
+
// restarting / taking effect) → applied | rejected | timeout.
|
|
99
|
+
// `error` = the save POST itself failed. The `mock` flag flavours the terminal
|
|
100
|
+
// copy when the hub tool isn't deployed (the lifecycle is then simulated on
|
|
101
|
+
// local timers rather than polled).
|
|
102
|
+
type ApplyPhase = 'idle' | 'saving' | 'applying' | 'applied' | 'rejected' | 'timeout' | 'error';
|
|
103
|
+
|
|
104
|
+
// Real-backend apply-status poll cadence + ceiling. The mock path uses its own
|
|
105
|
+
// short timers instead of polling (the route would only ever return pending).
|
|
106
|
+
const APPLY_POLL_MS = 1500;
|
|
107
|
+
const APPLY_TIMEOUT_MS = 30000;
|
|
108
|
+
// Simulated mock progression delay (dispatched → applied).
|
|
109
|
+
const MOCK_APPLY_MS = 1400;
|
|
110
|
+
// Auto-dismiss the success strip after this long.
|
|
111
|
+
const SUCCESS_DISMISS_MS = 4000;
|
|
112
|
+
// Per-request ceiling so a hung hub proxy can't freeze the lifecycle — every
|
|
113
|
+
// POST/poll fetch is aborted past this (通信牛 review #11 blocker 2).
|
|
114
|
+
const FETCH_TIMEOUT_MS = 8000;
|
|
115
|
+
|
|
116
|
+
function isAbort(e: unknown): boolean {
|
|
117
|
+
return e instanceof DOMException && e.name === 'AbortError';
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** fetch + json with a hard AbortController timeout. Rejects (AbortError) if it
|
|
121
|
+
* doesn't resolve in `timeoutMs` — callers treat that as transient/abort. */
|
|
122
|
+
async function fetchJson(url: string, init: RequestInit, timeoutMs: number): Promise<{ res: Response; data: Record<string, unknown> }> {
|
|
123
|
+
const ctrl = new AbortController();
|
|
124
|
+
const to = setTimeout(() => ctrl.abort(), timeoutMs);
|
|
125
|
+
try {
|
|
126
|
+
const res = await fetch(url, { ...init, signal: ctrl.signal });
|
|
127
|
+
const data = (await res.json().catch(() => ({}))) as Record<string, unknown>;
|
|
128
|
+
return { res, data };
|
|
129
|
+
} finally {
|
|
130
|
+
clearTimeout(to);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function channelSet(channels: Session['channels']): Set<string> {
|
|
135
|
+
if (!channels) return new Set();
|
|
136
|
+
const list = Array.isArray(channels) ? channels : String(channels).split(/[,\s]+/);
|
|
137
|
+
return new Set(list.map(c => c.trim().toLowerCase()).filter(Boolean));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Coerce a snapshot flag value into the string form fields expect. */
|
|
141
|
+
function numStr(v: unknown): string {
|
|
142
|
+
return v === undefined || v === null || v === '' ? '' : String(v);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Section heading. */
|
|
146
|
+
function SectionTitle({ children }: { children: React.ReactNode }) {
|
|
147
|
+
return <h3 className="text-[11px] font-medium uppercase tracking-wide text-gray-500 mb-2">{children}</h3>;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Read-only label/value row. */
|
|
151
|
+
function InfoRow({ label, value }: { label: string; value: string }) {
|
|
152
|
+
return (
|
|
153
|
+
<div className="flex items-center justify-between gap-3 px-3 py-1.5 text-[12px]">
|
|
154
|
+
<span className="text-gray-500 shrink-0">{label}</span>
|
|
155
|
+
<span className="text-gray-300 truncate font-mono text-[11px]" title={value}>{value}</span>
|
|
156
|
+
</div>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Disabled text field (P2 channel display). */
|
|
161
|
+
function StubField({ label, value }: { label: string; value?: string }) {
|
|
162
|
+
return (
|
|
163
|
+
<label className="block">
|
|
164
|
+
<span className="text-[11px] text-gray-500">{label}</span>
|
|
165
|
+
<input
|
|
166
|
+
type="text" disabled readOnly value={value ?? ''} placeholder="未配置"
|
|
167
|
+
className="mt-0.5 w-full rounded-md border border-[#26262b] bg-[#0e0e10] px-2.5 py-1.5 text-[12px] text-gray-300 cursor-not-allowed disabled:opacity-100"
|
|
168
|
+
/>
|
|
169
|
+
</label>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Live controlled toggle. */
|
|
174
|
+
function Toggle({ label, checked, onChange, disabled }: { label: string; checked: boolean; onChange: (v: boolean) => void; disabled?: boolean }) {
|
|
175
|
+
return (
|
|
176
|
+
<button
|
|
177
|
+
type="button"
|
|
178
|
+
role="switch"
|
|
179
|
+
aria-checked={checked}
|
|
180
|
+
disabled={disabled}
|
|
181
|
+
onClick={() => onChange(!checked)}
|
|
182
|
+
className={`flex w-full items-center justify-between rounded-lg border border-[#26262b] bg-[#161618] px-3 py-2 text-sm text-gray-300 transition-colors ${disabled ? 'cursor-not-allowed opacity-60' : 'hover:bg-[#1c1c1f]'}`}
|
|
183
|
+
>
|
|
184
|
+
<span className="text-left pr-3">{label}</span>
|
|
185
|
+
<span className={`relative inline-block h-5 w-9 shrink-0 rounded-full transition-colors ${checked ? 'bg-cyan-600' : 'bg-[#2a2a30]'}`}>
|
|
186
|
+
<span className={`absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all ${checked ? 'left-[18px]' : 'left-0.5'}`} />
|
|
187
|
+
</span>
|
|
188
|
+
</button>
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Live controlled select. */
|
|
193
|
+
function Select({ label, value, options, onChange }: { label: string; value: string; options: string[]; onChange: (v: string) => void }) {
|
|
194
|
+
return (
|
|
195
|
+
<label className="block">
|
|
196
|
+
<span className="text-[11px] text-gray-500">{label}</span>
|
|
197
|
+
<select
|
|
198
|
+
value={value}
|
|
199
|
+
onChange={e => onChange(e.target.value)}
|
|
200
|
+
className="mt-0.5 w-full appearance-none rounded-md border border-[#26262b] bg-[#161618] px-2.5 py-1.5 text-[12px] text-gray-200 hover:border-[#3a3a42] focus:border-cyan-600 focus:outline-none"
|
|
201
|
+
>
|
|
202
|
+
{options.map(o => <option key={o} value={o}>{o}</option>)}
|
|
203
|
+
</select>
|
|
204
|
+
</label>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Live controlled numeric field (kept as string; coerced at save). */
|
|
209
|
+
function NumberField({ label, value, onChange, placeholder }: { label: string; value: string; onChange: (v: string) => void; placeholder?: string }) {
|
|
210
|
+
return (
|
|
211
|
+
<label className="block">
|
|
212
|
+
<span className="text-[11px] text-gray-500">{label}</span>
|
|
213
|
+
<input
|
|
214
|
+
type="number"
|
|
215
|
+
inputMode="numeric"
|
|
216
|
+
value={value}
|
|
217
|
+
placeholder={placeholder ?? '默认'}
|
|
218
|
+
onChange={e => onChange(e.target.value)}
|
|
219
|
+
className="mt-0.5 w-full rounded-md border border-[#26262b] bg-[#0e0e10] px-2.5 py-1.5 text-[12px] text-gray-200 focus:border-cyan-600 focus:outline-none"
|
|
220
|
+
/>
|
|
221
|
+
</label>
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function NodeSettingsPanel({ session: s, onClose }: { session: Session; onClose: () => void }) {
|
|
226
|
+
const active = channelSet(s.channels);
|
|
227
|
+
const runtime = s.runtime || '—';
|
|
228
|
+
const initialModel = s.model || s.agent || '';
|
|
229
|
+
// imageCapable: read-only, auto from model (MiniMax-M3 / Claude = yes).
|
|
230
|
+
const imageCapable = /minimax-m3|claude/i.test(initialModel);
|
|
231
|
+
// Model options for this runtime; always include the current value so a
|
|
232
|
+
// server-set model outside the preset list stays selectable.
|
|
233
|
+
const presetModels = RUNTIME_MODELS[runtime] || [];
|
|
234
|
+
const modelOptions = Array.from(new Set([initialModel, ...presetModels].filter(Boolean)));
|
|
235
|
+
|
|
236
|
+
const nodeKey = s.node_id || s.alias;
|
|
237
|
+
|
|
238
|
+
// ---- Editable form state (B model + C flags) ----
|
|
239
|
+
const [model, setModel] = useState(initialModel);
|
|
240
|
+
const [flags, setFlags] = useState<FlagsForm>(DEFAULT_FLAGS);
|
|
241
|
+
const [dirty, setDirty] = useState(false);
|
|
242
|
+
const [loading, setLoading] = useState(true);
|
|
243
|
+
// ---- F3 apply lifecycle ----
|
|
244
|
+
const [phase, setPhase] = useState<ApplyPhase>('idle');
|
|
245
|
+
const [phaseMsg, setPhaseMsg] = useState('');
|
|
246
|
+
const [phaseMock, setPhaseMock] = useState(false);
|
|
247
|
+
// ---- M1 node lifecycle actions (restart wired to RFC-024 restart_node;
|
|
248
|
+
// rename/stop/delete gated on backend → shown as 即将支持). Self-contained,
|
|
249
|
+
// independent of the config apply lifecycle above.
|
|
250
|
+
const [lcBusy, setLcBusy] = useState(false);
|
|
251
|
+
const [lcResult, setLcResult] = useState<{ tone: 'info' | 'ok' | 'warn' | 'err'; text: string } | null>(null);
|
|
252
|
+
// Outstanding lifecycle timers (mock progression, real poll, auto-dismiss);
|
|
253
|
+
// cleared on unmount and at the start of each new save so a stale timer can't
|
|
254
|
+
// overwrite a fresh result.
|
|
255
|
+
const timersRef = useRef<ReturnType<typeof setTimeout>[]>([]);
|
|
256
|
+
const clearTimers = useCallback(() => {
|
|
257
|
+
timersRef.current.forEach(clearTimeout);
|
|
258
|
+
timersRef.current = [];
|
|
259
|
+
}, []);
|
|
260
|
+
const after = useCallback((ms: number, fn: () => void) => {
|
|
261
|
+
timersRef.current.push(setTimeout(fn, ms));
|
|
262
|
+
}, []);
|
|
263
|
+
// Avoid setState after unmount (panel closes mid-request).
|
|
264
|
+
const mounted = useRef(true);
|
|
265
|
+
useEffect(() => () => { mounted.current = false; clearTimers(); }, [clearTimers]);
|
|
266
|
+
|
|
267
|
+
// Monotonic run id, bumped on every save. Each async lifecycle callback
|
|
268
|
+
// captures the run id it belongs to and bails if a newer save superseded it —
|
|
269
|
+
// this guards the callback that has ALREADY passed `await fetch` and so can't
|
|
270
|
+
// be cancelled by clearTimers() (通信牛 review #11 blocker 1: stale poll
|
|
271
|
+
// overwriting a fresh save).
|
|
272
|
+
const applySeqRef = useRef(0);
|
|
273
|
+
// "First terminal wins" within a run: once applied/rejected/timeout is set, a
|
|
274
|
+
// late result can't overwrite it — this makes the 30s ceiling truly hard
|
|
275
|
+
// (通信牛 review #11 blocker 2).
|
|
276
|
+
const settledRef = useRef(false);
|
|
277
|
+
const isCurrent = useCallback((runId: number) => mounted.current && runId === applySeqRef.current, []);
|
|
278
|
+
const settle = useCallback((runId: number, apply: () => void) => {
|
|
279
|
+
if (!isCurrent(runId) || settledRef.current) return;
|
|
280
|
+
settledRef.current = true;
|
|
281
|
+
apply();
|
|
282
|
+
}, [isCurrent]);
|
|
283
|
+
|
|
284
|
+
const setFlag = useCallback(<K extends keyof FlagsForm>(key: K, v: FlagsForm[K]) => {
|
|
285
|
+
setFlags(f => ({ ...f, [key]: v }));
|
|
286
|
+
setDirty(true);
|
|
287
|
+
}, []);
|
|
288
|
+
|
|
289
|
+
// Load current config on mount. Falls back to session-derived defaults when
|
|
290
|
+
// the hub tool isn't deployed (route returns mock with empty flags).
|
|
291
|
+
useEffect(() => {
|
|
292
|
+
let cancelled = false;
|
|
293
|
+
(async () => {
|
|
294
|
+
try {
|
|
295
|
+
const res = await fetch(`/api/anet/node-config?node_id=${encodeURIComponent(nodeKey)}`, { cache: 'no-store' });
|
|
296
|
+
const data = await res.json().catch(() => ({}));
|
|
297
|
+
if (cancelled || !mounted.current) return;
|
|
298
|
+
if (data?.model) setModel(String(data.model));
|
|
299
|
+
const f = data?.flags && typeof data.flags === 'object' ? data.flags : {};
|
|
300
|
+
setFlags({
|
|
301
|
+
permissionMode: typeof f.permissionMode === 'string' && PERMISSION_MODES.includes(f.permissionMode) ? f.permissionMode : DEFAULT_FLAGS.permissionMode,
|
|
302
|
+
dangerouslySkipPermissions: !!f.dangerouslySkipPermissions,
|
|
303
|
+
teammateMode: !!f.teammateMode,
|
|
304
|
+
maxTurns: numStr(f.maxTurns),
|
|
305
|
+
budget: numStr(f.budget),
|
|
306
|
+
timeout: numStr(f.timeout),
|
|
307
|
+
});
|
|
308
|
+
} catch {
|
|
309
|
+
// keep defaults — Save still works (mock path) so the UI is reviewable
|
|
310
|
+
} finally {
|
|
311
|
+
if (!cancelled && mounted.current) setLoading(false);
|
|
312
|
+
}
|
|
313
|
+
})();
|
|
314
|
+
return () => { cancelled = true; };
|
|
315
|
+
}, [nodeKey]);
|
|
316
|
+
|
|
317
|
+
// Terminal "applied" state + auto-dismiss of the success strip.
|
|
318
|
+
const finishApplied = useCallback((mock: boolean, runId: number) => {
|
|
319
|
+
settle(runId, () => {
|
|
320
|
+
setPhase('applied');
|
|
321
|
+
setPhaseMock(mock);
|
|
322
|
+
setPhaseMsg(mock ? '已应用(模拟 · 后端未接入,未真正下发)' : '配置已生效');
|
|
323
|
+
after(SUCCESS_DISMISS_MS, () => {
|
|
324
|
+
if (isCurrent(runId)) setPhase(p => (p === 'applied' ? 'idle' : p));
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
}, [after, isCurrent, settle]);
|
|
328
|
+
|
|
329
|
+
const markTimeout = useCallback((runId: number) => {
|
|
330
|
+
settle(runId, () => {
|
|
331
|
+
setPhase('timeout');
|
|
332
|
+
setPhaseMsg('应用超时未确认,请稍后在节点详情核对');
|
|
333
|
+
});
|
|
334
|
+
}, [settle]);
|
|
335
|
+
|
|
336
|
+
// Poll the real apply-status endpoint until terminal or timeout. `runId` ties
|
|
337
|
+
// every callback to the save that started it; a newer save (or a settled
|
|
338
|
+
// result) makes it bail before touching state.
|
|
339
|
+
const pollApply = useCallback((applyId: string, startedAt: number, runId: number) => {
|
|
340
|
+
after(APPLY_POLL_MS, async () => {
|
|
341
|
+
if (!isCurrent(runId) || settledRef.current) return;
|
|
342
|
+
let status: string | undefined;
|
|
343
|
+
let detail: string | undefined;
|
|
344
|
+
try {
|
|
345
|
+
const { data } = await fetchJson(`/api/anet/node-config?apply_id=${encodeURIComponent(applyId)}`, { cache: 'no-store' }, FETCH_TIMEOUT_MS);
|
|
346
|
+
status = data?.status as string | undefined;
|
|
347
|
+
detail = data?.detail as string | undefined;
|
|
348
|
+
} catch { /* transient / aborted — fall through to retry or timeout */ }
|
|
349
|
+
// Re-check AFTER the await: a newer save may have superseded this poll.
|
|
350
|
+
if (!isCurrent(runId) || settledRef.current) return;
|
|
351
|
+
if (status === 'applied') { finishApplied(false, runId); return; }
|
|
352
|
+
if (status === 'rejected') {
|
|
353
|
+
settle(runId, () => {
|
|
354
|
+
setPhase('rejected');
|
|
355
|
+
setPhaseMsg(detail ? `应用被拒绝:${detail}` : '应用被拒绝');
|
|
356
|
+
});
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (Date.now() - startedAt >= APPLY_TIMEOUT_MS) { markTimeout(runId); return; }
|
|
360
|
+
pollApply(applyId, startedAt, runId); // still pending → keep polling
|
|
361
|
+
});
|
|
362
|
+
}, [after, finishApplied, isCurrent, markTimeout, settle]);
|
|
363
|
+
|
|
364
|
+
async function handleSave() {
|
|
365
|
+
clearTimers(); // cancel any pending timers from a prior run
|
|
366
|
+
const runId = ++applySeqRef.current; // supersede any in-flight (post-await) callback
|
|
367
|
+
settledRef.current = false;
|
|
368
|
+
setPhase('saving');
|
|
369
|
+
setPhaseMsg('');
|
|
370
|
+
setPhaseMock(false);
|
|
371
|
+
// Coerce numeric strings → numbers; drop blanks so unset fields aren't
|
|
372
|
+
// forced to 0 on the backend.
|
|
373
|
+
const numOrUndef = (v: string) => (v.trim() === '' ? undefined : Number(v));
|
|
374
|
+
const payload = {
|
|
375
|
+
node_id: nodeKey,
|
|
376
|
+
model,
|
|
377
|
+
flags: {
|
|
378
|
+
permissionMode: flags.permissionMode,
|
|
379
|
+
dangerouslySkipPermissions: flags.dangerouslySkipPermissions,
|
|
380
|
+
teammateMode: flags.teammateMode,
|
|
381
|
+
maxTurns: numOrUndef(flags.maxTurns),
|
|
382
|
+
budget: numOrUndef(flags.budget),
|
|
383
|
+
timeout: numOrUndef(flags.timeout),
|
|
384
|
+
},
|
|
385
|
+
};
|
|
386
|
+
let data: { ok?: boolean; error?: string; mock?: boolean; applied?: boolean; status?: string; applyId?: string } = {};
|
|
387
|
+
try {
|
|
388
|
+
const r = await fetchJson('/api/anet/node-config', {
|
|
389
|
+
method: 'POST',
|
|
390
|
+
headers: { 'Content-Type': 'application/json' },
|
|
391
|
+
body: JSON.stringify(payload),
|
|
392
|
+
}, FETCH_TIMEOUT_MS);
|
|
393
|
+
if (!isCurrent(runId)) return; // a newer save started while this POST was in flight
|
|
394
|
+
data = r.data as typeof data;
|
|
395
|
+
if (!r.res.ok || data?.ok === false) {
|
|
396
|
+
settledRef.current = true;
|
|
397
|
+
setPhase('error');
|
|
398
|
+
setPhaseMsg(data?.error ? `保存失败:${data.error}` : '保存失败');
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
} catch (e) {
|
|
402
|
+
if (!isCurrent(runId)) return;
|
|
403
|
+
settledRef.current = true;
|
|
404
|
+
setPhase('error');
|
|
405
|
+
setPhaseMsg(isAbort(e) ? '保存超时,请重试' : e instanceof Error ? `保存失败:${e.message}` : '保存失败');
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Save accepted — now drive the take-effect lifecycle.
|
|
410
|
+
setDirty(false);
|
|
411
|
+
const mock = !!(data.mock || data.applied === false);
|
|
412
|
+
if (data.status === 'applied') { finishApplied(mock, runId); return; }
|
|
413
|
+
if (data.status === 'rejected') { settle(runId, () => { setPhase('rejected'); setPhaseMsg('应用被拒绝'); }); return; }
|
|
414
|
+
|
|
415
|
+
// Optimistic "applying" — node is restarting / taking the new config.
|
|
416
|
+
setPhase('applying');
|
|
417
|
+
setPhaseMock(mock);
|
|
418
|
+
if (mock) {
|
|
419
|
+
// Backend not live: simulate the apply so the lifecycle UI is reviewable.
|
|
420
|
+
after(MOCK_APPLY_MS, () => finishApplied(true, runId));
|
|
421
|
+
} else if (data.applyId) {
|
|
422
|
+
// Hard 30s ceiling that fires regardless of whether a poll is in flight
|
|
423
|
+
// or the hub proxy is hanging — `settle` makes the first terminal win, so
|
|
424
|
+
// a late poll result can't reopen it (通信牛 review #11 blocker 2).
|
|
425
|
+
after(APPLY_TIMEOUT_MS, () => markTimeout(runId));
|
|
426
|
+
pollApply(data.applyId, Date.now(), runId);
|
|
427
|
+
} else {
|
|
428
|
+
// Real success with no applyId to poll → treat as applied.
|
|
429
|
+
finishApplied(false, runId);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
async function handleRestart() {
|
|
434
|
+
if (lcBusy) return;
|
|
435
|
+
if (typeof window !== 'undefined' && !window.confirm(`重启节点「${s.alias}」?当前会话会中断,节点将以现有配置重新启动。`)) return;
|
|
436
|
+
setLcBusy(true);
|
|
437
|
+
setLcResult({ tone: 'info', text: '重启指令下发中…' });
|
|
438
|
+
try {
|
|
439
|
+
const r = await fetch('/api/anet/node-lifecycle', {
|
|
440
|
+
method: 'POST',
|
|
441
|
+
headers: { 'Content-Type': 'application/json' },
|
|
442
|
+
// Pass the node's own network so multi-network users (whose default
|
|
443
|
+
// network may differ from this node's) restart the right node.
|
|
444
|
+
body: JSON.stringify({ node_id: nodeKey, action: 'restart', ...(s.network_id ? { network_id: s.network_id } : {}) }),
|
|
445
|
+
});
|
|
446
|
+
const data = await r.json().catch(() => ({}));
|
|
447
|
+
if (!mounted.current) return;
|
|
448
|
+
if (r.ok && data?.ok) {
|
|
449
|
+
setLcResult({ tone: 'ok', text: '重启已下发,节点正在重启生效中…' });
|
|
450
|
+
} else if (data?.unconfirmed) {
|
|
451
|
+
setLcResult({ tone: 'warn', text: `后端工具未上线:${data?.error || 'restart_node 不可用'}` });
|
|
452
|
+
} else {
|
|
453
|
+
setLcResult({ tone: 'err', text: data?.error ? `重启失败:${data.error}` : '重启失败' });
|
|
454
|
+
}
|
|
455
|
+
} catch (e) {
|
|
456
|
+
if (mounted.current) setLcResult({ tone: 'err', text: `重启失败:${e instanceof Error ? e.message : '网络错误'}` });
|
|
457
|
+
} finally {
|
|
458
|
+
if (mounted.current) setLcBusy(false);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
return (
|
|
463
|
+
<>
|
|
464
|
+
<div className="fixed inset-0 bg-black/40 z-40" onClick={onClose} aria-hidden />
|
|
465
|
+
|
|
466
|
+
<div
|
|
467
|
+
role="dialog"
|
|
468
|
+
aria-label={`${s.alias} 节点设置`}
|
|
469
|
+
className="fixed top-0 right-0 h-[100dvh] w-full sm:w-[440px] bg-[#0f0f11] border-l border-[#26262b] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in"
|
|
470
|
+
>
|
|
471
|
+
{/* Header */}
|
|
472
|
+
<div className="flex items-center gap-2.5 px-4 py-3 border-b border-[#26262b]">
|
|
473
|
+
<AliasAvatar alias={s.alias} size={26} />
|
|
474
|
+
<div className="min-w-0 flex-1">
|
|
475
|
+
<div className="text-sm font-semibold text-white truncate" title={s.alias}>{s.alias}</div>
|
|
476
|
+
<div className="text-[11px] text-gray-500">节点设置</div>
|
|
477
|
+
</div>
|
|
478
|
+
<button onClick={onClose} aria-label="关闭设置" className="inline-flex h-9 w-9 items-center justify-center text-gray-500 hover:text-white rounded-md hover:bg-white/5">
|
|
479
|
+
<svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
|
480
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
481
|
+
</svg>
|
|
482
|
+
</button>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div className="flex-1 overflow-y-auto px-4 py-4 space-y-5">
|
|
486
|
+
{/* E. 基础信息(只读) */}
|
|
487
|
+
<section>
|
|
488
|
+
<SectionTitle>基础信息</SectionTitle>
|
|
489
|
+
<div className="rounded-lg border border-[#26262b] bg-[#161618] divide-y divide-[#1c1c1f]">
|
|
490
|
+
<InfoRow label="别名" value={s.alias} />
|
|
491
|
+
<InfoRow label="node_id" value={s.node_id || '—'} />
|
|
492
|
+
<InfoRow label="所属 network" value={s.network_id || '—'} />
|
|
493
|
+
<InfoRow label="当前 session" value={s.session_id || '—'} />
|
|
494
|
+
<InfoRow label="在线状态" value={s.status || '—'} />
|
|
495
|
+
</div>
|
|
496
|
+
</section>
|
|
497
|
+
|
|
498
|
+
{/* B. Runtime + 模型 (model editable) */}
|
|
499
|
+
<section>
|
|
500
|
+
<SectionTitle>Runtime · 模型</SectionTitle>
|
|
501
|
+
<div className="space-y-2.5">
|
|
502
|
+
<div>
|
|
503
|
+
<span className="text-[11px] text-gray-500">Runtime(只读)</span>
|
|
504
|
+
<div className="mt-0.5 rounded-md border border-[#26262b] bg-[#0e0e10] px-2.5 py-1.5 text-[12px] text-gray-400 font-mono">{runtime}</div>
|
|
505
|
+
</div>
|
|
506
|
+
{modelOptions.length > 1 ? (
|
|
507
|
+
<Select label="模型 / Preset" value={model} options={modelOptions} onChange={v => { setModel(v); setDirty(true); }} />
|
|
508
|
+
) : (
|
|
509
|
+
<label className="block">
|
|
510
|
+
<span className="text-[11px] text-gray-500">模型 / Preset</span>
|
|
511
|
+
<input
|
|
512
|
+
type="text" value={model} onChange={e => { setModel(e.target.value); setDirty(true); }}
|
|
513
|
+
placeholder="未配置"
|
|
514
|
+
className="mt-0.5 w-full rounded-md border border-[#26262b] bg-[#0e0e10] px-2.5 py-1.5 text-[12px] text-gray-200 focus:border-cyan-600 focus:outline-none"
|
|
515
|
+
/>
|
|
516
|
+
</label>
|
|
517
|
+
)}
|
|
518
|
+
<div className="flex items-center gap-2 text-[11px] text-gray-500">
|
|
519
|
+
<span>图片能力 (imageCapable)</span>
|
|
520
|
+
<span className={`px-1.5 py-0.5 rounded ${imageCapable ? 'bg-green-900/30 text-green-300' : 'bg-[#2a2a30] text-gray-400'}`}>
|
|
521
|
+
{imageCapable ? '支持' : '不支持'} · 只读
|
|
522
|
+
</span>
|
|
523
|
+
</div>
|
|
524
|
+
</div>
|
|
525
|
+
</section>
|
|
526
|
+
|
|
527
|
+
{/* C. 运行模式 / flags (editable) */}
|
|
528
|
+
<section>
|
|
529
|
+
<SectionTitle>运行模式 · flags</SectionTitle>
|
|
530
|
+
<div className="space-y-2">
|
|
531
|
+
<Select
|
|
532
|
+
label="权限模式 permissionMode"
|
|
533
|
+
value={flags.permissionMode}
|
|
534
|
+
options={PERMISSION_MODES}
|
|
535
|
+
onChange={v => setFlag('permissionMode', v)}
|
|
536
|
+
/>
|
|
537
|
+
<Toggle
|
|
538
|
+
label="跳过权限确认 dangerouslySkipPermissions"
|
|
539
|
+
checked={flags.dangerouslySkipPermissions}
|
|
540
|
+
onChange={v => setFlag('dangerouslySkipPermissions', v)}
|
|
541
|
+
/>
|
|
542
|
+
<Toggle
|
|
543
|
+
label="团队模式 teammateMode"
|
|
544
|
+
checked={flags.teammateMode}
|
|
545
|
+
onChange={v => setFlag('teammateMode', v)}
|
|
546
|
+
/>
|
|
547
|
+
<div className="grid grid-cols-3 gap-2 pt-0.5">
|
|
548
|
+
<NumberField label="maxTurns" value={flags.maxTurns} onChange={v => setFlag('maxTurns', v)} />
|
|
549
|
+
<NumberField label="budget" value={flags.budget} onChange={v => setFlag('budget', v)} />
|
|
550
|
+
<NumberField label="timeout(s)" value={flags.timeout} onChange={v => setFlag('timeout', v)} />
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
</section>
|
|
554
|
+
|
|
555
|
+
{/* Save bar + F3 apply lifecycle (optimistic → restarting → ack) */}
|
|
556
|
+
<section>
|
|
557
|
+
{(() => {
|
|
558
|
+
const busy = phase === 'saving' || phase === 'applying';
|
|
559
|
+
const btnDisabled = loading || busy || !dirty;
|
|
560
|
+
const btnLabel = phase === 'saving' ? '保存中…'
|
|
561
|
+
: phase === 'applying' ? '应用中…'
|
|
562
|
+
: loading ? '加载中…'
|
|
563
|
+
: dirty ? '保存模型 / flags'
|
|
564
|
+
: '无改动';
|
|
565
|
+
return (
|
|
566
|
+
<button
|
|
567
|
+
type="button"
|
|
568
|
+
onClick={handleSave}
|
|
569
|
+
disabled={btnDisabled}
|
|
570
|
+
className={`flex w-full items-center justify-center gap-2 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors ${
|
|
571
|
+
btnDisabled ? 'bg-[#1c1c1f] text-gray-600 cursor-not-allowed' : 'bg-cyan-600 text-white hover:bg-cyan-500'
|
|
572
|
+
}`}
|
|
573
|
+
>
|
|
574
|
+
{busy && (
|
|
575
|
+
<svg className="h-4 w-4 animate-spin" viewBox="0 0 24 24" fill="none" aria-hidden>
|
|
576
|
+
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
|
|
577
|
+
<path className="opacity-90" fill="currentColor" d="M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z" />
|
|
578
|
+
</svg>
|
|
579
|
+
)}
|
|
580
|
+
{btnLabel}
|
|
581
|
+
</button>
|
|
582
|
+
);
|
|
583
|
+
})()}
|
|
584
|
+
|
|
585
|
+
{/* Lifecycle status strip — the "toast" for the apply outcome. */}
|
|
586
|
+
{phase !== 'idle' && (() => {
|
|
587
|
+
const map: Record<Exclude<ApplyPhase, 'idle'>, { tone: string; icon: string; text: string }> = {
|
|
588
|
+
saving: { tone: 'border-[#26262b] bg-[#161618] text-gray-300', icon: '·', text: '正在提交配置…' },
|
|
589
|
+
applying: { tone: 'border-cyan-800/50 bg-cyan-900/15 text-cyan-300', icon: '↻', text: '已下发,正在应用(节点重启生效中)…' },
|
|
590
|
+
applied: { tone: 'border-green-800/50 bg-green-900/15 text-green-300', icon: '✓', text: phaseMsg || '配置已生效' },
|
|
591
|
+
rejected: { tone: 'border-red-800/50 bg-red-900/15 text-red-300', icon: '✗', text: phaseMsg || '应用被拒绝' },
|
|
592
|
+
timeout: { tone: 'border-amber-700/50 bg-amber-900/15 text-amber-300', icon: '⚠', text: phaseMsg || '应用超时未确认' },
|
|
593
|
+
error: { tone: 'border-red-800/50 bg-red-900/15 text-red-300', icon: '✗', text: phaseMsg || '保存失败' },
|
|
594
|
+
};
|
|
595
|
+
const v = map[phase];
|
|
596
|
+
return (
|
|
597
|
+
<div role="status" aria-live="polite" className={`mt-2 flex items-start gap-2 rounded-lg border px-3 py-2 text-[12px] ${v.tone}`}>
|
|
598
|
+
<span className={`shrink-0 leading-5 ${phase === 'applying' ? 'inline-block animate-spin' : ''}`} aria-hidden>{v.icon}</span>
|
|
599
|
+
<span>{v.text}</span>
|
|
600
|
+
</div>
|
|
601
|
+
);
|
|
602
|
+
})()}
|
|
603
|
+
{phaseMock && (phase === 'applying' || phase === 'applied') && (
|
|
604
|
+
<p className="mt-1 text-[10px] text-gray-600">后端工具未上线,应用流程为模拟演示(不会真正下发到节点)</p>
|
|
605
|
+
)}
|
|
606
|
+
</section>
|
|
607
|
+
|
|
608
|
+
{/* A. 接入 Channel (P2 — display only) */}
|
|
609
|
+
<section>
|
|
610
|
+
<SectionTitle>接入 Channel</SectionTitle>
|
|
611
|
+
<div className="space-y-2">
|
|
612
|
+
{CHANNELS.map(ch => (
|
|
613
|
+
<div key={ch.key} className={`rounded-lg border border-[#26262b] bg-[#161618] ${ch.roadmap ? 'opacity-50' : ''}`}>
|
|
614
|
+
<label className="flex items-center justify-between px-3 py-2 text-sm text-gray-300 cursor-not-allowed">
|
|
615
|
+
<span className="flex items-center gap-2">
|
|
616
|
+
{ch.label}
|
|
617
|
+
{ch.roadmap && <span className="text-[10px] px-1.5 py-0.5 rounded bg-[#2a2a30] text-gray-400">即将支持</span>}
|
|
618
|
+
</span>
|
|
619
|
+
<input type="checkbox" checked={!ch.roadmap && active.has(ch.key)} disabled readOnly className="h-4 w-4 accent-cyan-500 cursor-not-allowed" />
|
|
620
|
+
</label>
|
|
621
|
+
{!ch.roadmap && active.has(ch.key) && ch.fields.length > 0 && (
|
|
622
|
+
<div className="px-3 pb-3 pt-1 space-y-2 border-t border-[#1c1c1f]">
|
|
623
|
+
{ch.fields.map(f => <StubField key={f.label} label={f.label} value={f.value} />)}
|
|
624
|
+
</div>
|
|
625
|
+
)}
|
|
626
|
+
</div>
|
|
627
|
+
))}
|
|
628
|
+
</div>
|
|
629
|
+
<p className="mt-2 text-[11px] text-gray-600">Channel 绑定为下一阶段(P2)· 当前仅展示,暂未接后端</p>
|
|
630
|
+
</section>
|
|
631
|
+
|
|
632
|
+
{/* D. 节点操作 (M1 lifecycle — restart wired to RFC-024 restart_node;
|
|
633
|
+
rename/stop/delete gated on backend, shown as 即将支持). */}
|
|
634
|
+
<section>
|
|
635
|
+
<SectionTitle>节点操作</SectionTitle>
|
|
636
|
+
<button
|
|
637
|
+
type="button"
|
|
638
|
+
onClick={handleRestart}
|
|
639
|
+
disabled={lcBusy}
|
|
640
|
+
className={`flex w-full items-center justify-center gap-2 rounded-lg border px-3 py-2.5 text-[13px] font-medium transition-colors ${
|
|
641
|
+
lcBusy
|
|
642
|
+
? 'border-[#26262b] bg-[#1c1c1f] text-gray-600 cursor-not-allowed'
|
|
643
|
+
: 'border-amber-700/50 bg-amber-900/15 text-amber-300 hover:bg-amber-900/25'
|
|
644
|
+
}`}
|
|
645
|
+
>
|
|
646
|
+
{lcBusy && (
|
|
647
|
+
<svg className="h-4 w-4 animate-spin" viewBox="0 0 24 24" fill="none" aria-hidden>
|
|
648
|
+
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
|
|
649
|
+
<path className="opacity-90" fill="currentColor" d="M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z" />
|
|
650
|
+
</svg>
|
|
651
|
+
)}
|
|
652
|
+
重启节点
|
|
653
|
+
</button>
|
|
654
|
+
{lcResult && (() => {
|
|
655
|
+
const tone = lcResult.tone === 'ok' ? 'border-green-800/50 bg-green-900/15 text-green-300'
|
|
656
|
+
: lcResult.tone === 'warn' ? 'border-amber-700/50 bg-amber-900/15 text-amber-300'
|
|
657
|
+
: lcResult.tone === 'err' ? 'border-red-800/50 bg-red-900/15 text-red-300'
|
|
658
|
+
: 'border-[#26262b] bg-[#161618] text-gray-300';
|
|
659
|
+
return (
|
|
660
|
+
<div role="status" aria-live="polite" className={`mt-2 rounded-lg border px-3 py-2 text-[12px] ${tone}`}>
|
|
661
|
+
{lcResult.text}
|
|
662
|
+
</div>
|
|
663
|
+
);
|
|
664
|
+
})()}
|
|
665
|
+
{/* Gated actions — backend not yet available (RFC-024 rename / RFC-027 stop+delete). */}
|
|
666
|
+
<div className="mt-2 grid grid-cols-3 gap-2">
|
|
667
|
+
{[{ label: '重命名' }, { label: '停止' }, { label: '删除', danger: true }].map(op => (
|
|
668
|
+
<div
|
|
669
|
+
key={op.label}
|
|
670
|
+
aria-disabled="true"
|
|
671
|
+
title="后端待上线"
|
|
672
|
+
className={`flex flex-col items-center justify-center gap-1 rounded-lg border px-2 py-2 text-[12px] cursor-not-allowed ${
|
|
673
|
+
op.danger ? 'border-red-900/30 bg-red-900/[0.06] text-red-300/55' : 'border-[#26262b] bg-[#161618] text-gray-500'
|
|
674
|
+
}`}
|
|
675
|
+
>
|
|
676
|
+
{op.label}
|
|
677
|
+
<span className="text-[9px] px-1 py-0.5 rounded bg-[#2a2a30] text-gray-400">即将支持</span>
|
|
678
|
+
</div>
|
|
679
|
+
))}
|
|
680
|
+
</div>
|
|
681
|
+
<p className="mt-2 text-[11px] text-gray-600">重启已接入后端;重命名 / 停止 / 删除待后端(RFC-024 改名 · RFC-027 停止/删除)上线。</p>
|
|
682
|
+
</section>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
|
|
686
|
+
<style jsx global>{`
|
|
687
|
+
@keyframes node-settings-slide-in {
|
|
688
|
+
from { transform: translateX(100%); }
|
|
689
|
+
to { transform: translateX(0); }
|
|
690
|
+
}
|
|
691
|
+
.animate-slide-in { animation: node-settings-slide-in 0.2s ease-out; }
|
|
692
|
+
`}</style>
|
|
693
|
+
</>
|
|
694
|
+
);
|
|
695
|
+
}
|