@andespindola/brainlink 0.1.0-beta.74 → 0.1.0-beta.75

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/README.md CHANGED
@@ -594,7 +594,7 @@ The graph UI shows:
594
594
  - double-click on canvas zooms in at cursor position
595
595
  - floating graph totals (notes, links, tags) below the Brainlink title
596
596
  - large-graph rendering safeguards (edge draw caps, lower redraw rate, zoom-aware interaction)
597
- - massive-graph LOD progression: very low zoom uses spatial overview clusters to preserve whole-vault shape, then progressively reveals nodes and edges as zoom increases
597
+ - massive-graph LOD progression: very low zoom uses spatial overview sampling to preserve whole-vault shape while keeping node visuals consistent, then progressively reveals nodes and edges as zoom increases
598
598
 
599
599
  The server indexes before starting by default. Use `--no-index` to skip that step:
600
600
 
@@ -1758,6 +1758,18 @@ const clusterViewportNodes = viewportNodes => {
1758
1758
  }))
1759
1759
  }
1760
1760
 
1761
+ const representativeNodesFromClusters = (clusters, limit) => {
1762
+ const representatives = clusters
1763
+ .map((cluster) => cluster.representative)
1764
+ .filter((node) => Boolean(node))
1765
+ const merged = mergeUniqueNodes(
1766
+ representatives,
1767
+ state.renderNodes ?? [],
1768
+ Math.max(1, limit)
1769
+ )
1770
+ return ensureHubNodesInRenderedSet(merged)
1771
+ }
1772
+
1761
1773
  const computeRenderVisibility = () => {
1762
1774
  if (!hasValidTransform()) {
1763
1775
  fitView({ useFiltered: true })
@@ -1816,8 +1828,11 @@ const computeRenderVisibility = () => {
1816
1828
  .sort((left, right) => right.count - left.count)
1817
1829
  .slice(0, Math.min(renderNodeBudget, clusterBudgetForScale(state.transform.scale)))
1818
1830
  if (overviewClusters.length > 0) {
1819
- state.renderClusters = overviewClusters
1820
- state.renderNodes = overviewClusters.map((cluster) => cluster.representative)
1831
+ state.renderClusters = []
1832
+ state.renderNodes = representativeNodesFromClusters(
1833
+ overviewClusters,
1834
+ Math.min(renderNodeBudget, clusterBudgetForScale(state.transform.scale))
1835
+ )
1821
1836
  state.renderEdges = []
1822
1837
  return
1823
1838
  }
@@ -1877,8 +1892,8 @@ const computeRenderVisibility = () => {
1877
1892
  const viewportNodes = viewportNodesFromSpatialIndex(viewport)
1878
1893
  const clusters = clusterViewportNodes(viewportNodes)
1879
1894
  if (clusters.length > 0) {
1880
- state.renderClusters = clusters
1881
- state.renderNodes = clusters.map(cluster => cluster.representative)
1895
+ state.renderClusters = []
1896
+ state.renderNodes = representativeNodesFromClusters(clusters, Math.min(renderNodeBudget, 900))
1882
1897
  state.renderEdges = []
1883
1898
  return
1884
1899
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andespindola/brainlink",
3
- "version": "0.1.0-beta.74",
3
+ "version": "0.1.0-beta.75",
4
4
  "description": "Local-first knowledge memory for agents with Markdown, backlinks, indexing and context retrieval.",
5
5
  "type": "module",
6
6
  "license": "MIT",