@sleep2agi/agent-network-dashboard 0.5.3-preview.19 → 0.5.3-preview.191
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/0-8bxlg9uqt.w.css +2 -0
- package/.next/static/chunks/0.lu5-z2x2qxy.js +1 -0
- package/.next/static/chunks/0fk9nvlx1auzw.js +4 -0
- package/.next/static/chunks/{0wyykzfwmrhap.js → 0p.5_o7o6bjen.js} +1 -1
- package/.next/static/chunks/0w7.1u4z8b8jm.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +4824 -177
- package/app/globals.css +58 -7
- package/package.json +4 -4
- package/scripts/topo-active-chrome-hover-text-test.mjs +107 -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-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-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-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-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-particle-brightness-test.mjs +82 -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-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-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-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 +7 -2
- 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-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-fill-opacity-test.mjs +91 -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-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-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-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-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-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/0bx3~m~x7--es.js +0 -1
- package/.next/static/chunks/0m.1mvl~t.avc.css +0 -2
- package/.next/static/chunks/0ocjttuapm1j5.js +0 -1
- package/.next/static/chunks/0r_96qcg~al~l.js +0 -4
- /package/.next/static/{0CFKZXs8Nw_rdWAR3Ifpg → 2yThWRF33HXGChXf9v_Gj}/_buildManifest.js +0 -0
- /package/.next/static/{0CFKZXs8Nw_rdWAR3Ifpg → 2yThWRF33HXGChXf9v_Gj}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{0CFKZXs8Nw_rdWAR3Ifpg → 2yThWRF33HXGChXf9v_Gj}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/* Round 569 verification: legend-row label gains drop-shadow glow
|
|
2
|
+
* on (hoveredStatus === row.key || isPinned). Mirror of R568
|
|
3
|
+
* recent-row text pattern at the sibling legend-row label scope.
|
|
4
|
+
* 18th anchor in drop-shadow family.
|
|
5
|
+
*
|
|
6
|
+
* Test phases:
|
|
7
|
+
* 1. rest: filter='none' on all 3 legend-row labels
|
|
8
|
+
* (working/idle/offline), glow-attr='false'
|
|
9
|
+
* 2. click pressure-seg working → pinnedStatus='working' →
|
|
10
|
+
* working legend-row label glow-attr='true', filter contains
|
|
11
|
+
* drop-shadow with cyan rgba
|
|
12
|
+
* 3. transition-property contains 'filter'
|
|
13
|
+
* 4. source-side regex confirms wiring
|
|
14
|
+
*/
|
|
15
|
+
import { chromium } from 'playwright';
|
|
16
|
+
import { readFileSync } from 'node:fs';
|
|
17
|
+
|
|
18
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
19
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
20
|
+
|
|
21
|
+
const browser = await chromium.launch({ headless: true });
|
|
22
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
23
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
24
|
+
await ctx.addInitScript(() => {
|
|
25
|
+
try {
|
|
26
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
27
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
28
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
29
|
+
} catch {}
|
|
30
|
+
});
|
|
31
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
32
|
+
const r = await route.fetch();
|
|
33
|
+
const b = await r.json();
|
|
34
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
35
|
+
const mk = (alias, status) => ({
|
|
36
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
37
|
+
network_id: nid, project_dir: null,
|
|
38
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
39
|
+
});
|
|
40
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
41
|
+
mk('alpha·1', 'working'),
|
|
42
|
+
mk('alpha·2', 'idle'),
|
|
43
|
+
mk('alpha·3', 'offline'),
|
|
44
|
+
] } });
|
|
45
|
+
});
|
|
46
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
47
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
48
|
+
const page = await ctx.newPage();
|
|
49
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
50
|
+
await page.waitForSelector('[data-legend-row-label="working"]', { timeout: 15000 });
|
|
51
|
+
await page.waitForTimeout(500);
|
|
52
|
+
|
|
53
|
+
const probe = (k) => page.evaluate((key) => {
|
|
54
|
+
const el = document.querySelector(`[data-legend-row-label="${key}"]`);
|
|
55
|
+
if (!el) return null;
|
|
56
|
+
const cs = getComputedStyle(el);
|
|
57
|
+
return {
|
|
58
|
+
filter: cs.filter,
|
|
59
|
+
transitionProperty: cs.transitionProperty,
|
|
60
|
+
glowAttr: el.getAttribute('data-legend-row-label-glow'),
|
|
61
|
+
pinnedAttr: el.getAttribute('data-legend-row-label-pinned'),
|
|
62
|
+
};
|
|
63
|
+
}, k);
|
|
64
|
+
|
|
65
|
+
const restWorking = await probe('working');
|
|
66
|
+
const restIdle = await probe('idle');
|
|
67
|
+
const restOffline = await probe('offline');
|
|
68
|
+
|
|
69
|
+
// Click pressure-seg working → sets pinnedStatus='working' →
|
|
70
|
+
// working legend-row label should glow.
|
|
71
|
+
await page.click('[data-pressure-seg="working"]');
|
|
72
|
+
await page.waitForTimeout(400);
|
|
73
|
+
const pinnedWorking = await probe('working');
|
|
74
|
+
const pinnedIdle = await probe('idle');
|
|
75
|
+
|
|
76
|
+
await browser.close();
|
|
77
|
+
|
|
78
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
79
|
+
const sourceFilter = /filter: \(hoveredStatus === row\.key \|\| isPinned\)\s*\?\s*`drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\)`\s*:\s*undefined/.test(src);
|
|
80
|
+
const sourceTransition = /transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out, font-weight 200ms ease-out, filter 200ms ease-out'/.test(src);
|
|
81
|
+
const sourceGlowAttr = /data-legend-row-label-glow=\{\(hoveredStatus === row\.key \|\| isPinned\) \? 'true' : 'false'\}/.test(src);
|
|
82
|
+
|
|
83
|
+
const results = {
|
|
84
|
+
rest_working_filter_none: restWorking?.filter === 'none',
|
|
85
|
+
rest_idle_filter_none: restIdle?.filter === 'none',
|
|
86
|
+
rest_offline_filter_none: restOffline?.filter === 'none',
|
|
87
|
+
rest_working_glow_false: restWorking?.glowAttr === 'false',
|
|
88
|
+
pinned_working_glow_true: pinnedWorking?.glowAttr === 'true',
|
|
89
|
+
pinned_working_filter: /drop-shadow\(/.test(pinnedWorking?.filter || ''),
|
|
90
|
+
pinned_idle_glow_false: pinnedIdle?.glowAttr === 'false',
|
|
91
|
+
transition_has_filter: /filter/.test(restWorking?.transitionProperty || ''),
|
|
92
|
+
source_filter: sourceFilter,
|
|
93
|
+
source_transition: sourceTransition,
|
|
94
|
+
source_glow_attr: sourceGlowAttr,
|
|
95
|
+
};
|
|
96
|
+
const ok = Object.values(results).every(Boolean);
|
|
97
|
+
console.log(`${ok ? '✅' : '❌'} R569 legend-row label drop-shadow glow (18th anchor, R568 sibling):`,
|
|
98
|
+
JSON.stringify(results, null, 2),
|
|
99
|
+
'\n rest working:', JSON.stringify(restWorking),
|
|
100
|
+
'\n pinned working:', JSON.stringify(pinnedWorking),
|
|
101
|
+
'\n pinned idle (unchanged):', JSON.stringify(pinnedIdle));
|
|
102
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Round 537 verification: legend swatch gains drop-shadow glow on
|
|
2
|
+
* hover/pin using its own row.fill color — drop-shadow family 13th
|
|
3
|
+
* anchor.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. rest: data-legend-swatch-glow='false', filter='none'
|
|
7
|
+
* 2. hover legend 'idle' row label (banked R518 path): swatch's glow
|
|
8
|
+
* attr='true', filter matches drop-shadow with the idle row fill
|
|
9
|
+
* (cyber #2dd4bf teal-400)
|
|
10
|
+
* 3. mouseleave: returns to 'false'/'none'
|
|
11
|
+
* 4. source-side regex confirms filter ternary + transition wiring
|
|
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', 'idle'), mk('a·2', 'idle'), mk('a·3', 'working'),
|
|
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-legend-swatch="idle"]', { timeout: 15000 });
|
|
47
|
+
await page.waitForTimeout(800);
|
|
48
|
+
|
|
49
|
+
const sel = '[data-legend-swatch="idle"]';
|
|
50
|
+
|
|
51
|
+
const restRead = async () => page.evaluate((sel) => {
|
|
52
|
+
const el = document.querySelector(sel);
|
|
53
|
+
if (!el) return null;
|
|
54
|
+
const cs = getComputedStyle(el);
|
|
55
|
+
return {
|
|
56
|
+
glowAttr: el.getAttribute('data-legend-swatch-glow'),
|
|
57
|
+
state: el.getAttribute('data-legend-swatch-state'),
|
|
58
|
+
filter: cs.filter,
|
|
59
|
+
transition: cs.transition,
|
|
60
|
+
};
|
|
61
|
+
}, sel);
|
|
62
|
+
|
|
63
|
+
// Phase 1: rest
|
|
64
|
+
const rest = await restRead();
|
|
65
|
+
|
|
66
|
+
// Phase 2: hover the legend 'idle' row label — sibling row hover sets
|
|
67
|
+
// hoveredStatus='idle' which is the same gate as the swatch's hover.
|
|
68
|
+
await page.hover('[data-legend-row-label="idle"]');
|
|
69
|
+
await page.waitForTimeout(400);
|
|
70
|
+
const hover = await restRead();
|
|
71
|
+
|
|
72
|
+
// Phase 3: mouseleave
|
|
73
|
+
await page.mouse.move(50, 50);
|
|
74
|
+
await page.waitForTimeout(400);
|
|
75
|
+
const leave = await restRead();
|
|
76
|
+
|
|
77
|
+
await browser.close();
|
|
78
|
+
|
|
79
|
+
// Source regex
|
|
80
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
81
|
+
const sourceFilterTernary =
|
|
82
|
+
/filter: \(isRowHovered \|\| isPinned\)\s+\? `drop-shadow\(0 0 3px \$\{row\.fill\}99\)`\s+: undefined,/.test(src);
|
|
83
|
+
const sourceAttrWired =
|
|
84
|
+
/data-legend-swatch-glow=\{\(isRowHovered \|\| isPinned\) \? 'true' : 'false'\}/.test(src);
|
|
85
|
+
const sourceTransitionExt =
|
|
86
|
+
/transition: 'r 150ms ease-out, filter 150ms ease-out',/.test(src);
|
|
87
|
+
|
|
88
|
+
const results = {
|
|
89
|
+
rest_glow_false: rest?.glowAttr === 'false',
|
|
90
|
+
rest_state_idle: rest?.state === 'idle',
|
|
91
|
+
rest_filter_none: rest?.filter === 'none' || rest?.filter === '',
|
|
92
|
+
rest_transition_has_filter: /\bfilter\b/.test(rest?.transition || ''),
|
|
93
|
+
hover_glow_true: hover?.glowAttr === 'true',
|
|
94
|
+
hover_state_hover: hover?.state === 'hover',
|
|
95
|
+
hover_filter_drop_shadow: /drop-shadow/.test(hover?.filter || ''),
|
|
96
|
+
hover_filter_has_teal: /rgba?\(45,?\s*212,?\s*191/.test(hover?.filter || ''), // cyber idle teal-400 #2dd4bf (computed as rgba(...))
|
|
97
|
+
leave_glow_false: leave?.glowAttr === 'false',
|
|
98
|
+
leave_filter_none: leave?.filter === 'none' || leave?.filter === '',
|
|
99
|
+
source_filter_ternary: sourceFilterTernary,
|
|
100
|
+
source_attr_wired: sourceAttrWired,
|
|
101
|
+
source_transition_ext: sourceTransitionExt,
|
|
102
|
+
};
|
|
103
|
+
const ok = Object.values(results).every(Boolean);
|
|
104
|
+
console.log(`${ok ? '✅' : '❌'} R537 legend-swatch glow:`,
|
|
105
|
+
JSON.stringify(results, null, 2),
|
|
106
|
+
'\n rest:', JSON.stringify(rest),
|
|
107
|
+
'\n hover:', JSON.stringify(hover),
|
|
108
|
+
'\n leave:', JSON.stringify(leave));
|
|
109
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/* Round 562 verification: legend-row swatch lifts r + drop-shadow
|
|
2
|
+
* when operator hovers a node alias whose status matches the row's
|
|
3
|
+
* tier. 5th anchor in inspection-overrides-encoding family.
|
|
4
|
+
*
|
|
5
|
+
* Mock: alpha·1 (working) + alpha·2 (idle) + alpha·3 (offline).
|
|
6
|
+
* Hover alpha·1 → 'working' legend swatch should lift; idle +
|
|
7
|
+
* offline swatches stay at rest.
|
|
8
|
+
*
|
|
9
|
+
* Test phases:
|
|
10
|
+
* 1. rest: all 3 swatches r=6, filter=none, attr='false'
|
|
11
|
+
* 2. hover alpha·1 (working) → working swatch r=7, filter contains
|
|
12
|
+
* drop-shadow with green hex; idle + offline unchanged
|
|
13
|
+
* 3. hover alpha·2 (idle) → idle swatch lifts, others rest
|
|
14
|
+
* 4. hover alpha·3 (offline) → offline swatch lifts, others rest
|
|
15
|
+
* 5. source-side regex confirms wiring
|
|
16
|
+
*/
|
|
17
|
+
import { chromium } from 'playwright';
|
|
18
|
+
import { readFileSync } from 'node:fs';
|
|
19
|
+
|
|
20
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
21
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
22
|
+
|
|
23
|
+
const browser = await chromium.launch({ headless: true });
|
|
24
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
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: [
|
|
43
|
+
mk('alpha·1', 'working'),
|
|
44
|
+
mk('alpha·2', 'idle'),
|
|
45
|
+
mk('alpha·3', 'offline'),
|
|
46
|
+
] } });
|
|
47
|
+
});
|
|
48
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
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-swatch="working"]', { timeout: 15000 });
|
|
53
|
+
await page.waitForTimeout(500);
|
|
54
|
+
|
|
55
|
+
const probeSwatch = (key) => page.evaluate((k) => {
|
|
56
|
+
const el = document.querySelector(`[data-legend-swatch="${k}"]`);
|
|
57
|
+
if (!el) return null;
|
|
58
|
+
const cs = getComputedStyle(el);
|
|
59
|
+
return {
|
|
60
|
+
r: cs.r,
|
|
61
|
+
filter: cs.filter,
|
|
62
|
+
state: el.getAttribute('data-legend-swatch-state'),
|
|
63
|
+
matching: el.getAttribute('data-legend-swatch-member-alias-matching') === 'true',
|
|
64
|
+
glow: el.getAttribute('data-legend-swatch-glow') === 'true',
|
|
65
|
+
};
|
|
66
|
+
}, key);
|
|
67
|
+
|
|
68
|
+
const restWorking = await probeSwatch('working');
|
|
69
|
+
const restIdle = await probeSwatch('idle');
|
|
70
|
+
const restOffline = await probeSwatch('offline');
|
|
71
|
+
|
|
72
|
+
// Hover working node
|
|
73
|
+
await page.hover('g[data-node="alpha·1"]');
|
|
74
|
+
await page.waitForTimeout(400);
|
|
75
|
+
const hoverWorkingWorking = await probeSwatch('working');
|
|
76
|
+
const hoverWorkingIdle = await probeSwatch('idle');
|
|
77
|
+
const hoverWorkingOffline = await probeSwatch('offline');
|
|
78
|
+
|
|
79
|
+
// Move away to reset
|
|
80
|
+
await page.mouse.move(0, 0);
|
|
81
|
+
await page.waitForTimeout(300);
|
|
82
|
+
|
|
83
|
+
// Hover idle node
|
|
84
|
+
await page.hover('g[data-node="alpha·2"]');
|
|
85
|
+
await page.waitForTimeout(400);
|
|
86
|
+
const hoverIdleIdle = await probeSwatch('idle');
|
|
87
|
+
|
|
88
|
+
// Move away and hover offline node
|
|
89
|
+
await page.mouse.move(0, 0);
|
|
90
|
+
await page.waitForTimeout(300);
|
|
91
|
+
await page.hover('g[data-node="alpha·3"]');
|
|
92
|
+
await page.waitForTimeout(400);
|
|
93
|
+
const hoverOfflineOffline = await probeSwatch('offline');
|
|
94
|
+
|
|
95
|
+
await browser.close();
|
|
96
|
+
|
|
97
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
98
|
+
const sourceFlag = /const isMemberAliasMatching = hoveredAliasRowKey === row\.key;/.test(src);
|
|
99
|
+
const sourceLifted = /const isSwatchLifted = isLifted \|\| isMemberAliasMatching;/.test(src);
|
|
100
|
+
const sourceR = /r: isSwatchLifted \? '7px' : '6px'/.test(src);
|
|
101
|
+
const sourceFilter = /filter: isSwatchLifted/.test(src);
|
|
102
|
+
const sourceAttr = /data-legend-swatch-member-alias-matching=/.test(src);
|
|
103
|
+
|
|
104
|
+
const results = {
|
|
105
|
+
// Rest state — all swatches r=6, no glow
|
|
106
|
+
rest_working_r_6: restWorking?.r === '6px',
|
|
107
|
+
rest_working_filter_none: restWorking?.filter === 'none',
|
|
108
|
+
rest_working_matching_false: restWorking?.matching === false,
|
|
109
|
+
rest_idle_r_6: restIdle?.r === '6px',
|
|
110
|
+
rest_offline_r_6: restOffline?.r === '6px',
|
|
111
|
+
// Hover working node → working swatch lifts; idle + offline stay
|
|
112
|
+
hover_working_w_r_7: hoverWorkingWorking?.r === '7px',
|
|
113
|
+
hover_working_w_matching: hoverWorkingWorking?.matching === true,
|
|
114
|
+
hover_working_w_glow: /drop-shadow\(/.test(hoverWorkingWorking?.filter || ''),
|
|
115
|
+
hover_working_i_r_6: hoverWorkingIdle?.r === '6px',
|
|
116
|
+
hover_working_o_r_6: hoverWorkingOffline?.r === '6px',
|
|
117
|
+
// Hover idle node → idle swatch lifts
|
|
118
|
+
hover_idle_i_r_7: hoverIdleIdle?.r === '7px',
|
|
119
|
+
hover_idle_i_matching: hoverIdleIdle?.matching === true,
|
|
120
|
+
// Hover offline node → offline swatch lifts
|
|
121
|
+
hover_offline_o_r_7: hoverOfflineOffline?.r === '7px',
|
|
122
|
+
hover_offline_o_matching: hoverOfflineOffline?.matching === true,
|
|
123
|
+
// Source
|
|
124
|
+
source_flag: sourceFlag,
|
|
125
|
+
source_lifted: sourceLifted,
|
|
126
|
+
source_r: sourceR,
|
|
127
|
+
source_filter: sourceFilter,
|
|
128
|
+
source_attr: sourceAttr,
|
|
129
|
+
};
|
|
130
|
+
const ok = Object.values(results).every(Boolean);
|
|
131
|
+
console.log(`${ok ? '✅' : '❌'} R562 legend-swatch inspection-overrides-encoding (5th anchor):`,
|
|
132
|
+
JSON.stringify(results, null, 2),
|
|
133
|
+
'\n rest working:', JSON.stringify(restWorking),
|
|
134
|
+
'\n rest idle:', JSON.stringify(restIdle),
|
|
135
|
+
'\n rest offline:', JSON.stringify(restOffline),
|
|
136
|
+
'\n hover alpha·1 (working) → working:', JSON.stringify(hoverWorkingWorking),
|
|
137
|
+
'\n hover alpha·2 (idle) → idle:', JSON.stringify(hoverIdleIdle),
|
|
138
|
+
'\n hover alpha·3 (offline) → offline:', JSON.stringify(hoverOfflineOffline));
|
|
139
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* Round 612 — legend-row tint rect brightness on hover/pin.
|
|
2
|
+
* 3rd panel-tier sibling. Closes the panel-row tint rect
|
|
3
|
+
* brightness trio (group / recent / legend) at full parity.
|
|
4
|
+
*
|
|
5
|
+
* Test phases:
|
|
6
|
+
* 1. mock 2 idle nodes → legend rows render
|
|
7
|
+
* 2. rest: filter='none', brightness-attr='1', tinted='none'
|
|
8
|
+
* 3. computed transition-property contains 'filter'
|
|
9
|
+
* 4. source: filter conditional + data-attr + transition extension
|
|
10
|
+
*/
|
|
11
|
+
import { chromium } from 'playwright';
|
|
12
|
+
import { readFileSync } from 'node:fs';
|
|
13
|
+
|
|
14
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
15
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
16
|
+
|
|
17
|
+
const browser = await chromium.launch({ headless: true });
|
|
18
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
19
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
20
|
+
await ctx.addInitScript(() => {
|
|
21
|
+
try {
|
|
22
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
23
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
24
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
25
|
+
} catch {}
|
|
26
|
+
});
|
|
27
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
28
|
+
const r = await route.fetch();
|
|
29
|
+
const b = await r.json();
|
|
30
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
31
|
+
const mk = (alias) => ({
|
|
32
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
33
|
+
network_id: nid, project_dir: null,
|
|
34
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
35
|
+
});
|
|
36
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
|
|
37
|
+
});
|
|
38
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
39
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
40
|
+
const page = await ctx.newPage();
|
|
41
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
42
|
+
await page.waitForSelector('[data-legend-row-tint-brightness]', { timeout: 15000, state: 'attached' });
|
|
43
|
+
await page.waitForTimeout(500);
|
|
44
|
+
|
|
45
|
+
const rest = await page.evaluate(() => {
|
|
46
|
+
const els = document.querySelectorAll('[data-legend-row-tint-brightness]');
|
|
47
|
+
if (!els.length) return null;
|
|
48
|
+
const el = els[0];
|
|
49
|
+
const cs = getComputedStyle(el);
|
|
50
|
+
return {
|
|
51
|
+
count: els.length,
|
|
52
|
+
filter: cs.filter,
|
|
53
|
+
transitionProperty: cs.transitionProperty,
|
|
54
|
+
brightnessAttr: el.getAttribute('data-legend-row-tint-brightness'),
|
|
55
|
+
tintedAttr: el.getAttribute('data-legend-row-tinted'),
|
|
56
|
+
transitionAttr: el.getAttribute('data-legend-row-tint-transition'),
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
await browser.close();
|
|
61
|
+
|
|
62
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
63
|
+
const sourceFilter = /filter: \(hoveredStatus === row\.key \|\| isPinned\)\s*\?\s*'brightness\(1\.15\)'\s*:\s*undefined/.test(src);
|
|
64
|
+
const sourceAttr = /data-legend-row-tint-brightness=\{\(hoveredStatus === row\.key \|\| isPinned\) \? '1\.15' : '1'\}/.test(src);
|
|
65
|
+
const sourceTransition = /transition: 'fill 200ms ease-out, opacity 200ms ease-out, filter 200ms ease-out'/.test(src);
|
|
66
|
+
|
|
67
|
+
const results = {
|
|
68
|
+
tint_present: !!rest,
|
|
69
|
+
count_ge_3: (rest?.count ?? 0) >= 3,
|
|
70
|
+
rest_filter_none: rest?.filter === 'none',
|
|
71
|
+
rest_brightness_1: rest?.brightnessAttr === '1',
|
|
72
|
+
rest_tinted_none: rest?.tintedAttr === 'none',
|
|
73
|
+
transition_attr: rest?.transitionAttr === '200ms',
|
|
74
|
+
transition_has_filter: /filter/.test(rest?.transitionProperty || ''),
|
|
75
|
+
source_filter: sourceFilter,
|
|
76
|
+
source_attr: sourceAttr,
|
|
77
|
+
source_transition: sourceTransition,
|
|
78
|
+
};
|
|
79
|
+
const ok = Object.values(results).every(Boolean);
|
|
80
|
+
console.log(`${ok ? '✅' : '❌'} R612 legend-row tint rect brightness (panel trio closure):`,
|
|
81
|
+
JSON.stringify(results, null, 2),
|
|
82
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
83
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* Round 665 — 3 legend-panel internal drop-shadow surfaces gain
|
|
2
|
+
* 2nd outer drop-shadow layers in one round. 24th anchor in multi-
|
|
3
|
+
* layer halo family — first legend-trio sweep.
|
|
4
|
+
*
|
|
5
|
+
* Surfaces: legend swatch, legend-row label, legend flow-arrow.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
|
|
9
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
10
|
+
const sourceSwatch = /`drop-shadow\(0 0 3px \$\{row\.fill\}99\) drop-shadow\(0 0 6px \$\{row\.fill\}4c\) brightness\(1\.15\)`/.test(src);
|
|
11
|
+
const sourceRowLabel = /`drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) drop-shadow\(0 0 4px \$\{pal\.legendAccent\}40\) brightness\(1\.15\)`/.test(src);
|
|
12
|
+
const sourceFlowArrow = /`drop-shadow\(0 0 3px \$\{pal\.flowEdge\}80\) drop-shadow\(0 0 6px \$\{pal\.flowEdge\}40\) brightness\(1\.15\)`/.test(src);
|
|
13
|
+
|
|
14
|
+
const results = {
|
|
15
|
+
source_swatch: sourceSwatch,
|
|
16
|
+
source_row_label: sourceRowLabel,
|
|
17
|
+
source_flow_arrow: sourceFlowArrow,
|
|
18
|
+
};
|
|
19
|
+
const ok = Object.values(results).every(Boolean);
|
|
20
|
+
console.log(`${ok ? '✅' : '❌'} R665 legend trio multi-layer halo (3 sibling legend surfaces):`,
|
|
21
|
+
JSON.stringify(results, null, 2));
|
|
22
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/* Round 628 — extend minimap dot's R486 inspection lift to
|
|
2
|
+
* chatAlias. 13th anchor in chat-target-gated brightness family
|
|
3
|
+
* (specifically the inspection-overrides-encoding sub-family —
|
|
4
|
+
* R484 / R485 / R486).
|
|
5
|
+
*
|
|
6
|
+
* Test phases:
|
|
7
|
+
* 1. mock 2 nodes → minimap dots render
|
|
8
|
+
* 2. rest (no hover, no chat): lifted attr 'false',
|
|
9
|
+
* lifted-chat 'false', opacity ≤ 0.95
|
|
10
|
+
* 3. source: opacity + lifted attrs use `(hoveredAlias === s.alias
|
|
11
|
+
* || chatAlias === s.alias)` gate union
|
|
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) => ({
|
|
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
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
42
|
+
const page = await ctx.newPage();
|
|
43
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
44
|
+
// Minimap only renders when canvas is zoomed/panned past activation
|
|
45
|
+
// threshold; verify source patterns first, runtime is best-effort.
|
|
46
|
+
await page.waitForTimeout(1000);
|
|
47
|
+
|
|
48
|
+
const rest = await page.evaluate(() => {
|
|
49
|
+
const el = document.querySelector('[data-topo-minimap-dot]');
|
|
50
|
+
if (!el) return null;
|
|
51
|
+
return {
|
|
52
|
+
lifted: el.getAttribute('data-topo-minimap-dot-lifted'),
|
|
53
|
+
liftedChat: el.getAttribute('data-topo-minimap-dot-lifted-chat'),
|
|
54
|
+
opacityAttr: el.getAttribute('data-topo-minimap-dot-opacity'),
|
|
55
|
+
opacityRestAttr: el.getAttribute('data-topo-minimap-dot-opacity-rest'),
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
await browser.close();
|
|
60
|
+
|
|
61
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
62
|
+
const sourceOpacityGate = /opacity=\{\(hoveredAlias === s\.alias \|\| chatAlias === s\.alias\) \? 1 : \(isOn \? \(hoveredMinimap \? 1 : 0\.95\) : 0\.6\)\}/.test(src);
|
|
63
|
+
const sourceLiftedGate = /data-topo-minimap-dot-lifted=\{\(hoveredAlias === s\.alias \|\| chatAlias === s\.alias\) \? 'true' : 'false'\}/.test(src);
|
|
64
|
+
const sourceLiftedChat = /data-topo-minimap-dot-lifted-chat=\{chatAlias === s\.alias \? 'true' : 'false'\}/.test(src);
|
|
65
|
+
|
|
66
|
+
const results = {
|
|
67
|
+
source_opacity_gate: sourceOpacityGate,
|
|
68
|
+
source_lifted_gate: sourceLiftedGate,
|
|
69
|
+
source_lifted_chat: sourceLiftedChat,
|
|
70
|
+
// optional runtime checks (minimap may not be mounted on idle view)
|
|
71
|
+
...(rest ? {
|
|
72
|
+
rest_lifted_false: rest.lifted === 'false',
|
|
73
|
+
rest_lifted_chat_false: rest.liftedChat === 'false',
|
|
74
|
+
rest_opacity_capped: parseFloat(rest.opacityAttr || '0') <= 0.95 + 1e-9,
|
|
75
|
+
} : {}),
|
|
76
|
+
};
|
|
77
|
+
const ok = Object.values(results).every(Boolean);
|
|
78
|
+
console.log(`${ok ? '✅' : '❌'} R628 minimap-dot chat-target gate (chat-gated family 13th anchor):`,
|
|
79
|
+
JSON.stringify(results, null, 2),
|
|
80
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
81
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Round 540 verification: minimap viewport gains drop-shadow glow on
|
|
2
|
+
* hover, with hover precedence over R481 zoom-state glow. 2-tier alpha
|
|
3
|
+
* ladder (hover 99 / zoom 80).
|
|
4
|
+
*
|
|
5
|
+
* Test strategy: minimap is only visible when canvas is zoomed or
|
|
6
|
+
* panned (default view returns null). Trigger zoom via the chrome
|
|
7
|
+
* zoom-in button, verify zoom-state glow renders, then hover the
|
|
8
|
+
* minimap container and verify hover precedence + alpha distinction
|
|
9
|
+
* via the data-attr. Source regex covers the ternary wiring.
|
|
10
|
+
*
|
|
11
|
+
* Test phases:
|
|
12
|
+
* 1. trigger zoom > 1.5 via chrome zoom-in clicks
|
|
13
|
+
* 2. minimap visible, viewport glow attr = 'zoom'
|
|
14
|
+
* 3. hover minimap container: viewport glow = 'hover'
|
|
15
|
+
* 4. source-side regex confirms 3-value attr + filter ternary
|
|
16
|
+
*/
|
|
17
|
+
import { chromium } from 'playwright';
|
|
18
|
+
import { readFileSync } from 'node:fs';
|
|
19
|
+
|
|
20
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
21
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
22
|
+
|
|
23
|
+
const browser = await chromium.launch({ headless: true });
|
|
24
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
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) => ({
|
|
38
|
+
alias, status: 'idle', 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: [
|
|
43
|
+
mk('a·1'), mk('a·2'), mk('a·3'),
|
|
44
|
+
] } });
|
|
45
|
+
});
|
|
46
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
47
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
48
|
+
const page = await ctx.newPage();
|
|
49
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
|
|
50
|
+
await page.waitForSelector('[data-topo-chrome-zoom-in]', { timeout: 15000 });
|
|
51
|
+
await page.waitForTimeout(500);
|
|
52
|
+
|
|
53
|
+
// Phase 1: click zoom-in until zoom > 1.5 (1.2^3 = 1.728)
|
|
54
|
+
for (let i = 0; i < 3; i++) {
|
|
55
|
+
await page.click('[data-topo-chrome-zoom-in]');
|
|
56
|
+
await page.waitForTimeout(150);
|
|
57
|
+
}
|
|
58
|
+
await page.waitForTimeout(500);
|
|
59
|
+
|
|
60
|
+
// Minimap should now be visible
|
|
61
|
+
await page.waitForSelector('[data-topo-minimap-viewport]', { timeout: 5000 });
|
|
62
|
+
|
|
63
|
+
// Phase 2: zoom-state read
|
|
64
|
+
const zoomState = await page.evaluate(() => {
|
|
65
|
+
const el = document.querySelector('[data-topo-minimap-viewport]');
|
|
66
|
+
if (!el) return null;
|
|
67
|
+
const cs = getComputedStyle(el);
|
|
68
|
+
return {
|
|
69
|
+
glow: el.getAttribute('data-topo-minimap-viewport-glow'),
|
|
70
|
+
filter: cs.filter,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Phase 3: hover minimap container
|
|
75
|
+
await page.hover('[data-topo-minimap]');
|
|
76
|
+
await page.waitForTimeout(400);
|
|
77
|
+
const hoverState = await page.evaluate(() => {
|
|
78
|
+
const el = document.querySelector('[data-topo-minimap-viewport]');
|
|
79
|
+
if (!el) return null;
|
|
80
|
+
const cs = getComputedStyle(el);
|
|
81
|
+
return {
|
|
82
|
+
glow: el.getAttribute('data-topo-minimap-viewport-glow'),
|
|
83
|
+
filter: cs.filter,
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await browser.close();
|
|
88
|
+
|
|
89
|
+
// Source regex
|
|
90
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
91
|
+
const sourceFilterTernary =
|
|
92
|
+
/filter: hoveredMinimap\s+\? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}99\)`\s+: view\.zoom > 1\.5\s+\? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\)`\s+: undefined,/.test(src);
|
|
93
|
+
const sourceAttrTernary =
|
|
94
|
+
/data-topo-minimap-viewport-glow=\{hoveredMinimap \? 'hover' : view\.zoom > 1\.5 \? 'zoom' : 'false'\}/.test(src);
|
|
95
|
+
|
|
96
|
+
const results = {
|
|
97
|
+
zoom_glow_zoom: zoomState?.glow === 'zoom',
|
|
98
|
+
zoom_filter_drop_shadow: /drop-shadow/.test(zoomState?.filter || ''),
|
|
99
|
+
hover_glow_hover: hoverState?.glow === 'hover',
|
|
100
|
+
hover_filter_drop_shadow: /drop-shadow/.test(hoverState?.filter || ''),
|
|
101
|
+
source_filter_ternary: sourceFilterTernary,
|
|
102
|
+
source_attr_ternary: sourceAttrTernary,
|
|
103
|
+
};
|
|
104
|
+
const ok = Object.values(results).every(Boolean);
|
|
105
|
+
console.log(`${ok ? '✅' : '❌'} R540 minimap viewport hover-glow:`,
|
|
106
|
+
JSON.stringify(results, null, 2),
|
|
107
|
+
'\n zoom:', JSON.stringify(zoomState),
|
|
108
|
+
'\n hover:', JSON.stringify(hoverState));
|
|
109
|
+
process.exit(ok ? 0 : 1);
|