@andespindola/brainlink 0.1.0-beta.106 → 0.1.0-beta.107

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
@@ -604,7 +604,7 @@ The graph UI shows:
604
604
  - WebGL node and edge acceleration when supported, falling back to Canvas 2D without changing graph behavior
605
605
  - compact macro-to-micro density progression so reset keeps the graph mass oriented and zoom-in separates local neighborhoods progressively
606
606
  - graph camera treats hub-centered navigation as structural only when the hub is dominant; diffuse stress graphs reset and zoom around the full graph mass
607
- - graph LOD progression: hierarchical rendering now follows one recursive graph-of-graphs standard whenever a graph has more than one hierarchy level; each level expands through intermediate subgraph sizes (instead of jumping directly to leaves), starts from a memory-hub-centered mesh, and each supernode can expand into another same-shape subgraph level (up to 999 children) with latent fade-in, aggregated real links and local sibling mesh links so org-heavy-like and stress-50k-like structures share the same layered behavior at different depths; layered clusters also receive perspective depth projection (Z-depth) so expansion reads as a true depth field instead of a flat 2D switch; for massive graphs the first expansion starts deeper in zoom and is additionally gated by focus readiness (screen-space isolation of the focused parent) so child levels open only when that subgraph is truly centered and separated in view
607
+ - graph LOD progression: hierarchical rendering now follows one recursive graph-of-graphs standard whenever a graph has more than one hierarchy level; each level expands through intermediate subgraph sizes (instead of jumping directly to leaves), starts from a memory-hub-centered mesh, and each supernode can expand into another same-shape subgraph level (up to 999 children) with latent fade-in, aggregated real links and local sibling mesh links so org-heavy-like and stress-50k-like structures share the same layered behavior at different depths; layered clusters also receive stronger perspective depth projection (Z-depth) with vertical camera tilt/parallax so expansion reads as a true depth field instead of a flat 2D switch; for massive graphs the first expansion starts deeper in zoom and is additionally gated by focus readiness (screen-space isolation of the focused parent) so child levels open only when that subgraph is truly centered and separated in view
608
608
 
609
609
  The server indexes before starting by default. Use `--no-index` to skip that step:
610
610
 
@@ -31,10 +31,12 @@ const massiveEcosystemClusterScaleThreshold = 4.2
31
31
  const ecosystemSubgraphScaleThreshold = 0.18
32
32
  const ecosystemMicroScaleThreshold = 0.08
33
33
  const ecosystemFocusedParentLimit = 2
34
- const ecosystemDepthNear = 36
35
- const ecosystemDepthFar = 560
36
- const ecosystemDepthPerspective = 1400
37
- const ecosystemDepthOpacityFloor = 0.42
34
+ const ecosystemDepthNear = 80
35
+ const ecosystemDepthFar = 2600
36
+ const ecosystemDepthPerspective = 620
37
+ const ecosystemDepthTiltY = 0.24
38
+ const ecosystemDepthMinScale = 0.24
39
+ const ecosystemDepthOpacityFloor = 0.2
38
40
  const zoomRecoveryGuardMs = 4200
39
41
  const zoomCapTargetViewportShare = 0.72
40
42
  const meshEdgeScaleThreshold = 0.09
@@ -1177,10 +1179,12 @@ const ecosystemDepthForCluster = (cluster, levelIndexMap) => {
1177
1179
  }
1178
1180
 
1179
1181
  const projectEcosystemPoint = (x, y, depth, anchor) => {
1180
- const factor = ecosystemDepthPerspective / (ecosystemDepthPerspective + Math.max(0, depth))
1182
+ const safeDepth = Math.max(0, depth)
1183
+ const factor = ecosystemDepthPerspective / (ecosystemDepthPerspective + safeDepth)
1184
+ const verticalTilt = safeDepth * ecosystemDepthTiltY
1181
1185
  return {
1182
1186
  x: anchor.x + (x - anchor.x) * factor,
1183
- y: anchor.y + (y - anchor.y) * factor,
1187
+ y: anchor.y + (y - anchor.y) * factor - verticalTilt,
1184
1188
  factor
1185
1189
  }
1186
1190
  }
@@ -1195,9 +1199,10 @@ const applyEcosystemDepthProjection = (clusters, edges, anchor) => {
1195
1199
  const depth = ecosystemDepthForCluster(cluster, levelIndexMap)
1196
1200
  const projected = projectEcosystemPoint(cluster.x, cluster.y, depth, anchor)
1197
1201
  const baseOpacity = Number.isFinite(cluster.lodOpacity) ? cluster.lodOpacity : 1
1202
+ const depthScale = ecosystemDepthMinScale + (1 - ecosystemDepthMinScale) * projected.factor
1198
1203
  const depthOpacity = Math.max(
1199
1204
  ecosystemDepthOpacityFloor,
1200
- Math.min(1, 0.58 + projected.factor * 0.62)
1205
+ Math.min(1, depthScale * 1.08)
1201
1206
  )
1202
1207
  const projectedCluster = {
1203
1208
  ...cluster,
@@ -1205,7 +1210,7 @@ const applyEcosystemDepthProjection = (clusters, edges, anchor) => {
1205
1210
  y: projected.y,
1206
1211
  lodOpacity: baseOpacity * depthOpacity,
1207
1212
  depth,
1208
- depthScale: projected.factor
1213
+ depthScale
1209
1214
  }
1210
1215
  projectedClusters.push(projectedCluster)
1211
1216
  clusterById.set(projectedCluster.id, projectedCluster)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andespindola/brainlink",
3
- "version": "0.1.0-beta.106",
3
+ "version": "0.1.0-beta.107",
4
4
  "description": "Local-first knowledge memory for agents with Markdown, backlinks, indexing and context retrieval.",
5
5
  "type": "module",
6
6
  "license": "MIT",