@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.
@@ -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: 50 });
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:500px;display:block;cursor:grab}
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:var(--blue)"></span> error</span>
349
- <span><span class="legend-dot" style="background:var(--green)"></span> solution</span>
350
- <span><span class="legend-dot" style="background:var(--purple)"></span> code_module</span>
351
- <span><span class="legend-dot" style="background:var(--orange)"></span> project</span>
352
- <span><span class="legend-dot" style="background:var(--cyan)"></span> other</span>
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 = 500;
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
- // Random initial positions
565
+ // Cluster initial positions by type for better layout
566
+ const typeGroups = {};
559
567
  for (const n of nodes) {
560
- n.x = W * 0.2 + Math.random() * W * 0.6;
561
- n.y = H * 0.2 + Math.random() * H * 0.6;
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 = 3000;
566
- const ATTRACTION = 0.008;
567
- const DAMPING = 0.85;
568
- const CENTER_GRAVITY = 0.002;
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 - 100) * ATTRACTION * e.weight;
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(20, Math.min(W - 20, n.x));
609
- n.y = Math.max(20, Math.min(H - 20, n.y));
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) { return Math.min(16, 5 + n.connections * 1.5); }
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
- // Edges
634
+
635
+ // Edges with gradient colors per type
618
636
  for (const e of graphEdges) {
619
- const alpha = 0.15 + e.weight * 0.5;
620
- ctx.strokeStyle = 'rgba(91,156,255,' + Math.min(0.8, alpha) + ')';
621
- ctx.lineWidth = 0.5 + e.weight * 2;
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
- // Nodes
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
- // Glow
633
- if (isHover) {
634
- ctx.shadowColor = color;
635
- ctx.shadowBlur = 20;
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
- // Label for hovered or large nodes
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 ' : '') + '11px Inter, system-ui, sans-serif';
694
+ ctx.font = (isHover ? 'bold 12px' : '10px') + ' Inter, system-ui, sans-serif';
648
695
  ctx.textAlign = 'center';
649
- ctx.fillText(n.id, n.x, n.y - r - 6);
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
- tooltip.innerHTML = '<strong>' + n.id + '</strong><br>' + conns.length + ' connections';
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;SAC/E,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAmB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,eAAyB,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAA8B,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,IAAmB;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,EAAE,CAAE,IAAgC,CAAC,GAAG,CAAC,KAAK,SAAS,CAC9D,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,uBAAuB,UAAU,+CAA+C,CACjF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,UAAkB,EAAE,QAAgB;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAoB,CAAC;IAC7E,CAAC;IAED,WAAW,CAAC,UAAkB,EAAE,QAAgB;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAoB,CAAC;IAC7E,CAAC;IAED,kBAAkB,CAChB,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,QAAgB,EAChB,WAAmB;QAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CACtC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAC3B,CAAC;IACjC,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,SAAkB;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,+EAA+E,CAChF,CAAC;YACF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAoB,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAoB,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,MAAc;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAoB,CAAC;IAC7F,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAoB,CAAC;IACrE,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAoB,CAAC;IAC9D,CAAC;IAED,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAuB,CAAC;QAC7D,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAuB,CAAC;QAC7D,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAmC,CAAC;QACxE,OAAO,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAoD,CAAC;QAC5F,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
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
- const strongest = this.synapseManager.getStrongestSynapses(limit);
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: strongest.map(s => ({
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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"}
@@ -26,5 +26,6 @@ export declare class SynapseManager {
26
26
  insights: ActivationResult[];
27
27
  };
28
28
  getStrongestSynapses(limit?: number): SynapseRecord[];
29
+ getDiverseSynapses(perType?: number): SynapseRecord[];
29
30
  getNetworkStats(): NetworkStats;
30
31
  }
@@ -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":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAyB,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAoB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,OAAO,cAAc;IAIf;IACA;IAJF,MAAM,GAAG,SAAS,EAAE,CAAC;IAE7B,YACU,IAAuB,EACvB,MAAsB;QADtB,SAAI,GAAJ,IAAI,CAAmB;QACvB,WAAM,GAAN,MAAM,CAAgB;IAC7B,CAAC;IAEJ,UAAU,CACR,MAAe,EACf,MAAe,EACf,WAAwB,EACxB,OAAiC;QAEjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACvH,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE;YACxD,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACtC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SAC3C,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,SAAiB,GAAG;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,SAAS,cAAc,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE;YAC3B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACtC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SAC3C,EAAE,MAAM,CAAC,CAAC;IACb,CAAC;IAED,IAAI,CACF,MAAe,EACf,MAAe,EACf,WAAwB;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CACjC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAC5D,CAAC;IACJ,CAAC;IAED,QAAQ,CACN,SAAkB,EAClB,QAAiB,EACjB,SAAkB;QAElB,OAAO,mBAAmB,CACxB,IAAI,CAAC,IAAI,EACT,SAAS,EACT,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAChC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7C,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,IAAa,EAAE,EAAW,EAAE,QAAiB;QACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;YACjC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAChD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YAC1C,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,OAAe;QAO7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;YACtD,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;YACvD,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;YAC/D,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;YACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;SACrD,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,QAAgB,EAAE;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,eAAe;QACb,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACrC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAChC,WAAW,EAAE,EAA8B;YAC3C,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAiC;SACvE,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"synapse-manager.js","sourceRoot":"","sources":["../../src/synapses/synapse-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Adaptive error memory and code intelligence system with Hebbian synapse network, hybrid search, and REST API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -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: 50 });
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:500px;display:block;cursor:grab}
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:var(--blue)"></span> error</span>
398
- <span><span class="legend-dot" style="background:var(--green)"></span> solution</span>
399
- <span><span class="legend-dot" style="background:var(--purple)"></span> code_module</span>
400
- <span><span class="legend-dot" style="background:var(--orange)"></span> project</span>
401
- <span><span class="legend-dot" style="background:var(--cyan)"></span> other</span>
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 = 500;
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
- // Random initial positions
614
+ // Cluster initial positions by type for better layout
615
+ const typeGroups = {};
608
616
  for (const n of nodes) {
609
- n.x = W * 0.2 + Math.random() * W * 0.6;
610
- n.y = H * 0.2 + Math.random() * H * 0.6;
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 = 3000;
615
- const ATTRACTION = 0.008;
616
- const DAMPING = 0.85;
617
- const CENTER_GRAVITY = 0.002;
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 - 100) * ATTRACTION * e.weight;
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(20, Math.min(W - 20, n.x));
658
- n.y = Math.max(20, Math.min(H - 20, n.y));
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) { return Math.min(16, 5 + n.connections * 1.5); }
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
- // Edges
683
+
684
+ // Edges with gradient colors per type
667
685
  for (const e of graphEdges) {
668
- const alpha = 0.15 + e.weight * 0.5;
669
- ctx.strokeStyle = 'rgba(91,156,255,' + Math.min(0.8, alpha) + ')';
670
- ctx.lineWidth = 0.5 + e.weight * 2;
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
- // Nodes
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
- // Glow
682
- if (isHover) {
683
- ctx.shadowColor = color;
684
- ctx.shadowBlur = 20;
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
- // Label for hovered or large nodes
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 ' : '') + '11px Inter, system-ui, sans-serif';
743
+ ctx.font = (isHover ? 'bold 12px' : '10px') + ' Inter, system-ui, sans-serif';
697
744
  ctx.textAlign = 'center';
698
- ctx.fillText(n.id, n.x, n.y - r - 6);
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
- tooltip.innerHTML = '<strong>' + n.id + '</strong><br>' + conns.length + ' connections';
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
- const strongest = this.synapseManager.getStrongestSynapses(limit);
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: strongest.map(s => ({
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(),