@andespindola/brainlink 0.1.0-beta.45 → 0.1.0-beta.47

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.
@@ -500,17 +500,17 @@ const fallbackViewportNodes = () => {
500
500
  return nodes
501
501
  }
502
502
 
503
- const sampleVisibleNodes = (limit = renderNodeBudget) => {
504
- if (state.visibleNodes.length === 0 || limit <= 0) {
503
+ const sampleVisibleNodes = (limit = renderNodeBudget, sourceNodes = state.visibleNodes) => {
504
+ if (sourceNodes.length === 0 || limit <= 0) {
505
505
  return []
506
506
  }
507
507
 
508
508
  const nodes = []
509
- const maxNodes = Math.min(Math.max(limit, 1), state.visibleNodes.length)
510
- const step = Math.max(1, Math.ceil(state.visibleNodes.length / maxNodes))
509
+ const maxNodes = Math.min(Math.max(limit, 1), sourceNodes.length)
510
+ const step = Math.max(1, Math.ceil(sourceNodes.length / maxNodes))
511
511
 
512
- for (let index = 0; index < state.visibleNodes.length && nodes.length < maxNodes; index += step) {
513
- nodes.push(state.visibleNodes[index])
512
+ for (let index = 0; index < sourceNodes.length && nodes.length < maxNodes; index += step) {
513
+ nodes.push(sourceNodes[index])
514
514
  }
515
515
 
516
516
  if (state.selected && !nodes.find(node => node.id === state.selected.id)) {
@@ -978,43 +978,17 @@ const computeRenderVisibility = () => {
978
978
  return
979
979
  }
980
980
 
981
- if (state.visibleNodes.length > massiveGraphNodeThreshold && state.transform.scale <= 0.035) {
982
- const viewportClusters = filterOverviewClustersByViewport(viewport)
983
- const clusters = viewportClusters.length > 0
984
- ? viewportClusters
985
- : state.overviewClusters.slice(0, Math.min(220, state.overviewClusters.length))
986
- const clusterLimit = clusterBudgetForScale(state.transform.scale)
987
- const limitedClusters = clusters.slice(0, Math.min(clusterLimit, clusters.length))
988
- if (limitedClusters.length > 0) {
989
- state.renderClusters = limitedClusters
990
- state.renderNodes = limitedClusters.map((cluster) => cluster.representative)
991
- state.renderEdges = []
992
- return
993
- }
994
- }
995
-
996
- if (state.visibleNodes.length > massiveGraphNodeThreshold && state.transform.scale <= 0.06) {
997
- const viewportClusters = filterOverviewClustersByViewport(viewport)
998
- const clusters = viewportClusters.length > 0
999
- ? viewportClusters
1000
- : state.overviewClusters.slice(0, Math.min(400, state.overviewClusters.length))
1001
- const clusterLimit = clusterBudgetForScale(state.transform.scale)
1002
- const limitedClusters = clusters.slice(0, Math.min(clusterLimit, clusters.length))
1003
- if (limitedClusters.length > 0) {
1004
- state.renderClusters = limitedClusters
1005
- state.renderNodes = limitedClusters.map((cluster) => cluster.representative)
1006
- state.renderEdges = []
1007
- return
1008
- }
1009
- }
1010
-
1011
981
  if (state.visibleNodes.length > massiveGraphNodeThreshold) {
982
+ const viewportNodes = viewportNodesFromSpatialIndex(viewport)
983
+ const sourceNodes = viewportNodes.length > 0 ? viewportNodes : state.visibleNodes
1012
984
  const sampleLimit = nodeBudgetForScale(state.transform.scale)
1013
- const sampled = sampleVisibleNodes(Math.min(sampleLimit, renderNodeBudget))
985
+ const sampled = sourceNodes.length > sampleLimit
986
+ ? sampleVisibleNodes(Math.min(sampleLimit, renderNodeBudget), sourceNodes)
987
+ : sourceNodes.slice(0, Math.min(sourceNodes.length, renderNodeBudget))
1014
988
  const sampledIds = new Set(sampled.map((node) => node.id))
1015
989
  state.renderClusters = []
1016
990
  state.renderNodes = sampled
1017
- state.renderEdges = state.transform.scale >= 0.12 ? collectVisibleEdgesForNodes(sampledIds) : []
991
+ state.renderEdges = state.transform.scale >= 0.1 ? collectVisibleEdgesForNodes(sampledIds) : []
1018
992
  return
1019
993
  }
1020
994
 
@@ -1169,9 +1143,15 @@ const render = now => {
1169
1143
  } else {
1170
1144
  state.offscreenFrameCount = 0
1171
1145
  }
1146
+ const minimumEdgeScale =
1147
+ state.nodes.length > massiveGraphNodeThreshold
1148
+ ? 0.1
1149
+ : state.nodes.length > largeGraphNodeThreshold
1150
+ ? 0.16
1151
+ : 0
1172
1152
  const drawEdges =
1173
1153
  state.renderClusters.length === 0 &&
1174
- !(state.nodes.length > largeGraphNodeThreshold && state.transform.scale < 0.22)
1154
+ state.transform.scale >= minimumEdgeScale
1175
1155
  if (drawEdges) {
1176
1156
  state.renderEdges.forEach(edge => {
1177
1157
  const selectedEdge = state.selected && (edge.source === state.selected.id || edge.target === state.selected.id)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andespindola/brainlink",
3
- "version": "0.1.0-beta.45",
3
+ "version": "0.1.0-beta.47",
4
4
  "description": "Local-first knowledge memory for agents with Markdown, backlinks, indexing and context retrieval.",
5
5
  "type": "module",
6
6
  "license": "MIT",