@timmeck/brain 1.8.3 → 1.8.4
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/dist/cli/commands/dashboard.js +90 -38
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/db/repositories/synapse.repository.d.ts +1 -0
- package/dist/db/repositories/synapse.repository.js +9 -0
- package/dist/db/repositories/synapse.repository.js.map +1 -1
- package/dist/services/analytics.service.js +5 -2
- package/dist/services/analytics.service.js.map +1 -1
- package/dist/synapses/synapse-manager.d.ts +1 -0
- package/dist/synapses/synapse-manager.js +3 -0
- package/dist/synapses/synapse-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/dashboard.ts +90 -38
- package/src/db/repositories/synapse.repository.ts +10 -0
- package/src/services/analytics.service.ts +5 -2
- package/src/synapses/synapse-manager.ts +4 -0
|
@@ -18,7 +18,7 @@ export function dashboardCommand() {
|
|
|
18
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
19
|
const network = await client.request('synapse.stats', {});
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
const networkOverview = await client.request('analytics.network', { limit:
|
|
21
|
+
const networkOverview = await client.request('analytics.network', { limit: 90 });
|
|
22
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
23
|
const insights = await client.request('research.insights', {
|
|
24
24
|
activeOnly: true,
|
|
@@ -279,7 +279,7 @@ function generateHtml(data) {
|
|
|
279
279
|
|
|
280
280
|
/* Graph */
|
|
281
281
|
.graph-container{position:relative;background:var(--glass);border:1px solid var(--glass-border);border-radius:var(--radius);overflow:hidden;backdrop-filter:blur(20px)}
|
|
282
|
-
#synapse-graph{width:100%;height:
|
|
282
|
+
#synapse-graph{width:100%;height:650px;display:block;cursor:grab}
|
|
283
283
|
#synapse-graph:active{cursor:grabbing}
|
|
284
284
|
.graph-legend{display:flex;gap:16px;flex-wrap:wrap;padding:12px 20px;border-top:1px solid var(--glass-border);font-size:.8rem;color:var(--text2)}
|
|
285
285
|
.legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle}
|
|
@@ -345,11 +345,12 @@ function generateHtml(data) {
|
|
|
345
345
|
<div class="graph-container">
|
|
346
346
|
<canvas id="synapse-graph"></canvas>
|
|
347
347
|
<div class="graph-legend">
|
|
348
|
-
<span><span class="legend-dot" style="background
|
|
349
|
-
<span><span class="legend-dot" style="background
|
|
350
|
-
<span><span class="legend-dot" style="background
|
|
351
|
-
<span><span class="legend-dot" style="background
|
|
352
|
-
<span><span class="legend-dot" style="background
|
|
348
|
+
<span><span class="legend-dot" style="background:#ff5577"></span> error</span>
|
|
349
|
+
<span><span class="legend-dot" style="background:#3dffa0"></span> solution</span>
|
|
350
|
+
<span><span class="legend-dot" style="background:#b47aff"></span> code_module</span>
|
|
351
|
+
<span><span class="legend-dot" style="background:#ffb347"></span> project</span>
|
|
352
|
+
<span><span class="legend-dot" style="background:#5b9cff"></span> rule</span>
|
|
353
|
+
<span style="margin-left:auto;color:var(--text3);font-size:.72rem">edges: co_occurs / solves / uses_module / depends_on</span>
|
|
353
354
|
</div>
|
|
354
355
|
<div id="graph-tooltip" class="graph-tooltip"></div>
|
|
355
356
|
</div>
|
|
@@ -515,7 +516,7 @@ setTimeout(() => {
|
|
|
515
516
|
});
|
|
516
517
|
}, 500);
|
|
517
518
|
|
|
518
|
-
// --- Synapse Force-Directed Graph ---
|
|
519
|
+
// --- Synapse Force-Directed Graph (Premium) ---
|
|
519
520
|
(function(){
|
|
520
521
|
const edges = ${JSON.stringify(synapseEdges.map((e) => ({ s: e.source, t: e.target, type: e.type, w: e.weight })))};
|
|
521
522
|
const canvas = document.getElementById('synapse-graph');
|
|
@@ -523,11 +524,17 @@ setTimeout(() => {
|
|
|
523
524
|
const ctx = canvas.getContext('2d');
|
|
524
525
|
const container = canvas.parentElement;
|
|
525
526
|
let W, H, dpr;
|
|
527
|
+
let frame = 0;
|
|
526
528
|
|
|
527
529
|
const NODE_COLORS = {
|
|
528
530
|
error: '#ff5577', solution: '#3dffa0', code_module: '#b47aff',
|
|
529
531
|
project: '#ffb347', rule: '#5b9cff', antipattern: '#ff5577'
|
|
530
532
|
};
|
|
533
|
+
const EDGE_COLORS = {
|
|
534
|
+
co_occurs: ['#5b9cff','#47e5ff'], solves: ['#3dffa0','#5bff8a'],
|
|
535
|
+
uses_module: ['#b47aff','#7a5cff'], depends_on: ['#ff5577','#ffb347'],
|
|
536
|
+
caused_by: ['#ff5577','#ff8866']
|
|
537
|
+
};
|
|
531
538
|
const DEFAULT_COLOR = '#47e5ff';
|
|
532
539
|
|
|
533
540
|
// Build graph nodes & edges
|
|
@@ -545,7 +552,7 @@ setTimeout(() => {
|
|
|
545
552
|
function resize() {
|
|
546
553
|
dpr = window.devicePixelRatio || 1;
|
|
547
554
|
W = container.clientWidth;
|
|
548
|
-
H =
|
|
555
|
+
H = 650;
|
|
549
556
|
canvas.width = W * dpr;
|
|
550
557
|
canvas.height = H * dpr;
|
|
551
558
|
canvas.style.width = W + 'px';
|
|
@@ -555,23 +562,33 @@ setTimeout(() => {
|
|
|
555
562
|
resize();
|
|
556
563
|
window.addEventListener('resize', resize);
|
|
557
564
|
|
|
558
|
-
//
|
|
565
|
+
// Cluster initial positions by type for better layout
|
|
566
|
+
const typeGroups = {};
|
|
559
567
|
for (const n of nodes) {
|
|
560
|
-
n.
|
|
561
|
-
n.
|
|
568
|
+
if (!typeGroups[n.type]) typeGroups[n.type] = [];
|
|
569
|
+
typeGroups[n.type].push(n);
|
|
562
570
|
}
|
|
571
|
+
const types = Object.keys(typeGroups);
|
|
572
|
+
types.forEach((t, i) => {
|
|
573
|
+
const angle = (i / types.length) * Math.PI * 2;
|
|
574
|
+
const cx = W/2 + Math.cos(angle) * W * 0.2;
|
|
575
|
+
const cy = H/2 + Math.sin(angle) * H * 0.2;
|
|
576
|
+
for (const n of typeGroups[t]) {
|
|
577
|
+
n.x = cx + (Math.random() - 0.5) * W * 0.25;
|
|
578
|
+
n.y = cy + (Math.random() - 0.5) * H * 0.25;
|
|
579
|
+
}
|
|
580
|
+
});
|
|
563
581
|
|
|
564
582
|
// Force simulation
|
|
565
|
-
const REPULSION =
|
|
566
|
-
const ATTRACTION = 0.
|
|
567
|
-
const DAMPING = 0.
|
|
568
|
-
const CENTER_GRAVITY = 0.
|
|
583
|
+
const REPULSION = 4000;
|
|
584
|
+
const ATTRACTION = 0.006;
|
|
585
|
+
const DAMPING = 0.88;
|
|
586
|
+
const CENTER_GRAVITY = 0.0015;
|
|
569
587
|
let hovered = null;
|
|
570
588
|
let dragging = null;
|
|
571
589
|
let dragOff = {x:0,y:0};
|
|
572
590
|
|
|
573
591
|
function simulate() {
|
|
574
|
-
// Repulsion
|
|
575
592
|
for (let i = 0; i < nodes.length; i++) {
|
|
576
593
|
for (let j = i + 1; j < nodes.length; j++) {
|
|
577
594
|
let dx = nodes[i].x - nodes[j].x;
|
|
@@ -584,69 +601,101 @@ setTimeout(() => {
|
|
|
584
601
|
nodes[j].vx -= fx; nodes[j].vy -= fy;
|
|
585
602
|
}
|
|
586
603
|
}
|
|
587
|
-
// Attraction along edges
|
|
588
604
|
for (const e of graphEdges) {
|
|
589
605
|
let dx = e.target.x - e.source.x;
|
|
590
606
|
let dy = e.target.y - e.source.y;
|
|
591
607
|
let dist = Math.sqrt(dx*dx + dy*dy) || 1;
|
|
592
|
-
let force = (dist -
|
|
608
|
+
let force = (dist - 120) * ATTRACTION * e.weight;
|
|
593
609
|
let fx = (dx / dist) * force;
|
|
594
610
|
let fy = (dy / dist) * force;
|
|
595
611
|
e.source.vx += fx; e.source.vy += fy;
|
|
596
612
|
e.target.vx -= fx; e.target.vy -= fy;
|
|
597
613
|
}
|
|
598
|
-
// Center gravity
|
|
599
614
|
for (const n of nodes) {
|
|
600
615
|
n.vx += (W/2 - n.x) * CENTER_GRAVITY;
|
|
601
616
|
n.vy += (H/2 - n.y) * CENTER_GRAVITY;
|
|
602
617
|
}
|
|
603
|
-
// Apply & damp
|
|
604
618
|
for (const n of nodes) {
|
|
605
619
|
if (n === dragging) continue;
|
|
606
620
|
n.vx *= DAMPING; n.vy *= DAMPING;
|
|
607
621
|
n.x += n.vx; n.y += n.vy;
|
|
608
|
-
n.x = Math.max(
|
|
609
|
-
n.y = Math.max(
|
|
622
|
+
n.x = Math.max(30, Math.min(W - 30, n.x));
|
|
623
|
+
n.y = Math.max(30, Math.min(H - 30, n.y));
|
|
610
624
|
}
|
|
611
625
|
}
|
|
612
626
|
|
|
613
|
-
function getNodeRadius(n) {
|
|
627
|
+
function getNodeRadius(n) {
|
|
628
|
+
return Math.min(20, 4 + Math.sqrt(n.connections) * 3.5);
|
|
629
|
+
}
|
|
614
630
|
|
|
615
631
|
function draw() {
|
|
632
|
+
frame++;
|
|
616
633
|
ctx.clearRect(0, 0, W, H);
|
|
617
|
-
|
|
634
|
+
|
|
635
|
+
// Edges with gradient colors per type
|
|
618
636
|
for (const e of graphEdges) {
|
|
619
|
-
const alpha = 0.
|
|
620
|
-
|
|
621
|
-
|
|
637
|
+
const alpha = 0.1 + e.weight * 0.4;
|
|
638
|
+
const colors = EDGE_COLORS[e.type] || ['#5b9cff','#47e5ff'];
|
|
639
|
+
const grad = ctx.createLinearGradient(e.source.x, e.source.y, e.target.x, e.target.y);
|
|
640
|
+
grad.addColorStop(0, colors[0] + Math.round(Math.min(0.7,alpha)*255).toString(16).padStart(2,'0'));
|
|
641
|
+
grad.addColorStop(1, colors[1] + Math.round(Math.min(0.7,alpha)*255).toString(16).padStart(2,'0'));
|
|
642
|
+
ctx.strokeStyle = grad;
|
|
643
|
+
ctx.lineWidth = 0.5 + e.weight * 2.5;
|
|
622
644
|
ctx.beginPath();
|
|
623
645
|
ctx.moveTo(e.source.x, e.source.y);
|
|
624
646
|
ctx.lineTo(e.target.x, e.target.y);
|
|
625
647
|
ctx.stroke();
|
|
626
648
|
}
|
|
627
|
-
|
|
649
|
+
|
|
650
|
+
// Nodes with ambient glow + pulse on hubs
|
|
628
651
|
for (const n of nodes) {
|
|
629
652
|
const r = getNodeRadius(n);
|
|
630
653
|
const color = NODE_COLORS[n.type] || DEFAULT_COLOR;
|
|
631
654
|
const isHover = n === hovered || n === dragging;
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
655
|
+
const isHub = n.connections >= 5;
|
|
656
|
+
|
|
657
|
+
// Ambient glow for all nodes
|
|
658
|
+
const glowSize = isHover ? 30 : (isHub ? 15 + Math.sin(frame * 0.03 + n.x) * 5 : 8);
|
|
659
|
+
ctx.shadowColor = color;
|
|
660
|
+
ctx.shadowBlur = glowSize;
|
|
661
|
+
|
|
662
|
+
// Outer ring for hubs
|
|
663
|
+
if (isHub || isHover) {
|
|
664
|
+
const pulseR = r + 3 + (isHub ? Math.sin(frame * 0.04 + n.y) * 2 : 0);
|
|
665
|
+
ctx.strokeStyle = color;
|
|
666
|
+
ctx.globalAlpha = isHover ? 0.6 : 0.25;
|
|
667
|
+
ctx.lineWidth = 1.5;
|
|
668
|
+
ctx.beginPath();
|
|
669
|
+
ctx.arc(n.x, n.y, pulseR, 0, Math.PI * 2);
|
|
670
|
+
ctx.stroke();
|
|
636
671
|
}
|
|
672
|
+
|
|
673
|
+
// Core node
|
|
674
|
+
ctx.globalAlpha = isHover ? 1 : 0.85;
|
|
637
675
|
ctx.fillStyle = color;
|
|
638
|
-
ctx.globalAlpha = isHover ? 1 : 0.8;
|
|
639
676
|
ctx.beginPath();
|
|
640
677
|
ctx.arc(n.x, n.y, r, 0, Math.PI * 2);
|
|
641
678
|
ctx.fill();
|
|
679
|
+
|
|
680
|
+
// Inner highlight (glossy effect)
|
|
681
|
+
ctx.globalAlpha = 0.3;
|
|
682
|
+
ctx.fillStyle = '#ffffff';
|
|
683
|
+
ctx.beginPath();
|
|
684
|
+
ctx.arc(n.x - r * 0.25, n.y - r * 0.25, r * 0.4, 0, Math.PI * 2);
|
|
685
|
+
ctx.fill();
|
|
686
|
+
|
|
642
687
|
ctx.globalAlpha = 1;
|
|
643
688
|
ctx.shadowBlur = 0;
|
|
644
|
-
|
|
689
|
+
|
|
690
|
+
// Labels
|
|
645
691
|
if (isHover || n.connections >= 4) {
|
|
692
|
+
const label = n.type === 'project' ? n.id.replace('project:','P') : n.id.split(':')[0];
|
|
646
693
|
ctx.fillStyle = '#e8eaf6';
|
|
647
|
-
ctx.font = (isHover ? 'bold ' : '') + '
|
|
694
|
+
ctx.font = (isHover ? 'bold 12px' : '10px') + ' Inter, system-ui, sans-serif';
|
|
648
695
|
ctx.textAlign = 'center';
|
|
649
|
-
ctx.
|
|
696
|
+
ctx.globalAlpha = isHover ? 1 : 0.7;
|
|
697
|
+
ctx.fillText(isHover ? n.id : label, n.x, n.y - r - 8);
|
|
698
|
+
ctx.globalAlpha = 1;
|
|
650
699
|
}
|
|
651
700
|
}
|
|
652
701
|
simulate();
|
|
@@ -680,7 +729,10 @@ setTimeout(() => {
|
|
|
680
729
|
canvas.style.cursor = n ? 'pointer' : 'grab';
|
|
681
730
|
if (n) {
|
|
682
731
|
const conns = graphEdges.filter(e => e.source === n || e.target === n);
|
|
683
|
-
|
|
732
|
+
const types = {};
|
|
733
|
+
conns.forEach(c => { types[c.type] = (types[c.type]||0)+1; });
|
|
734
|
+
const typeStr = Object.entries(types).map(([t,c]) => t+': '+c).join(', ');
|
|
735
|
+
tooltip.innerHTML = '<strong>' + n.id + '</strong><br>' + conns.length + ' connections<br><span style="color:var(--text3);font-size:.75rem">' + typeStr + '</span>';
|
|
684
736
|
tooltip.style.display = 'block';
|
|
685
737
|
tooltip.style.left = (p.x + 15) + 'px';
|
|
686
738
|
tooltip.style.top = (p.y - 10) + 'px';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export declare class SynapseRepository {
|
|
|
17
17
|
findConnected(nodeType: string, nodeId: number): SynapseRecord[];
|
|
18
18
|
findInactiveSince(cutoff: string): SynapseRecord[];
|
|
19
19
|
topByWeight(limit: number): SynapseRecord[];
|
|
20
|
+
topDiverse(perType: number): SynapseRecord[];
|
|
20
21
|
countNodes(): number;
|
|
21
22
|
totalCount(): number;
|
|
22
23
|
avgWeight(): number;
|
|
@@ -35,6 +35,12 @@ export class SynapseRepository {
|
|
|
35
35
|
countByType: db.prepare('SELECT synapse_type, COUNT(*) as count FROM synapses GROUP BY synapse_type'),
|
|
36
36
|
totalCount: db.prepare('SELECT COUNT(*) as count FROM synapses'),
|
|
37
37
|
topByWeight: db.prepare('SELECT * FROM synapses ORDER BY weight DESC LIMIT ?'),
|
|
38
|
+
topDiverse: db.prepare(`
|
|
39
|
+
SELECT * FROM (
|
|
40
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY synapse_type ORDER BY weight DESC) as rn
|
|
41
|
+
FROM synapses
|
|
42
|
+
) WHERE rn <= ? ORDER BY weight DESC
|
|
43
|
+
`),
|
|
38
44
|
};
|
|
39
45
|
}
|
|
40
46
|
create(data) {
|
|
@@ -91,6 +97,9 @@ export class SynapseRepository {
|
|
|
91
97
|
topByWeight(limit) {
|
|
92
98
|
return this.stmts.topByWeight.all(limit);
|
|
93
99
|
}
|
|
100
|
+
topDiverse(perType) {
|
|
101
|
+
return this.stmts.topDiverse.all(perType);
|
|
102
|
+
}
|
|
94
103
|
countNodes() {
|
|
95
104
|
const row = this.stmts.countNodes.get();
|
|
96
105
|
return row.count;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synapse.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/synapse.repository.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,iBAAiB;IAGR;IAFZ,KAAK,CAA4B;IAEzC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QACvC,IAAI,CAAC,KAAK,GAAG;YACX,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;;;OAGlB,CAAC;YACF,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC;YAC1D,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC;YACvD,WAAW,EAAE,EAAE,CAAC,OAAO,CACrB,qFAAqF,CACtF;YACD,WAAW,EAAE,EAAE,CAAC,OAAO,CACrB,qFAAqF,CACtF;YACD,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC;;;;OAIzB,CAAC;YACF,kBAAkB,EAAE,EAAE,CAAC,OAAO,CAAC;;;OAG9B,CAAC;YACF,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC;;OAE7B,CAAC;YACF,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;;;;;;OAMtB,CAAC;YACF,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC;YACvE,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,4EAA4E,CAAC;YACrG,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC;YAChE,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"synapse.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/synapse.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,10 +154,13 @@ export class AnalyticsService {
|
|
|
154
154
|
}
|
|
155
155
|
getNetworkOverview(limit = 10) {
|
|
156
156
|
const stats = this.synapseManager.getNetworkStats();
|
|
157
|
-
|
|
157
|
+
// Use diverse sampling for dashboard (spread across synapse types)
|
|
158
|
+
const diverse = limit >= 30
|
|
159
|
+
? this.synapseManager.getDiverseSynapses(Math.ceil(limit / 3))
|
|
160
|
+
: this.synapseManager.getStrongestSynapses(limit);
|
|
158
161
|
return {
|
|
159
162
|
stats,
|
|
160
|
-
strongestSynapses:
|
|
163
|
+
strongestSynapses: diverse.map(s => ({
|
|
161
164
|
id: s.id,
|
|
162
165
|
source: `${s.source_type}:${s.source_id}`,
|
|
163
166
|
target: `${s.target_type}:${s.target_id}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.service.js","sourceRoot":"","sources":["../../src/services/analytics.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"analytics.service.js","sourceRoot":"","sources":["../../src/services/analytics.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,9 @@ export class SynapseManager {
|
|
|
59
59
|
getStrongestSynapses(limit = 20) {
|
|
60
60
|
return this.repo.topByWeight(limit);
|
|
61
61
|
}
|
|
62
|
+
getDiverseSynapses(perType = 25) {
|
|
63
|
+
return this.repo.topDiverse(perType);
|
|
64
|
+
}
|
|
62
65
|
getNetworkStats() {
|
|
63
66
|
return {
|
|
64
67
|
totalNodes: this.repo.countNodes(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synapse-manager.js","sourceRoot":"","sources":["../../src/synapses/synapse-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"synapse-manager.js","sourceRoot":"","sources":["../../src/synapses/synapse-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@ export function dashboardCommand(): Command {
|
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
21
|
const network: any = await client.request('synapse.stats', {});
|
|
22
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
-
const networkOverview: any = await client.request('analytics.network', { limit:
|
|
23
|
+
const networkOverview: any = await client.request('analytics.network', { limit: 90 });
|
|
24
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
25
|
const insights: any = await client.request('research.insights', {
|
|
26
26
|
activeOnly: true,
|
|
@@ -328,7 +328,7 @@ function generateHtml(data: DashboardData): string {
|
|
|
328
328
|
|
|
329
329
|
/* Graph */
|
|
330
330
|
.graph-container{position:relative;background:var(--glass);border:1px solid var(--glass-border);border-radius:var(--radius);overflow:hidden;backdrop-filter:blur(20px)}
|
|
331
|
-
#synapse-graph{width:100%;height:
|
|
331
|
+
#synapse-graph{width:100%;height:650px;display:block;cursor:grab}
|
|
332
332
|
#synapse-graph:active{cursor:grabbing}
|
|
333
333
|
.graph-legend{display:flex;gap:16px;flex-wrap:wrap;padding:12px 20px;border-top:1px solid var(--glass-border);font-size:.8rem;color:var(--text2)}
|
|
334
334
|
.legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle}
|
|
@@ -394,11 +394,12 @@ function generateHtml(data: DashboardData): string {
|
|
|
394
394
|
<div class="graph-container">
|
|
395
395
|
<canvas id="synapse-graph"></canvas>
|
|
396
396
|
<div class="graph-legend">
|
|
397
|
-
<span><span class="legend-dot" style="background
|
|
398
|
-
<span><span class="legend-dot" style="background
|
|
399
|
-
<span><span class="legend-dot" style="background
|
|
400
|
-
<span><span class="legend-dot" style="background
|
|
401
|
-
<span><span class="legend-dot" style="background
|
|
397
|
+
<span><span class="legend-dot" style="background:#ff5577"></span> error</span>
|
|
398
|
+
<span><span class="legend-dot" style="background:#3dffa0"></span> solution</span>
|
|
399
|
+
<span><span class="legend-dot" style="background:#b47aff"></span> code_module</span>
|
|
400
|
+
<span><span class="legend-dot" style="background:#ffb347"></span> project</span>
|
|
401
|
+
<span><span class="legend-dot" style="background:#5b9cff"></span> rule</span>
|
|
402
|
+
<span style="margin-left:auto;color:var(--text3);font-size:.72rem">edges: co_occurs / solves / uses_module / depends_on</span>
|
|
402
403
|
</div>
|
|
403
404
|
<div id="graph-tooltip" class="graph-tooltip"></div>
|
|
404
405
|
</div>
|
|
@@ -564,7 +565,7 @@ setTimeout(() => {
|
|
|
564
565
|
});
|
|
565
566
|
}, 500);
|
|
566
567
|
|
|
567
|
-
// --- Synapse Force-Directed Graph ---
|
|
568
|
+
// --- Synapse Force-Directed Graph (Premium) ---
|
|
568
569
|
(function(){
|
|
569
570
|
const edges = ${JSON.stringify(synapseEdges.map((e: SynapseEdge) => ({ s: e.source, t: e.target, type: e.type, w: e.weight })))};
|
|
570
571
|
const canvas = document.getElementById('synapse-graph');
|
|
@@ -572,11 +573,17 @@ setTimeout(() => {
|
|
|
572
573
|
const ctx = canvas.getContext('2d');
|
|
573
574
|
const container = canvas.parentElement;
|
|
574
575
|
let W, H, dpr;
|
|
576
|
+
let frame = 0;
|
|
575
577
|
|
|
576
578
|
const NODE_COLORS = {
|
|
577
579
|
error: '#ff5577', solution: '#3dffa0', code_module: '#b47aff',
|
|
578
580
|
project: '#ffb347', rule: '#5b9cff', antipattern: '#ff5577'
|
|
579
581
|
};
|
|
582
|
+
const EDGE_COLORS = {
|
|
583
|
+
co_occurs: ['#5b9cff','#47e5ff'], solves: ['#3dffa0','#5bff8a'],
|
|
584
|
+
uses_module: ['#b47aff','#7a5cff'], depends_on: ['#ff5577','#ffb347'],
|
|
585
|
+
caused_by: ['#ff5577','#ff8866']
|
|
586
|
+
};
|
|
580
587
|
const DEFAULT_COLOR = '#47e5ff';
|
|
581
588
|
|
|
582
589
|
// Build graph nodes & edges
|
|
@@ -594,7 +601,7 @@ setTimeout(() => {
|
|
|
594
601
|
function resize() {
|
|
595
602
|
dpr = window.devicePixelRatio || 1;
|
|
596
603
|
W = container.clientWidth;
|
|
597
|
-
H =
|
|
604
|
+
H = 650;
|
|
598
605
|
canvas.width = W * dpr;
|
|
599
606
|
canvas.height = H * dpr;
|
|
600
607
|
canvas.style.width = W + 'px';
|
|
@@ -604,23 +611,33 @@ setTimeout(() => {
|
|
|
604
611
|
resize();
|
|
605
612
|
window.addEventListener('resize', resize);
|
|
606
613
|
|
|
607
|
-
//
|
|
614
|
+
// Cluster initial positions by type for better layout
|
|
615
|
+
const typeGroups = {};
|
|
608
616
|
for (const n of nodes) {
|
|
609
|
-
n.
|
|
610
|
-
n.
|
|
617
|
+
if (!typeGroups[n.type]) typeGroups[n.type] = [];
|
|
618
|
+
typeGroups[n.type].push(n);
|
|
611
619
|
}
|
|
620
|
+
const types = Object.keys(typeGroups);
|
|
621
|
+
types.forEach((t, i) => {
|
|
622
|
+
const angle = (i / types.length) * Math.PI * 2;
|
|
623
|
+
const cx = W/2 + Math.cos(angle) * W * 0.2;
|
|
624
|
+
const cy = H/2 + Math.sin(angle) * H * 0.2;
|
|
625
|
+
for (const n of typeGroups[t]) {
|
|
626
|
+
n.x = cx + (Math.random() - 0.5) * W * 0.25;
|
|
627
|
+
n.y = cy + (Math.random() - 0.5) * H * 0.25;
|
|
628
|
+
}
|
|
629
|
+
});
|
|
612
630
|
|
|
613
631
|
// Force simulation
|
|
614
|
-
const REPULSION =
|
|
615
|
-
const ATTRACTION = 0.
|
|
616
|
-
const DAMPING = 0.
|
|
617
|
-
const CENTER_GRAVITY = 0.
|
|
632
|
+
const REPULSION = 4000;
|
|
633
|
+
const ATTRACTION = 0.006;
|
|
634
|
+
const DAMPING = 0.88;
|
|
635
|
+
const CENTER_GRAVITY = 0.0015;
|
|
618
636
|
let hovered = null;
|
|
619
637
|
let dragging = null;
|
|
620
638
|
let dragOff = {x:0,y:0};
|
|
621
639
|
|
|
622
640
|
function simulate() {
|
|
623
|
-
// Repulsion
|
|
624
641
|
for (let i = 0; i < nodes.length; i++) {
|
|
625
642
|
for (let j = i + 1; j < nodes.length; j++) {
|
|
626
643
|
let dx = nodes[i].x - nodes[j].x;
|
|
@@ -633,69 +650,101 @@ setTimeout(() => {
|
|
|
633
650
|
nodes[j].vx -= fx; nodes[j].vy -= fy;
|
|
634
651
|
}
|
|
635
652
|
}
|
|
636
|
-
// Attraction along edges
|
|
637
653
|
for (const e of graphEdges) {
|
|
638
654
|
let dx = e.target.x - e.source.x;
|
|
639
655
|
let dy = e.target.y - e.source.y;
|
|
640
656
|
let dist = Math.sqrt(dx*dx + dy*dy) || 1;
|
|
641
|
-
let force = (dist -
|
|
657
|
+
let force = (dist - 120) * ATTRACTION * e.weight;
|
|
642
658
|
let fx = (dx / dist) * force;
|
|
643
659
|
let fy = (dy / dist) * force;
|
|
644
660
|
e.source.vx += fx; e.source.vy += fy;
|
|
645
661
|
e.target.vx -= fx; e.target.vy -= fy;
|
|
646
662
|
}
|
|
647
|
-
// Center gravity
|
|
648
663
|
for (const n of nodes) {
|
|
649
664
|
n.vx += (W/2 - n.x) * CENTER_GRAVITY;
|
|
650
665
|
n.vy += (H/2 - n.y) * CENTER_GRAVITY;
|
|
651
666
|
}
|
|
652
|
-
// Apply & damp
|
|
653
667
|
for (const n of nodes) {
|
|
654
668
|
if (n === dragging) continue;
|
|
655
669
|
n.vx *= DAMPING; n.vy *= DAMPING;
|
|
656
670
|
n.x += n.vx; n.y += n.vy;
|
|
657
|
-
n.x = Math.max(
|
|
658
|
-
n.y = Math.max(
|
|
671
|
+
n.x = Math.max(30, Math.min(W - 30, n.x));
|
|
672
|
+
n.y = Math.max(30, Math.min(H - 30, n.y));
|
|
659
673
|
}
|
|
660
674
|
}
|
|
661
675
|
|
|
662
|
-
function getNodeRadius(n) {
|
|
676
|
+
function getNodeRadius(n) {
|
|
677
|
+
return Math.min(20, 4 + Math.sqrt(n.connections) * 3.5);
|
|
678
|
+
}
|
|
663
679
|
|
|
664
680
|
function draw() {
|
|
681
|
+
frame++;
|
|
665
682
|
ctx.clearRect(0, 0, W, H);
|
|
666
|
-
|
|
683
|
+
|
|
684
|
+
// Edges with gradient colors per type
|
|
667
685
|
for (const e of graphEdges) {
|
|
668
|
-
const alpha = 0.
|
|
669
|
-
|
|
670
|
-
|
|
686
|
+
const alpha = 0.1 + e.weight * 0.4;
|
|
687
|
+
const colors = EDGE_COLORS[e.type] || ['#5b9cff','#47e5ff'];
|
|
688
|
+
const grad = ctx.createLinearGradient(e.source.x, e.source.y, e.target.x, e.target.y);
|
|
689
|
+
grad.addColorStop(0, colors[0] + Math.round(Math.min(0.7,alpha)*255).toString(16).padStart(2,'0'));
|
|
690
|
+
grad.addColorStop(1, colors[1] + Math.round(Math.min(0.7,alpha)*255).toString(16).padStart(2,'0'));
|
|
691
|
+
ctx.strokeStyle = grad;
|
|
692
|
+
ctx.lineWidth = 0.5 + e.weight * 2.5;
|
|
671
693
|
ctx.beginPath();
|
|
672
694
|
ctx.moveTo(e.source.x, e.source.y);
|
|
673
695
|
ctx.lineTo(e.target.x, e.target.y);
|
|
674
696
|
ctx.stroke();
|
|
675
697
|
}
|
|
676
|
-
|
|
698
|
+
|
|
699
|
+
// Nodes with ambient glow + pulse on hubs
|
|
677
700
|
for (const n of nodes) {
|
|
678
701
|
const r = getNodeRadius(n);
|
|
679
702
|
const color = NODE_COLORS[n.type] || DEFAULT_COLOR;
|
|
680
703
|
const isHover = n === hovered || n === dragging;
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
704
|
+
const isHub = n.connections >= 5;
|
|
705
|
+
|
|
706
|
+
// Ambient glow for all nodes
|
|
707
|
+
const glowSize = isHover ? 30 : (isHub ? 15 + Math.sin(frame * 0.03 + n.x) * 5 : 8);
|
|
708
|
+
ctx.shadowColor = color;
|
|
709
|
+
ctx.shadowBlur = glowSize;
|
|
710
|
+
|
|
711
|
+
// Outer ring for hubs
|
|
712
|
+
if (isHub || isHover) {
|
|
713
|
+
const pulseR = r + 3 + (isHub ? Math.sin(frame * 0.04 + n.y) * 2 : 0);
|
|
714
|
+
ctx.strokeStyle = color;
|
|
715
|
+
ctx.globalAlpha = isHover ? 0.6 : 0.25;
|
|
716
|
+
ctx.lineWidth = 1.5;
|
|
717
|
+
ctx.beginPath();
|
|
718
|
+
ctx.arc(n.x, n.y, pulseR, 0, Math.PI * 2);
|
|
719
|
+
ctx.stroke();
|
|
685
720
|
}
|
|
721
|
+
|
|
722
|
+
// Core node
|
|
723
|
+
ctx.globalAlpha = isHover ? 1 : 0.85;
|
|
686
724
|
ctx.fillStyle = color;
|
|
687
|
-
ctx.globalAlpha = isHover ? 1 : 0.8;
|
|
688
725
|
ctx.beginPath();
|
|
689
726
|
ctx.arc(n.x, n.y, r, 0, Math.PI * 2);
|
|
690
727
|
ctx.fill();
|
|
728
|
+
|
|
729
|
+
// Inner highlight (glossy effect)
|
|
730
|
+
ctx.globalAlpha = 0.3;
|
|
731
|
+
ctx.fillStyle = '#ffffff';
|
|
732
|
+
ctx.beginPath();
|
|
733
|
+
ctx.arc(n.x - r * 0.25, n.y - r * 0.25, r * 0.4, 0, Math.PI * 2);
|
|
734
|
+
ctx.fill();
|
|
735
|
+
|
|
691
736
|
ctx.globalAlpha = 1;
|
|
692
737
|
ctx.shadowBlur = 0;
|
|
693
|
-
|
|
738
|
+
|
|
739
|
+
// Labels
|
|
694
740
|
if (isHover || n.connections >= 4) {
|
|
741
|
+
const label = n.type === 'project' ? n.id.replace('project:','P') : n.id.split(':')[0];
|
|
695
742
|
ctx.fillStyle = '#e8eaf6';
|
|
696
|
-
ctx.font = (isHover ? 'bold ' : '') + '
|
|
743
|
+
ctx.font = (isHover ? 'bold 12px' : '10px') + ' Inter, system-ui, sans-serif';
|
|
697
744
|
ctx.textAlign = 'center';
|
|
698
|
-
ctx.
|
|
745
|
+
ctx.globalAlpha = isHover ? 1 : 0.7;
|
|
746
|
+
ctx.fillText(isHover ? n.id : label, n.x, n.y - r - 8);
|
|
747
|
+
ctx.globalAlpha = 1;
|
|
699
748
|
}
|
|
700
749
|
}
|
|
701
750
|
simulate();
|
|
@@ -729,7 +778,10 @@ setTimeout(() => {
|
|
|
729
778
|
canvas.style.cursor = n ? 'pointer' : 'grab';
|
|
730
779
|
if (n) {
|
|
731
780
|
const conns = graphEdges.filter(e => e.source === n || e.target === n);
|
|
732
|
-
|
|
781
|
+
const types = {};
|
|
782
|
+
conns.forEach(c => { types[c.type] = (types[c.type]||0)+1; });
|
|
783
|
+
const typeStr = Object.entries(types).map(([t,c]) => t+': '+c).join(', ');
|
|
784
|
+
tooltip.innerHTML = '<strong>' + n.id + '</strong><br>' + conns.length + ' connections<br><span style="color:var(--text3);font-size:.75rem">' + typeStr + '</span>';
|
|
733
785
|
tooltip.style.display = 'block';
|
|
734
786
|
tooltip.style.left = (p.x + 15) + 'px';
|
|
735
787
|
tooltip.style.top = (p.y - 10) + 'px';
|
|
@@ -45,6 +45,12 @@ export class SynapseRepository {
|
|
|
45
45
|
countByType: db.prepare('SELECT synapse_type, COUNT(*) as count FROM synapses GROUP BY synapse_type'),
|
|
46
46
|
totalCount: db.prepare('SELECT COUNT(*) as count FROM synapses'),
|
|
47
47
|
topByWeight: db.prepare('SELECT * FROM synapses ORDER BY weight DESC LIMIT ?'),
|
|
48
|
+
topDiverse: db.prepare(`
|
|
49
|
+
SELECT * FROM (
|
|
50
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY synapse_type ORDER BY weight DESC) as rn
|
|
51
|
+
FROM synapses
|
|
52
|
+
) WHERE rn <= ? ORDER BY weight DESC
|
|
53
|
+
`),
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
56
|
|
|
@@ -127,6 +133,10 @@ export class SynapseRepository {
|
|
|
127
133
|
return this.stmts.topByWeight.all(limit) as SynapseRecord[];
|
|
128
134
|
}
|
|
129
135
|
|
|
136
|
+
topDiverse(perType: number): SynapseRecord[] {
|
|
137
|
+
return this.stmts.topDiverse.all(perType) as SynapseRecord[];
|
|
138
|
+
}
|
|
139
|
+
|
|
130
140
|
countNodes(): number {
|
|
131
141
|
const row = this.stmts.countNodes.get() as { count: number };
|
|
132
142
|
return row.count;
|
|
@@ -207,11 +207,14 @@ export class AnalyticsService {
|
|
|
207
207
|
|
|
208
208
|
getNetworkOverview(limit: number = 10): NetworkOverview {
|
|
209
209
|
const stats = this.synapseManager.getNetworkStats();
|
|
210
|
-
|
|
210
|
+
// Use diverse sampling for dashboard (spread across synapse types)
|
|
211
|
+
const diverse = limit >= 30
|
|
212
|
+
? this.synapseManager.getDiverseSynapses(Math.ceil(limit / 3))
|
|
213
|
+
: this.synapseManager.getStrongestSynapses(limit);
|
|
211
214
|
|
|
212
215
|
return {
|
|
213
216
|
stats,
|
|
214
|
-
strongestSynapses:
|
|
217
|
+
strongestSynapses: diverse.map(s => ({
|
|
215
218
|
id: s.id,
|
|
216
219
|
source: `${s.source_type}:${s.source_id}`,
|
|
217
220
|
target: `${s.target_type}:${s.target_id}`,
|
|
@@ -97,6 +97,10 @@ export class SynapseManager {
|
|
|
97
97
|
return this.repo.topByWeight(limit);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
getDiverseSynapses(perType: number = 25): SynapseRecord[] {
|
|
101
|
+
return this.repo.topDiverse(perType);
|
|
102
|
+
}
|
|
103
|
+
|
|
100
104
|
getNetworkStats(): NetworkStats {
|
|
101
105
|
return {
|
|
102
106
|
totalNodes: this.repo.countNodes(),
|