mnemosyne-core 2.1.10 → 2.1.12

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.
@@ -54,7 +54,7 @@
54
54
  --success: #34d399;
55
55
 
56
56
  /* Effects */
57
- --glass: blur(20px) saturate(180%);
57
+ --glass: blur(20px);
58
58
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.4);
59
59
  --shadow-md: 0 4px 16px rgba(0,0,0,0.5);
60
60
  --shadow-lg: 0 12px 40px rgba(0,0,0,0.6);
@@ -85,10 +85,10 @@
85
85
  }
86
86
 
87
87
  /* Scrollbars */
88
- ::-webkit-scrollbar { width: 6px; height: 6px; }
89
- ::-webkit-scrollbar-track { background: transparent; }
90
- ::-webkit-scrollbar-thumb { background: rgba(99, 116, 155, 0.2); border-radius: 3px; }
91
- ::-webkit-scrollbar-thumb:hover { background: rgba(99, 116, 155, 0.3); }
88
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
89
+ ::-webkit-scrollbar-track { background: rgba(99, 116, 155, 0.08); border-radius: 4px; }
90
+ ::-webkit-scrollbar-thumb { background: rgba(99, 116, 155, 0.45); border-radius: 4px; }
91
+ ::-webkit-scrollbar-thumb:hover { background: rgba(99, 116, 155, 0.65); }
92
92
 
93
93
  /* ═══════════════════════════════════════════════════════════ */
94
94
  /* PART 8: TOP BAR */
@@ -1534,14 +1534,24 @@
1534
1534
  border-left: 1px solid var(--border-subtle);
1535
1535
  display: flex;
1536
1536
  flex-direction: column;
1537
+ overflow: hidden;
1537
1538
  z-index: 100;
1538
1539
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1539
1540
  }
1540
1541
  #sidebar-content {
1541
1542
  flex: 1;
1542
1543
  overflow-y: auto;
1544
+ overflow-x: hidden;
1543
1545
  min-height: 0;
1544
- }
1546
+ max-height: 100%;
1547
+ scrollbar-width: thin;
1548
+ scrollbar-color: rgba(99,116,155,0.55) transparent;
1549
+ padding-bottom: 24px;
1550
+ }
1551
+ #sidebar-content::-webkit-scrollbar { width: 8px; }
1552
+ #sidebar-content::-webkit-scrollbar-track { background: transparent; }
1553
+ #sidebar-content::-webkit-scrollbar-thumb { background: rgba(99,116,155,0.35); border-radius: 4px; }
1554
+ #sidebar-content::-webkit-scrollbar-thumb:hover { background: rgba(99,116,155,0.5); }
1545
1555
  #sidebar.collapsed {
1546
1556
  transform: translateX(100%);
1547
1557
  }
@@ -2847,7 +2857,7 @@
2847
2857
  .dropdown-menu {
2848
2858
  position: fixed;
2849
2859
  background: rgba(18, 22, 40, 0.98);
2850
- backdrop-filter: blur(24px) saturate(180%);
2860
+ backdrop-filter: blur(24px);
2851
2861
  border: 1px solid rgba(99, 116, 155, 0.25);
2852
2862
  border-radius: var(--radius-md);
2853
2863
  box-shadow: 0 20px 50px rgba(0,0,0,0.55), 0 0 0 1px rgba(99,102,241,0.06);
@@ -5724,23 +5734,24 @@ function updateGraph({ reheat = 0.3, newNodeIds = new Set() } = {}) {
5724
5734
  const viewCenterX = (width / 2 - transform.x) / transform.k;
5725
5735
  const viewCenterY = (height / 2 - transform.y) / transform.k;
5726
5736
 
5727
- simNodes = nodes.map(n => {
5737
+ // Respect display cap: only sync nodes that are currently rendered
5738
+ const displayNodeIds = new Set(simNodes.map(n => n.id));
5739
+ simNodes = nodes.filter(n => displayNodeIds.has(n.id)).map(n => {
5728
5740
  const old = oldNodeMap.get(n.id);
5729
5741
  if (old) {
5730
5742
  return { ...n, x: old.x, y: old.y, vx: old.vx, vy: old.vy, fx: old.fx, fy: old.fy };
5731
5743
  }
5732
5744
  const saved = savedLayout[n.id];
5733
5745
  if (saved) return { ...n, x: saved.x, y: saved.y, vx: 0, vy: 0 };
5734
- // NEW NODE — smart positioning near parent or viewport center
5735
- if (n.parent_id && oldNodeMap.has(n.parent_id)) {
5736
- const parent = oldNodeMap.get(n.parent_id);
5737
- return { ...n, x: parent.x + (Math.random() - 0.5) * 100, y: parent.y + (Math.random() - 0.5) * 100, vx: 0, vy: 0 };
5738
- }
5739
5746
  return { ...n, x: viewCenterX + (Math.random() - 0.5) * 60, y: viewCenterY + (Math.random() - 0.5) * 60, vx: 0, vy: 0 };
5740
5747
  });
5741
5748
 
5742
5749
  const nodeMap = new Map(simNodes.map(n => [n.id, n]));
5743
- simLinks = links.map(l => {
5750
+ simLinks = links.filter(l => {
5751
+ const s = typeof l.source === "object" ? l.source.id : l.source;
5752
+ const t = typeof l.target === "object" ? l.target.id : l.target;
5753
+ return displayNodeIds.has(s) && displayNodeIds.has(t);
5754
+ }).map(l => {
5744
5755
  const s = typeof l.source === "object" ? l.source.id : l.source;
5745
5756
  const t = typeof l.target === "object" ? l.target.id : l.target;
5746
5757
  const sourceNode = nodeMap.get(s);
@@ -5767,10 +5778,9 @@ function updateGraph({ reheat = 0.3, newNodeIds = new Set() } = {}) {
5767
5778
  .attr("class", d => `link-tree ${d.type === "root" ? "root-link" : "parent"}`)
5768
5779
  .attr("stroke", "#5eead4")
5769
5780
  .attr("stroke-opacity", 0)
5770
- .attr("stroke-width", d => d.type === "root" ? 1.5 : 2)
5771
- .attr("filter", "url(#tree-glow)");
5781
+ .attr("stroke-width", d => d.type === "root" ? 2 : 3);
5772
5782
  treeEnter.transition().duration(400)
5773
- .attr("stroke-opacity", d => d.type === "root" ? 0.5 : 0.85);
5783
+ .attr("stroke-opacity", d => d.type === "root" ? 0.7 : 1);
5774
5784
  linkTreeSel = treeEnter.merge(linkTreeSel);
5775
5785
 
5776
5786
  // Bond links (grouped with handles)
@@ -5991,7 +6001,7 @@ function select(d) {
5991
6001
  if (t === id && !visibleIds.has(s)) { visibleIds.add(s); queue.push(s); }
5992
6002
  });
5993
6003
  }
5994
- d3.selectAll(".atom-group").transition().duration(300).style("opacity", n => visibleIds.has(n.id) ? 1 : 0.08);
6004
+ d3.selectAll(".atom-group").transition().duration(300).style("opacity", n => visibleIds.has(n.id) ? 1 : 0.35);
5995
6005
  d3.selectAll(".link-tree, .link-bond").transition().duration(300).style("opacity", l => {
5996
6006
  const s = typeof l.source === "object" ? l.source.id : l.source;
5997
6007
  const t = typeof l.target === "object" ? l.target.id : l.target;
@@ -6005,7 +6015,7 @@ function select(d) {
6005
6015
  if (s === d.id) visibleIds.add(t);
6006
6016
  if (t === d.id) visibleIds.add(s);
6007
6017
  });
6008
- d3.selectAll(".atom-group").transition().duration(300).style("opacity", n => visibleIds.has(n.id) ? 1 : 0.15);
6018
+ d3.selectAll(".atom-group").transition().duration(300).style("opacity", n => visibleIds.has(n.id) ? 1 : 0.5);
6009
6019
  d3.selectAll(".link-tree, .link-bond").transition().duration(300).style("opacity", 1);
6010
6020
  }
6011
6021
  } else if (!currentSearchQuery) {
package/dist/index.js CHANGED
@@ -201,7 +201,7 @@ function getVersion() {
201
201
  const pkg = JSON.parse(readFileSync6(resolve9(process.cwd(), "package.json"), "utf-8"));
202
202
  return pkg.version;
203
203
  } catch {
204
- return "2.1.10";
204
+ return "2.1.11";
205
205
  }
206
206
  }
207
207
  }
@@ -5391,7 +5391,7 @@ function getVersion2() {
5391
5391
  const pkg = JSON.parse(readFileSync6(resolve9(process.cwd(), "package.json"), "utf-8"));
5392
5392
  return pkg.version;
5393
5393
  } catch {
5394
- return "2.1.10";
5394
+ return "2.1.11";
5395
5395
  }
5396
5396
  }
5397
5397
  }
@@ -5978,7 +5978,7 @@ function getVersion3() {
5978
5978
  const pkg = JSON.parse(readFileSync6(resolve9(process.cwd(), "package.json"), "utf-8"));
5979
5979
  return pkg.version;
5980
5980
  } catch {
5981
- return "2.1.10";
5981
+ return "2.1.11";
5982
5982
  }
5983
5983
  }
5984
5984
  }
@@ -7144,7 +7144,7 @@ var PKG_VERSION = (() => {
7144
7144
  const pkg = JSON.parse(require("fs").readFileSync(require("path").resolve(__dirname, "../../package.json"), "utf-8"));
7145
7145
  return pkg.version;
7146
7146
  } catch {
7147
- return "2.1.10";
7147
+ return "2.1.11";
7148
7148
  }
7149
7149
  })();
7150
7150
  function handleHealth(store, pathname, method, res) {
@@ -7509,7 +7509,7 @@ var MnemosyneServer = class {
7509
7509
  const wss = new import_websocket_server.default({ server: this.httpServer });
7510
7510
  this.wsHandler = new WebSocketHandler(wss, this.store);
7511
7511
  }
7512
- const version = cfg?.server?.version || "2.1.10";
7512
+ const version = cfg?.server?.version || "2.1.11";
7513
7513
  this.httpServer.listen(port, () => {
7514
7514
  console.log(`Mnemosyne v${version} \u2014 port ${port}`);
7515
7515
  console.log(`Dashboard: http://${host}:${port}/dashboard`);