personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Seed graph node positions by entity type for visual clustering

In the all-facets view, nodes of the same type now start near each other
(person top-left, company top-right, project bottom-left, tool bottom-right).
The force-directed solver refines from these initial positions. When a
specific facet is selected, no seeding is applied — layout is free-form
as before.

Only file changed: apps/graph/workspace.html

+15
+15
apps/graph/workspace.html
··· 474 474 unknown: '#a1a1aa', 475 475 }; 476 476 477 + const TYPE_SEEDS = { 478 + person: { x: -300, y: -200 }, 479 + company: { x: 300, y: -200 }, 480 + project: { x: -300, y: 200 }, 481 + tool: { x: 300, y: 200 }, 482 + unknown: { x: 0, y: 0 }, 483 + }; 484 + 477 485 const EDGE_REL_COLORS = { 478 486 'works-on': '#8b5cf6', 479 487 'works-at': '#06b6d4', ··· 547 555 font: { color: '#374151' }, 548 556 title: n.name + ' (' + n.type + ') — score: ' + n.score.toFixed(1), 549 557 _data: n, 558 + ...(window.selectedFacet ? {} : (() => { 559 + const seed = TYPE_SEEDS[n.type] || TYPE_SEEDS.unknown; 560 + return { 561 + x: seed.x + (Math.random() - 0.5) * 150, 562 + y: seed.y + (Math.random() - 0.5) * 150, 563 + }; 564 + })()), 550 565 }; 551 566 }); 552 567