Session graph

{#if nodes.length} {nodes.length} {nodes.length === 1 ? 'entity' : 'entities'} {/if}
{#if nodes.length === 0}

Entities Nomos explores in this conversation appear here, wired up by their relationships.

{:else} {#each links as link} {@const s = endpoint(link.source)} {@const t = endpoint(link.target)} {#if s?.x != null && t?.x != null && s?.y != null && t?.y != null} {@const focus = selected && (s.slug === selected.slug || t.slug === selected.slug)} {link.type} {/if} {/each} {#each nodes as node (node.slug)} {#if node.x != null && node.y != null} {@const r = nodeRadius(node)} {@const isSel = selected?.slug === node.slug} {@const dim = selected && !isSel && !selectedRelations.some((rel) => rel.other === node.slug)} onNodeDown(e, node)} onkeydown={(e) => e.key === 'Enter' && (selected = node)} > {#if isSel} {/if} {shortName(node.slug)} {/if} {/each} {/if}
{#if selected}
{selected.slug} {selected.type} {#if selected.state}{selected.state}{/if}
{#if selected.health}
{selected.health} · checked {relativeTime(selected.last_check_at)}
{/if} {#if selected.attributes && Object.keys(selected.attributes).length}

Attributes

{#each Object.entries(selected.attributes).slice(0, 6) as [key, value]}
{key}
{typeof value === 'object' ? JSON.stringify(value) : String(value)}
{/each}
{/if} {#if selectedRelations.length}

Relations ({selectedRelations.length})

{#each selectedRelations as rel}
{rel.dir} {rel.type} →
{/each}
{/if}
{/if}