export interface GraphEntity { /** Unique identifier for this entity in the graph. */ entityId?: string; /** * Hydration is set on Source nodes in AuxiliaryRelations only, and omitted * everywhere else. RELATES_TO MERGEs its target by source_id, so a target * that has not been ingested yet still exists as a node — callers must be * able to tell a real document from a forward reference to one. * * resolved — ingested; source_id and app_provider both present * stub — MERGE-created target; source_id present, no app_provider * placeholder — source_id IS NULL, keyed by app_external_id, awaiting * builder.py's reconciliation pass */ hydration?: string; /** NO omitempty — serialize as null */ identifier?: string; /** Human-readable label for this resource. */ name?: string; /** Namespace grouping for the entity (e.g. `organization`, `person`). */ namespace?: string; /** * Provider is the source app the entity's evidence chunk came from (e.g. * "slack", "google", "intercom"), read from the owning Source node's * app_provider. Empty string when the evidence has no app source (plain * document / web ingest). Consumed by the dashboard to render a connector * logo inside the graph node. */ provider?: string; /** Entity type label (e.g. `knowledge`, `person`, `organization`). */ type?: string; }