@sleep2agi/agent-network-dashboard 0.5.3-preview.142 → 0.5.3-preview.144
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 +5 -5
- 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.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- 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 +1 -1
- package/.next/server/app/admin.html +1 -1
- package/.next/server/app/admin.rsc +1 -1
- package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- 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 +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/logs.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/messages.rsc +1 -1
- package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/node.rsc +1 -1
- package/.next/server/app/node.segments/_full.segment.rsc +1 -1
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +1 -1
- package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/nodes.rsc +1 -1
- package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/server-logs.rsc +1 -1
- package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/settings/networks.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/settings/tokens.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
- 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 +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- 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.html +1 -1
- package/.next/server/app/tasks.rsc +1 -1
- package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/07r8c6ojg0oc8.js +4 -0
- package/.next/static/chunks/{0ffq4addaj1bf.js → 08sc79vtvnjdh.js} +1 -1
- package/.next/static/chunks/{0oh8jep.bft.c.js → 0zciz-_3ddnby.js} +1 -1
- package/.next/static/chunks/{0uqs.tljq3b4i.js → 15thx410pj4fh.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +69 -11
- package/package.json +1 -1
- package/scripts/topo-chat-ring-sw-breath-test.mjs +123 -0
- package/scripts/topo-edge-badge-endpoint-gate-test.mjs +94 -0
- package/.next/static/chunks/0vr__eb-ehgc5.js +0 -4
- /package/.next/static/{8OUkJdTfWhi5oCuv5FuvW → 6IOuDP22R5LnwBEeB1rFC}/_buildManifest.js +0 -0
- /package/.next/static/{8OUkJdTfWhi5oCuv5FuvW → 6IOuDP22R5LnwBEeB1rFC}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{8OUkJdTfWhi5oCuv5FuvW → 6IOuDP22R5LnwBEeB1rFC}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/* Round 630 — chat-target ring gains a SECOND breath axis:
|
|
2
|
+
* stroke-width 2.5↔2.75 over 3s, in lockstep with the existing
|
|
3
|
+
* R120 opacity breath (0.72↔0.95 / 0.82↔1.0). Doubles the 呼吸感
|
|
4
|
+
* — the ring "swells" as it brightens, then settles as it dims.
|
|
5
|
+
* Gated `!reducedMotion && isChat`. R51 sentinel-safe (sw range
|
|
6
|
+
* [2.5, 2.75] stays clear of reserved {1.5, 3}).
|
|
7
|
+
*
|
|
8
|
+
* Test phases:
|
|
9
|
+
* 1. mock 2 nodes → no chat: chat-target ring opacity=0,
|
|
10
|
+
* sw-breath attr 'off', NO <animate> children
|
|
11
|
+
* 2. click a node → opens ChatPopover for that alias →
|
|
12
|
+
* chat-target ring becomes isChat → sw-breath attr 'on',
|
|
13
|
+
* TWO <animate> children present (one opacity + one
|
|
14
|
+
* stroke-width, both dur='3s' repeatCount='indefinite')
|
|
15
|
+
* 3. source: stroke-width animate uses values '2.5;2.75;2.5'
|
|
16
|
+
* and sits inside the same `!reducedMotion && isChat`
|
|
17
|
+
* gate as the opacity animate
|
|
18
|
+
*/
|
|
19
|
+
import { chromium } from 'playwright';
|
|
20
|
+
import { readFileSync } from 'node:fs';
|
|
21
|
+
|
|
22
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
23
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
24
|
+
|
|
25
|
+
const browser = await chromium.launch({ headless: true });
|
|
26
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
|
|
27
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
28
|
+
await ctx.addInitScript(() => {
|
|
29
|
+
try {
|
|
30
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
31
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
32
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
33
|
+
} catch {}
|
|
34
|
+
});
|
|
35
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
36
|
+
const r = await route.fetch();
|
|
37
|
+
const b = await r.json();
|
|
38
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
39
|
+
const mk = (alias) => ({
|
|
40
|
+
alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
41
|
+
network_id: nid, project_dir: null,
|
|
42
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
43
|
+
});
|
|
44
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
|
|
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-chat-target-ring]', { timeout: 15000, state: 'attached' });
|
|
51
|
+
await page.waitForTimeout(500);
|
|
52
|
+
|
|
53
|
+
const restState = await page.evaluate(() => {
|
|
54
|
+
const el = document.querySelector('[data-chat-target-ring]');
|
|
55
|
+
if (!el) return null;
|
|
56
|
+
return {
|
|
57
|
+
active: el.getAttribute('data-chat-target-active'),
|
|
58
|
+
breath: el.getAttribute('data-chat-target-breath'),
|
|
59
|
+
swBreath: el.getAttribute('data-chat-target-ring-sw-breath'),
|
|
60
|
+
animateCount: el.querySelectorAll('animate').length,
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Click a node to open chat → that node's chat-target ring activates
|
|
65
|
+
await page.click('[data-node="a·1"]', { force: true });
|
|
66
|
+
await page.waitForTimeout(400);
|
|
67
|
+
|
|
68
|
+
const activeState = await page.evaluate(() => {
|
|
69
|
+
// Find the chat-target ring of node a·1 — it's inside g[data-node="a·1"]
|
|
70
|
+
const node = document.querySelector('[data-node="a·1"]');
|
|
71
|
+
if (!node) return null;
|
|
72
|
+
const ring = node.querySelector('[data-chat-target-ring]');
|
|
73
|
+
if (!ring) return null;
|
|
74
|
+
const animates = Array.from(ring.querySelectorAll('animate'));
|
|
75
|
+
return {
|
|
76
|
+
active: ring.getAttribute('data-chat-target-active'),
|
|
77
|
+
breath: ring.getAttribute('data-chat-target-breath'),
|
|
78
|
+
swBreath: ring.getAttribute('data-chat-target-ring-sw-breath'),
|
|
79
|
+
animateCount: animates.length,
|
|
80
|
+
animateAttrs: animates.map(a => ({
|
|
81
|
+
attr: a.getAttribute('attributeName'),
|
|
82
|
+
dur: a.getAttribute('dur'),
|
|
83
|
+
vals: a.getAttribute('values'),
|
|
84
|
+
rep: a.getAttribute('repeatCount'),
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
await browser.close();
|
|
90
|
+
|
|
91
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
92
|
+
const sourceSwAnimate = /<animate\s+attributeName="stroke-width"\s+values="2\.5;2\.75;2\.5"\s+dur="3s"\s+repeatCount="indefinite"\s*\/>/.test(src);
|
|
93
|
+
const sourceSwAttr = /data-chat-target-ring-sw-breath=\{!reducedMotion && isChat \? 'on' : 'off'\}/.test(src);
|
|
94
|
+
// Ensure both animates sit inside the same `!reducedMotion && isChat &&` gate
|
|
95
|
+
const sourceFragmentGate = /\{!reducedMotion && isChat && \(\s*<>\s*<animate\s+attributeName="opacity"[\s\S]*?<animate\s+attributeName="stroke-width"/.test(src);
|
|
96
|
+
|
|
97
|
+
const swAnimate = activeState?.animateAttrs?.find(a => a.attr === 'stroke-width');
|
|
98
|
+
const opAnimate = activeState?.animateAttrs?.find(a => a.attr === 'opacity');
|
|
99
|
+
|
|
100
|
+
const results = {
|
|
101
|
+
rest_ring_present: !!restState,
|
|
102
|
+
rest_active_false: restState?.active === 'false',
|
|
103
|
+
rest_breath_off: restState?.breath === 'off',
|
|
104
|
+
rest_sw_breath_off: restState?.swBreath === 'off',
|
|
105
|
+
rest_no_animate: restState?.animateCount === 0,
|
|
106
|
+
active_active_true: activeState?.active === 'true',
|
|
107
|
+
active_breath_on: activeState?.breath === 'on',
|
|
108
|
+
active_sw_breath_on: activeState?.swBreath === 'on',
|
|
109
|
+
active_animate_count_2: activeState?.animateCount === 2,
|
|
110
|
+
active_sw_dur_3s: swAnimate?.dur === '3s',
|
|
111
|
+
active_sw_values: swAnimate?.vals === '2.5;2.75;2.5',
|
|
112
|
+
active_sw_rep_indef: swAnimate?.rep === 'indefinite',
|
|
113
|
+
active_op_dur_3s: opAnimate?.dur === '3s', // existing R120 still present
|
|
114
|
+
source_sw_animate: sourceSwAnimate,
|
|
115
|
+
source_sw_attr: sourceSwAttr,
|
|
116
|
+
source_fragment_gate: sourceFragmentGate,
|
|
117
|
+
};
|
|
118
|
+
const ok = Object.values(results).every(Boolean);
|
|
119
|
+
console.log(`${ok ? '✅' : '❌'} R630 chat-target ring stroke-width breath (呼吸感 2nd axis):`,
|
|
120
|
+
JSON.stringify(results, null, 2),
|
|
121
|
+
`\n rest: ${JSON.stringify(restState)}`,
|
|
122
|
+
`\n active: ${JSON.stringify(activeState)}`);
|
|
123
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* Round 629 — extend edge-badge brightness gate (CIRCLE + TEXT)
|
|
2
|
+
* to include isEndpointHoveredEdge. Closes the badge↔edge
|
|
3
|
+
* brightness parity left open after R624 brightened the visible
|
|
4
|
+
* path on endpoint-hover (incl. chat-target via R624's chatAlias
|
|
5
|
+
* extension). 14th anchor in chat-target-gated brightness family
|
|
6
|
+
* (indirect, via isEndpointHoveredEdge), and also a hover-gated
|
|
7
|
+
* polish — two gate axes added in one expression.
|
|
8
|
+
*
|
|
9
|
+
* Test phases:
|
|
10
|
+
* 1. mock 2 nodes + 3 messages → edge with count=3 visible
|
|
11
|
+
* (visible threshold), badge mounts
|
|
12
|
+
* 2. rest (no hover, no chat): brightness '1', endpoint-active 'false'
|
|
13
|
+
* on both circle and text
|
|
14
|
+
* 3. source: filter expression on circle + text includes
|
|
15
|
+
* isEndpointHoveredEdge in the OR-chain
|
|
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: [mk('a·1'), mk('a·2')] } });
|
|
43
|
+
});
|
|
44
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
|
|
45
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'one', created_at: fresh },
|
|
46
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'two', created_at: fresh },
|
|
47
|
+
{ from_alias: 'a·1', to_alias: 'a·2', content: 'three', 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-edge-badge-brightness]', { timeout: 15000, state: 'attached' });
|
|
53
|
+
await page.waitForTimeout(500);
|
|
54
|
+
|
|
55
|
+
const rest = await page.evaluate(() => {
|
|
56
|
+
const c = document.querySelector('[data-edge-badge-brightness]');
|
|
57
|
+
const t = document.querySelector('[data-edge-badge-text-brightness]');
|
|
58
|
+
return {
|
|
59
|
+
circleBrightness: c?.getAttribute('data-edge-badge-brightness'),
|
|
60
|
+
circleEndpoint: c?.getAttribute('data-edge-badge-endpoint-active'),
|
|
61
|
+
circleGlow: c?.getAttribute('data-edge-badge-glow'),
|
|
62
|
+
textBrightness: t?.getAttribute('data-edge-badge-text-brightness'),
|
|
63
|
+
textEndpoint: t?.getAttribute('data-edge-badge-text-endpoint-active'),
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
await browser.close();
|
|
68
|
+
|
|
69
|
+
const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
|
|
70
|
+
const sourceCircleFilter = /filter: \(isHoveredEdge \|\| isPinned \|\| isEndpointHoveredEdge\)\s*\n\s*\? `drop-shadow\(0 0 3px \$\{pal\.legendAccent\}99\) brightness\(1\.15\)`/.test(src);
|
|
71
|
+
const sourceTextFilter = /filter: \(isHoveredEdge \|\| isPinned \|\| isHot \|\| isEndpointHoveredEdge\)\s*\n\s*\? 'brightness\(1\.15\)'/.test(src);
|
|
72
|
+
const sourceCircleAttr = /data-edge-badge-brightness=\{\(isHoveredEdge \|\| isPinned \|\| isHot \|\| isEndpointHoveredEdge\) \? '1\.15' : '1'\}/.test(src);
|
|
73
|
+
const sourceCircleEpAttr = /data-edge-badge-endpoint-active=\{isEndpointHoveredEdge \? 'true' : 'false'\}/.test(src);
|
|
74
|
+
const sourceTextAttr = /data-edge-badge-text-brightness=\{\(isHoveredEdge \|\| isPinned \|\| isHot \|\| isEndpointHoveredEdge\) \? '1\.15' : '1'\}/.test(src);
|
|
75
|
+
|
|
76
|
+
const results = {
|
|
77
|
+
circle_present: rest.circleBrightness != null,
|
|
78
|
+
rest_circle_brightness: rest.circleBrightness === '1',
|
|
79
|
+
rest_circle_endpoint: rest.circleEndpoint === 'false',
|
|
80
|
+
rest_circle_glow_false: rest.circleGlow === 'false',
|
|
81
|
+
text_present: rest.textBrightness != null,
|
|
82
|
+
rest_text_brightness: rest.textBrightness === '1',
|
|
83
|
+
rest_text_endpoint: rest.textEndpoint === 'false',
|
|
84
|
+
source_circle_filter: sourceCircleFilter,
|
|
85
|
+
source_text_filter: sourceTextFilter,
|
|
86
|
+
source_circle_attr: sourceCircleAttr,
|
|
87
|
+
source_circle_ep_attr: sourceCircleEpAttr,
|
|
88
|
+
source_text_attr: sourceTextAttr,
|
|
89
|
+
};
|
|
90
|
+
const ok = Object.values(results).every(Boolean);
|
|
91
|
+
console.log(`${ok ? '✅' : '❌'} R629 edge-badge endpoint-active gate (chat-gated family 14th anchor, indirect):`,
|
|
92
|
+
JSON.stringify(results, null, 2),
|
|
93
|
+
`\n rest: ${JSON.stringify(rest)}`);
|
|
94
|
+
process.exit(ok ? 0 : 1);
|