@sleep2agi/agent-network-dashboard 0.5.3-preview.24 → 0.5.3-preview.240
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 +7 -7
- 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 +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +2 -2
- package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +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 +2 -2
- package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +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 +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +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 +2 -2
- package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/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 +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +3 -3
- package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- 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/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/09mmy8l-4b2ix.js +1 -0
- package/.next/static/chunks/0bin~7-npgcjx.js +4 -0
- package/.next/static/chunks/{115yobnkg0j9i.js → 0qtwrl.z42tp2.js} +1 -1
- package/.next/static/chunks/0xam8-c13i0hj.css +2 -0
- package/.next/static/chunks/10mgpmqxdfqj3.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +5796 -179
- package/app/globals.css +723 -7
- package/package.json +4 -4
- 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-text-halo-layers-test.mjs +98 -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-pin-halo-test.mjs +85 -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-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-fullscreen-breath-test.mjs +121 -0
- package/scripts/topo-chrome-layout-trailer-breath-test.mjs +86 -0
- package/scripts/topo-chrome-nodesize-trailer-breath-test.mjs +86 -0
- package/scripts/topo-chrome-reset-breath-test.mjs +115 -0
- package/scripts/topo-chrome-wrapper-halo-test.mjs +83 -0
- package/scripts/topo-chrome-zoom-wrapper-breath-test.mjs +85 -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-envelope-breath-test.mjs +103 -0
- package/scripts/topo-crescent-recede-test.mjs +111 -0
- package/scripts/topo-dense-alias-chat-halo-test.mjs +73 -0
- package/scripts/topo-dense-alias-halo-layers-test.mjs +80 -0
- package/scripts/topo-dual-axis-surfaces-catalog-test.mjs +94 -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-pin-halo-test.mjs +99 -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-flow-arrow-brightness-test.mjs +82 -0
- package/scripts/topo-flow-rail-brightness-test.mjs +80 -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-h2-dual-axis-breath-test.mjs +92 -0
- package/scripts/topo-h2-triple-axis-breath-test.mjs +138 -0
- package/scripts/topo-halo-chat-gate-test.mjs +72 -0
- package/scripts/topo-hover-detail-halo-test.mjs +76 -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-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 +5 -1
- 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 +6 -7
- 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-breath-test.mjs +100 -0
- package/scripts/topo-kicker-dual-axis-breath-test.mjs +81 -0
- package/scripts/topo-kicker-halo-layers-test.mjs +82 -0
- package/scripts/topo-kicker-triple-axis-breath-test.mjs +124 -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-panel-title-breath-test.mjs +86 -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-container-halo-test.mjs +82 -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-label-card-halo-test.mjs +76 -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-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-rect-halo-test.mjs +90 -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-dual-axis-breath-test.mjs +94 -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-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-r717-triple-axis-pair-pattern-test.mjs +113 -0
- package/scripts/topo-r717-triple-axis-tier-pattern-test.mjs +110 -0
- package/scripts/topo-recent-count-brightness-test.mjs +84 -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-panel-title-breath-test.mjs +91 -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-respiratory-patterns-catalog-test.mjs +106 -0
- package/scripts/topo-respiratory-rolodex-test.mjs +83 -0
- package/scripts/topo-respiratory-tiers-catalog-test.mjs +119 -0
- package/scripts/topo-respiratory-triple-axis-surfaces-catalog-test.mjs +127 -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-breath-test.mjs +83 -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-title-block-envelope-breath-test.mjs +87 -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-chip-glow-test.mjs +97 -0
- package/scripts/topo-vendor-chip-halo-layers-test.mjs +18 -0
- package/scripts/topo-vendor-chip-pin-halo-test.mjs +88 -0
- package/scripts/topo-vendor-count-suffix-halo-layers-test.mjs +79 -0
- package/scripts/topo-vendor-distribution-wrapper-halo-test.mjs +93 -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-dual-axis-breath-test.mjs +88 -0
- package/scripts/topo-watermark-envelope-breath-test.mjs +88 -0
- package/scripts/topo-watermark-recede-test.mjs +114 -0
- package/scripts/topo-watermark-triple-axis-breath-test.mjs +129 -0
- package/scripts/topo-working-online-chip-halo-layers-test.mjs +94 -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-breath-test.mjs +87 -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-dual-axis-breath-test.mjs +83 -0
- package/scripts/topo-zoom-level-halo-layers-test.mjs +78 -0
- package/.next/static/chunks/01_u86y_l.lyl.js +0 -1
- package/.next/static/chunks/0m.1mvl~t.avc.css +0 -2
- package/.next/static/chunks/0u-2pbnw428e2.js +0 -1
- package/.next/static/chunks/0yt96fzy~na3o.js +0 -4
- /package/.next/static/{Zlpna2lT3oD0Hh_j8KRN8 → Elk45KtDHnwGqcI6BcPUR}/_buildManifest.js +0 -0
- /package/.next/static/{Zlpna2lT3oD0Hh_j8KRN8 → Elk45KtDHnwGqcI6BcPUR}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{Zlpna2lT3oD0Hh_j8KRN8 → Elk45KtDHnwGqcI6BcPUR}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* Round 572 verification: panel-row text scopes (recent + legend)
|
|
2
|
+
* stack brightness(1.15) onto R568/R569 drop-shadow filter.
|
|
3
|
+
* 9th + 10th anchors in per-element brightness family.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. mock 1 message + 3 sessions → recent-panel + legend-panel render
|
|
7
|
+
* 2. rest: filters='none', brightness-attrs='1'
|
|
8
|
+
* 3. click pressure-seg working → pinnedStatus='working' →
|
|
9
|
+
* working legend-row label filter contains drop-shadow AND
|
|
10
|
+
* brightness(1.15); brightness-attr='1.15'
|
|
11
|
+
* 4. source-side regex confirms stacked filter expressions at both
|
|
12
|
+
* sites + data-attrs
|
|
13
|
+
*/
|
|
14
|
+
import { chromium } from 'playwright';
|
|
15
|
+
import { readFileSync } from 'node:fs';
|
|
16
|
+
|
|
17
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
18
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
19
|
+
|
|
20
|
+
const browser = await chromium.launch({ headless: true });
|
|
21
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
22
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
23
|
+
await ctx.addInitScript(() => {
|
|
24
|
+
try {
|
|
25
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
26
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
27
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
28
|
+
} catch {}
|
|
29
|
+
});
|
|
30
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
31
|
+
const r = await route.fetch();
|
|
32
|
+
const b = await r.json();
|
|
33
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
34
|
+
const mk = (alias, status) => ({
|
|
35
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
36
|
+
network_id: nid, project_dir: null,
|
|
37
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
38
|
+
});
|
|
39
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
40
|
+
mk('alpha·1', 'working'),
|
|
41
|
+
mk('alpha·2', 'idle'),
|
|
42
|
+
mk('alpha·3', 'offline'),
|
|
43
|
+
] } });
|
|
44
|
+
});
|
|
45
|
+
// 1 message so flowLinks > 0 → recent-panel renders
|
|
46
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
47
|
+
{ from_alias: 'alpha·1', to_alias: 'alpha·2', content: 'hi', created_at: fresh },
|
|
48
|
+
] } }));
|
|
49
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
50
|
+
const page = await ctx.newPage();
|
|
51
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
52
|
+
await page.waitForSelector('[data-legend-row-label="working"]', { timeout: 15000 });
|
|
53
|
+
await page.waitForTimeout(500);
|
|
54
|
+
|
|
55
|
+
const probeLegend = (k) => page.evaluate((key) => {
|
|
56
|
+
const el = document.querySelector(`[data-legend-row-label="${key}"]`);
|
|
57
|
+
if (!el) return null;
|
|
58
|
+
const cs = getComputedStyle(el);
|
|
59
|
+
return {
|
|
60
|
+
filter: cs.filter,
|
|
61
|
+
brightnessAttr: el.getAttribute('data-legend-row-label-brightness'),
|
|
62
|
+
glowAttr: el.getAttribute('data-legend-row-label-glow'),
|
|
63
|
+
};
|
|
64
|
+
}, k);
|
|
65
|
+
|
|
66
|
+
const probeRecent = () => page.evaluate(() => {
|
|
67
|
+
const el = document.querySelector('[data-recent-row-text]');
|
|
68
|
+
if (!el) return null;
|
|
69
|
+
const cs = getComputedStyle(el);
|
|
70
|
+
return {
|
|
71
|
+
filter: cs.filter,
|
|
72
|
+
brightnessAttr: el.getAttribute('data-recent-row-text-brightness'),
|
|
73
|
+
glowAttr: el.getAttribute('data-recent-row-text-glow'),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const restLegend = await probeLegend('working');
|
|
78
|
+
const restRecent = await probeRecent();
|
|
79
|
+
|
|
80
|
+
await page.click('[data-pressure-seg="working"]');
|
|
81
|
+
await page.waitForTimeout(400);
|
|
82
|
+
const pinnedLegend = await probeLegend('working');
|
|
83
|
+
|
|
84
|
+
await browser.close();
|
|
85
|
+
|
|
86
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
87
|
+
const sourceRecentFilter = /filter: \(isRowHovered \|\| isRowPinned\)\s*\?\s*`drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) brightness\(1\.15\)`/.test(src);
|
|
88
|
+
const sourceLegendFilter = /filter: \(hoveredStatus === row\.key \|\| isPinned\)\s*\?\s*`drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) brightness\(1\.15\)`/.test(src);
|
|
89
|
+
const sourceRecentAttr = /data-recent-row-text-brightness=\{\(isRowHovered \|\| isRowPinned\) \? '1\.15' : '1'\}/.test(src);
|
|
90
|
+
const sourceLegendAttr = /data-legend-row-label-brightness=\{\(hoveredStatus === row\.key \|\| isPinned\) \? '1\.15' : '1'\}/.test(src);
|
|
91
|
+
|
|
92
|
+
const results = {
|
|
93
|
+
rest_legend_filter_none: restLegend?.filter === 'none',
|
|
94
|
+
rest_legend_brightness_1: restLegend?.brightnessAttr === '1',
|
|
95
|
+
rest_legend_glow_false: restLegend?.glowAttr === 'false',
|
|
96
|
+
rest_recent_filter_none: restRecent?.filter === 'none',
|
|
97
|
+
rest_recent_brightness_1: restRecent?.brightnessAttr === '1',
|
|
98
|
+
rest_recent_glow_false: restRecent?.glowAttr === 'false',
|
|
99
|
+
// Pin working → working legend-row label lights up with stacked filter
|
|
100
|
+
pinned_legend_glow_true: pinnedLegend?.glowAttr === 'true',
|
|
101
|
+
pinned_legend_brightness_1_15: pinnedLegend?.brightnessAttr === '1.15',
|
|
102
|
+
pinned_legend_has_dropshadow: /drop-shadow\(/.test(pinnedLegend?.filter || ''),
|
|
103
|
+
pinned_legend_has_brightness: /brightness\(1\.15\)/.test(pinnedLegend?.filter || ''),
|
|
104
|
+
// Source regexes for both anchors
|
|
105
|
+
source_recent_filter: sourceRecentFilter,
|
|
106
|
+
source_legend_filter: sourceLegendFilter,
|
|
107
|
+
source_recent_attr: sourceRecentAttr,
|
|
108
|
+
source_legend_attr: sourceLegendAttr,
|
|
109
|
+
};
|
|
110
|
+
const ok = Object.values(results).every(Boolean);
|
|
111
|
+
console.log(`${ok ? '✅' : '❌'} R572 panel-row text stacked brightness (9th + 10th anchors in per-element family):`,
|
|
112
|
+
JSON.stringify(results, null, 2),
|
|
113
|
+
'\n rest legend (working):', JSON.stringify(restLegend),
|
|
114
|
+
'\n rest recent:', JSON.stringify(restRecent),
|
|
115
|
+
'\n pinned legend (working):', JSON.stringify(pinnedLegend));
|
|
116
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* Round 573 verification: panel-title text (recent + legend) stacks
|
|
2
|
+
* brightness(1.15) onto R550's active-gated drop-shadow. 11th + 12th
|
|
3
|
+
* anchors in per-element brightness family.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. rest: filters='none', brightness-attrs='1', glow-attrs='false'
|
|
7
|
+
* 2. click pressure-seg working → pinnedStatus='working' →
|
|
8
|
+
* legend-panel-title filter contains drop-shadow AND brightness(1.15);
|
|
9
|
+
* brightness-attr='1.15'
|
|
10
|
+
* 3. source-side regex confirms stacked filter at both panels
|
|
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, status) => ({
|
|
33
|
+
alias, status, 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: [
|
|
38
|
+
mk('a·1', 'working'), mk('a·2', 'idle'),
|
|
39
|
+
] } });
|
|
40
|
+
});
|
|
41
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
42
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'hi', created_at: fresh },
|
|
43
|
+
] } }));
|
|
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-legend-panel-title]', { timeout: 15000 });
|
|
48
|
+
await page.waitForTimeout(500);
|
|
49
|
+
|
|
50
|
+
const probe = (sel) => page.evaluate((s) => {
|
|
51
|
+
const el = document.querySelector(s);
|
|
52
|
+
if (!el) return null;
|
|
53
|
+
const cs = getComputedStyle(el);
|
|
54
|
+
return {
|
|
55
|
+
filter: cs.filter,
|
|
56
|
+
brightness: el.getAttribute(s.includes('legend') ? 'data-legend-panel-title-brightness' : 'data-recent-panel-title-brightness'),
|
|
57
|
+
glow: el.getAttribute(s.includes('legend') ? 'data-legend-panel-title-glow' : 'data-recent-panel-title-glow'),
|
|
58
|
+
};
|
|
59
|
+
}, sel);
|
|
60
|
+
|
|
61
|
+
const restLegend = await probe('[data-legend-panel-title]');
|
|
62
|
+
const restRecent = await probe('[data-recent-panel-title]');
|
|
63
|
+
|
|
64
|
+
await page.click('[data-pressure-seg="working"]');
|
|
65
|
+
await page.waitForTimeout(400);
|
|
66
|
+
const pinnedLegend = await probe('[data-legend-panel-title]');
|
|
67
|
+
|
|
68
|
+
await browser.close();
|
|
69
|
+
|
|
70
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
71
|
+
const sourceRecentFilter = /filter: activeEdgeKey \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) brightness\(1\.15\)`/.test(src);
|
|
72
|
+
const sourceLegendFilter = /filter: pinnedStatus \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) brightness\(1\.15\)`/.test(src);
|
|
73
|
+
const sourceRecentAttr = /data-recent-panel-title-brightness=\{activeEdgeKey \? '1\.15' : '1'\}/.test(src);
|
|
74
|
+
const sourceLegendAttr = /data-legend-panel-title-brightness=\{pinnedStatus \? '1\.15' : '1'\}/.test(src);
|
|
75
|
+
|
|
76
|
+
const results = {
|
|
77
|
+
rest_legend_filter_none: restLegend?.filter === 'none',
|
|
78
|
+
rest_legend_brightness_1: restLegend?.brightness === '1',
|
|
79
|
+
rest_legend_glow_false: restLegend?.glow === 'false',
|
|
80
|
+
rest_recent_filter_none: restRecent?.filter === 'none',
|
|
81
|
+
rest_recent_brightness_1: restRecent?.brightness === '1',
|
|
82
|
+
rest_recent_glow_false: restRecent?.glow === 'false',
|
|
83
|
+
pinned_legend_glow_true: pinnedLegend?.glow === 'true',
|
|
84
|
+
pinned_legend_brightness_1_15: pinnedLegend?.brightness === '1.15',
|
|
85
|
+
pinned_legend_has_dropshadow: /drop-shadow\(/.test(pinnedLegend?.filter || ''),
|
|
86
|
+
pinned_legend_has_brightness: /brightness\(1\.15\)/.test(pinnedLegend?.filter || ''),
|
|
87
|
+
source_recent_filter: sourceRecentFilter,
|
|
88
|
+
source_legend_filter: sourceLegendFilter,
|
|
89
|
+
source_recent_attr: sourceRecentAttr,
|
|
90
|
+
source_legend_attr: sourceLegendAttr,
|
|
91
|
+
};
|
|
92
|
+
const ok = Object.values(results).every(Boolean);
|
|
93
|
+
console.log(`${ok ? '✅' : '❌'} R573 panel-title stacked brightness (11th + 12th anchors):`,
|
|
94
|
+
JSON.stringify(results, null, 2),
|
|
95
|
+
'\n rest legend:', JSON.stringify(restLegend),
|
|
96
|
+
'\n rest recent:', JSON.stringify(restRecent),
|
|
97
|
+
'\n pinned legend:', JSON.stringify(pinnedLegend));
|
|
98
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/* Round 550 verification: panel-title texts (recent + legend) gain
|
|
2
|
+
* pal.legendAccent drop-shadow on active state. 14th + 15th anchors
|
|
3
|
+
* in drop-shadow family (counted as R550 + sibling).
|
|
4
|
+
*
|
|
5
|
+
* Source-canonical for the LIVE state probe (DOM filter readback via
|
|
6
|
+
* SVG is reliable here — text element, no shared-gate IIFE). Pin
|
|
7
|
+
* trigger: click a status legend row to set pinnedStatus → glow on
|
|
8
|
+
* legend-panel title. activeEdgeKey would require flow data — for
|
|
9
|
+
* recent-panel just source-side regex confirms the wiring.
|
|
10
|
+
*
|
|
11
|
+
* Test phases:
|
|
12
|
+
* 1. rest: both panel titles' computed filter = 'none'
|
|
13
|
+
* 2. legend title — click pressure-bar working seg to pin → filter
|
|
14
|
+
* contains drop-shadow with the cyan accent
|
|
15
|
+
* 3. source regex confirms both texts wired with the filter
|
|
16
|
+
* conditional + transition list extension
|
|
17
|
+
*/
|
|
18
|
+
import { chromium } from 'playwright';
|
|
19
|
+
import { readFileSync } from 'node:fs';
|
|
20
|
+
|
|
21
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
22
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
23
|
+
|
|
24
|
+
const browser = await chromium.launch({ headless: true });
|
|
25
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
26
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
27
|
+
await ctx.addInitScript(() => {
|
|
28
|
+
try {
|
|
29
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
30
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
31
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
32
|
+
} catch {}
|
|
33
|
+
});
|
|
34
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
35
|
+
const r = await route.fetch();
|
|
36
|
+
const b = await r.json();
|
|
37
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
38
|
+
const mk = (alias, status) => ({
|
|
39
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
40
|
+
network_id: nid, project_dir: null,
|
|
41
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
42
|
+
});
|
|
43
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
44
|
+
mk('a·1', 'working'), mk('a·2', 'idle'), mk('a·3', 'offline'),
|
|
45
|
+
] } });
|
|
46
|
+
});
|
|
47
|
+
// Provide one message so flowLinks > 0 → recent-panel renders.
|
|
48
|
+
// buildFlowLinks reads from_alias/to_alias/content/created_at (banked R520).
|
|
49
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
50
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'hi', created_at: fresh },
|
|
51
|
+
] } }));
|
|
52
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
53
|
+
const page = await ctx.newPage();
|
|
54
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
55
|
+
await page.waitForSelector('[data-legend-panel-title]', { timeout: 15000 });
|
|
56
|
+
await page.waitForTimeout(500);
|
|
57
|
+
|
|
58
|
+
// Phase 1: rest filters
|
|
59
|
+
const restLegend = await page.evaluate(() => {
|
|
60
|
+
const el = document.querySelector('[data-legend-panel-title]');
|
|
61
|
+
if (!el) return null;
|
|
62
|
+
const cs = getComputedStyle(el);
|
|
63
|
+
return { filter: cs.filter, glowAttr: el.getAttribute('data-legend-panel-title-glow') };
|
|
64
|
+
});
|
|
65
|
+
const restRecent = await page.evaluate(() => {
|
|
66
|
+
const el = document.querySelector('[data-recent-panel-title]');
|
|
67
|
+
if (!el) return null;
|
|
68
|
+
const cs = getComputedStyle(el);
|
|
69
|
+
return { filter: cs.filter, glowAttr: el.getAttribute('data-recent-panel-title-glow') };
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Phase 2: click pressure-bar working seg to pin → triggers
|
|
73
|
+
// pinnedStatus='working' → legend title should glow.
|
|
74
|
+
await page.click('[data-pressure-seg="working"]');
|
|
75
|
+
await page.waitForTimeout(400);
|
|
76
|
+
const pinnedLegend = await page.evaluate(() => {
|
|
77
|
+
const el = document.querySelector('[data-legend-panel-title]');
|
|
78
|
+
if (!el) return null;
|
|
79
|
+
const cs = getComputedStyle(el);
|
|
80
|
+
return { filter: cs.filter, glowAttr: el.getAttribute('data-legend-panel-title-glow') };
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
await browser.close();
|
|
84
|
+
|
|
85
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
86
|
+
const sourceRecentFilter =
|
|
87
|
+
/filter: activeEdgeKey \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\)` : undefined/.test(src);
|
|
88
|
+
const sourceLegendFilter =
|
|
89
|
+
/filter: pinnedStatus \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\)` : undefined/.test(src);
|
|
90
|
+
const sourceRecentTransition =
|
|
91
|
+
/transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out, font-weight 200ms ease-out, filter 200ms ease-out'/.test(src);
|
|
92
|
+
|
|
93
|
+
const results = {
|
|
94
|
+
rest_legend_filter_none: restLegend?.filter === 'none',
|
|
95
|
+
rest_recent_filter_none: restRecent?.filter === 'none',
|
|
96
|
+
rest_legend_glow_attr_false: restLegend?.glowAttr === 'false',
|
|
97
|
+
rest_recent_glow_attr_false: restRecent?.glowAttr === 'false',
|
|
98
|
+
pinned_legend_glow_attr: pinnedLegend?.glowAttr === 'true',
|
|
99
|
+
// Computed filter contains drop-shadow with rgb/rgba (hex+alpha resolves to rgba)
|
|
100
|
+
pinned_legend_filter_set: /drop-shadow\(/.test(pinnedLegend?.filter || ''),
|
|
101
|
+
source_recent_filter: sourceRecentFilter,
|
|
102
|
+
source_legend_filter: sourceLegendFilter,
|
|
103
|
+
source_recent_transition: sourceRecentTransition,
|
|
104
|
+
};
|
|
105
|
+
const ok = Object.values(results).every(Boolean);
|
|
106
|
+
console.log(`${ok ? '✅' : '❌'} R550 panel-title pin-gated drop-shadow (14th + 15th anchors):`,
|
|
107
|
+
JSON.stringify(results, null, 2),
|
|
108
|
+
'\n rest legend:', JSON.stringify(restLegend),
|
|
109
|
+
'\n rest recent:', JSON.stringify(restRecent),
|
|
110
|
+
'\n pinned legend:', JSON.stringify(pinnedLegend));
|
|
111
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* Round 713 — panel-pair dual-axis breath. Both recent + legend panel
|
|
2
|
+
* titles gain a 2nd SVG <animate> for font-size at the same 8s cadence
|
|
3
|
+
* as their R700/R701 opacity breath. Closes panel-pair dual-axis
|
|
4
|
+
* symmetry under the primary-identity dual-axis rule (R711 H2 +
|
|
5
|
+
* R712 watermark established the pattern; R713 closes the panel pair).
|
|
6
|
+
*/
|
|
7
|
+
import { chromium } from 'playwright';
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
|
|
10
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
11
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
12
|
+
|
|
13
|
+
const browser = await chromium.launch({ headless: true });
|
|
14
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
15
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
16
|
+
await ctx.addInitScript(() => {
|
|
17
|
+
try {
|
|
18
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
19
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
20
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
21
|
+
} catch {}
|
|
22
|
+
});
|
|
23
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
24
|
+
const r = await route.fetch();
|
|
25
|
+
const b = await r.json();
|
|
26
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
27
|
+
const mk = (alias) => ({
|
|
28
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
29
|
+
network_id: nid, project_dir: null,
|
|
30
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
31
|
+
});
|
|
32
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2'), mk('a·3')] } });
|
|
33
|
+
});
|
|
34
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
35
|
+
{ id: 'm1', from_alias: 'a·1', to_alias: 'a·2', kind: 'message', content: 'p', network_id: 'default', created_at: fresh },
|
|
36
|
+
] } }));
|
|
37
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
38
|
+
const page = await ctx.newPage();
|
|
39
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
40
|
+
await page.waitForSelector('[data-legend-panel-title]', { timeout: 15000, state: 'attached' });
|
|
41
|
+
await page.waitForTimeout(300);
|
|
42
|
+
|
|
43
|
+
const runtimeState = await page.evaluate(() => {
|
|
44
|
+
const recent = document.querySelector('[data-recent-panel-title]');
|
|
45
|
+
const legend = document.querySelector('[data-legend-panel-title]');
|
|
46
|
+
const probe = (text) => {
|
|
47
|
+
if (!text) return null;
|
|
48
|
+
const opAnim = text.querySelector('animate[attributeName="opacity"]');
|
|
49
|
+
const fsAnim = text.querySelector('animate[attributeName="font-size"]');
|
|
50
|
+
return {
|
|
51
|
+
opacity_dur: opAnim?.getAttribute('dur'),
|
|
52
|
+
opacity_values: opAnim?.getAttribute('values'),
|
|
53
|
+
fontsize_present: !!fsAnim,
|
|
54
|
+
fontsize_dur: fsAnim?.getAttribute('dur'),
|
|
55
|
+
fontsize_values: fsAnim?.getAttribute('values'),
|
|
56
|
+
fontsize_repeat: fsAnim?.getAttribute('repeatCount'),
|
|
57
|
+
breath_axis_2: text.getAttribute(text === recent ? 'data-recent-panel-title-breath-axis-2' : 'data-legend-panel-title-breath-axis-2'),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
recent: probe(recent),
|
|
62
|
+
legend: probe(legend),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
await browser.close();
|
|
67
|
+
|
|
68
|
+
const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
69
|
+
const fontSizeAnimateCount = (tsxSrc.match(/<animate attributeName="font-size" values="11\.96;12\.04;11\.96" dur="8s" repeatCount="indefinite" \/>/g) || []).length;
|
|
70
|
+
const tsxRecentAxis2 = /data-recent-panel-title-breath-axis-2=\{!reducedMotion && !activeEdgeKey \? 'font-size' : 'off'\}/.test(tsxSrc);
|
|
71
|
+
const tsxLegendAxis2 = /data-legend-panel-title-breath-axis-2=\{!reducedMotion && !pinnedStatus \? 'font-size' : 'off'\}/.test(tsxSrc);
|
|
72
|
+
|
|
73
|
+
const results = {
|
|
74
|
+
recent_opacity_kept: runtimeState?.recent?.opacity_values === '0.78;1;0.78',
|
|
75
|
+
recent_opacity_dur_8s: runtimeState?.recent?.opacity_dur === '8s',
|
|
76
|
+
recent_fontsize_present: runtimeState?.recent?.fontsize_present === true,
|
|
77
|
+
recent_fontsize_dur_8s: runtimeState?.recent?.fontsize_dur === '8s',
|
|
78
|
+
recent_fontsize_values: runtimeState?.recent?.fontsize_values === '11.96;12.04;11.96',
|
|
79
|
+
recent_axis_2_attr: runtimeState?.recent?.breath_axis_2 === 'font-size',
|
|
80
|
+
legend_opacity_kept: runtimeState?.legend?.opacity_values === '0.78;1;0.78',
|
|
81
|
+
legend_fontsize_present: runtimeState?.legend?.fontsize_present === true,
|
|
82
|
+
legend_fontsize_dur_8s: runtimeState?.legend?.fontsize_dur === '8s',
|
|
83
|
+
legend_fontsize_values: runtimeState?.legend?.fontsize_values === '11.96;12.04;11.96',
|
|
84
|
+
legend_axis_2_attr: runtimeState?.legend?.breath_axis_2 === 'font-size',
|
|
85
|
+
tsx_count_2: fontSizeAnimateCount === 2,
|
|
86
|
+
tsx_recent_axis_2: tsxRecentAxis2,
|
|
87
|
+
tsx_legend_axis_2: tsxLegendAxis2,
|
|
88
|
+
};
|
|
89
|
+
const ok = Object.values(results).every(Boolean);
|
|
90
|
+
console.log(`${ok ? '✅' : '❌'} R713 panel-pair dual-axis breath (opacity + font-size at 8s, panel-pair symmetric closure):`,
|
|
91
|
+
JSON.stringify(results, null, 2),
|
|
92
|
+
`\n runtime: ${JSON.stringify(runtimeState)}`,
|
|
93
|
+
`\n tsx font-size animate count: ${fontSizeAnimateCount}`);
|
|
94
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* Round 660 · MILESTONE — recent-panel + legend-panel titles
|
|
2
|
+
* drop-shadow gains a SECOND outer drop-shadow at 4px + 0x40 alpha
|
|
3
|
+
* (half R550 inner 0x80). 19th anchor in multi-layer halo family
|
|
4
|
+
* — covers 2 sibling panel-title surfaces in one replace_all sweep.
|
|
5
|
+
*
|
|
6
|
+
* Test: source-only — both panel-title filter sites stack 2 drop-
|
|
7
|
+
* shadows.
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
|
|
11
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
12
|
+
const pattern = /\? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) drop-shadow\(0 0 4px \$\{pal\.legendAccent\}40\) brightness\(1\.15\)` : undefined \}\}/g;
|
|
13
|
+
const matches = (src.match(pattern) || []).length;
|
|
14
|
+
|
|
15
|
+
const results = {
|
|
16
|
+
// 2 panel titles (recent + legend) — both should match the new pattern
|
|
17
|
+
source_two_titles: matches === 2,
|
|
18
|
+
};
|
|
19
|
+
const ok = Object.values(results).every(Boolean);
|
|
20
|
+
console.log(`${ok ? '✅' : '❌'} R660 panel-titles multi-layer halo (2 sibling titles in one sweep):`,
|
|
21
|
+
JSON.stringify(results, null, 2),
|
|
22
|
+
`\n matches: ${matches}`);
|
|
23
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* Round 547 verification: pill × close buttons gain hover:rotate-12 alongside
|
|
2
|
+
* existing hover:scale-110 (R356) + hover:opacity-70. 4 sibling buttons
|
|
3
|
+
* (status / group / vendor / edge) edited via replace_all.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. trigger a pin to render a pill (click pressure-bar working seg)
|
|
7
|
+
* 2. inspect the pill's × button — rest transform=none
|
|
8
|
+
* 3. hover the × button — computed transform contains rotate(12deg)
|
|
9
|
+
* AND scale(1.1)
|
|
10
|
+
* 4. source-side regex confirms hover:rotate-12 in all 4 className
|
|
11
|
+
* strings via replace_all
|
|
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('a·1', 'working'), mk('a·2', 'idle'), mk('a·3', 'offline'),
|
|
40
|
+
] } });
|
|
41
|
+
});
|
|
42
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
43
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
44
|
+
const page = await ctx.newPage();
|
|
45
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
46
|
+
await page.waitForSelector('[data-pressure-seg="working"]', { timeout: 15000 });
|
|
47
|
+
await page.waitForTimeout(500);
|
|
48
|
+
|
|
49
|
+
// Phase 1: trigger pin
|
|
50
|
+
await page.click('[data-pressure-seg="working"]');
|
|
51
|
+
await page.waitForTimeout(400);
|
|
52
|
+
|
|
53
|
+
// Phase 2: rest read on the × button (find via aria-label).
|
|
54
|
+
// Tailwind 4 uses individual CSS `scale` / `rotate` properties (NOT
|
|
55
|
+
// transform: scale(...) rotate(...)). Probe both — banked pattern note.
|
|
56
|
+
const xSel = 'button[aria-label="Clear working filter"]';
|
|
57
|
+
await page.waitForSelector(xSel, { timeout: 5000 });
|
|
58
|
+
const rest = await page.evaluate((sel) => {
|
|
59
|
+
const el = document.querySelector(sel);
|
|
60
|
+
if (!el) return null;
|
|
61
|
+
const cs = getComputedStyle(el);
|
|
62
|
+
return { transform: cs.transform, scale: cs.scale, rotate: cs.rotate };
|
|
63
|
+
}, xSel);
|
|
64
|
+
|
|
65
|
+
// Phase 3: hover the × button
|
|
66
|
+
await page.hover(xSel);
|
|
67
|
+
await page.waitForTimeout(400);
|
|
68
|
+
const hover = await page.evaluate((sel) => {
|
|
69
|
+
const el = document.querySelector(sel);
|
|
70
|
+
if (!el) return null;
|
|
71
|
+
const cs = getComputedStyle(el);
|
|
72
|
+
return { transform: cs.transform, scale: cs.scale, rotate: cs.rotate };
|
|
73
|
+
}, xSel);
|
|
74
|
+
|
|
75
|
+
await browser.close();
|
|
76
|
+
|
|
77
|
+
// Source regex — confirm className across all 4 instances
|
|
78
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
79
|
+
const occurrences = (src.match(/className="ml-0\.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 hover:rotate-12 transform-gpu"/g) || []).length;
|
|
80
|
+
|
|
81
|
+
// Tailwind 4 emits individual `scale: ...` and `rotate: ...` CSS
|
|
82
|
+
// properties (not combined transform). Probe each axis separately.
|
|
83
|
+
const results = {
|
|
84
|
+
rest_scale_none: rest?.scale === 'none' || rest?.scale === '1' || rest?.scale === '1 1',
|
|
85
|
+
rest_rotate_none: rest?.rotate === 'none' || rest?.rotate === '0deg',
|
|
86
|
+
hover_scale_110: /\b1\.1\b/.test(hover?.scale || ''),
|
|
87
|
+
hover_rotate_12: /\b12deg\b/.test(hover?.rotate || ''),
|
|
88
|
+
source_4_occurrences: occurrences === 4,
|
|
89
|
+
};
|
|
90
|
+
const ok = Object.values(results).every(Boolean);
|
|
91
|
+
console.log(`${ok ? '✅' : '❌'} R547 pill × hover-rotate:`,
|
|
92
|
+
JSON.stringify(results, null, 2),
|
|
93
|
+
'\n rest:', JSON.stringify(rest),
|
|
94
|
+
'\n hover:', JSON.stringify(hover),
|
|
95
|
+
'\n source occurrences:', occurrences);
|
|
96
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* Round 606 — recent-row freshness pip stacks brightness(1.15)
|
|
2
|
+
* onto R478 freshness-gated drop-shadow. Same alpha > 0.7 gate
|
|
3
|
+
* so both filter effects activate together for fresh signals.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. mock 1 fresh message (~10s old, alpha > 0.7) → pip renders
|
|
7
|
+
* with glow + brightness filter
|
|
8
|
+
* 2. computed filter contains BOTH drop-shadow AND brightness
|
|
9
|
+
* 3. brightness-attr = '1.15' on fresh signal
|
|
10
|
+
* 4. source: stacked filter conditional + data-attr
|
|
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
|
+
// 10 seconds ago → freshness alpha ≈ 1.0 (well above 0.7 gate)
|
|
17
|
+
const fresh = new Date(Date.now() - 10 * 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) => ({
|
|
34
|
+
alias, status: 'idle', 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: [mk('a·1'), mk('a·2')] } });
|
|
39
|
+
});
|
|
40
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
41
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'fresh hi', created_at: fresh },
|
|
42
|
+
] } }));
|
|
43
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
44
|
+
const page = await ctx.newPage();
|
|
45
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
46
|
+
await page.waitForSelector('[data-recent-row-freshness-brightness]', { timeout: 15000, state: 'attached' });
|
|
47
|
+
await page.waitForTimeout(500);
|
|
48
|
+
|
|
49
|
+
const fresh_state = await page.evaluate(() => {
|
|
50
|
+
const el = document.querySelector('[data-recent-row-freshness-brightness]');
|
|
51
|
+
if (!el) return null;
|
|
52
|
+
const cs = getComputedStyle(el);
|
|
53
|
+
return {
|
|
54
|
+
filter: cs.filter,
|
|
55
|
+
transitionProperty: cs.transitionProperty,
|
|
56
|
+
brightnessAttr: el.getAttribute('data-recent-row-freshness-brightness'),
|
|
57
|
+
glowAttr: el.getAttribute('data-recent-row-freshness-glow'),
|
|
58
|
+
alphaAttr: el.getAttribute('data-recent-row-freshness-alpha'),
|
|
59
|
+
opacity: cs.opacity,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
await browser.close();
|
|
64
|
+
|
|
65
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
66
|
+
const sourceFilter = /filter: alpha > 0\.7\s*\?\s*`drop-shadow\(0 0 3px \$\{pal\.legendAccent\}80\) brightness\(1\.15\)`\s*:\s*undefined/.test(src);
|
|
67
|
+
const sourceAttr = /data-recent-row-freshness-brightness=\{alpha > 0\.7 \? '1\.15' : '1'\}/.test(src);
|
|
68
|
+
|
|
69
|
+
const results = {
|
|
70
|
+
pip_present: !!fresh_state,
|
|
71
|
+
// Fresh signal: alpha ≈ 1.0 > 0.7 → both drop-shadow AND brightness in filter
|
|
72
|
+
fresh_filter_has_drop_shadow: /drop-shadow/.test(fresh_state?.filter || ''),
|
|
73
|
+
fresh_filter_has_brightness: /brightness/.test(fresh_state?.filter || ''),
|
|
74
|
+
fresh_brightness_115: fresh_state?.brightnessAttr === '1.15',
|
|
75
|
+
fresh_glow_true: fresh_state?.glowAttr === 'true',
|
|
76
|
+
fresh_alpha_above_0_7: parseFloat(fresh_state?.alphaAttr || '0') > 0.7,
|
|
77
|
+
transition_has_filter: /filter/.test(fresh_state?.transitionProperty || ''),
|
|
78
|
+
source_filter: sourceFilter,
|
|
79
|
+
source_attr: sourceAttr,
|
|
80
|
+
};
|
|
81
|
+
const ok = Object.values(results).every(Boolean);
|
|
82
|
+
console.log(`${ok ? '✅' : '❌'} R606 freshness-pip stacked brightness (freshness-gated 4-axis):`,
|
|
83
|
+
JSON.stringify(results, null, 2),
|
|
84
|
+
`\n fresh: ${JSON.stringify(fresh_state)}`);
|
|
85
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* Round 662 — pressure-bar segment filter gains a 2nd outer drop-
|
|
2
|
+
* shadow at 4px + 0x4c alpha (half R542 inner 0x99). 21st anchor
|
|
3
|
+
* in multi-layer halo family (1st chip-bar anchor).
|
|
4
|
+
*
|
|
5
|
+
* Test: source-only — filter expression stacks 2 drop-shadows with
|
|
6
|
+
* tier-color (${color}) at 99 → 4c falloff.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
|
|
10
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
11
|
+
const sourceFilter = /isSegLit \? `brightness\(1\.2\) drop-shadow\(0 0 2px \$\{color\}99\) drop-shadow\(0 0 4px \$\{color\}4c\)` : undefined/.test(src);
|
|
12
|
+
|
|
13
|
+
const results = {
|
|
14
|
+
source_filter: sourceFilter,
|
|
15
|
+
};
|
|
16
|
+
const ok = Object.values(results).every(Boolean);
|
|
17
|
+
console.log(`${ok ? '✅' : '❌'} R662 pressure-bar segment multi-layer halo (1st chip-bar anchor):`,
|
|
18
|
+
JSON.stringify(results, null, 2));
|
|
19
|
+
process.exit(ok ? 0 : 1);
|