@sleep2agi/agent-network-dashboard 0.4.6-preview.179 → 0.4.6-preview.180
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 +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-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/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/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{01iq~qjn.wiba.js → 0ia0~8uq23xxr.js} +1 -1
- package/.next/static/chunks/{05pqwkubvta73.js → 0tfbneqpxn9gw.js} +1 -1
- package/.next/static/chunks/{15he1e9gl6.g5.js → 17limi7in00fo.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +23 -3
- package/package.json +1 -1
- package/scripts/topo-groupbox-fadein-test.mjs +95 -0
- /package/.next/static/{lJBvGFN5KKDEoZclDBTDU → Bfq_NKAKfgisiPZVimIBB}/_buildManifest.js +0 -0
- /package/.next/static/{lJBvGFN5KKDEoZclDBTDU → Bfq_NKAKfgisiPZVimIBB}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{lJBvGFN5KKDEoZclDBTDU → Bfq_NKAKfgisiPZVimIBB}/_ssgManifest.js +0 -0
|
@@ -2582,7 +2582,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2582
2582
|
only — groupBoxes is empty in ring mode. Rendered behind the
|
|
2583
2583
|
flow links + nodes; pointer-events off so they never intercept
|
|
2584
2584
|
a node click. Restrained dashed container + group-name label. */}
|
|
2585
|
-
{groupBoxes.map(box => {
|
|
2585
|
+
{groupBoxes.map((box, boxIdx) => {
|
|
2586
2586
|
const isHovered = activeGroup === box.key;
|
|
2587
2587
|
// R68: distinguish "locked by click" from "currently hovered".
|
|
2588
2588
|
// R63 made pinned and hovered identical (both hit isHovered
|
|
@@ -2607,14 +2607,34 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2607
2607
|
<g
|
|
2608
2608
|
key={`grp-${box.key}`}
|
|
2609
2609
|
data-group={box.key}
|
|
2610
|
-
|
|
2610
|
+
// Round 173 / Loop: group boxes pick up the first-paint
|
|
2611
|
+
// fade-in wave alongside R9 staggered nodes (0-540ms)
|
|
2612
|
+
// and R172 staggered edges (280-980ms). Pre-R173 the
|
|
2613
|
+
// structural box frames appeared instantly while the
|
|
2614
|
+
// nodes inside eased in — the reveal felt like
|
|
2615
|
+
// 'frame slams down, nodes drift in'. The .anet-fade-in
|
|
2616
|
+
// CSS animation (R3 origin, 0.15s ease-out, mount-once)
|
|
2617
|
+
// plays alongside the node R9 stagger; each box offset
|
|
2618
|
+
// by boxIdx × 60ms (cap at 8 indices so a fleet with
|
|
2619
|
+
// many groups still finishes within ~500ms) so boxes
|
|
2620
|
+
// appear like a soft sweep across the grid rather than
|
|
2621
|
+
// a single pop. animation-fill-mode default 'none' →
|
|
2622
|
+
// post-animation control reverts to the inline opacity
|
|
2623
|
+
// style below (1 / 0.28 based on filter pin state).
|
|
2624
|
+
// data-group-fade-delay exposes the computed delay for
|
|
2625
|
+
// test probes.
|
|
2626
|
+
className="transition-opacity anet-fade-in"
|
|
2627
|
+
data-group-fade-delay={Math.min(boxIdx, 8) * 60}
|
|
2611
2628
|
// R63: drop the blanket pointerEvents:'none' that
|
|
2612
2629
|
// previously sat here. Chrome's SVG impl doesn't let a
|
|
2613
2630
|
// child override a parent's `none` even though the spec
|
|
2614
2631
|
// says it should — moving the property onto just the
|
|
2615
2632
|
// rect (where it's needed so nodes underneath stay
|
|
2616
2633
|
// clickable) lets the label text receive its own click.
|
|
2617
|
-
style={{
|
|
2634
|
+
style={{
|
|
2635
|
+
opacity: !activeGroup || isHovered ? 1 : 0.28,
|
|
2636
|
+
animationDelay: `${Math.min(boxIdx, 8) * 60}ms`,
|
|
2637
|
+
}}
|
|
2618
2638
|
>
|
|
2619
2639
|
<rect
|
|
2620
2640
|
x={box.x}
|
package/package.json
CHANGED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* Round 173 verification: group boxes (grid layout) fade-in
|
|
2
|
+
* alongside the R9/R172 first-paint wave.
|
|
3
|
+
*
|
|
4
|
+
* Pre-R173 the structural box frames appeared instantly while
|
|
5
|
+
* nodes inside eased in via R9 (0-540ms) and edges via R172
|
|
6
|
+
* (280-980ms). The reveal felt like 'frame slams down, nodes
|
|
7
|
+
* drift in'.
|
|
8
|
+
*
|
|
9
|
+
* R173 wraps each group box <g> in:
|
|
10
|
+
* className="transition-opacity anet-fade-in"
|
|
11
|
+
* style={{ animationDelay: 'boxIdx × 60ms (cap 8)' }}
|
|
12
|
+
* data-group-fade-delay={boxIdx × 60}
|
|
13
|
+
*
|
|
14
|
+
* Test:
|
|
15
|
+
* 1. Force grid layout
|
|
16
|
+
* 2. Mock 4 prefix-clustered sessions → 2 groups
|
|
17
|
+
* 3. Probe each [data-group] wrapper
|
|
18
|
+
* 4. Assert anet-fade-in className present
|
|
19
|
+
* 5. Assert animation-delay 0ms, 60ms
|
|
20
|
+
*/
|
|
21
|
+
import { chromium } from 'playwright';
|
|
22
|
+
import { readFileSync } from 'node:fs';
|
|
23
|
+
|
|
24
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
25
|
+
const browser = await chromium.launch({ headless: true });
|
|
26
|
+
|
|
27
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
|
|
28
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
29
|
+
await ctx.addInitScript(() => {
|
|
30
|
+
try {
|
|
31
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
32
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
33
|
+
localStorage.setItem('anet-topo-layout', 'grid');
|
|
34
|
+
} catch {}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
38
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
39
|
+
const r = await route.fetch();
|
|
40
|
+
const b = await r.json();
|
|
41
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
42
|
+
const mk = (alias) => ({
|
|
43
|
+
alias, status: 'working', model: 'claude-opus-4', runtime: 'cli-claude-code',
|
|
44
|
+
network_id: nid, project_dir: null,
|
|
45
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
46
|
+
});
|
|
47
|
+
// 2 distinct prefix groups, 2 sessions each → 2 group boxes
|
|
48
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
49
|
+
mk('agents-a1'), mk('agents-a2'),
|
|
50
|
+
mk('infra-b1'), mk('infra-b2'),
|
|
51
|
+
] } });
|
|
52
|
+
});
|
|
53
|
+
await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
|
|
54
|
+
await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
|
|
55
|
+
|
|
56
|
+
const page = await ctx.newPage();
|
|
57
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
58
|
+
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
|
|
59
|
+
await page.waitForSelector('[data-group]', { timeout: 10000 });
|
|
60
|
+
await page.waitForTimeout(400);
|
|
61
|
+
|
|
62
|
+
const probe = await page.evaluate(() => {
|
|
63
|
+
const boxes = [...document.querySelectorAll('g[data-group]')];
|
|
64
|
+
return boxes.map(b => ({
|
|
65
|
+
key: b.getAttribute('data-group'),
|
|
66
|
+
hasFadeClass: (b.getAttribute('class') || '').includes('anet-fade-in'),
|
|
67
|
+
fadeDelayAttr: parseFloat(b.getAttribute('data-group-fade-delay') || ''),
|
|
68
|
+
animationDelay: b.style.animationDelay || getComputedStyle(b).animationDelay,
|
|
69
|
+
}));
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
await browser.close();
|
|
73
|
+
|
|
74
|
+
const parseDelay = (s) => {
|
|
75
|
+
if (!s) return null;
|
|
76
|
+
if (s.endsWith('ms')) return parseFloat(s);
|
|
77
|
+
if (s.endsWith('s')) return parseFloat(s) * 1000;
|
|
78
|
+
return parseFloat(s);
|
|
79
|
+
};
|
|
80
|
+
const delays = probe.map(p => parseDelay(p.animationDelay));
|
|
81
|
+
|
|
82
|
+
const results = {
|
|
83
|
+
two_boxes_found: probe.length === 2,
|
|
84
|
+
all_have_fade_class: probe.every(p => p.hasFadeClass),
|
|
85
|
+
box0_delay_attr_0: probe[0]?.fadeDelayAttr === 0,
|
|
86
|
+
box1_delay_attr_60: probe[1]?.fadeDelayAttr === 60,
|
|
87
|
+
box0_anim_delay_0ms: delays[0] === 0,
|
|
88
|
+
box1_anim_delay_60ms: Math.abs(delays[1] - 60) < 0.5,
|
|
89
|
+
delays_strictly_increase: delays[0] < delays[1],
|
|
90
|
+
};
|
|
91
|
+
const ok = Object.values(results).every(Boolean);
|
|
92
|
+
console.log(`${ok ? '✅' : '❌'} groupbox fade-in:`, JSON.stringify(results),
|
|
93
|
+
`\n boxes =`, probe,
|
|
94
|
+
`\n delays (ms) =`, delays);
|
|
95
|
+
process.exit(ok ? 0 : 1);
|
|
File without changes
|
/package/.next/static/{lJBvGFN5KKDEoZclDBTDU → Bfq_NKAKfgisiPZVimIBB}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|