@sleep2agi/agent-network-dashboard 0.5.3-preview.2 → 0.5.3-preview.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +32 -32
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +12 -12
- package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +7 -7
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +14 -14
- package/.next/server/app/admin.segments/_full.segment.rsc +14 -14
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +7 -7
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +14 -14
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +7 -7
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +14 -14
- package/.next/server/app/login.segments/_full.segment.rsc +14 -14
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +7 -7
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/login.segments/login.segment.rsc +3 -3
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +14 -14
- package/.next/server/app/logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +14 -14
- package/.next/server/app/messages.segments/_full.segment.rsc +14 -14
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +7 -7
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +14 -14
- package/.next/server/app/node.segments/_full.segment.rsc +14 -14
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +7 -7
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/node.segments/node.segment.rsc +3 -3
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +14 -14
- package/.next/server/app/nodes.segments/_full.segment.rsc +14 -14
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +7 -7
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +14 -14
- package/.next/server/app/server-logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +14 -14
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +14 -14
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +14 -14
- package/.next/server/app/settings.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +14 -14
- package/.next/server/app/tasks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +4 -4
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0mvyi-4._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0mvyi-4._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{05zlv0iopwd40.js → 01he.jfmupx6b.js} +1 -1
- package/.next/static/chunks/047xfmz-_yklx.js +1 -0
- package/.next/static/chunks/08.zg.lu3fwqw.js +4 -0
- package/.next/static/chunks/0_c5~297u5j0p.js +1 -0
- package/.next/static/chunks/{03a4--7ncekmk.js → 0v4-5tng.uh.7.js} +2 -2
- package/.next/static/chunks/17if82x7mcn4j.css +2 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/ServersDrawer.tsx +16 -3
- package/app/components/TopoGraph.tsx +5343 -182
- package/app/globals.css +228 -6
- package/package.json +4 -4
- package/scripts/p157-servers-copy-test.mjs +95 -0
- package/scripts/topo-active-chrome-hover-text-test.mjs +107 -0
- package/scripts/topo-active-links-chip-halo-layers-test.mjs +81 -0
- package/scripts/topo-alias-chat-brightness-test.mjs +79 -0
- package/scripts/topo-alias-glow-test.mjs +121 -0
- package/scripts/topo-alias-text-halo-layers-test.mjs +98 -0
- package/scripts/topo-avatar-brightness-test.mjs +116 -0
- package/scripts/topo-avatar-chat-gate-test.mjs +77 -0
- package/scripts/topo-avatar-drop-shadow-test.mjs +86 -0
- package/scripts/topo-avatar-fallback-hover-test.mjs +104 -0
- package/scripts/topo-avatar-fallback-rotate-test.mjs +92 -0
- package/scripts/topo-avatar-rotate-test.mjs +85 -0
- package/scripts/topo-avatar-scale-test.mjs +89 -0
- package/scripts/topo-badge-chat-gate-test.mjs +74 -0
- package/scripts/topo-brand-drop-shadow-test.mjs +71 -0
- package/scripts/topo-brand-logo-breath-test.mjs +102 -0
- package/scripts/topo-brand-logo-halo-layers-test.mjs +85 -0
- package/scripts/topo-brand-logo-hover-brightness-test.mjs +105 -0
- package/scripts/topo-brand-logo-hover-rotate-test.mjs +93 -0
- package/scripts/topo-brand-logo-hover-test.mjs +85 -0
- package/scripts/topo-card-chat-brightness-test.mjs +86 -0
- package/scripts/topo-chat-ring-breath-curve-test.mjs +114 -0
- package/scripts/topo-chat-ring-brightness-test.mjs +80 -0
- package/scripts/topo-chat-ring-halo-layers-test.mjs +100 -0
- package/scripts/topo-chat-ring-r-breath-test.mjs +121 -0
- package/scripts/topo-chat-ring-status-halo-test.mjs +106 -0
- package/scripts/topo-chat-ring-sw-breath-test.mjs +123 -0
- package/scripts/topo-chip-row-digit-ls-test.mjs +135 -0
- package/scripts/topo-chip-row-member-alias-lit-test.mjs +154 -0
- package/scripts/topo-chip-row-press-test.mjs +93 -0
- package/scripts/topo-chip-row-tier-glow-brightness-test.mjs +99 -0
- package/scripts/topo-chip-row-unit-hover-tracking-test.mjs +124 -0
- package/scripts/topo-chrome-control-halo-layers-test.mjs +22 -0
- package/scripts/topo-chrome-press-fullstrip-test.mjs +105 -0
- package/scripts/topo-chrome-press-scale-test.mjs +100 -0
- package/scripts/topo-click-ripple-glow-test.mjs +86 -0
- package/scripts/topo-click-ripple-halo-layers-test.mjs +79 -0
- package/scripts/topo-click-ripple-sw-test.mjs +110 -0
- package/scripts/topo-cluster-count-attr-test.mjs +80 -0
- package/scripts/topo-crescent-breath-test.mjs +104 -0
- package/scripts/topo-crescent-recede-test.mjs +111 -0
- package/scripts/topo-dense-alias-halo-layers-test.mjs +80 -0
- package/scripts/topo-edge-badge-circle-brightness-test.mjs +82 -0
- package/scripts/topo-edge-badge-circle-hot-pulse-test.mjs +100 -0
- package/scripts/topo-edge-badge-digit-halo-layers-test.mjs +107 -0
- package/scripts/topo-edge-badge-endpoint-gate-test.mjs +94 -0
- package/scripts/topo-edge-badge-halo-layers-test.mjs +85 -0
- package/scripts/topo-edge-badge-hot-pulse-test.mjs +92 -0
- package/scripts/topo-edge-badge-hover-glow-test.mjs +90 -0
- package/scripts/topo-edge-badge-text-brightness-test.mjs +83 -0
- package/scripts/topo-edge-chat-gate-test.mjs +71 -0
- package/scripts/topo-edge-flow-rail-halo-layers-test.mjs +89 -0
- package/scripts/topo-edge-particle-brightness-test.mjs +82 -0
- package/scripts/topo-edge-particle-halo-layers-test.mjs +91 -0
- package/scripts/topo-edge-pill-glow-test.mjs +67 -0
- package/scripts/topo-edge-visible-brightness-test.mjs +84 -0
- package/scripts/topo-edge-visible-halo-layers-test.mjs +87 -0
- package/scripts/topo-endpoint-ring-brightness-test.mjs +83 -0
- package/scripts/topo-endpoint-ring-flow-halo-test.mjs +107 -0
- package/scripts/topo-endpoint-ring-halo-layers-test.mjs +100 -0
- package/scripts/topo-filter-pill-glow-test.mjs +90 -0
- package/scripts/topo-filter-pill-halo-layers-test.mjs +27 -0
- package/scripts/topo-filter-pills-press-test.mjs +96 -0
- package/scripts/topo-fleet-density-tier-test.mjs +84 -0
- package/scripts/topo-flow-arrow-brightness-test.mjs +82 -0
- package/scripts/topo-flow-rail-brightness-test.mjs +80 -0
- package/scripts/topo-focus-outline-transition-test.mjs +107 -0
- package/scripts/topo-freshness-chip-fade-test.mjs +105 -0
- package/scripts/topo-fullscreen-attr-test.mjs +73 -0
- package/scripts/topo-fullscreen-brightness-test.mjs +84 -0
- package/scripts/topo-fullscreen-icon-rotate-test.mjs +93 -0
- package/scripts/topo-grid-content-bottom-attr-test.mjs +72 -0
- package/scripts/topo-group-box-brightness-test.mjs +84 -0
- package/scripts/topo-group-box-halo-layers-test.mjs +91 -0
- package/scripts/topo-group-chat-gate-test.mjs +77 -0
- package/scripts/topo-group-label-brightness-test.mjs +84 -0
- package/scripts/topo-group-label-halo-layers-test.mjs +78 -0
- package/scripts/topo-group-label-hover-glow-test.mjs +86 -0
- package/scripts/topo-group-label-member-alias-hover-test.mjs +125 -0
- package/scripts/topo-group-pill-glow-test.mjs +76 -0
- package/scripts/topo-group-tint-brightness-test.mjs +82 -0
- package/scripts/topo-halo-chat-gate-test.mjs +72 -0
- package/scripts/topo-hub-core-brightness-test.mjs +82 -0
- package/scripts/topo-hub-core-halo-layers-test.mjs +81 -0
- package/scripts/topo-hub-digit-brightness-test.mjs +79 -0
- package/scripts/topo-hub-digit-halo-layers-test.mjs +76 -0
- package/scripts/topo-hub-digit-ls-test.mjs +119 -0
- package/scripts/topo-hub-halo-brightness-test.mjs +80 -0
- package/scripts/topo-hub-halo-glow-test.mjs +96 -0
- package/scripts/topo-hub-halo-halo-layers-test.mjs +76 -0
- package/scripts/topo-hub-highlight-amplify-test.mjs +139 -0
- package/scripts/topo-hub-highlight-brightness-test.mjs +84 -0
- package/scripts/topo-hub-highlight-fill-transition-test.mjs +84 -0
- package/scripts/topo-hub-highlight-glow-test.mjs +99 -0
- package/scripts/topo-hub-highlight-halo-layers-test.mjs +78 -0
- package/scripts/topo-hub-highlight-r-test.mjs +112 -0
- package/scripts/topo-hub-highlight-recede-test.mjs +144 -0
- package/scripts/topo-hub-highlight-theme-fill-test.mjs +83 -0
- package/scripts/topo-hub-hover-ring-brightness-test.mjs +79 -0
- package/scripts/topo-hub-hover-ring-glow-test.mjs +97 -0
- package/scripts/topo-hub-hover-ring-halo-layers-test.mjs +71 -0
- package/scripts/topo-hub-idle-breath-test.mjs +109 -0
- package/scripts/topo-hub-recede-test.mjs +124 -0
- package/scripts/topo-hub-spoke-brightness-test.mjs +77 -0
- package/scripts/topo-hub-spoke-glow-test.mjs +112 -0
- package/scripts/topo-hub-spoke-halo-layers-test.mjs +97 -0
- package/scripts/topo-hub-spoke-self-filter-test.mjs +119 -0
- package/scripts/topo-kicker-halo-layers-test.mjs +82 -0
- package/scripts/topo-label-card-brightness-test.mjs +81 -0
- package/scripts/topo-layout-hover-fw-test.mjs +98 -0
- package/scripts/topo-layout-toggle-brightness-test.mjs +94 -0
- package/scripts/topo-layout-toggle-halo-layers-test.mjs +95 -0
- package/scripts/topo-legend-count-brightness-test.mjs +80 -0
- package/scripts/topo-legend-count-halo-layers-test.mjs +79 -0
- package/scripts/topo-legend-count-letter-spacing-test.mjs +108 -0
- package/scripts/topo-legend-label-fw-test.mjs +107 -0
- package/scripts/topo-legend-pin-ring-brightness-test.mjs +82 -0
- package/scripts/topo-legend-pin-ring-halo-layers-test.mjs +71 -0
- package/scripts/topo-legend-row-count-brightness-test.mjs +85 -0
- package/scripts/topo-legend-row-label-glow-test.mjs +102 -0
- package/scripts/topo-legend-swatch-glow-test.mjs +109 -0
- package/scripts/topo-legend-swatch-member-alias-match-test.mjs +139 -0
- package/scripts/topo-legend-tint-brightness-test.mjs +83 -0
- package/scripts/topo-legend-trio-halo-layers-test.mjs +22 -0
- package/scripts/topo-minimap-dot-chat-gate-test.mjs +81 -0
- package/scripts/topo-minimap-hover-glow-test.mjs +109 -0
- package/scripts/topo-minimap-viewport-brightness-test.mjs +84 -0
- package/scripts/topo-minimap-viewport-halo-layers-test.mjs +24 -0
- package/scripts/topo-more-footer-brightness-test.mjs +94 -0
- package/scripts/topo-node-alias-brightness-test.mjs +84 -0
- package/scripts/topo-node-avatar-halo-layers-test.mjs +25 -0
- package/scripts/topo-node-hover-ring-halo-layers-test.mjs +70 -0
- package/scripts/topo-node-sub-text-brightness-test.mjs +88 -0
- package/scripts/topo-nodesize-brightness-test.mjs +82 -0
- package/scripts/topo-nodesize-halo-layers-test.mjs +89 -0
- package/scripts/topo-nodesize-hover-fw-test.mjs +99 -0
- package/scripts/topo-orphan-box-dash-test.mjs +89 -0
- package/scripts/topo-orphan-fill-opacity-test.mjs +91 -0
- package/scripts/topo-orphan-label-italic-test.mjs +90 -0
- package/scripts/topo-orphan-label-opacity-test.mjs +98 -0
- package/scripts/topo-panel-count-halo-layers-test.mjs +91 -0
- package/scripts/topo-panel-count-hover-ls-test.mjs +87 -0
- package/scripts/topo-panel-row-brightness-test.mjs +116 -0
- package/scripts/topo-panel-title-brightness-test.mjs +98 -0
- package/scripts/topo-panel-title-glow-test.mjs +111 -0
- package/scripts/topo-panel-titles-halo-layers-test.mjs +23 -0
- package/scripts/topo-pill-x-rotate-test.mjs +96 -0
- package/scripts/topo-pinned-aspect-test.mjs +89 -0
- package/scripts/topo-pip-brightness-test.mjs +85 -0
- package/scripts/topo-pressure-bar-halo-layers-test.mjs +19 -0
- package/scripts/topo-pressure-seg-glow-test.mjs +92 -0
- package/scripts/topo-pressure-seg-member-alias-match-test.mjs +133 -0
- package/scripts/topo-pressure-seg-motion-test.mjs +101 -0
- package/scripts/topo-recent-count-brightness-test.mjs +84 -0
- package/scripts/topo-recent-hot-pulse-test.mjs +102 -0
- package/scripts/topo-recent-more-fw-test.mjs +126 -0
- package/scripts/topo-recent-more-halo-layers-test.mjs +90 -0
- package/scripts/topo-recent-panel-hot-pulse-test.mjs +105 -0
- package/scripts/topo-recent-pip-halo-layers-test.mjs +82 -0
- package/scripts/topo-recent-row-chat-gate-test.mjs +75 -0
- package/scripts/topo-recent-row-content-lift-test.mjs +140 -0
- package/scripts/topo-recent-row-fw-test.mjs +115 -0
- package/scripts/topo-recent-row-text-glow-test.mjs +86 -0
- package/scripts/topo-recent-row-text-halo-layers-test.mjs +67 -0
- package/scripts/topo-recent-tint-brightness-test.mjs +80 -0
- package/scripts/topo-recent-ts-brightness-test.mjs +86 -0
- package/scripts/topo-reduced-motion-attr-test.mjs +69 -0
- package/scripts/topo-reset-brightness-test.mjs +83 -0
- package/scripts/topo-reset-icon-hover-scale-test.mjs +102 -0
- package/scripts/topo-runtime-badge-brightness-test.mjs +78 -0
- package/scripts/topo-runtime-badge-glow-test.mjs +108 -0
- package/scripts/topo-runtime-badge-halo-layers-test.mjs +87 -0
- package/scripts/topo-runtime-badge-rotate-test.mjs +85 -0
- package/scripts/topo-section-title-halo-layers-test.mjs +88 -0
- package/scripts/topo-spoke-chat-gate-test.mjs +72 -0
- package/scripts/topo-starfield-hue-test.mjs +109 -0
- package/scripts/topo-status-pin-pill-halo-layers-test.mjs +17 -0
- package/scripts/topo-status-ring-brightness-test.mjs +84 -0
- package/scripts/topo-status-ring-chat-gate-test.mjs +72 -0
- package/scripts/topo-status-ring-halo-layers-test.mjs +105 -0
- package/scripts/topo-status-ring-status-halo-test.mjs +110 -0
- package/scripts/topo-sub-text-chat-brightness-test.mjs +81 -0
- package/scripts/topo-svg-focus-transition-test.mjs +105 -0
- package/scripts/topo-titleblock-h2-hover-fw-test.mjs +109 -0
- package/scripts/topo-titleblock-h2-hover-tracking-test.mjs +128 -0
- package/scripts/topo-titleblock-kicker-hover-test.mjs +134 -0
- package/scripts/topo-vendor-activelinks-press-test.mjs +100 -0
- package/scripts/topo-vendor-chip-glow-test.mjs +97 -0
- package/scripts/topo-vendor-chip-halo-layers-test.mjs +18 -0
- package/scripts/topo-vendor-letter-halo-layers-test.mjs +93 -0
- package/scripts/topo-vendor-pill-glow-test.mjs +98 -0
- package/scripts/topo-watermark-breath-test.mjs +100 -0
- package/scripts/topo-watermark-recede-test.mjs +114 -0
- package/scripts/topo-zoom-buttons-brightness-test.mjs +94 -0
- package/scripts/topo-zoom-in-out-halo-layers-test.mjs +97 -0
- package/scripts/topo-zoom-level-brightness-test.mjs +83 -0
- package/scripts/topo-zoom-level-color-test.mjs +105 -0
- package/scripts/topo-zoom-level-halo-layers-test.mjs +78 -0
- package/.next/static/chunks/0a4hmfvj-81x5.css +0 -2
- package/.next/static/chunks/0a~3lmgl2.3sm.js +0 -4
- package/.next/static/chunks/0w_zjois27-bj.js +0 -1
- package/.next/static/chunks/11vp-~kvgz81f.js +0 -1
- /package/.next/static/{AQG7LOsK4d0T0j2nFonEh → N193Pg2TkoL0c6mKNfKm_}/_buildManifest.js +0 -0
- /package/.next/static/{AQG7LOsK4d0T0j2nFonEh → N193Pg2TkoL0c6mKNfKm_}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{AQG7LOsK4d0T0j2nFonEh → N193Pg2TkoL0c6mKNfKm_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* Round 579 verification: hub-hover-ring stacks brightness(1.15)
|
|
2
|
+
* onto R535 hub-hover drop-shadow. 18th anchor in per-element
|
|
3
|
+
* brightness family.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. rest: filter='none' (ring opacity=0 when not hovered),
|
|
7
|
+
* brightness-attr='1'
|
|
8
|
+
* 2. source: both theme filter expressions stack brightness
|
|
9
|
+
*/
|
|
10
|
+
import { chromium } from 'playwright';
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
12
|
+
|
|
13
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
14
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
15
|
+
|
|
16
|
+
const browser = await chromium.launch({ headless: true });
|
|
17
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
18
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
19
|
+
await ctx.addInitScript(() => {
|
|
20
|
+
try {
|
|
21
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
22
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
23
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
24
|
+
} catch {}
|
|
25
|
+
});
|
|
26
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
27
|
+
const r = await route.fetch();
|
|
28
|
+
const b = await r.json();
|
|
29
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
30
|
+
const mk = (alias) => ({
|
|
31
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
32
|
+
network_id: nid, project_dir: null,
|
|
33
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
34
|
+
});
|
|
35
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1')] } });
|
|
36
|
+
});
|
|
37
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
38
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
39
|
+
const page = await ctx.newPage();
|
|
40
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
41
|
+
await page.waitForSelector('[data-topo-hub-hover-ring]', { timeout: 15000 });
|
|
42
|
+
await page.waitForTimeout(500);
|
|
43
|
+
|
|
44
|
+
const rest = await page.evaluate(() => {
|
|
45
|
+
const el = document.querySelector('[data-topo-hub-hover-ring]');
|
|
46
|
+
if (!el) return null;
|
|
47
|
+
const cs = getComputedStyle(el);
|
|
48
|
+
return {
|
|
49
|
+
filter: cs.filter,
|
|
50
|
+
transitionProperty: cs.transitionProperty,
|
|
51
|
+
brightnessAttr: el.getAttribute('data-topo-hub-hover-ring-brightness'),
|
|
52
|
+
glowAttr: el.getAttribute('data-topo-hub-hover-ring-glow'),
|
|
53
|
+
opacityAttr: el.getAttribute('data-topo-hub-hover-ring-opacity'),
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await browser.close();
|
|
58
|
+
|
|
59
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
60
|
+
const sourceLightFilter = /'drop-shadow\(0 0 3px rgba\(16, 185, 129, 0\.5\)\) brightness\(1\.15\)'/.test(src);
|
|
61
|
+
const sourceCyberFilter = /'drop-shadow\(0 0 3px rgba\(52, 211, 153, 0\.5\)\) brightness\(1\.15\)'/.test(src);
|
|
62
|
+
const sourceAttr = /data-topo-hub-hover-ring-brightness=\{!reducedMotion && hoveredHub \? '1\.15' : '1'\}/.test(src);
|
|
63
|
+
|
|
64
|
+
const results = {
|
|
65
|
+
ring_present: !!rest,
|
|
66
|
+
rest_filter_none: rest?.filter === 'none',
|
|
67
|
+
rest_brightness_1: rest?.brightnessAttr === '1',
|
|
68
|
+
rest_glow_false: rest?.glowAttr === 'false',
|
|
69
|
+
rest_opacity_0: rest?.opacityAttr === '0',
|
|
70
|
+
transition_has_filter: /filter/.test(rest?.transitionProperty || ''),
|
|
71
|
+
source_light_filter: sourceLightFilter,
|
|
72
|
+
source_cyber_filter: sourceCyberFilter,
|
|
73
|
+
source_attr: sourceAttr,
|
|
74
|
+
};
|
|
75
|
+
const ok = Object.values(results).every(Boolean);
|
|
76
|
+
console.log(`${ok ? '✅' : '❌'} R579 hub-hover-ring stacked brightness (18th anchor, hub-cluster closure 4/5):`,
|
|
77
|
+
JSON.stringify(results, null, 2),
|
|
78
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
79
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/* Round 535 verification: hub hover-ring gains drop-shadow glow on
|
|
2
|
+
* hub-hover — completes hub-cluster glow quartet (digit + disc +
|
|
3
|
+
* spokes + ring).
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. rest: glow attr='false', filter='none', opacity=0
|
|
7
|
+
* 2. hover hub (mouse.move to hub center bbox): glow='true',
|
|
8
|
+
* filter has cyber emerald-400 drop-shadow, opacity > 0
|
|
9
|
+
* 3. transition list includes 'filter 200ms ease-out'
|
|
10
|
+
* 4. source-side regex confirms filter ternary + transition wiring
|
|
11
|
+
*/
|
|
12
|
+
import { chromium } from 'playwright';
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
|
|
15
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
16
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
17
|
+
|
|
18
|
+
const browser = await chromium.launch({ headless: true });
|
|
19
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
20
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
21
|
+
await ctx.addInitScript(() => {
|
|
22
|
+
try {
|
|
23
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
24
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
25
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
26
|
+
} catch {}
|
|
27
|
+
});
|
|
28
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
29
|
+
const r = await route.fetch();
|
|
30
|
+
const b = await r.json();
|
|
31
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
32
|
+
const mk = (alias) => ({
|
|
33
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
34
|
+
network_id: nid, project_dir: null,
|
|
35
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
36
|
+
});
|
|
37
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
|
|
38
|
+
});
|
|
39
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
40
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
41
|
+
const page = await ctx.newPage();
|
|
42
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
43
|
+
await page.waitForSelector('[data-topo-hub-hover-ring]', { timeout: 15000 });
|
|
44
|
+
await page.waitForTimeout(800);
|
|
45
|
+
|
|
46
|
+
const restRead = async () => page.evaluate(() => {
|
|
47
|
+
const el = document.querySelector('[data-topo-hub-hover-ring]');
|
|
48
|
+
if (!el) return null;
|
|
49
|
+
const cs = getComputedStyle(el);
|
|
50
|
+
return {
|
|
51
|
+
glowAttr: el.getAttribute('data-topo-hub-hover-ring-glow'),
|
|
52
|
+
opacity: el.getAttribute('opacity'),
|
|
53
|
+
filter: cs.filter,
|
|
54
|
+
transition: cs.transition,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Phase 1: rest
|
|
59
|
+
const rest = await restRead();
|
|
60
|
+
|
|
61
|
+
// Phase 2: hover hub via hub-highlight bbox (banked R527 path)
|
|
62
|
+
const hubBbox = await page.locator('[data-topo-hub-highlight]').first().boundingBox();
|
|
63
|
+
if (hubBbox) {
|
|
64
|
+
await page.mouse.move(hubBbox.x + hubBbox.width / 2, hubBbox.y + hubBbox.height / 2);
|
|
65
|
+
}
|
|
66
|
+
await page.waitForTimeout(400);
|
|
67
|
+
const hover = await restRead();
|
|
68
|
+
|
|
69
|
+
await browser.close();
|
|
70
|
+
|
|
71
|
+
// Source regex
|
|
72
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
73
|
+
const sourceFilterTernary =
|
|
74
|
+
/filter: !reducedMotion && hoveredHub\s+\? \(isLight\s+\? 'drop-shadow\(0 0 3px rgba\(16, 185, 129, 0\.5\)\)'\s+: 'drop-shadow\(0 0 3px rgba\(52, 211, 153, 0\.5\)\)'\)\s+: undefined,/.test(src);
|
|
75
|
+
const sourceAttrWired =
|
|
76
|
+
/data-topo-hub-hover-ring-glow=\{!reducedMotion && hoveredHub \? 'true' : 'false'\}/.test(src);
|
|
77
|
+
const sourceTransitionExt =
|
|
78
|
+
/transition: 'opacity 180ms ease-out, r 180ms ease-out, stroke 200ms ease-out, filter 200ms ease-out'/.test(src);
|
|
79
|
+
|
|
80
|
+
const results = {
|
|
81
|
+
rest_glow_false: rest?.glowAttr === 'false',
|
|
82
|
+
rest_opacity_0: rest?.opacity === '0',
|
|
83
|
+
rest_filter_none: rest?.filter === 'none' || rest?.filter === '',
|
|
84
|
+
rest_transition_has_filter: /\bfilter\b/.test(rest?.transition || ''),
|
|
85
|
+
hover_glow_true: hover?.glowAttr === 'true',
|
|
86
|
+
hover_opacity_visible: parseFloat(hover?.opacity || '0') > 0,
|
|
87
|
+
hover_filter_drop_shadow: /drop-shadow\(.+52,?\s*211,?\s*153/.test(hover?.filter || ''), // cyber emerald-400
|
|
88
|
+
source_filter_ternary: sourceFilterTernary,
|
|
89
|
+
source_attr_wired: sourceAttrWired,
|
|
90
|
+
source_transition_ext: sourceTransitionExt,
|
|
91
|
+
};
|
|
92
|
+
const ok = Object.values(results).every(Boolean);
|
|
93
|
+
console.log(`${ok ? '✅' : '❌'} R535 hub-hover-ring glow:`,
|
|
94
|
+
JSON.stringify(results, null, 2),
|
|
95
|
+
'\n rest:', JSON.stringify(rest),
|
|
96
|
+
'\n hover:', JSON.stringify(hover));
|
|
97
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/* Round 653 — hub-hover-ring drop-shadow gains a SECOND outer
|
|
2
|
+
* layer at 6px blur + 0.25 alpha. 12th anchor in multi-layer halo
|
|
3
|
+
* family (4th hub-cluster anchor after R650 digit + R651 halo +
|
|
4
|
+
* R652 highlight).
|
|
5
|
+
*/
|
|
6
|
+
import { chromium } from 'playwright';
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
|
|
9
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
10
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
11
|
+
|
|
12
|
+
const browser = await chromium.launch({ headless: true });
|
|
13
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
14
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
15
|
+
await ctx.addInitScript(() => {
|
|
16
|
+
try {
|
|
17
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
18
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
19
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
20
|
+
} catch {}
|
|
21
|
+
});
|
|
22
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
23
|
+
const r = await route.fetch();
|
|
24
|
+
const b = await r.json();
|
|
25
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
26
|
+
const mk = (alias) => ({
|
|
27
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
28
|
+
network_id: nid, project_dir: null,
|
|
29
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
30
|
+
});
|
|
31
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
|
|
32
|
+
});
|
|
33
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
34
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
35
|
+
const page = await ctx.newPage();
|
|
36
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
37
|
+
await page.waitForSelector('[data-topo-hub-hover-ring-halo-layers]', { timeout: 15000, state: 'attached' });
|
|
38
|
+
await page.waitForTimeout(500);
|
|
39
|
+
|
|
40
|
+
const rest = await page.evaluate(() => {
|
|
41
|
+
const el = document.querySelector('[data-topo-hub-hover-ring-halo-layers]');
|
|
42
|
+
if (!el) return null;
|
|
43
|
+
const cs = getComputedStyle(el);
|
|
44
|
+
return {
|
|
45
|
+
layers: el.getAttribute('data-topo-hub-hover-ring-halo-layers'),
|
|
46
|
+
glow: el.getAttribute('data-topo-hub-hover-ring-glow'),
|
|
47
|
+
filter: cs.filter,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await browser.close();
|
|
52
|
+
|
|
53
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
54
|
+
const sourceLight = /'drop-shadow\(0 0 3px rgba\(16, 185, 129, 0\.5\)\) drop-shadow\(0 0 6px rgba\(16, 185, 129, 0\.25\)\) brightness\(1\.15\)'/.test(src);
|
|
55
|
+
const sourceCyber = /'drop-shadow\(0 0 3px rgba\(52, 211, 153, 0\.5\)\) drop-shadow\(0 0 6px rgba\(52, 211, 153, 0\.25\)\) brightness\(1\.15\)'/.test(src);
|
|
56
|
+
const sourceLayersAttr = /data-topo-hub-hover-ring-halo-layers=\{!reducedMotion && hoveredHub \? '2' : '0'\}/.test(src);
|
|
57
|
+
|
|
58
|
+
const results = {
|
|
59
|
+
rest_present: !!rest,
|
|
60
|
+
rest_layers_0: rest?.layers === '0',
|
|
61
|
+
rest_glow_false: rest?.glow === 'false',
|
|
62
|
+
rest_filter_no_drop_shadow: !/drop-shadow/.test(rest?.filter || ''),
|
|
63
|
+
source_light_filter: sourceLight,
|
|
64
|
+
source_cyber_filter: sourceCyber,
|
|
65
|
+
source_layers_attr: sourceLayersAttr,
|
|
66
|
+
};
|
|
67
|
+
const ok = Object.values(results).every(Boolean);
|
|
68
|
+
console.log(`${ok ? '✅' : '❌'} R653 hub-hover-ring multi-layer halo (4th hub-cluster anchor):`,
|
|
69
|
+
JSON.stringify(results, null, 2),
|
|
70
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
71
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Round 497 verification: hub-highlight circle (data-topo-hub-highlight)
|
|
2
|
+
* gets a SMIL idle-breath (0.85↔1.0 over 4s) when workingCount === 0 &&
|
|
3
|
+
* !reducedMotion. Signals "fleet alive but quiet" on the empty-state
|
|
4
|
+
* canvas. Pivot away from R492-R496 press-family arc into 呼吸感 theme.
|
|
5
|
+
*
|
|
6
|
+
* Test scenarios:
|
|
7
|
+
* 1. Empty fleet (no sessions) → hub-highlight visible + animate child rendered
|
|
8
|
+
* 2. Empty fleet + prefers-reduced-motion → static, no animate
|
|
9
|
+
* 3. Busy fleet (working session) → hub-highlight invisible, no animate
|
|
10
|
+
* 4. data-topo-hub-highlight-breath attr surfaces gate state for each
|
|
11
|
+
* 5. Source-file: animate child wired
|
|
12
|
+
*/
|
|
13
|
+
import { chromium } from 'playwright';
|
|
14
|
+
import { readFileSync } from 'node:fs';
|
|
15
|
+
|
|
16
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
17
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
18
|
+
|
|
19
|
+
async function probe({ sessions, reducedMotion }) {
|
|
20
|
+
const browser = await chromium.launch({ headless: true });
|
|
21
|
+
const ctx = await browser.newContext({
|
|
22
|
+
viewport: { width: 1500, height: 1200 },
|
|
23
|
+
reducedMotion: reducedMotion ? 'reduce' : 'no-preference',
|
|
24
|
+
});
|
|
25
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
26
|
+
await ctx.addInitScript(() => {
|
|
27
|
+
try {
|
|
28
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
29
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
30
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
31
|
+
} catch {}
|
|
32
|
+
});
|
|
33
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
34
|
+
const r = await route.fetch();
|
|
35
|
+
const b = await r.json();
|
|
36
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
37
|
+
const mk = (alias, status) => ({
|
|
38
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
39
|
+
network_id: nid, project_dir: null,
|
|
40
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
41
|
+
});
|
|
42
|
+
await route.fulfill({ response: r, json: { ...b, sessions: sessions.map((s) => mk(s.alias, s.status)) } });
|
|
43
|
+
});
|
|
44
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
45
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
46
|
+
const page = await ctx.newPage();
|
|
47
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
48
|
+
await page.waitForSelector('[data-topo-hub-highlight]', { timeout: 15000 });
|
|
49
|
+
await page.waitForTimeout(1000);
|
|
50
|
+
|
|
51
|
+
const result = await page.evaluate(() => {
|
|
52
|
+
const circle = document.querySelector('[data-topo-hub-highlight]');
|
|
53
|
+
if (!circle) return null;
|
|
54
|
+
const breath = circle.getAttribute('data-topo-hub-highlight-breath');
|
|
55
|
+
const visible = circle.getAttribute('data-topo-hub-highlight-visible');
|
|
56
|
+
const animateChild = circle.querySelector('animate[attributeName="opacity"]');
|
|
57
|
+
return {
|
|
58
|
+
breath_attr: breath,
|
|
59
|
+
visible_attr: visible,
|
|
60
|
+
has_animate: !!animateChild,
|
|
61
|
+
animate_values: animateChild && animateChild.getAttribute('values'),
|
|
62
|
+
animate_dur: animateChild && animateChild.getAttribute('dur'),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
await browser.close();
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Empty sessions array triggers the empty-state placeholder which doesn't
|
|
70
|
+
// render the SVG hub. For workingCount===0 with hub rendered, use an
|
|
71
|
+
// 'idle' session — fleet exists but no node is working.
|
|
72
|
+
const idle = await probe({ sessions: [{ alias: 'a·1', status: 'idle' }], reducedMotion: false });
|
|
73
|
+
const idleA11y = await probe({ sessions: [{ alias: 'a·1', status: 'idle' }], reducedMotion: true });
|
|
74
|
+
const busy = await probe({ sessions: [{ alias: 'a·1', status: 'working' }], reducedMotion: false });
|
|
75
|
+
|
|
76
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
77
|
+
// R508 refactor: IIFE with `breathActive` const.
|
|
78
|
+
// R511 extension: breathActive also gates on !hoveredHub (hub-hover
|
|
79
|
+
// amplifies highlight to 1.0; breath halts during the lift). Regex
|
|
80
|
+
// updated to match. Runtime DOM contract (idle visible/busy invisible/
|
|
81
|
+
// a11y no-animate) unchanged.
|
|
82
|
+
const sourceWired = /const breathActive = !reducedMotion && workingCount === 0 && !hubRecede && !hoveredHub;[\s\S]*?\{breathActive && \(\s*<animate attributeName="opacity" values="0\.85;1;0\.85" dur="4s" repeatCount="indefinite"/.test(src);
|
|
83
|
+
const breathAttrWired = /data-topo-hub-highlight-breath=\{breathActive \? 'true' : 'false'\}/.test(src);
|
|
84
|
+
|
|
85
|
+
const results = {
|
|
86
|
+
// Idle + motion: visible + animate present + breath='true'
|
|
87
|
+
idle_visible: idle && idle.visible_attr === 'true',
|
|
88
|
+
idle_has_animate: idle && idle.has_animate,
|
|
89
|
+
idle_breath_true: idle && idle.breath_attr === 'true',
|
|
90
|
+
idle_animate_values: idle && idle.animate_values === '0.85;1;0.85',
|
|
91
|
+
idle_animate_dur: idle && idle.animate_dur === '4s',
|
|
92
|
+
// Idle + reducedMotion: visible but NO animate, breath='false'
|
|
93
|
+
a11y_visible: idleA11y && idleA11y.visible_attr === 'true',
|
|
94
|
+
a11y_no_animate: idleA11y && !idleA11y.has_animate,
|
|
95
|
+
a11y_breath_false: idleA11y && idleA11y.breath_attr === 'false',
|
|
96
|
+
// Busy: invisible + no animate (workingCount > 0)
|
|
97
|
+
busy_invisible: busy && busy.visible_attr === 'false',
|
|
98
|
+
busy_no_animate: busy && !busy.has_animate,
|
|
99
|
+
busy_breath_false: busy && busy.breath_attr === 'false',
|
|
100
|
+
// Source
|
|
101
|
+
source_animate_wired: sourceWired,
|
|
102
|
+
source_breath_attr_wired: breathAttrWired,
|
|
103
|
+
};
|
|
104
|
+
const ok = Object.values(results).every(Boolean);
|
|
105
|
+
console.log(`${ok ? '✅' : '❌'} R497 hub idle breath:`, JSON.stringify(results),
|
|
106
|
+
'\n idle:', JSON.stringify(idle),
|
|
107
|
+
'\n a11y:', JSON.stringify(idleA11y),
|
|
108
|
+
'\n busy:', JSON.stringify(busy));
|
|
109
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/* Round 507 verification: hub-center workingCount digit fades to
|
|
2
|
+
* opacity 0.85 when ANY non-hub canvas surface is hovered. Lifts back
|
|
3
|
+
* to 1.0 on un-hover or when hovering the hub itself.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. rest (no hover) — opacity 1, data-topo-hub-recede='false'
|
|
7
|
+
* 2. node hover (synthetic pointerenter on g[data-node]) —
|
|
8
|
+
* opacity 0.85, data-topo-hub-recede='true'
|
|
9
|
+
* 3. release hover — back to opacity 1, recede='false'
|
|
10
|
+
*
|
|
11
|
+
* Source-side regex confirms gate + style + attr wired.
|
|
12
|
+
*/
|
|
13
|
+
import { chromium } from 'playwright';
|
|
14
|
+
import { readFileSync } from 'node:fs';
|
|
15
|
+
|
|
16
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
17
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
18
|
+
|
|
19
|
+
const browser = await chromium.launch({ headless: true });
|
|
20
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
21
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
22
|
+
await ctx.addInitScript(() => {
|
|
23
|
+
try {
|
|
24
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
25
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
26
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
27
|
+
} catch {}
|
|
28
|
+
});
|
|
29
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
30
|
+
const r = await route.fetch();
|
|
31
|
+
const b = await r.json();
|
|
32
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
33
|
+
const mk = (alias, status) => ({
|
|
34
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
35
|
+
network_id: nid, project_dir: null,
|
|
36
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
37
|
+
});
|
|
38
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
39
|
+
mk('alpha·a1', 'working'),
|
|
40
|
+
mk('alpha·a2', 'idle'),
|
|
41
|
+
] } });
|
|
42
|
+
});
|
|
43
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
44
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
45
|
+
const page = await ctx.newPage();
|
|
46
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
47
|
+
await page.waitForSelector('[data-topo-hub-working-count-glow]', { timeout: 15000 });
|
|
48
|
+
await page.waitForTimeout(1500);
|
|
49
|
+
|
|
50
|
+
// Phase 1: rest state
|
|
51
|
+
const rest = await page.evaluate(() => {
|
|
52
|
+
const el = document.querySelector('[data-topo-hub-working-count-glow]');
|
|
53
|
+
if (!el) return null;
|
|
54
|
+
return {
|
|
55
|
+
recede_attr: el.getAttribute('data-topo-hub-recede'),
|
|
56
|
+
opacity: window.getComputedStyle(el).opacity,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Phase 2: hover a node via R488 banked synthetic dispatch
|
|
61
|
+
await page.evaluate(() => {
|
|
62
|
+
const g = document.querySelector('g[data-node]');
|
|
63
|
+
if (!g) return;
|
|
64
|
+
const target = g.querySelector('circle, image, rect') || g;
|
|
65
|
+
['pointerenter', 'pointerover', 'mouseenter', 'mouseover'].forEach((t) => {
|
|
66
|
+
target.dispatchEvent(new Event(t, { bubbles: true, cancelable: true }));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
await page.waitForTimeout(500);
|
|
70
|
+
const hover = await page.evaluate(() => {
|
|
71
|
+
const el = document.querySelector('[data-topo-hub-working-count-glow]');
|
|
72
|
+
if (!el) return null;
|
|
73
|
+
return {
|
|
74
|
+
recede_attr: el.getAttribute('data-topo-hub-recede'),
|
|
75
|
+
opacity: window.getComputedStyle(el).opacity,
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Phase 3: release hover
|
|
80
|
+
await page.evaluate(() => {
|
|
81
|
+
const g = document.querySelector('g[data-node]');
|
|
82
|
+
if (!g) return;
|
|
83
|
+
const target = g.querySelector('circle, image, rect') || g;
|
|
84
|
+
['pointerleave', 'pointerout', 'mouseleave', 'mouseout'].forEach((t) => {
|
|
85
|
+
target.dispatchEvent(new Event(t, { bubbles: true, cancelable: true }));
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
await page.waitForTimeout(500);
|
|
89
|
+
const release = await page.evaluate(() => {
|
|
90
|
+
const el = document.querySelector('[data-topo-hub-working-count-glow]');
|
|
91
|
+
if (!el) return null;
|
|
92
|
+
return {
|
|
93
|
+
recede_attr: el.getAttribute('data-topo-hub-recede'),
|
|
94
|
+
opacity: window.getComputedStyle(el).opacity,
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
await browser.close();
|
|
99
|
+
|
|
100
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
101
|
+
const sourceGateWired = /\(hoveredAlias \|\| hoveredEdgeKey \|\| hoveredGroupLabel \|\|\s*hoveredStatus \|\| hoveredVendor\) && !hoveredHub/.test(src);
|
|
102
|
+
const sourceOpacity = /opacity: \(hoveredAlias \|\| hoveredEdgeKey \|\| hoveredGroupLabel/.test(src);
|
|
103
|
+
const sourceAttr = /data-topo-hub-recede=\{/.test(src);
|
|
104
|
+
|
|
105
|
+
// computed opacity comes back as a number-string ('1', '0.85')
|
|
106
|
+
const approxEq = (a, b) => Math.abs(parseFloat(a) - b) < 0.01;
|
|
107
|
+
|
|
108
|
+
const results = {
|
|
109
|
+
rest_recede_false: rest && rest.recede_attr === 'false',
|
|
110
|
+
rest_opacity_1: rest && approxEq(rest.opacity, 1),
|
|
111
|
+
hover_recede_true: hover && hover.recede_attr === 'true',
|
|
112
|
+
hover_opacity_85: hover && approxEq(hover.opacity, 0.85),
|
|
113
|
+
release_recede_false: release && release.recede_attr === 'false',
|
|
114
|
+
release_opacity_1: release && approxEq(release.opacity, 1),
|
|
115
|
+
source_gate_wired: sourceGateWired,
|
|
116
|
+
source_opacity_wired: sourceOpacity,
|
|
117
|
+
source_attr_wired: sourceAttr,
|
|
118
|
+
};
|
|
119
|
+
const ok = Object.values(results).every(Boolean);
|
|
120
|
+
console.log(`${ok ? '✅' : '❌'} R507 hub-recede:`, JSON.stringify(results),
|
|
121
|
+
'\n rest:', JSON.stringify(rest),
|
|
122
|
+
'\n hover:', JSON.stringify(hover),
|
|
123
|
+
'\n release:', JSON.stringify(release));
|
|
124
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* Round 580 (65-round milestone) verification: hub-spokes stack
|
|
2
|
+
* brightness(1.15) onto R533 hub-hover drop-shadow. 19th anchor
|
|
3
|
+
* in per-element brightness family. CLOSES hub-cluster
|
|
4
|
+
* brightness at 5/5 concentric elements.
|
|
5
|
+
*
|
|
6
|
+
* Test phases:
|
|
7
|
+
* 1. rest: spoke filter='none' (no hub-hover), brightness-attr='1'
|
|
8
|
+
* 2. source: both theme filter expressions stack brightness
|
|
9
|
+
*/
|
|
10
|
+
import { chromium } from 'playwright';
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
12
|
+
|
|
13
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
14
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
15
|
+
|
|
16
|
+
const browser = await chromium.launch({ headless: true });
|
|
17
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
18
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
19
|
+
await ctx.addInitScript(() => {
|
|
20
|
+
try {
|
|
21
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
22
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
23
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
24
|
+
} catch {}
|
|
25
|
+
});
|
|
26
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
27
|
+
const r = await route.fetch();
|
|
28
|
+
const b = await r.json();
|
|
29
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
30
|
+
const mk = (alias) => ({
|
|
31
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
32
|
+
network_id: nid, project_dir: null,
|
|
33
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
34
|
+
});
|
|
35
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
|
|
36
|
+
});
|
|
37
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
38
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
39
|
+
const page = await ctx.newPage();
|
|
40
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
41
|
+
await page.waitForSelector('[data-topo-hub-spoke-active]', { timeout: 15000, state: 'attached' });
|
|
42
|
+
await page.waitForTimeout(500);
|
|
43
|
+
|
|
44
|
+
const rest = await page.evaluate(() => {
|
|
45
|
+
const el = document.querySelector('[data-topo-hub-spoke-active]');
|
|
46
|
+
if (!el) return null;
|
|
47
|
+
const cs = getComputedStyle(el);
|
|
48
|
+
return {
|
|
49
|
+
filter: cs.filter,
|
|
50
|
+
transitionProperty: cs.transitionProperty,
|
|
51
|
+
brightnessAttr: el.getAttribute('data-topo-hub-spoke-brightness'),
|
|
52
|
+
glowAttr: el.getAttribute('data-topo-hub-spoke-glow'),
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
await browser.close();
|
|
57
|
+
|
|
58
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
59
|
+
const sourceLightFilter = /'drop-shadow\(0 0 1\.5px rgba\(13, 148, 136, 0\.4\)\) brightness\(1\.15\)'/.test(src);
|
|
60
|
+
const sourceCyberFilter = /'drop-shadow\(0 0 1\.5px rgba\(34, 211, 238, 0\.4\)\) brightness\(1\.15\)'/.test(src);
|
|
61
|
+
const sourceAttr = /data-topo-hub-spoke-brightness=\{!reducedMotion && hoveredHub \? '1\.15' : '1'\}/.test(src);
|
|
62
|
+
|
|
63
|
+
const results = {
|
|
64
|
+
spoke_present: !!rest,
|
|
65
|
+
rest_filter_none: rest?.filter === 'none',
|
|
66
|
+
rest_brightness_1: rest?.brightnessAttr === '1',
|
|
67
|
+
rest_glow_false: rest?.glowAttr === 'false',
|
|
68
|
+
transition_has_filter: /filter/.test(rest?.transitionProperty || ''),
|
|
69
|
+
source_light_filter: sourceLightFilter,
|
|
70
|
+
source_cyber_filter: sourceCyberFilter,
|
|
71
|
+
source_attr: sourceAttr,
|
|
72
|
+
};
|
|
73
|
+
const ok = Object.values(results).every(Boolean);
|
|
74
|
+
console.log(`${ok ? '✅' : '❌'} R580 hub-spoke stacked brightness (19th anchor, hub-cluster 5/5 closure, 65-round milestone):`,
|
|
75
|
+
JSON.stringify(results, null, 2),
|
|
76
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
77
|
+
process.exit(ok ? 0 : 1);
|